CTF中Reverse介绍
CTF中Reverse介绍
什么是逆向?
广义的逆向:
- 从目标代码反推源代码
- 从源代码理解开发者行为和目的
- 应用:软件破解、漏洞挖掘、恶意代码分析
CTF逆向-侠义的逆向:
与Crypto结合
- CrackMe(破解密码,不修改程序)
- KeygenMe(生成注册码)
与隐写取证结合 - Recover(恢复文件)
与Pwn结合 - Reverse(interface,struct,format,protocol)
- Bypass auth,Patch bin
逆向的基本流程
- 程序预处理,去混淆合过反调试
- 代码逆向,找到验证函数
- 验证函数逆向,找到验证算法
- 破解验证算法,得到flag
其中,80%的题目都与crypto结合,
通过找到一个key过掉所有关卡。
同时可能有一量与恢复文件有关。
逆向的核心
逆向的核心是破解验证算法(过算法关)
验证算法简化如下:
- 输入:key
- 验证:
1
2
3
4
5if H(key) == Secret:
{
flag = O(key);
print flag;
} - 输出:flag
验证算法分类: - 简单比较验证
- 密码算法验证
- 算法求解验证
也就是说,想成为一个优秀的逆向手,你要成为一个优秀的码农,算法大佬。
算法举例:
算法1 key直接比较
算法2 key简单变换
算法3 key编码转换
算法4 key散列计算
算法5 key密钥加密
算法6 key算法求解
算法7 flag直接输出
算法8 密钥空间过短
算法9 伪随机算法 -> 爆破
验证算法逆向思路
简单变换验证:
- 人工逆向,找到可逆运算,按位分步破解(算法1-3)
密码算法验证:
- 识别密码算法(有限),针对性解密(算法4-5)
解题算法验证:
- 理解算法原理,针对性解题(算法6)
验证常见漏洞:
- 直接输出flag(算法7)
- 密钥空间过短(算法8)
- 伪随机算法(算法9)
现实竞赛:
- 分段、嵌套验证
爆破神技:
- 简单验证(按位破解)
- 密码算法(密钥部分已知)
- 解题算法(暴力搜索)
- 双刃剑(100亿次以内,位数与取值都有关)
逆向的基础
逆向的基础是理解目标代码(过语言关)
必备知识
- 汇编,C语言
- 操作系统原理与核心编程,程序加载
- 反汇编与调试等
常用工具
- 1.PE与ELF编辑、帧壳、脱壳工具
- O1Oeditor、winhex
- peid、upx、resource hacker
- sysinternals
- 2.反汇编与反编译工具
- IDA Pro、Hopper
- 3.调试器
- OBydbg、gdb、windbg
分析方法
- 静态分析方法:反汇编、反编译
- 动态分析方法:调试、模拟
CTF中Reverse介绍
http://maitianxin.github.io/2020/05/20/other/ctf_reverse/