easyhook的官網,最近在做的專案中,因為要去過濾掉cmd的彈框,所以用到了這個庫,1.了解####在使用的過程中,遇到了一些坑,然後也解決了一些問題,特再次記錄下來,方便自己以後查閱
首先我查詢了網上的相關資料,都查的有點暈了,但有用的就那麼幾個,其它的就是引用這個幾個例子,這樣感覺效率不高,後面我還是先參照了官網的例子,才覺得真正對easyhook有了乙個全面的了解。這個經驗告訴我,在資料不夠詳盡的前提下,官網的例子才是更加靠譜的。easyhook提供了2種方式,一種是直接呼叫的方式,還有一種就是遠端注入(也就是常說的dll注入),
2. 實踐####
按照官網給的說明,完全copy裡面的例子,實現了教材裡的說明,對這個的作用有了乙個很直觀的感受,然後參照實際的使用需求,在例子的基礎上做了修改,測試了自己要做的修改,確實可行。
3. 與專案結合####
專案需求點:公司產品前端使用的是nw框架,裡面用的是chrome的核心,現在要做乙個功能,需要公升級,但是公升級後不再支援 npapi 型別的外掛程式,但支援ppapi,但是這個時候出現乙個問題,載入含有flash外掛程式頁面時,cmd命令列視窗會閃一下,要做到能載入flash外掛程式,但是cmd命令列視窗不能閃。
解決:發現是命令列引數是not sandboxed時,通過hook截掉。
整合:按照例子中的**,進行測試,發現既然不能攔截,鬱悶啊,剛開始以為是注入失敗,後面加了log,才發現,注入是成功的,失敗的原因是因為nw剛起來的固定有幾個程序,當彈cmd框的時候,會額外起程序,而我寫的注入程式只注入了nw剛起來的程式,沒有抓額外的程序,所以失敗了,現在問題來了,怎麼獲取這個會彈cmd框的子程序呢?想了好久,沒有找到合適的方法,後面想著只能去改nw的原始碼了,唉~~~
新的希望:後面我的同事有空,他就幫我看起來了,他比較厲害,他想到可以先hook起子程序的命令,然後在給這個子程序注入,去遮蔽掉
not sandboxed,我就沒有想到。然後安裝這個思路,就往下做,這裡都是hook了kernel32的createprocess方法,因為程式區分了寬位元組和窄位元組,所以要hook createprocessa和createprocessw這個二個,要確認你注入的程式是64位還是32位,然後注入相應版本的dll
問題點記錄:
lhsetexclusiveacl和lhsetinclusiveacl的區別easyhook可以支援遠端注入lhinstallhook與lhsetexclusiveacl/lhsetinclusiveacl必須配對出現,否則hook不會生效,我在做測試的時候,發現我配對
使用了,但是盡然還是沒效果,找了好久,後面才發現,是因為我沒有搞清楚lhsetexclusiveacl和lhsetinclusiveacl,lhsetexclusiveacl是hook除了當前執行緒外的所有執行緒,而lhsetinclusiveacl是可以針對當前執行緒,所以如果單獨起了執行緒去執行hook的操作,那這樣必須使用lhsetexclusiveacl,如果沒有起執行緒,直接執行hook,那必須使用lhsetinclusiveacl。
在檢視新東西的時候,官方文件很重要,先參照官方文件的例子,可以節約很多時間
hook的時候要確定你注入的是64位還是32位
EasyHook庫的應用
設定環境 第一步 開啟easyhookdll屬性頁設定配置型別,生成easyhookdll.lib檔案 第二部 在c windows system32路徑中新增easyhook32.dll檔案 環境設定好後開始我們的easyhook之旅。用easyhook來給api函式掛鉤確實是方便了很多,下面通過...
EasyHook庫系列使用教程之四鉤子的啟動與停止
此文的產生花費了大量時間對easyhook進行深入了解同時參考了大量文件 先來簡單比較一下easyhook與detour鉤取後程式流程 detours 鉤取api函式後,產生兩個位址,乙個位址對應真hook函式位址,乙個對應真實api位址 easyhook 鉤取api函式後,所有api指向同一位址,...
EasyHook庫系列使用教程之四鉤子的啟動與停止
此文的產生花費了大量時間對easyhook進行深入了解同一時候參考了大量文件 先來簡單比較一下easyhook與detour鉤取後程式流程 detours 鉤取api函式後。產生兩個位址,乙個位址相應真hook函式位址。乙個相應真實api位址 easyhook 鉤取api函式後,所有api指向同一位...