首页
社区
课程
招聘
某蛋壳脱壳笔记
发表于: 2006-3-2 16:11 5279

某蛋壳脱壳笔记

2006-3-2 16:11
5279
该壳shoooo等高手不屑写教程:)

还是让我这个菜鸟来写吧,希望对象我一样的菜鸟有点启示。

下载地址:http://bbs.pediy.com/showthread.php?s=&threadid=21802

先用RORDBG跟踪,查看跟踪记录,可以发现:

00401891 660FB611            MOVZX DX,BYTE PTR [ECX]
读API地址(指令数192726):77E6FB03 GetCommandLineA
0041ACCD 正常调用(指令数201148): KERNEL32.DLL!GetCommandLineA
00401891 660FB611            MOVZX DX,BYTE PTR [ECX]
读API地址(指令数299657):77E73F8F CreateProcessA
0041B425 正常调用(指令数307752): KERNEL32.DLL!CreateProcessA///创建子进程。
Param0:00000000
Param1:00132508
        ""C:\Documents and Settings\csjwaman\桌面\ep\EP.EXE""///子进程名。
Param2:00000000
Param3:00000000
Param5:04000022
Param6:00000000
Param7:00000000
Param8:004040A8
Param9:004043C0
00401891 660FB611            MOVZX DX,BYTE PTR [ECX]

还可以发现:

读API地址(指令数353500):77E7ADB9 WriteProcessMemory
0041AF71 正常调用(指令数361525): KERNEL32.DLL!WriteProcessMemory///写入内存。
Param0:00000390
Param1:00130000
Param2:00402230
Param3:00000064
Param4:0012FFAC
00401891 660FB611            MOVZX DX,BYTE PTR [ECX]
读API地址(指令数366354):77E7ADB9 WriteProcessMemory
0041B5AE 正常调用(指令数375039): KERNEL32.DLL!WriteProcessMemory///写入内存。
Param0:00000390
Param1:00140000
Param2:00402250
Param3:00000064
Param4:0012FFAC
00401891 660FB611            MOVZX DX,BYTE PTR [ECX]
读API地址(指令数399674):77E66D7A GlobalAlloc
0041BB92 正常调用(指令数407053): KERNEL32.DLL!GlobalAlloc
Param0:00000000
Param1:00000008
00401891 660FB611            MOVZX DX,BYTE PTR [ECX]
读API地址(指令数417840):77E7A6CF WaitForDebugEvent
0041AE5E 正常调用(指令数425047): KERNEL32.DLL!WaitForDebugEvent///等待调试。
Param0:00404040///注意这里。
Param1:FFFFFFFF
00401891 660FB611            MOVZX DX,BYTE PTR [ECX]
读API地址(指令数450715):77E7ADB9 WriteProcessMemory
0041BB14 正常调用(指令数457999): KERNEL32.DLL!WriteProcessMemory///写入CC触发调试事件。
Param0:00000390
Param1:00401652
Param2:00403050
Param3:00000001
Param4:0012FFC0
00401891 660FB611            MOVZX DX,BYTE PTR [ECX]

用OD跟踪,he  WaitForDebugEvent,然后到404040处:

00404000  00 D0 41 00 82 3B 42 00  .辛.?B.
00404008  00 00 00 00 00 00 40 00  ......@.
00404010  00 10 40 00 00 90 00 00  .@..?.
00404018  40 10 40 00 52 16 40 00  @@.R@.   ///401040就是子进程入口地址,401652是父进程入口地址。
00404020  87 0F 00 00 00 00 00 00  ?......
00404028  00 02 00 00 04 00 00 00  ......
00404030  A8 2B 13 00 C4 EF EB 77  ?.娘膑
00404038  CD 61 E6 77 00 00 00 00  歪骥....
00404040  03 00 00 00 50 03 00 00  ...P..
00404048  40 05 00 00 00 00 00 00  @......
00404050  3C 00 00 00 38 00 00 00  <...8...
00404058  00 00 40 00 00 00 00 00  ..@.....
00404060  00 00 00 00 00 E0 FD 7F  .....帻
00404068  52 16 40 00 00 00 00 00  R@.....
00404070  01 00 00 00 00 00 00 00  .......
00404078  00 00 00 00 00 00 00 00  ........
00404080  00 00 00 00 00 00 00 00  ........
00404088  00 00 00 00 00 00 00 00  ........
00404090  00 00 00 00 00 00 00 00  ........
00404098  00 00 00 00 00 00 00 00  ........
004040A0  68 21 13 00 18 33 13 00  h!.3.
004040A8  44 00 00 00 00 00 00 00  D.......
004040B0  00 00 00 00 00 00 00 00  ........

继续看RORDBG的跟踪记录:

004028B4 正常调用(指令数895387): KERNEL32.DLL!WriteProcessMemory///开始向子进程内存区域写入数据。
Param0:00000390
Param1:00401000///子进程代码段。
Param2:0013AC98///缓冲区数据。注意!
Param3:00001000
Param4:0012FF6C

用OD跟踪,he WriteProcessMemory (或者在004028B4处下断)断下后就可以看到相关参数了。

在0013AC98+40=0013ACD8处的代码就是子进程入口代码,改成EBFE(JMP EIP)造成死循环。

0013AC98  00 00 00 00 85 E3 2A 6A  ....?*j
0013ACA0  7C 67 35 6A 5B 4E 2A 6A  |g5j[N*j
0013ACA8  3E DE 28 6A 00 00 00 00  >?j....
0013ACB0  00 00 00 00 00 00 00 00  ........
0013ACB8  FF 25 0C 10 40 00 FF 25  ?.@.?
0013ACC0  08 10 40 00 FF 25 00 10  @.?.
0013ACC8  40 00 FF 25 04 10 40 00  @.?@.
0013ACD0  FF 25 10 10 40 00 00 00  ?@...
0013ACD8  68 BC 6E 40 00 E8 EE FF  h碱@.桀?
0013ACE0  FF FF 00 00 00 00 00 00  ?......
0013ACE8  30 00 00 00 38 00 00 00  0...8...

接着取消断点,直接运行程序,然后用LordPE的ARMDUMP插件DUMP,如果不用插件则DUMP出来的代码数据不完整。

DUMP出来后查看入口处代码,可以发现IAT地址和大小。

0040101D      00            DB 00
0040101E      00            DB 00
0040101F      00            DB 00
00401020   .- FF25 0C104000 JMP DWORD PTR DS:[40100C]///[xxxxxxxx]就是IAT表地址。
00401026   .- FF25 08104000 JMP DWORD PTR DS:[401008]
0040102C   .- FF25 00104000 JMP DWORD PTR DS:[401000]
00401032   .- FF25 04104000 JMP DWORD PTR DS:[401004]
00401038   $- FF25 10104000 JMP DWORD PTR DS:[401010]
0040103E      00            DB 00
0040103F      00            DB 00
00401040 > $  68 BC6E4000   PUSH 406EBC///入口。
00401045   .  E8 EEFFFFFF   CALL 00401038                            ;  00401038
0040104A   .  0000          ADD BYTE PTR DS:[EAX],AL

00401000  6F D8 45 73 85 E3 46 73  o嘏s?Fs
00401008  7C 67 51 73 5B 4E 46 73  |gQs[NFs
00401010  3E DE 44 73 00 00 00 00  >弈s....

地址从401000开始,到401018处结束,大小为18。用ImportREC修复即可。最后将入口代码改回原来的68BC.

注:脱这个unpackme时花了我不少时间,主要是DUMP出来的代码数据不完整。后来Linex让我用LordPE的ARMDUMP插件试试,结果真的DUMP成功。

在此感谢Linex和shoooo。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
2
辛苦了,支持一下
2006-3-2 16:48
0
雪    币: 279
活跃值: (145)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
3
ding~..........
2006-3-2 16:50
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
2006-3-2 17:26
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
如果不是VB的还会麻烦一些.不过这个东西不会导致死机,没有反跟踪,可以在虚拟机里跑,可以监控API,所以和我没什么关系.
2006-3-2 17:48
0
雪    币: 319
活跃值: (2404)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
6
最初由 q3 watcher 发布
如果不是VB的还会麻烦一些.不过这个东西不会导致死机,没有反跟踪,可以在虚拟机里跑,可以监控API,所以和我没什么关系.


放一个不是VB的玩玩:)
2006-3-3 07:50
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
CC 其实也没什么大的不同,而且无论怎么样蛋蛋也不会理我.
上传的附件:
2006-3-3 08:20
0
雪    币: 319
活跃值: (2404)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
8
0040206B >/$  55            PUSH EBP
0040206C  |.  8BEC          MOV EBP,ESP
0040206E  |.  6A FF         PUSH -1
00402070  |.  68 10124000   PUSH 401210
00402075  |.  68 40204000   PUSH 402040                              ;  SE handler installation
0040207A  |.  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00402080  |.  50            PUSH EAX
00402081  |.  64:8925 00000>MOV DWORD PTR FS:[0],ESP
00402088  |.  83EC 68       SUB ESP,68
0040208B  |.  53            PUSH EBX
0040208C  |.  56            PUSH ESI
0040208D  |.  57            PUSH EDI
0040208E  |.  8965 E8       MOV DWORD PTR SS:[EBP-18],ESP
00402091  |.  33DB          XOR EBX,EBX
00402093  |.  895D FC       MOV DWORD PTR SS:[EBP-4],EBX
00402096  |.  6A 02         PUSH 2
00402098  |.  FF15 58104000 CALL DWORD PTR DS:[401058]               ;  msvcrt.__set_app_type
0040209E  |.  59            POP ECX
0040209F  |.  830D C4284000>OR DWORD PTR DS:[4028C4],FFFFFFFF
004020A6  |.  830D C8284000>OR DWORD PTR DS:[4028C8],FFFFFFFF
004020AD  |.  FF15 5C104000 CALL DWORD PTR DS:[40105C]               ;  msvcrt.__p__fmode
004020B3  |.  8B0D C0284000 MOV ECX,DWORD PTR DS:[4028C0]

还差IAT没完全修复。
2006-3-3 13:43
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
9
支持!
2006-3-3 15:06
0
雪    币: 513
活跃值: (2258)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
10
偷偷的说一句,打击一下壳作者,该外壳只适用于精力过剩的人玩。反调试是鸡肋
2006-3-3 15:33
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不是VB的就是那点不同,其他的一样.这个是别人的壳,不消耗什么精力的(起哄用不错),缺点是一点气势也没有.单个的反调试是鸡肋,可当种类和数量多到能引发心理雪崩效应时就不同了.
2006-3-3 16:48
0
雪    币: 319
活跃值: (2404)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
12
有50个IAT地址被换成CC了。不知如何处理?还请q3 watcher指点一下:)
2006-3-3 19:07
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
补丁,它存放的方法过于简单了,直接就可以看出来了.
2006-3-3 19:56
0
雪    币: 319
活跃值: (2404)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
14
呵呵,脱好了。
上传的附件:
2006-3-3 21:31
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
看来还是温柔一点的好啊,这样才有人玩.
2006-3-4 08:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
好东西 ,支持呀!!!!
2006-3-4 12:04
0
游客
登录 | 注册 方可回帖
返回
//