找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 13948|回复: 12

请教下各位,IRP发送数据结构到驱动出了点问题

 火.. [复制链接]

4

主题

43

回帖

0

精华

铜牌会员

积分
85
发表于 2011-11-25 16:55:10 | 显示全部楼层 |阅读模式
R3:

  1.         struct data{
  2.                 char *ch;
  3.                 char *ch2;
  4.                 char *ch3;
  5.         };
  6.         data da={"00","11","22"};
  7. DeviceIoControl(hDriver,TEST_,&da,MAX_PATH -1,0,0,&u,0);
复制代码
R0:
  1.         case TEST_:
  2.                 {
  3.                        
  4.                         KdPrint(("%x",Irp->AssociatedIrp.SystemBuffer));
  5.                         break;
  6.                 }
复制代码
打印出个地址,按理应该打印出数据结构的头地址
我用windbg   dd 地址 得出的第一个地址应该是 ch吧? 在dd 应该就能看到"00"了吧? 怎么没看到呢 我错了吗

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-11-25 17:32:44 | 显示全部楼层
关于“驱动如何与应用层通信”,在我的驱动模板里已经有很详细的范例了:http://www.vbasm.com/thread-3376-1-1.html
剩下只不过是语言转换的问题罢了。

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-11-25 17:48:02 | 显示全部楼层
对 就是语言间的事情,

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-11-25 17:48:54 | 显示全部楼层
应该把它定为结构指针 然后+4+4+4+4 是吧

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-11-25 17:54:42 | 显示全部楼层
很久都没有玩驱动了,有点忘记了,但是基本概念我还是清楚的。。。
因为指针就是一个数字,等于尺子上的数字,只有结合长度,才能表示一段距离(多少Byte的内存)。
另外我个人感觉是你的结构体定义得有问题,命名长度是12字节,怎么到了下面赋值时只有三字节了。。。
请放弃方便的写法,回归最普通的写法。。。

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-11-25 18:50:25 | 显示全部楼层
"命名长度是12字节,怎么到了下面复制时只有三字节了。。。"下面复制?不解这意思

评分

参与人数 1水晶币 +2 收起 理由
Tesla.Angela + 2 不好意思,打错字了,是“赋值”。

查看全部评分

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-11-25 19:05:30 | 显示全部楼层
565710420 发表于 2011-11-25 18:50
"命名长度是12字节,怎么到了下面复制时只有三字节了。。。"下面复制?不解这意思

不好意思,打错字了,原帖已经修正。
【复制】->【赋值】

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-11-25 19:24:03 | 显示全部楼层
本帖最后由 565710420 于 2011-11-25 19:29 编辑
Tesla.Angela 发表于 2011-11-25 19:05
不好意思,打错字了,原帖已经修正。
【复制】->【赋值】


呵呵,有个小想法,不知你老能否判断下是否可行

NtOpenProcess函数地址被HOOK 也就是SSDT HOOK

方法1:

被HOOK后 再SSDT HOOK转到我的函数 =崩溃

方法2:

Inline hook其HOOK函数  崩溃之

我想 我目的是调试其保护程序 干脆写个OD插件 HOOK本进程ntdll的ZwOpenProcess将参数以IRP发送到我的驱动,然后在我驱动里获取系统函数原始地址调用

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-11-25 23:30:04 | 显示全部楼层
565710420 发表于 2011-11-25 19:24
呵呵,有个小想法,不知你老能否判断下是否可行

NtOpenProcess函数地址被HOOK 也就是SSDT HOOK

对不起,我想我不太明白您的意思。。。

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-11-27 14:18:11 | 显示全部楼层
565710420 发表于 2011-11-25 19:24
呵呵,有个小想法,不知你老能否判断下是否可行

NtOpenProcess函数地址被HOOK 也就是SSDT HOOK

崩溃原因很多。看你要过保护,可能原因:
1.方法2。可能驱动保护了其hook,你操作即蓝屏。
2.方法1。驱动不可能不让别人SSDT hook。崩溃是因为你没写好。如果加载驱动立马蓝,可能此种。
3.方法1。还有其他反调试手段,非此地一处,崩溃不产生在此处。如果你OD attach上去才蓝,极有可能此种。

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-11-27 16:17:15 | 显示全部楼层
ywledoc 发表于 2011-11-27 14:18
崩溃原因很多。看你要过保护,可能原因:
1.方法2。可能驱动保护了其hook,你操作即蓝屏。
2.方法1 ...

我指的崩溃是 出错、方法不行、此法行不通

呵呵 我已经解决的差不多了、上次来紫水论坛时 我在过TP、现在又在搞个变态驱动保护 呵呵
谢谢你们的热心

4

主题

43

回帖

0

精华

铜牌会员

积分
85
 楼主| 发表于 2011-11-27 16:18:09 | 显示全部楼层
反调试方面我还没分析 他变态我猥琐的绕过SSDT HOOK{:soso_e182:}

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-11-27 18:34:13 | 显示全部楼层
565710420 发表于 2011-11-27 16:18
反调试方面我还没分析 他变态我猥琐的绕过SSDT HOOK


有驱动还需要看hook的脸色吗?
其实很多hook都无需恢复,直接绕过即可。无论是ssdt hook、inline hook还是eat hook。。。
关于如何绕过hook,如何强制读写进程内存、如何模拟按键模拟鼠标,论坛上应该有不少,找找吧。。。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表