计算机基础知识
重要概念
定义、静态分析、动态分析
常用算法识别
流密码,对称加密算法,非对称加密法,hash算法,树算法,图算法,大整数相加算法,常见数据结构
断点类型
- 软件断点:修改断点处为0xcc
- 硬件断点:利用x86架构的CPU的CR0~CR7调试寄存器
- 内存断点:修改内存页属性引发异常
dll注入技术
https://tomqunchao.github.io/2020/11/02/note/rev/dll-inject/
- 附加到目标进程
- 在目标进程中分配内存:用于存储参数、dll等
- 将dll文件路径,dll文件,复制到远程进程的内存空间
- 控制进程运行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/
异常处理步骤
- 交给调试器
- 执行VEH
- 执行SEH
- 执行TopLevelEH
- 交给调试器
- 调试异常端口通知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符号执行,利用执行图去混淆等
- 其他库