首页
社区
课程
招聘
[原创]自动获取驱动程序IO控制码初级版
发表于: 2012-7-27 17:22 12334

[原创]自动获取驱动程序IO控制码初级版

2012-7-27 17:22
12334

"""

Galaxy Security Lab Driver Analysis for IDA Pro

Author :dragonltx
Time   :2012-7-27

"""
看了Justin的《Python灰帽子》的第十章,里面提到可以用Immunity Debugger来加载驱动,并通过driverlib来获取驱动程序的io控制码,遂用Immunity Debugger加载一个驱动试试,发现加载失败,于是给Justin发了封邮件,没鸟我。

后来想了想,既然是用Immunity Debugger静态分析驱动来获取驱动程序的io控制码,还不如用IDA来分析,于是有了这篇文章。本文给出的获取驱动程序的io控制码的脚本采用IDA Python,可以给IDA Python新手当作参考,高手略过。

一、获取驱动设备名

def getDeviceName():
    """
    Get Device Name from a driver. 
    @rtype:   void
    @returns: void
    """
    ea = 0
    while True:
     ea =  FindText(ea, SEARCH_NEXT | SEARCH_REGEX, 0, 0, "\\\\Device\\\\")
     string = GetString(ea, -1, ASCSTR_UNICODE)
     if string is None:
        continue
     else:
        #Message("Find in %x\n" % ea)
        Message("device is %s\n" % string)
	break
def getDispatchAddress():
    """
    Get Device Dispatch Address from a driver. 
    @rtype:   int
    @returns: Dispatch Address
    """
    ea = 0
    ea =  FindText(ea,  SEARCH_DOWN |SEARCH_NEXT | SEARCH_REGEX, 0, 0, "mov *dword *ptr *\\[[a-zA-Z]* *\\+ *70h\\],[a-zA-Z0-9_ ]*")
    #ea =  FindText(ea, SEARCH_NEXT | SEARCH_REGEX, 0, 0, "test *[a-zA-Z]*, +[a-zA-Z]*")
    #Message("Find in %x\n" % ea)
    if ea == BADADDR:
        Message("Cann't find the Dispatch address")
        address = BADADDR
    else:
        address = GetOperandValue(ea,1)
        Message("Dispatch address is %x\n" % address)
	return address

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

上传的附件:
收藏
免费 6
支持
分享
最新回复 (10)
雪    币: 106
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
switch的优化形式有很多,cmp比较只是最简单的一种,该脚本只能识别最简单的IOCTL.
之前有写过,效果不太好,可以转换一下思路.
另外感谢楼主分享.
2012-7-27 18:59
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
3
mark IO控制码 感谢楼主共享
2012-7-27 20:14
0
雪    币: 692
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
正在研究deviceIOControl机制 感谢lz分享
2012-7-27 20:37
0
雪    币: 363
活跃值: (338)
能力值: ( LV15,RANK:310 )
在线值:
发帖
回帖
粉丝
5
是这样的,Immunity Debugger里面的driverlib也只考虑了最简单的情况,这种单纯靠静态分析比较困难,只是分享下IDA Python的实例!哈哈!有兴趣的兄弟可以考虑继续优化!
2012-7-27 20:47
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
Python
2012-7-27 22:13
0
雪    币: 1024
活跃值: (240)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
7
学习 学习 python是个好东西
2012-7-27 23:02
0
雪    币: 381
活跃值: (140)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
8
学习,”似乎“很有用的方法
2012-8-4 18:00
0
雪    币: 106
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
可以考虑利用IDA的F5来做,会方便很多
2012-8-30 15:25
0
雪    币: 219
活跃值: (783)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
10
mark马克£
2012-8-30 16:15
0
雪    币: 215
活跃值: (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
python好强大,谢谢楼主分享
2020-11-30 11:40
0
游客
登录 | 注册 方可回帖
返回
//