坦白地讲,现在的逆向工程,真实目的就是为了再利用。据此,个人可以学习别人的编程技术及技巧,公司可以窥探别人的商业软件秘密,或开发与之兼容的软件;(二进制代码层面的)Debug自然也是其中重要的目的之一。
据说,著名的杀毒软件AVP代码写的实在太有条理,因此很容易被分析后“再利用”。有心人不仅可以将其病毒特征库改头换面后再推出,也可以利用逆向工程得到AVP某些模块的源代码,加入自己开发的产品中。
在《看雪精华》(www.pediy.com)中,收录了一篇文章,讲述如何利用逆向工程知识为一个多媒体播放软件去除“静音”bug的过程。
《Windows图形编程》(Feng Yuan著,机械工业出版社)一书中,作者花费了2个章节,约100多页的文字来介绍如何探索windows系统的GDI/DirectDraw内部数据结构,以及如何自制一个apispy来帮助研究。利用类似的方法,你可以自行探索操作系统的奥秘,而不需要别人的讲解。不过,由此产生的副作用是系统上的很多bug被发现和利用,最有名的就是“堆栈溢出攻击”。
利用逆向工程技术还可以使我们对一些软件进行改造。《程序员杂志》2003.07有文章《编程扩展“记事本”功能》,介绍的就是一例。作者是采用CreateRemoteThread函数远程钩入目标程序进程内,达到其目的。
而另一些人可能更喜欢直接修改目标程序的一些二进制代码,从而利用附加的Dll(动态运行库)。后面一种方法叫做SMC(Self Modifying Code)。我看到有人这样为Netscape添加按钮执行“密码保护”功能;有人为filemon添加了“打开最近文档”功能……但最著名的,还是改造W32Dasm――一个著名的反汇编工具活动。
通过协作,目前的W32Dasm已经能支持中文字符串,能识别VB程序的引入表,能直接对反汇编程序补丁,能添加注释等等,而这一切都是在没有源代码情况下,直接在二进制代码层面完成。
总之,逆向工程应是一门优雅的艺术,而不是低层次者手中粗陋的工具;逆向工程的目的是学习与再利用;它的精神是“自由”。
上一篇:逆向工程的历史及分类介绍
下一篇:使用3D测量来确定阀门的正确维护