逆向分析实战

247 阅读4分钟
    • 也许你想知道什么是软件逆向,也许你已经听说过软件逆向,从而想要学习软件逆向。不管你抱着什么目的翻开本博客,笔者还是在你阅读本博客之前,先来说一些软件逆向的知识!

- - 什么是“软件逆向工程”

    • 术语“逆向工程”源自硬件领域,在软件领域目前还没有明确的定义。就笔者个人的理解简单来说,软件逆向是通过观察分析软件或程序的行为、数据和代码等,来还原其设计实现,或者推导出更高抽象层次的表示。

- - 软件工程与软件逆向工程的区别

    • 对于软件工程而言,软件的设计讲究封装,将各个模块进行封装,将具体的实现进行隐藏,只暴露一个接口给使用者。对于模块的使用者而言,封装好的模块相当于一个“黑盒子”,使用者使用“盒子”时,无需关心“盒子”的内部实现,只需要按照模块预留的接口进行使用即可。
    • 软件逆向工程对于软件工程而言,却是正好相反的。对软件进行逆向工程时要查看软件的行为,即软件的输入与输出的情况;要查看软件的文件列表,即软件使用了哪些动态链接库(哪些动态连接库是作者编写的,哪些动态连接库是系统提供的),有哪些配置文件,甚至还要通过一系列的工具查看软件的文件结构、反汇编代码等。
    • 对比软件工程与软件逆向工程可以发现,软件工程是在封装、实现一个具备某种功能的“黑盒子”,而软件逆向工程则是在分析“黑盒子”并尝试还原封装的实现与设计。后者对于前者而言是一个相反的过程,因此称为“软件逆向工程”。

- - 学习软件逆向工程与软件工程的区别

    • 对于软件逆向工程而言,学习逆向知识,除了要学习逆向知识本身外,还需要掌握各种不同的逆向工具,或者说逆向知识中重要的一个环节就是逆向工具的使用。对于软件开发而言,软件开发工具在软件开发中所占据的位置远远达不到逆向工具在逆向领域中的位置。因此,读者在学习编程时可能更注重的是编程语言本身而不是工具,但是在学习逆向时,逆向知识是不可能抛开逆向工具而独立进行学习的。

- - 本博客的主要内容

    • 本博客全面讲解了软件逆向工程的知识,即包括主流的技术,如加壳与脱壳、汇编、数据的存储等;也有实用的工具,如主流的调试工具OllyDbg、PE工具、加壳与脱壳工具、十六进制编辑与反编译工具、IDA与逆向、逆向工具实现等。我们的目的是快速入门
    • 对于软件逆向工程的初学者而言,我们的目的只有一个,那就是快速地入门,本博客的目的也是为了帮助读者能够快速地熟悉软件逆向的知识和软件逆向的工具。本博客以软件逆向工具为主线,以逆向工具为重点,对软件逆向相关知识进行了介绍。
    • 无论是学习编程,还是学习逆向,我们学习的都是技术,技术的掌握重点在于练习和实践,因此希望读者在学习本博客的过程中不断地练习和实践,从而能够真正达到快速入门的效果。
    • 学习本博客要求读者有C语言的编程知识,如果连一点编程的基础都没有,那么可能很多章节的知识是无法掌握的,学习起来会相当吃力。
    • 本博客是一本面向零基础读者的文章,文章中介绍的是逆向工程的入门知识,仅供读者自学之用。对本博客介绍的知识用于非法用途的,导致的后果请自行承担,和作者及出版社无关,请读者自觉遵守国家的法律。
    • 由于作者水平有限,必定会有差错,敬请谅解。祝大家学习愉快!