抖音資料采集教程,詳解Hook框架frida,讓你在逆向作業中效率成倍提升!
短視頻、直播資料實時采集介面,請查看檔案: TiToData
免責宣告:本檔案僅供學習與參考,請勿用于非法用途!否則一切后果自負,
一、frida簡介
frida是一款基于python + java 的hook框架,可運行在androidioslinuxwinosx等各平臺,主要使用動態二進制插樁技術,本期“安仔課堂”,ISEC實驗室為大家詳解frida,認真讀完這篇文章會讓你在逆向作業中效率成倍提升哦!
1、插樁技術
插樁技術是指將額外的代碼注入程式中以收集運行時的資訊,可分為兩種:
(1)源代碼插樁[Source Code Instrumentation(SCI)]:額外代碼注入到程式源代碼中,
(2)二進制插樁(Binary Instrumentation):額外代碼注入到二進制可執行檔案中,
●靜態二進制插樁[Static Binary Instrumentation(SBI)]:在程式執行前插入額外的代碼和資料,生成一個永久改變的可執行檔案,
●動態二進制插樁[Dynamic Binary Instrumentation(DBI)]:在程式運行時實時地插入額外代碼和資料,對可執行檔案沒有任何永久改變,
2、你能用DBI做些什么呢
(1)訪問行程的記憶體
(2)在應用程式運行時覆寫一些功能
(3)從匯入的類中呼叫函式
(4)在堆上查找物件實體并使用這些物件實體
(5)Hook,跟蹤和攔截函式等等
二、frida的安裝
今天我們用到的frida框架分為兩部分:** 一部分是運行在系統上的互動工具frida CLI; 另一部分是運行在目標機器上的代碼注入工具 frida-server,
1、frida CLI
環境要求:
●系統環境 - Windows, macOS, or GNU/Linux
●Python – 最新的3.x版本
通過 pip 安裝frida
圖1
說明:
(1) 通過pip安裝的frida是可以跟python系結的; 另外frida現在也已經有了跟nodeJs系結的版本, 因此也可以直接通過 npm 進行安裝,
(2) frida CLI是安裝的frida的其中一個工具,也是最常用的一個工具,
2、frida server
frida-server需要我們單獨下載,在 frida專案的github上可以直接下載對應系統已經編譯好的frida server
圖2
我們需要下載的檔案名的格式是: frida-server-(version)-(platform)-(cpu).xz
我試驗的手機是nexus6p, cpu為arm64
所以我需要下載的是: frida-server-11.0.13-android-x86_64.xz;注意, frida-server 的版本一定要跟 frida CLI的版本一致,
將下載后的壓縮包解壓得到frida-server, 然后將該檔案推送到Android設備上,
圖3
將Android設備上的frida-server添加執行權, 并運行該程式(需要root權限)
圖4
3、frida tools
前面說過, frida CLI只是frida的其中一個工具,** frida 的工具共有6個:
(1) frida CLI: 是一個互動式解釋器(REPL),他的互動形式跟IPython很類似,
圖5
(2) frida-ps: 用于列出行程的一個命令列工具,當我們需要跟遠程系統進行互動的時候,這個是非常有用的,
圖6
另外還有四個分別是: frida-trace, frida-discover, frida-ls-devices, frida-kill
由于不是經常用到,這邊就不一一詳細介紹了, 感興趣的同學可以去frida的官網查看他們的詳細介紹和用法,
4、Java Api
在Hook開始之前,有必要對Java注入相關的api做一個簡單介紹, frida的注入腳本是Java, 因此我們后面都是通過js腳本來操作設備上的Java代碼的,
圖7
當我們獲取到Java類之后,我們直通過接..implementations = function() {}的方式來hook wrapper類的method方法,不管是實體方法還是靜態方法都可以,
由于js代碼注入時可能會出現超時的錯誤, 為了防止這個問題,我們通常還需要在最外面包裝一層setImmediate(function(){})的代碼,
下面就是js的一個模板代碼:
圖8
三、 frida Hook實戰
接下來我將通過制作一個類似微信搶紅包的插件來演示frida的具體使用,由于本文的主旨是教大家如何使用強大的frida框架, 所以側重描述的是frida的使用, 而不會說明如何逆向微信,
1、資訊持久化到本地的攔截
微信的每一條資訊都會保存到本地資料庫,這個保存的方法就是 com.tencent.wcdb.database.SQLiteDatabase 類的 insert()方法:
圖9
我們先看看每條資訊保存的內容是什么:
圖10
我們將手機連接到電腦, 然后通過frida將腳本注入到微信中:
圖11
用微信發送任意訊息,我們可以看到控制臺列印內容如下:
圖12
arg1就是要插入資料的表名, arg2是表的主鍵, arg3是要插入表的資料的欄位名稱跟值的集合,這樣, 我們就可以輕松拿到每條訊息的內容和發送者等相關資訊,
這里我們需要注意的是arg3里面以下幾個值:
圖13
當我們接收到一條紅包訊息的時候,我們可以看到紅包資訊的具體內容如下:
圖14
圖15
那我們要怎樣通過這些資訊來搶到紅包呢?
2、搶紅包流程分析
我們先來看一下,當我們點擊打開紅包之時發生了什么呢? 下面是反編譯得到的打開紅包按鈕的點擊事件:
圖16
這行代碼其實就是發送搶紅包的請求, ad 就是一個網路請求類, 那么需要構成這個請求又需要哪些引數呢?
我們單獨看看 ad 類的創建:
圖17
其中第1,2,3,4,9個引數都是來自luckyMoneyReceiveUI.kRG, 第8個引數是固定的 "v1.0"
接下來我們來列印一下第5,6,7個引數是什么:
圖18
重新加載這段js代碼, 然后我們打開一個紅包, 我們可以看到控制臺列印如下資訊:
圖19
第5,6個引數其實是自己的頭像跟昵稱資訊,第7個是發送者的資訊,而第4個引數跟上面紅包內容里面的nativeurl的值是一樣的,
那luckyMoneyReceiveUI.kRG 中的msgType,bxk,kLZ,ceR,kRC這些要怎么得到呢?
luckyMoneyReceiveUI.kRG 這個欄位的型別是: com.tencent.mm.plugin.luckymoney.b.ag,ag類跟之前提到的ad類一樣, 都是一個請求類, 他們都是繼承同一個類,其中, msgType是固定的 1,bxk,kLZ,ceR 是在ag的構造方法里面就被初始化的:
圖20
而kRC則是在里面的a方法里面被賦值的:
圖21
……
圖22
這個a方法是請求類發起請求之后的一個回呼,而在 LuckyMoneyReceiveUI的 OnCreate 方法里面我們可以看到 com.tencent.mm.plugin.luckymoney.b.ag 是怎么被構造出來的:
圖23
第一個引數是nativeurl中的channelid;
第二個引數是nativeurl中的sendid;
第三個引數是nativeurl本身;
第四個引數可以用0;
第五個引數是也是固定的 "v1.0"
經過上面的分析之后, 我們的思路就清晰了, 在收到紅包資訊后我們決議出紅包資訊里面nativeurl, channelid, sendid, 根據這些引數發送一個com.tencent.mm.plugin.luckymoney.b.ag的請求, 之后得到timingIdentifier, 最后根據得到的timingIdentifier 再發送一個com.tencent.mm.plugin.luckymoney.b.ad的請求就可以搶到紅包了,
3、模擬請求
到這里我們也就剩最后一個問題了, 那就是怎么把請求發送出去?這個我們同樣可以看看微信, 我們跟蹤到紅包界面的請求都是通過下面的方法發送的:
圖24
上面的g.Eh().dpP得到的是一個專門發送請求的Network, 得到這個Network之后我們就可以呼叫他的a方法把這個請求發送出去,需要注意的是frida不支持直接通過.dpP的方式拿到屬性, 不過沒關系, 我們可以通過反射的方式來獲取:
圖25
得到Network之后我們就開始發送請求了:
第一步是收到紅包資訊之后要決議出ContentValues里面的資訊,并根據決議出的內容發送ag請求,
圖26
我們單獨把紅包資訊的content的決議拿出來:
圖27
nativeurl的具體內容如下:
圖28
通過上面的決議之后我們就可以得到如下的info:
圖29
第二步是Hook ag請求的a方法, 在里面我們可以拿到timingIdentifier的值:
圖30
注意:當一個類里面有多載的方法的時候, 我們需要用.overload(paramtype...)來表示我們hook的是哪個多載方法,
最后我們還需要改造一下之前Hook的SQL的insert方法, 我們需要過濾出表名為message,型別為436207665的訊息:
圖31
接下來就可以開始體驗我們的搶紅包插件了!
圖32
最后請看效果:
圖33
四、附錄**
本次試驗環境如下:
微信版本: 6.6.7
frida版本: 11.0.13
frida-server: frida-server-11.0.13-android-x86_64
Android: 7.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/258023.html
標籤:其他
