0%

CTF之Reverse入门

Reverse概述

注意,该文章只针对Windows和Linux平台下的逆向

​ Reverse即软件逆向工程,是对编译成型的二进制程序进行代码、 逻辑和功能分析的过程。在CTF比赛中,Reverse类型的题目主要考察选手的软件静态分析和动态调试能力,要求选手有较强的程序代码分析能力,同时对反调试、代码混淆等对抗技术有一定的了解。

​ 首先我们先来了解一下编译的过程。编译大致分为四个过程:预处理、编译、汇编、链接。

编译的过程

预处理

​ 在这个过程中,编译器将对所有的预处理命令进行文本操作,比如插入include<头文件>

中的内容、define宏定义替换文件中的符号等等。同时还有删除注释,添加行号,以及所需要的其他标识符。

编译

​ 生成汇编语言。

汇编

​ 将汇编指令转为机器代码,也就是二进制文件。

链接

​ 链接库文件,生成.exe文件。

逆向分析的主要分析方法

​ 将二进制代码转为汇编代码的过程中容易缺失一些信息。可以通过逆向分析的方法还原以上信息。逆向分析的方法主要有两种:静态分析和动态分析。这里简单介绍这两种分析方法。

静态分析

​ 主要是在不执行代码的情况下,只分析代码文件的外部特征,比如文件类型分析和静态反汇编、反编译。

动态分析

​ 在程序文件执行的过程中对代码进行分析,通过调试来分析代码、获取内存的状态。