1. 程式人生 > >iOS安全攻防(十四)arm彙編之建立objc物件

iOS安全攻防(十四)arm彙編之建立objc物件

objc是完全面向物件的語言,所以逆向的重點就是逆向類,這篇帖子通過ida的神奇的f5功能,來逆向某個物件的建立。

我們直接看ida中的main方法的逆向出來的arm程式碼:

NewImage

基本上看不出所以然,我們使用ida的f5分析得出c語法的虛擬碼如下:

NewImage

提一下,我在原始碼中,把自動記憶體管理ARC關掉了,為的是讓程式碼更整潔。

在 8,9行都看到objc_msgSend,這個objc_msgSend其實是編譯器生成的程式碼,在原始碼中沒有的,objc呼叫例項方法其實是動態的通過訊息傳遞,只有在runtime的時候才能確定到底給哪個method去處理,也就是說編譯期間根本無法確定函式地址。

objc_msgSend函式至少包括2個引數,第一個引數型別是id,也就是範型class,可以傳遞任何class;第2個引數型別是SEL,selector,暫時可理解method的字面宣告,後面的帖子裡會詳細講到selector。從第3個開始後面的引數就是SEL所指method需要的具體引數,本例中都只有2個引數。

最後看一下main 的原始碼:

NewImage