首页
社区
课程
招聘
[求助]如何躲过IAT加密,高手进。
发表于: 2011-5-21 11:46 4224

[求助]如何躲过IAT加密,高手进。

2011-5-21 11:46
4224
一个哥们给的文件,让我练习:   
查壳工具查出是仙剑的壳,第二层ASPack的壳。:
先找OEP :载入文件
004E2060 >  55              PUSH EBP
004E2061    8BEC            MOV EBP,ESP
004E2063    6A FF           PUSH -1
004E2065    68 3E1E4000     PUSH 1.00401E3E
004E206A    68 521E4000     PUSH 1.00401E52
004E206F    64:A1 00000000  MOV EAX,DWORD PTR FS:[0]
004E2075    50              PUSH EAX
004E2076    64:8925 0000000>MOV DWORD PTR FS:[0],ESP
004E207D    83EC 44         SUB ESP,44
004E2080    53              PUSH EBX
004E2081    56              PUSH ESI
-------------------//仙剑伪装c++

不忽略内存异常,用最后一次异常法:
看堆栈:
0012FF50   0012FF80  指向下一个 SEH 记录的指针
0012FF54   00DA68B7  SE处理程序
0012FF58   00000000

在00DA68B7下内存访问断点shift+F9
00DA68B7    57              PUSH EDI      //断在这里
00DA68B8    50              PUSH EAX
00DA68B9    13FD            ADC EDI,EBP
00DA68BB    8B7C24 14       MOV EDI,DWORD PTR SS:[ESP+14]
00DA68BF    83E0 00         AND EAX,0
00DA68C2    50              PUSH EAX
00DA68C3    26:EB 02        JMP SHORT 00DA68C8                       ; 多余的前缀

打开内存窗口在代码段 00401000下断点:然后一路F8:
004C2068    8A0439          MOV AL,BYTE PTR DS:[ECX+EDI]   //断在这里
004C206B    C0C8 04         ROR AL,4
004C206E    34 1B           XOR AL,1B
004C2070    880439          MOV BYTE PTR DS:[ECX+EDI],AL
004C2073    41              INC ECX
004C2074    3BCA            CMP ECX,EDX
004C2076  ^ 72 F0           JB SHORT 1.004C2068
004C2078    58              POP EAX
004C2079    83C0 08         ADD EAX,8
004C207C  ^ EB D5           JMP SHORT 1.004C2053
004C207E    61              POPAD                         // 在这F2 然后F9运行,断下
004C207F  - E9 152CFBFF     JMP 1.00474C99                 //OEP

到达OEP:
00474C99    55              PUSH EBP               //oep好像加了花指令,不过深度扫描可以
00474C9A    8BEC            MOV EBP,ESP            //查出:Borland Delphi 6.0 - 7.0写的
00474C9C    90              NOP
00474C9D    90              NOP
00474C9E    90              NOP
00474C9F    52              PUSH EDX
00474CA0    5A              POP EDX
00474CA1    7F 66           JG SHORT 1.00474D09
00474CA3    7E 64           JLE SHORT 1.00474D09
00474CA5    0000            ADD BYTE PTR DS:[EAX],AL

进call找函数:
004A8264  7C81CB12  kernel32.ExitProcess            //发现   被加密了
004A8268  01190000
004A826C  011A0000
004A8270  011B0000
004A8274  011C0000
004A8278  7C810C2E  kernel32.SetFilePointer
004A827C  011D0000
004A8280  011E0000
004A8284  7C801812  kernel32.ReadFile
004A8288  7C812AA9  kernel32.RaiseException
004A828C  011F0000
004A8290  01200000

重新载入找加密点:
命令窗口输入  dd 4a8264  然后下内存断点shift+F9几次  :断下 可以看出开始写入第一个函数了~
00D9CACB    8902            MOV DWORD PTR DS:[EDX],EAX               ; kernel32.ExitProcess
00D9CACD    EB 01           JMP SHORT 00D9CAD0
00D9CACF  - E9 8B450C83     JMP 83E6105F
00D9CAD4    00045F          ADD BYTE PTR DS:[EDI+EBX*2],AL
00D9CAD7    5E              POP ESI
00D9CAD8    5B              POP EBX

F8单步
00D9CB68    AC              LODS BYTE PTR DS:[ESI]          //此开始处循环出来
00D9CB69    80F8 00         CMP AL,0
00D9CB6C  ^ 74 E0           JE SHORT 00D9CB4E
00D9CB6E    80F8 01         CMP AL,1
00D9CB71    75 06           JNZ SHORT 00D9CB79
00D9CB73    8345 F4 04      ADD DWORD PTR SS:[EBP-C],4
00D9CB77  ^ EB EF           JMP SHORT 00D9CB68
00D9CB79    53              PUSH EBX
00D9CB7A    56              PUSH ESI
00D9CB7B    53              PUSH EBX
00D9CB7C    8D5D F4         LEA EBX,DWORD PTR SS:[EBP-C]
00D9CB7F    53              PUSH EBX
00D9CB80    80F8 05         CMP AL,5
00D9CB83    74 06           JE SHORT 00D9CB8B
00D9CB85    0FB60E          MOVZX ECX,BYTE PTR DS:[ESI]
00D9CB88    41              INC ECX
00D9CB89    EB 05           JMP SHORT 00D9CB90
00D9CB8B    B9 04000000     MOV ECX,4
00D9CB90    01CE            ADD ESI,ECX
00D9CB92    FF75 F0         PUSH DWORD PTR SS:[EBP-10]
00D9CB95    E8 36FEFFFF     CALL 00D9C9D0             //关键CALL 里面出来指针是否加密,跟进
00D9CB9A    5B              POP EBX                                  ; 00DD5D80
00D9CB9B  ^ EB CB           JMP SHORT 00D9CB68
---------------------------------------
00D9C9E5    33DB            XOR EBX,EBX          //ebx清零
00D9C9E7    8A18            MOV BL,BYTE PTR DS:[EAX]
00D9C9E9    8D85 FCFEFFFF   LEA EAX,DWORD PTR SS:[EBP-104]
00D9C9EF    33C9            XOR ECX,ECX
00D9C9F1    BA 00010000     MOV EDX,100              
00D9C9F6    E8 A95EFEFF     CALL 00D828A4      
00D9C9FB    EB 01           JMP SHORT 00D9C9FE   //call后此处EBx=6则不加密

00D9C9FE    8BC3            MOV EAX,EBX
00D9CA00    83E8 02         SUB EAX,2
00D9CA03    74 13           JE SHORT 00D9CA18     //发现此处不跳下个JE也不跳JB跳则不加密
00D9CA05    48              DEC EAX
00D9CA06    74 6F           JE SHORT 00D9CA77
00D9CA08    83C0 FE         ADD EAX,-2
00D9CA0B    83E8 02         SUB EAX,2
00D9CA0E    72 67           JB SHORT 00D9CA77
00D9CA10    E9 BB000000     JMP 00D9CAD0
00D9CA15    EB 01           JMP SHORT 00D9CA18

-------------------------
手动修改后发现只能读取几个函数,  其他都写入0000000
试过好多方法,CALL都跟进。    还是没发现怎么跳过函数 加密  :  希望 高手指点~~谢谢。

本人菜鸟刚学脱壳,这是第一次写文章没表达清楚之处望见谅

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
  • 1.rar (445.46kb,8次下载)
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我的问题太傻了吗?? 怎么 没人愿意回答我呀?  哎~~~~~~
2011-5-21 12:33
0
游客
登录 | 注册 方可回帖
返回
//