·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> 工具使用 >> 对话框破解两例    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

对话框破解两例

作者: 梁利峰 来源:点睛工作室 时间:2003-08-05 点击:8485


对话框破解两例


声明

个人可以自由转载本文,不过应保持原文的完整性,并通知我;商业转载先请和我联系。

本文没有任何明确或不明确地提示说本文完全正确,阅读和使用本文的内容是您自己的选择,本人不负任何责任,但是如果您发现本文有错漏的地方,希望您可以给我指出。另外如果有什么问题,可以给我提出。

对于本文提出的方法,旨在提高大家对软件的认识,切勿用于非法目的,读者慎之,并本人不对此负任何责任,也不回答有非法目的的任何问题。

意见、建议和提出的问题最好写在我的主页 http://llf.126.com 的留言版上。

一 Trw 2000

在 Dos 下,我所知道的 Debug 工具好用的大概就数 SoftIce 了吧?不过当时对于调试(或破解)汇编代码没有任何头绪,也因此并不太会用这些工具,虽然后来听说国人出了一个很好用的 Tr 用于调试(或破解)程序,但是心有畏惧,况且 Tr 当时还很年轻,有很多功能比起 SoftIce 确有不足,因此罢了。记得当时有一个制作磁盘压缩软件 Stacker 的公司就是使用 SoftIce 反汇编 Dos 的内核得到的驱动程序的缺省加载的方法并用之于 Stacker ,于是也被微软告上法庭,说是滥用商业秘密,:( 不过最后是庭外和解了,真的很佩服有此等能力的人。

在 Windows 下,等了很久才见到 SoftIce 的 Windows 版,不过仍然不会用,:( 不过我最不喜欢 SoftIce 的地方是需要在 Windows 启动前加载其驱动程序,我又不是汇编程序员,只是有时候想随便看一看而已,却让其驱动程序有事没事的占据系统资源,实在不甘心;后来知道 Tr 的兄弟 Trw 出了,Trw 的兄弟 Trw 2000 又出了,而且是动态加载的,于是又生出了使用的欲望了。

使用了 Trw 2000 以后,确实感到很好用,其实,面对浩瀚的汇编海洋,我们最希望的能尽快的找到我们想要看的一小段代码,Trw 2000 恰巧有一些很符合这一点的功能,而且有一些 SoftIce for windows 所没有的功能,不得不说确实不错!

二 破解 WinZip beta 的对话框

虽然我很喜欢 WinRAR 的高压缩率,但是 WinZip 也一直是用的,最近使用的是 WinZip 8.0 beta 版,一开始,一切良好,可是到了一定的时候,它就跳出一个对话框说,这个版本是测试版,你应该下载新版本了等等,其它倒是没有什么障碍,不过既然要试用 Trw 2000 ,就拿它开刀了。

打开 Trw 2000 ,把“WinZip.exe”拖到 Trw 2000 的窗口里,按“Load”键,出现调试窗体,一直按“F10”直到出现对话框,不过现在不止出现对话框而已,甚至进入 WinZip 的主界面也没有返回,所以关闭 WinZip ,于是返回调试界面,按“F6”到代码窗口,在上面一句“CALL ...”上按“F9”设断点,再按“F5”运行,返回 Trw 2000 主界面,再次按“Load”,出现调试窗体,按“F5”运行,到达上一次设断点的“CALL ...”处,按“F8”跟踪进入此呼叫,再按“F10”直到又一次出现对话框,重复以上步骤 …… ,

最后见到了一个呼叫系统 API 函数的调用,好像叫什么“Dialog...”的,记不清了,键入“CODE ON”,显示其二进制码,记下来,再用 UltraEdit 之类的可以进行二进制编辑的工具编辑修改即可。(具体修改方法见下一个例子,这一个记不清了:)

三 破解 XrX Logo 的对话框

看了一些 Trw 2000 的介绍,才发现我上一次使用的方法非常笨拙,其实 Trw 2000 在这一方面有很好用的功能可用,所以又选了一个软件做实验。

XrX Logo 是一个编辑 Windows 启动画面的工具,非常好用,我的网站有它的下载,最近发现在运行之前后跳出一个对话框,并不影响使用,所以也成了 Trw 2000 的釜中之物了。

XrX Logo 使用 Delphi(或 C++ Builder)编写,从它的资源就可以看出,不过这并不对我们的破解造成影响。

运行 Trw 2000 ,拖动“Xrxlogo.exe”到 Trw 2000 的窗口,按“Load”,出现调试窗口,按“F5”运行,跳出对话框,这时按键盘的“Ctrl+N”调出 Trw 2000 的调试窗口,键入“PMODULE”命令,返回对话框,点击“Ok”关闭对话框,Trw 2000 的调试窗体自动出现,停在一句“CALL ...”之后,如下:

	PUSH EAX
	PUSH EDI
	PUSH ESI
	MOV  EAX,[EBX+24]
	PUSH EAX
	CALL USER32!MessageBoxA   ;很熟悉吧?
	PUSH EAX                  ;停在这一句

现在很简单,在第一句上按“F9”设断点,重新调入 XrX Logo ,按“F10”单步执行,找到和 MessageBoxA 之后一句的 ESP(应该是堆栈指针)值相同的 PUSH 语句,就从这里下刀,在这里就是以上显示的第一句,键入“CODE ON”命令,显示其二进制值如下:

	50                 PUSH EAX
	57                 PUSH EDI
	56                 PUSH ESI
	8B 43 24           MOV  EAX,[EBX+24]
	50                 PUSH EAX
	E8 8E 74 FD FF     CALL USER32!MessageBoxA

记下来,退出 XrX Logo 和 Trw 2000,使用 UltraEdit 编辑 Xrxlog.exe ,查找刚才见到的二进制数,把 PUSH 语句改为 JMP 语句,因为 JMP 语句占用两个字节,所以应该跳过的字节数应该从“PUSH ESI”也就是“56”开始,共计 10 个字节,也就是 0x0a ,所以把开头的“50 57”改成“EB 0A”,再次运行 XrX Logo ,对话框没有了。

有一点要注意,运行完 Trw 2000 之后,需要校对一下系统时钟,在出现 Trw 2000 的调试窗口的时候,系统时钟也是停止的,所以之后会慢很多。

上面说的“EB”就是 JMP 指令,很奇怪我没有在 Trw 2000 的命令里见到“A”汇编指令(对不起,其实 Trw 2000 里是有“A”汇编指令的,至少现在这一个版本有...4月7日修正),不知道是不是只给注册用户的。据说 SoftIce 的新版本推出后首先遭到破解的就是它自己,Trw 2000 好像没有这种现象,中国人的保密方法还是很先进的:物理上切断!比如一个软件,只免费提供一个简化版,为什么不能完成注册版的功能呢?因为简化版里根本就没有相关部分的代码。相比只是做了一些手脚使功能失效的软件,因为代码在,所以还是有办法破解的。

记得一个评论《谍中谍》的文章说,Tom 去偷盗碟片的情节不合事实 —— 只要找一个黑客直接从网上偷出来就可以了吗。这就是对于黑客技术及其限制丝毫没有概念了,敌人又不是白痴,会把绝密资料都放在网上等你来偷,还是那句话:物理上切断!美国人也是深谙此道的,现在每每抓到黑客,总是判处多少年不得接触任何电脑设备,所以一些著名的黑客现在连收款员都不能当,只能使用老式打字机吃力的写一些文章糊口了。:)

四 探讨

以上的例子里使用的是 JMP 指令硬性的跳过一段代码来实现的破解,现在我使用 VB 指令来探讨一下这样破解需要注意的事项。如下的一段代码:

Option Explicit

Sub Main()
    MsgBox "过期了,请下载新版本。"
    MsgBox "正文"
End Sub

假设 MsgBox 是 API 函数。如果想去掉其中的第一个 MsgBox 又不令第二个 MsgBox 失效很好办,跳过第一个 MsgBox 就是了:

Option Explicit

Sub Main()
        GoTo 正文
        MsgBox "过期了,请下载新版本。"
正文:   MsgBox "正文"
End Sub

但是如果是以下的程序,可能就会有问题:

Option Explicit

Sub Main()
    MessageBox "过期了,请下载新版本。"
    MessageBox "正文"
End Sub

Sub MessageBox(Text As String)
    MsgBox Text
End Sub

因为我们在汇编里见到的是 API 函数,也就是 MsgBox ,所以经修改后,代码就变成了如下的模样:

Option Explicit

Sub Main()
    MessageBox "过期了,请下载新版本。"
    MessageBox "正文"
End Sub

Sub MessageBox(Text As String)
    GoTo 退出
    MsgBox Text
退出:
End Sub

这样,我们执行的时候就会发现,所有的 MsgBox 都失灵了,这是我们不愿意见到,不过如何找到关键的地点跳过,又不造成副作用就不是那么简单的事情了,需要具体情况具体分析,特别作为 VB 、Delphi 这种封装得很好的语言特别会出现这种情况,是需要注意的。

不过话说回来,破解软件毕竟不是目的,只有我们能拿出自己的软件能与之对抗而不是偷盗的时候,我们才能骄傲的说我们真的强大了。

Trw 2000 作为一个 Debug 工具,对于 VB 程序员的用处大概不是很大,但是,我们却可以籍此深入 Windows 的内部,深挖系统的奥秘,这时,Trw 2000 就是一个很好的助手,把 VxDs 、未公开的 API 函数摆在桌面上,则它(Windows)为鱼肉,我为刀俎,不亦快哉?

附录 用 Trw 2000 解压缩

上面已经说了,我在使用 Trw 2000 的上一个版本的时候造成了一个观念:Trw 2000 没有“A”汇编指令,也许我是记错了,不过使用 Trw 2000 来解压缩可执行文件的话,上一个版本确实是有问题的,所以我也没说,不过今天(4月7日)再用一下新版本(1.15),发现它的“PEDUMP”命令确实能正常工作了,所以介绍一下。(也可能是以前使用 Win98 第二版造成的问题,现在对 Win98 第二版深恶痛绝,所以一切罪过都推到它身上了 :)

有很多人喜欢使用可执行文件压缩软件,因为这样可以使程序看起来很小,好像很紧凑的感觉,而且如果压缩率比较大的话,因为省去了大量的 I/O 时间,所以加载速度甚至会快于不压缩,在这种情况下压缩就是很好的选择了。另外,我说过,用 UPX 压缩的文件比 WinRAR 的压缩率还大,因为大多数可执行文件压缩软件都是有损压缩,但是像 WinRAR 这样的程序就只能使用无损压缩,这时,先用 UPX 压缩可执行文件,再用 WinRAR 打包,得到的压缩包比单纯用 WinRAR 的要小的多,也是一种不错的选择,我就常用。不过这样在做汉化之类的事情时就会有解压缩的问题,如果原压缩软件有解压缩的功能的话很好,如果没有就需要自己想办法了,虽然 ProcDump 可以,不过需要有人先写出 INI 文件才行,这时如果使用 Trw 2000 的话就很舒服了。

打开 Trw 2000 ,把要解压缩的文件拖到 Trw 2000 的窗口上,按“Load”,出现调试窗体,键入“PNewSec”,等待大约 20 秒(不一定正好 20 秒,但是要等!),直到 Trw 2000 的调试窗体自动出现,键入“PeDump”命令,完成后关闭调试窗口(或按“F5”运行),关闭原程序,关闭 Trw 2000 ,找一个叫“Dump1.exe”文件,此文件可能在 Trw 2000 的目录下,也可能在要解压的目录下,也可能在 Windows System 目录下,也可能在 C 盘根目录下,反正找到的这个文件就是解压缩后的文件了,改名成原文件名即可,应该还是很容易的吧?

像上面使用的“PNewSec”、“PeDump”命令就是 Trw 2000 所特有的了,也就是说像 SoftIce 一类的工具是没有这些命令的,所以称赞一下并不为过。

点睛工作室·梁利锋 结稿于 2000.4.6(附录于 4.7 )

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): 汇编 破解

·上一篇: VB 与 UniCode ·下一篇: 汉化入门 - 使用 eXescope 汉化 VC 类软件

· 版权申明: 本文引自《点睛工作室》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《点睛工作室》[ 作者: 梁利峰],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号