【逆向安全】-工具(二)Frida

Frida簡單說就是一個(gè)跨平臺(tái)的hook框架纱意,主要應(yīng)用場景是app運(yùn)行時(shí)运吓,附加hook腳本尘颓,監(jiān)視和修改進(jìn)程中的代碼, 從而實(shí)現(xiàn)對目標(biāo)程序的深度分析和修改团秽。

官方文檔:https://frida.re/docs/examples/android/

一主胧、Frida安裝

1.1 mac安裝frida及相關(guān)工具

pip3 install frida
pip3 install frida-tools
pip3 install objection

1.2 root手機(jī)安裝frida-server

① 獲取需要下載的frida-server版本和類型信息:

adb shell getprop ro.product.cpu.abi  查詢cpu架構(gòu)

frida --version 查詢電腦端frida版本

②根據(jù)上面信息下載對應(yīng)版本的frida-server

https://github.com/frida/frida/releases 例如:frida-server-16.4.2-android-arm64

adb push frida-server-16.4.2-android-arm64 /data/local/tmp
cd /data/local/tmp 
chmod 777 frida-server-16.4.2-android-arm64

二、Frida使用

2.1 啟動(dòng)frida-server

adb root
cd /data/local/tmp 
./frida-server-16.4.2-android-arm64

2.2 frida常用命令

frida-h 查看幫助
frida-ps -U 通過USB訪問手機(jī)上的frida-server  (測試frida-server啟動(dòng)是否成功)

2.3 frida附加腳本執(zhí)行

  • attach: 已存在目標(biāo)進(jìn)程习勤,內(nèi)部執(zhí)行過程hook
frida -U -N <packageName> -l demo.js
  • spawn: 未存在目標(biāo)進(jìn)程踪栋,在啟動(dòng)目標(biāo)進(jìn)程的過程hook
frida -U -f <packageName> -l demo.js

使用進(jìn)程pid方式附加

frida -U -p <pid> -l demo.js

三、 hook java的常用實(shí)現(xiàn)

1)觸發(fā)時(shí)機(jī)設(shè)置

setImmediate(main) //立即執(zhí)行
setTimeout(main, 2000); // 延遲執(zhí)行

2)代碼運(yùn)行在 Java 環(huán)境

Java.perform(function(){
//do something...
});

3)加載一個(gè)Java類

var StringClass = Java.use("java.lang.String");
var innerClass = Java.use("com.example.lesson5.MainActivity$InnerClass");

4)被動(dòng)修改調(diào)用方法(依賴該方法在原有應(yīng)用邏輯中被觸發(fā))
可修改參數(shù)图毕、函數(shù)體實(shí)現(xiàn)夷都、返回值

mainActivity.text.implementation = function(){
   return "222"
}

5)重載的函數(shù)

mainActivity.text.overload('int','int').implementation = function(a, b){
     console.log("調(diào)用了text重載方法 a=", a, ",b=", b)
     return this.text(3,4)
}

6)實(shí)例化對象

var string = Java.use("java.lang.String").$new("abc")

7)獲取調(diào)用棧

var throwInstance = Java.use("java.lang.Throwable").$new()
var thStr = Java.use("android.util.Log").getStackTraceString(throwInstance)
console.log("error=", thStr)

8)內(nèi)存中找實(shí)例,主動(dòng)調(diào)用類方法(不依賴該方法在原有應(yīng)用邏輯中被觸發(fā))

Java.choose("com.stan.secure.MainActivity",{
     onMatch:function(instance){
            console.log("result=",instance.text())
     },

     onComplete:function(){
            console.log("onComplete")
     }
})

9)加載dex并使用其中的類

Java.openClassFile("/data/local/tmp/xxx.dex").load();
const a = Java.use("com.xxx.xxx.A");

四予颤、hook native的常用實(shí)現(xiàn)

1)查看目標(biāo)進(jìn)程加載到內(nèi)存中的模塊(和cat /proc/<PID>/maps 效果一致)

Java.perform(()  {
    var modules = Process.enumerateModules()
    for (var i in modules) {
        var module = modules[i]
        # 這里做了一些條件篩選:只列出應(yīng)用內(nèi)模塊损肛,這樣可以觀察目標(biāo)應(yīng)用實(shí)際加載了自身哪些動(dòng)態(tài)庫或者dex
        if (module.path.includes('<packageName>')) {
            console.log('path:', module.path, 'base:', module.base, 'size:', module.size)
        }
    
    }
})
  1. 查看so的導(dǎo)出符號
Java.perform(() {
    var exportsMethods = Module.enumerateExports('libBugly.so')
    for (var i in exportsMethods) {
        var m = exportsMethods[i]
        console.log('type:', m.type, 'name:', m.name)
    }
})
  1. hook 具體函數(shù)
Java.perform(() {
    var addr = Module.findExportByName('libBugly.so', 'JNI_OnLoad')
    console.log('addr:', addr)
    if (addr) {
        Interceptor.attach(addr, {
            onEnter(args) {
                console.log('JNI_OnLoad onEnter JavaVM:', args[0])
            },
            onLeave(retval) {
                console.log('JNI_OnLoad onLeave retval:', retval)
            }
        })
    }
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者荣瑟。
  • 序言:七十年代末治拿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子笆焰,更是在濱河造成了極大的恐慌劫谅,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捏检,居然都是意外死亡荞驴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門贯城,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熊楼,“玉大人,你說我怎么就攤上這事能犯■昶” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵踩晶,是天一觀的道長执泰。 經(jīng)常有香客問我,道長渡蜻,這世上最難降的妖魔是什么术吝? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮茸苇,結(jié)果婚禮上排苍,老公的妹妹穿的比我還像新娘。我一直安慰自己学密,他們只是感情好纪岁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著则果,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漩氨。 梳的紋絲不亂的頭發(fā)上西壮,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音叫惊,去河邊找鬼款青。 笑死,一個(gè)胖子當(dāng)著我的面吹牛霍狰,可吹牛的內(nèi)容都是我干的抡草。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼蔗坯,長吁一口氣:“原來是場噩夢啊……” “哼康震!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宾濒,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤腿短,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橘忱,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赴魁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钝诚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颖御。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖凝颇,靈堂內(nèi)的尸體忽然破棺而出潘拱,到底是詐尸還是另有隱情,我是刑警寧澤祈噪,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布泽铛,位于F島的核電站,受9級特大地震影響辑鲤,放射性物質(zhì)發(fā)生泄漏盔腔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一月褥、第九天 我趴在偏房一處隱蔽的房頂上張望弛随。 院中可真熱鬧,春花似錦宁赤、人聲如沸舀透。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愕够。三九已至,卻和暖如春佛猛,著一層夾襖步出監(jiān)牢的瞬間惑芭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工继找, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遂跟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓婴渡,卻偏偏與公主長得像幻锁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子边臼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容