App逆向Frida--hook

一、引言

做爬蟲的朋友,經常會遇到逆向app的場景,大多數app通過反編譯,然後硬擼代碼,不過效率很低,因爲沒辦法像js一樣動態調試加斷點得出傳遞的參數與返回的結果。不過運用frida 實現hooke可以用一個新的函數替代原來的函數,在這個新的函數中你可以通過自定義實現調試拿取你想要的數據。

二、Frida簡介

  • Frida是一個動態代碼檢測工具箱。
  • 它使您可以將JavaScript片段或自己的庫片段注入Windows,macOS,GNU /Linux,iOS,Android和QNX上的本機應用程序中。
  • Frida還提供了一些基於Frida API的工具。

三、Frida安裝

3.1 根據Frida官網記載,可以通過pyhton,pip下載,如下
在這裏插入圖片描述

3.2 使用pip命令下載

 pip install frida-tools

3.3 也可以手動從Frida的GitHub版本頁面中獲取
3.4 安裝AndroidSDK(省略…後期補上)
3.5 配置模擬器(推薦可以用夜深模擬器)
3.5 配置Frida-server(省略…後期補上)

四、實現Hook

4.1 Frida官網有一個猜拳小遊戲的app例子:CTF 2015 APK
4.2 安裝apk到模擬器,如下所示
在這裏插入圖片描述
4.3 python代碼

import frida, sys


def on_message(message, data):
    if message['type'] == 'send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)


jscode = open("1.js","r",encoding="utf-8").read()



process = frida.get_remote_device().attach('com.example.seccon2015.rock_paper_scissors')

"""注入"""
script = process.create_script(jscode)
script.on('message', on_message)
print('[*] Running CTF')
script.load()
"""是設置消息傳出時的回調"""
sys.stdin.read()

4.4 js代碼

/**
 * Java.perform
 * 確保當前線程已經連接VM
 * **/
Java.perform(function () {
    // Function to hook is defined here
    var MainActivity = Java.use('com.example.seccon2015.rock_paper_scissors.MainActivity');   //Java.use 指向某個類的指針,參數中com.example.seccon2015.rock_paper_scissors.MainActivity就是我i們需要HOOK的哪個類

    // Whenever button is clicked

    //
    /**
     * Call the original onClick handler
     * 思就是Hook前面獲取到的類中的onClick方法,後面跟着的賦值函數的部分,函數的參數爲對應要Hook方法的參數,
     * 內部執行的部分就是在對應方法被調用時所執行的代碼,
     * 這裏它是先打了一個onClick日誌,
     * 然後調用了原始方法(如果不調用的話原始方法不會被執行),
     * 接着它將m、n、cnt(變量具體含義請自行反編譯APP後查看代碼)的值做了修改,
     * 最後,它又打了一個攜帶着cnt變量值的日誌。
     * **/
    var onClick = MainActivity.onClick;
    onClick.implementation = function (v) {
        // Show a message to know that the function got called
        send('onClick');


        onClick.call(this, v);

        // Set our values after running the original onClick handler
        this.m.value = 0;
        this.n.value = 1;
        this.cnt.value = 999;

        // Log to the console that it's done, and we should have the flag!
        console.log('Done:' + JSON.stringify(this.cnt));
    };

    console.log('Done:'+name)
});

4.5 hook結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章