文章目录
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)模式是一种综合考核参
赛团队攻击、防御技术、即时策略的比赛模式。该比赛模式将真实网络安全防护设备,按照设施单位的典型网络结构和配置抽象化,相比传统的网络拓扑实战竞赛场景,这种模式每个参赛队互为攻击方和防守方,是对传统赛制的改进和革新,更接近实战训练。其主要特点为:比赛强调实战性、实时性、对抗性,对竞赛队的渗透能力和防护能力进行综合全面的考量。
本篇博客是逆向的入门;
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了,在逆向的过程中,我们通常会碰到被加密后的数据或是密文,这就需要我们有一定的密码学基础了,在初期我们只要会识别一些简单算法,并解密他们就可以了;
列举一些常见的加密或编码:
这里推荐一篇文章https://www.cnblogs.com/ruoli-s/p/14206145.html
还有一些插件可以帮助识别,如Findcrypt和singsrch都可以帮助我们识别加密算法。可以自行查阅插件的安装。
0x03 主要工具介绍
动态调试:ollydbg,Xdbg
ollydbg,简称OD已经蛮久没有更新了,而且OD主要支持32位的PE文件调试和分析;所以这里我比较推荐使用Xdbg,Xdbg经常更新,还有自动中文汉化。
下载地址:x64dbg
顺便讲下简单使用:
随便拖入一个可执行文件,这可以看到四个窗口;
左上角的反汇编窗口,这里显示是我们要分析的程序的反汇编代码:
截取一行讲解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基础使用(一)
PE文件分析工具
我比较喜欢用exeinfope,下载地址http://www.exeinfo.byethost18.com/?i=1
使用方法是,拖入待分析文件就好,可以查看文件位数或是否有壳。
pe工具蛮多的,都可以用。
十六进制编辑工具
Winhex和010editor 都很好用。
可以用于修复PE文件,或是一些魔改upx壳的修复。不过,嗯应该有点超纲,不着急,后面再看。
0x3 进阶一点
代码混淆
这里不做细讲:提一点知道有这个知识点就好。
代码混淆常见的是花指令和SMC,花指令就是在代码中插入一些垃圾数据,或是构造一些跳转语句来干扰静态调试。SMC是自修改代码,通过修改内存地址,使程序无法静态分析,但是在程序运行时会进行自解密,也就是我们调试的方法就是通过动态调试 调试到修改后的代码处,然后再dump’出来就好。
SMC一点点入门的自己总结的!SMC简介和题目复现
除了花指令和SMC 还有ollvm。ollvm里面主要有三个功能,待解锁。
脱壳
初学时遇到的upx壳一般都比较简单,可以通过upx工具直接脱壳。再难一点点的魔改upx壳,推荐一篇文章:tuokedi
至于手动脱壳,也是后面再学啦。
0x4 其他以及刷题平台推荐
其他诸如C++逆向,C++异常处理机制,python库的使用(Z3约束求解,Angr符号执行),VM虚拟机逆向,Go语言逆向,Rust逆向,Wasm逆向,python字节码逆向的内容留待以后再解锁了。
刷题平台 buuctf,nssctf,攻防世界
我个人比较推荐nssctf,因为题目比较新,持续都有更新题目,而且它上面有很多新生赛的题目,绝对适合新手入门。讲讲我个人建议的入门方式,我上面说了那么多基础的知识点,可以先去百度谷歌相关知识点的学习,比如RC4,学完后,再去nssctf上找含有rc4标签的入门题
这也是我推荐nssctf的原因之一,nssctf上面有题目的知识点标签。
除了刷题平台,还有俩个我比较喜欢逛的:
52pojie和看雪论坛。推荐多看看。
附一张图。
最后再说下,博主学没多久,大佬路过勿喷/(ㄒoㄒ)/~~。
- 一点点自己的心理话:我个人认为学习是需要兴趣的,这样你才能痴迷的投入进去,如果你对逆向没有十足的兴趣和耐心,那么请不要盲目的继续下去,选择其他感兴趣的属于你的赛道才是你该做的事(其实也是对自己说的话),刚刚在浏览文献的时候,看到了很多大佬的评论,才想起来自己现在还是入门中的入门,真的真的还有好多东西需要学习,还没有到可以自喜的地步,睡觉了,明天继续努力保持热情! 2023.10.24 记