吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 15037|回复: 28
收起左侧

[Android 原创] frida学习笔记3--hook so中的方法

  [复制链接]
younghare 发表于 2020-9-9 17:55
hook so 常用工具
SubstrateCydia-需root
frIDA--需root :Frida是一款基于Python + JavaScript的Hook与调试框架。从Java层到Native层的Hook无所不能。我们分析app的参数加密的时候,经常使用他来帮助分析我们分析调试。
VA系列-非root(VA、VXP、SandVXposed)

frida方式hook材料准备
  • heibaobao.apk
  • jadx
  • ida
  • root手机(小米4- androdi6.0)
  • frida环境

目标:
通过静态分析,学会使用frida对so 函数的hook,替换或更改返回值。


静态分析
jadx打开heibaobao.apk

jadx打开heibaobao.jpg


myJNI中check声明.jpg

myJNI->check 实现在libJniTest.so中
[Asm] 纯文本查看 复制代码
public native String check(Object obj, String str, String str2);



ida打开libJniTest.so(解压apk中得到)

ida打开libJniTest.so.jpg


[C] 纯文本查看 复制代码
int __fastcall Java_demo2_jni_com_myapplication_myJNI_check(_JNIEnv *a1, int a2, int a3, int a4, int a5)



其实check函数包括了一下签名校验,如果签名不一致,则杀死进程,不过我们这里的目的不是采用回编译修改so或修改arm指令方式过签名校验。
我们这里其实就是想打印check方法的输出参数;并修改返回值


frida hook 该函数

基本步骤
frida环境准备-pc+手机端(略)
ida查看其偏移地址
获取libJniTest内存地址
获取或计算Java_demo2_jni_com_myapplication_myJNI_check的绝对地址

ida 查看函数的偏移地址,并记录在下来(text:00000EB8)备用

ida中查看check的偏移地址.jpg


fridia脚本

编写hook_libJniTest_check.js脚本

[JavaScript] 纯文本查看 复制代码
function hook_myJNI_check(){
        // 获取 So 地址
        var libJniTest_addr = Module.findBaseAddress("libJniTest.so");
    if (libJniTest_addr) {
        var myapplication_myJNI_check = Module.findExportByName("libJniTest.so", "Java_demo2_jni_com_myapplication_myJNI_check");
        console.log("Java_demo2_jni_com_myapplication_myJNI_check 地址:", myapplication_myJNI_check);
    }

        send("libJniTest.so地址:" + libJniTest_addr);
        //未导出的函数我们需要手动的计算出函数地址,然后将其转化成一个NativePointer的对象然后进行hook操作
        // 函数地址 = so地址.add(偏移地址 + 1)  // 是否+1 取决于cpu平台型号
        //thumb和arm指令的区分,地址最后一位的奇偶性来进行标志,所以这里还需加1
        var myJNI_check = libJniTest_addr.add(0x0EB8+1)  // 0x 代表 16进制   text:00000EBC
        send('myJNI->check地址:'+myJNI_check)


        // hook 这个地址
        // hook 函数不需要写参数类型、参数个数
        Interceptor.attach(myJNI_check, {
                // 进入函数前Hook
                onEnter: function(args){
                    console.log("Java_demo2_jni_com_myapplication_myJNI_check 进来:");  //

                    console.log("参数4--密码:", args[4],"这里是jstring 的地址,所有打印该参数是需要转换为Str.");
                    console.log("参数3--用户:", jstring2Str(args[3]));
                    console.log("参数4--密码:", jstring2Str(args[4]));

                    send(args[4])



                },
                // 完成函数hook, retval是返回值
                onLeave: function(retval){
                    console.log("Java_demo2_jni_com_myapplication_myJNI_check 离开:");  //
                    //retval.replace("恭喜你,这是你要的返回");

                    send(retval);
                    console.log("函数返回old值:", jstring2Str(retval));
                    //构造env,然后调用env.newStringUtf创建jstring (想知道env有哪些js方法可调用,看查看frida-java-master/lib/env.js 源码)
                    var env = Java.vm.getEnv();
                    var jstring = env.newStringUtf("frida hook native 你要的jstring");
                    retval.replace(ptr(jstring));//修改返回值
                    console.log("函数返回new值:", jstring2Str(retval));
                }
            });
}

function jstring2Str(jstring) { //从frida_common_funs.js中copy出来
   var ret;
   Java.perform(function() {
       var String = Java.use("java.lang.String");
       ret = Java.cast(jstring, String);//jstring->String
   });
   return ret;
}



function main() {
    hook_myJNI_check();
}

setImmediate(main);




运行脚本

frida -U --no-pause -f demo2.jni.com.myapplication -l hook_libJniTest_check.js
frida hook so函数后的日志与界面


frida运行界面.jpg



app结果提示.jpg


frida常用脚本
这里仅提供截图,大部分javascritpy脚本都来自github,可通过名字去github搜索
frida常用脚本.jpg
frida常用脚本.jpg

免费评分

参与人数 14威望 +1 吾爱币 +34 热心值 +11 收起 理由
清海小哥 + 1 + 1 热心回复!
嘛哩嘛哩轰 + 1 + 1 谢谢@Thanks!
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
AyangLe + 1 我很赞同!
张小凡。 + 1 + 1 热心回复!
ae_86_110 + 1 + 1 热心回复!
yiwai2012 + 1 我去 这么多常用脚本 求地址
涛之雨 + 3 + 1 马克,有空研究,感谢
56598006 + 1 谢谢@Thanks!
fei8255 + 1 + 1 谢谢@Thanks!
chinawolf2000 + 1 + 1 热心回复!
芽衣 + 1 不错的帖子
正己 + 2 + 1 用心讨论,共获提升!
风绕柳絮轻敲雪 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Light紫星 发表于 2020-9-9 23:19
正己 发表于 2020-9-9 19:57
大佬能否出一期关于aes的hook出key的教程?最近也在研究frida,遇到aes的无从下手

找到加解密的方法,然后直接hook那个方法不就可以了
涛之雨 发表于 2020-9-10 00:28
正己 发表于 2020-9-9 19:57
大佬能否出一期关于aes的hook出key的教程?最近也在研究frida,遇到aes的无从下手

一般的aes都是用的库吧?
直接hook那个方法不就行了?
绫音 发表于 2020-9-9 18:36
yc0205 发表于 2020-9-9 18:45
学习一下  感谢楼主
正己 发表于 2020-9-9 19:57
大佬能否出一期关于aes的hook出key的教程?最近也在研究frida,遇到aes的无从下手
Andy0214 发表于 2020-9-10 09:26
楼主分享一下frida常用脚本呗
fjangxuexi 发表于 2020-9-10 09:36
高手!好好学习膜拜一下
wangxd 发表于 2020-9-10 10:10
高手!好好学习膜拜一下
KingXL 发表于 2020-9-10 10:17
学习一波。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-23 01:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表