reverse之第五更

reverse之第五更

这是ISCC2016的一道reverse题目。本题主要考查反调试的知识点,主要的反调试是关于TLS回调手法,用了两个TLS回调手法,然后将反调试函数放入TLS中,使得程序在未运行主函数代码之前就已经进行反调试检测。如果程序存在调试程序会自动结束程序运行。其中在TLS回调函数中使用FindDebuggerWindow,NtQueryInformationProcess类型反调试;进入main函数之后再进行Startupinfo反调试,获取g_bKey为真值才能进入获取flag的函数。

关于TLS反调试手法相关文章点这里http://www.2cto.com/article/201303/197705.html

本来想要按照文章里的方法直接修改TLS回调函数01码,结果发现修改之后虽然可以进入主函数,但是并不能得到flag,而且由于main函数里还有一个反调试,所以无法在调试获得flag,当然,我觉得如果将main函数里的反调试nop掉还是有可能动态跟踪出flag的,可以尝试一下。

大致的修改方法如下:

将上面的内容用00填充即可,这个知识在进入main函数之前的TLS,修改之后就可以进入main函数,还有另外一个没有尝试。我是直接在OD中一遍跟踪一遍修改代码,绕过反调试,最终到flag。


首先通过搜索字符串的方式到这个跳转,将je修改为jnz


通过调试会发现程序会运行到他下面的那个je,和上面的一样将其修改为jnz,注意里面的那个call ExitProcess。在每个调用ExitProcess函数上下断点,继续运行。


运行到这里,将cmp dword ptr ss:[ebp-0x58],0x0修改为cmp dword ptr ss:[ebp-0x58],0x1,跳转之后flag就出来了。。。

文章目录
  1. 1. reverse之第五更
|