-
-
[讨论]新发现的两个反爆破方式
-
发表于:
2008-3-31 11:42
3733
-
Themida 壳里发现的
一个是RDTSC指令异常。正确执行后,壳会利用验算后的密匙作为CALL [变量]的启动钥匙正确呼叫系统API将CR4的TSD置位,然后再走几步就是RDTSC指令— 异常—跳转到SEH(SEH内还可以再进一步验证,看看是否是RDTSD产生的异常).如果强行爆破,则CALL [变量]可能会因为跳过算法而得不到正确的启动匙,后果你自己知道了.
另一个则是BOUND 边界检查指令,这个比RDTSC更有战略意义和应用价值.如果说RDTSC需要系统内核操作CR4而容易被发现的话,那么BOUND则可以更加隐蔽,神不知鬼不觉的干掉调试器而不留下痕迹.比如,可以事先准备好一个ASCII字符串,如果正确执行的话,这个ASCII会按正确的长度复制出来,然后将一个验算数值以及上面的ASCII地址作为BOUND操作数来执行,正确则产生异常5(OD会有超出队列范围的记录)—SEH.如果强行爆破,则可能会因为ASCII达不到BOUND的异常要求而没有跳转到SEH里.如图
把RDTSC和BOUND指令与算法验证,检测调试器的指令捆绑到一块,做成一个集多种功能于一身的代码块,那些一向对壳喜欢轮铁锤,放爆破的破坏王们则要抓狂了.
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)