首页
社区
课程
招聘
[旧帖] [原创]Armadillo.4X版本E语言脱壳 0.00雪花
发表于: 2008-3-19 12:22 4087

[旧帖] [原创]Armadillo.4X版本E语言脱壳 0.00雪花

2008-3-19 12:22
4087
【文章标题】: Armadillo.4X版本E语言脱壳
【文章作者】: niliu
【软件名称】: 风火助理
【下载地址】: http://www.namipan.com/d/%e5%8a%a9%e7%90%866.9-39-8.rar/fac9e773556c9e27de7a2d4d625aca6a7c728ea973ed1900
【使用工具】: ECE
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  Debug-Blocker
  Enable Import Table Elimination
  Enable Nanomites Processing
  Enable Memory-Patching Protections
  
  
    此程序的保护貌似还不少..   
   
    第一次写脱文  所以  写详细点   给自己留个纪念..  
  
  1.  双变单  
  
  下断 bp OpenMutexA   
  
  F9运行     (注意了.   如果有异常  手动添加异常 在F9一次)
  
  CTRL+G:00401000
  
  
  00401000    60                       pushad
  00401001    9C                       pushfd
  00401002    68 54FD1200              push 12FD54             ; ASCII "97C::DAE2B8142D" (注意这里.  这里的值每台电脑都不相同 自己看堆栈)
  00401007    33C0                     xor eax,eax
  00401009    50                       push eax
  0040100A    50                       push eax
  0040100B    E8 BFD9407C              call kernel32.CreateMutexA
  00401010    9D                       popfd
  00401011    61                       popad
  00401012  - E9 94DA407C              jmp kernel32.OpenMutexA
  00401017    90                       nop
  
  
  60 9C 68 54 FD 12 00 33 C0 50 50 E8 BF D9 40 7C 9D 61 E9 94 DA 40 7C 90
  
  
     然后此处新建EIP     F9运行  取消断点  再次来到00401000处 撤销选择处修改
  
  第一步做完了.   
  
  2.避开Anti
  
  下断 he OutputDebugStringA
  F9运行  选中堆栈中%s%%s%%s%%s%%s%%s%之类的字符,点右键---数据窗口跟随  
  
  看地址处  第一个.  点右键---二进制---使用00填充
  
  重复2次  然后取消断点
  
  
  3、找Magic Jump,避开IAT加密
  
  
  下断  he GetModuleHandleA  
  
  SHIFT+F9  
  
  来到: 7C80B731 >  8BFF                     mov edi,edi       断在了这里  取消断点  
  7C80B733    55                       push ebp
  7C80B734    8BEC                     mov ebp,esp
  7C80B736    837D 08 00               cmp dword ptr ss:[ebp+8],0
  7C80B73A    74 18                    je short kernel32.7C80B754     在这里  下 硬件执行断点
  7C80B73C    FF75 08                  push dword ptr ss:[ebp+8]
  7C80B73F    E8 C0290000              call kernel32.7C80E104
  7C80B744    85C0                     test eax,eax
  7C80B746    74 08                    je short kernel32.7C80B750
  7C80B748    FF70 04                  push dword ptr ds:[eax+4]
  7C80B74B    E8 7D2D0000              call kernel32.GetModuleHandleW
  7C80B750    5D                       pop ebp
  7C80B751    C2 0400                  retn 4
  
  
  然后SHIFT+F9运行   注意堆栈
  
  0012943C  /0012EB50
  00129440  |00D364B5  返回到 00D364B5 来自 kernel32.GetModuleHandleA
  00129444  |00D61BB0  ASCII "kernel32.dll"
  00129448  |00D62B68  ASCII "VirtualAlloc"
  0012944C  |836C2E86
  00129450  |004F23A0  风火助理.004F23A0
  
  
  0012943C  /0012EB50
  00129440  |00D364D3  返回到 00D364D3 来自 kernel32.GetModuleHandleA
  00129444  |00D61BB0  ASCII "kernel32.dll"
  00129448  |00D62B5C  ASCII "VirtualFree"
  0012944C  |836C2E86
  00129450  |004F23A0  风火助理.004F23A0
  
  00129188  /00129440
  0012918C  |00D18C74  返回到 00D18C74 来自 kernel32.GetModuleHandleA
  00129190  |00129308  ASCII "kernel32.dll"
  00129194  |00000000
  00129198  |004F23A0  风火助理.004F23A0
  0012919C  |00000001
  
  
  
  第3次 就是返回的时机   取消断点  AIT+F9 返回
  
  
  00D18C74    8B55 F4                  mov edx,dword ptr ss:[ebp-C]        返回到了这里  
  00D18C77    8B0D 84EFD600            mov ecx,dword ptr ds:[D6EF84]
  00D18C7D    890491                   mov dword ptr ds:[ecx+edx*4],eax
  00D18C80    8B55 F4                  mov edx,dword ptr ss:[ebp-C]
  00D18C83    A1 84EFD600              mov eax,dword ptr ds:[D6EF84]
  00D18C88    833C90 00                cmp dword ptr ds:[eax+edx*4],0
  00D18C8C    75 5C                    jnz short 00D18CEA                      这个 就是Jump了
  00D18C8E    8B4D F8                  mov ecx,dword ptr ss:[ebp-8]
  00D18C91    8B51 08                  mov edx,dword ptr ds:[ecx+8]
  00D18C94    83E2 02                  and edx,2
  00D18C97    74 38                    je short 00D18CD1
  00D18C99    B8 02000000              mov eax,2
  00D18C9E    C1E0 02                  shl eax,2
  00D18CA1    8B0D 04CBD600            mov ecx,dword ptr ds:[D6CB04]          ; 风火助理.004F23A0
  00D18CA7    8B15 04CBD600            mov edx,dword ptr ds:[D6CB04]          ; 风火助理.004F23A0
  00D18CAD    8B35 04CBD600            mov esi,dword ptr ds:[D6CB04]          ; 风火助理.004F23A0
  00D18CB3    8B5E 78                  mov ebx,dword ptr ds:[esi+78]
  00D18CB6    335A 50                  xor ebx,dword ptr ds:[edx+50]
  00D18CB9    331C01                   xor ebx,dword ptr ds:[ecx+eax]
  00D18CBC    83E3 10                  and ebx,10
  00D18CBF    F7DB                     neg ebx
  00D18CC1    1BDB                     sbb ebx,ebx
  00D18CC3    F7DB                     neg ebx
  00D18CC5    0FB6C3                   movzx eax,bl
  00D18CC8    85C0                     test eax,eax
  00D18CCA    75 05                    jnz short 00D18CD1
  00D18CCC  ^ E9 1BFFFFFF              jmp 00D18BEC
  00D18CD1    8D8D C8FEFFFF            lea ecx,dword ptr ss:[ebp-138]
  00D18CD7    51                       push ecx
  00D18CD8    FF15 88F0D500            call dword ptr ds:[D5F088]             ; kernel32.LoadLibraryA
  00D18CDE    8B55 F4                  mov edx,dword ptr ss:[ebp-C]
  00D18CE1    8B0D 84EFD600            mov ecx,dword ptr ds:[D6EF84]
  00D18CE7    890491                   mov dword ptr ds:[ecx+edx*4],eax
  00D18CEA    8B55 F4                  mov edx,dword ptr ss:[ebp-C]
  00D18CED    A1 84EFD600              mov eax,dword ptr ds:[D6EF84]
  00D18CF2    833C90 00                cmp dword ptr ds:[eax+edx*4],0
  00D18CF6    75 05                    jnz short 00D18CFD
  00D18CF8  ^ E9 EFFEFFFF              jmp 00D18BEC               这里下断  运行到这里  取消断点  记得撤销选择处修改
  
  
  
  这时   打开内存镜像  在00401000处下断  SHIFT+F9   直接来到OEP处
  
  
  0040389F    55                       push ebp                        这里就是OEP了
  004038A0    8BEC                     mov ebp,esp
  004038A2    6A FF                    push -1
  004038A4    68 F8724000              push 风火助理.004072F8
  004038A9    68 04554000              push 风火助理.00405504
  004038AE    64:A1 00000000           mov eax,dword ptr fs:[0]
  004038B4    50                       push eax
  004038B5    64:8925 00000000         mov dword ptr fs:[0],esp
  004038BC    83EC 58                  sub esp,58
  004038BF    53                       push ebx
  004038C0    56                       push esi
  004038C1    57                       push edi
  004038C2    8965 E8                  mov dword ptr ss:[ebp-18],esp
  004038C5    FF15 48704000            call dword ptr ds:[407048]
  004038CB    33D2                     xor edx,edx
  004038CD    8AD4                     mov dl,ah
  004038CF    8915 94BA4000            mov dword ptr ds:[40BA94],edx
  004038D5    8BC8                     mov ecx,eax
  004038D7    81E1 FF000000            and ecx,0FF
  004038DD    890D 90BA4000            mov dword ptr ds:[40BA90],ecx
  004038E3    C1E1 08                  shl ecx,8
  004038E6    03CA                     add ecx,edx
  004038E8    890D 8CBA4000            mov dword ptr ds:[40BA8C],ecx
  
  
  
    是不是代码全都变红了   这是因为穿山甲解码的原因  大家都应该知道 我不说了..  - -!
  
  
  此时  脱壳修复把.
  
  注意的是.   这里  不要用Arminline修复  
  
  
  下面  就是重要地方了    用工具E-Code Explorer修复  因为这个是E语言编写的...  
  
     ECE的使用方法:   在工具处   导出E格式原体  文件后缀是.ECF
  
    在植入E格式原体  
  
     OK   修复成功   程序运行....
  
  
       在这里感谢君王传世大哥的教导      感谢看雪的各位大哥们对我们小菜鸟的照顾   感谢MTV  - -!.     
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年03月19日 12:12:47

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 5
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
西西``沙发``
2008-3-19 14:20
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
   谢谢大哥的帮助  难忘的回忆
2008-3-19 15:14
0
游客
登录 | 注册 方可回帖
返回
//