首页
论坛
课程
招聘
forgot的Unpack Me v0.1.5 bugfix脱壳
2005-2-4 20:07 12830

forgot的Unpack Me v0.1.5 bugfix脱壳

2005-2-4 20:07
12830
                            forgot的Unpack Me v0.1.5 bugfix脱壳

     日期:2005年2月4日   脱壳人:csjwaman[DFCG]
―――――――――――――――――――――――――――――――――――――――――――

【软件名称】:forgot的Unpack Me v0.1.5 bugfix
【下载地址】:http://bbs.pediy.com/showthread.php?s=&threadid=10806
【脱壳声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【操作系统】:win2k
【脱壳工具】:OD等传统工具

―――――――――――――――――――――――――――――――――――――――――――
 
【脱壳过程】:

第一步,找d-process处:

用OD载入程序,忽略所有异常,bp WriteProcessMemory,F9运行程序,断下:

77E7ADB9 >  55              PUSH EBP////断下。
77E7ADBA    8BEC            MOV EBP,ESP
77E7ADBC    51              PUSH ECX
77E7ADBD    51              PUSH ECX
77E7ADBE    8B45 0C         MOV EAX,DWORD PTR SS:[EBP+C]
77E7ADC1    53              PUSH EBX
77E7ADC2    8945 F8         MOV DWORD PTR SS:[EBP-8],EAX

观察堆栈数据:

00A185C0   00A1BEBF  /CALL 到 WriteProcessMemory 来自 00A1BEBA
00A185C4   00000028  |hProcess = 00000028 (window)
00A185C8   00A1D5BA  |Address = A1D5BA/////重要!记下备用。
00A185CC   00A1CF28  |Buffer = 00A1CF28
00A185D0   0000029A  |BytesToWrite = 29A (666.)/////大小。
00A185D4   00000000  \pBytesWritten = NULL

好,F9直接运行程序,等出现界面时,运行LordPE选中映像文件小的那个进程,然后部分DUMP,把从A1D5BA处开始大小为29A的数据DUMP下来,命名为A1D5BA.bin。

第二步,变双进程为单进程:

重新载入程序,bp CreateProcessA,运行程序,断下:

77E73F8F >  55              PUSH EBP////断在这儿。
77E73F90    8BEC            MOV EBP,ESP
77E73F92    FF75 2C         PUSH DWORD PTR SS:[EBP+2C]
77E73F95    FF75 28         PUSH DWORD PTR SS:[EBP+28]
77E73F98    FF75 24         PUSH DWORD PTR SS:[EBP+24]
77E73F9B    FF75 20         PUSH DWORD PTR SS:[EBP+20]
77E73F9E    FF75 1C         PUSH DWORD PTR SS:[EBP+1C]

观察堆栈数据:

00A185AC   00A1AF45  /CALL 到 CreateProcessA 来自 00A1AF40
00A185B0   00A19CB2  |ModuleFileName = "C:\Documents and Settings\Administrator\桌面\015\复件 1.exe"
00A185B4   00A1AF36  |CommandLine = "X"/////调试标志!
00A185B8   00000000  |pProcessSecurity = NULL
00A185BC   00000000  |pThreadSecurity = NULL
00A185C0   00000000  |InheritHandles = FALSE
00A185C4   00000003  |CreationFlags = DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS
00A185C8   00000000  |pEnvironment = NULL
00A185CC   00000000  |CurrentDir = NULL
00A185D0   00A18938  |pStartupInfo = 00A18938
00A185D4   00A18928  \pProcessInfo = 00A18928

重新载入程序,bp GetCommandLineA,运行程序,断下:

77E6FB03 >  A1 9406EC77     MOV EAX,DWORD PTR DS:[77EC0694]////断在这里。取消断点。
77E6FB08    C3              RETN////返回。
77E6FB09 >  55              PUSH EBP
77E6FB0A    8BEC            MOV EBP,ESP
77E6FB0C    56              PUSH ESI
77E6FB0D    64:A1 18000000  MOV EAX,DWORD PTR FS:[18]

返回到:

00A1909F    68 9F6F56B6     PUSH B6566F9F
00A190A4    50              PUSH EAX
00A190A5    E8 5D000000     CALL 00A19107
00A190AA    EB FF           JMP SHORT 00A190AB
00A190AC    71 78           JNO SHORT 00A19126
00A190AE    C2 5000         RETN 50
00A190B1  ^ EB D3           JMP SHORT 00A19086
00A190B3    5B              POP EBX
00A190B4    F3:             PREFIX REP:                              ; 多余的前缀
00A190B5    68 895C2448     PUSH 48245C89
00A190BA    5C              POP ESP
00A190BB    24 58           AND AL,58
00A190BD    FF8D 5C24585B   DEC DWORD PTR SS:[EBP+5B58245C]

搜索二进制字符“803e58”,找到:

00A19330  ^\EB FA           JMP SHORT 00A1932C
00A19332  ^ EB 83           JMP SHORT 00A192B7
00A19334    C017 EB         RCL BYTE PTR DS:[EDI],0EB                ; 移动常数超出 1..31 的范围
00A19337    FF70 ED         PUSH DWORD PTR DS:[EAX-13]
00A1933A  ^ 71 EB           JNO SHORT 00A19327
00A1933C  ^ EB FA           JMP SHORT 00A19338
00A1933E  ^ EB 80           JMP SHORT 00A192C0/////找到这里。这里有个花指令。
00A19340    3E:58           POP EAX                                  ; 多余的前缀
00A19342    0F84 CB3F0000   JE 00A1D313
00A19348    68 9F6F56B6     PUSH B6566F9F
00A1934D    50              PUSH EAX
00A1934E    E8 5D000000     CALL 00A193B0
00A19353    EB FF           JMP SHORT 00A19354
00A19355    71 78           JNO SHORT 00A193CF

NOP掉花指令后:

00A1933E    90              NOP
00A1933F    803E 58         CMP BYTE PTR DS:[ESI],58////58为调试标志。用于判断是否为子进程。
00A19342    0F84 CB3F0000   JE 00A1D313////此处改为JMP!

第三步,修补程序:

修改上面这个跳转后,用十六进制工具把A1D5BA.bin的数据复盖掉OD的DUMP区从0A1D5BA处开始的29A个字节数据。

第四步,查找入口:

做完上述工作后,在OD的CPU窗口,Ctrl+G,输入0A1D5BA,点确定后来到:

00A1D5B3  ^\EB FA           JMP SHORT 00A1D5AF
00A1D5B5  ^ EB F0           JMP SHORT 00A1D5A7////这里有个花指令。
00A1D5B7    0FC7C8          CMPXCHG8B EAX                            ; 非法使用寄存器
00A1D5BA    FFC3            INC EBX/////来到这里。
00A1D5BC    FFC8            DEC EAX
00A1D5BE    F7D8            NEG EAX
00A1D5C0    F7C1 2DF16825   TEST ECX,2568F12D
00A1D5C6    8BD9            MOV EBX,ECX

取消花指令后:

00A1D5B5    90              NOP
00A1D5B6    F0:0FC7C8       LOCK CMPXCHG8B EAX ////NOP掉!

好,接着Alt+M打开内存镜像,在.data区段下内存访问断点。

F9运行程序,断在:

00A18B06    AC              LODS BYTE PTR DS:[ESI]////断在这里,清除内存断点。
00A18B07    F9              STC
00A18B08    2AC1            SUB AL,CL
00A18B0A    F8              CLC
00A18B0B    EB 01           JMP SHORT 00A18B0E
00A18B0D  - E9 C0C0D7C0     JMP C1794BD2

再次Alt+M打开内存镜像,在.text区段下内存访问断点。

F9运行程序,断在:

00403A3F    68 34D04000     PUSH 复件_1.0040D034////断在这里!这儿就是入口。DUMP出来。
00403A44    E8 A9840000     CALL 复件_1.0040BEF2                       ; JMP to comdlg32.GetOpenFileNameA
00403A49    85C0            TEST EAX,EAX
00403A4B    74 26           JE SHORT 复件_1.00403A73
00403A4D    68 00B00400     PUSH 4B000
00403A52    6A 40           PUSH 40
00403A54    E8 75840000     CALL 复件_1.0040BECE                       ; JMP to kErNeL32.GlobalAlloc
00403A59    A3 D0D14000     MOV DWORD PTR DS:[40D1D0],EAX
00403A5E    68 BDD04000     PUSH 复件_1.0040D0BD
00403A63    E8 10000000     CALL 复件_1.00403A78

DUMP要注意纠正映像大小,然后删除SHIT区段,再用ImportREC v142+修复IAT,优化一下,388K--->50.7K     OK完工!


2022 KCTF春季赛【最佳人气奖】火热评选中!快来投票吧~

收藏
点赞0
打赏
分享
最新回复 (38)
雪    币: 5536
活跃值: 活跃值 (56)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 活跃值 26 2005-2-4 20:10
2
0
cool...
雪    币: 2170
活跃值: 活跃值 (39)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 活跃值 10 2005-2-4 20:10
3
0
支持。
雪    币: 146
活跃值: 活跃值 (415)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 活跃值 24 2005-2-4 20:18
4
0
为了便于和我一样的菜鸟理解,我增写了一个步骤。
雪    币: 60
活跃值: 活跃值 (118)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 活跃值 85 2005-2-4 20:36
5
0
不错
雪    币: 1038
活跃值: 活跃值 (9862)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2005-2-4 20:41
6
0
恭喜csjwaman,再来一篇就能进论坛精华排行榜前20名了。
雪    币: 222
活跃值: 活跃值 (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
龙岱客 活跃值 2005-2-4 21:01
7
0
最初由 kanxue 发布
恭喜csjwaman,再来一篇就能进论坛精华排行榜前20名了。


你这坛主是怎么混的,一篇精华也没有,再灌水封你ID
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
q3 watcher 活跃值 2005-2-4 21:07
8
0
最初由 龙岱客 发布


你这坛主是怎么混的,一篇精华也没有,再灌水封你ID

曾经有过,估计自己删了,返朴归真
雪    币: 206
活跃值: 活跃值 (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
鸡蛋壳 活跃值 2005-2-4 21:10
9
0
最初由 龙岱客 发布


你这坛主是怎么混的,一篇精华也没有,再灌水封你ID


灌也是一种职业。
雪    币: 1038
活跃值: 活跃值 (9862)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2005-2-4 21:18
10
0
最初由 龙岱客 发布


你这坛主是怎么混的,一篇精华也没有,再灌水封你ID


刚开始建站时,主页的Crack教学收集整理也算为国内Crack做了点贡献吧。现在老了,没激情了,所以目前只做些论坛维护工作,不过这工作不比写精华文章轻松哟~~,每天都得占用大量业余时间,如空间问题、论坛组织管理(删帖、封ID,不知得罪多少人呀)、协调各方面、主页维护、论坛程序改进(目前这论坛己花了我一个月时间来完善了)等等~~
如果没论坛,我会有更多的业余时间研究加解密技术和学习其他东西。有什么心得,偶尔写篇文章发表发表,然后看到一个个跟帖:“支持!”,我想感觉一定蛮好的。
雪    币: 60
活跃值: 活跃值 (118)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 活跃值 85 2005-2-4 21:22
11
0
那就再次感觉一下
雪    币: 5536
活跃值: 活跃值 (56)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 活跃值 26 2005-2-4 21:25
12
0
感觉一下
雪    币: 217
活跃值: 活跃值 (36)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
softworm 活跃值 30 2005-2-4 21:26
13
0
都支持
雪    币: 3540
活跃值: 活跃值 (26)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
cnbragon 活跃值 18 2005-2-4 21:27
14
0
最初由 kanxue 发布


刚开始建站时,主页的Crack教学收集整理也算为国内Crack做了点贡献吧。现在老了,没激情了,所以目前只做些论坛维护工作,不过这工作不比写精华文章轻松哟~~,每天都得占用大量业余时间,如空间问题、论坛组织管理(删帖、封ID,不知得罪多少人呀)、协调各方面、主页维护、论坛程序改进(目前这论坛己花了我一个月时间来完善了)等等~~
如果没论坛,我会有更多的业余时间研究加解密技术和学习其他东西。有什么心得,偶尔写篇文章发表发表,然后看到一个个跟帖:“支持!”,我想感觉一定蛮好的。


支持!
雪    币: 1038
活跃值: 活跃值 (9862)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2005-2-4 21:27
15
0
最初由 forgot 发布
感觉一下


有机会的,下面准备将壳这块恶补一下,等以后有心得会与大家分享的。
谢谢forgot给了我好多相关资料。
雪    币: 146
活跃值: 活跃值 (415)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 活跃值 24 2005-2-4 21:30
16
0
kanxue老大来点两本书上没有的好货让大家尝尝:)
雪    币: 25
活跃值: 活跃值 (11)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
xIkUg 活跃值 9 2005-2-4 21:36
17
0
forgot给我点资料。。。
雪    币: 43751
活跃值: 活跃值 (163990)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
linhanshi 活跃值 2005-2-4 21:37
18
0
我还是支持,维护是自觉自愿的!
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
clide2000 活跃值 7 2005-2-4 21:48
19
0
强烈支持,csjwaman[DFCG]越来越强了,希望多多出文章,好让我们学习啊
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
jdpack 活跃值 1 2005-2-4 22:44
20
0
支持支持~~
雪    币: 2170
活跃值: 活跃值 (39)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 活跃值 10 2005-2-4 23:46
21
0
最初由 kanxue 发布


有机会的,下面准备将壳这块恶补一下,等以后有心得会与大家分享的。
谢谢forgot给了我好多相关资料。

羡慕ing~~, Forgot也可我共享一些资料。
雪    币: 231
活跃值: 活跃值 (124)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuyilin 活跃值 2005-2-5 13:20
22
0
搜索二进制字符“803e58”,找到:

00A19330  ^\EB FA           JMP SHORT 00A1932C
00A19332  ^ EB 83           JMP SHORT 00A192B7
00A19334    C017 EB         RCL BYTE PTR DS:[EDI],0EB                ; 移动常数超出 1..31 的
--------------------------------------------------------
请问:为什么搜803e58
多谢
雪    币: 146
活跃值: 活跃值 (415)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 活跃值 24 2005-2-5 13:34
23
0
最初由 liuyilin 发布
搜索二进制字符“803e58”,找到:

00A19330 ^\EB FA JMP SHORT 00A1932C
00A19332 ^ EB 83 JMP SHORT 00A192B7
00A19334 C017 EB RCL BYTE PTR DS:[EDI],0EB ; 移动常数超出 1..31 的
........


就是搜索判断是不是子进程的语句。其实你也可以用F7一步一步跟到那里的。不过由于花指令多,可能要按F7好多下:)
雪    币: 5536
活跃值: 活跃值 (56)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 活跃值 26 2005-2-5 13:40
24
0
毛主席教导我们,F7要按住
雪    币: 146
活跃值: 活跃值 (415)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 活跃值 24 2005-2-5 13:44
25
0
如果按住不放也怕跑到迷宫里去呀:)
游客
登录 | 注册 方可回帖
返回