我們在逆向程序中,經常碰到這樣的場景,
分析某個演算法的時候,演算法強度很大,做了很多騷操作,讓你看了反編譯的代碼就直接回收站處理,
面對高強度演算法,這時候我們的選擇一般是
- 硬鋼(適合大佬和時間充足的選手)
- firda rpc 遠程呼叫
- xposed rpc 遠程呼叫
- unicorn 模擬執行
后續陸續更新上面提到4種方法,
這篇文章主要介紹frida rpc呼叫的簡單實作
做frida rpc視頻 文章初衷

某粉絲大佬后天私信我,2月就想做了 但是太懶 4月才開始做 后續大佬們想看啥視頻也可以私信我 我統計一下比較多的 有時間就錄
開始正文
大家好,我是王鐵頭 一個乙方安全公司搬磚的菜雞
持續更新移動安全,iot安全,編譯原理相關原創視頻文章
更多frida rpc呼叫
- rpc 呼叫java類方法 (靜態java方法)
- rpc 呼叫native類方法 (靜態native方法)
- rpc 呼叫實體方法(物件的java方法和 物件的native方法)
- rpc 呼叫so層函式
視頻演示:[https://space.bilibili.com/430241559]
原理圖


rpc遠程呼叫效果圖
在嘗試過幾種frida rpc的框架后,我找到了很簡單的一種實作方法,從啟動環境到架設到外網直接訪問呼叫,整個程序不要兩分鐘,首先看下效果圖,


這里做一個演示 呼叫一個加密方法 輸入引數 字串111


這里也可以直接執行命令列 回傳一樣的結果


在真機上 輸入同樣的引數 回傳一樣的結果

注意!
注意!
注意!
在自動化測驗的場景下 可以寫個腳本 打到批量測驗的目的
比如像下面這樣 寫個腳本批量去跑

這里之所以說簡單,是因為使用簡單,除了安裝環境麻煩之外,在安裝好環境后,每次使用的時候,基本不用做啥重復性操作,撰寫腳本,啟動環境,就ojbk了
注意 這里演示環境是ubuntu 但是實測windows和ubuntu都是可以的,操作程序基本沒什么區別
適用場景
frida遠程呼叫不僅可以呼叫 java層的函式,也可以呼叫so層的函式,
但是,frida并不太穩定,frida rpc也不太穩定,有一些比較坑爹的問題,
也并不太適用于工業級,比如frida并不適用于 在一些高并發,多執行緒的場景,
frida rpc 的前提條件就是,手機里面正在運行要注入的app, 更適合一些測驗場景,比如協助一些滲透同事做一些資料的加解密,
或者一些規模比較小的工業級呼叫
frida 遠程呼叫demo
假設 我們遇到的apk是這樣子的:

可以看到上面的app 有2個加密按鈕 我們這次要用frida 遠程呼叫的 也是這兩個功能函式
- AES加密
- 菜雞加密
目標函式

上圖是要遠程呼叫的目標函式 函式宣告如下
public static byte[] aes_dec(String str_dec)
public String caiji_enc(String str_data, int n_conunt)
frida 遠程呼叫實作
frida rpc 遠程呼叫演算法是我們經常用的一種演算法呼叫的手段,也有現成的一些解決方案,甚至有人已經寫出了專門的框架來節省我們的時間,讓我們不至于手動去每次搭建環境都費時費力,
1. 普通青年實作frida rpc
frida + flask + nps
在這個方案里:
- frida 實作呼叫具體實作
- flask提供網頁訪問相關介面
- nps內網穿透 直接把內網映射到公網,讓介面可以在外網直接被訪問,
這種方法可以是可以,可是比較麻煩,一套流程下來,可能20分鐘往上了,
而且nps這東西想要實作內網穿透,要么你自己有服務器,要么還得搞谷歌云的服務器,費時費力,
這個方法后續會寫篇文章介紹
2. 優秀青年實作frida rpc
arida + 花生殼
實作步驟:
- 撰寫frida js注入 腳本 (耗時95秒)
- 修改組態檔 (耗時10秒)
- 啟動環境 (耗時10秒)
- 直接訪問 配置好的公網地址 (耗時5秒)
這篇文章主要講利用 arida + 花生殼 實作frida rpc
0 前提 關于arida框架 和 花生殼
arida
git地址[https://github.com/lateautumn4lin/arida]
看雪文章[[https://bbs.pediy.com/thread-262643.htm]
缺點:
-
安裝比較麻煩,git檔案比較感人,我按檔案安裝失敗多次,
建議觀看視頻 一步步來 我老王在安裝環境的時候 反反復復搞了2-3天 踩了很多坑
視頻演示:[https://space.bilibili.com/430241559] -
引數支持 string 和 int,事實上大部分時間也用不到別的型別,特殊型別我們直接在注入的腳本里寫就好了 不影響使用,
優點:
- 使用簡單 一條命令就可以自動注入 會自動搭建http相關環境
花生殼
優點:
- 使用簡單,瞬間完成內網穿透
缺點:
- http訪問需要交6塊大洋(巨款)的認證費,
第一步 frida rpc 撰寫js注入腳本
要注入的方法如下
public static byte[] aes_dec(String str_dec)
public String caiji_enc(String str_data, int n_conunt)
注入代碼如下:
//rpc函式 aes加密
function test_aes(str_data)
{
var str_ret = null;
Java.perform(function ()
{
console.log("===========>aes");
// 獲取類
var obj = Java.use('com.wangtietou.test_rpc_all.Test_Enc_Dec');
//呼叫類方法 因為這里是靜態方法 所以可以直接呼叫
var bytes_ret = obj.aes_enc(str_data);
//回傳值是byte[] 這里轉換成 string
str_ret = toHexString(bytes_ret);
console.log("aes result: " + str_ret);
});
return str_ret;
}
//rpc函式 菜雞加密 arida支持int引數 但是要配置
function test_caiji(str_data, str_ret)
{
var str_ret = null;
Java.perform(function ()
{
console.log("===========>caiji");
//獲取記憶體中已有物件 主動呼叫
Java.choose("com.wangtietou.test_rpc_all.Test_Enc_Dec",
{
//匹配到物件執行的回呼函式
onMatch: function (instance)
{
var n_cnt = parseInt(str_cnt);
str_ret = instance.caiji_enc(str_data, n_cnt);
},
//搜索完成后執行的回呼函式
onComplete: function ()
{
}
});
console.log("caiji result: " + str_ret);
});
return str_ret;
}
//功能函式 byte[] 轉hexString
function toHexString(arrBytes) {
var str = "";
for (var i = 0; i < arrBytes.length; i++) {
var tmp;
var num = arrBytes[i];
if (num < 0) {
tmp = (255 + num + 1).toString(16);
} else {
tmp = num.toString(16);
}
if (tmp.length == 1) {
tmp = "0" + tmp;
}
str += tmp;
}
return str;
}
//要匯出 被遠程呼叫的介面 這里要寫一個配置
rpc.exports = {
testAes: test_aes,
testCaiji: test_caiji
}
這里 把寫好的檔案 命名為wtt.js
第2步 frida rpc 修改組態檔
arida代碼目錄下有個config.py 如圖所示

修改配置資訊:

這里修改下組態檔 可以同時注入多個app
這里要注入幾個app就寫幾個配置資訊
#INJECTION_APPS 這里面只寫要啟動的app 其他建議注釋掉
INJECTION_APPS = [
{
"name": "移動安全王鐵頭",
"path": "wtt",
"package_name": "com.wangtietou.test_rpc_all"
}
]
修改好之后,把之前寫好的注入腳本檔案放到 apps目錄就可以了


第3步 啟動環境
啟動環境比較簡單
- 啟動frida_server
- 進入arida目錄 啟動conda 環境
執行 uvicorn main:app --reload 命令
如圖所示:


完成這步之后 如果不需要映射到公網的同學 到這里就可以了
直接訪問 http://127.0.0.1:8000/docs
如圖




第四步 訪問花生殼配置的公網地址
花生殼配置比較簡單



啟動花生殼客戶端

這時候 就可以在公網訪問搭建在我們內網的 frida rpc了




bingo 大功告成
更詳細的安裝環境和 frida 呼叫 java層so層 靜態方法,物件方法,so層函式的具體步驟可以看視頻,
視頻演示:[https://space.bilibili.com/430241559]
持續更新移動安全,iot安全,編譯原理相關原創視頻文章
相關資料關注公眾號 回復 rpc 下載:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/281151.html
標籤:其他
上一篇:深度學習03-sklearn.LinearRegression 原始碼學習
下一篇:ForAndSix
