首页
论坛
课程
招聘
[原创]E语言+hying's PE-Armor壳程序
2006-3-12 18:49 8883

[原创]E语言+hying's PE-Armor壳程序

2006-3-12 18:49
8883
【文章标题】E语言+hying's PE-Armor壳程序的爆破
【文章作者】Ptero
【作者邮箱】thestral@sina.com
【软件名称】大头贴制作系统
【使用工具】OD,PEID,,LordPE,ImportIAT,UltraEdit,KeyMake
【软件限制】Nag,功能限制
【破解平台】win xp sp2
【保护方式】hying's PE-Armor 0.7x
【开发语言】易语言
【本文写于】2006-03-12
【文章声明】hying's PE-Armor和易语言我都是首次接触,写一篇破解笔记

―――――――――――――――――――――――――――――――――
【破解分析】

先用PEiD查壳, Excalibur 1.03 -> forgot [Overlay] *

看入口点:

0073D09D > /E9 00000000     jmp 大头贴制.0073D0A2
0073D0A2   \60              pushad
0073D0A3    E8 14000000     call 大头贴制.0073D0BC

0073D0BC    58              pop eax
0073D0BD    61              popad
0073D0BE  ^ E9 0E00FFFF     jmp 大头贴制.0072D0D1

到这里,和 Excalibur 1.03 一模一样, 再往下就露出狐狸尾巴来了:

0072D0D1    60              pushad                      ; 这个是旧版hying壳的
0072D0D2    E8 00000000     call 大头贴制.0072D0D7      ; 典型入口,新版伪装成了
0072D0D7    5D              pop ebp                     ; Excalibur
0072D0D8    81ED D7000000   sub ebp, 0D7
0072D0DE    8DB5 EE000000   lea esi, [ebp+EE]
0072D0E4    55              push ebp
0072D0E5    56              push esi
0072D0E6    81C5 FD010000   add ebp, 1FD
0072D0EC    55              push ebp
0072D0ED    C3              retn

把EP改为32D0D1, 绕过那个伪装的头部,再用PEiD查: hying's PE-Armor V0.7X -> hying [Overlay] *
哈哈,查出来了!

不过改了EP后程序运行后自动退出, 看来是有自校检. 还是先脱壳吧.

第一次接触 hying's PE-Armor, 感觉像恶梦一样, 这个壳的anti功能极强, 是个考验耐心的累活.
这里就不细说了, 有兴趣的情参考几位斑竹的文章.

手动脱在短时间内是没指望了, 用 forgot 的 romra755 脱掉. 可是在修复输入表的时候遇到了难题,
ImportIAT 说入口点无效. 我只能手动一个区段一个区段地查找IAT, 好在这个程序的IAT不多, 只有
kernel32和user32中的几个.

修复后运行说是 Invalid PE, 还要用 LordPE 的 RebuildPE 功能.

再用PEiD查: Microsoft Visual C++ 6.0 [Overlay]
当时看到这个就放心了, 但事后证明, 如果在这里放心那就完了.

修复、重建后的dumped_.exe运行后提示非法数据, 用OD跟跟看.
从入口到WinMain()的代码几乎和VC++一样(难怪PEiD又被骗了一次).
进入WinMain()以后, 看看调用了哪些API吧:

GetModuleFileNameA
CreateFileNameA
SetFilePointer
ReadFile
GetTempPath
wsprintfA
CreateDirectoryA
WriteFile
CloseHandle
LoadLibrary
GetProcAddress
MessageBoxA

这就是全部的API调用, 连创建窗口的函数都没有. 而且这个程序还把文件解压到temp文件夹来加载.
脱壳后的文件末尾没有这些附加数据, 要从原文件的0x28E800(这个值可以看section算出来)处至文件末

尾的字节全部附加到dumped_.exe末尾.
用OD跟出加载的文件是krnln.fnr(UPX壳). (后来才知道这是易语言的标志)

当运行到这里时:

004014DA  |$  810424 267B0000 add dword ptr [esp], 7B26
004014E1  |.  FFD0            call near eax                 ;  从这里真正进入易语言的领空

esp指向一个字符串 "WTNE / MADE BY E COMPILER - WUTAO " 看到这个我才知道这是易语言

在看雪精华中看了易语言的破文, 依葫芦画瓢地在OD中搜字符串, 结果失败了. 难道是脱壳不干净?

因为有自校检, 脱壳后到程序不能运行, 只能静态分析了.

这个程序是KeyFile的注册方法, 不能跟踪的话就没法得出算法, 只得爆破了.

程序启动时会弹出一个Nag, 大意是没注册有功能限制.

在UltraEdit中搜"您正在使用的是未注册的版本", 在 Offset 0x29493处.
在OD中按 Ctrl+B 搜索 93 94 42 00, 在 006D3A31处(这个是动态解码的)

006D3A98   > \E8 E2BDFDFF     call dumped_.006AF87F         ; 关键call
006D3A9D   .  8945 FC         mov [ebp-4], eax              ; eax≠0 就行了
006D3AA0   .  F9              stc
006D3AA1   .  72 01           jb short dumped_.006D3AA4
006D3AA3      80              db 80                         ; 花指令
006D3AA4   .  837D FC 00      cmp dword ptr [ebp-4], 0
006D3AA8   .  0F85 3D000000   jnz dumped_.006D3AEB          ; 这里可以跳过Nag
006D3AAE   .  F9              stc
006D3AAF   .  72 01           jb short dumped_.006D3AB2
006D3AB1      B5              db B5                         ; 花指令
006D3AB2   .  68 04000080     push 80000004
006D3AB7   .  6A 00           push 0
006D3AB9   .  68 79944200     push dumped_.00429479
006D3ABE   .  68 01030080     push 80000301
006D3AC3   .  6A 00           push 0
006D3AC5   .  68 00000000     push 0
006D3ACA   .  68 04000080     push 80000004
006D3ACF   .  6A 00           push 0
006D3AD1   .  68 93944200     push dumped_.00429493         ; 这里指向我们搜索的字符串
006D3AD6   .  68 03000000     push 3
006D3ADB   .  BB 00030000     mov ebx, 300
006D3AE0   .  EB 01           jmp short dumped_.006D3AE3
006D3AE2      0F              db 0F                         ; 花指令
006D3AE3   >  E8 A98E0200     call dumped_.006FC991
006D3AE8   .  83C4 28         add esp, 28
006D3AEB   >  E8 00000000     call dumped_.006D3AF0

006D3AA8处的jnz可以改为jmp爆掉, 但这是治标不治本的方法.
我们只要让006AF87F这个call返回1就行了. 跟进:

…………………………
…………………………
006AF97E  |> \837D F4 00      cmp [local.3], 0              ; 很经典的cmp+je/jne模式
006AF982  |.  0F84 12000000   je dumped_.006AF99A           ; 这里nop掉就OK了
006AF988  |.  EB 01           jmp short dumped_.006AF98B
006AF98A  |   70              db 70                         ; 花指令
006AF98B  |>  B8 01000000     mov eax, 1
006AF990  \.  E9 12000000     jmp dumped_.006AF9A7
006AF995   .  E9 0D000000     jmp dumped_.006AF9A7
006AF99A  />  EB 01           jmp short dumped_.006AF99D
006AF99C  |   0F              db 0F                         ; 花指令
006AF99D  |>  B8 00000000     mov eax, 0
006AF9A2  |.  E9 00000000     jmp dumped_.006AF9A7
006AF9A7  |>  8BE5            mov esp, ebp
006AF9A9  |.  5D              pop ebp
006AF9AA  \.  C3              ret

最后, 因为脱壳的文件不能运行, 只能做内存补丁了.
在KeyMake中将006AF982处的0F8412000000改为909090909090就OK了.
运行补丁, 原程序所有的功能限制解除! Nag窗口也不见了!

【总结】
1. hying's PE-Armor的花指令和anti crack让我佩服, 也让我心寒.
2. 易语言很好地伪装成VC++, 差点被骗了.
3. 易语言的代码有小花, 影响破解速度. 对付易语言, 动静结合的分析尤为重要.

看雪2022 KCTF 秋季赛 防守篇规则,征题截止日期11月12日!(iPhone 14等你拿!)

收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qiusisi 活跃值 2006-3-12 19:05
2
0
e语言的个头好大~~~~~
雪    币: 195
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
aki 活跃值 2 2006-3-12 19:08
3
0
易语言的壳不用脱就自己掉了。程序里的花指令好像是4种,处理了下,有1000多个。脱壳后有一处校验,再改一处就破解成功了。

雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
usa 活跃值 2006-3-12 19:17
4
0
最初由 Ptero 发布
在UltraEdit中搜"您正在使用的是未注册的版本", 在 Offset 0x29493处.
在OD中按 Ctrl+B 搜索 93 94 42 00, 在 006D3A31处(这个是动态解码的)

........

楼主:是不是在 Offset 0x29493处应改为在 Offset 0x429493处?另外,请问为什么在UltraEdit中搜"您正在使用的是未注册的版本", 用OD直接搜不可以吗?
雪    币: 390
活跃值: 活跃值 (12)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
Ptero 活跃值 8 2006-3-12 19:29
5
0
还以为大家知道就没说,0x29493是offset,转换成RVA是0x429493
另,我用OD搜过了,搜不到,浪费了好长时间的说……
雪    币: 195
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
aki 活跃值 2 2006-3-12 19:32
6
0
前一阵无聊,破解了下这个东西,花指令都处理了,如果需要,可以来这里下载
http://down.52happy.net/Software/Catalog72/508.html

搜索易语言的字符串信息,要等易语言的区段载入重定位后,才能搜索到
雪    币: 390
活跃值: 活跃值 (12)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
Ptero 活跃值 8 2006-3-12 19:45
7
0
为什么我脱壳修复了还是不能运行呢?
6楼当初是怎么脱壳的啊?
雪    币: 195
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
aki 活跃值 2 2006-3-12 20:10
8
0
不明白你说的不能运行是什么意思。易的东西需要补数据的,别的吗,就不知道你哪里出问题了
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fslove 活跃值 2006-3-12 20:12
9
0
E的东西BT.
不动,
游客
登录 | 注册 方可回帖
返回