《安卓逆向这档事》十六、是时候学习一下Frida一把梭了(终)

查看 174|回复 11
作者:liujufeng2023   


题外话(盗课后续)
吃瓜地址:https://www.52pojie.cn/thread-1854492-1-1.html
盗版课程地址:https://www.mashibing.com/live/2520



PS:感谢北京金诚同达(沈阳)律师事务所-黄律师一直无偿帮我解疑
吾爱破解论坛官方B站号:https://space.bilibili.com/544451485
我的B站号:https://space.bilibili.com/337859280
《安卓逆向这档事》视频教程地址:https://www.bilibili.com/video/BV1wT411N7sV
教程开源地址:https://github.com/ZJ595/AndroidReverse
一、课程目标
1.了解Frida-Native-Hook读写、主动调用
2.了解常见的frida_trace工具
3.了解控制流混淆对抗新思路
二、工具
1.教程Demo(更新)
2.jadx-gui
3.VS Code
4.jeb
三、课程内容
1.Frida写数据
//一般写在app的私有目录里,不然会报错:failed to open file (Permission denied)(实际上就是权限不足)
var file_path = "/data/user/0/com.zj.wuaipojie/test.txt";
var file_handle = new File(file_path, "wb");
if (file_handle && file_handle != null) {
        file_handle.write(data); //写入数据
        file_handle.flush(); //刷新
        file_handle.close(); //关闭
}
2.Frida_inlineHook与读写汇编
什么是inlinehook?
Inline hook(内联钩子)是一种在程序运行时修改函数执行流程的技术。它通过修改函数的原始代码,将目标函数的执行路径重定向到自定义的代码段,从而实现对目标函数的拦截和修改。
简单来说就是可以对任意地址的指令进行hook读写操作
常见inlinehook框架:
Android-Inline-Hook
whale
Dobby
substrate
PS:Frida的inlinehook不是太稳定,崩溃是基操,另外新版的frida兼容性会比较好
function inline_hook() {
    var soAddr = Module.findBaseAddress("lib52pojie.so");
    if (soAddr) {
        var func_addr = soAddr.add(0x10428);
        Java.perform(function () {
            Interceptor.attach(func_addr, {
                onEnter: function (args) {
                    console.log(this.context.x22); //注意此时就没有args概念了
                    this.context.x22 = ptr(1); //赋值方法参考上一节课
                },
                onLeave: function (retval) {
                }
            }
            )
        })
    }
}
[ol]
  • 将地址的指令解析成汇编
    var soAddr = Module.findBaseAddress("lib52pojie.so");
    var codeAddr = Instruction.parse(soAddr.add(0x10428));
    console.log(codeAddr.toString());
  • Frida Api
    arm转hex
    var soAddr = Module.findBaseAddress("lib52pojie.so");
    var codeAddr = soAddr.add(0x10428);
    Memory.patchCode(codeAddr, 4, function(code) {
    const writer = new Arm64Writer(code, { pc: codeAddr });
    writer.putBytes(hexToBytes("20008052"));
    writer.flush();
    });
    function hexToBytes(str) {
    var pos = 0;
    var len = str.length;
    if (len % 2 != 0) {
        return null;
    }
    len /= 2;
    var hexA = new Array();
    for (var i = 0; i
    [/ol]
    3.普通函数与jni函数的主动调用
    nativefunction
    [table]
    [tr]
    [td]数据类型[/td]
    [td]描述[/td]
    [/tr]
    [tr]
    [td]void

    函数, 地址

  • nis415   

    一段时间没看,更新了好多
    懒教教主小阿七   

    终于等到更新了
    阿清   

    正老师更新真勤快,点个赞。
    话说盗课的玩意举报有后续吗,待会那家伙又来偷课咋整
    赵世哲   

    帅哥哥 能不能把工具都介绍下使用方法   有的app 不是一开始就加载so的 比如要进入到某个页面时候才把so加载进去的 希望能教教
    jnitrace        老牌,经典,信息全,携带方便        jnitrace
    jnitrace-engine        基于jnitrace,可定制化        jnitrace-engine
    jtrace        定制方便,信息全面,直接在_agent.js或者_agent_stable.js 里面加自己的逻辑就行        jtrace
    hook_art.js        可提供jni trace,可以灵活的增加你需要hook的函数        hook_art.js
    JNI-Frida-Hook        函数名已定义,方便定位        JNI-Frida-Hook
    findhash        ida插件,可用于检测加解密函数,也可作为Native Trace库        findhash
    Stalker        frida官方提供的代码跟踪引擎,可以在Native层方法级别,块级别,指令级别实现代码修改,代码跟踪        Stalker
    sktrace        类似 ida 指令 trace 功能        sktrace
    frida-qbdi-tracer        速度比frida stalker快,免补环境        frida-qbdi-tracer   
    disappointed   


    jinyufan 发表于 2024-2-13 21:37
    后续还会更新吗

    最近会更
    15137306816   

    视频晚点上传
    sffool   

    前排支持
    abszqd   

    学习学习
    disappointed   

    继续跟正己老师学frida
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部