软件逆向工程基础
C3ngH Lv4

常规逆向流程

  1. 使用strings/file/binwalk/IDA等静态分析工具收集信息,并根据这些静态信息进行google/github搜索
  2. 研究程序的保护方法,如代码混淆,保护壳及反调试等技术,并设法破除或绕过保护
  3. 反汇编目标软件,快速定位到关键代码进行分析
  4. 结合动态调试,验证自己的初期猜想,在分析的过程中理清程序功能
  5. 针对程序功能,写出对应脚本,求解出 flag

代码混淆

比如使用OLLVMmovfuscator花指令虚拟化SMC等工具技术对代码进行混淆,使得程序分析十分困难。

那么对应的也有反混淆技术,最主要的目的就是复原控制流。比如模拟执行符号执行

保护壳

保护壳类型有许多,简单的压缩壳可以归类为如下几种

  • unpack -> execute

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

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

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

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

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

对于脱壳也有相关的方法,比如单步调试法ESP定律等等

反调试

反调试意在通过检测调试器等方法避免程序被调试分析。比如使用一些 API 函数如IsDebuggerPresent检测调试器,使用SEH异常处理,时间差检测等方法。也可以通过覆写调试端口、自调试等方法进行保护。

非常规逆向思路

非常规逆向题设计的题目范围非常之广,可以是任意架构的任意格式文件。

  • lua/python/java/lua-jit/haskell/applescript/js/solidity/webassembly/etc…
  • firmware/raw bin/etc…
  • chip8/avr/clemency/risc-v/etc.
 评论
评论插件加载失败
正在加载评论插件
访客数 访问量