寫在前面web
今天有個小夥伴跟我說,哇塞你在教室就是學習,回宿舍就打代碼,都沒有娛樂活動耶。而後我蛋蛋一笑,很裝逼地回了一句:臥槽打代碼不快樂嗎???小程序
咳咳,回到今天正題微信
那麼函數
今天講的是???工具
沒錯學習
今天講的是…測試
是…spa
傳說中的【劫持】.net
本節綱要線程
- 什麼是劫持
- detours的下載與編譯
- detours的使用實例
01
什麼是劫持
相信你們都有過這種經歷,某一天你興高采烈打開電腦想吃兩把雞的時候。忽然發現電腦的全部程序都打不開了,不管怎麼點擊都只是彈了個錯誤窗口。這時候你的電腦就多是被惡意程序給劫持了。
因此呢,本節討論的劫持,就是指:程序經過修改目標函數的指針,使其指向了自定義的一個函數。
通俗點就是:當你雙擊桌面上某個程序的時候,原本系統是要經過調用CreateProcess函數建立一個進程,可是指向這個函數的指針被修改了,系統跑去調用了hacker自定義的那個函數。而本來的函數就被攔截了。
detours的下載與編譯
02
- detours簡介
Detours 是Microsoft開發一個庫
它有下面這兩方面的功能:
1 攔截x86機器上的任意的win32 API函數。
2 插入任意的數據段到PE文件中,修改DDL文件的導入表。
本節主要討論它的第一功能。Detours攔截API的原理主要仍是在彙編層改變目標API出口和入口的一些彙編指令,細節我們跳過(其實我也不懂……)。
- detours的下載與編譯
下載地址:http://research.microsoft.com/en-us/projects/detours/
下載獲得的是一個名爲Detours的壓縮包,將其解壓出來,好比我是解壓到了C盤根目錄下的detours文件夾。
而後找到vs的開發者命令提示符。
打開提示符後,切換到你解壓出來的detours文件目錄,進入裏面的scr源文件目錄,而後輸入nmake回車,進行編譯構建。
等待構建完成以後,能夠在include文件夾找到detours.h
在lib.X86文件夾找到detours.lib。將這兩文件copy到一個目錄,我們一會寫代碼要用到。
03
detours的使用實例
好了,萬事俱備了,小夥伴們此時是否是按耐不住心裏的激動想要搞點事情了呢?
別急。我們先來看看detours中的幾個關鍵函數吧:
1.對detours進行初始化. DetourTransactionBegin()
2。更新進行detours的線程. DetourUpdateThread(GetCurrentThread())
3.在進行上面兩步之後,接下來就能夠用DetourAttach()函數驅動detours執行了,它的定義以下:
LONG DetourAttach(
PVOID * ppPointer,
PVOID pDetour
);
這個函數的職能呢是將目標API掛接起來。
第一個參數是一個指向將要被掛接函數地址的函數指針,就是指向原來的函數地址。
第二個參數是指向實際要調用的函數的指針,
通常咱們都讓它指向咱們自定義的函數地址。
4.讓detour函數起做用並檢查函數的返回值判斷是正確仍是錯誤
DetourTransactionCommit()
最後在多說兩句:
若是咱們想把攔截的函數恢復的話,能夠用下面這個函數,參數和DetourAttach同樣,步驟和上面的基本一致。
LONG WINAPI DetourDetach(
PVOID *ppPointer,
PVOID pDetour)
好了,下面咱們的表演開屎。
劫持自身
咱們先來寫一個簡單小程序,來實現對自身函數調用的攔截試試。在這裏呢主要是攔截程序中調用的system函數。讓它不能幹活。【順帶一提,請把前面編譯好的detours.h和detours.lib放到構建工程目錄下,編譯的時候請設置爲release模式纔有效,由於debug模式自己就是劫持】
看看效果:
能夠看到,hook()前的system能正常執行,打開了一個calc。hook()的system已經變成了咱們自定義的newsystem函數了。成功劫持了自身。
劫持別人
可能已經有同窗注意到,劫持自身也裝不了什麼B啊。能不能劫持別人,讓它不能幹活呢?
答案是確定的,劫持其餘程序有多種方式,好比全局hook,dll注入等。這裏介紹下dll注入。咱們打算攔截CreateProcess建立進程這個函數,讓它建立不了進程。
這裏在程序屬性裏設置一下,配置類型改成dll.而後生成
哎,截不了那麼長的圖你們湊合着看一下。生成了dll之後,我們藉助咱的dll注入工具來測試一下效果吧。這裏再寫一個建立進程的小程序測試一下,每5秒打開一個記事本。
能夠看到。注入以後,notepad進程再也不建立,而是彈出了交保護費的窗口。若是把這個dll注入到explorer.exe裏面會發生什麼,嘿嘿可想而知。關於dll注入有關知識,之後有時間再講吧。
END
尼瑪終於完了,寫的很差請多諒解。如今已是深夜1.30多了。臥槽修仙已經成爲平常了。看在如此深夜的份上。請點一點關注吧!!!
編輯 /codeboy
若有疑問,歡迎諮詢:鄧發珩 (聯繫方式:微信xiaoshiyisss 公衆號:程序猿聲)
本文分享自微信公衆號 - 程序猿聲(ProgramDream)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。