首页
社区
课程
招聘
[求助]参照popo123456“Armadillo3.60 加壳的EXE文件脱壳全过程”不行啊
发表于: 2004-11-26 14:27 4522

[求助]参照popo123456“Armadillo3.60 加壳的EXE文件脱壳全过程”不行啊

2004-11-26 14:27
4522
本人真正菜鸟学脱arm壳,比葫芦画瓢,过程如下:(看看哪一点不对)

环境:XP,OD,LoadPe-DLX,ImportREC,FI查明为Arm2.5x-2.6x壳

脱壳过程

设置Ollydbg忽略所有的异常选项,用IsDebug 1.4插件去掉Ollydbg的调试器标志。

(1)查找OEP

用OD中载入程序,下bp WaitForDebugEvent,F9运行,中断如下:

77EB3A07 >  55              PUSH EBP   <====中断在此处,清除断点
77EB3A08    8BEC            MOV EBP,ESP
77EB3A0A    83EC 68         SUB ESP,68
77EB3A0D    56              PUSH ESI
77EB3A0E    FF75 0C         PUSH DWORD PTR SS:[EBP+C]

查看堆栈窗口:

0012DAEC   00650B44  /CALL 到 WaitForDebugEvent
0012DAF0   0012EB9C  |pDebugEvent = 0012EB9C  <====在这里点击右键选“转存中跟随”
0012DAF4   000003E8  \Timeout = 1000. ms

然后再下bp WriteProcessMemory,F9运行

77E61A90 >  55              PUSH EBP   <====中断在此处
77E61A91    8BEC            MOV EBP,ESP
77E61A93    51              PUSH ECX
77E61A94    51              PUSH ECX
77E61A95    8B45 0C         MOV EAX,DWORD PTR SS:[EBP+C]

看数据转存窗口:

0012EB9C  01 00 00 00 A4 0A 00 00          ...?..
0012EBA4  D4 03 00 00 01 00 00 80         ?.. ..?
0012EBAC  00 00 00 00 00 00 00 00         ........
0012EBB4  00 10 40 00 02 00 00 00         . @. ...
0012EBBC  00 00 00 00 00 10 40 00         ..... @.
0012EBC4  00 10 40 00 00 00 00 00         . @.....

可能红色字体的401000就是OEP,这样我们接着来第2步

(2)dump文件

现在我们重新用OD中载入程序,下硬件断点,he WaitForDebugEvent,F9运行,中断如下:

77EB3A07 >  55              PUSH EBP  <====中断在此处,删除断点
77EB3A08    8BEC            MOV EBP,ESP
77EB3A0A    83EC 68         SUB ESP,68
77EB3A0D    56              PUSH ESI
77EB3A0E    FF75 0C         PUSH DWORD PTR SS:[EBP+C]

Alt+F9返回,搜索常数FFFFFFF8,来到(00651167处):

0065111B   >  83BD D8F5FFFF>CMP DWORD PTR SS:[EBP-A28],0
00651122   .  0F8C 41020000 JL hce.00651369  <====跳转到00651369处,因此在00651369处下断点
00651128   .  8B8D D8F5FFFF MOV ECX,DWORD PTR SS:[EBP-A28]
0065112E   .  3B0D 34E06700 CMP ECX,DWORD PTR DS:[67E034]
00651134   .  0F8D 2F020000 JGE hce.00651369
0065113A   .  8B95 48F6FFFF MOV EDX,DWORD PTR SS:[EBP-9B8]
00651140   .  81E2 FF000000 AND EDX,0FF
00651146   .  85D2          TEST EDX,EDX
00651148   .  0F84 AD000000 JE hce.006511FB
0065114E   .  6A 00         PUSH 0
00651150   .  8BB5 D8F5FFFF MOV ESI,DWORD PTR SS:[EBP-A28]
00651156   .  C1E6 04       SHL ESI,4
00651159   .  8B85 D8F5FFFF MOV EAX,DWORD PTR SS:[EBP-A28]
0065115F   .  25 07000080   AND EAX,80000007
00651164   .  79 05         JNS SHORT hce.0065116B
00651166   .  48            DEC EAX
00651167   .  83C8 F8       OR EAX,FFFFFFF8  <=====搜索来到这里,向上看
0065116A   .  40            INC EAX
0065116B   >  33C9          XOR ECX,ECX
0065116D   .  8A88 50C66700 MOV CL,BYTE PTR DS:[EAX+67C650]
00651173   .  8B95 D8F5FFFF MOV EDX,DWORD PTR SS:[EBP-A28]
00651179   .  81E2 07000080 AND EDX,80000007
0065117F   .  79 05         JNS SHORT hce.00651186
00651181   .  4A            DEC EDX
00651182   .  83CA F8       OR EDX,FFFFFFF8
00651185   .  42            INC EDX
00651186   >  33C0          XOR EAX,EAX
00651188   .  8A82 51C66700 MOV AL,BYTE PTR DS:[EDX+67C651]
0065118E   .  8B3C8D 608267>MOV EDI,DWORD PTR DS:[ECX*4+678260]
00651195   .  333C85 608267>XOR EDI,DWORD PTR DS:[EAX*4+678260]
0065119C   .  8B8D D8F5FFFF MOV ECX,DWORD PTR SS:[EBP-A28]
006511A2   .  81E1 07000080 AND ECX,80000007
006511A8   .  79 05         JNS SHORT hce.006511AF
006511AA   .  49            DEC ECX
006511AB   .  83C9 F8       OR ECX,FFFFFFF8
006511AE   .  41            INC ECX
006511AF   >  33D2          XOR EDX,EDX
006511B1   .  8A91 52C66700 MOV DL,BYTE PTR DS:[ECX+67C652]
006511B7   .  333C95 608267>XOR EDI,DWORD PTR DS:[EDX*4+678260]
006511BE   .  8B85 D8F5FFFF MOV EAX,DWORD PTR SS:[EBP-A28]
006511C4   .  99            CDQ
006511C5   .  B9 1C000000   MOV ECX,1C
006511CA   .  F7F9          IDIV ECX
006511CC   .  8BCA          MOV ECX,EDX
006511CE   .  D3EF          SHR EDI,CL
006511D0   .  83E7 0F       AND EDI,0F
006511D3   .  03F7          ADD ESI,EDI
006511D5   >  8B15 24E06700 MOV EDX,DWORD PTR DS:[67E024]
006511DB   .  8D04B2        LEA EAX,DWORD PTR DS:[EDX+ESI*4]
006511DE   .  50            PUSH EAX
006511DF   .  8B8D D8F5FFFF MOV ECX,DWORD PTR SS:[EBP-A28]
006511E5   .  51            PUSH ECX
006511E6   .  E8 621D0000   CALL hce.00652F4D
006511EB   .  83C4 0C       ADD ESP,0C
006511EE   .  25 FF000000   AND EAX,0FF <====从这里开始修改
006511F3   .  85C0          TEST EAX,EAX
006511F5   .  0F84 6E010000 JE hce.00651369
006511FB   >  8B95 D4F5FFFF MOV EDX,DWORD PTR SS:[EBP-A2C]

在0065111B处下硬件执行断点,F9运行到0065111B处,此时[ebp-A28] =[0012EB8C]= 00000000,上述的修改地方修改为:

006511EE      FF05 8CEB1200 INC DWORD PTR DS:[12EB8C]
006511F4      C705 38E06700 01000000   MOV DWORD PTR DS:[67E038],1
006511F5    ^ E9 21FFFFFF   JMP hce.0065111B
006511FA      90            NOP

去掉所有断点,并在00651369处下断,00651369处为:
0065135D   >  61                          POPAD
0065135E   .  9D                          POPFD
0065135F   >  C785 E0F5FFFF 02000100      MOV DWORD PTR SS:[EBP-A20],10002         ;  UNICODE "::=::\"
00651369   >  E9 FB0D0000                 JMP hce.00652169
0065136E      8B                          DB 8B
0065136F      8D                          DB 8D
00651370      E4                          DB E4
00651371      F5                          DB F5
00651372      FF                          DB FF
00651373      FF                          DB FF
00651374      81                          DB 81

F9运行,断住。说是所有代码都强制解压完成。

运行LordPE,有2个关于NOTEPAD的进程,选择第2个,可以dump出来,不退出OD,再用ImportREC选第二个进程,修改OEP为1000,Get Import,Fix dump到刚dump的文件dumped.exe,得到dumped_.exe。
用OD无法载入dumped_.exe,非常郁闷。。。。

到底过程中哪点不对呢?如何修改入口点,如何修复IAT呢?

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

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
2
arm的IAT.要先确定其RAV和Size,然后修改Magic Jump,才能用ImportREC抓到正常的IAT的
2004-11-26 16:58
0
雪    币: 257
活跃值: (56)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
正常的IAT躲躲闪闪讨厌却可爱:D :D
2004-12-1 13:42
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
ARM也是我的难题啊
2004-12-1 13:47
0
雪    币: 214
活跃值: (100)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
Could you disassemble your dumped process? It’s righ code? Since it’s CopyMemll-II you can check the child process and find iat ,then check is it IAT Elimination? If it is, you must find the code that Amadillo write the call address, then fix it to your Iat . If it is not. Good! You can use ImportREC to get right Iat and fix it. Then you can he GetCurrentThreadId and go to the call edi (OEP),then check the code! If it’s wrong code then it may be Amadillo V.3.78 and you must dump on the encrypt the call api address. If it’s righ code then you can dump on OEP. Then you must check that is it Nanomites? If it is then you must spent some time to fix it.
Well!Unpack Amadillo is not too difficult but you may be patient!
Sorry!my poor English I wish you can understadnd!  
:)
2004-12-2 00:04
0
游客
登录 | 注册 方可回帖
返回
//