iOS逆向過程步驟彙總

經過這段時間的實踐,總結了一下逆向開發調試的大體步驟,準備分篇幅記錄的詳細點,避免之後會忘掉。

基礎階段


  1. 遠程登錄ssh(可以通過ssh進行遠程登錄,爲了提高效率,可以通過usbmux進行端口轉發的方式進行鏈接)
  2. 選擇自己感興趣的APP,使用cycript進行界面嗅探,找出需要修改的UI的名稱,以及動態調試一下相關的view,查看相關的view的responder,進而找到控制器controller,完成基本的內容定位
  3. 對於你想研究的APP使用dumpdecrypted.dylib進行脫殼操作,並導出脫殼的APP(DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /filepath)
  4. 使用class-dump 導出脫殼app字節碼可執行文件頭文件
  5. 根據第二步的嗅探後的相關內容定位到的類,在頭文件中找出相關的類的信息
  6. 找出類中可能出現影響你想改動的方法名稱,並記錄下來
  7. 操作到此,可以通過theos創建tweak項目來hook剛剛感覺可疑的方法
  8. 定位影響功能的方法之後,如果只是屏蔽方法的調用內容,那麼直接去除方法的實現即可完成功能實現,如果此時需要修改方法內部的屬性,以及需要獲取方法傳遞過來的參數,此時就需要後序步驟的支持了

進階階段


  1. 進展到此,就是逆向中我覺得可以算做是進階階段了,此時由於需要獲取某個方法傳遞過來的數據,僅僅通過靜態分析class-dump出來的頭文件,並不能夠分析出傳遞過來的參數內容。所以此時需要進行動態分析了。
  2. 使用IDA或者Hopper來反編譯已經脫殼的字節碼可執行文件,之後通過全局搜索反編譯文件中的方法名稱,來定位目標方法對應的入口的地址(不含有ASLR
  3. 通過debugserver來斷點對應的APP,通過image list -o -f來找到當前啓動的APP的ASLR地址
  4. 通過IDA或者Hopper拿到的感興趣的方法的入口地址以及上一步拿到的ASLR地址相加獲取當前啓動的APP在內存中的真實地址,通過breakpoint set -a 0x反編譯地址 + 0xALSR地址 來設置斷點。
  5. 通過lldb執行程序到斷點,此時分析反彙編代碼,分析出對應寄存器存儲的參數值,並通過lldb動態打印出相關的寄存器存儲的信息(注意Arm64中x0~x28(低32位w0~w28)是通用寄存器,x0~x7寄存器用於存放函數參數,x0存放返回值,x29是fp寄存器(棧幀寄存器),x30是lr寄存器(鏈接寄存器),以及sp寄存器(堆棧寄存器)
  6. 通過獲取寄存器中存儲的內容來定位參數類型,以此爲突破口,來確定參數類型以及參數內容數據,爲後序的tweak鋪墊
  7. 搞清楚函數的參數內容之後,就可以通過編寫tweak相關的代碼來實現自己想要的功能了。
  8. 使用theos通過nic.pl 來創建自己的項目,編寫相關的逆向代碼完成相關的逆向操作。

以上的流程步驟每一個步驟都包含大量的配置以及相關內容的學習,所以準備分步驟來進行逆向的內容記錄,以保證相關的內容的詳細記錄。

附:
自動脫殼網站:http://www.dumpapp.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章