静态反调试技术只需要在程序运行之前进行一次破解即可解除全部限制,且不需要二次操作。而且静态反调试技术对于操作系统的依赖性非常大,相同的反调试技术在不同的操作系统表现可能不同。
(待补充)
参考:
栈指针平衡
花指令
去花:
1 | import idautils |
SMC
SMC(自修改代码,Self-Modifying Code),就是在真正执行某一段代码时,程序会对自身的该段代码进行自修改,只有在修改后的代码才是可汇编,可执行的。在程序未对该段代码进行修改之前,在静态分析状态下,均是不可读的字节码,IDA之类的反汇编器无法识别程序的正常逻辑。是一种反调试代码技术。
还原方法
- 首先确定需要加密的代码部分;
- 通过vs查看反汇编(或者OD、IDA等)可以确定对应部分的反汇编代码;
- 将这段代码手工用16进制编辑器覆盖为加密后的数据;
- 程序执行时则运行事先写好的代码先进行解密再运行。
参考
https://blog.csdn.net/qq_41923479/article/details/80377708
https://blog.csdn.net/palmer9/article/details/105034093
脚本
IDA - File - Script file
1 |
|
MOV混淆
OLLVM混淆(LLVM)
基于
SnowGirls
的deflat,利用angr框架实现去除控制流平坦化。python deflat.py -f check_passwd_x8664_flat --addr 0x400530
LLVM多种格式
xx.c (源代码)
xx.ll (LLVM字节码的文本表示)
xx.s (机器汇编码表示的汇编文件)
xx.bc (LLVM字节码的二进制形式)
xx.out (可执行的二进制文件)
常用转换:
1 | clang test.bc -o test |