Frida Hook So 一些操作说明

Native方法第一个参数是 JNIEnv *env 如何在Frida中获取 JNIEnv 对象呢?

Java.vm.getEnv();

如何将string类型转换jstring类型呢?

let jstring = Java.vm.getEnv().newStringUtf(str);

如何将jstring类型转string类型呢?

aes_value = Java.vm.getEnv().getStringUtfChars(result, null).readCString()

Hook So 导出函数

let method1_addr = Module.findExportByName('libxiaowei.so', 'Java_com_example_xiaoweiso_MainActivity_method01');

Hook So 非导出函数

let so_addr = Module.findBaseAddress('libxiaowei.so');
// 需要去so中找到非导出函数的地址
let encrypt_addr = so_addr.add(0x42B0);

如何在so中定义一个字符串

let cstring = Memory.allocUtf8String("xiaoweigege");

如何将c中的字符串转成js string?

ptr(result).readCString()

将函数地址定义成一个函数能在js中进行调用

let so_addr = Module.findBaseAddress('libxiaowei.so');
let encrypt_addr = so_addr.add(0x42B0);
let encrypt_fun = new NativeFunction(encrypt_addr, 'pointer', ['pointer']);
let cstring = Memory.allocUtf8String(str);
let result = encrypt_fun(cstring);

在任意apk中加载so文件

var load_model = Module.load('/data/local/tmp/libxiaowei.so');

这样操作就可以在任意地方调用so中的方法,那么我们就可以脱离apk 比如 hook 系统中 设置 来调用我们的so文件方法,达到脱离本身APK

使用示例


var load_model = Module.load('/data/local/tmp/libxiaowei.so'); function hook_method1(str) { let method1_addr = Module.findExportByName('libxiaowei.so', 'Java_com_example_xiaoweiso_MainActivity_method01'); let method1_fun = new NativeFunction(method1_addr, 'pointer', ['pointer', 'pointer', 'pointer']);
let aes_value = null Java.perform(function () {
// Java.vm.getEnv() JNIEnv 对象获取 let jstring = Java.vm.getEnv().newStringUtf(str);
let result = method1_fun(Java.vm.getEnv(), jstring, jstring); aes_value = Java.vm.getEnv().getStringUtfChars(result, null).readCString()
})
return aes_value; } function hook_method2(str) { let method1_addr = Module.findExportByName('libxiaowei.so', 'Java_com_example_xiaoweiso_MainActivity_method02'); let method1_fun = new NativeFunction(method1_addr, 'pointer', ['pointer', 'pointer', 'pointer']);
let aes_value = null Java.perform(function () {
let jstring = Java.vm.getEnv().newStringUtf(str);
let result = method1_fun(Java.vm.getEnv(), jstring, jstring); aes_value = Java.vm.getEnv().getStringUtfChars(result, null).readCString()
})
return aes_value; } function hook_encrypt(str) {
let so_addr = Module.findBaseAddress('libxiaowei.so');
let encrypt_addr = so_addr.add(0x42B0);
let encrypt_fun = new NativeFunction(encrypt_addr, 'pointer', ['pointer']);
let cstring = Memory.allocUtf8String(str);
let result = encrypt_fun(cstring); console.log(ptr(result).readCString()) } function hook_decrypt(str) { let so_addr = Module.findBaseAddress('libxiaowei.so');
let encrypt_addr = so_addr.add(0x4538);
let encrypt_fun = new NativeFunction(encrypt_addr, 'pointer', ['pointer']);
let cstring = Memory.allocUtf8String(str);
let result = encrypt_fun(cstring); console.log(ptr(result).readCString())
} function main() {
let value = hook_method1('xiaoweigege')
hook_method2(value)
} setImmediate(main)

Frida高级逆向-Hook Native(Java So)2的更多相关文章

  1. Frida高级逆向-Hook Native(Java So)

    Frida Hook Native Frida Hook Java Jni demo: function hook_java() { Java.perform(function () { const ...

  2. Frida高级逆向-Hook Java

    Frida Hook Java 层 Frida两种启动方式的区别 span 模式:frida 重新打开一个进程 frida -U -f 包名 -l js路径 --no-pause attch 模式: ...

  3. 基于frida框架Hook native中的函数(1)

    作者:H01mes撰写的这篇关于frida框架hook native函数的文章很不错,值得推荐和学习,也感谢原作者. 0x01 前言 关于android的hook以前一直用的xposed来hook j ...

  4. 使用Cydia Substrate 从Native Hook Android Java世界

    这里介绍了如何使用Cydia Substrate Hook安卓Java世界.这篇文章介绍如何从Native中Hook 安卓Java世界. 手机端配置见之前文章. 一.建立工程 建立一个Android工 ...

  5. [转]Native Java Bytecode Debugging without Source Code

    link from:http://www.crowdstrike.com/blog/native-java-bytecode-debugging-without-source-code/index.h ...

  6. frida的用法--Hook Java代码篇

    frida是一款方便并且易用的跨平台Hook工具,使用它不仅可以Hook Java写的应用程序,而且还可以Hook原生的应用程序. 1. 准备 frida分客户端环境和服务端环境.在客户端我们可以编写 ...

  7. Frida Android hook native层__system_property_get的最终方案

    记录这个问题的起因是,在hook时遇到了修改内容长度,超过原长度时,会出现显示不全的问题. 比如把nexus 5改成nexus 100,只会显示nexus 1. 所以去读了下源码 int __syst ...

  8. 利用Xposed Hook打印Java函数调用堆栈信息的几种方法

    本文博客链接:http://blog.csdn.net/QQ1084283172/article/details/79378374 在进行Android逆向分析的时候,经常需要进行动态调试栈回溯,查看 ...

  9. mongodb高级操作及在Java企业级开发中的应用

    Java连接mongoDB Java连接MongoDB需要驱动包,个人所用包为mongo-2.10.0.jar.可以在网上下载最新版本. package org.dennisit.mongodb.st ...

随机推荐

  1. MySQL的几种锁机制的使用介绍

    锁 在日常的开发过程中,为了控制线程的并发肯定会用到锁机制.对于数据库而言,锁机制就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则.当然MySQL也不例外,根据不同 ...

  2. D3之svg transform 与 css3 transform 区别与联系

    D3就不用多介绍了,在数据可视化界属于大佬级别的js库.在这里主要想记录一下在写程序期间遇到的一个问题. 如下图所示,想完成主视图在小地图上的映射,小地图的白色矩形框用来代表当前主视图可见区域,主视图 ...

  3. Redis-技术专区-帮从底层彻底吃透AOF技术原理

    AOF持久化方式 AOF持久化方式是将redis的操作日志以追加的方式写入磁盘文件中.AOF持久化是以日志的形式记录服务器所处理的每一个写.删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看 ...

  4. Mac 安装 Android commandlinetools 各种报错的问题

    https://developer.android.com/studio/releases/platform-tools commandlinetools-mac 下载地址 解压后直接运行 sdkma ...

  5. IDEA中mybatis generator使用

    1.在对应服务的pom.xml文件中添加依赖 <build> <plugins> <plugin> <groupId>org.mybatis.gener ...

  6. 聚类算法与K-means实现

    聚类算法与K-means实现 一.聚类算法的数学描述: 区别于监督学习的算法(回归,分类,预测等),无监督学习就是指训练样本的 label 未知,只能通过对无标记的训练样本的学习来揭示数据的内在规律和 ...

  7. Django的form组件基本使用——简单校验

    from django.contrib import admin from django.urls import path from app01 import views urlpatterns = ...

  8. 史上最全git命令集

    配置化命令 git config --global user.name "Your Name" git config --global user.email "email ...

  9. Python - pip 批量更新

    pip 常用命令 https://www.cnblogs.com/poloyy/p/15170968.html pip list 结合 Linux 命令 pip list 命令可以查询已安装的库,结合 ...

  10. WEB安全性测试之拒绝服务攻击

    1,认证 需要登录帐号的角色 2,授权 帐号的角色的操作范围 3,避免未经授权页面直接可以访问 使用绝对url(PS:绝对ur可以通过httpwatch监控每一个请求,获取请求对应的页面),登录后台的 ...