method originalmethod = class_getinstancemethod(theclass, originalselector);
method newmethod = class_getinstancemethod(theclass, newselector);
method_exchangeimplementations(originalmethod, newmethod);
這樣一來,原來呼叫originalselector函式,都會指向我們的newselector函式,以此實現hook。
要進行ios的hook開發,首先要準備一台mac電腦(廢話),一台越獄的iphone或者ipad。針對這類的需求,大神們開發了很多nb的工具,專門幫我們更好的去hook,我們都是站在大神的肩膀上。
先介紹以下越獄開發常見的工具openssh,dumpdecrypted,class-dump、theos、reveal、ida,hopper
這個工具是通過命令列工具訪問蘋果手機,執行命令列指令碼。在cydia中搜尋openssh,安裝。具體用法如下:
1、開啟mac下的terminal,輸入命令ssh [email protected](越獄裝置ip位址)
2、接下來會提示輸入超級管理員賬號密碼,預設是alpine
3、回車確認,即可root登入裝置
你也可以將你mac的公鑰匯入裝置的/var/root/.ssh/authorized_keys檔案,這樣就可以免密登入root了。
class-dump就是用來dump二進位制執行檔案裡面的class資訊的工具。它利用objective-c語言的runtime特性,將儲存在mach-o檔案中的標頭檔案資訊提取出來,並生成對應的.h檔案,這個工具非常有用,有了這個工具我們就像四維世界裡面看三維物體,一切架構盡收眼底。
class-dump用法:
class-dump –arch armv7 -s -s -h 二進位制檔案路徑 -o 標頭檔案儲存路徑
ida是大名鼎鼎的反編譯工具,它乃逆向工程中最負盛名的神器之一。支援windows、linux和mac os x的多平台反彙編器/偵錯程式,它的功能非常強大。class-dump可以幫我們羅列出要分析的標頭檔案,ida能夠深入各個函式的具體實現,無論的c,c++,oc的函式都可以反編譯出來。不過反編譯出來的是彙編**,你需要有一定的彙編基礎才能讀的懂。
ida很吃機器效能(我的機器經常卡住不動),還有另外乙個反編譯工具hopper,對機器效能要求沒那麼高,也很好用,殺人越貨的利器。
lldb是由蘋果出品,內置於xcode中的動態除錯工具,可以除錯c、c++、objective-c,還全盤支援osx、ios,以及ios模擬器。lldb要配合debugserver來使用。常見的lldb命令有:
p命令:首先p是列印非物件的值。如果使用它列印物件的話,那麼它會列印出物件的位址,如果列印非物件它一般會列印出基本變數型別的值。當然用它也可以申明乙個變數譬如 p int a=10;(注lldb使用a = 10; (注lldb使用在變數前來宣告為lldb內的命名空間的)
po 命令:po 命令是我們最常用的命令因為在ios開發中,我們時刻面臨著物件,所以我們在絕大部分時候都會使用po。首先po這個命令會列印出物件的description描述。
bt [all] 列印呼叫堆疊,是thread backtrace的簡寫,加all可列印所有thread的堆疊。
br l 是breakpoint list的簡寫,列出所有的斷點
image list -o -f 列出模組和aslr偏移,以及偏移後的位址,可以通過偏移後的位址-aslr偏移來得出模組的基位址。
b nslog給函式設定斷點
br s -a ida中偏移前的位址+aslr偏移量 給記憶體位址設定斷點
p (char *)$r1列印函式名稱
br dis、br en和br del表示禁用、啟用和刪除斷點
nexti(ni)跳過一行
stepi(si)跳入函式
c繼續執行直到斷點
register write r0 1修改暫存器的值
很多人都是通過wifi連線使用ssh服務的,因為無線網路的不穩定性及傳輸速度的限制,在複製檔案或用lldb遠端除錯時,ios的響應很慢,效率不高。ios越獄社群的知名人士nikias bassen開發了一款可以把本地osx/windows埠**到遠端ios埠的工具usbmuxd,使我們能夠通過usb連線線ssh到ios中,大大增加了ssh連線的速度,也方便了那些沒有wifi的朋友。使用usbmuxd能極大提公升ssh的速度,用lldb遠端連線debugserver的時間被縮短至15秒以內,強烈建議大家把usbmuxd作為ssh連線的首選方案
nic 2.0 - new instance creator
關於彙編 0x01記憶體
記憶體,與記憶體條不是乙個概念。在計算機中,每個程序都有自己的4gb記憶體空間,這個4gb的記憶體空間並不是真實的,而是系統分配的虛擬記憶體。虛擬記憶體 物理記憶體 記憶體條等其它硬體裝置 板卡記憶體 物理記憶體是用來跟硬體記憶體互相對映的,跟記憶體條的大小也不是一一對應的。如何通過虛擬記憶體如何找...
招聘程式設計題0x01
python3 coding utf 8 題目描述 請設計乙個高效演算法,再給定的字串陣列中,找到包含 coder 的字串 不區分大小寫 並將其作為乙個新的陣列返回。結果字串的順序按照 coder 出現的次數遞減排列,若兩個串中 coder 出現的次數相同,則保持他們在原陣列中的位置關係。給定乙個字...
C語言雜記 0x01
ascii碼中 字元a是97,字元b是98,計算 a 1這個表示式,應該按照ascii碼把 a 當做證書值97,然後加1,得到98,然後printf把98這個整數值當做ascii碼來列印,列印出相應字元b 我們稱整型為 int 型,現在我們知道 char 型別本質上也是整數,只不過比 int 型別的...