frida模块

参考:

https://www.52pojie.cn/thread-1823118-1-1.html

https://www.52pojie.cn/thread-1840174-1-1.html

https://www.52pojie.cn/thread-1859820-1-1.html

环境配置

安装tool

pip install frida-tools

下载对应版本服务

https://github.com/frida/frida/releases

开启服务后在命令行输入frida-ps -U显示手机进程

启用以下命令注入hook

frida -U 进程名 -l hook脚本.js

Frida

内部类用 $ 分割

匿名内部类用 $$ 分割

HOOK方法

普通方法

通过overload来区别重载

function hookTest(){
    var demo = Java.use("com.zj.wuaipojie.Demo");
    demo.a.overload("java.lang.String").implementation = function(str){
        var ret = this.a(str);
        console.log("\na_str:" +str);
        console.log("a_ret:" +ret);
        return ret;
    }
}
function main(){
    Java.perform(function(){
        hookTest();
    });
}
setImmediate(main);

构造方法

将函数名换为$init

function hookTest(){
    var demo = Java.use("com.zj.wuaipojie.Demo");
    demo.$init.overload().implementation = function(){
        this.init();
    }
}
function main(){
    Java.perform(function(){
        hookTest();
    });
}
setImmediate(main);
HOOK变量

静态变量

function hookTest(){
    var demo = Java.use("com.zj.wuaipojie.Demo");
    demo.staticField.value = "hook_test";
    console.log(demo.staticField.value);
}
function main(){
    Java.perform(function(){
        hookTest();
    });
}
setImmediate(main);

成员变量(必须先加载类)

function hookTest() {
    var Demo = Java.use("com.zj.wuaipojie.Demo");
    Demo.$init.overload().implementation = function () {
        console.log("Demo.$init()");
        this.$init();
        this.publicInt.value = 9999;
        this.privateInt.value = 8888;
    };
}
function main() {
    Java.perform(function () {
        hookTest();
    });
}
setImmediate(main);

主动调用

静态方法

function hookTest() {
    var Demo = Java.use("com.zj.wuaipojie.Demo");
    Demo.func();
    };
}
function main() {
    Java.perform(function () {
        hookTest();
    });
}
setImmediate(main);

成员方法(必须先加载类)

function hookTest() {
    var Demo = Java.use("com.zj.wuaipojie.Demo");
    Java.choose("com.zj.wuaipojie.Demo", {
        onMatch: function (instance) {
            console.log("onMatch");
            var ret = instance.privateFunc("aaaaaaaa");
        },
        onComplete: function () {
            console.log("onComplete");
        }
    });
}
function main() {
    Java.perform(function () {
        hookTest();
    });
}
setImmediate(main);

HOOK Native

直接查找函数

function hookNative() {
    var vipLevel = Module.findExportByName("lib52pojie.so", "Java_com_zj_wuaipojie_util_SecurityUtil_vipLevel");
    Interceptor.attach(vipLevel, {
        onEnter: function (args) {
            //1读取参数(string)
            var jString = Java.cast(args[2], Java.use('java.lang.String'));
            console.log("参数:", jString.toString());
            //2读取参数(string)
            var JNIEnv = Java.vm.getEnv();
            var str = JNIEnv.getStringUtfChars(args[2], 0).readCString();
            console.log("参数:", str);
        },
        onLeave: function (retval) {
            //修改返回值(string)
            var JNIEnv = Java.vm.getEnv();
            var jstring = JNIEnv.newStringUtf("至尊会员");
            retval.replace(jstring);
        }
    });
}

基址+偏移

function hookNative() {
    var base = Module.findBaseAddress("lib52pojie.so");
    var diamondNum = base.add(0x01071C);
    Interceptor.attach(diamondNum, {
        onEnter: function (args) {         },
        onLeave: function (retval) {
            retval.replace(9999);
        }
    });
}

Hook_dlopen

function hookNative() {
    var dlopen = Module.findExportByName(null, "dlopen");
    Interceptor.attach(dlopen, {
        onEnter: function (args) {
            var so_name = args[0].readCString();
            if (so_name.indexOf("lib52pojie.so") >= 0) this.call_hook = true;
        }, onLeave: function (retval) {
            if (this.call_hook) hookJava();
        }
    });
    // 高版本Android系统使用android_dlopen_ext
    var android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext");
    Interceptor.attach(android_dlopen_ext, {
        onEnter: function (args) {
            var so_name = args[0].readCString();
            if (so_name.indexOf("lib52pojie.so") >= 0) this.call_hook = true;
        }, onLeave: function (retval) {
            if (this.call_hook) hookJava();
        }
    });
}

写数据

const filePath = "/data/user/0/com.zj.wuaipojie/test.txt";
try {
const file = new File(filePath, "w");
file.write(str);
file.flush();
file.close();
console.log(`[+] 字符串已写入 ${filePath}`);
} catch (e) {
console.error(`[!] 文件写入失败: ${e.message}`);
}

Inline hook

直接操作寄存器中的值

function inlinehook(){
    var Check = Module.getBaseAddress("lib52pojie.so").add(0x10428);
    Interceptor.attach(Check, {
        onEnter: function (args) {
            console.log("test:", this.context.x22);
            this.context.x22 = ptr(1);
            console.log("test:", this.context.x22);
        },    
        onLeave: function (retval) {
            console.log("Check ret value: " + retval);
        }
    });
}

so函数调用

function callfunc(){
    var aesAdress = Module.getBaseAddress("lib52pojie.so").add(0xE1C0);
    var aesfunc = new NativeFunction(aesAdress, "pointer", ["pointer", "pointer"]);
    var aeskey = Memory.allocUtf8String("wuaipojie0123456");
    var aesFlag = Memory.allocUtf8String("OOmGYpk6s0qPSXEPp4X31g==");
    var aesRet = aesfunc(aesFlag,aeskey);
    console.log("aesRet:" + aesRet.readCString().toString());
}

frida-trace

跟踪so

frida-trace -U "com.zj.wuaipojie" -F -i "libwuaipojie.so"

Android frida hook (学习分享)的更多相关文章

  1. 2021年正确的Android逆向开发学习之路

    2021年正确的Android逆向开发学习之路 说明 文章首发于HURUWO的博客小站,本平台做同步备份发布.如有浏览或访问异常或者相关疑问可前往原博客下评论浏览. 原文链接 2021年正确的Andr ...

  2. Android 获取浏览器当前分享页面的截屏

    Android 获取浏览器当前分享页面的截屏 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/BrowserScreenShotActivity 文中 ...

  3. Android开发该学习哪些东西?

    开篇: 本人也是众多Android开发道路上行走的一员,听了不少大神的知乎live,自己也看了不少书,也和不少前辈交流过,所以在这里分享一下Android开发应该学习的书籍以及知识,当然,也包括一些方 ...

  4. 我的Android之旅——学习、项目、心态

    本文作者: 伯乐在线 - 唐韧 .未经许可,禁止转载!欢迎分享原创到伯乐头条. 来源:唐韧 学习Android也一年多了,项目做了五六个,有大有小,有难有易.一直以来都没有好好总结过,今天周六休息,就 ...

  5. Android项目源码分享

    http://blog.csdn.net/gao_chun/article/details/47263063 Android项目源码分享 给大家分享几个Android开发项目源码,大部分功能相信可以在 ...

  6. 【干货推荐】Android开发该学习哪些东西?

    开篇: 本人也是众多Android开发道路上行走的一员,听了不少大神的知乎live,自己也看了不少书,也和不少前辈交流过,所以在这里分享一下Android开发应该学习的书籍以及知识,当然,也包括一些方 ...

  7. ElasticSearch 5学习(7)——分布式集群学习分享2

    前面主要学习了ElasticSearch分布式集群的存储过程中集群.节点和分片的知识(ElasticSearch 5学习(6)--分布式集群学习分享1),下面主要分享应对故障的一些实践. 应对故障 前 ...

  8. ElasticSearch 5学习(6)——分布式集群学习分享1

    在使用中我们把文档存入ElasticSearch,但是如果能够了解ElasticSearch内部是如何存储的,将会对我们学习ElasticSearch有很清晰的认识.本文中的所使用的ElasticSe ...

  9. android NDK 实用学习(五)-c++端调用java接口

    1,阅读此文章前请阅读前面文章,以免阅读出现障碍: android NDK 实用学习(一)-获取java端类及其类变量 android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值 ...

  10. android NDK 实用学习(三)- java端类对象的构造及使用

    1,读此文章前我假设你已经读过: android NDK 实用学习-获取java端类及其类变量 android NDK 实用学习-java端对象成员赋值和获取对象成员值 2,java端类对象的构造: ...

随机推荐

  1. Java 将 RTF 转换为Word、PDF、HTML、图片

    RTF文档因其跨平台兼容性而广泛使用,但有时在不同的应用场景可能需要特定的文档格式.例如,Word文档适合编辑和协作,PDF文档适合打印和分发,HTML文档适合在线展示,图片格式则适合社交媒体分享.因 ...

  2. Luogu P8112 [Cnoi2021] 符文破译 题解 [ 蓝 ] [ KMP ] [ 线性 dp ] [ 决策单调性 dp ]

    符文破译:KMP + dp 的好题. 暴力 dp 不难打出一个暴力 dp:设计 \(dp_i\) 表示当前前 \(i\) 位全部完成了匹配,所需的最小分割数. 转移也是简单的,我们在 KMP 的过程中 ...

  3. 图解MySQL【日志】——Binlog

    Binlog(Binary Log,归档日志) 为什么需要 Binlog? Binlog 是 MySQL 中的二进制日志,用于记录数据库的所有写操作(INSERT.UPDATE.DELETE 等) 1 ...

  4. Java中List通过Lambda实现排序

    目录 1.正常排序,1,2,3 2.倒序 3,2,1 1.正常排序,1,2,3 list=list.stream().sorted(Comparator.comparing(VipCardVo::ge ...

  5. Typecho网站内容的禁止复制和粘贴

    本教程讲JS实现网站内容的禁止复制和粘贴.另存为 1.使右键和复制失效 方法1: 在网页中加入以下代码: <script language="Javascript"> ...

  6. MybatisPlus - [05] 逻辑删除

    题记部分 一.物理删除&逻辑删除 物理删除:delete from table_name where xxx = ?; 逻辑删除:update table_name set deleted = ...

  7. 清华大学推出的5册免费的 DeepSeek 学习使用指南!

    前言 在当今这个信息洪流.技术飞速迭代的时代,DeepSeek的横空出世极大地降低了普通人利用人工智能技术的门槛.然而,尽管机遇就在眼前,仍有不少朋友面对DeepSeek感到无从下手,不知如何利用它来 ...

  8. 前端跨域方案-跨域请求代理(asp.net handler)

    现在技术开发偏向于使用统一的接口处理浏览器或者app的http请求. 大家都知道因为浏览器的同源策略的原因 js直接请求webapi 接口会有一些问题,即使做好服务器端的配置 同样会有不少的 问题   ...

  9. 【检索类型EI、Scopus】第二届智能计算与数据分析国际学术会议(ICDA 2025)

    为探讨数据科学和计算智能领域的关键问题,促进相关交流,由黄河科技学院主办的2025年第二届智能计算与数据分析国际学术会议(ICDA 2025)将于2025年8月22日-24日在中国郑州召开.本届会议拟 ...

  10. 【MATLAB习题】铰链四杆机构的运动学分析

    铰链四杆机构题目&已知数据 matlab 代码 主程序文件: function main %输入已知数据 clear; i1=101.6; i2=254; i3=177.8; i4=304.8 ...