首页
社区
课程
招聘
[求助]如何让driver停在入口?
发表于: 2006-12-23 22:54 9416

[求助]如何让driver停在入口?

2006-12-23 22:54
9416

分析一个驱动木马,它只有一个DriverEntry,没有注册其他函数入口,请问大家有什么办法让driver被加载的时候能停在入口?


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

收藏
免费 7
支持
分享
最新回复 (29)
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
2
找个你能断在DriverEntry的驱动
找到call 进来的地方, 下断

猜的,没试过
2006-12-23 22:58
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
easy,driver entry就是驱动入口点

打开SI类内核调试工具,把入口点改成int3
2006-12-23 23:03
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
4
oo小姐说的好像可行,试试看看;
morning,用SI如何将未被加载的driver入口点改为INT 3?
2006-12-23 23:16
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
用PE工具看入口点地址,用UE改

驱动一加载,SI就跳出来了
2006-12-23 23:25
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
6
最初由 morning 发布
用PE工具看入口点地址,用UE改

驱动一加载,SI就跳出来了


我一开始就是用这种方法,结果用KmdManager加载的时候失败了,是不是要改CRC?
2006-12-23 23:37
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
int3将引起一个异常,如果KmdManager对初始化异常进行了处理,那么驱动异常就不会由系统来处理了

你可以用系统的驱动加载例程来加载驱动,以便系统抛出异常,

记得先开SI,否则就只能看bugcheck画面了
2006-12-23 23:46
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
8
最初由 morning 发布
int3将引起一个异常,如果KmdManager对初始化异常进行了处理,那么驱动异常就不会由系统来处理了

你可以用系统的驱动加载例程来加载驱动,以便系统抛出异常,

记得先开SI,否则就只能看bugcheck画面了


嗯,有道理,应该是KmdManager处理的异常,使我的Windbg没有机会接管,多谢指教!
2006-12-24 00:02
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
9
最初由 morning 发布
int3将引起一个异常,如果KmdManager对初始化异常进行了处理,那么驱动异常就不会由系统来处理了

你可以用系统的驱动加载例程来加载驱动,以便系统抛出异常,

记得先开SI,否则就只能看bugcheck画面了


用了几个工具,自己也写了一个来加载,仍然没有被调试器拦到,你是怎样做的?
2006-12-24 01:34
0
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
SI默认就是i3here drv的(当int3中断的地址大于2g时断下),你试试不要用windbg,装个SI并设置成boot或system启动,断下来后用eb恢复原来的代码,然后g =eip-1就可以了
2006-12-24 02:33
0
雪    币: 116
活跃值: (220)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
11
直接改入口为int3会使驱动非法的。。。
操作系统加载驱动时会检测pe文件的checksum
所以你应该在修改入口点后更新一下checksum

用softice调试必须要下断点bpint3
用visual softice的话就简单一点,不需要改入口,直接用bpload下断点,就会在驱动程序载入后断在入口了
2006-12-24 09:34
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
12
xIkUg说的很详细了.
cc断下之后,记的要恢复原来驱动入口的代码.
这样就完美了...

不然蓝屏很难看!

偶通常都是在DriverEntry 设置一个DbgPrint call
然后 si断下.
就断在驱动中.... 然后在bc清理.
2006-12-24 13:17
0
雪    币: 214
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
一直用shooo的方法

楼上的诸位讨论的是不是太老土了

把exe的东西往sys套
2006-12-24 14:08
0
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
14
最初由 girl 发布
一直用shooo的方法

楼上的诸位讨论的是不是太老土了

把exe的东西往sys套


这里都是做过驱动开发的,要看清再回帖啊
2006-12-24 14:18
0
雪    币: 172
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我一般先反汇编一下驱动,找找驱动前面调用的函数,
比如说 PsGetVerion, IoCreateDevice等,
然后就断这些函数了。

牛人可以跟踪一下系统加载驱动的过程,在进入口点的时候设置断点
就更很方便了。
2006-12-24 15:14
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
16
最初由 girl 发布
一直用shooo的方法

楼上的诸位讨论的是不是太老土了

把exe的东西往sys套


exe和sys本质上是一样的,有牛人曾把exe做成双模式的
我一直都是作USB设备驱动的,也做过文件系统驱动

我调试的时候,因为是配合设备调试的,所以一连上设备,驱动就被加载,马上SI的黑脸就出来了

如果是编写的,最标准的方法是 DbgBreakPoint();

xIkUg的checksum的说法来自哪里呢?我好像没遇到过
2006-12-24 17:14
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
17
多谢各位的帮忙,改入口为CC,再用PEID的插件搞定改好的SYS的checksum就可以加载了,这时不论你用什么R0调试器都可以拦到,改回代码之后就可以正常调试了,很方便。
2006-12-25 00:37
0
雪    币: 217
活跃值: (15)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
设断在"窥甲",inline hook的那个位置也可以,呵呵
另外如果用蜗牛,可以考虑模块+入口
不过断上一般没有啥用,能静态分析的就静态了
不能的动态估计也不好搞掉反调试:)
2006-12-25 09:58
0
雪    币: 215
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
19
说下我的方法:sys也是一种pe文件.我的做法就是先查看sys的入口rva然后在windbg刚开始的时候使用命令bu sysname+rva的方法下断,你可以试试.不过前提是你要有sys文件,如果没有sys文件.你可以在起sys加载后lm找到内存影象然后在memory窗口找到然后就是一个pe文件了.你找到它的rva再进行重启下断.主要是这段时间我也在分析一个别人的驱动呵呵...
我说的环境是windbg+vmware...兄台可以尝试下.
2007-1-6 11:41
0
雪    币: 215
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
20
比如:
加入有一个驱动名字叫做vsdatant.sys,用pe工具查看到起入口rva是2c8ec那么我在windbg调试连调虚拟机时仅用bu vsdatant+2c8ec命令就可以在此驱动加载的时候断在入口处了...
2007-1-7 20:59
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
21
嗯,多谢buguty兄弟的建议,不错的方法,用WinDbg的话也可以用bu drivername!DriverEntry,来断在目标驱动入口,不过buguty兄弟的方法更灵活,感谢。
2007-1-8 10:42
0
雪    币: 217
活跃值: (15)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
"用蜗牛,可以考虑模块+入口"晕,怎么不谢谢我啊,呵呵
2007-1-8 12:29
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
23
最初由 linestyle 发布
"用蜗牛,可以考虑模块+入口"晕,怎么不谢谢我啊,呵呵


呵呵,感谢linestyle... 等...
这下全都有了啊!
2007-1-8 13:06
0
雪    币: 217
活跃值: (15)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
24
最初由 prince 发布
呵呵,感谢linestyle... 等...
这下全都有了啊!


不必客气,呵呵

顺便说一下vsdatant.sys是za的防火墙驱动,呵呵
2007-1-8 18:09
0
雪    币: 215
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
25
但是如果驱动不是你写的话你就没有调试符号就无法使用vsdatant!DriverEntry.对于没有调试符号的只有用vsdatant+entryrva之类的方法.
2007-1-8 22:36
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码