软件逆向工程知识总结

计算机基础知识

重要概念

定义、静态分析、动态分析

常用算法识别

流密码,对称加密算法,非对称加密法,hash算法,树算法,图算法,大整数相加算法,常见数据结构

断点类型

  • 软件断点:修改断点处为0xcc
  • 硬件断点:利用x86架构的CPU的CR0~CR7调试寄存器
  • 内存断点:修改内存页属性引发异常

dll注入技术

https://tomqunchao.github.io/2020/11/02/note/rev/dll-inject/

  1. 附加到目标进程
  2. 在目标进程中分配内存:用于存储参数、dll等
  3. 将dll文件路径,dll文件,复制到远程进程的内存空间
  4. 控制进程运行dll文件

hook相关

Windows

https://tomqunchao.github.io/2020/10/28/note/rev/win-hook/

内核层hook

  • SSDThook

应用层hook

  • 消息hook
    • SetWindowsHook
  • 注入hook
    • IAT hook 修改导入表
    • inline hook 修改函数前5个字节;不支持多线程
    • HotFix hook 利用hotfix机制,修改函数前2个字节为short jmp,到函数上面,然后再修改那5个字节;需要函数开头有mov edi,edi且上方有5个nop;支持多线程
  • 调试Hook
    • OpenProcess,DebugActiveProcess,附加到已经运行的进程
    • CreateProcessA 创建进程,然后用上面的API进行调试
  • 修改注册表

Linux

https://tomqunchao.github.io/2021/01/19/note/rev/game-1/

注入hook和win差不多,但是dll注入和调试使用ptrace。

还有个LD_PRELOAD

Android

native层hook即Linux hook,frida的hook也是ptrace

dalvik层hook可以使用xposed,利用了zygote特性

https://tomqunchao.github.io/2020/10/14/note/rev/rev-3/

Windows异常处理机制

https://tomqunchao.github.io/2020/10/28/note/rev/win-ehs/

异常处理步骤

  1. 交给调试器
  2. 执行VEH
  3. 执行SEH
  4. 执行TopLevelEH
  5. 交给调试器
  6. 调试异常端口通知csrss.exe

Linux异常处理机制

软件保护技术

静态(部分静态动态通用)

  • 花指令(代码混淆)
  • ollvm(逻辑混淆)
  • SMC(自修改代码)
  • 压缩壳(通常为了减少体积),加密壳
  • 虚拟机保护技术

动态(主要是反调试技术)

  • 基于时间的反调试
  • 基于异常的反调试
  • 基于API的反调试(Windows的IsDebuggerPresent, Linux的ptrace)
  • ZwQueryProcessInformation
  • 父子进程反调试
  • 代码校验(主要用于对抗软件断点)

Android逆向

  • 反射机制
  • JNI_OnLoad函数
  • 反调试

IoT逆向

  • CPU差异
  • datasheet

高级语言逆向

  • python
  • c#
  • java
  • rust
  • go (IDA Golang helper)

工具使用

静态分析

  • ida
  • ghirda 弥补IDA部分缺点
  • radare2
  • binutils
  • BinaryNinja

动态分析

  • ida
  • gdb
  • x64dbg

高级语言

  • dnspy
  • jadx,jeb
  • jd-gui,luyten

解题库

  • z3 线性求解
  • angr符号执行,利用执行图去混淆等
  • 其他库