首页 > 代码库 > 程序的自我复制
程序的自我复制
计算机病毒的定义是:
计算机病毒(Computer Virus)是编制者在计算机程序中插入的破坏计算机功能或者数据的代码,能影响计算机使用,能自我复制的一组计算机指令或者程序代码。
由此可见 计算机病毒的两大特点是影响计算机使用与自我复制。本文从windows平台的下分析自我复制的实践操作。
程序,本质是一个二进制文件,其中包含了平台相关的计算机指令。一个在运行中的程序,被加载到内存中,它在存储介质中的可执行文件通常是不可被修改,但是可以访问其中的内容。由此可以通过拷贝其中的数据,再创建一份一样的二进制文件即可复制一个可执行的文件。
demo中的代码省略部分异常处理
int copyfile(const char* srcFile,const char* desFile) { FILE* fp_in = NULL; FILE* fp_out = NULL; long nFileSize = 0; size_t rByte = 0; size_t wSize = 0; char copyBuf[1] = {0}; fp_in = fopen(srcFile,"rb"); if(!fp_in) { perror("OPEN_FILE_FIAL"); return -1; } if( !fseek(fp_in,0L,SEEK_END) ) { nFileSize = ftell(fp_in); fseek(fp_in,0L,SEEK_SET); } else { perror("GET_FILE_SIZE_FAIL"); return -1; } if( nFileSize > 0 && (fp_out = fopen(desFile,"wb+") ) ) { wSize = 0; while(fp_out && 0 == feof(fp_in) ) { if(rByte = fread(copyBuf,sizeof(copyBuf),1,fp_in) ) { wSize += fwrite(copyBuf,sizeof(copyBuf),rByte,fp_out); if(wSize > 1024)//1K时缓冲区数据存盘 { fflush(fp_out); wSize = 0; } } } fclose(fp_out); } fclose(fp_in); return 0; }
以下代码将一个正在运行的程序的可执行文件复制一份到当前目录下
char szAppPath[MAX_PATH] = {0}; char szDesPath[MAX_PATH] = {0}; char* pChar = NULL; GetModuleFileName(NULL,szAppPath,MAX_PATH);//获取当前程序绝对路径 if( pChar = strstr(szAppPath,".exe") ) { strncpy(szDesPath,szAppPath,pChar - szAppPath); strcat(szDesPath,"_.exe"); if( !copyfile(szAppPath,szDesPath)) { //复制成功 } } else { //是否是可执行文件? }
当你得到了一个可执行文件的拷贝时,便可进行后续的操作。如果这是一个dll也是类似的处理。
程序的自我复制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。