首页
社区
课程
招聘
[原创]轻松解被MoleBox打包了的程序
发表于: 2006-6-15 14:35 19508

[原创]轻松解被MoleBox打包了的程序

2006-6-15 14:35
19508
【文章标题】: 轻松解被MoleBox打包了的程序
【文章作者】: wynney
【软件名称】: flashfxp 3.3.7(bulid 1129) RC1
【下载地址】: 可以问LOVE[BCG][DFCG]兄要 ^_^
【保护方式】: 由MoleBox打包
【软件介绍】: LOVE[BCG][DFCG]干的好事 哈哈
【作者声明】: 今天很无聊,看雪论坛也似乎没以前热闹了,于是,在电脑里找了下,发现先前做的这么个记录,便重新整理下,大虾飘过
--------------------------------------------------------------------------------
【详细过程】
  不记得什么时候了,在一蓑烟雨论坛上看到烈火兄的脱壳申请,觉得有点意思,就拿来玩了下,一点经验仅供大家参考了
  
  忽略所有异常
  一、先去OEP溜达下吧
  
  程序入口
  

0072FB53 > E8 00000000 call flashfxp.0072FB58 ;EP,F8
0072FB58 60 pushad
0072FB59 E8 4F000000 call flashfxp.0072FBAD ;ESP=0012FFA0,hr 0012FFA0,Shift+F9 4次

  这里为什么Shift+F9 4次?
  自己跟下就知道了,easy
  
  

00715B57 83C7 08 add edi,8 ;第4次中断在这里,删除硬件断点,向下拉下看看。。
00715B5A FF96 1CCB3200 call dword ptr ds:[esi+32CB1C]
00715B60 95 xchg eax,ebp
00715B61 8A07 mov al,byte ptr ds:[edi]
00715B63 47 inc edi
00715B64 08C0 or al,al
00715B66 ^ 74 DC je short flashfxp.00715B44
00715B68 89F9 mov ecx,edi
00715B6A 57 push edi
00715B6B 48 dec eax
00715B6C F2:AE repne scas byte ptr es:[edi]
00715B6E 55 push ebp
00715B6F FF96 20CB3200 call dword ptr ds:[esi+32CB20]
00715B75 09C0 or eax,eax
00715B77 74 07 je short flashfxp.00715B80
00715B79 8903 mov dword ptr ds:[ebx],eax
00715B7B 83C3 04 add ebx,4
00715B7E ^ EB E1 jmp short flashfxp.00715B61
00715B80 FF96 28CB3200 call dword ptr ds:[esi+32CB28]
00715B86 8BAE 24CB3200 mov ebp,dword ptr ds:[esi+32CB24]
00715B8C 8DBE 00F0FFFF lea edi,dword ptr ds:[esi-1000]
00715B92 BB 00100000 mov ebx,1000
00715B97 50 push eax
00715B98 54 push esp
00715B99 6A 04 push 4
00715B9B 53 push ebx
00715B9C 57 push edi
00715B9D FFD5 call ebp
00715B9F 8D87 1F020000 lea eax,dword ptr ds:[edi+21F]
00715BA5 8020 7F and byte ptr ds:[eax],7F
00715BA8 8060 28 7F and byte ptr ds:[eax+28],7F
00715BAC 58 pop eax
00715BAD 50 push eax
00715BAE 54 push esp
00715BAF 50 push eax
00715BB0 53 push ebx
00715BB1 57 push edi
00715BB2 FFD5 call ebp
00715BB4 58 pop eax
00715BB5 61 popad
00715BB6 8D4424 80 lea eax,dword ptr ss:[esp-80]
00715BBA 6A 00 push 0
00715BBC 39C4 cmp esp,eax
00715BBE ^ 75 FA jnz short flashfxp.00715BBA
00715BC0 83EC 80 sub esp,-80
00715BC3 ^ E9 8890F0FF jmp flashfxp.0061EC50 ;跳向OEP,直接F4下来,F8下到OEP

  
  

0061EC50 55 push ebp ;OEP,Delphi程序的入口
0061EC51 8BEC mov ebp,esp
0061EC53 83C4 E0 add esp,-20
0061EC56 53 push ebx

  到了OEP呢,大家先不要着急脱壳,还是先打开ImportREC。。看看,你会发现有35个无效(在你那有多少个我就不知了)
  
  
  二、IAT加密处理
  
  重新加载程序
  依旧像第一步那样,单步到0072FB59,hr 0012FFA0(这样做是方便我们到达OEP)
  命令行bp VirtualProtect,Shift+F9
  中断2次后返回,断点不要取消哦,看看。。。
  

00736952 8B15 04267400 mov edx,dword ptr ds:[742604] ;返回到这里
00736958 8B45 E8 mov eax,dword ptr ss:[ebp-18]
0073695B 0342 08 add eax,dword ptr ds:[edx+8]
0073695E 8945 F4 mov dword ptr ss:[ebp-C],eax
00736961 C705 94287400 0000>mov dword ptr ds:[742894],0
0073696B 6A 00 push 0
0073696D 68 C41B7400 push flashfxp.00741BC4 ; ASCII "EXECUTABLE"
00736972 8B0D 90287400 mov ecx,dword ptr ds:[742890] ; flashfxp.00400100

  
  补习下英语EXECUTABLE,呵呵
  继续Shift+F9中断一次,返回
  
  

00736F9C 85C0 test eax,eax ;返回到这里,Ctrl+B:89 01
00736F9E 75 0A jnz short flashfxp.00736FAA
00736FA0 B9 0B0000EF mov ecx,EF00000B
00736FA5 E8 642B0000 call flashfxp.00739B0E
00736FAA 8B4D 08 mov ecx,dword ptr ss:[ebp+8]
00736FAD 8B55 F8 mov edx,dword ptr ss:[ebp-8]
00736FB0 8B02 mov eax,dword ptr ds:[edx]
00736FB2 8901 mov dword ptr ds:[ecx],eax ;就是这里对IAT加密处理了,nop掉
00736FB4 8D4D F4 lea ecx,dword ptr ss:[ebp-C]
00736FB7 51 push ecx
00736FB8 8B55 F0 mov edx,dword ptr ss:[ebp-10]
00736FBB 52 push edx
00736FBC 6A 04 push 4
00736FBE 8B45 08 mov eax,dword ptr ss:[ebp+8]
00736FC1 50 push eax
00736FC2 FF15 2C277400 call dword ptr ds:[74272C] ; kernel32.VirtualProtect

  取消先前下的VirtualProtect断点,看看我们开始下的hr断点,还在。。呵呵
  准备到OEP了,Shift+F9,4次。。。
  
  
  和第一步骤一样。。。
  

00715B57 83C7 08 add edi,8 ;中断在这里,取消硬件断点
00715B5A FF96 1CCB3200 call dword ptr ds:[esi+32CB1C]
00715B60 95 xchg eax,ebp
00715B61 8A07 mov al,byte ptr ds:[edi]
00715B63 47 inc edi
00715B64 08C0 or al,al
00715B66 ^ 74 DC je short flashfxp.00715B44
00715B68 89F9 mov ecx,edi
00715B6A 57 push edi
00715B6B 48 dec eax
00715B6C F2:AE repne scas byte ptr es:[edi]
00715B6E 55 push ebp
00715B6F FF96 20CB3200 call dword ptr ds:[esi+32CB20]
00715B75 09C0 or eax,eax
00715B77 74 07 je short flashfxp.00715B80
00715B79 8903 mov dword ptr ds:[ebx],eax
00715B7B 83C3 04 add ebx,4
00715B7E ^ EB E1 jmp short flashfxp.00715B61
00715B80 FF96 28CB3200 call dword ptr ds:[esi+32CB28]
00715B86 8BAE 24CB3200 mov ebp,dword ptr ds:[esi+32CB24]
00715B8C 8DBE 00F0FFFF lea edi,dword ptr ds:[esi-1000]
00715B92 BB 00100000 mov ebx,1000
00715B97 50 push eax
00715B98 54 push esp
00715B99 6A 04 push 4
00715B9B 53 push ebx
00715B9C 57 push edi
00715B9D FFD5 call ebp
00715B9F 8D87 1F020000 lea eax,dword ptr ds:[edi+21F]
00715BA5 8020 7F and byte ptr ds:[eax],7F
00715BA8 8060 28 7F and byte ptr ds:[eax+28],7F
00715BAC 58 pop eax
00715BAD 50 push eax
00715BAE 54 push esp
00715BAF 50 push eax
00715BB0 53 push ebx
00715BB1 57 push edi
00715BB2 FFD5 call ebp
00715BB4 58 pop eax
00715BB5 61 popad
00715BB6 8D4424 80 lea eax,dword ptr ss:[esp-80]
00715BBA 6A 00 push 0
00715BBC 39C4 cmp esp,eax
00715BBE ^ 75 FA jnz short flashfxp.00715BBA
00715BC0 83EC 80 sub esp,-80
00715BC3 ^ E9 8890F0FF jmp flashfxp.0061EC50 ;直接F4下来,跳向OEP

  LordPE脱壳,ImportREC修复,全部有效
  
  Btw:你如果慢慢跟踪你会发现里面一层是UPX的壳,所以,脱壳文件使用PEID查得显示
  UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
  fi查得是Delphi的,为了方便汉化使用FixRes修复下资源,Done!
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年06月15日 14:32:46

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (22)
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
这个方法可以把主程序搞定, 支持
不知楼主有没有对其它捆绑文件分离的研究呢?
2006-6-15 14:42
0
雪    币: 279
活跃值: (145)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
3
支持,学习
2006-6-15 14:50
0
雪    币: 238
活跃值: (12)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
4
期待楼主做一个分离工具
2006-6-15 15:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
都是高手

不知道我什么时候能到这一步
2006-6-15 15:28
0
雪    币: 11
活跃值: (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习,不过感觉好像molebox 没thinst强
2006-6-15 16:52
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
7
molebox有个文件列表
2006-6-15 17:34
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
8
最初由 堀北真希 发布
这个方法可以把主程序搞定, 支持
不知楼主有没有对其它捆绑文件分离的研究呢?

这个倒没有,如果牛人兄有现成的东西,可以放上来研究下
2006-6-15 17:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持的啊,学习了哦
2006-6-15 17:54
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
10
这个东西不好找
放上来给大家吧
Part2
上传的附件:
2006-6-15 18:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
怎么用啊。不识哦。
2006-6-16 21:28
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
看不太懂``````
2006-6-16 22:11
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
Molebox将捆绑文件的列表存在Molebox数据文件或主程序的尾部,用TEA算法加密。如果能够找到密钥的话,就可以解开。
2006-6-21 01:51
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
14
感谢楼主,molebox的IAT加密的地方我以前一直没找到,放在一边N久了,看了你的文章解决了
但是有个地方我想补充一下,其实你脱的这个程序是双层壳,
hr 0012FFA0,Shift+F9一次时,
0072F72B    58              pop eax
0072F72C    894424 24       mov dword ptr ss:[esp+24],eax
0072F730    61              popad
0072F731    58              pop eax //停在这一行
0072F732    58              pop eax
0072F733    FFD0            call eax
0072F735    E8 A6C00000     call flashfxp.0073B7E0
0072F73A    CC              int3

停在72f731这里,在72f733这个call用F7跟进去就离开molebox这一层壳了。第二层好像是UPX1.90的壳
2006-6-21 22:53
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
15

但是有个地方我想补充一下,其实你脱的这个程序是双层壳,
hr 0012FFA0,Shift+F9一次时,
0072F72B 58 pop eax
0072F72C 894424 24 mov dword ptr ss:[esp+24],eax
0072F730 61 popad
0072F731 58 pop eax //停在这一行
0072F732 58 pop eax
0072F733 FFD0 call eax
0072F735 E8 A6C00000 call flashfxp.0073B7E0
0072F73A CC int3

停在72f731这里,在72f733这个call用F7跟进去就离开molebox这一层壳了。第二层好像是UPX1.90的壳


你补充的楼主在文章里面已经有暗示。。

Btw:你如果慢慢跟踪你会发现里面一层是UPX的壳


楼主没直接去讲,应该是为了教程的简洁了
2006-6-21 23:22
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
16
我最喜欢写脚本了:
//molebox 2.x ,by skylly
msg "忽略所有异常"
sto
sto
var cool
mov cool,esp
bphws cool,"r" //esp定律,用来找OEP
var VirtualProtect
gpa "VirtualProtect","kernel32.dll"
cmp $RESULT,0
je err
mov VirtualProtect,$RESULT
bp VirtualProtect  //下VP的断点为了找IAT加密的地方

eob check
eoe check //发生中断则执行check
esto

ret

check:
cmp eip,VirtualProtect  //检查是否是断在VP
je VirtualProtect
esto
ret

VirtualProtect:
rtu
var a
mov a,eip
mov a,[a]
cmp a,A75C085 //看用户代码处是否test eax,eax;jnz
je iat //如果是则到了关键地点
esto
ret

cool: //所有要做的都做完了,很快到OEP了
cob
coe
run
bphwc cool

zou: //自动走路的代码
mov a,eip
mov a,[a]
shl a,8
shl a,8
shl a,8
cmp a,58000000  //直到指令不是pop eax为止
jne cool2
sto
jmp zou

cool2:
sti //进入call eax就到OEP了
jmp oep
ret

iat: //对IAT加密的代码进行PATCH
find eip,#8901#
cmp $RESULT,0
je err
mov [$RESULT],#9090#
msg "绕开输入表加密!"
bc VirtualProtect
jmp cool
ret

oep:
cmt eip,"OEP!!!dump and fix IAT"
an eip
ret

err:
msg "error"
ret
2006-6-21 23:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
虽然看不太懂,还是得感谢一下
2006-6-23 10:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
虽然看不太懂,学习!!!
2006-8-7 03:22
0
雪    币: 246
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
最初由 skylly 发布
我最喜欢写脚本了:
//molebox 2.x ,by skylly
msg "忽略所有异常"
sto
sto
........


这个我喜欢,一下就搞定了,还不用修复,谢谢兄弟了
2006-9-5 15:54
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
只能解出主文件,其它的文件不能解出来???用处不是太大吧
2006-9-5 19:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
试到二,重新载入就完全找不到标志了
请楼主按新版本改写一下吧
2006-10-15 23:23
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
22
最初由 Kisco 发布
只能解出主文件,其它的文件不能解出来???用处不是太大吧

MoleBox捆绑文件的解包方法――MoleBox Pro V2.3.3主程序脱壳+破解
http://www.unpack.cn/viewthread.php?tid=1403
2006-10-16 15:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
00736FB2    8901               mov dword ptr ds:[ecx],eax        ;就是这里对IAT加密处理了,nop掉
想请教一下,怎么判断出这个地方对IAT加密了?在数据窗口观察的地址多少?
还有为什么我照着做了,PEID还是读不出来是甚么壳,但是可以运行?
2006-10-19 19:39
0
游客
登录 | 注册 方可回帖
返回
//