CTF Reverse 逆向入门

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 记

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: CTF逆向CTF竞赛中的一种题型之一,通过逆向工程方法来解决问题。入门CTF逆向需要了解的知识领域很广泛,比如二进制文件、硬件逆向、反汇编技术、加密算法、网络协议等等。下面是一个简单的脑图,介绍了CTF逆向入门所需要掌握的知识点: 首先是二进制文件的相关知识,包括ELF、PE等格式的文件结构和常见工具的使用。其次是反汇编和调试技术,了解汇编语言和调试器的使用方法,可以帮助我们在逆向分析中更深入地了解程序逻辑。接下来是加密算法和转换方式的理解,比如Base64、SHA、AES、DES等加密方式的原理和常见攻击方式。此外,网络协议的了解也是非常重要的,包括TCP/IP协议、HTTP协议、UDP协议等,可以帮助我们理解网络数据的传输和安全隐患。最后,还需要了解一些常见的漏洞和技术,比如堆栈溢出、格式化字符串漏洞、ROP等,可以帮助我们攻击和利用目标程序。总的来说,CTF逆向入门需要多方面的知识储备和实践经验,在不断学习和实践过程中提升自己的能力,才能更好地应对复杂的逆向挑战。 ### 回答2: ctf逆向(reverse)是赛事中的一项重要技能,难度较高,需要掌握一定的专业知识。以下是初学者入门ctf逆向的脑图: 1.计算机组成原理:掌握计算机的各种硬件组件和内部结构,如处理器、内存、I/O设备等。 2.汇编语言:掌握常用汇编指令和机器指令,包括基本的数据类型、运算符、控制结构和子程序等。 3.操作系统:理解操作系统原理,掌握基本的程序调试和反汇编工具,如IDA Pro、OllyDbg等。 4.反编译:了解反编译工具和技术,学会使用OllyDbg进行程序的动态调试和逆向分析。 5.加密技术:了解常见的加密和解密算法,如MD5、SHA1、AES、RSA等。 6.漏洞利用:掌握常见的漏洞类型和利用技术,如缓冲区溢出、格式化字符串漏洞、堆溢出等。 7.网络安全:了解网络安全基础知识,包括TCP/IP协议、网络攻击和防御、网络数据包分析等。 8.实践和练习:参加ctf比赛,通过练习和实践逐步提高自己的逆向技能和解题能力。 通过以上脑图的学习,初学者可以逐步掌握ctf逆向技能,提高自己在竞赛中的排名和成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sciurdae.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值