1. 程式人生 > >IOS逆向筆記之HOOK實現(非越獄)

IOS逆向筆記之HOOK實現(非越獄)

   HOOK是越獄的最終目標,目的是給應用新增功能如外掛或者是更改應用的某個功能來滿足我們的需求,如微信中新增搶紅包外掛。本文將以最近比較火的“快看”漫畫為例子去除付費漫畫中的收費彈窗,實現免費看漫畫的功能,然而當我去除彈窗時,才發現是我想多了。。。。,不多說了,下面我將一步一步詳細解析如實現去出收費彈窗的步驟。(一下都是基於非越獄裝置上實現的)

  首先,需要一個已經破殼並且重新簽名的的“快看”漫畫的IPA,如果還不清楚如何製作,請看上篇這裡 IOS逆向筆記之重新簽名(非越獄)。注意,從appstore直接下載下來的應用是不能用的,因為無法破殼也無法重新簽名。其次是HOOK中要用到的工具:

   介面除錯工具Reveal,用來檢視應用的介面。這個是付費版,破解版自己網上找去吧,這裡就不方面放上去了。

   

   Hopper 是將二進位制檔案轉為組合語言和OC語言的工具。功能很強大,但看起來比較難,需要多次使用才能看懂裡面的程式碼邏輯。這個軟體也是收費的。其中二進位制檔案是在對應的app檔案內,右鍵顯示包內容,從裡面可以看到一個於與app同名的一個二進位制檔案,就是它了,如快看的app檔案是Kuaikan.app,它的二進位制檔案就是Kuaikan。

  

  下載Cycript的指令碼檔案:Cycript下載。並解壓檔案,解壓後如下圖:

  

  Cycript 的功能是在執行時動態的更改物件的屬性或者呼叫方法,能夠幫助我們快速的定位到們需要的某個類或者某個屬性。

   最後一個工具是AloneMonkey這是最重要的一個工具,很好用,把各種越獄需要到的工具都整合到了xcode裡面。集成了theos+Tweaks+Reveal.framework +Cycript +class-dump+CaptainHook。它的作用是用來動態HOOK 應用中的函式,我們所有的HOOK邏輯都在這個建立的工程裡面寫,以及配置Reveal和Cycript。下面說一下AloneMonkey的安裝方法:

   第一步,安裝theos:

   安裝最新的theos
   sudo git clone --recursive https://github.com/theos/theos.git /opt/theos

  第二步: 安裝ldid

  brew install ldid

  第三步:安裝AloneMokey

  git clone https://github.com/AloneMonkey/MonkeyDev.git
  cd MonkeyDev/bin
  sudo ./md-install

  解除安裝:sudo ./md-uninstall

  更新:sudo ./md-update

  安裝成功後,開啟xcode,可以看到如下介面:

  

   點選MonkeyApp建立工程。具體整合步驟請參考這裡Monykey整合。建立成功後,目錄如下:

   

   建立後注意幾點:依賴需要手動新增一下在build phases-->target dependencies,reveal的framework需要更換你所安裝的reveal中的framework,class-dump需要手動開啟。工程只能在真機上執行,模擬器不支援,因為硬體不一樣,模擬器上無法執行。

  接下來進入主題,選擇真機,點選run開始執行工程,同時開啟reveal,檢視的app圖示是否顯示。若成功,如下圖:

  

  注意,核心步驟來了。首先保證iphone和Mac處於同一個區域網並且程式當前在執行態,條件缺一不可,然後終端下進入剛才解壓的Cycript的目錄下根據sokec(ip:埠)t連線手機,從而實現Cycript的動態注入程式碼。連線成功後如下圖:

  

  至於cycript的語法這裡就不多說了。詳情請官網學習。

  然後手機進入到收費動漫的頁面,如下圖:

  

  這裡可以看到,上面有一個彈窗遮住了後面的漫畫內容,如果能去掉彈窗,豈不是能看到後面的漫畫,那不是美滋滋。。。。。好,那我就動手了。最開始我的思路是這樣的,首先定位到這個頁面的檢視控制器controller,然後再通過Hopper看看是通過那個方法開啟的彈窗,只要重寫那個方法就行了。。。後來發現並不能找到彈窗的方法,於是放棄了這種思路。通過一段時間的琢磨,在reveal上發現,其實上面的彈框是組合空間,並且是同級的控制元件。因此,只需要找到它們共同的父view,在便利自 view,去除彈框就行了。第一步還是定位到當前的controller,第二步獲取彈窗父 view,第三步將彈窗的view的alpha值設為0就行了。

  reveal分析:

  

  Cycript實現:

  

  這樣就能去除彈窗了,效果如下:

  

   知道了如何能去除彈窗,就只剩下最後一步了,在monkey程式中實現剛才在cycript中的邏輯,可以在xxxDylib.m中修改,也可以在xxxDylib.xm中修改,區別是.m中用的是CaptainHook實現,而xm中用的Tweaks實現。這裡我選擇使用CaptainHook實現,程式碼如下:

  

  到這裡,就結束了。我以為一切都和我預期的一樣,然而,殘酷的是。。。。。。。。。

  只能看一畫哭哭哭。。。。。。