-
-
[求助]请问alexprotect这个壳的开始部分是怎么反调试的
-
发表于:
2013-5-29 18:55
3800
-
[求助]请问alexprotect这个壳的开始部分是怎么反调试的
想跟着别人的脚本学脱壳,然后选alexprotect来学习。但是碰到了一些问题。
第一个不是很重要。就是有的版本od载入就直接运行了,加壳后的程序没有tls,不知道为何。但是在入口下断点还是能断下来。另外一个版本od载入能停在入口点。
第二个问题是这个壳入口的地方就设置了seh,在seh的处理程序中,只是简单的让eip+2,这是壳的第一次seh处理程序。
00438029 8380 B8000000 0>add dword ptr ds:[eax+B8],2
00438030 33C0 xor eax,eax
00438032 EB 01 jmp short alexprot.00438035
前面后面都有花指令,主要就是[eax+b8]增加2,这是context里面的eip,然后把eax置0返回。
执行完seh的处理程序,就返回到ntdll的代码中去了,然后我alt+f9,返回用户领空。
这是返回的位置。
0043805F /EB 03 jmp short alexprot.00438064
00438061 |EB 03 jmp short alexprot.00438066
00438063 |C7 ??? ; 未知命令
00438064 ^\EB FB jmp short alexprot.00438061
发现多了一个一次性的硬件断点,地址是771D7005,显示是一次性断点,同时单步的时候直接再次返回系统领空去。之后的程序就是反复的这样进行SEH。
还有一点就是,如果把异常指令nop掉是能执行的,一旦nop,之后的一连串seh都没有了,而且接着就是rdtsc来检测调试器,应该是壳的正确流程了。不过,如果不用调试器,那么加壳后的程序还是会进行一大堆seh吧。这一点我不是很理解。
如果nop是不能运行的,后面应该有完整性的校验,因为前面没弄懂,所以还没看到后面去。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!