討論區快速選單
知識庫快速選單
軟體開發過程中有哪些資安漏洞? 掌握Salesforce雲端管理秘訣 政府補助!學嵌入式+物聯網
[ 回上頁 ] [ 討論區發言規則 ]
Re: Filter Driver
更改我的閱讀文章字型大小
作者 : weber(weber) 程式設計甘苦談優秀好手貼文超過200則人氣指數超過30000點
[ 貼文 302 | 人氣 33525 | 評價 2220 | 評價/貼文 7.35 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/3 下午 09:12:18
>我的問題是想請問,,, 我們如何能控制我們的FILTER DRIVER
>要掛在某支Driver的上面或下面呢?
>是由Driver的source code有參數去控制還是要由Inf去控制呢?
透過 CM Config API, 你可以任意掛到 device driver 上頭 or 下面.
如果該 driver 已經有ㄧ串 filters 掛在上頭, 你也可以任意調整
filter 之間掛的順序, 或者移除, 新增.

filter chain 的順序可以從 regstry 中查到, 不過我用手動去改,
regedit 卻不允許這樣做. 好像一定要靠 CM config API 才能改.

而 OS load driver 時, 會根據這個 filter chain, 把 filter ㄧ個一個掛起來,
也安排好 IRP stack 流動的順序.

除了可以掛 Upper/Lower filter 到任何 device driver 上,
CM Config 的 API還可以動態 loading and unloading device driver.

這又要怪 MS 了, MS 真的很賊,
有這麼好用的招數也不明講.

我是玩 DTM (Driver Test Manager) 時,
發現它有隻程式, PnPTest, 可以 dynamic loading
in-box UVC camera driver, 然後插入ㄧ個 Upper filter,
發 Start/Stop/.. 等等 PNP message 給 camera driver,
並 monitordriver 的回傳狀況.

Test 完後, 就把upper filter/UVC camera driver unload 掉.
同樣的, PnPTest 這支程式也沒有公開 source code.
只好又祭出 IDA Pro 來反組譯. 依樣畫葫蘆,
寫出一個 generic upper filter 到處亂掛在
pnp device driver 上

這個掛 Upper filter 的這個技術, 可以用在很多地方.
尤其 user mode App 可以透過管道, 對 upper filter 下命令.
控制 upper filter 去攔截, 修改, 或偽造 command 來騙
底層的 driver.

像我就用這個技術, 去攔截 MS 的
inbox UVC camera driver 的 URB, 並偷改其參數.
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/4 下午 04:57:18
熊仔沒寫過動態去load filter

有看過一個
大致上就是拿到某個kernel層的device object point,然後查他的PDO,
然後把你的filter一樣attach上去
作者 : kevin20060520(kevin) 貼文超過500則人氣指數超過100000點
[ 貼文 718 | 人氣 132860 | 評價 60 | 評價/貼文 0.08 | 送出評價 60 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/6 下午 01:48:32
請問什么是FILTER DRIVER
和non DRIVER有何分別
作者 : kevin20060520(kevin) 貼文超過500則人氣指數超過100000點
[ 貼文 718 | 人氣 132860 | 評價 60 | 評價/貼文 0.08 | 送出評價 60 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/6 下午 01:51:02
請問什么是FILTER DRIVER
和 Function Driver , AVStream Driver有什么分別??
作者 : johnny6740(牧童哥) VC++優秀好手驅動程式優秀好手Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 791 | 人氣 24021 | 評價 3770 | 評價/貼文 4.77 | 送出評價 31 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/7 下午 06:16:19
Filter 就是偷偷掛在你的 Function Driver 的上面或下面的 Stack
可以用來偵測甚至修改流經 Driver Stack 的資料
作者 : rayyang2000(CodeBoy)
[ 貼文 33 | 人氣 366 | 評價 180 | 評價/貼文 5.45 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weber註記此篇回應為很有道理 2007/5/11 下午 09:36:59
1. You can modify registry value/key even if it's denied in RegEdit. Just change the security descriptor of keys and then you can do anything.

2. About dynamically loading/unloading a device stack, it's published by MS long time ago in src\setup\devcon. The main idea of this tech is: insert your filter to the stack (it's just a registry writing to UpperFilter/LowerFilter), then disable the device (PDO) which means unloading the whole device stack, after that enable the device again which means loading the whole device stack back to functioning. Search Disable/Enable in this sample for ideas.

The issue of this tech is, if any DO in this stack refuses to stop, this dynamical loading/unloading will fail. So this is why almost all filter driver products require reboots after the installation, which ensures 100% successful installation. But, this is not an issue for DTM since its task is testing the device's PnP compabilities - dynamical loading/unloading.

BTW: There is another rookit way to filter (or hook) *all* DOs by just replacing IRP dispatchers.
作者 : weber(weber) 程式設計甘苦談優秀好手貼文超過200則人氣指數超過30000點
[ 貼文 302 | 人氣 33525 | 評價 2220 | 評價/貼文 7.35 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/16 上午 02:08:09
Since I develope driver for commercial purpose,
Using rookit and changing security descriptor
are bad ideas for WHQL certification. Rookit
is the last resort if have no better way to slove
problem.

My purpose is to dynamically loading/unloading
device driver, not the device stack. This tech
is a great help for me to develope NB power saving.
And I disassembly PnPTest and apply on one project.

Thanks for your information.
作者 : rayyang2000(CodeBoy)
[ 貼文 33 | 人氣 366 | 評價 180 | 評價/貼文 5.45 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/16 下午 08:37:15
Not sure about your project and application. But, to unload/re-load a pnp driver (sometimes even for legacy drivers), you *must* disable/enable the *whole* device stack because IRP_MN_QUERY_REMOVE/IRP_MN_REMOVE/IRP_MN_SURPRISE_REMOVE/IRP_MN_START_DEVICE must be *successfully completed* by *all* driver in this stack. If you just unload your driver, a BSOD will jump out since the driver above yours will send IRPs to your DO which has been deleted.
作者 : rayyang2000(CodeBoy)
[ 貼文 33 | 人氣 366 | 評價 180 | 評價/貼文 5.45 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/16 下午 08:45:09
And about that rookkit topic, do you think Norton Internet Security or Kaspersky AntiVirus is good enough for your daily security? Are they good enough to win any awards?

But the truth is, both Norton Internet Security and Kaspersky AntiVirus are using the same tech as rootkits do. Just people do not know, or they are guaranteed by the advertisements.

Sometime ago, I thought this as what you think - no rootkit can pass WHQL. But after browsing WHQL's certified products list, I changed my mind - too many similar products have gained WHQL certification. So - WHQL is only a business, nothing can prevent MS from earning $
作者 : weber(weber) 程式設計甘苦談優秀好手貼文超過200則人氣指數超過30000點
[ 貼文 302 | 人氣 33525 | 評價 2220 | 評價/貼文 7.35 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/5/22 下午 01:37:16
to unload/re-load a pnp driver
(sometimes even for legacy drivers),
you *must* disable/enable the *whole* device stack.

你去反組譯 PnPTest, 就知道,
它只是用 CM API 加 upperfilter
就能做到動態 load/unload driver.

如果 MS 已經提供正式的 API,
能解問題, 對我而言, 就不需要去亂動 kernel.

著名的 MS Device Driver 作家 Walter Oney,
也曾在書中寫到, 除非必要,
他不鼓勵讀者用 driver 的手段去解決問題.

問題有很多種解法, 而無所謂的最厲害解法,
端看自己的需求為何, 找出個最合適的方法,
就是最好的方法.

另使用 rookkit 技術的 driver,
有些會去阻擋其他 driver 去使用 rookkit.
防毒軟體程式就經常做這些動作.

萬一自己的 driver 被防毒軟體程式 block 掉,
那還要想如何去解. 但市售防毒軟體程式又多,
engine 更新速度又快, 我實在沒那個功夫去應付.

所以若 offical SDK/DDK API 能解, 就不用 rookkit.
把精力放在自己產品上, 而不是ㄧ天到晚, 想如何避開
防毒軟體程式的攔截.
 板主 : 徵求中
 > 驅動程式 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 驅動程式 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
驅動程式
1 新兵衛 1240 
2 eBoy 980 
3 牧童哥 780 
4 北極熊 580 
5 天行者 580 
6 燒酒仙 440 
7 weber 380 
8 KEN 350 
9 jonay 180 
10 掌握文武半邊天 180 
驅動程式
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625