本帖最后由 泄密无花 于 2023-4-17 16:47 编辑
0x00 前言
frida真的很方便
0x01 准备工作
1、表情包输入法_1.1.6
下载地址:https://www.wandoujia.com/apps/8282522
2、脱壳说明
App是腾讯御安全加固,需要脱壳修复
已脱壳处理过的Apk:https://t.wss.ink/f/azoth36wb0f(链接有效期23小时)
脱壳步骤简述:
1)DumpDex
环境:雷电模拟器Android 9、frida 16.0.11(Python 3.9+)、frida-dexdump
命令:frida-dexdump -U -f com.maoying.keyboard --sleep 3 -d -o (保存dex的文件路径)
2)修复
参考帖子:https://www.52hb.com/thread-57970-1-1.html
0x02 逆向分析
1、免登录
1)过滤字符串“登录”
2)找到d()为判断的逻辑,跳转进d()
3)d() Smail转Java
修改之前:
猜测箭头所指的是用户名,keyname参数也是
修改三处
第一处:
第二处:
第三处:
修改之后的Java代码:
4)修改效果
2、逆向VIP
1)过滤会员字符串
2)搜索终身会员,结果随便选,跳转到cond_5d判断
转Java代码
3)跳转进i()
4)i()转Java代码
[Java] 纯文本查看 复制代码 public static int i(Context context) {
return context.getSharedPreferences(a, 0).getInt("vip", 0);
}
结合cond_5d的判断得出:3为月度会员、2为终身会员
直接Smail修改为3即可
0x03 HOOK
1、Hook会员等级
代码:
[Python] 纯文本查看 复制代码 Java.perform(function() {
// 目标类和方法的名称
const targetClass = "f.f.a.a.j.a";
const targetMethod = "i";
// 获取目标类对象
const clazz = Java.use(targetClass);
// 获取目标方法对象
const targetMethodObj = clazz[targetMethod];
// Hook 方法并输出日志和修改返回值
targetMethodObj.overload('android.content.Context').implementation = function(context) {
console.log("Hooked method " + targetClass + "." + targetMethod);
// 在调用该方法之前保存一个指向当前对象的引用
var thisObj = this;
console.log("原始值: " + targetMethodObj.call(thisObj, context));
// 修改返回值为 1
var modified_return_value = 1;
// 输出修改后的返回值
console.log("修改值: " + modified_return_value);
return modified_return_value;
};
});
原理:
1)这段代码实现了一个静态方法 i(),它接受一个 Context 对象作为参数,并使用这个对象的 getSharedPreferences() 方法获取一个名为 a 的 SharedPreferences 对象,然后调用这个对象的 getInt() 方法,读取名为 "vip" 的键对应的值。如果不存在 "vip" 这个键,则返回默认值 0。
2)要Hook这个方法,我们需要先找到目标类的名称和方法名称。在这里,我们知道目标类的名称为 f.f.a.a.j.a,方法名称为 i。我们可以使用 Frida 提供的 Java.use() 函数获取这个类的引用,并使用它来获取目标方法的引用。
3)现在我们已经成功获取了目标方法的引用,接下来就是 Hook 目标方法。我们使用 targetMethodObj.overload('android.content.Context').implementation 来 Hook 这个方法,并将其重定向到一个回调函数中。
4)在回调函数中,我们首先输出一些日志信息,并保存当前对象的引用。然后我们使用调试器执行原始的方法调用,同时保存其返回值。
5)随后我们修改返回值为 1,并输出修改后的返回值。最后我们返回修改后的返回值,并注意要恢复寄存器的值以确保方法的正常运行。
6)这样,当目标应用程序调用 f.f.a.a.j.a.i() 方法时,我们的 Hook 将会拦截到这个调用并将其返回值修改为 1。
2、Hook结果
年度会员为1:
永久会有为2:
月度会员为3:
居然还隐藏了一个年度会员
0x04 总结
frida的脚本修改是立即生效的,不需要重启,大大方便了调试
|