• <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 葉子 閱讀(5462) 評論(0)  編輯 收藏 引用 所屬分類: 技術研究

            久久久这里有精品| 99久久人妻无码精品系列蜜桃| 久久婷婷国产综合精品| 久久99毛片免费观看不卡| 久久国产精品成人免费| 性做久久久久久久久老女人| 久久99精品久久久久久动态图| 久久99精品久久久久久久久久| 久久性精品| 国产精品美女久久久久| 久久无码人妻一区二区三区| 国产精品女同一区二区久久| 久久久精品久久久久久| 91精品国产91热久久久久福利| 精品久久久久久久久中文字幕| AV色综合久久天堂AV色综合在| 免费一级欧美大片久久网| 久久精品国产亚洲AV大全| 久久一区二区三区免费| 99精品国产在热久久无毒不卡| 久久国产香蕉一区精品| 97精品久久天干天天天按摩| 伊人久久无码精品中文字幕| 国产成人久久久精品二区三区| 色偷偷偷久久伊人大杳蕉| 精品久久久久成人码免费动漫| 久久综合狠狠色综合伊人| 久久大香香蕉国产| 久久久久人妻一区精品色| 99精品国产免费久久久久久下载| 精品无码久久久久久国产| 国产成人综合久久综合| 一本一道久久综合狠狠老 | 天天久久狠狠色综合| 日韩乱码人妻无码中文字幕久久| 亚洲国产综合久久天堂| 免费一级做a爰片久久毛片潮| 久久久久99精品成人片三人毛片| 久久精品国产亚洲精品| 久久精品成人欧美大片| 天天综合久久一二三区|