CTF Reverse 入门指南(学习路线)

您所在的位置:网站首页 ctf中crypto题目做法 CTF Reverse 入门指南(学习路线)

CTF Reverse 入门指南(学习路线)

2023-12-22 07:18| 来源: 网络整理| 查看: 265

# 0x1 CTF 简介

写这篇文章,主要是解决自己当初不知道怎么入门的困惑,算是替曾经的自己写的吧,博主也还在入门,请路过的佬勿喷。

在CTF的主流上有五个方向,Web、Pwn、Crypto、Misc和Reverse(逆向),除了这五个,还有诸如IOT,AI,MOBILE,ETH等。

> CTF竞赛中的逆向:

> 涉及 Windows、Linux、Android 平台的多种编程技术,要求利用常用工具对源代码及二进制文件进行逆向分析,掌握 Android移动应用 APK 文件的逆向分析,掌握加解密、内核编程、算法、反调试和代码混淆技术。             

                                                                        ------ 《全国大学生信息安全竞赛参赛指南》

在CTF的比赛中分为以下几种赛制:

- **解题模式 - Jeopardy** :

解题模式(Jeopardy)常见于线上选拔比赛。在解题模式 CTF 赛制中,参赛队伍可以通过互联网或者现场网络参与,参数队伍通过与在线环境交互或文件离线分析,解决网络安全技术挑战获取相应分值,类似于 ACM 编程竞赛、信息学奥林匹克赛,根据总分和时间来进行排名。

不同的是这个解题模式一般会设置 一血 、 二血 、 三血 ,也即最先完成的前三支队伍会获得额外分值,所以这不仅是对首先解出题目的队伍的分值鼓励,也是一种团队能力的间接体现。

当然还有一种流行的计分规则是设置每道题目的初始分数后,根据该题的成功解答队伍数,来逐渐降低该题的分值,也就是说如果解答这道题的人数越多,那么这道题的分值就越低。最后会下降到一个保底分值后便不再下降。

- **攻防模式 - Attack With Defense(AWD)**

攻防模式常见于线下决赛。在攻防模式中,初始时刻,所有参赛队伍拥有相同的系统环境(包含若干服务,可能位于不同的机器上),常称为 gamebox,参赛队伍挖掘网络服务漏洞并攻击对手服务获取 flag 来得分,修补自身服务漏洞进行防御从而防止扣分(一般来说防御只能避免丢分,当然有的比赛在防御上可以得分)。

攻防模式可以实时通过得分反映出比赛情况,最终也以得分直接分出胜负,是一种竞争激烈,具有很强观赏性和高度透明性的网络安全赛制。在这种赛制中,不仅仅是比参赛队员的智力和技术,也比体力(因为比赛一般都会持续 48 小时),同时也比团队之间的分工配合与合作。

- **攻防模式 - Attack With Defense Plus (AWDP)**

"AWDP" 代表 "Attack With Defense Plus",攻防兼备AWDPlus(AWDP)模式是一种综合考核参

赛团队攻击、防御技术、即时策略的比赛模式。该比赛模式将真实网络安全防护设备,按照设施单位的典型网络结构和配置抽象化,相比传统的网络拓扑实战竞赛场景,这种模式每个参赛队互为攻击方和防守方,是对传统赛制的改进和革新,更接近实战训练。其主要特点为:比赛强调实战性、实时性、对抗性,对竞赛队的渗透能力和防护能力进行综合全面的考量。

本篇博客主要是windows逆向的入门;

# 0x2Reverse入门基础

## 0x01语言基础

逆向首先要学好的应该是**汇编语言**,入门推荐的是王爽的汇编语言。学习之后推荐基于x86的汇编语言,(这个最近开始学习,准备开始更新读书笔记!ye)

**C语言**推荐《C primer plus》书有点厚,但是不难理解,作为入门的语言学习资料,很不错。(我超爱这本书!)

C/C++的编程基础一定要扎实,大部分程序基于C/C++编写,经过反编译后的伪代码近似于C语言,如果C都不行,那么在逆向调试的过程中一定会很困难,同时有了一定的语言基础后,学习其他诸如GO,Rust(贼恶心)等逆向中偶尔会遇见的语言就很快啦。

关于Python,有了C/C++基础后,其实不用系统的再学习py了,我们编写payload,exp时大部分会选择py,但仅仅是作为工具使用,在时间不是特别充分的情况下,可以边学习边积累,(当然有扎实的py功底是更好的)

win32编程,我个人认为做题的时候用到的时候再查就好,多积累,也可以看看《windows程序设计》不过真的很厚,在前期应该不是特别紧张。

## 0x02 简单加密算法的识别和分析

有些人可能会好奇,不是逆向嘛,为什么要学到密码学了;实际上CTF中的各个方向经常是会有交叉的,和Re交叉最多的应该就是Crypto了,在逆向的过程中,我们通常会碰到被加密后的数据或是密文,这就需要我们有一定的密码学基础了,在初期我们只要会识别一些简单算法,并解密他们就可以了;

列举一些常见的加密或编码:

- RC4

- TEA/XTEA/XXTEA

- 自己总结的![Base家族编码](https://mp.csdn.net/mp_blog/creation/editor/133642336)

- 自己总结的![常见编码和古典密码](https://blog.csdn.net/Sciurdae/article/details/133956991)

这里推荐一篇文章https://www.cnblogs.com/ruoli-s/p/14206145.html

还有一些插件可以帮助识别,如Findcrypt和singsrch都可以帮助我们识别加密算法。可以自行查阅插件的安装。

## 0x03 主要工具介绍

### 动态调试:ollydbg,Xdbg

ollydbg,简称OD已经蛮久没有更新了,而且OD主要支持32位的PE文件调试和分析;所以这里我比较推荐使用Xdbg,Xdbg经常更新,还有自动中文汉化。

下载地址:[x64dbg](https://x64dbg.com/)

顺便讲下简单使用:

随便拖入一个可执行文件,这可以看到四个窗口;

左上角的反汇编窗口,这里显示是我们要分析的程序的反汇编代码:

截取一行讲解00007FFA5A3C076A | 55                 | push rbp                                | 看这里!!!

最右侧的00007FFA5A3C076A是内存地址,55是操作码,push rbp是汇编语言,最左侧是调试器或者我们添加的一些注释。

右上角的寄存器窗口显示调试程序的寄存器信息。

左下角的数据窗口:这里是内存地址的内容。最左边是内存地址,接着是对应地址的十六进制数据,最右侧是十六进制对应的ASCII码。

右下角是堆栈窗口,显示的是堆栈信息。

还有一些基本的指令操作:

- F2 设置断点

- F7 单步步入(遇到call会进入call调用的函数内部)

- F8 单步步过(遇到call直接跳过)

- F9 运行程序

- F12 暂停程序

- Ctrl+F2 重新调试程序(断点还在)

- Ctrl+G 可以快速定位地址

### 静态调试:IDA

IDAyyds,可以将程序反编译成伪代码,在调试分析的时候很方便。

IDA的基本指令和Xdbg的类似,一般使用IDA的基本流程就是,将待分析文件拖入IDA32或IDA64中,按f5进行反编译后分析伪代码。

简单看下,拖入一个可执行文件

这个是程序的流程图,入门题目逻辑还很清晰,按一下f5,

左边一栏的函数列表。右边是经过反编译的main函数。按一下tap回到流程图再按一下空格就可以查看汇编代码的窗口了。

关于IDA更详细的使用,可以自行查阅其他文章,也可以看《IDA权威指南》。不过我更加推荐上刷题网站,找一些入门题或是新生赛的题目练习,不会写没关系看看wp,当例题来完成。

**上次总结的一点点:**[IDA基础使用(一)](https://blog.csdn.net/Sciurdae/article/details/133667247)

### PE文件分析工具

我比较喜欢用exeinfope,下载地址http://www.exeinfo.byethost18.com/?i=1

使用方法是,拖入待分析文件就好,可以查看文件位数或是否有壳。

pe工具蛮多的,都可以用。

### 十六进制编辑工具

Winhex和010editor 都很好用。

可以用于修复PE文件,或是一些魔改upx壳的修复。不过,嗯应该有点超纲,不着急,后面再看。

# 0x3 进阶一点

### 代码混淆

这里不做细讲:提一点知道有这个知识点就好。

代码混淆常见的是花指令和SMC,花指令就是在代码中插入一些垃圾数据,或是构造一些跳转语句来干扰静态调试。SMC是自修改代码,通过修改内存地址,使程序无法静态分析,但是在程序运行时会进行自解密,也就是我们调试的方法就是通过动态调试 调试到修改后的代码处,然后再dump'出来就好。

**SMC一点点入门的自己总结的!**[SMC简介和题目复现](https://blog.csdn.net/Sciurdae/article/details/133717752)

除了花指令和SMC 还有ollvm。ollvm里面主要有三个功能,待解锁。

### 脱壳

初学时遇到的upx壳一般都比较简单,可以通过upx工具直接脱壳。再难一点点的魔改upx壳,推荐一篇文章:[tuokedi](https://www.52pojie.cn/thread-326995-1-1.html)

至于手动脱壳,也是后面再学啦。

# 0x4 其他以及刷题平台推荐

其他诸如C++逆向,C++异常处理机制,python库的使用(Z3约束求解,Angr符号执行),VM虚拟机逆向,Go语言逆向,Rust逆向,Wasm逆向,python字节码逆向的内容留待以后再解锁了。

刷题平台 buuctf,nssctf,攻防世界

我个人比较推荐nssctf,因为题目比较新,持续都有更新题目,而且它上面有很多新生赛的题目,绝对适合新手入门。讲讲我个人建议的入门方式,我上面说了那么多基础的知识点,可以先去百度谷歌相关知识点的学习,比如RC4,学完后,再去nssctf上找含有rc4标签的入门题

这也是我推荐nssctf的原因之一,nssctf上面有题目的知识点标签。

除了刷题平台,还有俩个我比较喜欢逛的:

52pojie和看雪论坛。推荐多看看。

附一张图。

最后再说下,博主学没多久,大佬路过勿喷/(ㄒoㄒ)/~~。

- 一点点自己的心理话:我个人认为学习是需要兴趣的,这样你才能痴迷的投入进去,如果你对逆向没有十足的兴趣和耐心,那么请不要盲目的继续下去,选择其他感兴趣的属于你的赛道才是你该做的事(其实也是对自己说的话),刚刚在浏览文献的时候,看到了很多大佬的评论,才想起来自己现在还是入门中的入门,真的真的还有好多东西需要学习,还没有到可以自喜的地步,睡觉了,明天继续努力保持热情! 2023.10.24 记



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3