安卓逆向2025 Frida学习之hook案例(六)

admin 2025年1月19日21:09:04评论18 views字数 2579阅读8分35秒阅读模式
接上节内容
安卓逆向2025 -- Frida学习之环境搭建
安卓逆向2025 -- Frida学习之hook案例(一)
安卓逆向2025 -- Frida学习之hook案例(二)
安卓逆向2025 -- Frida学习之hook案例(三)
安卓逆向2025 -- Frida学习之hook案例(四)
安卓逆向2025 -- Frida学习之hook案例(五)
安卓逆向2025  Frida学习之hook案例(六)
1、搜索关键字第5关,跳转到该节点
安卓逆向2025  Frida学习之hook案例(六)
2、只要这个check方法返回真即可跳转成功
安卓逆向2025  Frida学习之hook案例(六)
3、直接hook check这个函数,发现没效果,这是一个特殊的接口,继续分析getDynamicDexCheck这个函数,hook这个函数,返回值为一个类名。
安卓逆向2025  Frida学习之hook案例(六)
letFridaActivity5 = Java.use("com.example.androiddemo.Activity.FridaActivity5");FridaActivity5["getDynamicDexCheck"].implementation = function () {console.log(`FridaActivity5.getDynamicDexCheck is called`);let res=this["getDynamicDexCheck"]().$className;let result = this["getDynamicDexCheck"]();console.log(`FridaActivity5.getDynamicDexCheck result=${res}`);return result;    };
安卓逆向2025  Frida学习之hook案例(六)
4、继续分析loaddex(),函数,箭头指向的代码比较关键,简单理解为它利用 DexClassLoader 动态加载一个外部的类,并将其实例化为一个实现了 CheckInterface 接口的对象。  
安卓逆向2025  Frida学习之hook案例(六)
this.DynamicDexCheck = (CheckInterface) new DexClassLoader(    str,                                    // 动态加载的 dex 文件路径    cacheDir.getAbsolutePath(),            // 存放解压后的优化文件的缓存目录    null,                                  // 加载依赖的库文件路径(这里为 null)    getClassLoader()                       // 父类加载器,用于委托加载机制).loadClass("com.example.androiddemo.Dynamic.DynamicCheck" // 要加载的类的全限定名).newInstance();
5、通过enumerateClassLoaders函数枚举出所有加载的类,找到我们的目标dex
Java.enumerateClassLoaders({onMatchfunction (str) {console.log(str);          },onCompletefunction () {          },      });
安卓逆向2025  Frida学习之hook案例(六)
安卓逆向2025  Frida学习之hook案例(六)
6、通过下面代码,找到要动态加载的类
Java.enumerateClassLoaders({onMatchfunction (str) {try {if (str.findClass('com.example.androiddemo.Dynamic.DynamicCheck')) {console.log(str);Java.classFactory.loader = str;          }        } catch (e) {}      },onCompletefunction () {},    });
7、现在开始hook check函数
letCheckInterface = Java.use("com.example.androiddemo.Dynamic.DynamicCheck");console.log(CheckInterface)CheckInterface["check"].implementation = function () {returntrue;    };
8、完整代码如下:
functiontest2() {Java.perform(function () {letFridaActivity5 = Java.use('com.example.androiddemo.Activity.FridaActivity5',    );FridaActivity5['getDynamicDexCheck'].implementation = function () {console.log(`FridaActivity5.getDynamicDexCheck is called`);let res = this['getDynamicDexCheck']().$className;let result = this['getDynamicDexCheck']();console.log(`FridaActivity5.getDynamicDexCheck result=${res}`);return result;    };Java.enumerateClassLoaders({onMatchfunction (str) {try {if (str.findClass('com.example.androiddemo.Dynamic.DynamicCheck')) {console.log(str);Java.classFactory.loader = str;          }        } catch (e) {}      },onCompletefunction () {},    });letCheckInterface = Java.use('com.example.androiddemo.Dynamic.DynamicCheck',    );console.log(CheckInterface);CheckInterface['check'].implementation = function () {returntrue;    };  });}
9、调用该函数test2(),成功绕过
安卓逆向2025  Frida学习之hook案例(六)

· 今 日 推 荐 ·

安卓逆向2025  Frida学习之hook案例(六)

原文始发于微信公众号(逆向有你):安卓逆向2025 -- Frida学习之hook案例(六)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月19日21:09:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   安卓逆向2025 Frida学习之hook案例(六)http://cn-sec.com/archives/3645852.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息