静态反调试

静态反调试技术只需要在程序运行之前进行一次破解即可解除全部限制,且不需要二次操作。而且静态反调试技术对于操作系统的依赖性非常大,相同的反调试技术在不同的操作系统表现可能不同。

(待补充)

参考:

https://xz.aliyun.com/t/5685

https://xz.aliyun.com/t/5732/

https://xz.aliyun.com/t/6133


栈指针平衡

花指令

SMC

SMC(自修改代码,Self-Modifying Code),就是在真正执行某一段代码时,程序会对自身的该段代码进行自修改,只有在修改后的代码才是可汇编,可执行的。在程序未对该段代码进行修改之前,在静态分析状态下,均是不可读的字节码,IDA之类的反汇编器无法识别程序的正常逻辑。是一种反调试代码技术。

还原方法

  1. 首先确定需要加密的代码部分;
  2. 通过vs查看反汇编(或者OD、IDA等)可以确定对应部分的反汇编代码;
  3. 将这段代码手工用16进制编辑器覆盖为加密后的数据;
  4. 程序执行时则运行事先写好的代码先进行解密再运行。

参考

https://blog.csdn.net/qq_41923479/article/details/80377708
https://blog.csdn.net/palmer9/article/details/105034093

脚本

IDA - File - Script file

1
2
3
4
5
6
7
8
9
10
11
#include <idc.idc>

static main()
{
auto addr = 0x00401216;
auto i = 0;
for(i=0;i<=0x43E;i++)
{
PatchByte(addr+i,Byte(addr+i)^Byte(0x00409080+i));
}
}

MOV混淆

OLLVM混淆(LLVM)