混淆代码分析:技术与应对策略
1. 检测工具运行状态
在软件保护领域,程序常常需要检测某些工具是否正在运行,以防止被逆向分析。例如,WinLicense 混淆/保护程序会使用如下函数调用,来判断 Filemon(Process Monitor 的前身)工具是否正在执行:
if (FindWindow("FilemonClass", NULL)) {
//exit because Filemon is running
}
这里, FindWindow 函数依据窗口的注册类名(”FilemonClass”)而非窗口标题来搜索顶级应用程序窗口。若找到指定类别的窗口,就假定 Filemon 正在运行,程序随之终止。
2. 检测调试器
调试器能让分析人员完全掌控待分析程序的执行过程。对于混淆程序,常见做法是先运行混淆程序,完成解压缩或解密任务,再利用调试器的内存访问功能从内存中提取去混淆后的进程映像,最后用标准静态分析工具和技术分析提取的进程映像。
为应对这种调试器辅助的去混淆技术,混淆工具开发者采取了一系列措施。检测到调试器存在的程序通常会选择终止,避免分析人员轻易掌握程序行为。
检测调试器的技术多样,从通过知名 API 函数(如 Windows 的 IsDebuggerPresent 函数)向操作系统进行简单查询,到对因使用调试器而在内存或处理器中留下的痕迹进行底层检查。例如,检测处理器的跟踪(单步)标志是否设置。在某些情况下,还能检测特定的调试器,如通过存在的
超级会员免费看
订阅专栏 解锁全文
1350

被折叠的 条评论
为什么被折叠?



