Android 惡意樣本分析——三層鎖機樣本破解
一、樣本介紹
最近在吾愛上看到一個三層鎖機的樣本,恰好最近在學習研究Frida,通過動靜態分析來徹底了解一下這個鎖機樣本,

二、實驗環境
夜神模擬器+Kali
jadx-gui
Visual Studio Code
Android Studio
三、實驗步驟
(1)靜態分析
我們先通過jadx-gui打開惡意樣本程式,開始靜態分析:

我們在AndroidManifest.xml檔案中可以找到樣本的入口點,可以發現樣本中存在三個service,這個是樣本后續實作三層鎖機的服務,我們進入MainActivity

代碼解釋:
(1)我們可以看出入口處使用ADRTLogCatReader記錄軟體運行期間所產生的日志,這是大部分鎖機樣本都會用到的,
(2)使用是startService啟動服務,然后通過Class.forName隱式的跳轉Activity,然后傳入活動,并啟動intent跳轉
然后我們定位到跳轉的類com.k7.qq2856437148.K7



代碼解釋:
(1)首先我們使用WindowManager制作一個懸浮窗,然后把該視窗權限設定最高,這樣就可以放置在頂層,用戶除了點擊串口界面,不能回傳,初步到達了鎖機的目的
(2)我們繼續分析,發現兩處的代碼被混淆,這里可能是一些字串資訊,可能包含我們的密鑰
(3)到了點擊函式中,我們可以發現1處第一個判斷陳述句,前面值來源于我們的文本框輸入,后面是k7中存放的字串,匹配成功后,這里也是我們的hook點
(4)2處跳轉到K71,3處將當前的視窗移除,4處停止行程,這就完成了鎖機視窗的切換
我們進入K71類中繼續分析

我們可以發現基本原理和我們k7中一樣,只是這里對密鑰進行了加密處理,我們再查看k72,我們只需要對這里hook即可,即是我們的hook點2

k72的實作原理和k71一樣,也是采用加密演算法對密鑰做了處理,我們只需要對這里hook,即是我們的hook點3
(2)動態分析
objection動態分析
首先,我們先需要配置frida環境,具體教程參考網上,我們啟動frida_server

然后我們先使用objection工具對程式進行初步的hook動靜態分析,objection的使用這里參考肉絲大佬安全客上的文章:https://www.anquanke.com/post/id/197657#h3-6
常見的hook命令:
objection -g com.android.settings explore //注入設定應用
android hooking list activities //查看Activity,service相同
android intent launch_activity com.android.settings.DisplaySettings //實作Activity跳轉
android heap search instances com.android.settings.DisplaySettings //搜索類的實體
android heap execute 0x2526 getPreferenceScreenResId //主動呼叫實體
android hooking list classes //列出記憶體中所有類
android hooking search methods display //列出記憶體中所有的方法
android hooking watch class android.bluetooth.BluetoothDevice //hook相關類的所有方法
android hooking watch class_method android.bluetooth.BluetoothDevice.getName --dump-args --dump-return --dump-backtrace //列印具體方法的引數、回傳值、堆疊資訊
平時使用的就是這些,具體可以參考肉絲大佬的博客
我們使用objection,對樣本進行初步的分析:


和我們之前靜態分析的一樣,樣本有1個Activity和3個service,我們先看能不能直接實作跳轉

我們發現不能直接跳轉,那我們嘗試查看一些函式資訊,并初步對一些函式進行hook


我們hook類K7中的函式c失敗,這是因為在我們啟動時,實體已經加載所以沒有hook上,我們在啟動時便hook看看

主要是c函式的回傳值等都為空,所以我們并沒有獲得實際有用資訊,我們使用objection hook分析也初步結束了
Frida代碼hook
經過我們前面的動靜態分析,我們先對第一個hook點,撰寫代碼hook:

Java.choose("com.k7.qq2856437148.K7",{
onMatch:function(instance){
console.log("Found instance:",instance);
console.log("k7:",instance.k7.value);
},onComplete:function() {
console.log("search completed!")
}
})
我們這里只需要hook出k7的值即可

我們輸入欄位值,然后進入第二層鎖機

然后我們對第二個hook點開始hook


這里我們可以發現,第二層密鑰就是將K7進行加密,我們hook加密函式即可,當然我們也可以撰寫代碼把K7值hook出來得到密鑰
Java.use("com.k7.qq2856437148.jiami").GetMD5Code.implementation = function(x) {
var result = this.GetMD5Code(x);
console.log("x,result",x,result);
return result;
}
我們隨便輸入密碼,然后hook

輸入密鑰,我們進入最后一層


我們直接繼續對加密函式hook即可

然后我們把密鑰輸入進去,可以發現最后一層鎖機解除
四、實驗總結
這里我利用frida技術對三層鎖機進行了動靜態分析,對鎖機的樣本原理進行了一個初步分析,我們發現三層鎖機的密鑰,第一層是固定密鑰,這個可以通過動態除錯獲得,第二層則是根據你輸入密碼或產生的密鑰,就只能通過撰寫加密程式,或者找到對應的hook點進行獲得,第三層密鑰和第二層密鑰原理一樣,只是加密方式比較復雜一點,這里直接hook出密鑰結果最好,
最后這里很多地方參考了肉絲大佬的博客和星球,對frida的理解進一步深入了,此次樣本分析就到這里,還有什么問題請各位大佬指教,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296498.html
標籤:其他
