Reverse概述
注意,该文章只针对Windows和Linux平台下的逆向
Reverse即软件逆向工程,是对编译成型的二进制程序进行代码、 逻辑和功能分析的过程。在CTF比赛中,Reverse类型的题目主要考察选手的软件静态分析和动态调试能力,要求选手有较强的程序代码分析能力,同时对反调试、代码混淆等对抗技术有一定的了解。
首先我们先来了解一下编译的过程。编译大致分为四个过程:预处理、编译、汇编、链接。
编译的过程
预处理
在这个过程中,编译器将对所有的预处理命令进行文本操作,比如插入include<头文件>
中的内容、define宏定义
替换文件中的符号等等。同时还有删除注释,添加行号,以及所需要的其他标识符。
编译
生成汇编语言。
汇编
将汇编指令转为机器代码,也就是二进制文件。
链接
链接库文件,生成.exe
文件。
逆向分析的主要分析方法
将二进制代码转为汇编代码的过程中容易缺失一些信息。可以通过逆向分析的方法还原以上信息。逆向分析的方法主要有两种:静态分析和动态分析。这里简单介绍这两种分析方法。
静态分析
主要是在不执行代码的情况下,只分析代码文件的外部特征,比如文件类型分析和静态反汇编、反编译。
动态分析
在程序文件执行的过程中对代码进行分析,通过调试来分析代码、获取内存的状态。