EasyHook庫的使用

2021-08-22 04:52:50 字數 1687 閱讀 9285

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的區別

lhinstallhook與lhsetexclusiveacl/lhsetinclusiveacl必須配對出現,否則hook不會生效,我在做測試的時候,發現我配對

使用了,但是盡然還是沒效果,找了好久,後面才發現,是因為我沒有搞清楚lhsetexclusiveacl和lhsetinclusiveacl,lhsetexclusiveacl是hook除了當前執行緒外的所有執行緒,而lhsetinclusiveacl是可以針對當前執行緒,所以如果單獨起了執行緒去執行hook的操作,那這樣必須使用lhsetexclusiveacl,如果沒有起執行緒,直接執行hook,那必須使用lhsetinclusiveacl。

easyhook可以支援遠端注入

在檢視新東西的時候,官方文件很重要,先參照官方文件的例子,可以節約很多時間

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指向同一位...