几天前,我决定开始自己的”逆向工程”冒险之旅了,尽管在汇编和编程方面有扎实的基础,但是我还是被一大堆的信息和OP代码淹没了,这些代码搞得我头昏脑胀。
逆向工程乍看起来似乎很复杂(实际深入进去,发现真的很复杂),然而,起步阶段,关键是要用对方法,另外一个好的工具箱也很重要。
这篇文章正是记录我自己在逆向工程领域入门阶段的一些经验,希望分享给大家,欢迎交流。
首先,下载可能是你人生中的第一个二进制文件,下载好之后,你要认识到针对RE文件有静态和动态两种类型的分析方法。静态分析可以帮你更好的了解和理解二进制文件中的内容,动态分析则允许你一步一步进行调试,跟踪每个寄存器中发生的变化、每次系统调用等。
本文是一个入门指导,我讲述的一些方法都是非常基础的。比如说静态分析开始时先浏览并找出一些感兴趣的零散的代码,想要深入分析这些代码,需要用到动态分析,这么一说也不是太难,你觉得呢?这个过程中,有哪些工具可以拿来使用呢?
必须承认,我没有花费大量的时间去评估网上的各种工具,事实上,我直接就选择了binary ninja (https://binary.ninja/purchase/),个人/学生版 $99。相对于它的功能而言,这个价位相当划算,另外,DeMo 版本是免费的,提供的功能对于初学者而言就够用了( https://binary.ninja/demo/ )。
Binary ninja致力于静态分析,GUI非常精美,想到你必须要处理的信息量,有一个精巧的GUI相当的重要。
正如上图所示,binary ninja 界面上展示了可执行文件的整个调用图示,简明扼要的展示出了每个块之间是如何相互作用的。此外,通过右下角选择菜单,可以轻松的进行视图切换。点击鼠标,左侧就会枚举出所有被调用的函数。
重点强调,binary ninja 还可以:
官方插件GitHub地址:https://github.com/Vector35/binaryninja-plugins/tree/master/plugins
动态分析可以使用 GDB,radare2等工具。对我而言,radare2 的用户体验太糟糕了,没有样式表,一个快捷键也记不住,耗费了我大量的时间。GDB 在这方面做的不错,此外,可以通过peda449对GDB的用户体验进行改进。
gdb+peda,高能!效果看下图:
方法讲过了,工具准备好了,下边提供一个实际案例,供大家参考。
以@isislab 提供的CTF架构平台为例,讲解一下我是如何通过炸弹实验室的第三关的。
平台地址:https://skidophrenia.ctfd.io
第三关的切入点如下图所示:
假设:答案似乎由三部分组成:两个整数和一个字符
不妨从0x08048bbf的地址入手,看一下寄存器的状态
尝试输入:1 2 3
OK,看起来 EAX参数传递给了sscanf函数。这证实了之前的假设是成立的,事实上,至少需要三个值,这是传递到下一个块的必要条件。
下一个块:
解释
因此,我们可以假设密码应该是这样的:
3:对应第三种情况;
k:0x6b对应的ASCII码值;251:相应于0x7b的十进制值
接下来,我们来验证一下:
完成挑战!
正如你所看到的我,这个案例中不需要太多的动态分析,不过这种情况在实际操作时很少遇到。之所以展示这个练习,是为了让你了解静态分析的重要性,因为它将负责完成70%的工作了,所以,为了达到目标,请仔细分析每一段代码。
事实证明,了解逆向工程的知识对每个人都是有益处的。
多掌握一些汇编、内存管理和编程知识,会帮你快速的定位问题,精确的修补或绕过安全措施。
此外,耐心和奉献精神也有助于你技能的提高。
*参考来源:0x00sec,