模擬美萍加密狗--Rockey2虛擬狗(三)

    幾經掙扎,我最終還是選擇了虛擬設備的方法來模擬Rockey2加密狗。HID.DLL劫持+API劫持的辦法技術上雖然簡單些,但太繁瑣了,不僅要轉發大量的函數,還要Hook好幾個API,向我這麼懶的人可幹不了這體力活,幾經取捨還是選擇了虛擬設備的方法,原因有一下幾點:

1、劫持HID.DLL同樣要分析描述符,並沒有避開難點。相比Dll劫持+API劫持兩項技術,寫一個虛擬設備只需要攻破一個點,總體結構上簡單了。昨天懼怕虛擬設備是因爲從沒做過USB,都說技術是一層窗戶紙,靜下心來慢慢分析,也沒那麼恐怖。

2、趁機學習一下Windows下的驅動編寫(其實用的都是人家的框架,也沒學着什麼)

3、趁機學習一下USB通訊(這方面倒是真學到了不少)


    寫虛擬狗首先要確認美萍認不認,從DSF的文檔說明上看,虛擬設備的模擬是比較底層的,應用程序不會發現虛擬設備和真實物理設備的區別,就算有辦法,估計美萍也不會費這麼大事去識別的(當然,如果我真的成功了,估計美萍就要研究了,哈哈推動技術發展也是我的目的之一)。這裏用到一個Tee8088大大的工具,其實就是一個劫持的HID.Dll,用來監聽HID加密狗與狗通訊的。使用方法很簡單,把這個HID.DLL考到美萍的目錄下,正常運行美萍就行,監聽到的數據會寫在C盤根目錄下的一個TXT裏,實際使用了是另一個網友的改進版,輸出的信息更全一點。一開始監聽到的只有HidD_GetAttributes函數的調用,搜索監聽到的VID、PID值發現是我的攝像頭(哈哈,意外發現攝像頭是HID設備。),運行插入虛擬狗的腳本(TestGenericHid.wsf)後出現了虛擬狗的VID、PID,我猜這是在枚舉HID設備找狗 (後來OD看Rockey.dl也證實了我的想法),把HIDDevice.cpp 裏的VID和PID改成R2的後(VID_096E PID_0201)監聽數據多出來了HidD_GetPreparsedData 等函數的調用,依此確認虛擬設備原理上可行。這裏有一點需要注意DSF運行時的文件夾裏有一個默認的SoftHIDReceiver.dll,直接運行TestGenericHid.wsf腳本將調用這個dll,所以剛一開始時,發現改了HIDDevice.cpp裏的VID PID居然不好用,還是例子裏的值,用自己編譯的SoftHIDReceiver.dll替換掉DSF文件夾裏才成功。

    OK,既然可行那就一步步來吧,根據Rockey2的一般流程應該是先調用RY2_Find找狗,於是OD載入Rockey2.dll在RY2_Find開頭打個斷點,調試--調用Dll導出,選擇RY2_Find,沒有參數,調用時隱藏打鉤,CALL!一步步跟看到了96E和201,是比較VID,PID,後面有個CALL就是就是進一步驗證是否是R2了,跟進去發現只有HidP_GetCaps填充的數據結構HIDP_CAPS的FeatureReportByteLength=0x49是才能通過,於是修改報告描述符加一個Feature項目報表,Report Size =8位 Report Count=0x48(這樣加上Report id的一字節正好等於0x49),再次編譯虛擬HID設備,調用RY2_Find已經可以返回1了!下一步向RY2_Open進軍!





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章