1

[原创] 第五题 独行孤客CrackMe

奔跑的阿狸 2017-6-10 06:42 553

1. 一个小提示,在win7系统中运行的时候,虽然提示了请在虚拟机中运行,但释放的.sys文件还是一闪而过,利用IDA载入.exe程序,搜索sys字符串,定位到sub_4013E0,主要代码翻译如下:

2. 由此推测程序很可能是利用驱动来计算关键数据,exe是将明文传递过去

3. 在字符串列表中发现了"888aeda4ab"

4. 分析引用该变量的位置,定位到另一个关键函数——401760,主要代码翻译如下:

5. 跟进上面的关键函数——401D50,主要用来将字符串传给sys,并拿到sys算出来的结果

6. 用resHack从.exe中剥出 .sys驱动文件,利用ida静态分析,重点查看驱动的读写函数即可

7. 在sub_108B2中发现了md5的迹象,推测驱动层只是计算个md5

8. 再回到前面的步骤4中的代码详细分析:

9. 目前得出结论:

a. 设用户输入的字符串为sss

b. sss长度必须为6

c. 通过驱动层计算其md5(sss) (这步结论有错误,不是最终的)

d. exe进行二次md5运算,截取从[2]开始的10位字符,用作最终校验


10. 因此可以写代码跑一下所有6位字符串的md5,开始时只算了数字和小写字母的,没找到;后来跑了一晚上的"数字字母符号",终于定位到 79;4yx

11. cm中输入后发现不对,继续跟踪分析

12. 因为程序有反调试,不让下断点,就通过Hook监控WriteFile时传给驱动的参数,发现将自己输入的字符串颠倒了,比如自己输入的123123,传给驱动层的就是321321

13. 通过Hook监控从驱动拿回的数据,发现得到的md5串是 01bef6ddd4b8a4a325f9eeb01ef6585d,网上破解一下发现原文是433666,说明驱动层对其还有处理

14. 暂时尝试手动分析,得出驱动层的算法:

前两位,都是原来的数字加1
第三位,是原来的数字加2
第四位,貌似是原来的数字加3
第五位,貌似是原来的数字加4
第六位,貌似是原来的数字+5

所以 "79;4yx" → "6891us"→"su1986"

15. 胜利的曙光




最新回复 (0)
返回