首页
社区
课程
招聘
[旧帖] [求助]DeviceIoControl与驱动程序.Sys之间是如何衔接的? 0.00雪花
发表于: 2007-3-8 23:21 4354

[旧帖] [求助]DeviceIoControl与驱动程序.Sys之间是如何衔接的? 0.00雪花

2007-3-8 23:21
4354
最近研究一个带USB加密狗的程序,使用的是OllyDbg1.10动态跟踪到读狗
的地方,也就是DeviceIoControl,大体猜此函数与驱动程序.sys打交道。
于是用IDA5.0(一直未能成功让SoftICE以Boot方式启动)静态分析xxxxxx.sys,xxxxxxUSB.sys文件(未能搞明白为什么会有两个差不多的
.sys,前者大小22K,后者13K),发现前者74个函数,后者47个函数。

DeviceIoControl函数是如何与驱动程序衔接的?
如何才能知道DeviceIoControl之后,运行的是驱动程序中的哪个函数?

第一发贴,第一破解,表达有不尽人意的地方,请各位海涵。

DeviceIoControl调用如下
00499828  |.  6A 00         PUSH 0                                   ; /pOverlapped = NULL
0049982A  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]            ; |
0049982D  |.  52            PUSH EDX                                 ; |pBytesReturned
0049982E  |.  6A 02         PUSH 2                                   ; |OutBufferSize = 2
00499830  |.  8D55 EE       LEA EDX,DWORD PTR SS:[EBP-12]            ; |
00499833  |.  52            PUSH EDX                                 ; |OutBuffer
00499834  |.  6A 28         PUSH 28                                  ; |InBufferSize = 28 (40.)
00499836  |.  8D55 8F       LEA EDX,DWORD PTR SS:[EBP-71]            ; |
00499839  |.  52            PUSH EDX                                 ; |InBuffer
0049983A  |.  50            PUSH EAX                                 ; |IoControlCode => A410E400
0049983B  |.  A1 C0E46600   MOV EAX,DWORD PTR DS:[66E4C0]            ; |
00499840  |.  50            PUSH EAX                                 ; |hDevice => 00000150
00499841  |.  E8 7AE4F6FF   CALL <JMP.&kernel32.DeviceIoControl>     ; \DeviceIoControl
注:通过IoControlCode参数大家应该知道是哪个狗了,这仅仅是为了学习,并无恶意。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
逆下驱动吧

DeviceIoControl 对应于 IRP_MJ_DEVICE_CONTROL 历程

现在驱动加壳的情况并不多(商业驱动不知道),所以直接静态分析页可以
2007-3-9 09:58
0
雪    币: 10635
活跃值: (2329)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
如何动态跟踪呢 我也想知道 应用程序传值驱动代码定位
2007-3-9 10:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
各位大狭哪怕给点,给点提示吧
2007-3-9 22:29
0
雪    币: 10635
活跃值: (2329)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
whtyy能不能多讲点
2007-3-10 10:21
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
最初由 whtyy 发布
逆下驱动吧

DeviceIoControl 对应于 IRP_MJ_DEVICE_CONTROL 历程

现在驱动加壳的情况并不多(商业驱动不知道),所以直接静态分析页可以


我上面说过了啊。DeviceIoControl 与SYS的连接就是 IRP_MJ_DEVICE_CONTROL 例程。每个DeviceIoControl调用都会转化为内核的一个IRP。这个IRP被传给驱动的IRP_MJ_DEVICE_CONTROL 例程

说白了,NT驱动的工作其实就是涉及到一些数据结构、例程。如果你连IRP_MJ_DEVICE_CONTROL的都不懂意思的话,动态调试只会会晕头转向。
还是先学习下NT驱动的编写吧。
2007-3-10 12:37
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
RING0的代码,当然要用RING0的调试器跟踪。
不过,还是先把驱动的架构和工作机制弄清楚才知道怎么下断点
2007-3-10 12:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看来只能先STFW
2007-3-11 17:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
忘了补充一句,谢谢大家
2007-3-11 17:32
0
游客
登录 | 注册 方可回帖
返回
//