得来全不费工夫
在了解firda之前,我曾经接触过xposed,当时也是对这样的东西存在感到十分吃惊,Reverse Engineer的学习道路上,必不可少各种各样的工具。这些前辈们给我们留下的工具是我们工作的基础。如果说安卓应用和windows应用原本就像一个黑盒子,我们无法窥探它内部的工作,而frida和Ollydbug这些工具,就是我们打开黑盒面纱的钥匙。
我们要实现的功能:
破解vip才能使用的变声功能
付费语音包的使用
Jadx反编译,窥探APP源码,定位关键类
通过jadx反编译,找到应用包名,在Mainactivity里搜索关键词VIP,就找到了关键函数gotoBuyVIPUI

IntelliJ smalidea 插件,动态调试APP
用Android killer 拆apk后,用IntelliJ打开项目。找到我们之前找到关键函数,在这下断点

在APP上点击一个付费VIP才能使用的语音包,果然,在断点处停了下来。说明我们找对地方了,这个就是检测是否VIP的函数
改写APKsamli代码或者frida动态hook,实现vip功能的使用
由于对samli语法不熟悉,经过一番尝试无果
我选择简单粗暴的frida
以下为python注入代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import frida, sys
def on_message(message, data): if message['type'] == 'send': print("[*] {0}".format(message['payload'])) else: print(message)
with open('weiyin.js', 'r', encoding='UTF-8') as file: result = file.read() jscode = result
process = frida.get_usb_device(1).attach('com.bsqrj.numfirst') script = process.create_script(jscode) script.on('message', on_message) print('[*] Running CTF') script.load()
sys.stdin.read()
|
以下为weiyin.js 的脚本代码
1 2 3 4 5 6 7
| Java.perform(function () {
Java.use('com.xmb.voicechange.db.LocalCache').isVIP.overload('android.content.Context').implementation=function(v){ return true} })
|
注入脚本后,即可愉快使用vip功能,不过缺点是每次重启app后,都要重新注入,可惜不会samli语法啊