zoukankan      html  css  js  c++  java
  • 刀锋上前行!绕过Ramint蠕虫病毒直接脱壳

    系统 : Windows xp

    程序 : 某游戏客户端

    程序下载地址 :不提供

    要求 : 脱去压缩壳

    使用工具 : OD & PEID & LordPE & Import REC

    被感染客户端中的是Ramint蠕虫病毒,感染速度非常快,危害相当大。建议在虚拟机环境下进行逆向分析。

    相关资料:

    Ramnit(W32.Ramnit)的初始形态是蠕虫病毒,首次出现于2010年,激进的自繁殖策略使其得到迅速传播。一旦入侵计算机,该病毒就会找出本地硬盘和移动硬盘上所有的EXE、DLL、HTM和HTML文件,通过自身副本感染这些文件。 

    本文参考了这篇帖子的12L回复:

    会有一个新段位 rmnet的sfx段
    取现在EP地址-(【EP+328】得到的偏移数)= 原始OEP
    
    动态劫持脱壳
    EP处直接粘贴该二进制
    60 E8 00 00 00 00 5D 83 ED 06 2B AD 28 03 00 00 89 6C 24 1C 61 FF E0
    
    静态脱壳
    先提取rmnet区段数据。然后取得 EP+328数据用ep减即可。。。然后删除rmnet区段。

    客户端入口点在病毒区段,其内容为:

    00622000 >  60              pushad
    00622001    E8 00000000     call    00622006
    00622006    5D              pop     ebp
    00622007    8BC5            mov     eax, ebp
    00622009    81ED 326F0120   sub     ebp, 20016F32
    0062200F    2B85 50720120   sub     eax, dword ptr [ebp+20017250]
    00622015    8985 4C720120   mov     dword ptr [ebp+2001724C], eax
    0062201B    B0 00           mov     al, 0
    0062201D    8685 9E740120   xchg    byte ptr [ebp+2001749E], al
    00622023    3C 01           cmp     al, 1
    00622025    0F85 DE020000   jnz     00622309

    按照帖子回复所说静态修改代码,其内容变为:

    00622000 >  60              pushad
    00622001    E8 00000000     call    00622006
    00622006    5D              pop     ebp
    00622007    83ED 06         sub     ebp, 6
    0062200A    2BAD 28030000   sub     ebp, dword ptr [ebp+328]
    00622010    896C24 1C       mov     dword ptr [esp+1C], ebp
    00622014    61              popad
    00622015    FFE0            jmp     eax

    以上指令找出了oep的位置,并直接跳转进入oep。也就是说,根本不用分析病毒行为,我们直接绕过它就可以。

    脱壳时,运行到客户端真正的oep再完整转存内存映像,并在重建输入表的时候选择正确的oep,那么病毒代码就并不会执行。

    紧接上部,jmp eax之后来到了程序的upx壳部分:

    0060D080    60              pushad
    0060D081    BE 00505700     mov     esi, 00575000
    0060D086    8DBE 00C0E8FF   lea     edi, dword ptr [esi+FFE8C000]
    0060D08C    57              push    edi
    0060D08D    83CD FF         or      ebp, FFFFFFFF
    0060D090    EB 10           jmp     short 0060D0A2
    0060D092    90              nop
    0060D093    90              nop
    0060D094    90              nop
    0060D095    90              nop
    0060D096    90              nop
    0060D097    90              nop
    0060D098    8A06            mov     al, byte ptr [esi]
    0060D09A    46              inc     esi
    0060D09B    8807            mov     byte ptr [edi], al
    0060D09D    47              inc     edi
    0060D09E    01DB            add     ebx, ebx
    0060D0A0    75 07           jnz     short 0060D0A9
    0060D0A2    8B1E            mov     ebx, dword ptr [esi]

    单步执行pushad之后,esp指向0012FFA4 ,键入命令hr 12FFA4下硬件断点,F9运行程序断在此处:

    0060D207    8D4424 80       lea     eax, dword ptr [esp-80]
    0060D20B    6A 00           push    0
    0060D20D    39C4            cmp     esp, eax
    0060D20F  ^ 75 FA           jnz     short 0060D20B
    0060D211    83EC 80         sub     esp, -80
    0060D214  - E9 93D9EFFF     jmp     0050ABAC

    直接在60D214出下断,跟入真正的oep:

    0050ABAC    55              push    ebp
    0050ABAD    8BEC            mov     ebp, esp
    0050ABAF    6A FF           push    -1
    0050ABB1    68 90C35100     push    0051C390
    0050ABB6    68 60D65000     push    0050D660
    0050ABBB    64:A1 00000000  mov     eax, dword ptr fs:[0]
    0050ABC1    50              push    eax
    0050ABC2    64:8925 0000000>mov     dword ptr fs:[0], esp
    0050ABC9    83EC 58         sub     esp, 58
    0050ABCC    53              push    ebx
    0050ABCD    56              push    esi
    0050ABCE    57              push    edi
    0050ABCF    8965 E8         mov     dword ptr [ebp-18], esp
    0050ABD2    FF15 A8B15100   call    dword ptr [51B1A8]               ; kernel32.GetVersion

    此时单击菜单Debug->hardware breakpoints删除之前设置的硬件断点。

    打开LordPE选择客户端程序并单击右键选择“完整转存”。

    保存dump文件之后,再打开输入表重建工具Import REC附加到客户端程序。

    填写OEP为“10ABAC”,依次单击“自动查找IAT”、“获取输入表”,最后,单击“修复转存文件”,选中之前的dump文件,则脱壳成功。

  • 相关阅读:
    各种语言语法大全
    【mysql】SQL常用指令
    【JdbcTemplete】JdbcTemplete代码详解--模板方法详解
    【Spring-AOP-1】AOP相关概念
    【设计模式】命令行模式
    【设计模式】单件模式(Singleton)--各类单件模式的比较
    【设计模式】工厂方法模式(Factory Method)
    【设计模式】装饰者模式(Decorator)
    【并发编程】延时初始化
    【并发编程】AQS学习
  • 原文地址:https://www.cnblogs.com/ZRBYYXDM/p/5470686.html
Copyright © 2011-2022 走看看