-
-
第五题 独行孤客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直播授课
赞赏
他的文章
看原图