**
作者:lslx 链接:https://www.zhihu.com/question/23999930/answer/1227443512 来源:知乎
**
理论方面,必须清楚的认识逆向的本质是什么。
放到更大的环境下来看,逆向从来不是最终目的,最终目的一般是要实现某个东西。广义上,逆向不仅仅是调试二进制可执行格式,反汇编,破解。逆向是心理模型的建立过程,以及模型实现的底层细节的定位过程。从理论上看,你为了理解系统,你读代码,无论是源码还是汇编,甚至二进制机械指令,都是一个逆向过程,其结果就是建立了一个模糊的心理模型,用于理解系统的运作过程,然而系统代码是复杂的,庞大的,只凭脑力难以定位底层细节,需要借助工具,如反汇编器,调试器,模拟器。
有人认为学好了汇编语言,就相当于可以阅读任何闭源软件了,这显然是错误的思想,没有理论上的清晰认识,容易进入这个思维误区,给定一个逆向的目标,不去搜索背景信息,已有成果,而是一头扎进汇编独自探索,是愚蠢的行为。因为人类的临时记忆是非常可怜的,靠脑力仅能推演很短的代码量,通过纯汇编去推演高层逻辑,是人脑不可承受的,即便理论是可能的,但时间也是不可承受的。所以推演必须要让cpu来执行,人脑只负责在特定的条件下让系统停下来,读取推演的结果。
于是就有了调试器。用了调试器,人脑只需判断并控制条件逼近底层细节,具体的就是操作软件,并结合条件断点来定位底层代码,这样在效率上比人肉调试器就有了质的提高。而这种逆向模型,在很多时候