首页
社区
课程
招聘
第五题 独行孤客CrackMe Writeup
2017-6-11 10:15 2793

第五题 独行孤客CrackMe Writeup

2017-6-11 10:15
2793

  这道题加载了驱动并在驱动中添加反调试和部分算法。

  程序通过向驱动发送控制码0x222004使驱动执行反调试函数。反调试是通过将DebugPort置0实现的。

  程序在两处向驱动发送0x222004控制码,一处是创建的线程sub_402250中。

  另一处是将输入内容通过WriteFile传递至驱动之前。

  调试时可以选择将这两处patch以绕过反调试,不过作者也考虑到这种情况,如果没有接收到0x222004控制码,驱动中的加密流程不会执行,取而代之的是返回一串固定的MD5值。

  因此我选择先分析清楚驱动中的算法再进行patch,然后分析余下的流程。驱动中的算法也非常简单,就是将输入第一位加1,之后将每一位加上自身的偏移后求MD5。

  

  当然,输入数据在进入驱动之前也经过处理,处理方式就是将输入字符串倒置,并限定输入字符串长度为6位。这里不再赘述。

  在驱动中进行加密计算后,加密后得到的MD5将通过ReadFile传回至程序中,并将MD5转化为字符串后再求一次MD5,之后从MD5字符串的第三位开始与a888aeda4ab比较,如果相同则说明输入正确。

  通过枚举可得正确输入为su1986。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回