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
    5
    if 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/
作者
Matianxin
发布于
2020年5月20日
许可协议