首页
社区
课程
招聘
[原创]ExeCryptor 2.2.X 脱壳
发表于: 2006-8-8 08:59 20491

[原创]ExeCryptor 2.2.X 脱壳

2006-8-8 08:59
20491
【文章标题】: 脱ExeCryptor2.2.50
【文章作者】: wynney
【软件名称】: UnPackMe ExeCryptor2.2.50.j
【软件大小】: 481K
【下载地址】: 自己搜索下载
【加壳方式】: ExeCryptor2.2.50
【保护方式】: All Protection Enabled + 100% Virtualization
【编写语言】: VC++
【操作平台】: XP SP2
【软件介绍】: Compressed Resources/Code/Data/Maximum ComPression
【作者声明】: 闲得无聊。凑热闹~^_^
--------------------------------------------------------------------------------
【详细过程】
  一、序言
  昨天找大家测试了一翻,初步结果是部分输入表没有修复的文件只能在我的同平台上运行,修复了输入表的找朋友把SP1、
  SP2、2000、2003 上都测试了个遍,没发现问题。至于如果在你那有问题,还望能够提供点实质性的帮助信息给我:)
  至于为什么放个部分输入表没修复的上来,是为了证实我的某些想法:)

  关于ExeCryptor的反OD能力的确是厉害,至于有多厉害,前人已有述说,我就不在这里累述。当然,也有不少破解之道,
  有兴趣的倒可以去好好拜读下loveboom的“穿透eXeCryptor 2.2x 保护体系(年终篇)”,的确经典,我也不多说。我这
  里介绍另外一种法子。使用NtGlobalFlag(OD插件)可以让它停在EP处,另外需要HideOD,IsDebug,Hidedbg插件。
  

我在配置OD的时候发现NtGlobalFlag与某些OD有冲突,导致OD根本就没法正常工作,不知道大家那里情况如何。为此,
我专门配置了一个脱ExeCryptor,大家可以多找几个OD试下。

  
  二、代码解压,找OEP
    1、打开OD
    2、忽略所有异常
    3、插件--NtGlobalFlag选下Set TempBreak on Tls Callback,SET LDR_SHOW_SNAPS
    4、隐藏OD
    5、打开需要脱壳的文件
  如果OD插件配置得好,隐藏得好,此时,一载入OD呈程序运行状态,不一会而就停在了Tls Callback处
  
  

00526918 E8 EBFEFFFF CALL UnPackMe.00526808 ;EP
0052691D 05 E55E0000 ADD EAX,5EE5
00526922 FFE0 JMP EAX
00526924 E8 04000000 CALL UnPackMe.0052692D ; TLS CallBack
00526929 FFFF ??? ; Unknown command
0052692B FFFF ??? ; Unknown command
0052692D 5E POP ESI
0052692E C3 RETN
0052692F 0000 ADD BYTE PTR DS:[EAX],AL
00526931 0000 ADD BYTE PTR DS:[EAX],AL

  
  Alt+B,会发现有2个断点
  

Address Module Active Disassembly Comment
0052690C UnPackMe One-shot CALL UnPackMe.00526808
7C92EBAC ntdll When STRING [[[esp+4]+18h PUSH EBP

  都删掉吧
  
  接下来,Alt+M,在00401000段F2,Shift+F9中断下来
  

00519E01 AA STOS BYTE PTR ES:[EDI] ;中断在此
00519E02 ^ EB E9 JMP SHORT UnPackMe.00519DED
00519E04 E8 FC000000 CALL UnPackMe.00519F05
00519E09 0F82 97000000 JB UnPackMe.00519EA6

  Ctr+F:CMP ECX,2
  

00519E91 /EB 5E JMP SHORT UnPackMe.00519EF1
00519E93 |83F9 02 CMP ECX,2 ;找到这里,F2
00519E96 |74 66 JE SHORT UnPackMe.00519EFE
00519E98 |41 INC ECX

  这里呢,当ECX=2的时候解码。Shift+F9运行,中断10次(注意观察ECX的值变化,第10次ECX=2,第11次程序运行)
  OK,取消断点(可以在此处Dump了,但是,为了后面的Stolen Code还是到后面Dump吧)
  
  Alt+M,在00401000段F2,Shift+F9,如果一切顺利会中断下来
  

004271AE 90 NOP
004271AF 90 NOP
004271B0 - E9 6CD10500 JMP UnPackMe.00484321
004271B5 58 POP EAX
004271B6 C1C0 18 ROL EAX,18
004271B9 - E9 424E0400 JMP UnPackMe.0046C000
004271BE 70 12 JO SHORT UnPackMe.004271D2
004271C0 6C INS BYTE PTR ES:[EDI],DX ; I/O command
004271C1 90 NOP
004271C2 321F XOR BL,BYTE PTR DS:[EDI]
004271C4 ED IN EAX,DX ; I/O command
004271C5 50 PUSH EAX ; 中断在这里
004271C6 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
004271CD 83C4 A8 ADD ESP,-58
004271D0 53 PUSH EBX
004271D1 56 PUSH ESI
004271D2 57 PUSH EDI
004271D3 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
004271D6 FF15 DC0A4600 CALL DWORD PTR DS:[460ADC] ; UnPackMe.00475EF8
004271DC 33D2 XOR EDX,EDX
004271DE 8AD4 MOV DL,AH
004271E0 8915 34E64500 MOV DWORD PTR DS:[45E634],EDX
004271E6 8BC8 MOV ECX,EAX
004271E8 81E1 FF000000 AND ECX,0FF
004271EE 890D 30E64500 MOV DWORD PTR DS:[45E630],ECX
004271F4 C1E1 08 SHL ECX,8
004271F7 03CA ADD ECX,EDX
004271F9 890D 2CE64500 MOV DWORD PTR DS:[45E62C],ECX
004271FF C1E8 10 SHR EAX,10

  
  三、找Stolen Code
  
  大致一看,就知道是VC++的程序了
  现在需要还原Stolen Code了
  注意看堆栈
  

0012FFB4 004292C8 UnPackMe.004292C8 ;push 004292C8
0012FFB8 00450E60 UnPackMe.00450E60 ;push 00450E60
0012FFBC FFFFFFFF ;push -1(FFFFFFFF)
0012FFC0 0012FFF0

  再结合VC入口特征(封装)即可得到Stolen Code
  
  

004271B0 U> 55 push ebp
004271B1 8BEC mov ebp,esp
004271B3 6A FF push -1
004271B5 68 600E4500 push UnPackED.00450E60
004271BA 68 C8924200 push UnPackED.004292C8
004271BF 64:A1 00000000 mov eax,dword ptr fs:[0]

55 8B EC 6A FF 68 60 0E 45 00 68 C8 92 42 00 64 A1 00 00 00 00

  另外还有种方法,可以Enter进
  004271B0  - E9 6CD10500     JMP UnPackMe.00484321
  004271B9  - E9 424E0400     JMP UnPackMe.0046C000
  再根据VC入口特征找到Stolen Code
  
  好了,恢复Stolen Code之后,在OEP=004271B0处右键新建EIP,至此可以Dump了!
  
  四、修复IAT

  小插曲:我发现用OllyDump.dll插件,以Method1,勾选Rebulid Import之后的脱壳文件竟然可以在本机同样平台上运行,
  在其他平台上就跑不起来了,这个已经得到各位帮忙测试的朋友的证实。
  关于IAT的修复,前面有大侠介绍脚本、补代码等修复方法,只是本人比较懒了。
  可以使用以下懒方法修复

    单独运行加壳程序,OEP既然知道了,IAT Start&IAT End就很容易知道了,填入OEP RVA Size,直接点获取输入表
  法1、等级3修复
  法2、使用ImportREC的ExeCryptor插件
  
  
  注意:我找了几个ExeCryptor2.2.50加壳的程序(包括loveboom的“穿透eXeCryptor 2.2x 保护体系(年终篇)”中的例子),
  使用这2个方法屡试不爽。但是,值得注意的是用等级3修复会有个别kernel32范围内的指针无法修复,或者是修复不准确,
  根据经验判断此指针应该(不是一定)是GetModuleHandleA。
  
  五、纠正Tls
  
  获取了全部IAT之后,Fix Dump!
  运行程序,既然出现了两个同样的窗口,偶尔几次运行会出现提示文件冲突!
  这就是Tls Callback的原因了
  
  使用LoadPE修正以下3个值为:
  Base Of Code=1000
  Tls Directory RVA=00000000
  Tls Directory SIZE=00000000
  
  再次运行程序发现一切正常
  
  Alt+M

  双击0046B000区段,发现
  
  

0046B000 CC B0 06 00 00 00 00 00 FF FF FF FF 3C B0 06 00 贪.....??<?.
0046B010 B4 B0 06 00 08 B1 06 00 00 00 00 00 FF FF FF FF 窗.?.....??
0046B020 E8 B0 06 00 04 B1 06 00 00 00 00 00 00 00 00 00 璋.?.........
0046B030 00 00 00 00 00 00 00 00 00 00 00 00 6B 65 72 6E ............kern
0046B040 65 6C 33 32 2E 64 6C 6C 00 00 00 00 00 00 47 65 el32.dll......Ge
0046B050 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 tModuleHandleA..
0046B060 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 ..LoadLibraryA..
0046B070 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 ..GetProcAddress
0046B080 00 00 00 00 00 00 45 78 69 74 50 72 6F 63 65 73 ......ExitProces
0046B090 73 00 00 00 00 00 56 69 72 74 75 61 6C 41 6C 6C s.....VirtualAll
0046B0A0 6F 63 00 00 00 00 56 69 72 74 75 61 6C 46 72 65 oc....VirtualFre
0046B0B0 65 00 00 00 29 B5 80 7C C4 2F 88 7C 28 AC 80 7C e...)?|??(?|
0046B0C0 A2 CA 81 7C 81 9A 80 7C 14 9B 80 7C 4C B0 06 00 ⑹????|L?.
0046B0D0 60 B0 06 00 70 B0 06 00 84 B0 06 00 94 B0 06 00 `?.p?.?.?.
0046B0E0 A4 B0 06 00 00 00 00 00 75 73 65 72 33 32 2E 64 ぐ.....user32.d
0046B0F0 6C 6C 00 00 00 00 4D 65 73 73 61 67 65 42 6F 78 ll....MessageBox
0046B100 41 00 00 00 0B 05 D5 77 F4 B0 06 00 00 00 00 00 A... 征舭.....

  这些函数都有了,不需要我们手工添加了,手工!
  
  使用此法,可以很快搞定loveboom的“穿透eXeCryptor 2.2x 保护体系(年终篇)”中的例子,
  关于哪个例子,南蛮妈妈已经写有文章,只是OEP这个地方纠正得不太妥当,他是在程序中找空闲写Stolen Code的
  完全可以遵照VB入口情况在原OEP处修复!
  
  
--------------------------------------------------------------------------------
【经验总结】
  1、大家也可以使用loveboom的“穿透eXeCryptor 2.2x 保护体系(年终篇)”中介绍的方法来防止反OD
  2、脱这个完全是稀里糊涂的oοО
  3、再此请教下关于DarkBull在他的文章之中提到的修复已初始数据的原理
  4、以上需要的插件什么的。。大家自行搜索下载吧
  5、感觉这一个Stolen Code不强,大家自行练习其他软件的时候,自行解决遇到的问题
  6、此发适合2.2.50至于其他版本在下不知,2.2.50以下的版本还要简单
  7、文中有何错误望大家指出,谢谢
  8、经过测试此法基本适用于2.2.60,当然具体问题得具体分析了
  9、Thanks All
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年08月09日 11:04:52



这个是部分输入表没修复的脱壳文件
修复过输入表的在第5楼:)

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 7
支持
分享
最新回复 (34)
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
XP SP2正常
这句比较显眼,呵~“If you unpack it write a tutorial...”
2006-8-8 09:05
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
3
Teddy_Rogers 真有时间

XP SP2 可以运行
2006-8-8 09:08
0
雪    币: 513
活跃值: (2258)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
4
win2003 error,看了一下,不明白为什么不修复输入表呢?
2006-8-8 09:19
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
5
最初由 loveboom 发布
win2003 error,看了一下,不明白为什么不修复输入表呢?

无意中发现,OD插件勾上输入表修复(1)直接脱壳在自己的机器上可以跑
就想大家测试下在其他机器上怎么样了,想证实下我的某些想法

这下面这个是我修复了输入表的,麻烦试试这个
上传的附件:
2006-8-8 09:34
0
雪    币: 198
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
两个文件在XP2运行正常
2006-8-8 10:48
0
雪    币: 225
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ywb
7
If you unpack it write a tutorial...”

请遵照执行
2006-8-8 11:20
0
雪    币: 238
活跃值: (12)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
8
运行正常,xpsp2
2006-8-8 11:43
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
天草可以试试2.3.9的  
2006-8-8 12:20
0
雪    币: 319
活跃值: (2404)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
10
win2k下可以运行。
2006-8-8 14:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
XP SP2 下,两个都可以运行
2006-8-8 19:19
0
雪    币: 200
活跃值: (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
强烈要求楼主写教程!
2006-8-8 21:15
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
运行正常!!XP2
2006-8-8 22:38
0
雪    币: 245
活跃值: (195)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
14
Windows XP-SP1 ,ERROR

哕行邋锗,劫束程序....
2006-8-9 00:55
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
15
修复了IAT的 在SP1 2003虚拟机上正常!
2006-8-9 08:29
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
16
谢谢 大家帮忙测试
现在放上陋文
别丢砖头哦
2006-8-9 11:21
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
17
已经初始化的数据是 delphi 相关的吧,其他程序似乎没有见到.
2006-8-9 11:47
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
18
哈哈 终于放教程了
精华!
2006-8-9 14:15
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
19
最初由 wynney 发布
3、再此请教下关于DarkBull在他的文章之中提到的修复已初始数据的原理


这点也没搞懂  

调试用ollyice+hideod就可以  其它隐藏od插件就不用了
否则可能导致无法正常调试的。
2006-8-9 18:12
0
雪    币: 269
活跃值: (51)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
教程很好,最好能做个动画.
2006-8-9 19:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
好文  。。。
2006-8-9 20:20
0
雪    币: 175
活跃值: (2331)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
2003系统运行错误。
2006-8-9 20:26
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
If you unpack it write a tutorial...”

请遵照执行
2006-8-9 21:52
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
24
最初由 xingbing 发布
2003系统运行错误。

楼猪已经说过了的嘛
第一个是没修复输入表的
除了XP SP2上是跑不起来的
5楼在我在我的虚拟2003,2000上测试过没问题
2006-8-10 00:00
0
雪    币: 274
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
谁可以帮我脱一下:EXECryptor 2.2.4的壳,由于权限不够,上传不了附件!乐意帮忙的联系我!QQ:122383394
2006-8-24 09:50
0
游客
登录 | 注册 方可回帖
返回
//