在iphone越獄機器中使用Hook

2021-06-06 09:46:21 字數 1521 閱讀 4625

確定需要進行hook的物件。

例如:我打算在系統每次傳遞訊息之前,都進行一些定製的處理,那麼就可以hook uiwindow的sendevent函式。

新建乙個工程普通base view普通工程專案,專案名稱為hook2

messagehook.h

#import #ifndef __message_hook_h__

#define __message_hook_h__

extern "c"

#endif // __message_hook_h__

messagehook.mm

#import "messagehook.h"

// 定義需要被hook的函式

imp original_uiwindow_sendevent;

// 定義hook函式

void replace_uiwindow_sendevent(uiwindow *self, sel cmd, uievent *event)

注意該實現函式的檔名稱字尾為.mm,也即支援c++混合編譯,否則在匯入c/c++型別的標頭檔案或相關**時,編譯會報錯。

messagehook.h包括被hook函式的宣告以及hook函式的宣告。

在xcode中配置other_ldflags為-init  _$(project_name)initialize –lsubstrate –dynamiclib

other_ldflags 在build settings----linking-----other linker flags)

表示在連線階段需要subsrate以及dynaliclib動態庫。而-init $(project_name)initialize則是定義工程所編譯出來的動態庫載入過後的初始化函式。

由於我們的工程專案名稱為hook2,所以我們需要新建乙個檔案為hook2initialize.mm,在執行時,系統會根據聲稱的dylib來尋找初始化函式,該函式是$(project_name)檔案中的$(project_name)initialize函式。

故在hook2initialize.mm中包含hook2initialize的函式實現.

#import "substrate.h"

#import "messagehook.h"

extern "c" void hook2initialize()

編譯成功之後生成的hook2資料夾,顯示包內容,更改其中的hook2檔案為hook2.dylib, 即可通過iphone explorer來將hook2.dylib放置到/library/mobilesubstate/dynamiclibraries資料夾中,respring,就看以看到任何一次拖動介面等操作,都會列印出replease_uiwindow_sendevent is call in hook2,說明我們的事件截獲成功了。

**:

在iphone越獄機器中使用Hook

在iphone越獄機器中使用hook 確定需要進行hook的物件。例如 我打算在系統每次傳遞訊息之前,都進行一些定製的處理,那麼就可以hook uiwindow的sendevent函式。新建乙個工程普通base view普通工程專案,專案名稱為hook2 messagehook.h import i...

在iphone越獄機器中使用Hook

在iphone越獄機器中使用hook 確定需要進行hook的物件。例如 我打算在系統每次傳遞訊息之前,都進行一些定製的處理,那麼就可以hook uiwindow的sendevent函式。新建乙個工程普通base view普通工程專案,專案名稱為hook2 messagehook.h import i...

在iPhone應用中使用自定義字型

iphone系統的字型數量有限,並且多數對中文沒有效果,下面介紹兩種解決辦法 方法1 新增對應的字型 ttf或.odf 到工程的resurce,使用cocos2d中的fontlabel庫,fontlabel繼承於uilabel,象uilabel一樣使用就好了 fontname直接使用新增的資源名字即...