• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            elva

            syser 實戰一(分析 nprotect 的 dump_wmimmc.sys)

            syser 實戰一(分析 nprotect 的 dump_wmimmc.sys)

             我們使用跑跑卡丁車這款游戲來調試 dump_wmimmc.sys 驅動.
            通常調試一個程序都要從程序入口開始。當然調試驅動也不例外。
            我們可以通過 bpload dump_wmimmc.sys 斷點來攔截 dump_wmimmc.sys 的驅動程序入口函數。
            (也就是 NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath))

            當然了其他的驅動程序都可以通過這種方法來設置斷點在驅動入口。但是調試 NP 保護的游戲還是需要一點技巧。
            因為 NP 把 syser debugger 列入了黑名單。就是他的應用程序部分在運行時會檢測 syser.sys 如果在運行時。
            應用程序會直接退出. 如下圖

            我們首先啟動 跑跑卡丁車游戲。在出現如下窗口時

             然后馬上啟動 syser debugger. 然后 ctrl+f12 呼出
            syser debugger 的主窗口,(這里速度要快,要不然會錯過 dump_wmimmc.sys 的加載)然后執行 bpload dump_wmimmc.sys 命令,然后 F5 后 x 命令退回到 windows.
            隨后 當 dump_wmimmc.sys 驅動被加載時調試器被激活,調試器界面如下:
             

            這時我們可以使用 driver dump_wmimmc 命令來查看有關這個驅動的信息。
            如果我們想要了解這個驅動的詳細初始化過程我們可以單步跟蹤每條指令,
            如果我們只關心應用程序是如何于 dump_wmimmc.sys 交互過程,我們只需要把斷點設置在關鍵函數上就可以。
            那我們如何來定位這個關鍵函數,大家可能都比較熟悉驅動和應用的交互主要通過以下幾個 API 來完成。
            CreateFile,用來打開這個驅動的文件句柄,DeviceIoControl 用來和驅動交互。 CloseHandle 關閉驅動的句柄。
            驅動的 DriverEntry 函數主要是負責 初始化驅動對象,建立一個設備對象,建立一個符號連接,可以讓應用程序
            使用 CraateFile 這個 api 來打開這個驅動文件的句柄。初始化驅動對象 主要是包括了完成驅動對象中一些函數指針
            的初始化。這里就包括了 最重要的 DeviceIoControl 被調用時,驅動程序要執行的函數的指針的初始化。
            我們可以通過 p ret 命令,來執行完 DriverEntry 函數, 執行完這個函數后我們在用 driver dump_wmimmc 命令
            來看一下 DRIVER_OBJECT 的變化, 這個時候我們從下圖可以看到
             

            我們把斷點設置 IPR_MJ_DEVICE_CONTROL 出來函數所在的地址, 然后 F5 或者 x 命令退回到 windows.
            當 syser debugger 再次彈出時,斷點在 IRP_MJ_DEVICE_CONTROL 對應的函數上了。
            我們發現 MJ_CREATE,MJ_CLOSE,MJ_SHUTDOWN,MJ_DEVICE_CONTROL 這幾個函數是一個,其實我們這里只關心應用與驅動的
            交互過程,不關系驅動的打開于關閉。這是我們找到 DEVICE_CONTROL 的處理部分,然后在這個處理部分的開始設置一個斷點
            即可。

            我們把斷點設置在 IRP_MJ_DEVICE_CONTROL 的處理代碼上

            dump_wmimmc+3065 處,F5 退回 windows.

            Syser 再次被激活時我們可以分析應用與驅動的 DeviceIoControl 調用交互中。
            此時的 edx 為 IoControlCode.



            此時我們可能關心應用程序在那里調用了 DeviceIoControl API,這時我們只需要通過
            幾次 F6 或 p ret 命令來跟蹤到 應用層即可。通過5,6次的 f6 后,我們看到了下圖,
            eip 已經回到了 應用層。



            這里我們看到 作者并沒有直接通過 DeviceIoControl API 來調用。而是自己通過 INT 2e 指令
            自己實現了 DeviceIoControl 調用。這樣就解釋了為什么在 ollydbg 中用 DeviceIoControl 函數
            斷點停不下來的問題。


            這樣我們就定位到了應用層的 DeviceIoControl 函數的位置.這樣我們就可以把斷點設置在這里,哈哈
            朋友們很簡單吧.
            F5 讓我們繼續吧.

            syser 再次在驅動的 IRP_MJ_DEVICE_CONTROL 的斷點處被激活。
            這次的 IoControlCode = 84020038,我們通過 f8 或 t 命令單步跟蹤這個 ioctrl.
            我們看到 DeviceIoControl 的 InputBuffer 的長度是 1c 也就是 7 個dword.
            我們看一下 InputBuffer 的數據.


            再次斷到的 IoControlCode = 84020014 ,這個 IoControlCode 的輸入數據的長度是6c
            我們在數據窗口來查看輸入數據,我們可以功過 wd + 命令來增加一個數據窗口, syser debugger
            最多支持 10 個數據窗口,同樣也可以通過 wc + 命令來增加一個反匯編窗口,syser debugger 最多
            支持10個反匯編窗口.



            我們使用 ctrl+2 切換到大控制臺窗口,



            我們再次斷到 IoControlCode = 84020020, 我們這時已經是輕車熟路了,看到 InputBufferLength=44
            我們來看一些輸入數據 ,這個 iocontrolcode 很關鍵



            這部分代碼用來防止關鍵函數被 hook,以及恢復原始的 windows int 1的中斷處理函數. 這樣就讓 ring 0 的調試器失效

            所以這部分代碼我們要做處理啊. 不然我們就不能繼續調試了

            [COLOR="Red"]接下來的代碼將要對被加密的代碼段進行解密。
            這里我們就必須耐心的進行分析,經過分析,我們在
            dump_wmimmc+1f1d處設置一個斷點。 F5 讓我們繼續把。
            對 dump_wmimmc+1892 到 dump_wmimmc+1e3d 這長度是 5ac 的代碼進行
            解密。[/COLOR](注意: 現在很多程序在解密過成中都會讀取一些可能被下斷點的關鍵代碼處數據來做
            解密密鑰,如果你正好在這個地方設置了cc 的代碼斷點,可能就中招了,當然了這個程序我到沒有主要
            到作者是否使用了這些技巧,來擾亂跟蹤.所以這里我建議大家使用 bpmb[w|d]這種硬件斷點的方式來
            設置斷點)

            當斷點在次被激活在 dump_wmimmc+1f1d 的時候,我們發現機密已經完成,
            這個時候我們就可以把這段被解密的數據用 dump 命令保存到一個文件.
            dump 命令會保存這個命令執行之前內存中數據的快照,DUMP命令是延遲執行的,也就是驅動開發中的 dpc 概念,
            這個大家可以參考一下DDK的文當,



















            待續....



            Syser Debugger 1.8 版發布(2007.5.1)

            http://www.sysersoft.com

            1. 修改了 bpx 命令,bpx createfilea 這類斷點在所有進程中有效.
            2. 完善了原代碼調試中的 Watch 命令。
            3. 增加了 watch,file,table 命令,用來支持原代碼調試
            4. 增加了 MakePE 命令,保存內存中的 PE 到文件中。
            5. 增加了 dump 命令,存儲內存中的信息到文件中
            6. 增加了內存搜索操作對話框
            7. 修改了 Syser Loader 中的bug
            8. 提供了對 ALPS 觸摸板的支持
            9. 提供了對 vc2005 的 pdb 文件格式的支持
            10. 優化了 sds 符號文件結構,提高性能
            11. 修改了 syserboot.sys 文件被 McAfee 誤報病毒的問題

            posted on 2007-05-14 01:08 葉子 閱讀(5471) 評論(0)  編輯 收藏 引用 所屬分類: 技術研究

            久久中文字幕无码专区| 久久亚洲春色中文字幕久久久| 激情久久久久久久久久| 亚洲Av无码国产情品久久| 性做久久久久久久久浪潮| 2019久久久高清456| 日韩精品久久无码人妻中文字幕| 99久久超碰中文字幕伊人| 91久久精品国产成人久久| 亚洲а∨天堂久久精品9966| 久久99热这里只有精品国产| 久久99国产亚洲高清观看首页| 久久露脸国产精品| 久久婷婷五月综合97色| 久久久久人妻一区精品果冻| 无遮挡粉嫩小泬久久久久久久| 精品综合久久久久久97超人| 思思久久99热只有频精品66| 精品久久久久久久久中文字幕| 久久久久久国产精品无码下载 | 亚洲欧美成人久久综合中文网| 97久久综合精品久久久综合| 亚洲国产香蕉人人爽成AV片久久| 久久精品国产99国产精品澳门| 色妞色综合久久夜夜| 精品久久久久久国产三级| 久久精品人人做人人爽电影蜜月| 精品国产91久久久久久久a| 久久久久久人妻无码| 国内精品综合久久久40p| 久久久久免费视频| 青青久久精品国产免费看| 丰满少妇人妻久久久久久4| 日韩精品久久久久久| 久久午夜电影网| 久久青青草原国产精品免费 | 久久久亚洲裙底偷窥综合| 欧美国产精品久久高清| 久久夜色精品国产网站| 欧美激情精品久久久久久| 777久久精品一区二区三区无码|