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. elsa core—3.elsa 服务

    在本快速入门中,我们将介绍一个用于设置Elsa Server的最小ASP.NET Core应用程序.我们还将安装一些更常用的activities(活动),如Timer.Cron和sendmail,以能 ...

  2. linux centos7 read 命令

    2021-08-24 1. 命令简介 read 命令就是读取控制台输入,会将从键盘输入的数据分割成一个个字段依次存储在 parameter[0] .parameter[1] ......,若是没有指定 ...

  3. 类的基础语法阅读【Python3.8官网文档】

    英文官方文档: https://docs.python.org/3.8/tutorial/classes.html 中文官方文档: https://docs.python.org/zh-cn/3.8/ ...

  4. docker快速创建轻量级的可移植的容器(一)

    系列其他内容 docker快速创建轻量级的可移植的容器✓ docker&flask快速构建服务接口 docker&uwsgi高性能WSGI服务器生产部署必备 docker&gu ...

  5. C语言实现任务调度与定时器

    代码实现是在xl2tpd的源码中get到的,感觉很有意思的一段代码.基本功能就是实现定时器,时间到后从定时队列中取出,然后完成指定的任务. 1. schedule.c代码(自己添加了main函数,用来 ...

  6. Pikachu靶场通关之XSS(跨站脚本)

    一.XSS(跨站脚本)概述 Cross-Site Scripting 简称为"CSS",为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS.一般XSS可以 ...

  7. 羽夏看Win系统内核——环境搭建

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  8. POJ1741——Tree(树的点分治)

    1 /* *********************************************** 2 Author :kuangbin 3 Created Time :2013-11-17 1 ...

  9. PHP设计模式之门面模式

    门面模式,也叫外观模式.不管是门面还是外观,都是我们对外的媒介,就好像我们的脸面一样.所以,这个模式最大的特点就是要表现的"好看".怎么说呢?一堆复杂的对象调用,自己都看蒙了,特别 ...

  10. LeetCode2-链表两数和

    目录 LeetCode2-链表两数和 题目描述 示例提示 经验教训 参考正解 题目描述 示例提示 经验教训 链表题的判空条件不是万能的,有时候示例会极其复杂,根本难以通过判空来区分不同情况. /** ...