• <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 實(shí)戰(zhàn)一(分析 nprotect 的 dump_wmimmc.sys)

            syser 實(shí)戰(zhàn)一(分析 nprotect 的 dump_wmimmc.sys)

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

            當(dāng)然了其他的驅(qū)動(dòng)程序都可以通過這種方法來設(shè)置斷點(diǎn)在驅(qū)動(dòng)入口。但是調(diào)試 NP 保護(hù)的游戲還是需要一點(diǎn)技巧。
            因?yàn)?NP 把 syser debugger 列入了黑名單。就是他的應(yīng)用程序部分在運(yùn)行時(shí)會(huì)檢測(cè) syser.sys 如果在運(yùn)行時(shí)。
            應(yīng)用程序會(huì)直接退出. 如下圖

            我們首先啟動(dòng) 跑跑卡丁車游戲。在出現(xiàn)如下窗口時(shí)

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

            這時(shí)我們可以使用 driver dump_wmimmc 命令來查看有關(guān)這個(gè)驅(qū)動(dòng)的信息。
            如果我們想要了解這個(gè)驅(qū)動(dòng)的詳細(xì)初始化過程我們可以單步跟蹤每條指令,
            如果我們只關(guān)心應(yīng)用程序是如何于 dump_wmimmc.sys 交互過程,我們只需要把斷點(diǎn)設(shè)置在關(guān)鍵函數(shù)上就可以。
            那我們?nèi)绾蝸矶ㄎ贿@個(gè)關(guān)鍵函數(shù),大家可能都比較熟悉驅(qū)動(dòng)和應(yīng)用的交互主要通過以下幾個(gè) API 來完成。
            CreateFile,用來打開這個(gè)驅(qū)動(dòng)的文件句柄,DeviceIoControl 用來和驅(qū)動(dòng)交互。 CloseHandle 關(guān)閉驅(qū)動(dòng)的句柄。
            驅(qū)動(dòng)的 DriverEntry 函數(shù)主要是負(fù)責(zé) 初始化驅(qū)動(dòng)對(duì)象,建立一個(gè)設(shè)備對(duì)象,建立一個(gè)符號(hào)連接,可以讓應(yīng)用程序
            使用 CraateFile 這個(gè) api 來打開這個(gè)驅(qū)動(dòng)文件的句柄。初始化驅(qū)動(dòng)對(duì)象 主要是包括了完成驅(qū)動(dòng)對(duì)象中一些函數(shù)指針
            的初始化。這里就包括了 最重要的 DeviceIoControl 被調(diào)用時(shí),驅(qū)動(dòng)程序要執(zhí)行的函數(shù)的指針的初始化。
            我們可以通過 p ret 命令,來執(zhí)行完 DriverEntry 函數(shù), 執(zhí)行完這個(gè)函數(shù)后我們?cè)谟?driver dump_wmimmc 命令
            來看一下 DRIVER_OBJECT 的變化, 這個(gè)時(shí)候我們從下圖可以看到
             

            我們把斷點(diǎn)設(shè)置 IPR_MJ_DEVICE_CONTROL 出來函數(shù)所在的地址, 然后 F5 或者 x 命令退回到 windows.
            當(dāng) syser debugger 再次彈出時(shí),斷點(diǎn)在 IRP_MJ_DEVICE_CONTROL 對(duì)應(yīng)的函數(shù)上了。
            我們發(fā)現(xiàn) MJ_CREATE,MJ_CLOSE,MJ_SHUTDOWN,MJ_DEVICE_CONTROL 這幾個(gè)函數(shù)是一個(gè),其實(shí)我們這里只關(guān)心應(yīng)用與驅(qū)動(dòng)的
            交互過程,不關(guān)系驅(qū)動(dòng)的打開于關(guān)閉。這是我們找到 DEVICE_CONTROL 的處理部分,然后在這個(gè)處理部分的開始設(shè)置一個(gè)斷點(diǎn)
            即可。

            我們把斷點(diǎn)設(shè)置在 IRP_MJ_DEVICE_CONTROL 的處理代碼上

            dump_wmimmc+3065 處,F(xiàn)5 退回 windows.

            Syser 再次被激活時(shí)我們可以分析應(yīng)用與驅(qū)動(dòng)的 DeviceIoControl 調(diào)用交互中。
            此時(shí)的 edx 為 IoControlCode.



            此時(shí)我們可能關(guān)心應(yīng)用程序在那里調(diào)用了 DeviceIoControl API,這時(shí)我們只需要通過
            幾次 F6 或 p ret 命令來跟蹤到 應(yīng)用層即可。通過5,6次的 f6 后,我們看到了下圖,
            eip 已經(jīng)回到了 應(yīng)用層。



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


            這樣我們就定位到了應(yīng)用層的 DeviceIoControl 函數(shù)的位置.這樣我們就可以把斷點(diǎn)設(shè)置在這里,哈哈
            朋友們很簡(jiǎn)單吧.
            F5 讓我們繼續(xù)吧.

            syser 再次在驅(qū)動(dòng)的 IRP_MJ_DEVICE_CONTROL 的斷點(diǎn)處被激活。
            這次的 IoControlCode = 84020038,我們通過 f8 或 t 命令單步跟蹤這個(gè) ioctrl.
            我們看到 DeviceIoControl 的 InputBuffer 的長(zhǎng)度是 1c 也就是 7 個(gè)dword.
            我們看一下 InputBuffer 的數(shù)據(jù).


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



            我們使用 ctrl+2 切換到大控制臺(tái)窗口,



            我們?cè)俅螖嗟?IoControlCode = 84020020, 我們這時(shí)已經(jīng)是輕車熟路了,看到 InputBufferLength=44
            我們來看一些輸入數(shù)據(jù) ,這個(gè) iocontrolcode 很關(guān)鍵



            這部分代碼用來防止關(guān)鍵函數(shù)被 hook,以及恢復(fù)原始的 windows int 1的中斷處理函數(shù). 這樣就讓 ring 0 的調(diào)試器失效

            所以這部分代碼我們要做處理啊. 不然我們就不能繼續(xù)調(diào)試了

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

            當(dāng)斷點(diǎn)在次被激活在 dump_wmimmc+1f1d 的時(shí)候,我們發(fā)現(xiàn)機(jī)密已經(jīng)完成,
            這個(gè)時(shí)候我們就可以把這段被解密的數(shù)據(jù)用 dump 命令保存到一個(gè)文件.
            dump 命令會(huì)保存這個(gè)命令執(zhí)行之前內(nèi)存中數(shù)據(jù)的快照,DUMP命令是延遲執(zhí)行的,也就是驅(qū)動(dòng)開發(fā)中的 dpc 概念,
            這個(gè)大家可以參考一下DDK的文當(dāng),



















            待續(xù)....



            Syser Debugger 1.8 版發(fā)布(2007.5.1)

            http://www.sysersoft.com

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

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

            免费精品久久久久久中文字幕| 久久精品亚洲日本波多野结衣| 亚洲一区中文字幕久久 | 久久综合伊人77777麻豆| 久久综合久久性久99毛片| 久久中文字幕视频、最近更新| 亚洲精品tv久久久久| 久久久久久久久波多野高潮| 亚洲国产精品无码久久一线 | 一本色道久久88—综合亚洲精品| 中文字幕无码精品亚洲资源网久久 | 久久91精品国产91久久户| 国产精品熟女福利久久AV| 亚洲综合久久夜AV | 日韩人妻无码精品久久久不卡| 国产精品久久亚洲不卡动漫| 久久综合伊人77777| 久久久久久午夜成人影院| 久久99热这里只有精品国产 | 久久亚洲中文字幕精品一区四| 色诱久久久久综合网ywww| 伊人久久综在合线亚洲2019 | 97久久国产亚洲精品超碰热| 国产精品天天影视久久综合网| 亚洲成av人片不卡无码久久| 久久精品国产亚洲沈樵| 无码久久精品国产亚洲Av影片| 久久久久国产精品三级网| 精品少妇人妻av无码久久| 久久久久久伊人高潮影院| 色综合久久天天综合| 久久午夜免费视频| 99久久精品国产麻豆| 久久精品国产网红主播| 久久er国产精品免费观看8| 国内精品久久国产| 国产激情久久久久影院小草| 久久精品桃花综合| 国产精品综合久久第一页| 97精品依人久久久大香线蕉97 | 国产精品九九久久免费视频|