首页
社区
课程
招聘
[原创]不使用 ImportREC 来脱 PECompact 2.x 版本的壳
发表于: 2009-2-16 14:57 12073

[原创]不使用 ImportREC 来脱 PECompact 2.x 版本的壳

2009-2-16 14:57
12073

【文章标题】: 不使用 ImportREC 来脱 PECompact 2.x 版本的壳
【文章作者】: CCDebuger
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  
  写这篇文章主要是看到了这个求助帖:http://bbs.pediy.com/showthread.php?t=81974,就把里面提到的程序拿来看了一下。这里我把不用 ImportREC 来脱 PECompact 2.x 版本壳的过程写下来,再来一个脱壳脚本,简化一下流程。现在进入正题吧。
  载入程序后断 BP VirtualAlloc,两次中断后会返回到这里:
  


00EA0C30 6A 40 PUSH 40
00EA0C32 68 00100000
PUSH 1000
00EA0C37 51
PUSH ECX
00EA0C38 6A 00 PUSH 0
00EA0C3A
FF95 371F9400 CALL DWORD PTR SS:[EBP+941F37]
00EA0C40 8985 271F9400 MOV DWORD PTR SS:[EBP+941F27],EAX
; 返回到这
00EA0C46 56 PUSH ESI
00EA0C47 E8 F6030000 CALL 00EA1042
00EA0C4C 8D8D
BD1D9400 LEA ECX,DWORD PTR SS:[EBP+941DBD]
00EA0C52 85C0 TEST EAX,EAX
00EA0C54 0F85 94000000 JNZ 00EA0CEE
00EA0C5A 56
PUSH ESI
00EA0C5B E8 40030000 CALL 00EA0FA0
; ; 这里面用解码后的内容填充原程序的各个区段,F7跟进
00EA0C60 56 PUSH ESI
00EA0C61 E8 55020000 CALL 00EA0EBB
00EA0C66 90
NOP
00EA0C67 90 NOP
00EA0C68 90 NOP
00EA0C69 90 NOP
00EA0C6A 90 NOP
00EA0C6B 90 NOP
00EA0C6C 90 NOP
00EA0C6D 90 NOP
00EA0C6E 90 NOP
00EA0C6F 90 NOP
00EA0C70 90 NOP
00EA0C71 90 NOP
00EA0C72 90 NOP
00EA0C73 90 NOP
00EA0C74 8B4E 34 MOV ECX,DWORD PTR DS:[ESI+34]
00EA0C77 85C9 TEST ECX,ECX
00EA0C79 0F84 89000000 JE 00EA0D08
00EA0C7F 034E 08
ADD ECX,DWORD PTR DS:[ESI+8]
00EA0C82 51 PUSH ECX
00EA0C83 56 PUSH ESI
00EA0C84 E8 47060000 CALL 00EA12D0
; 处理输入表,F7跟进
00EA0C89 85C0 TEST EAX,EAX
00EA0C8B 74 7B JE SHORT 00EA0D08

00EA0FA0 55 PUSH EBP ; 一路按F8
00EA0FA1 8BEC MOV EBP,ESP
00EA0FA3 83C4 E8 ADD ESP,-18
00EA0FA6 53
PUSH EBX
00EA0FA7 57 PUSH EDI
00EA0FA8 56 PUSH ESI
省略码...
00EA101B 5A POP EDX
00EA101C 8B75 FC MOV ESI,DWORD PTR SS:[EBP-4]
00EA101F 8B3B MOV EDI,DWORD PTR DS:[EBX]
00EA1021 03FA ADD EDI,EDX
; 各个区段的开始偏移加上基址,从最后一个开始加。个区段的起始偏移就在EDI中
00EA1023 8B4B 08 MOV ECX,DWORD PTR DS:[EBX+8]
00EA1026 8BC1 MOV EAX,ECX

00EA12D0 55 PUSH EBP ; 一路按F8到下面那个CALL
00EA12D1 8BEC MOV EBP,ESP
00EA12D3 53 PUSH EBX
00EA12D4 57 PUSH EDI
00EA12D5 56 PUSH ESI
00EA12D6 8B75 0C MOV ESI,DWORD PTR SS:[EBP+C]
00EA12D9 8B5D 08 MOV EBX,DWORD PTR SS:[EBP+8]
00EA12DC 33C0 XOR EAX,EAX
00EA12DE 3946 10 CMP DWORD PTR DS:[ESI+10],EAX
00EA12E1 75 04 JNZ SHORT 00EA12E7
00EA12E3 3906
CMP DWORD PTR DS:[ESI],EAX
00EA12E5 74 24 JE SHORT 00EA130B
00EA12E7 0306
ADD EAX,DWORD PTR DS:[ESI]
00EA12E9 74 03 JE SHORT 00EA12EE
00EA12EB 0343 08
ADD EAX,DWORD PTR DS:[EBX+8]
00EA12EE 8B4E 0C MOV ECX,DWORD PTR DS:[ESI+C]
00EA12F1 034B 08 ADD ECX,DWORD PTR DS:[EBX+8]
00EA12F4 8B7E 10 MOV EDI,DWORD PTR DS:[ESI+10]
00EA12F7 85FF TEST EDI,EDI
00EA12F9 74 03 JE SHORT 00EA12FE
00EA12FB 037B 08
ADD EDI,DWORD PTR DS:[EBX+8]
00EA12FE 50 PUSH EAX
00EA12FF 57 PUSH EDI
00EA1300 51 PUSH ECX
00EA1301 53 PUSH EBX
00EA1302 E8 1F000000 CALL 00EA1326
; 到这个CALL时按F7跟进去
00EA1307 40 INC EAX
00EA1308 75 08 JNZ SHORT 00EA1312

00EA1326 55 PUSH EBP ; 一路按F8
00EA1327 8BEC MOV EBP,ESP
00EA1329 83C4 E8 ADD ESP,-18
00EA132C 53
PUSH EBX
省略码...
00EA1370 5B POP EBX
00EA1371 C9 LEAVE
00EA1372 C2 1000 RETN 10
00EA1375 90
NOP
都是 NOP...

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 7
支持
分享
最新回复 (17)
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
沙发,学习!
2009-2-16 15:55
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
3
cc很久没出手了,学习
2009-2-16 17:08
0
雪    币: 1608
活跃值: (1044)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习~
2009-2-17 09:19
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=;]...[/QUOTE]
很久没看到CC的了~~学习学习
2009-2-17 10:20
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
CC一定是在闭关练功,等着,会陆续来礼物的
2009-2-17 18:59
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
CC太强大了,,感谢好文!
2009-2-17 19:27
0
雪    币: 136
活跃值: (220)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
8
感谢cc的作品 太强了
2009-2-18 13:03
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
Support.
2009-2-19 15:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习 支持  
2009-2-19 15:49
0
雪    币: 65
活跃值: (811)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
11
哇~~~
好久不见C版出来了,嘿嘿~~~
C版出品,必属精品,收藏学习了·~~
2009-2-22 18:39
0
雪    币: 65
活跃值: (811)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
12
CC版,出手就是精品,哈哈,收藏学习了
2009-2-22 18:41
0
雪    币: 75
活跃值: (905)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
一出手就知道是大老级的作品!
2009-2-22 20:19
0
雪    币: 191
活跃值: (351)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
14
楼主请看下这东西脱壳后如何完美重建各区段?

脱壳后如果出现 runtime error R6002 程序检查RAV是否可写,不可写程序不载入,我们强行更改成可写!
可以把下面改掉:

005B85B4 |. 59 pop ecx ; 111.00612800
005B85B5 |. 85C0 test eax, eax
005B85B7 |. 74 0A je short 005B85C3
005B85B9 |. FF75 08 push dword ptr [ebp+8]
005B85BC |. FF15 00286100 call dword ptr [612800] ; 111.005B5394
005B85C2 |. 59 pop ecx

把 005B85B7 je 更改 nop

关于这东西的脱壳问题不大,问题在于如果脱壳后不用 FreeRES v0.94 重建资源,那么用 PE Explorer 1.9.8 等资源工具修改后程序无法运行,如果用FreeRES v0.94 重建资源,那么脱壳后的文件等于说是多了一个垃圾区段。

希望楼主可以交流一下本程序脱壳后的各区段完美重建及资源段无重复区段的可修改方法。
上传的附件:
2009-5-1 06:39
0
雪    币: 2506
活跃值: (1050)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
15
用我这个帖子里的脚本直接脱:
http://bbs.pediy.com/showthread.php?t=82168
脱完先用 FixRes dump 资源,再把脱壳后的程序第二个段的特征值改为 40000040,把 TLS 目录和大小都改为0,现在删除垃圾段,拼接 dump 的资源即可。
附件是我用脚本脱完后删除垃圾区段,重建资源,修改了 PE 头中相关信息的脱壳文件,你可以对照一下。还可以用 PE 优化工具再把文件对齐优化为 200,可以再减小一点体积。
上传的附件:
2009-5-1 10:56
0
雪    币: 191
活跃值: (351)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
16
[QUOTE=CCDebuger;614969]用我这个帖子里的脚本直接脱:
http://bbs.pediy.com/showthread.php?t=82168
脱完先用 FixRes dump 资源,再把脱壳后的程序第二个段的特征值改为 40000040,把 TLS 目录和大小都改为0,现在删除垃圾段,拼接 dump 的资源即可。
附件是我...[/QUOTE]

这个确实可以修改资源了,而且各区段也比较干净。我想问一下你脱壳后删除了哪几个垃圾区段?
2009-5-2 07:40
0
雪    币: 2506
活跃值: (1050)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
17
用我那个脚本脱完 dump 资源后,删掉了最后的 CanBeDel 段和倒数第二个段,再拼接 dump 出来的资源段。
2009-5-2 10:08
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢分享  看看  学习下
2009-5-3 15:44
0
游客
登录 | 注册 方可回帖
返回