首页
社区
课程
招聘
[原创] CTF2017 第5题 独行孤客 CrackMe 详细破解分析
发表于: 2017-6-10 22:16 5900

[原创] CTF2017 第5题 独行孤客 CrackMe 详细破解分析

2017-6-10 22:16
5900

这题考察驱动调试、驱动反调试、MD5算法穷举还有电脑性能(开玩笑的),分析算法不会费什么功夫。
本文按照实际破解顺序撰写,符合初学者的理解逻辑,尽量条理清晰,比较细致,希望耐心看,大牛略过吧!


一、静态了解目标:未加壳,OD载入主程序,迅速查看字符,发现几处有用,记录下来,养成好习惯:


//发现驱动,成功提示信息,算法侦测:MD5,大概有了分析思路——>先搞定主程序,再搞定驱动


二、释放并运行驱动


//下断点:CreateFileA

00401566   .  E8 B5090000   CALL CrackMe.00401F20

// 释放驱动

//从资源释放 6144 字节驱动

//释放驱动,此处将驱动文件拷贝副本,留作分析用

//安装驱动

//此处注意 ServiceName = "vmxdrv" 后续动态分析驱动时设置断点有

//驱动加载后删除驱动文件,防止被破解者发现


三、静态分析驱动:


//首先了解一下相关知识,为了后续准确断点IRP回调函数:

//使用 IDA 很容易根据MajorFunction[i]下标查到对应IRP回调函数类型:

//找到了关键几个MajorFunction先进行简单整理,便于后续查看:
//IRP_MJ_Read 暗桩等

//IRP_MJ_Write 内核字符串变形及MD5

//IRP_MJ_Device_Control 内核反调试及其他


四、动态分析RING3主程序:

//首先OD载入主程序,搜索所有“push 0x222004”调用IRP_MJ_Device_Control处,一共两处,全部修改为“push 0x22200C”,
//简单跳过内核反调试,否则死机少不了,但可能会影响到后续算法或者留暗桩,不过并不影响RING3主程序的算法流程分析。

//下断点:GetWindowTextA,运行断下:

//一路返回 401760 这个算法程序:

//得跟进核心算法 401D50 了,很明显 WriteFile、ReadFile 与驱动沟通,将倒置后的6位小写字符给驱动加密,然后再读取出来
//读出来的结果类似MD5值,怀疑驱动里头也进行了MD5

//离开核心算法程序,回到主流程

//将截取的10位字符与内置的“888aeda4ab”进行比较,相同则成功


五、小结RING3主程序算法流程:

//显然只要再搞清楚第4步骤驱动里头在做什么就可以弄清楚算法了


六、驱动动态调试分析


//接下来该分析驱动,参考第三步静态分析的关键几个MajorFunction,开启windbg双机调试,断点:

//重新开始运行未修改过的主程序,断下IRP_MJ_Device_Control:

//参考第三节程序,“push 0x222004”对应选择分支
//IRP_MJ_Device_Control 内核反调试及其他

//跟进 call vmxdrv+0x486 (f8c00486) ,“and dword ptr [eax+0BCh],0”对DebugPort清零,反调试

//将[f8c004a9]的“83”修改为“C3”,跳过DebugPort清零反调试

//至此已经清楚 IRP_MJ_Device_Control 内核反调试手段,记得取消该断点。
//继续运行,显示出CrackMe窗口,输入“123456”,按回车,断下 IRP_MJ_Write:

//算法 (call vmxdrv+0x4b6 将倒置输入的ASCII第1位+1,第2位+1,第3位+2,第4位+3,第5位+4,第6位+5,如果是数字可理解为+112345,并取MD5)

//跟进 call vmxdrv+0x4b6

//读取输入,计算位数=6

//比较位数

//注册码[1]+1

//注册码循环+AL 此时 AL=0,1,2,3,4,5

//654321+112345=766666
//MD5准备

//MD5(“766666”)= 17f73e13bad89038392692e82d63b17d

//call vmxdrv+0x4b6 已经跟完了,我们继续运行
//断在 IRP_MJ_Read

//正确流程

//至此,驱动重要的几个MajorFunction已经分析完成,并且完成了反反调试


七、驱动算法小结


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

收藏
免费 3
支持
分享
最新回复 (6)
雪    币: 187
活跃值: (70)
能力值: ( LV5,RANK:155 )
在线值:
发帖
回帖
粉丝
2
windbg调试内核,学习到了。
2017-6-11 15:20
0
雪    币: 13719
活跃值: (2851)
能力值: ( LV15,RANK:2663 )
在线值:
发帖
回帖
粉丝
3
我当时系统没死,但是OD会跑飞。
2017-6-11 22:15
0
雪    币: 13719
活跃值: (2851)
能力值: ( LV15,RANK:2663 )
在线值:
发帖
回帖
粉丝
4
windbg姿势不会啊,学习了
2017-6-11 22:16
0
雪    币: 175
活跃值: (491)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
请问下,你这个伪代码      在  WINDBG里怎么显示的~~大神,求解
2017-6-12 10:03
0
雪    币: 4064
活跃值: (4402)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
感谢分享!
2017-6-12 10:40
0
雪    币: 43
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习,谢谢分享
2017-6-12 21:20
0
游客
登录 | 注册 方可回帖
返回