1. 程式人生 > >iOS逆向之動態分析(騰訊視訊廣告移除)非會員

iOS逆向之動態分析(騰訊視訊廣告移除)非會員

前言:

iOS逆向分析之動態分析,我開始思考怎樣把原理講的深入淺出,怎樣把故事講的有趣生動,於是本來寫好的動態分析又操了重來,那麼今天我準備帶著問題來講動態分析,先丟擲我們這次逆向的目標,騰訊視訊廣告移除,以此為例講解動態分析。

首先我們進入視訊播放頁,點選最近的熱片《戰長沙》,進入詳情頁如下圖,VIP可關閉廣告,那麼這個詳情頁肯定會有與與VIP廣告相關的業務,我們只要找到對應的ViewController然後丟給Hooper反編譯就應該可以看到VIP相關的業務函式。那麼怎麼知道這一頁對應的ViewController呢,有2種辦法,一種全域性hook viewDidLoad 在這裡斷點看vc,還有直接看檢視堆疊。

圖1

圖2

先不猜了,去Hooper裡看下這個類到底有哪些相關的方法,這裡要用到iOS逆向分析之靜態分析(二)介紹的內容,這裡不做重複,丟進去就驚呆了,尼瑪這方法真吉爾多,我這裡只貼一屏與廣告相關的,但是仔細分析後並沒什麼卵用。

圖3

通過上面靜態分析的內容並不能提供明顯的思路讓我去廣告,我準備回到UI堆疊那裡,我在這裡發現了QNBPlayerVideoAdsViewController,看名字就知道播廣告的,邪惡的笑下,鵝腸同學名字起得真是清晰明瞭,這次試一下直接hide這個控制器看廣告會不會消失。

圖4

我寫了如下程式碼以後,很暴力直接隱藏了廣告檢視,發現廣告會消失一會兒,然後又顯示,經過靜態分析發現QNBPlayerVideoAdsViewController這個類裡邊有adsStartPlay,那我更暴力一點,在這個方法裡只要你播廣告我就影藏這個view,command r執行,看電視劇,妥妥的沒廣告了,最終程式碼如下。

圖5

故事講到這裡算是講完了,有興趣的同學可以加入我們的交流學習群:638302184,整體而言,這次分析的過程比較順利,我們可以看到在逆向過程中是動態,靜態分析結合相互提供線索一步步逼近真相,我們現在覆盤,通過覆盤來來解密我們使用的工具,以及這些工具背後的原理。

? ? ? ?我們這次動態分析使用的是IPAPatch,和這個類似的有AloneMonkey的MonkeyDev,這倆庫原理類似核心思想都是將我們自己寫的程式碼編成動態庫注入目標App,然後重籤,作為一個有情懷的開發者,僅僅會使用工具肯定不是我們的目標對不對,我們要做的是探究這個過程是如何實現的,這裡我丟擲幾個問題動態庫是如何注入的?App重簽名的過程是怎樣的?今天我們大概簡單聊聊有個印象,這些內容每一個點都很重要,都是逆向的基礎知識,雖然枯燥但是,但可以讓你更好的理解這些原理。

如果要理解動態庫注入那還需要更深入的理解Mach-o的檔案結構,我在上篇文章中簡單講了下,這裡再詳細的講下,一個典型的Mach-O檔案格式如圖所示

圖6

通過上圖,可以看出Mach-O主要由以下三部分組成:

Mach-O頭部(mach header)。描述了Mach-O的cpu架構、檔案型別以及載入命令等資訊。

載入命令(load command)。描述了檔案中資料的具體組織結構,不同的資料型別使用不同的載入命令表示。

Data。Data中的每個段(segment)的資料都儲存在這裡,段的概念與ELF檔案中段的概念類似。每個段都有一個或多個Section,它們存放了具體的資料與程式碼。

二進位制當中所有引用到的動態庫都放在Load commands段當中,雅思培訓一般多少錢那麼我們只要,通過給這個段增加記錄,就可以注入我們自己寫的動態庫了,對不對。那麼問題來了,在這裡插入我們自己的動態庫有什麼用?我們自己寫的程式碼沒有執行的入口,一樣什麼都不能幹,我們還需要一個”main”函式來執行我們自己的程式碼,不要忘了,這個”main”函式在oc裡面稱為建構函式,只要在函式前宣告 “attribute((constructor)) static” 即可,這樣你的程式碼就可以被目標APP執行了。

關於重簽名,有興趣的同學可以學習下整個簽名過程,包括程式碼如何簽名,證書如何校驗等,重簽名大概過程如下,

1、解壓ipa安裝包 cp test.ipa olinone.zip

2、替換證書配置檔案(檔名必須為embedded)

cp embedded.mobileprovision Payload/test.app

3、重簽名(certifierName為重簽名證書檔名,可以加證書ID字尾)

certifierName="iPhone Distribution: olinone Information Technology Limited(6a5LOVE58MYX)"

codesign -f -s $certifierName? --entitlements entitlements.plist Payload/test.app

4、打包 zip -r test.ipa Payload

至此逆向系列的入門教程已經全部更完,現在應該拿到一個App應該已經可以自己玩了,篇幅有限,有很多內容不能展開講,也沒講到,比如有攻就有防,瞭解防才可以更好的繞過,如何為自己的App加固,再比如一些細節符號表是怎樣恢復的,砸殼的原理到底是怎樣的,這些有趣的話題我們只能後邊再聊,更多騷操作,盡在iOSTips,關注公眾號,第一時間get新姿勢。

附靜態分析工具集:

Dumpdecrypted:砸殼

class-dump-z: 用於簡單分析出工程中的標頭檔案和函式名

IDA:強大的反編譯工具

Hopper Disassembler:類似IDA

附動態分析工具集:

IPAPatch,MonkeyDev:

Reveal 介面分析

? ? ? ? CaptainHook,Tweak 編寫hook程式碼,或自定義功能