作者:selph
从一道Re题学习12种反调试反虚拟技术
题目:AntiDebuggingEmporium
来源:INTENT CTF 2022 Re
这个题目很有意思,里面出现了总共12个反调试反虚拟机的操作,本文内容分两部分,前部分是题解,后部分是这12个反调试反虚拟机手法分析
题解
程序逻辑分析
文件信息:是个64位的Windows控制台程序,VS2022编译的
主函数:
可以看到,逻辑很简单,
1.首先是调用一个函数等待一个对象执行完成
2.然后提示输入flag,
3.对一个数组的值进行判断,如果所有的值都是0,则处理输入字符串输出flag
这里去看看这个数组的值来自哪里:
通过交叉引用,发现这个数组在多个地方被赋值,基本上均在StartAddress这个函数里
经分析,这里的这个数组保存的就是检测虚拟机和调试器的情况,检测到了则会有值被赋值为1:
这个函数首先从当前文件的资源里读取了二进制数据,保存起来,然后进行了累计12个反虚拟机和反调试的函数,这部分内容我们在后文进行详细分析
随便点开一个:
可以看到,这里对一个数组的某个位置进行赋值了,这个赋值后面会用到
现在看一下StartAddress这个函数是在什么时候被调用的:
通过交叉引用可以看到,在TLS回调函数中调用,TLS回调函数会在主函数执行前先执行,这里的hHandle就是主函