首页
社区
课程
招聘
[分享]SoftWrap 6.x之三:IAT修复之VB
发表于: 2007-4-25 14:31 7822

[分享]SoftWrap 6.x之三:IAT修复之VB

2007-4-25 14:31
7822

【文章标题】: SoftWrap 6.x之三:IAT修复之VB
【文章作者】: wynney
【软件名称】: XP Smoker 4.4
【使用工具】: OD、CodeCaver
--------------------------------------------------------------------------------
【详细过程】

  一、前言
  
  SoftWrap的输入表加密很有特色,倒是跟ASProtect的Stolen Code有点类似了。我们知道,一般程序有以下几种IAT格式
  1、Jmp Dword ptr ds:[API]      '6字节
  2、Call Dword ptr ds:[API]     '6字节
  3、mov eax, Dword ptr ds:[API] ->5字节
  4、mov REG,Dword ptr ds:[API]  ->6字节[eax外的寄存器,且esp、edx基本不被使用]
  
  而SoftWrap加密之后分别被改成这种形式
  1、Call DWORD PTR DS:[addr1] '6字节
  2、Call DWORD PTR DS:[addr2] '6字节
  3、Call addr3                '5字节
  4、Call addr4                '5字节+1个字节的寄存器类型识别指令
  

  上面最难恢复的是第4种,因为我们需要分析出他所对应的一个表,例如,在某某情况是要恢复成ebx,另外某个情况需要恢复成ecx。。。。。同时需要注意的是3和4是分开的情况
  
  然而,VB的程序只有1种情况,就是Jmp Dword ptr ds:[API]被改成了Call DWORD PTR DS:[addr],这样就大大的减小了我们的难度。本文介绍的是如何去恢复Jmp Dword ptr ds:[API]类型,为后面讲解如何恢复这4种类型铺个路。  

  二、去OEP溜达
  
  1、设置异常,忽略特权和指定异常外的所有异常

   

  4次Shift+F9,出现试用框,点Try Now,中断后继续Shift+F9两次,在Code段下内存访问断点[不可以F2],Shift+F9,两次,即可到达OEP了。
  
  ………………………………
  004081F4    FF15 80224E00   call    dword ptr [4E2280]           ; xpsmoker.004E4E39
  004081FA    FF15 80224E00   call    dword ptr [4E2280]           ; xpsmoker.004E4E39
  00408200    FF15 80224E00   call    dword ptr [4E2280]           ; xpsmoker.004E4E39
  00408206    FF15 80224E00   call    dword ptr [4E2280]           ; xpsmoker.004E4E39
  0040820C    FF15 80224E00   call    dword ptr [4E2280]           ; xpsmoker.004E4E39
  00408212    FF15 80224E00   call    dword ptr [4E2280]           ; xpsmoker.004E4E39
  00408218    68 78844000     push    00408478                     ; OEP
  0040821D    E8 F0FFFFFF     call    00408212
  
  可以看到所有的指针全部改成了call    dword ptr [4E2280]
  随便找一个指针,Enter进去吧
  
  004E4E39    9C              pushfd
  004E4E3A    50              push    eax
  004E4E3B    53              push    ebx
  004E4E3C    8B5C24 0C       mov     ebx, dword ptr [esp+C]
  004E4E40    53              push    ebx
  004E4E41    83EB 06         sub     ebx, 6
  004E4E44    68 11270000     push    2711
  004E4E49    68 00000801     push    1080000                      ;虚拟内存地址
  004E4E4E    C3              retn
  
  01080000    55              push    ebp                          ; API加密段首,记住①  
  01080001    56              push    esi
  01080002    57              push    edi
  01080003    51              push    ecx
  01080004    52              push    edx
  01080005    50              push    eax
  01080006    BD 66274E00     mov     ebp, 4E2766
  0108000B    016C24 18       add     dword ptr [esp+18], ebp
  0108000F    2B9D 962A0000   sub     ebx, dword ptr [ebp+2A96]
  
  三、获取输入表
  
  Ctrl+G:VirtualAlloc,在段尾F2[直接bp VirtualAlloc会被检测到],shift+F9,中断后返回
  
  Ctrl+B:85 C0 0F 84 ?? ?? ?? ?? F6 C3 02 74 21 FF B5 ?? ?? ?? ?? 6A 10 50 FF B5 ?? ?? ?? ?? FF B5 ?? ?? ?? ??
  
  004E463A    85C0            test    eax, eax   ; 找到这里
  004E463C    0F84 89000000   je      004E46CB
  004E4642    F6C3 02         test    bl, 2       ; F2[he有时断不下来],Shft+F9,删除断点,看寄存器  
  004E4645    74 21           je      short 004E4668
  004E4647    FFB5 DF1C0000   push    dword ptr [ebp+1CDF]
  004E464D    6A 10           push    10
  004E464F    50              push    eax
  004E4650    FFB5 DF1C0000   push    dword ptr [ebp+1CDF]
  004E4656    FFB5 E31C0000   push    dword ptr [ebp+1CE3]
  004E465C    E8 FAF7FFFF     call    004E3E5B
  
  EAX 6600A019 MSVBVM60.DllFunctionCall
  ECX 00000000
  EDX CBF65AD9
  EBX FC50432D
  ESP 0012FF8C ASCII "賈鏊"
  EBP 004E2766 xpsmoker.004E2766
  ESI 004E5E50 xpsmoker.004E5E50
  EDI 004E67EC xpsmoker.004E67EC
  
  Eax里面出现的是IAT了,你可以在004E4642多中断几次,可以看到eax里面的IAT,呵呵
  
  好了,我们现在来写Patch代码,找一片空白[不会被使用的],大小要足够。
  我用的是申请的空间[非程序所有的空间、这就意味着后面用ImportREC修复的时候需要用高级指令查找],我申请的是3F0000,10000大小

  
  设置3F0000为存放基址的位置,3F0004为IAT地址指针,3F0008为存放IAT的起始地址
  [003F0000]=ECX        -->第一中断后ecx的值,一般是0
  [003F0004]=003F0008   -->IAT地址指针

  
  003F0000  00 00 00 00 08 00 3F 00  .... .?.
  003F0008  00 00 00 00 00 00 00 00  ........
  003F0010  00 00 00 00 00 00 00 00  ........
  

  004E4642    3A0D 00003F00   cmp     cl, byte ptr [3F0000]
  004E4648    74 0E           je      short 004E4658
  004E464A    FE05 00003F00   inc     byte ptr [3F0000]
  004E4650    66:8305 04003F0>add     word ptr [3F0004], 4
  004E4658    8B1D 04003F00   mov     ebx, dword ptr [3F0004]
  004E465E    8903            mov     dword ptr [ebx], eax
  004E4660    66:8305 04003F0>add     word ptr [3F0004], 4
  
  3A 0D 00 00 3F 00 74 0E FE 05 00 00 3F 00 66 83 05 04 00 3F 00 04 8B 1D 04 00 3F 00 89 03 66 83 05 04 00 3F 00 04

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 690
活跃值: (1826)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
沙发,呵呵。。。
2007-4-25 15:31
0
雪    币: 1919
活跃值: (901)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
3
好文章,学习哈~~~~
2007-4-25 16:42
0
雪    币: 110
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好文全力的顶
2007-4-25 20:25
0
雪    币: 196
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
沙发没得了,做板凳可以不咯
2007-9-29 20:36
0
游客
登录 | 注册 方可回帖
返回
//