这里说的“干扰函数”,是指在程序正常执行过程中,对整体功能执行结果没有影响,但在过程上有一定干扰的函数。比如在整个代码的中间加上一句 GetTickCount()
,虽然代码有变动,但执行结果肯定不变。逆向分析、代码检测的时候都要额外分析到这个函数,这就是干扰函数。其实大多数函数都可以充当干扰函数,具体就看写程序的时候怎么去构造。
干扰函数的作用
- 干扰杀毒软件检测查杀的结果。
- 增加人工逆向分析的复杂度。
使用注意的问题
干扰函数中很多的返回值是有效对象,切记一定要关闭/销毁函数返回值的有效对象,比如:
- GetTickCount() 返回值为DWORD 类型的结果而非对象,就不需要关闭。
- CreateFile 如果返回了有效句柄,就需要用 CloseHandle 将句柄关闭,否则会造成内存泄露。
也有一些特殊函数,比如 GetCurrentThread() 返回值为当前线程的句柄,但我们不需要用 CloseHandle去关闭它,因为按照微软官方文档的说法,GetCurrentThread() 的返回值其实是个伪句柄(pseudo handle),伪句柄不需要关闭/销毁。
干扰函数的整理
GetTickCount();
CloseHandle(0);
GetCurrentProcessId();
GetCurrentThreadId();
GetCurrentThread();
GetCurrentThread();
GetCurrentProcess();
GetACP();
GetOEMCP();
GetSystemDefaultLangID();
GetUserDefaultUILanguage();
GetUserDefaultLangID();
GetUserDefaultLCID();
GetSystemDefaultLCID();
SetBkColor(NULL, NULL);
CreateEvent(NULL, NULL, NULL, NULL);
GetLastError();
CreateNamedPipe(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
SetBkColor(NULL, NULL);
HideCaret(NULL);
FindWindow(NULL,NULL);