首页
社区
课程
招聘
[原创]UltraEdit 中文版背后的故事
发表于: 2010-4-25 13:11 12029

[原创]UltraEdit 中文版背后的故事

2010-4-25 13:11
12029

自己先搞了一下 然后又看了一下网上的爆破方法

先说一下网络上流传的爆破方法: OD载入后 Ctrl+S 搜索 PUSH 6E6D 这个是弹出过期的资源对话框的ID值

我们通过启动时判断是否注册来定位程序的验证点。用工具eXeScope 查看 ueres.dll



这个方法很快 我用的是另一种方法 点程序关于的时候 根据对话框文字内容不同 在内存下硬件读取断点来定位

最终效果都是相同的 定位到算法CALL的关键跳:

Cr(1032版):
00806282     /EB 02         JMP SHORT Uedit32.00806286                 ;  修改为JMP
00806284  |. |8AC3          MOV AL,BL

如果只是这样的话 是不是很爽的 我查看了一下老外的版本 发现也是这样搞的

0046333B    E8 A078FFFF     CALL Uedit32.0045ABE0
00463340    8B2D 201CB500   MOV EBP,DWORD PTR DS:[<&USER32.SendMessa>; user32.SendMessageA
00463346    83C4 14         ADD ESP,14
00463349    84C0            TEST AL,AL
0046334B    0F84 1D030000   JE Uedit32.0046366E                      ; 16.0.0.1038 就是把这里NOP掉就OK了
00463351    391D E478D900   CMP DWORD PTR DS:[D978E4],EBX
00463357    0F85 11030000   JNZ Uedit32.0046366E
0046335D    395C24 14       CMP DWORD PTR SS:[ESP+14],EBX
00463361    74 28           JE SHORT Uedit32.0046338B
00463363    8B4C24 24       MOV ECX,DWORD PTR SS:[ESP+24]
00463367    8B5424 28       MOV EDX,DWORD PTR SS:[ESP+28]
0046336B    83EC 10         SUB ESP,10
0046336E    8BC4            MOV EAX,ESP
00463370    8908            MOV DWORD PTR DS:[EAX],ECX
00463372    8B4C24 3C       MOV ECX,DWORD PTR SS:[ESP+3C]
00463376    8950 04         MOV DWORD PTR DS:[EAX+4],EDX
00463379    8B5424 40       MOV EDX,DWORD PTR SS:[ESP+40]
0046337D    8948 08         MOV DWORD PTR DS:[EAX+8],ECX
00463380    8950 0C         MOV DWORD PTR DS:[EAX+C],EDX
00463383    E8 680CFFFF     CALL Uedit32.00453FF0                    ; 该CALL中调用 6E6D 资源

而中文版则不然,英文版程序大小为 9.66M 而中文版大小为12M



英文版下载链接(1038版)::79dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4g2D9N6s2u0S2k6h3c8A6N6q4)9J5k6h3y4G2L8g2)9J5c8X3k6A6L8r3g2K6i4K6u0r3N6h3g2Q4y4h3k6W2L8X3N6D9K9i4y4Z5i4K6u0W2P5X3W2H3
中文版下载链接(1032版)::f3eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4g2D9N6s2u0S2k6h3c8A6N6q4)9J5k6h3y4G2L8g2)9J5c8X3k6A6L8r3g2K6i4K6u0r3N6h3g2Q4y4h3k6U0K9r3W2F1k6i4y4W2i4K6u0W2P5X3W2H3

    那多出来的代码是什么呢 ? 通过调试得中文版的UE做了很多BT的事情,OD调试的时候首先是无法下INT3断点的。程序在启动时会效检代码段数据是否被修改过,所以我们下 BP ReadProcessMemory 函数或者对我们下INT3断点的数据下内存读写断点(我喜欢后者)。然后还没有结束,程序会用效检数值解密代码并将数据填充到代码段某几段数据,说的俗点就是SMC解码代码段的几段数据。

    我调试的是1032的版本,笔记比较乱,我详细说思路和方法,所以简单贴上关键点,对于读取代码段数据进行效检部分的代码就不贴了,留给有心人去自己调试吧,这里只贴出程序SMC填写那三段数据的函数:

00C21D7F    8B4D 08         MOV ECX,DWORD PTR SS:[EBP+8]
00C21D82    51              PUSH ECX                                 ; ECX 是长度
00C21D83    8B55 C8         MOV EDX,DWORD PTR SS:[EBP-38]
00C21D86    52              PUSH EDX                                 ; EDX 是源代码段
00C21D87    8B45 0C         MOV EAX,DWORD PTR SS:[EBP+C]
00C21D8A    50              PUSH EAX                                 ; EAX 是要目的代码段
00C21D8B    E8 6040DFFF     CALL Uedit32_.00A15DF0                   ; 该CALL实现SMC写入

    这样一共SMC动态填充程序的三段数据。问题就来了:该函数的第二个参数(EDX的源数据)是如何解密的来的呢? 这里有兴趣的朋友可以继续内存断点来分析。我是这样想的,如果是动态效检的结果再去计算得到的源数据,而调用的函数都是同一个,与其处理效检值,不若直接把这个COPY函数NOP掉,手动把正确的代码Patch回去,然后把这个函数NOP掉好了。这个是破解壳的时候对付SMC的常见手法哈。还好啦,就三段,不然会死人啦 ……

    程序跑起来之后基本上就没啥了,但是BT的UE又开始效检,又把我们自己Patch进去的三段代码给乱码写回去,真够猥琐的。于是乎把那里也咔嚓掉。看来UE对中文用户特别关照了,这3M真不白给哈。有兴趣的朋友可以一起分析一下UE中文版本的效检。就到这吧,有有时间再来灌水 ~~


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

上传的附件:
  • 0.GIF (11.90kb,1632次下载)
  • 1.GIF (9.95kb,1629次下载)
收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
NO.1   ????

good!
2010-4-25 13:19
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
占位学习下!!
2010-4-25 13:46
0
雪    币: 218
活跃值: (210)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
LZ真是牛呀!
2010-4-25 20:37
0
雪    币: 267
活跃值: (24)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
28269 6E6D  这方法不错~学到一点~
2010-4-26 16:00
0
雪    币: 245
活跃值: (93)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
6
顶贴 学习了
2010-4-26 21:18
0
雪    币: 707
活跃值: (1301)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
7
不错的分析,不过不用它!
2010-4-28 00:21
0
雪    币: 253
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
lz,请教两个问题哈,1、如何用exescope定位关键跳,是通过确定按钮的id吗?
2、smc的绕过方法没有太明白,能够说的详细一些,谢谢!
2010-4-28 08:51
0
雪    币: 167
活跃值: (1574)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
9
这个软件楼主调过了没 看样子貌似没看太明白文章 这样吧 等你调试了 还有问题 我再来解答
2010-4-29 19:04
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不错!思维很清晰!学习中!
2010-4-29 19:22
0
雪    币: 377
活跃值: (1835)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
11
学习下。。。
2010-4-29 19:37
0
雪    币: 167
活跃值: (1574)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
12
没缘分呀
2010-5-23 11:44
0
雪    币: 253
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
有点意思!学习!
2010-5-24 08:36
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习了。谢谢分享。
2010-5-24 10:06
0
雪    币: 1681
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
itf
15
强悍 学些了~~谢谢~~~
2010-5-24 11:42
0
雪    币: 883
活跃值: (314)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
16
思路很不错,学习了。
2010-5-25 09:05
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
不错,学习鸟~
UltraEdit其实还有些烦人的bug的,比如在操作大文件(反汇编文档)时,使用宏和脚本时几乎每次都会出现错误而崩溃,我用的是1026版,1032没用过不太清楚。
2010-5-25 22:08
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
不错,学习鸟~
UltraEdit其实还有些烦人的bug的,比如在操作大文件(反汇编文档)时,使用其宏和脚本功能时几乎每次都会出现错误而崩溃,我用的是1026版,1032没用过不太清楚。
2010-5-25 22:09
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
学习了~~~~
2010-5-28 16:52
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
20
老外如此照顾,俺们中国的逆向水平会越来越高的
2010-5-28 19:01
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
强大,学习中~~
2010-5-29 22:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
能不能改一下Ultraedit for linux
2010-6-30 15:37
0
游客
登录 | 注册 方可回帖
返回