在iphone越獄機器中使用Hook

2022-03-27 15:34:34 字數 1543 閱讀 3814

在iphone越獄機器中使用hook

確定需要進行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

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

在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直接使用新增的資源名字即...