泄密无花 发表于 2023-5-9 18:03

安卓逆向实例 - 免费追书【Frida 全功能VIP】

0x00 前言

摸鱼一贴{:5_187:}


0x01 准备

免费追书:com.mianfeizs.book
下载地址:https://www.wandoujia.com/apps/7630647

0x02 逆向分析

定位方法:搜索isVip()
划重点(需要分析的方法都在这个类):com.chineseall.dbservice.entity.AccountData
1、isValidityVip
1)Java 代码

2)Hook 代码

2、isVip
1)Java 代码

2)Hook 代码

3、isCowCardVip
1)Java 代码

2)Hook 代码

4、getChargeVipDate
1)Java 代码

2)Hook 代码

5、代码原理
1)首先,使用Java.perform函数包装hook代码,确保在Java虚拟机中执行
Java.perform()
2)然后,使用Java.use函数获取目标类的引用,替换成实际的类路径
var clazz = Java.use("com.chineseall.dbservice.entity.AccountData");
3)接下来,使用implementation属性替换被hook函数的实现。在新的实现中,打印一条日志并将返回值result,按需求设置返回值
4)然后,打印出旧的返回值和新的返回值

6、Hook结果


0x03 代码优化
1、使用Java.perform函数包装hook代码,确保在Java虚拟机上下文中执行
2、使用Java.use函数获取目标类的引用,替换成实际的类路径
3、定义一个名为hooks的对象,用于存储要hook的方法和替换的返回值。对象的属性名表示要hook的方法名,属性值表示要替换的返回值
4、使用for循环遍历hooks对象,分别调用hookMethod函数进行hook
5、在hookMethod函数中,使用eval函数动态生成hook代码,并使用methodName和newValue参数替换相应的值
6、调用hookMethod函数,分别hook目标类中的方法,并将返回值替换为指定的值

Java.perform(function() {
    var clazz = Java.use("com.chineseall.dbservice.entity.AccountData");

    var hooks = {
      "isValidityVip": true,
      "isVip": true,
      "isCowCardVip": true,
      // "getTopShieldAd": 0,
      // "getShieldAd": 0,
      // "isShieldAd" : true,
      "getChargeVipDate": 4102358400000 // 2099-12-31的时间戳
    };

    for (var methodName in hooks) {
      hookMethod(methodName, hooks);
    }

    function hookMethod(methodName, newValue) {
      var method = "clazz." + methodName + ".implementation = function() { \
            console.log(\"" + methodName + " hooked\"); \
            console.log(\"" + methodName + " OldValue: \" + result); \
            var result = " + newValue + "; \
            console.log(\"" + methodName + " NewValue: \" + result); \
            return result; \
      }";
      eval(method);
    }
});


0x04 总结

基本上优化后代码可以作为一个通用的基础模板了,还是需要多写代码啊{:5_184:}

sjtkxy 发表于 2023-5-10 05:02

页: [1]
查看完整版本: 安卓逆向实例 - 免费追书【Frida 全功能VIP】