专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »逆向工程 » 时间戳:11.5.3 处理器时间戳验证线程 »正文

时间戳:11.5.3 处理器时间戳验证线程

来源: 发布时间:星期四, 2009年3月12日 浏览:0次 评论:0
11.5.3  处理器时间戳验证线程


在我看来Defender采用种固若金汤保护机制使得破解者要对受保护应用实施在线调试变得非常困难其思路是:创建个专用校验线程不断地监视处理器时间戳计数器如果该进程有被停止执行迹象(比如说在调试器中设置断点耽搁了进程执行)就“干掉”该进程Defender用了诸如RDTSC这样底层指令来直接访问计数器而没有使用系统API这样破解者就不能在中放钩子(hook)或是替换掉获得计数器值点很重要


加的每个关键都做了很好加密校验线程(verication thread)使得逆向工作开展比原来更令人头痛记住如果没有加密这项技术就不会这么有效了破解者可以直接在反汇编器中加载然后阅读反汇编代码


在我们完成破解任务中为什么我们可以那么轻松地就避开了时间戳校验线程?我已经说过了我有意地把Defender变得更容易破解以确保它在本章篇幅不会太长(本章已经是全书中页数最多章)下面给出几种改进会让时间戳校验线程变得更难对付(当然再难也定能解决关键是看得花多少时间):


在主线程中添加个定期校验和计算用来检验校验线程如果发现校验和不匹配就介绍说明有人对校验线程做了修补——立即终止进程


必须把校验和存放在代码内而不要集中放在某个地方对实际校验和验证代码也必须把它们写成内联(inlined)而不是用单个来实现这样消除检查或者修改校验和就变得非常困难了


为校验线程存放个全局句柄用每个校验和验证来确保线程仍在运行如果线程不运行了就立刻终止


应该提到点是目前我所实现这个校验线程不是很靠得住对于破解练习而言它已经足够可靠了但对于其他要求更高场合就不行了相对较短校验周期再加上校验线程是以普通(normal)优先级运行这意味着即使在没有调试器情况下它也可能会“不合理地”终止


在商业产品环境中时间戳计数器常数应该比我选得大很多而且可能会要求在运行时根据计数器更新速度而计算间隔周期此外为了确保具有较高优先级线程不会阻止它获取CPU时间而导致判断应该让校验线程运行在更高优先级上



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: