首页
社区
课程
招聘
[原创](一)通过逆向PCHunter驱动学习64位 windows内核之 精准定位
发表于: 2018-6-4 18:50 18146

[原创](一)通过逆向PCHunter驱动学习64位 windows内核之 精准定位

2018-6-4 18:50
18146

相关链接:

[原创](一)通过逆向PCHunter驱动学习64位 windows内核之 精准定位

[原创](二)通过逆向PCHunter驱动学习64位 windows内核之 识别隐藏进程


-----------------------------------------------------------------------------------------------------------------------------------------------------

PCHunter驱动3环到0环的通信协议分析

首先感谢下PCHunter的作者提供了这么优秀且还是免费的内核工具。


这次逆向是我在科锐学习32位内核课程后,

练手的小项目,

感觉自己写得比较用心的,

所以作为自己的首贴逆向贴,

发布到看雪上来,

与大家分享一下。


这篇作为第一篇,

主要内容是通过分析 PCHunte 3环请求到0环的通信协议内容,

来精准定位PCHunter驱动功能相关函数,

之后的篇幅会在此基础上,

逐篇分析PCHunter的各项内核功能的实现。

-----------------------------------------------------------------------------------------------------------------------------------------------------

样本信息:

样本名:      PCHunter64ao.sys(之后简称 "样本")

版本号:      1.0.0.5

样本来源:  PCHunter64.exe释放的驱动文件

调试环境:  host: win7_64 + IDA + VirtualKd

                   dest: WMware(win7_64)


当前样本模块加载基址:

PCHunter64ao.sys         FFFFF88003400000 ---  00000000000C0000

nt                                  fffff800`03e00000    ---   fffff800`043ea000


因为双机调试环境搭建相关的帖子很多,

所以略去。

在调试目标机开启PCHunter前, 

IDA载入样本PCHunter64ao.sys。

-----------------------------------------------------------------------------------------------------------------------------------------------------

概述:

待IDA载入分析完如下图所示:


得知样本函数数量规模,大于等于1004个。

我的首要任务是解决在这众多的函数中,

如何找到我们要分析的功能?

根据自己开发驱动的经验,

功能较多的驱动服务中,

3环应用程序一般使用DeviceIoControl函数,

通过其提供的控制码功能,来实现与0环的功能请求通信,

0环则通过派遣回调函数表对应的IRP_MJ_DEVICE_CONTROL项中,

3环传入的控制码来实现用户请求功能的区分和功能向下派发。

但是在实际分析过程中我发现,

PCHunter 3环所有的用户请求控件码都是同一个,

样品并没有使用常归的通信手法,难道另辟蹊径或是加密了?


之后经过一系列努力,

最后发现作者确实是在设备控制的基础上,

又实现了一套 自己的 3 环与 0 环通信协议,

并对协议作了加密,

解密后的内容中又发现了动态与静态的2处校验码。

至此心中对作者又升起一股由衷的敬意。

一款免费的驱动工具,

作者却一点也不马虎。

下面开始具体介绍菜鸟分析挑战之旅(大神老鸟可以略过)。

-----------------------------------------------------------------------------------------------------------------------------------------------------

分析过程:

通过IDA很快找到样本入口处,

也就是DirverEntry,

F2设置断点,

在目标机中打开PCHunter工具,

于是IDA中断下来了.

如下图所示:


此时我已经有了pDriverObject对象指针

WINDBG>dt nt!_DRIVER_OBJECT

+0x000 Type : Int2B

+0x002 Size : Int2B

+0x008 DeviceObject : Ptr64 _DEVICE_OBJECT

//略

+0x068 DriverUnload : Ptr64 void

+0x070 MajorFunction : [28] Ptr64 long

下一目标是要找到 pDriverObject +0x070位置的写入,

也是注册其成员 派遣函数表的代码。

根据结构体信息参照,

从入口向下,


[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

最后于 2018-7-22 12:02 被hjbfa编辑 ,原因: 整理链接
上传的附件:
收藏
免费 3
支持
分享
最新回复 (21)
雪    币: 36
活跃值: (1021)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
66666666分析的好细
2018-6-4 20:16
0
雪    币: 153
活跃值: (260)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
芃杉 66666666分析的好细
这么快被你发现了,谢谢兄弟夸奖
2018-6-4 20:36
0
雪    币: 1036
活跃值: (1296)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
4
我记得DeviceControl  是VM掉的吧?
2018-6-5 09:29
0
雪    币: 639
活跃值: (4066)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
分析的很细致,期待后续更新
2018-6-5 09:33
0
雪    币: 153
活跃值: (260)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
分析过程中确实发现2013年老版本内DeviceControl  是VM过的,
贴中上传的样本是新版本,作者已经没去掉了VM,
话说他这套通信协议和通信机制配上VM后确实难度非常非常大
2018-6-5 09:58
0
雪    币: 576
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
mark
2018-6-5 13:06
0
雪    币: 37
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
菜鸟,完全没看懂,很高深的样子,不过确实对代码比较感兴趣,只是没有什么时间研究之。
2018-6-5 13:36
0
雪    币: 9
活跃值: (175)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
谢谢分享
2018-6-5 20:27
0
雪    币: 193
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
10
厉害,顶!
2018-6-11 20:31
0
雪    币: 136
活跃值: (16)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
Boos.Yang  分析得很好,很透彻,学习了.期待后续的更新
2018-6-11 22:50
0
雪    币: 1994
活跃值: (1521)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
12
好文章,分析得不错
2018-6-12 09:26
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
给你点个赞
2018-6-13 02:00
0
雪    币: 4101
活跃值: (2808)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
14
你好,怎么用IDA调内核,可以教一下吗?
2018-6-16 21:58
0
雪    币: 153
活跃值: (260)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
15
@chpeagle 
不好意思才看到问题,
IDA调试的帖子看这个:  https://bbs.pediy.com/thread-219728.htm
以后有问题交流可以加我Q99 62 9 2
最后于 2018-7-21 13:34 被hjbfa编辑 ,原因:
2018-6-23 22:44
0
雪    币: 51
活跃值: (79)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
在调试目标机开启PCHunter前, IDA载入样本PCHunter64ao.sys
,这个段可以理解在虚拟机中安装IDA,然后载入PCHunter64ao.sys,然后在虚拟机中打开PCHunte吗
2018-7-20 20:30
0
雪    币: 153
活跃值: (260)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
17
IDA这个调试机制是通过Windbg插件实现的,
当收到目标机中模块加载的消息,IDA会将预先加载的模块同步平移的目标机实际加载的地址,并更新落实预设的断点,
以上是我的理解.
2018-7-21 13:33
0
雪    币: 5196
活跃值: (3564)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
18
楼主强大,继续期待后续文章
2018-8-13 11:46
0
雪    币: 4663
活跃值: (4087)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
PCHunter64ao.sys这个文件的怎么提取的
2019-2-8 16:05
0
雪    币: 83
活跃值: (1082)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
20
学习了
2019-2-9 10:20
0
雪    币: 965
活跃值: (310)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
21
PCHunter.exe的资源里有三个PE文件,你分析的是第三个,其它两个是什么?
2019-7-3 16:18
0
游客
登录 | 注册 方可回帖
返回
//