0%

CTF逆向的简单了解

CTF中逆向的简单了解

逆向工程简介及发展方向

《逆向工程核心原理》

逆向工程,顾名思义,将已经完成的程序经行反编译以找到其内部隐藏细节的过程,我们将其称之为逆向工程

第一步,我们将通过各种信息收集工具,对要进行逆向分析的程序进行信息处理

第二步,我们将存在保护的目标程序经行去加密,并且备份其源文件

第三步,将目标程序拖入静态分析或动态调试软件中经行处理(代码审计或debug)

第四步,对收集到的信息进行整合,给目标程序打补丁,实现我们的目的

在CTF比赛中

逆向工程是CTF比赛中一个重要的方向

涵盖了Windows逆向,Linux逆向,Android逆向,密码学逆向等诸多方面,对程序代码进行审计,在关键的位置为程序打上补丁,绕过一些复杂的花指令,逆向工程无疑是最具技术含量的工作,但也因为其本身难度之高,一个好的逆向手是团队中最稀缺的人才。

逆向工程还是pwn方向的前置知识储备

所谓“知己知彼,百战不殆”,如果说pwn是信息安全世界中最锋利的武器,那逆向工程就是帮助它识破敌人弱点的锐利眼眸。在进行数据溢出攻击之前,我们要用逆向工程的手法,分析目标程序,找到其关键弱点,一击致命。我们可以说逆向是为pwn服务的工具,也可以说pwn是长了牙齿的逆向工程。

密码学逆向的独特之处

CTF中,有一部分逆向工程的题目,其本身流程并不复杂,但用到了高级的密码学加密方式,我个人称这种逆向题目为“密码学逆向”,不需要你有很高的程序阅读能力,但是要找出是哪种加密方式,有怎样的特征值,却是个极其艰巨的任务,所以在遇到这种题目的时候,逆向手往往要和密码学方向合作或者自学密码学。

主要逆向工具

各种逆向工具简介

1.编码转换及解密工具

编码转换工具是信息安全中最常用的工具,因为题目所给出的“答案”为了迷惑我们,经常会使用编码的方式,隐藏在大量垃圾信息中,防止被轻易发现,因此我们需要对某些有特定编码规则的字符串经行编码转化。

解密工具,因为有密码学逆向的存在,我们需要去熟悉某些特定的解密方法,并以软件和网站来辅助我们的解密过程

2.文件类型及查壳

判断文件类型及查壳工具能帮助我们在开始逆向进行必要的信息收集,帮助我们选择正确的反编译及反汇编工具

3.去保护

根据之前收集的信息,为之后的代码审计做准备,使用相关工具和手段尽可能去除软件的反编译保护

4.静态分析

静态分析软件一般采用线性扫描和递归遍历的方法,将已经经过编译器编译过生成的可执行文件,反编译成汇编代码或伪C语言代码,在静态分析这个步骤中,我们将使用静态分析软件进一步深入收集目标程序的信息,对目标程序进行修改,理解目标程序的实现逻辑。静态分析和动态调试是逆向工程的主体部分

5.动态调试

动态调试是逆向工程中的杀手锏,无论多复杂困难的题目,你都能在动态调试中找到解决它的办法,但动态调试软件同样也是逆向工程中最难上手的软件,通过对逆向深入的学习,当你能熟练地掌握汇编语言基础和动态调试工具的使用后,你就是一个合格的逆向手了。

Windows逆向

Windows逆向工具

1.CaptfEncoder

CaptfEncoder是一款跨平台网络安全工具套件,提供网络安全相关编码转换、古典密码、密码学、特殊编码等工具,并聚合各类在线工具

2.HexEdit

HexEditXP是一款实用的文本、代码编辑工具,多用于二进制、十六进制文本的编辑操作,拥有编辑磁盘文件、编辑大型文件、颜色高亮、添加书签以及对指定内容进行复制、粘贴、替换等操作,软件还内置了脚本编辑器功能,方便开发者使用

3.ExeinfoPe

Exeinfo PE是一款查看PE文件信息的工具,可以查看EXE/DLL文件的编译器信息、是否加壳、入口点地址、输出表/输入表等等PE信息,帮助开发人员对程序进行分析和逆向

4.die

Detect it Easy是一个多功能的PE-DIY工具,主要用于壳侦测。功能正日益完善,是不可多得的破解利器,支持文件直接拖放,可添加到右键菜单,非常方便!Die和peid一样可以加载插件

5.FFI

File Format Identifier(超级巡警病毒分析)是一款查壳脱壳工具,同时也是一款病毒分析工具,它可以自动识别文件格式,使用超级巡警的格式识别引擎,集查壳、虚拟机脱壳、PE文件编辑、PE文件重建、导入表抓取(内置虚拟机解密某些加密导入表)、进程内存查看/DUMP、附加数据处理、文件地址转换、PEID插件支持、MD5计算以及快捷的第三方工具利用等功能,适合病毒分析中对一些病毒木马样本进行系统处理。

6.IDA PRO

交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,或简称为IDA。是最棒的一个静态反编译软件,为安全分析人士不可缺少的利器!IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,交叉Windows或Linux WinCE MacOS平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。

7.X64DBG

x64dbg 是 Windows 下的 32 64 位调试器,类似 ollydbg

8.OllyDbg

IDA的使用

想要入门逆向工程,那最正统的路径便是学习怎样使用IDA这个软件,并从这个过程中去学习反编译的技巧和各种逆向方法,但是IDA有两个版本,分别为IDA32和IDA64

想进一步熟悉IDA的使用,我们要从题目入手进一步分析

  1. BUUCTF : easyre(基础)

  2. BUUCTF : reverse_1(字符串中无flag)

  3. BUUCTF : xor (编写脚本)

常见的加密算法

base64加密

base64主要是将输入中的每3字节(共 24 bytes)按每 6 bytes分成一组,变成4个小于64的索引值,然后通过一个索引表得到4个可见字符。

TEA算法

TEA算法是一种常见的分组加密算法,密钥为 128 bytes位,明文为 64 bytes位,主要做了32轮变换,每轮变换都涉及移位和变换。TEA的源码为:

对TEA的识别也比较容易,在TEA算法中有一个固定的常数 0x9e3779b9 或者 0x61c88647,出现这两个特征值时可以以此确定TEA算法。

AES分组加密法

AES是常见的分组加密算法,其加解密流程如图。

AES加密过程涉及4种操作:字节替代(SubBytes),行移位(ShiftRows),列混淆(MixColumns)和轮密钥加(AddRoundKey)

其中,字节替代过程是通过S盒完成一个字节到另一个字节的映射,S盒和逆S盒具体如下:

如果发现程序中有S盒或者动态生成了S盒,则可以确定采用了AES加密。

RC4加密

RC4加密算法属于流加密算法,包括初始化函数和加解密函数,函数代码具体如下:

可以看出,初始化代码对字符数组s进行了初始化赋值,且赋值分别递增,之后又对s进行了256次交换操作。通过识别初始化代码,可以判断为RC4算法。

MD5消息摘要算法

MD5消息摘要算法,是一种被广泛使用的密码散列函数,可以产生一个128位的散列值,用于确保消息传输的完整性和一致性。MD5加密的函数大致如下:

其中,MD5Init会初始化四个称作MD5链接变量的整型参数。因此如果看到这4个常数0x67452301,0xefcdab89,0x98badcfe,0x10325476,就可以怀疑该函数是否为MD5算法了。

MD5Init函数代码如下: