PC端恶意代码的混淆与加壳对抗( 三 )


系统痕迹检测
HKEY_LOCAL_macHINESOFTWAREMicrosoftWindows NTCurrentVersionAeDebug
该注册表项指定当应用程序发生错误时 , 触发哪一个调试器 。默认情况下 , 它被设置为Dr.Watson.如果该注册表的键值被修改为OllyDbg,则恶意代码可能确定它正在被调试
1
扫描代码的断点
call $+5
pop edi
sub edi,5
mov ecx,400h
mov eax,0CCh
repne scasb
jz DebuggerDeteced
对抗这种反调试技术的方法是使用硬件断点而不是使用软件断点
时钟检测
被调试时 , 进程的运行速度大大降低 , 例如 , 单步调试大幅度降低恶意代码的运行速度 , 所以时钟检测是恶意代码探测调试器存在的最常用方式之一 。
记录执行一段操作前后的时间戳 , 然后比较这两个时间戳 , 如果存在滞后 , 则可以认为存在调试器
Lab16-1
放入IDA中查看 , 这个跟lab9的一个样本是一样的 , 除了增加反调试 。

PC端恶意代码的混淆与加壳对抗

文章插图
 
可以看到先是检查了BeingDebugged是否为0
之后检查processheap的forceflag是否为0
PC端恶意代码的混淆与加壳对抗

文章插图
 
再检查NTGlobalFlag是否为70h
PC端恶意代码的混淆与加壳对抗

文章插图
 
如果检测到任何一个有反调试的行为就删除自身 。
PC端恶意代码的混淆与加壳对抗

文章插图
 
PC端恶意代码的混淆与加壳对抗

文章插图
 
对于这几个反调试方法都可以使用填充0的方法进行绕过
dump ds:[fs:[30] +0x18] + 0x10
dump fs:[30]
dump fs:[30]+0x68
PC端恶意代码的混淆与加壳对抗

文章插图
 
PC端恶意代码的混淆与加壳对抗

文章插图
 
也可以手动修改寄存器的值 , 让其跳转产生改变 。
PC端恶意代码的混淆与加壳对抗

文章插图
 
剩下的功能点前面都分析过了 , 就不继续分析了 。
Lab16-2
这里用PEView查看
PC端恶意代码的混淆与加壳对抗

文章插图
 
放入IDA中查看 。
PC端恶意代码的混淆与加壳对抗

文章插图
 
arg_4与1比较 , 说明只在程序刚开始的时候有用 。
PC端恶意代码的混淆与加壳对抗

文章插图
 
查看有无OllyDbg.
BeingDebugged , 之后通过检查这个值 , 进行调试判断 。
PC端恶意代码的混淆与加壳对抗

文章插图
 
之后发现通过OutDebugStringA检测调试器
PC端恶意代码的混淆与加壳对抗


推荐阅读