美文网首页
frida hook so文件

frida hook so文件

作者: 王镇_ee87 | 来源:发表于2021-08-30 10:21 被阅读0次

参考

so源码

#include <string.h>
#include <jni.h>
#include"test.h"

jstring JNICALL Java_com_example_mi_demoso_JNITest_getStringFromJNI(JNIEnv* env, jobject jo)
{
    char str[] = "x HelloWorld from JNI12345!";
    int c = test_add(97,1);
    str[0] = (char)c;
    return (*env)->NewStringUTF(env, str);
}

int test_add(int a,int b){
    return a+b;
}

文件名对应的文件偏移地址

image.png

上图可以看到:在导出函数窗口可以直接看到函数"test_add"的偏移地址和函数名(这里可以通过函数名或者地址进行hook),非导出函数只能通过地址hook;这里我们用地址hook的方法(图中表明hook的函数偏移为0x00000680,函数地址 = so基地址 + 函数偏移, so基地址在/proc/<pid>/maps中可查看)

image.png
import frida
import sys

jscode = """
Java.perform(function(){
    var str_name_so = "libjnitest.so";    //需要hook的so名
    var n_addr_func_offset = 0x00000680;         //需要hook的函数的偏移
    var n_addr_so = Module.findBaseAddress(str_name_so); //加载到内存后 函数地址 = so地址 + 函数偏移
    var n_addr_func = parseInt(n_addr_so, 16) + n_addr_func_offset;
    var ptr_func = new NativePointer(n_addr_func);
    //var ptr_func = Module.findExportByName("libjnitest.so","test_add") //对函数名hook

    Interceptor.attach(ptr_func,{ 
        //onEnter: 进入该函数前要执行的代码,其中args是传入的参数,一般so层函数第一个参数都是JniEnv,第二个参数是jclass,从第三个参数开始是我们java层传入的参数
        onEnter: function(args) {
            send("Hook start");
            send("args[2]=" + args[2]); //第一个传入的参数
            send("args[3]=" + args[3]); //第二个参数
        },
        onLeave: function(retval){ //onLeave: 该函数执行结束要执行的代码,其中retval参数即是返回值
            send("return:"+retval); //返回值
            retval.replace(100); //替换返回值为100
        }
    });
});
"""
def printMessage(message,data):
    if message['type'] == 'send':
        print('[*] {0}'.format(message['payload']))
    else:
        print(message)

process = frida.get_remote_device().attach('com.example.testso') #进程名
script = process.create_script(jscode)
script.on('message',printMessage)
script.load()
sys.stdin.read()

相关文章

  • frida hook so文件

    参考[https://blog.csdn.net/hao5335156/article/details/11347...

  • frida的几个常用工具

    1、hook native so的工具:frida_hook_libart https://github.com/...

  • 2020-05-17

    dex脱壳; frida hook libart.so通过DeFile::DexFile或者DexFile::...

  • frida常用api

    Frida 常用模块API: Java 模块:Hook Java 层的类 方法 相关 Module 模块:处理so...

  • frida hook so简单尝试

    需求: meiyanxiangji登录界面, 利用账密登录确认手机号是否是注册用户 一, 查找参数位置 看到只有s...

  • 在Android上跑Python+Frida的Hook程序

    引文: Frida是个轻量级so级别的hook框架,它可以帮助逆向人员对指定的进程的so模块进行分析。它主要提供了...

  • 某瓣app _sig 分析

    frida hook js代码

  • frida native hook

    本篇介绍 frida 也支持hook native,本篇看下如何hook native hook native函数...

  • frida hook native / frida hook s

    frida hook native 大家好,我是王铁头 一个乙方安全公司搬砖的菜鸡持续更新移动安全,iot安全,编...

  • Frida Hook

    - Hook Dlopen - Java堆栈打印 - Native堆栈打印 - HookJava中的loadLib...

网友评论

      本文标题:frida hook so文件

      本文链接:https://www.haomeiwen.com/subject/ilbniltx.html