1. 程式人生 > >Android逆向之旅---Native層的Hook神器Cydia Substrate使用詳解

Android逆向之旅---Native層的Hook神器Cydia Substrate使用詳解

一、前言

在之前已經介紹過了Android中一款hook神器Xposed,那個框架使用非常簡單,方法也就那幾個,其實最主要的是我們如何找到一個想要hook的應用的那個突破點。需要逆向分析app即可。不瞭解Xposed框架的同學可以檢視:Android中hook神器Xposed使用詳解;關於hook使用以及原理不多解釋了。今天我們再來看另外一個hook神器Cydia Substrate,關於這個神器網上也已經介紹了,應該有的同學已經使用過了,因為最近在破解一個遊戲,奈何想hook他的一個so中的一個方法,Xposed幾乎沒法用,所以得操刀這個框架了,所以就單獨抽出來介紹這個框架。他的一個優點就在於Hook底層方法非常方便,對so中的方法hook操作非常便捷。

二、環境搭建

下面就來介紹這個框架如何安裝使用,本文會介紹這個框架如何hook Java層和Native層功能,首先我們來看一下如何安裝這個框架,本人操作的環境:

裝置系統:小米三+原生CM 4.4系統

框架版本:0.9.4010

是否root:必須root

關於這個環境,可能有的同學操作最大的問題就在於裝置和系統,不同裝置不同系統,這個框架或許安裝會失敗,具體問題可能需要你們自己去解決了。關於框架apk和功能jar包下載地址可以去官網:http://www.cydiasubstrate.com

三、Hook Java層功能

搭建好了環境,下面就直接操作了,首先來看看如何Hook Java層功能

第一步:匯入jar包


第二步:編寫hook入口類


具體api這裡不多介紹了,就那麼幾個,沒必要詳細介紹,這裡對系統的imei進行hook操作了。網上很多人都對系統顏色值進行了hook,這裡也順帶操作一下:


第三步:配置xml資訊


在AndroidManifest.xml中需要配置兩個地方,一個是使用許可權,一個是宣告hook的入口類即可。

第四步:安裝執行

程式碼編寫完成之後,直接執行安裝即可,前提是你需要正確安裝Cydia框架apk,安裝成功介面如下:


然後我們安裝hook工程apk,會出現這個提示:


點選,進入框架介面,點選重啟即可。然後我們檢視系統介面顏色以及返回的imei值:

  

檢視顏色的確變成騷氣的粉色了,再看看imei值的修改:


imei值也成功的hook成功了。到這裡我們就用Substrate框架hook了Java層功能。當然這些功能Xposed也是可以做到的哦。

四、Hook Native層功能

那麼下面繼續來看如何hook native層的功能,也是本文的重點哦。

第一步:建立一個Native工程


這裡用Eclipse操作,簡單便捷,有很多人問我為什麼不用AS,我想說在我心中Eclipse最好用,AS真心好醜,不想用而已。

第二步:匯入Substrate的native功能包

上圖可以看到,需要匯入一個substrate.h標頭檔案,和兩個so功能包。native層應用都是這麼幹的,提供一個頭檔案告訴你api,具體實現在so包中。

第三步:尋找hook的函式名

這裡網上沒有好的hook程式碼,這裡我們為了更好的檢視這個工具的牛逼之處,弄一個比較實際的案例就是hook系統載入dex的函式,這樣我們就可以獲取到每個應用的dex檔案了,這種方式對於早期加固是一個比較好的脫殼方案。在之前介紹脫殼我們會使用IDA在指定函式處下個斷點,那麼我們這裡如果要hook的話,就需要找到這個載入dex的函式名稱,這裡一定要記的是匯出的函式名,首先我們匯出裝置的libdvm.so檔案:system/lib/libdvm.so


然後使用IDA開啟,尋找載入dex函式:


切換到Exports檢視頁面,然後搜尋dexFileParse函式,點進去:


看到了,我們需要得到的是EXPORT的函式名,需要hook的是他,這個一定要注意,不然hook沒效果的。找到函式之後還得獲悉函式的引數型別和返回型別,這個也好辦,因為我們有Android原始碼,所以直接在原始碼中找這個函式引數說明已經返回值說明即可。因為Native層hook的其實是函式指標的替換,所以如果想hook原來的函式,必須新建一個和原來一樣的函式功能,然後傳遞函式指標即可。這個函式的引數和返回值定義如下:

DexFile* dexFileParse(const unsigned __int8 *, unsigned int, int);

引數含義非常簡單,第一個引數表示dex檔案的起始地址,第二個引數是dex檔案的長度,有這兩個引數我們就可以寫入檔案了。這裡我們需要獲取DexFile型別,這個直接在Android原始碼目錄下找到這個標頭檔案DexFile.h即可。然後匯入工程中。這樣我們就找到了需要hook的函式已經說明了,下面就開始編寫hook程式碼了。

第四步:編寫hook程式碼

在編寫hook程式碼之前,我們需要考慮這幾件事:

第一件事:我們hook之後的dex存在哪?怎麼存?我們這裡直接通過當前的pid值獲取程序名,然後將其憑藉作為dex的檔名,這樣每個程序的dex檔案就不會衝突了。這裡要理解一點:一個程序對應一個DVM,載入一個dex檔案。所以這裡hook其實就是注入每個程序,在每個程序中在hook每個函式功能。

第二件事:需要過濾系統程序,並不是所有的程序都是我們想要hook的,而且這些程序未必有dex檔案,比如鼻祖程序zygote,而這些程序過濾規則,需要我們自己列印看結果。然後構造。

下面開始寫程式碼了,首先定義我們想要hook的so檔案:

MSConfig(MSFilterLibrary, "/system/lib/libdvm.so");

主要是第二個引數,是需要hook的so路徑。然後在入口處開始hook程式碼:


這裡首先找到so中需要hook函式符號,然後直接呼叫MSHookFunction傳入符號,新函式地址,舊函式地址即可。這裡可以看到在C中指標是多麼強大,實現了函式的回撥機制,而且非常方便。然後繼續來看新定義的hook函式功能:


這裡先獲取當前程序名稱,然後構造dex檔名,儲存dex檔案,最後一定要記得返回原始的函式,不能影響正常的流程。這裡還要記得過濾規則,不要對每個程序都進行操作,並不是每個程序都是有效的。而這些過濾規則是根據自己列印程序名來自行新增即可。

第五步:編寫MK檔案

上面程式碼已經編寫完成了,下面來編寫編譯指令碼吧,主要注意編譯之後的檔名一定要有cy結尾,不然是hook失敗的,然後就是需要匯入substrate的so庫檔案:


第六步:安裝並執行

和之前一樣,執行之後,需要重啟裝置,然後先看看native層的log資訊:


然後再去目錄中檢視儲存的dex檔案資訊:


dex檔案都儲存成功了,這樣會發現如果對於早期的加殼,可以採用這種方式進行脫殼操作的。也不需要用IDA進行除錯dump出dex檔案了。

五、說明

關於native層hook就介紹完了,這裡還是需要說明幾點:

第一點:hook之前需要分析so獲取需要hook的函式名稱,引數返回值定義,這個和hook Java層一樣,必須先找到突破點才能進行下一步。

第二點:hook可能會有一些錯誤,因為是native層比java層錯誤資訊難發現,所以最好是在某些地方加一些日誌觀察結果。

如果在使用過程中發現hook失敗,注意檢查這幾個條件:

第一個:xml中是否配置了許可權和入口

第二個:編譯指令碼MK中的字尾名是否為cy

六、總結

關於CydiaSubstrate框架就介紹到這裡了,後面會分析如何hook遊戲的so檔案來進行破解工作,有了這個框架再也不怕hook難了,native層程式碼也可以一覽無餘了。

更多內容:點選這裡

關注微信公眾號,最新技術乾貨實時推送

編碼美麗技術圈微信掃一掃進入我的"技術圈"世界

掃一掃加小編微信
新增時請註明:“編碼美麗”非常感謝!

相關推薦

Android逆向---NativeHook神器Cydia Substrate使用

一、前言在之前已經介紹過了Android中一款hook神器Xposed,那個框架使用非常簡單,方法也就那幾個,其實最主要的是我們如何找到一個想要hook的應用的那個突破點。需要逆向分析app即可。不瞭解Xposed框架的同學可以檢視:Android中hook神器Xposed使用詳解;關於hook使用以及原理

Android逆向---Hook神器家族的Frida工具使用

常見 fin () 文件的 數值 isp extern dex文件 所有 一、前言 在逆向過程中有一個Hook神器是必不可少的工具,之前已經介紹了Xposed和Substrate了,不了解的同學可以看這兩篇文章:Android中Hook神器Xposed工具介紹 和 Andr

Android逆向---抖音火山視訊的Native註冊混淆函式獲取方法

一、靜態分析 最近在小密圈中有很多同學都在諮詢有時候有些應用的動態註冊Native函式,在分析so之後發現找不到真的實現函式功能地方,我們知道有時候為了安全考慮會動態註冊Native函式,但是如果只是這麼做的話就會非常簡單,比如這樣的: 這樣的我們熟知Reigster

Android逆向---Android手機端破解神器MT的內購VIP功能破解教程

一、前言在破解app的時候,我們現在幾乎都是在PC端進行操作,但是之前bin神的MT管理器,可以在手機端直接破解,不過也有很大的侷限性,但是對於一些簡單的app破解沒問題的。這個工具其實原理也很簡單,就

Android逆向Android手機端破解神器MT的內購VIP功能破解教程

一、前言 在破解app的時候,我們現在幾乎都是在PC端進行操作,但是之前bin神的MT管理器,可以在手機端直接破解,不過也有很大的侷限性,但是對於一些簡單的app破解沒問題的。這個工具其實原理也很簡單,就是解析apk中的dex,arsc等檔案,然後支援修改其中的類方法資

Android逆向---破解某支付軟體防Xposed的hook功能檢測機制過程分析

一、情景介紹最近想寫幾個某支付軟體的外掛,大家現在都知道現在外掛大部分都是基於Xposed的hook功能,包括之前寫了很多的某社交軟體的外掛,所以不多說就直接用Jadx開啟支付軟體之後然後找到想要hoo

Android逆向---破解某支付軟體防Xposed等框架Hook功能檢測機制

一、情景介紹最近想寫幾個某支付軟體的外掛,大家現在都知道現在外掛大部分都是基於Xposed的ho

Android逆向---靜態方式分析破解視頻編輯應用「Vue」水印問題

https http mpeg 朋友圈 無需 爆破 資料 不可 fill 一、故事背景 現在很多人都喜歡玩文藝,特別是我身邊的UI們,拍照一分鐘修圖半小時。就是為了能夠在朋友圈顯得逼格高,不過的確是挺好看的,修圖的軟件太多了就不多說了,而且一般都沒有水印啥的。相比較短視頻有

Android逆向---動態方式破解apk前奏篇 Eclipse動態除錯smail原始碼

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android逆向---靜態方式破解微信獲取聊天記錄和通訊錄資訊

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android逆向---Android應用的漢化功能 修改SO中的字串內容

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android逆向---靜態分析技術來破解Apk

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android逆向---動態方式破解apk終極篇(加固apk破解方式)

一、前言 今天總算迎來了破解系列的最後一篇文章了,之前的兩篇文章分別為: 第一篇:如何使用Eclipse動態除錯smali原始碼  第二篇:如何使用IDA動態除錯SO檔案 現在要說的就是最後一篇了,如何應對Android中一些加固apk安全防護,在之前的兩篇破

Android逆向---解析編譯之後的Resource arsc檔案格式

                一、前言快過年了,先提前祝賀大家新年快樂,這篇文章也是今年最後一篇了。今天我們繼續來看逆向的相關知識,前篇文章中我們介紹瞭如何解析Android中編譯之後的AndroidManifest.xml檔案格式:http://blog.csdn.net/jiangwei09104100

Android逆向---動態方式破解apk進階篇 IDA除錯so原始碼

                一、前言今天我們繼續來看破解apk的相關知識,在前一篇:Eclipse動態除錯smali原始碼破解apk 我們今天主要來看如何使用IDA來除錯Android中的native原始碼,因為現在一些app,為了安全或者效率問題,會把一些重要的功能放到native層,那麼這樣一來,我們

Android逆向---SO(ELF)檔案格式

第一、前言從今天開始我們正式開始Android的逆向之旅,關於逆向的相關知識,想必大家都不陌生了,逆向領域是一個充滿挑戰和神祕的領域。作為一名Android開發者,每個人都想去探索這個領域,因為一旦你破解了別人的內容,成就感肯定爆棚,不過相反的是,我們不僅要研究破解之道,也要

Android逆向---動態方式破解apk前奏篇(Eclipse動態除錯smail原始碼)

一、前言今天我們開始apk破解的另外一種方式:動態程式碼除錯破解,之前其實已經在一篇文章中說到如何破解apk了:Android中使用靜態方式破解Apk  主要採用的是靜態方式,步驟也很簡單,首先使用ap

Android逆向---破解一款永久免費網路訪問工具

一、前言因為最近個人需要,想在手機上使用"高階搜尋",但是找了一圈發現都是需要收費的網路工具,奈何我沒錢,所以只能通過專業技能弄一個破解版的。二、應用分析下面就直接奔入主題。首先我們看到到期介面如下:提

Android逆向---基於對so中的section加密技術實現so加固

致謝:一、前言好長時間沒有更新文章了,主要還是工作上的事,連續加班一個月,沒有時間研究了,只有週末有時間,來看一下,不過我還是延續之前的文章,繼續我們的逆向之旅,今天我們要來看一下如何通過對so加密,在介紹本篇文章之前的話,一定要先閱讀之前的文章:so檔案格式詳解以及如何解析

Android逆向--瘋狂兔子無敵跑跑 內購破解教程

感謝「一塊硬幣」同學投稿,也熱烈歡迎其他同學來投稿,分析是一種快樂,也是一種精神!今日偶然看到一