一、首先需要认识CTF竞赛
1、什么是CTF竞赛?
CTF(Capture The Flag)一般译作“夺旗赛”,在网络安全领域中指网络安全技术人员之间进行技术竞技的一种比赛形式。 [11]通过各种攻击手法,获取服务器后寻找指定的字段,或者文件中某一个固定格式的字段,这个字段叫做Flag,其形式一般为Flag{xxxxxxxX},提交到裁判机就可以得分。
2、竞赛模式
解题模式(Jeopardy)
在解题模式CTF赛制中,参赛队伍可以通过线上或者线下参与,这种模式的CTF竞赛与ACM编程竞赛、信息学奥赛比较类似,以解决网络安全技术挑战题目的分值和时间来排名,通常用于在线选拔赛。
攻防模式(Attack-Defense)
在攻防模式CTF赛制中,参赛队伍在网络空间互相进行攻击和防守,挖掘网络服务漏洞并攻击对手服务来得分,修补自身服务漏洞进行防御来避免丢分。攻防模式CTF赛制可以实时通过得分反映出比赛情况,最终也以得分直接分出胜负。
混合模式(Mix)
结合解题模式与攻防模式的CTF赛制,比如参赛队伍通过解题可以获取一些初始分数,然后通过攻防对抗进行得分增减的零和游戏,最终以得分高低分出胜负。采用混合模式CTF赛制的典型代表如iCTF国际CTF竞赛。
3、题目类型
我们先不讨论攻防模式,因为很少有CTF竞赛初赛就是攻防模式的,一般像大型比赛的半决赛和决赛才会进行攻防模式,现在的CTF竞赛初赛都是以解题模式来进行选拔的。
MISC(杂项)
意如名,很杂,考的很多,主要有以下类型,基本包含了,
隐写
-
图片隐写
-
基础隐写:LSB(最低有效位)、EXIF 信息、颜色通道分离、文件尾追加数据
-
文件结构:PNG(IDAT 块)、JPG(DQT/DHT 表)、GIF(帧分离、延迟时间)
-
进阶技巧:CRC 校验错误修复、图片大小篡改、盲水印、傅里叶变换分析
-
-
音频隐写
-
频谱分析:Audacity 查看波形/频谱图(如摩尔斯电码、SSTV)
-
LSB 隐写:WAV 文件 PCM 数据隐写
-
-
视频隐写
-
帧提取(
ffmpeg
)、逐帧分析 -
隐藏字幕、时间轴信息篡改
-
-
文本隐写
-
空格/零宽度字符(Zero-Width Characters)
-
字体内嵌信息、排版特征(如字间距、行间距)
-
特定编码隐写:
Snow
(文本末尾空格隐写)
-
-
其他文件隐写
-
PDF 隐写:对象流、隐藏图层、JavaScript 触发
-
Office 文档:宏代码、隐藏文字、OLE 对象
-
压缩包嵌套(套娃)、加密压缩包爆破
-
常见编码识别与转换
-
常见编码识别与转换
-
Base64/32/16、URL 编码、HTML 实体编码
-
Hex 编码、ASCII 编码(十进制/十六进制/八进制)
-
莫尔斯电码、敲击码(Tap Code)、培根密码
-
进制转换(二进制、八进制、十六进制)
-
字符替换类编码:凯撒密码、ROT13、栅栏密码、维吉尼亚密码
-
-
特殊编码体系
-
文字替换:猪圈密码(Pigpen)、银河字母(Galactic Alphabet)
-
棋盘密码(Polybius Square)、盲文(Braille)
-
条形码/二维码:Code128、QR Code 纠错等级修复
-
电报编码:中文电码、Unicode 编码(UTF-8/16/32)
-
-
编码混淆技巧
-
多重编码嵌套(如 Base64 套用多次)
-
自定义编码表(需逆向分析)
-
网络流量包分析
-
网络流量包分析
-
协议分析:HTTP/FTP/TCP/UDP/DNS 请求提取
-
关键字段:Cookie、Authorization 头、URL 参数
-
文件提取:从流量中还原传输的文件(如图片、压缩包)
-
协议漏洞利用
-
协议漏洞利用
-
DNS 隧道数据隐写
-
ICMP 协议隐写(Ping 数据包)
-
USB 键盘流量捕获与解析
-
-
无线协议与蓝牙
-
Wi-Fi 握手包分析(
aircrack-ng
) -
蓝牙协议(BLE)数据嗅探
-
磁盘镜像分析
-
磁盘镜像分析
-
文件系统修复:EXT4/NTFS/FAT32 文件恢复
-
工具:
Autopsy
、FTK Imager
、testdisk
-
隐藏分区、磁盘 slack 空间数据提取
-
内存取证
-
内存取证
-
内存镜像分析(Volatility 框架)
-
进程列表、网络连接、注册表键值提取
-
恶意进程检测、DLL 注入痕迹
-
日志分析
-
日志分析
-
Web 日志(Apache/Nginx)中的攻击痕迹
-
Windows 事件日志(Event Log)分析
-
压缩包破解
-
压缩包破解
-
密码爆破:
John the Ripper
、hashcat
-
字典生成:
crunch
、cupp
-
伪加密(Zip 文件头修改)
-
明文攻击(已知部分文件内容)
-
文件修复与结构分析
-
文件修复与结构分析
-
文件头/尾修复(如 PNG/PDF 文件头缺失)
-
文件签名识别(
file
命令、Hex 编辑器) -
分离嵌套文件
-
-
信息搜集
-
图片元数据(GPS 坐标、拍摄设备)
-
域名Whois查询、IP归属地分析
-
社交媒体信息关联(如 EXIF 中的用户名)
-
-
验证码与人类交互
-
验证码绕过(OCR 识别、人工打码平台)
-
音频验证码转文本
-
脑洞题
-
脑洞题
-
时间戳转换(Unix 时间戳、Windows 时间)
-
条形码/二维码生成与扫描
-
游戏存档修改(如
save.dat
文件)
-
-
组合型题目
-
多步骤嵌套(如隐写+编码+流量分析)
-
动态交互题(需要编写脚本自动化处理)
-
Crypto(密码学)
密码学中考得较多的应该是RSA,MD5这种比较多,现在的密码学不单单只是一种密码,而是几种一起考,难度直线上涨,其他类型的也有,比较简单,一般此题目都是通过python脚本来进行解题的,像RSA的p,q一般都是几十位数的
-
替换密码(Substitution Cipher)
-
单表替换
-
凯撒密码(Caesar Cipher):位移替换(ROT13为特例)
-
仿射密码(Affine Cipher):加密公式 E(x)=(ax+b)mod 26E(x)=(ax+b)mod26
-
-
多表替换
-
维吉尼亚密码(Vigenère Cipher):通过密钥循环生成多表替换
-
自动密钥密码(Autokey Cipher):使用明文或密钥扩展生成密钥流
-
-
-
置换密码(Transposition Cipher)
-
栅栏密码(Rail Fence):按“之”字形排列后按行读取
-
列置换密码(Columnar Transposition):按密钥列顺序重排明文
-
矩阵置换:将明文填充至矩阵后按特定规则读取(如螺旋顺序)
-
-
其他古典密码
-
培根密码(Bacon's Cipher):用两种字符(如A/B)表示5位二进制编码
-
摩尔斯电码(Morse Code):符号与短长音(·/−)的映射
-
棋盘密码(Polybius Square):5x5矩阵替换(如ADFGX密码)
-
-
对称加密(Symmetric Cryptography)
-
分组密码
-
AES:ECB/CBC/CTR等模式,重点分析填充(PKCS#7)及密钥扩展
-
DES/3DES:Feistel结构,弱密钥与半弱密钥攻击
-
S盒分析:差分分析、线性分析(如S盒的差分均匀性)
-
-
流密码
-
RC4:密钥调度算法(KSA)与伪随机生成算法(PRGA)漏洞
-
LFSR(线性反馈移位寄存器):通过已知输出序列恢复初始状态
-
-
-
非对称加密(Asymmetric Cryptography)
-
RSA
-
基础原理:n=p×qn=p×q, ϕ(n)=(p−1)(q−1)ϕ(n)=(p−1)(q−1), ed≡1mod ϕ(n)ed≡1modϕ(n)
-
常见攻击:
-
小模数分解(Fermat、Pollard's Rho算法)
-
共模攻击(相同n,不同e)
-
小指数攻击(低e如e=3)
-
Wiener攻击(d过小)
-
Coppersmith攻击(已知明文高位或低位)
-
选择密文攻击(CCA)
-
-
进阶变种:
-
RSA-OAEP填充、RSA签名(PSS模式)
-
多素数RSA(n = p*q*r)、RSA-CRT(中国剩余定理加速)
-
-
-
椭圆曲线密码(ECC)
-
椭圆曲线离散对数问题(ECDLP)
-
异常曲线攻击(Smart's Attack)
-
无效曲线攻击(无效点注入)
-
-
Diffie-Hellman密钥交换
-
中间人攻击(MITM)
-
小素数子群攻击(参数p-1含小因子)
-
-
-
哈希函数(Hash Function)
-
常见哈希算法:MD5、SHA-1、SHA-256、SHA-3
-
攻击类型:
-
碰撞攻击(Birthday Attack)
-
长度扩展攻击(如MD5、SHA-1)
-
彩虹表(Rainbow Table)预计算
-
-
应用场景:HMAC、盐值(Salt)防御
-
-
消息认证码(MAC)
-
CBC-MAC、HMAC
-
伪造攻击(如长度扩展攻击影响某些MAC实现)
-
-
数论(Number Theory)
-
模运算:逆元、欧拉定理、费马小定理
-
扩展欧几里得算法(求解ax + by = gcd(a,b))
-
中国剩余定理(CRT)
-
素数检测:Miller-Rabin算法
-
离散对数问题(DLP):BSGS算法、Pohlig-Hellman攻击
-
-
代数(Algebra)
-
有限域(Galois Field)运算:GF(2^8)上的乘法和逆元
-
矩阵运算:行列式、逆矩阵(用于Hill密码)
-
多项式环:Reed-Solomon编码、Berlekamp-Massey算法
-
-
常见编码
-
Base64/32/16、Hex编码(ASCII十六进制)
-
URL编码、HTML实体编码(如
A
表示'A') -
自定义编码表(需逆向或统计分析)
-
web安全
从这开始真正进入网络安全的领域,web需要掌握以下知识
信息收集与基础探测
-
目录/文件枚举
-
使用工具:
dirsearch
、gobuster
、ffuf
-
常见敏感文件:
.git
/.svn
泄露、robots.txt
、phpinfo.php
、备份文件(.bak
/.swp
)
-
-
指纹识别
-
识别框架/CMS:WordPress、ThinkPHP、Django、Flask
-
中间件版本:Apache/Nginx/IIS 版本漏洞
-
-
端口与服务扫描
-
工具:
nmap
、masscan
-
常见服务:SSH、FTP、Redis(未授权访问)、MySQL(弱密码)
-
常见 Web 漏洞
- SQL 注入(SQLi)
-
类型:
-
联合查询注入(Union-Based)
-
布尔盲注(Boolean-Based)
-
时间盲注(Time-Based)
-
报错注入(Error-Based)
-
-
-
跨站脚本(XSS)
-
类型:
-
反射型 XSS(URL 参数触发)
-
存储型 XSS(数据库存储恶意脚本)
-
DOM 型 XSS(前端 JavaScript 操作触发)
-
-
利用场景:
-
Cookie 窃取(
document.cookie
) -
钓鱼攻击(伪造登录页面)
-
-
绕过技巧:
-
事件处理器:
onerror
、onload
-
编码绕过:HTML 实体、JavaScript Unicode 编码
-
CSP 绕过:
unsafe-inline
、JSONP 回调
-
-
-
跨站请求伪造(CSRF)
-
原理:诱导用户发起非预期请求(如修改密码)
-
防御绕过:
-
检查 Referer 头伪造(利用开放重定向)
-
JSON CSRF(
Content-Type
为text/plain
时绕过)
-
-
-
文件上传漏洞
-
绕过技巧:
-
后缀名绕过(
.php5
、.phtml
、.htaccess
) -
MIME 类型伪造(
image/png
) -
文件内容检测绕过(添加图片头
GIF89a
) -
竞争条件(上传+快速访问临时文件)
-
-
利用链:
-
上传 Webshell(
<?php system($_GET['cmd']);?>
)--一句话木马 -
结合文件包含(LFI)执行恶意代码
-
-
-
文件包含(LFI/RFI)
-
本地文件包含(LFI):
-
读取敏感文件:
/etc/passwd
、源码(index.php
) -
结合 PHP 伪协议:
php://filter/convert.base64-encode/resource=index.php
-
-
远程文件包含(RFI):
-
加载远程恶意脚本(需
allow_url_include=On
)
-
-
-
命令注入(Command Injection)
-
常见触发点:
system()
、exec()
、popen()
-
绕过技巧:
-
分隔符:
;
、&&
、|
、\n
-
空格绕过:
${IFS}
、%09
(Tab) -
通配符:
/???/???
→/bin/cat
-
-
-
反序列化漏洞
-
语言特性:
-
PHP:
unserialize()
触发魔术方法(__wakeup
、__destruct
) -
Java:Apache Commons Collections 链(CC1/CC6)
-
Python:
pickle
模块的__reduce__
方法
-
-
利用链构造:POP(Property-Oriented Programming)链
-
服务端漏洞
-
服务端模板注入(SSTI)
-
常见模板引擎:
-
Jinja2(Python):
{{ 7*7 }}
→49
-
Twig(PHP):
{{_self.env.registerUndefinedFilterCallback("exec")}}
-
Freemarker(Java):
${"freemarker.template.utility.Execute"?new()("id")}
-
-
利用场景:执行系统命令、读取文件
-
-
SSRF(服务端请求伪造)
-
攻击目标:
-
内网服务探测(
http://127.0.0.1:8080
) -
协议利用:
file:///etc/passwd
、gopher://
攻击 Redis
-
-
-
XXE(XML 外部实体注入)
-
利用方式:
-
读取文件:
<!ENTITY xxe SYSTEM "file:///etc/passwd">
-
内网探测:
http://192.168.1.1:80
-
DoS攻击:Billion Laughs(实体扩展攻击)
-
-
-
条件竞争(Race Condition)
-
场景:
-
文件上传后快速访问(绕过删除操作)
-
高并发修改账户余额(金融类题目
-
-
客户端漏洞
-
CORS 配置错误
-
漏洞利用:
-
任意 Origin 允许(
Access-Control-Allow-Origin: *
) -
窃取用户敏感数据(通过恶意页面发起跨域请求)
-
-
-
JSONP 劫持
-
原理:利用回调函数窃取数据(
<script src="http://api.com/data?callback=steal">
)
-
-
WebSocket 安全问题
-
漏洞类型:
-
未授权访问(缺乏身份验证)
-
跨站 WebSocket 劫持(CSWSH)
-
-
-
客户端存储漏洞
-
敏感信息泄露:LocalStorage、SessionStorage 中存储密码或 Token
-
XSS 持久化:通过客户端存储触发恶意脚本
-
协议与配置漏洞
-
HTTP 头安全
-
安全头缺失:
-
Content-Security-Policy
(CSP)配置不当 -
X-XSS-Protection
未启用 -
HttpOnly
标记未设置(Cookie 可被 JavaScript 读取)
-
-
-
中间件配置错误
-
Nginx/Apache:
-
目录遍历(
autoindex on
) -
错误配置的代理(暴露内网服务)
-
-
-
HTTP 请求走私(HTTP Request Smuggling)
-
原理:利用前后端解析差异构造恶意请求
-
攻击类型:CL-TE(Content-Length vs Transfer-Encoding)
-
根据语言与框架特性
-
PHP 特性利用
-
弱类型比较(
==
与===
):"0e12345" == "0"
→ True -
哈希比较绕过(
md5($_GET['a']) == md5($_GET['b'])
) -
伪协议利用:
php://input
、data://text/plain,<?php system('id');?>
-
-
Node.js 漏洞
-
原型链污染(Prototype Pollution):篡改
__proto__
属性 -
沙箱逃逸:
vm
模块的未过滤代码执行
-
-
Python 框架漏洞
-
Flask:
{{ config }}
泄露敏感配置(SSTI) -
Django:
SECRET_KEY
泄露导致会话伪造
-
-
JWT(JSON Web Token)安全问题
-
算法篡改:将算法改为
none
(alg: none
) -
密钥爆破(弱密钥如
secret
) -
未验证签名(直接解析 Header/Payload)
-
pwn(二进制漏洞利用)
pwn意味进入网络安全的核心,签到题能够出现在MISC,Crypto,Web,但是一定不会出现在pwn,需要的知识是更加广泛的,汇编语言是基础,并且还需要对计算机操作系统底层有一定的了解,
二进制基础
-
程序内存布局
-
栈(Stack):函数调用、局部变量、返回地址
-
堆(Heap):动态内存分配(
malloc
/free
) -
全局数据区(BSS/Data):未初始化/已初始化全局变量
-
代码段(Text):只读的机器指令
-
-
汇编语言基础
-
x86/x64 架构:寄存器(EAX、EBX、ESP、RIP)、指令集(MOV、PUSH、CALL、RET)
-
ARM 架构:寄存器(R0-R12、SP、LR、PC)、指令集(LDR、STR、BL)
-
函数调用约定:
-
cdecl(x86)、fastcall(x64)
-
ARM 的 AAPCS 标准
-
-
-
ELF 文件结构
-
文件头(ELF Header)、程序头表(Program Header)、节头表(Section Header)
-
动态链接:PLT/GOT 表(过程链接表/全局偏移表)
-
栈溢出(Stack Overflow)
-
基础栈溢出
-
覆盖返回地址:通过缓冲区溢出篡改函数返回地址
-
Shellcode 注入:向栈中写入可执行代码并跳转执行
-
-
ROP(Return-Oriented Programming)
-
利用现有代码片段(Gadgets)构造攻击链
-
工具:
ROPgadget
、ropper
-
进阶技术:
-
栈迁移(Stack Pivot):通过
xchg esp, eax
等指令切换栈空间 -
Ret2libc:调用
system("/bin/sh")
-
-
-
绕过栈保护机制
-
Canary 绕过:
-
泄露 Canary 值(格式化字符串漏洞、内存泄露)
-
覆盖 Canary 的低位字节(Partial Overwrite)
-
-
DEP/NX 绕过:使用 ROP 或 JIT-ROP(动态生成代码)
-
堆利用(Heap Exploitation)
-
堆管理机制
-
glibc 的 ptmalloc2:
-
Chunk 结构(size、prev_size、fd/bk 指针)
-
Bins 分类:Fastbin、Smallbin、Largebin、Unsortedbin
-
分配策略:
malloc
的best-fit
和first-fit
-
-
Windows 的 Heap Manager:LFH(Low Fragmentation Heap)
-
-
常见堆漏洞
-
Use-After-Free(UAF):释放后继续使用指针
-
Double Free:同一 chunk 被多次释放
-
Heap Overflow:堆块溢出篡改相邻 chunk 元数据
-
-
经典堆利用技术
-
Fastbin Attack:
-
篡改 Fastbin 链表,实现任意地址分配(如改写
__malloc_hook
)
-
-
Unlink Attack:
-
触发
unlink
操作时修改全局指针(如global_max_fast
)
-
-
House of 系列:
-
House of Spirit:伪造 Fastbin chunk
-
House of Einherjar:通过 Off-by-One 合并 chunk
-
House of Orange:利用
_IO_list_all
触发 FSOP(File Stream Oriented Programming) -
House of Rabbit:结合
tcache
的利用
-
-
Tcache 攻击(glibc ≥ 2.26):
-
Tcache Poisoning:篡改
tcache_entry
的next
指针 -
Tcache Dup:通过 Double Free 实现任意地址分配
-
-
-
高级堆利用
-
FSOP(File Stream Oriented Programming):
-
伪造
_IO_FILE
结构体(如_IO_jump_t
)触发任意代码执行
-
-
Largebin Attack:篡改全局变量(如
global_max_fast
)
-
格式化字符串漏洞(Format String Vulnerability)
-
漏洞原理
-
用户控制格式化字符串参数(如
printf(user_input)
) -
读写任意内存:
%n
(写入已打印字符数)、%x
(泄露栈数据)
-
-
利用技巧
-
泄露栈数据:获取 Canary、libc 地址、程序基址
-
篡改 GOT 表:将
printf
的 GOT 表项指向 Shellcode -
覆盖返回地址或函数指针
-
整数溢出与类型混淆
-
整数溢出
-
符号错误(Signedness Bug):无符号与有符号数比较
-
溢出导致缓冲区长度计算错误(如
malloc(size)
中size
可控)
-
-
类型混淆(Type Confusion)
-
同一内存区域被解释为不同数据类型(如 C++ 虚表指针篡改)
-
内核漏洞(Kernel Exploitation)
-
用户态与内核态交互
-
系统调用(Syscall)、
ioctl
接口 -
内核模块(LKM)漏洞利用
-
-
常见内核漏洞类型
-
堆溢出(SLUB/SLAB 分配器)
-
Use-After-Free(UAF)
-
条件竞争(Race Condition)
-
-
提权技术
-
修改
cred
结构体(将 UID/GID 改为 0) -
劫持
modprobe_path
或core_pattern
-
Reverse Engineering (逆向工程 )
真正网络安全的核心,难度直线上涨,涉及的知识点也是很多的,比如
基础概念
-
二进制文件格式
-
ELF(Linux):节头表(Section Header)、程序头表(Program Header)、动态链接信息(.plt/.got)
-
PE(Windows):DOS头、NT头、节表(.text/.data/.rdata)、导入表(IAT)、导出表
-
Mach-O(macOS/iOS):Load Commands、符号表(Symbol Table)
-
通用结构:文件头签名(Magic Number)、入口点(Entry Point)、重定位表
-
-
汇编语言基础
-
x86/x64:寄存器(EAX/RIP)、指令集(MOV/CALL/JMP)、函数调用约定(cdecl/stdcall)
-
ARM/ARM64:寄存器(R0-R12/PC/LR)、指令集(LDR/STR/BL)、条件执行(如
BGT
) -
MIPS:延迟槽(Delay Slot)、寄存器命名(t0/t0/a0)
-
逆向分析技术
-
静态分析
-
代码流分析:识别主函数、关键分支逻辑(if-else/switch)
-
字符串提取:查找硬编码密钥、敏感信息(
strings
命令或工具) -
交叉引用(Xrefs):追踪函数调用与数据引用
-
伪代码生成:使用 IDA/Ghidra 生成近似源码
-
-
动态分析
-
断点设置:函数入口、内存访问、条件断点
-
寄存器与内存监控:观察关键变量、栈帧变化
-
Hook 技术:使用 Frida 或 ptrace 修改运行时行为
-
-
反编译与代码重建
-
分析编译器优化特征(如O2优化后的代码简化)
-
识别标准库函数(如
strcmp
、memcpy
的调用模式)
-
-
控制流图(CFG)分析
-
还原程序逻辑结构(循环、递归、分支)
-
定位关键校验函数(如License验证)
-
常见逆向技术
-
算法逆向
-
识别加密算法:
-
对称加密(AES/DES)的特征(S盒、密钥扩展)
-
非对称加密(RSA的模幂运算、椭圆曲线点乘)
-
哈希算法(MD5/SHA-1的轮函数)
-
-
自定义算法:
-
魔改加密(如异或+置换组合)
-
混淆运算(基于位操作的复杂计算)
-
-
-
输入验证绕过
-
序列号验证:静态密钥比对、数学变换(如
x*2 + 5 == 123
) -
迷宫类题目:通过逆向生成地图与移动规则
-
CRC校验:逆向生成多项式与初始值
-
-
虚拟机(VM)分析
-
自定义指令集:逆向虚拟指令到实际操作的映射
-
字节码解析:分析VM的调度逻辑与寄存器模拟
-
-
壳与代码保护
-
脱壳技术:
-
动态脱壳(Dump内存镜像)
-
静态脱壳(修复IAT、重建节表)
-
-
常见壳类型:UPX、ASPack、Themida、VMProtect
-
混淆与反混淆
-
代码混淆技术
-
控制流平坦化:将逻辑拆分为多个基本块并通过状态机跳转
-
虚假分支:插入永真/永假条件干扰分析
-
字符串加密:运行时解密敏感字符串
-
-
反调试与反逆向
-
反调试技巧:
-
检查调试器(
IsDebuggerPresent
、ptrace
) -
时间差检测(
rdtsc
指令计时)
-
-
反反调试绕过:
-
修改寄存器标志位(如TF Trap Flag)
-
使用插件屏蔽检测(如ScyllaHide)
-
-
-
花指令(Junk Code)
-
插入无效指令(如
push eax; pop eax
)干扰反汇编 -
利用跳转指令分割代码逻辑
-
加密与编码分析
-
标准算法识别
-
AES:
SubBytes
(S盒)、MixColumns
(矩阵乘法) -
RSA:大数运算(
powmod
)、密钥生成逻辑 -
Base64:特征表(
ABCDEFGHIJKLMNOPQRSTUVWXYZ...
)
-
-
自定义编码
-
查表替换(如TEA算法中的Delta常量)
-
多层编码嵌套(Base64 → Hex → XOR)
-
-
密钥硬编码问题
-
在二进制中直接存储密钥字符串或数组
-
通过常量传播追踪密钥生成过程
-
移动端逆向
-
Android 逆向
-
APK 分析:
-
解包(
apktool
)、反编译(JADX/jeb) -
分析
AndroidManifest.xml
、resources.arsc
-
-
Native 层逆向:
-
JNI 函数映射(
RegisterNatives
) -
ARM 汇编分析(IDA Pro)
-
-
动态调试:
-
使用 Frida 注入 Hook 函数
-
调试 SO 库(
gdbserver
+ IDA)
-
-
-
iOS 逆向
-
Mach-O 文件分析:
-
Class-dump 提取 Objective-C 类信息
-
分析
__TEXT.__cstring
节中的字符串
-
-
动态调试:
-
使用 LLDB 调试越狱设备
-
Hook 方法(Cydia Substrate)
-
-
Windows 平台逆向
-
.NET 逆向
-
使用 dnSpy 反编译 C#/VB.NET 程序
-
分析 IL 代码(如
ldstr
加载字符串、callvirt
调用方法)
-
-
Win32 API 分析
-
识别关键API调用(如
CreateFile
、RegQueryValueEx
) -
分析窗口消息处理逻辑(
WndProc
)
-
-
驱动程序逆向
-
分析 IRP(I/O Request Packet)处理函数
-
识别设备对象(
DeviceObject
)与分发例程
-
高级逆向技术
-
符号执行(Symbolic Execution)
-
使用
angr
自动化求解路径约束 -
绕过复杂条件分支(如
if(x ^ 0x1234 == 0x5678)
)
-
-
二进制补丁(Patching)
-
修改跳转条件(如
jz → jnz
) -
修补校验函数(直接返回验证通过)
-
-
自动化逆向
-
编写 IDAPython 脚本批量分析
-
使用
Binary Ninja
API 提取函数特征
-
二、工具的使用
ctf比赛除了需要知识之外,也需要使用工具,工具是必不可少,好的工具能够让你事半功倍,接下来我来详细介绍一下各个题目使用的工具
MISC(杂项)
杂项的工具就很多了
工具清单
-
隐写:Stegsolve、zsteg、ExifTool、SilentEye
-
流量:Wireshark、TShark、Chaosreader
-
取证:Volatility、Autopsy、Bulk Extractor
-
编码:CyberChef、dCode.fr、ciphey(自动化解码)
-
爆破:John the Ripper、Hashcat、fcrackzip
-
文件:foremost、binwalk
-
二进制:010 editor,winhex
还有个集成工具箱,随波逐流,很好用
Crypto(密码学)
密码学的工具比较少,大多数一个python脚本就能搞定,最主要的就是要求你足够熟练python,以及最重要的,你得有思路,作者感觉密码学真的跟做数学题一样,不会是真的不会啊。一些常见的密码学工具辅助还是有的,
-
通用工具
-
Python库:
pycryptodome
、gmpy2
、sage
(数学运算) -
在线工具:CyberChef、dCode.fr、factordb.com(分解大数)
-
专用工具:
-
RsaCtfTool
(自动化RSA攻击) -
hashcat
(哈希爆破) -
John the Ripper
(密码破解)
-
-
-
数学计算工具
-
SageMath:用于解离散对数、格基约减(LLL算法)
-
Mathematica:符号计算与复杂方程求解
-
-
CTF框架
-
pwntools:编写自动化攻击脚本
-
web安全
web用的最多也是最有用的就是burpsuite,hackbar解决一些题目也是可以的,python脚本也使用的很多,像sqlmap自动化工具,简单的还是能够做的,但是稍微难一点,就必须得手注了,要是有waf的话,算了,说多了都是泪啊
-
渗透测试工具
-
Burp Suite:抓包、重放、Intruder 爆破、Scanner 扫描
-
Postman:调试 API 接口
-
sqlmap:自动化 SQL 注入
-
Commix:自动化命令注入
-
-
辅助脚本
-
Python
requests
库编写自动化攻击脚本 -
使用
pwntools
处理二进制交互
-
-
代理与调试工具
-
Charles:HTTPS 流量分析
-
Chrome DevTools:调试 XSS、DOM 操作
-
-
目录扫描:
dirsearch
、gobuster
、ffuf、御剑
-
文件上传:蚁剑、哥斯拉、冰蝎
pwn(二进制)
-
静态分析工具
-
IDA Pro/Ghidra:反汇编与伪代码分析
-
Binary Ninja:快速定位漏洞点
-
checksec
:检测二进制保护机制
-
-
动态调试工具
-
GDB(增强插件:
pwndbg
/gef
/peda
) -
LLDB(用于 macOS/iOS 调试)
-
WinDbg(Windows 内核调试)
-
-
漏洞利用开发
-
pwntools
:Python 库(封装进程交互、ROP 链生成) -
ROPgadget
:自动化提取 Gadget -
one_gadget
:查找 libc 中的execve("/bin/sh")
指令
-
-
辅助工具
-
libc-database
:快速匹配 libc 版本 -
patchelf
:修改二进制文件的依赖库
-
Reverse Engineering(逆向工程)
-
必备工具
-
静态分析:IDA Pro、Ghidra、JEB
-
动态调试:x64dbg、GDB(pwndbg)、Frida
-
辅助工具:PEiD、Detect It Easy(查壳工具)
-
以上工具大多数可以在github上找到,免费的,有些也是收费的,比如IDA Pro,010,由于工具较多,链接我就不发了,大家可以在网上寻找。