crackme杂记 006
c语言中什么函数执行的最早?
main函数吗?不是,还有更早执行的函数,比如初始化全局变量的构造函数。我们都知道,od在反汇编一个exe的时候会停止在oep的位置上,那么有比oep还要更早执行的函数吗?有的,比如TLS。
既然tls比ebp都早,那么我们是否可以利用到它呢?比如反调试,如下图代码
|
通过创建一个TLS函数,然后再TLS函数里添加反调试函数,就可以阻止别人调试我们的exe。
这样会改变我们的pe结构,新增一个tls目录,里面存放着tls的结构体,AddressOfCallBacks 存放的就是回调函数的RVA,当然有时候也可能就是VA。TLS函数
既然可以反调试了,那么我们可以去利用这个反调试,如上代码,通过异或0x10对“注册成功”进行加密,然后再与变量isdebug进行异或运算,如果程序被调试了的话,就会使isdebug不为0,变成返回的指针值,从而使字符串变为乱码。
关于这里,有一个动态patch tls回调函数的骚操作,可以一直执行tls函数。原理没听懂,麻了。
先留着,以后解决。
花指令:
之前说过jmp实现的恒成立跳转从而实现花指令,也就是恒成立的eip跳转就能实现花指令,所以我们也可以这样实现:
call 00402032 |
这样可以通过call会讲调用的地址压入栈中,然后其增加0x17,再通过retn实现恒成立跳转。
补充:
这种[xxxxxxxx]的都是全局变量。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 z1inのblog!
评论