其实有很多人对逆向有相当大的误解,一提到逆向。就将他和破解联系到了一起。
其实这是一种误读。破解是非法的(在中国讲这话,有点雷人了)。
但逆向不是。当然破解也是需要很多逆向知识的。
但逆向却不仅仅只是破解。可以讲,破解只是逆向的入门。
进行逆向工程所要掌握的知识可不是实现一个破解所要掌握的知识所能比拟的。
虽然逆向工程并不是一个很容易入门的学问。
但我个人认为。作为一名搞程序的人。如果想要通向'真正的高手'之路。
学会逆向却是必不可少的。当然这也仅仅只是万里长征的第一步而已。
对着文档。写几个例子,或者弄几个偏门语法分析分析性能。
那纯粹是哗众取宠,哄哄小孩子倒是可以。
当然
虽然这样说,但我并不讽刺那些写例子的人。相反,对于这些作者我是持尊重态度的。
对于众多的初学者,他们的文章无疑就是指路明灯。其实仔细想想。
我们这些搞程序的人,又有哪一个不是从读这样的文章中一路走过来的呢。
说实话。一直以来我都想写写这方面的文章。说说自己当初遇到的困难及解决的方法。
这样也能给后来者指指路。但是每次都胎死腹中。因为想想还是觉得写这个太烦了。
故而我觉得写这方面文章的人是无私的是奉献的。
但对于那些天天研究偏门语法的。在我看来。纯粹就是没事找事做。闲的蛋疼。
貌似高深。其实什么都不是
废话少说,入正题。为什么讲逆向是通向'真正的高手'的必由之路呢。
原因很简单。因为逆向是窥探软件内部秘密的终极武器。
尤其是对于那些无正式文献或者非开源的软件更是唯一的武器。
你查一辈子文档。只能算是一个读过很多文档的程序员。个中几个运用比较好的。
勉强能挤入相对意义的高手境界。为什么呢。因为文档不会告诉你解决问题的思路。
更不可能完完整整的告诉你怎么去解决一个实际的问题。
甚至有些解决问题的关键点根本不会出现在文档里。
当然如果到现在你都没遇到过在网络上找不到答案或者很难找到答案的难题。
那只能说明你在从事造轮子的工作。当然大部分人都是这样。这本无可厚非.
但如果真遇到这样的问题该怎么办。直接问开发者?这个难度可不小。第一。你怎么
得到他的联系方式。第二。你问他。你认为他会告诉你。第三。如果再是外国人写的。
那语言关可也不是那么好过的。
那么究竟怎么办呢。最直接的办法。当然是逆向。前些日子。我写了个虚拟光驱的例子。
当时准备实现的时候。在网上是遍查资料最终却是一无所得。故而只有逆向了。于是选了一款
功能相对单一体积相对较小的软件逆了一下。分析了他的实现思路。用c#实现了应用层的程序。
尽管驱动层使用的源码是在网上搜到的程序的基础上改动过来的。
但那也是在分析完驱动程序。得到了相关知识的基础上。才搜索出来的。
另外目前公司的一个项目中有些技术难点也是从逆向别人的程序中获得的思路和解决方案。
winmount的作者大牛刘涛涛也曾在他的一篇文章里写到。winmount实现过程中的一些技术难点。
也是从逆向中获得的解决方案。
当然逆向并不是万能的。他仅能告诉你这个功能怎么实现(也视能力而定)。
不能告诉你怎么更好的去实现 。这个层面就是设计要解决的问题了。
但是如果你是一个连很多东西都做不出来的程序员。那又何来高手之谈呢。