软件逆向主要指对软件的结构、流程、算法、代码等进行逆向拆解和分析。

  • 题目通常会给选手提供一个带有复杂算法和保护代码的程序,需要对算法进行分析,对保护代码进行破解来得到flag
  • 考察内容:
    • 程序的运行原理,计算机底层原理
    • 各种工具的使用,各种思路的碰撞
    • 对程序的熟悉程度,对多种算法的了解程度
  • 需要选手分析目标程序,最后写出逆推程序来完成题目

广义的逆向

  • 从目标代码反推源代码
  • 从源代码理解开发者行为和目的
  • 应用:软件破解、漏洞挖掘、恶意代码分析

CTF 逆向 - 狭义的逆向(保护层 -> 语言层 -> 算法层 -> flag

  • 涉及 Windows、Linux、Android 平台的多种编程技术
  • 利用常用工具对源代码及二进制文件进行逆向分析
  • Android 移动应用 APK 文件的逆向分析
  • 加解密、内核编程、算法、反调试和代码混淆技术
  • 与 Crypto 结合
    • CrackMe(破密码,不改程序)
    • KeygenMe(生成注册码)
  • 与隐写取证结合
  • Recover(恢复文件)

逆向的基础

  • 逆向的基础是理解目标代码(过语言关)
  • 必备知识
    • 汇编、C 语言
    • 操作系统原理与核心编程、程序加载
    • 反编译与调试等等
  • 常用工具
    • PE 与 ELF 编辑、侦壳、脱壳工具
      • 010Editor、WinHex、HxD
      • PEID、Die、Upx、Resource hacker
    • 反汇编与反编译工具
      • IDA Pro、jadx、ILSpy、dnSpy
    • 调试器
      • Ollydbg、X64dbg、gdb、windbg
  • 开发和运行环境分析方法
    • 静态分析方法:反汇编、反编译
    • 动态分析方法:调试、模拟

IDA
image.png

Ollydbg:调试 32 位
X64dbg:调试64位

工具

吾爱破解工具包

https://down.52pojie.cn/

看雪工具包

https://tool.pediy.com/