avatar

CTF Re 入门大纲

工具

反汇编

万能

  • ghidra:美国NSA出品,能搞定plt混乱等,很牛皮

IDA相关

  • ida_6.8 :适合32位系统(windowsXP)
  • ida_7.0:主流
  • ida_7.5:最新版,增加一些过混淆,异构程序F5

IDA其他常用的一些插件

IDA FLIRT Signature Database – 用于识别静态编译的可执行文件中的库函数
Find Crypt – 寻找常用加密算法中的常数(需要安装 yara-python)
IDA signsrch – 寻找二进制文件所使用的加密、压缩算法
Ponce – 污点分析和符号化执行工具
snowman decompiler – C/C++反汇编插件(F3 进行反汇编)
CodeXplorer – 自动类型重建以及对象浏览(C++)(jump to disasm)
IDA Ref – 汇编指令注释(支持arm,x86,mips)
auto re – 函数自动重命名
nao – dead code 清除HexRaysPyTools – 类/结构体创建和虚函数表检测
DIE – 动态调试增强工具,保存函数调用上下文信息
sk3wldbg – IDA 动态调试器,支持多平台
idaemu – 模拟代码执行(支持X86、ARM平台)
Diaphora – 程序差异比较
Keypatch – 基于 Keystone 的 Patch 二进制文件插件
FRIEND – 哪里不会点哪里,提升汇编格式的可读性、提供指令、寄存器的文档等
SimplifyGraph – 简化复杂的函数流程图
bincat – 静态二进制代码分析工具包,2017 Hex-Rays 插件第一名
golang_loader_assist – Golang编译的二进制文件分析助手

安卓反汇编

  • jadx-gui:安卓逆向静态审计

动态调试

windows

  • Olldbg:经典,插件多,但是只能调试32位
  • x32/x64dbg:和od差不多,但是能调试的64位,插件较少

  • windbg:windows内核调试

  • CheatEngine:常见于游戏逆向

Linux

  • gdb:yyds

Android

  • android_killer:经典apk动调工具
  • android_studio:开发调试

Others

  • qemu或者docker挂上ida_server调

查壳

Windows

  • PEID
  • EXEINFO

Linux

  • checksec(详细参考pwn中pwntools安装)

脱壳

  • unpack -> execute

    直接将程序代码全部解压到内存中再继续执行程序代码

  • unpack -> execute -> unpack -> execute …

    解压部分代码,再边解压边执行

  • unpack -> [decoder | encoded code] -> decode -> execute

    程序代码有过编码,在解压后再运行函数将真正的程序代码解码执

  • UPX

    • 压缩壳,巨简单
    • Linux:apt install upx 在使用 upx -d filename直接脱壳
    • windows:官网的upx.exe,用法同上

下面两个壳一般会手动脱

  • PECompat
  • ASpack

常见算法识别

IDA:FindCrypt IDA 7.0版本安装查询加密算法的findcrypt3脚本插件的详细步骤

PEID:KANAL(Krypto ANALyzer) (PEiD自带)

特征值识别

特征值识别

特征算法识别

特征值识别

第三方库识别

  • 字符串报错

  • 函数签名识别

    Load File -> Flirter file

  • Diff二进制对比识别

现代逆向工程

符号执行

必要工具

  • python虚拟机:python的库之间会起冲突,比如angr会修改z3,那么需要一个python的虚拟环境

  • z3:2020 CISCN出现过,也是一个泛型约束求解的东西

  • angr:强大的模拟执行工具,有些z3不能解的这个可以解
  • 去平坦化(OLLVM):编译原理相关,可以试试用脚本还原 (利用符号执行去除控制流平坦化

Pin插桩

貌似国赛都没考过,但是可以方便分析,主要涉及一些工具和hook编程

混淆和保护

一般就是花指令,反调试等

花指令总结

有些脚本可能会临时找

WebAssembly

wasm官网

一步步学习Webassembly逆向分析方法

反调试

详见:windows反调试笔记.md(API)、 CTFer成长之路-Nu1L战队/从0到1 、CTFWiki

Windows

主要利用的是 API 断点检测 其他技巧

Linux

ptrace开启两个进程(MRCTF2021有涉及)

游戏逆向

一般是Unity游戏的逆向,Unity又是基于C#编写,所以静态分析会使用类似Dnspy等工具

修改内存的话是CheateEngine,还是比较主流的修改器制作

高级语言逆向

一般有:python Golang Rust

详见 CTFer成长之路-Nu1L战队/从0到1

DUMP内存

万能的脱壳方法,加壳的程序在运行时肯定是自身脱壳的,所以内存的程序是已经脱了壳的

  • 火绒剑 PC_Hunter windows任务管理器

详见 CTFer成长之路-Nu1L战队/从0到1

教程总结

Hacking Tools搜罗大集合

IDA 7.0版本安装查询加密算法的findcrypt3脚本插件的详细步骤

利用符号执行去除控制流平坦化

IDAGolangHelper

IDA_Signsrch

frida入门总结

wasm官网

一步步学习Webassembly逆向分析方法

Author: Joe1sn
Link: http://blog.joe1sn.top/2021/MainFrame/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信