Frida学习笔记(3):菜鸟级安卓实战


使用《教我兄弟学Andriod逆向》系列教程第三篇的 APP 来练习,用 Frida 实现内购破解。

把 APK 拖到 JEB3.7 中,搜索购买失败,定位目标代码。

搜索结果

可以看到是 payResultFalse 负责购买失败的相关逻辑,而 payResultSuccess 则实现了购买成功时的逻辑。

这两个函数都是无入参无返回值的,那么破解方式就很简单了,直接把 payResultFalse 的逻辑改成调用 payResultSuccess 即可。

开搞,写 JS 脚本:

Java.performNow(function () {
  console.log('fucking perform');
  var MymmPay = Java.use('com.mydefinemmpay.tool.MymmPay');
  var payResultFalse = MymmPay.payResultFalse;
  payResultFalse.implementation = function () {
    console.log('fucking false');
    this.payResultSuccess();
  };
});

打开模拟器,安装好 APK。

开一个 cmd 窗口,连接到模拟器 shell 并启动 frida 服务:

adb shell
./data/local/frida/frida-server

再开一个 cmd 窗口,设置 TCP 转发,然后通过 frida 启动 APP:

adb forward tcp:27042 tcp:27042
frida -U -f com.mf.xxyzgame.wpp.game.hlqsgdzz.huawei --no-pause

然而我发现游戏会卡在主页面,一直播放音乐但点击按钮会无响应。

没办法,用 Python 吧:

import frida, sys

jscode = """
Java.perform(function () {
  console.log('fucking perform');
  var MymmPay = Java.use('com.mydefinemmpay.tool.MymmPay');
  var payResultFalse = MymmPay.payResultFalse;
  payResultFalse.implementation = function () {
    console.log('fucking false');
    this.payResultSuccess();
  };
});
"""

process = frida.get_remote_device().attach('com.mf.xxyzgame.wpp.game.hlqsgdzz.huawei')
script = process.create_script(jscode)
script.load()

这次成功了,点击购买后直接获得道具:

购买成功-模拟器

Python 端也收到了 console.log 的打印:

购买成功-cmd

总结一下经验,直接通过命令行使用 frida-java-bridge 不如使用 Python 来得靠谱,以后老老实实用 Python。


文章作者: yuanbug
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yuanbug !
评论
  目录