反逆向工程
1. 反静态分析
- 花指令:通过条件互补、固定值、滥用指针、滥用SEH等方式破坏反汇编代码
- 动态加解密
- 对抗反编译:通过push + retn替代jmp、在永不执行的代码处调整栈指针等方式使得Hex-Rays反编译器认为函数堆栈不平衡,拒绝反编译
- 位数交叉编码:32位/64位交叉模式编码
- Java/Python代码混淆
- ollvm控制流平坦化
2. 反调试
- 进程状态检测:检测BeingDebugged、NtGlobalFlag等
- 调试环境检测:检测调试器窗口、进程、文件、内核对象等
- 时钟检测:检测程序运行时长
- 异常检测:调试器和常规程序对异常的处理存在差异
- 断点检测:检测硬件断点/软件断点/单步标志位,检测代码段哈希
- 自调试和多线程/进程逻辑互补
- 通过调试器/插件漏洞检测或破坏
3. 反虚拟机
- 虚拟机痕迹与指纹检测,常见于注册表、服务、进程、文件、网卡Mac地址、CPUID、主板/磁盘型号、内核模块等
- 特权指令:一些特权指令如sidt、sgdt、sldt、cpuid、in等,由于性能和硬件模拟等原因虚拟化不完善,这些指令在虚拟机和物理机中运行时会返回不同的结果
- 社会工程学:检测电脑中常用软件、逆向分析工具、历史文档、临时文件数量、开机时间、内存大小等
- 虚拟机漏洞逃逸与破坏
4. 反沙箱
- 人工操作互动触发恶意行为
- 延迟运行/特定时间点运行:沙箱检测时间一般较短
- IF分支混淆:对抗分支预测与追踪技术
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 凌虚的博客!