Android逆向技术53——frida stalker追踪jni函数调用

admin 2024年5月19日02:56:06评论16 views字数 3931阅读13分6秒阅读模式

Android逆向技术53——frida stalker追踪jni函数调用

背景

frida stalker简单实用。使用这个工具来追踪jin函数的调用。

环境

macOS(win也可以)

Ida7.0,其他版本应该也可以。

Android12,root。

frida 16.0.9

Python2.7(3也可以)

测试APP编写

由于第一次使用,使用自己编写的APP来跟踪,自己编写的情况下知道逻辑,在验证的时候也方便。

  1. std::string get_author() {
        // 获取当前时间
        time_t now = time(0);
        tm *ltm = localtime(&now);
        // 格式化时间
        std::stringstream ss;
        ss << ltm->tm_year + 1900 << "-" << ltm->tm_mon + 1 << "-" << ltm->tm_mday;
        std::string formattedDate = ss.str();
        formattedDate += ", cat";
        return formattedDate;
    }

    std::string get_author_desc() {
        char value[PROP_VALUE_MAX];
        __system_property_get("ro.hardware", value);
        std::string hardware = value;
        return hardware;
    }

    extern "C" JNIEXPORT jstring JNICALL
    Java_com_cat_stalker_MainActivity_stringFromJNI(
            JNIEnv *env,
            jobject /* this */)
     
    {
        std::string hello = "Hello from C++n author: ";
        // 获取作者信息
        hello += get_author();
        // 描述信息
        hello += "ndesc: ";
        hello += get_author_desc();
        return env->NewStringUTF(hello.c_str());
    }

以上就是APP的逻辑。

1、点击按钮调用stringFromJNI,这个方法调用了2个函数,get_authorget_author_desc

2、效果是点击之后,获取当前时间返回,获取当前主板信息返回。

Android逆向技术53——frida stalker追踪jni函数调用
Android逆向技术53——frida stalker追踪jni函数调用

得到so中的函数导出符号和地址

把APP解压,在lib中得到libstalker.so导入ida中,so解析完成之后,导入Python脚本,打印函数地址和符号。

Android逆向技术53——frida stalker追踪jni函数调用

选择Script file

Android逆向技术53——frida stalker追踪jni函数调用

脚本的内容是:(Python2脚本)

  1. import idautils
    import idc
     
    func_addr = []
    func_name = []
    for i in idautils.Functions():
        func_addr.append(i)
        func_name.append(idc.get_func_name(i))

    for i in func_addr:
        addr_str = hex(i)[:-1] if hex(i).endswith('L') else hex(i)
        print("{}, ".format(addr_str)),
    print('')
    for i in func_name:
        print(""{}", ".format(i)),

选择脚本之后等待控制台输出地址和符号完成。

Android逆向技术53——frida stalker追踪jni函数调用

停止输出就表示获取完成了。

frida stalker跟踪so中的函数调用

untitled.js

  1. // 把上面符号和地址放数组中,so名字根据自己情况来写
    var func_addr = []
    var func_name = []
    // so名字
    var so_name = "libstalker.so"
    function hook_dlopen(soName = '') {
        Interceptor.attach(Module.findExportByName(null, "android_dlopen_ext"),
            {
                onEnter: function (args) {
                    var pathptr = args[0];
                    if (pathptr !== undefined && pathptr != null) {
                        var path = ptr(pathptr).readCString();
                        if (path.indexOf(soName) >= 0) {
                            this.is_can_hook = true;
                            console.log("android_dlopen_ext");
                        }
                    }
                },
                onLeave: function (retval) {
                    if (this.is_can_hook) {
                        var times = 1;
                        var module = Process.getModuleByName(so_name);
                        this.pid = Process.getCurrentThreadId();
                        console.log("start Stalker!");
                        Stalker.follow(this.pid,{
                            events:{
                                call:false,
                                ret:false,
                                exec:false,
                                block:false,
                                compile:false
                            },
                            onReceive:function(events){
                            },
                            transform: function (iterator) {
                                var instruction = iterator.next();
                                do{
                                    if (func_addr.indexOf(instruction.address - module.base) != -1){
                                        console.log("call" + times+ ":" + func_name[func_addr.indexOf(instruction.address - module.base)])
                                        times=times+1
                                    }
                                    iterator.keep();
                                } while ((instruction = iterator.next()) !== null);
                            },
     
                            onCallSummary:function(summary){
     
                            }
                        });
                        console.log("Stalker end!");
                    }
                }
            }
        );
    }
    setImmediate(hook_dlopen, so_name)

frida启动脚本

  1. frida --f com.cat.stalker -l untitled.js
Android逆向技术53——frida stalker追踪jni函数调用
Android逆向技术53——frida stalker追踪jni函数调用
Android逆向技术53——frida stalker追踪jni函数调用

对比ida中符号

Android逆向技术53——frida stalker追踪jni函数调用

能对上。从打印的调用顺序也能对上源码顺序。

apk样本在安全后厨星球获取

Android逆向技术53——frida stalker追踪jni函数调用

参考:https://bbs.kanxue.com/thread-278647.htm

原文始发于微信公众号(安全后厨):Android逆向技术53——frida stalker追踪jni函数调用

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月19日02:56:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Android逆向技术53——frida stalker追踪jni函数调用https://cn-sec.com/archives/2026467.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息