荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (kernel), 信区: Program
标  题: 怎样为程序打补丁(一)―――基础篇
发信站: 荔园晨风BBS站 (Sat Mar  2 22:09:51 2002), 转信


怎样为程序打补丁(一)―――基础篇

声明:

一.本文实用于初学者,需要具备一定的汇编和系统底层的知识。
二.本文只是为了让广大网友共同提高一些基础知识,本人决无卖弄之 意,只供需要这方
面知识的读者阅读,如果你是高手,或者不需要这方 面知识,请跳过。
三.本文的实例均为普通程序,如有雷同,敬请谅解。
四.本文欢迎传抄转载,如果是商业用途,请联系本人。http:// www.zoudan.com
zoudan@sina.com

   打补丁是常见的一种软件升级和更新手段。打补丁的形式很多,本文
所述的方式基本上为修改原程序二进制代码的方式,适用于Windows95 之后的平台(
Win32)。

   Windows95(Win32)以后的可执行文件都是PE格式,.exe、.ocx、.dll.
等等都是常见的PE格式的文件映像,看一个文件是否为PE文件,不是 看它的扩展名,而是
看它的文件头中是否有PE文件头标示和具体的文 件内容。比如常见的软件"追捕"中那个
wry.dll,就不是一个PE格式的 Dll(动态连接库)文件,通常用16进制编辑软件打开文件
首部观察便 可得知。关于PE文件的具体格式和教程不是本文的描述范围,大家可 以查阅
相关的资料,我网站上那篇"关于95下的可执行文件加密研究"中 也有比较详尽的描述。

   PE文件是一个程序代码、数据的集合。其中的程序代码是该执行文件
本身的,它可能通过动态连接的形式访问其他附属的程序或者动态连接 库,通常一个程序
文件中包含了大量的系统调用和对其他程序及动态连 接库的调用。

   言归正传,无论是破解,程序改良或者程序升级,在改动不大,且没 有源程序参考的
情况下,最直接的方法就是更改PE可执行文件。大家 都知道我制作的补丁程序,基本上就
是直接修改程序文件,使之达到我 们需要得到的功能。

   一个PE可执行文件中通常有很多段(section),分别描述不通的数据 结构和代码。最
基本的几种段有.code(.text)(代码段)、.data(数据 段)、.rdata、.rscs(资源)等
等,这些段的名称可以是程序自定,决定 它们属性的不是他的名称,而是PE文件头中的描
述。有很多查看PE文 件结构和内容的软件,我向大家推荐Borland C自带的一个叫Tdump的
小 软件,很简单和方便,在现在的Borland C++ Builder和Borland C中都有, 大家可以
用他来了解PE文件的内部信息。

   一般来说,修改资源段中的东西最为简单。那些对话框、字符串、位 图等等。修改这
些资源很容易,因为有很多这方面的软件,最常见的就 是VC++,只要用VC用资源修改方式
打开程序文件,所有这个程序相关 的资源就会很容易的修改了。大家可以随便找几个程序
来试试手,挪挪 对话框,改改属性,编辑文字,画画位图,很容易上手和熟悉。

   修改程序文件的其他地方就没有修改资源段容易了,程序当然都是汇
编机器代码,数据也是未知的结构。关于怎样看懂、跟踪、了解程序的 运作就是一件非常
经验的事情,不同的程序不同的方法,没有定式,它 们唯一的共同点就是都是汇编代码,
都能用软件反汇编和动态调试。这 也已经超出了本文的范畴,我想它需要扎实的汇编基础
,系统底层知识 以及丰富的程序调试经验,不可能在很快的时间内掌握。这需要耐心,
长时间的实战以及积累。在此我向大家推荐我常用的工具,静态的反汇 编可以用IDA pro
,使用该软件你会发现枯燥乏味的汇编代码变得井井 有条,且多了很多帮助理解的注释,
当然还有很多重要程序库的符号, 比如MFC库类,标准C库等等。该程序是最好的反汇编工
具,为我们读 懂苦涩的机器指令提供了良好的互动环境。光静态分析汇编代码无疑是 极
其困难的,光靠眼睛看不可能看到寄存器,内存单元数据等等和程序 运行息息相关的东西
。关键是汇编代码苦涩难懂,动态的调试就成了我 们深入了解程序、调试程序、探测程序
的最重要的手段。我所提到的动 态调试是汇编级别的,并非任何高级语言。值得提到的是
有些程序带有 调试符号信息,那会为我们动态调试提供很大很大的便利,不过一般
Release版本都不会把调试信息链接到最终的程序文件中,粗心的程序员 有可能犯这个错
误。总之,汇编级的调试一般来说都非常的艰苦,不过 动态调试和静态阅读相结合还是会
使效率提高很多。动态调试的软件很 多,而且都支持汇编级别的调试。一般集成变成环境
都带有这种工具, 比如VC++,C++ Builder等等。专业调试软件有W32dasm、Trw、
Soft-ice 等等,在这个领域里,Soft-ice无疑是绝对的佼佼者。我觉得几乎没有
Soft-ice触及不到的深度,Soft-ice为我们了解系统的任何一个细节提供了 可能,从DOS
时代到windows时代,Soft-ice无疑是动态调试领域最重要 的工具。好话说得够多了,我
不是在为它打广告,实事的确如此,网上 很容易下载到它的各种版本。Soft-ice虽然很厉
害,但是对初学者来说的 确不容易掌握,且更需要扎实的底层基础。掌握了它就为掌握了
系统的 最底层提供了可能,这无疑是个核武器。

   关于具体怎么放置补丁程序,用DLL动态连接库方式编制复杂的补丁
程序等等细节问题我将在以后的文章中介绍,请各位网友密切留意。

本篇总结:
1. 本系列文章讨论的主要话题和范围。
2. PE文件是Win32平台的可执行文件。
3. 关于修改资源段的问题。
4. 其他一些相关知识的介绍。
5. 几种工具的推荐及其简要介绍。

邹丹 于 2001年7月2日
--
             ____________________________________________
            |┏━━━━━━━━━━━━━━━━━━━━┓
            |┃ 欢迎光临荔园晨风 Linux 版,InstallBBS 版┃
            |┗━━━━━━━━━━━━━━━━━━━━┛
             ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店