0%

安卓逆向一款变声器,frida首战告捷

得来全不费工夫

在了解firda之前,我曾经接触过xposed,当时也是对这样的东西存在感到十分吃惊,Reverse Engineer的学习道路上,必不可少各种各样的工具。这些前辈们给我们留下的工具是我们工作的基础。如果说安卓应用和windows应用原本就像一个黑盒子,我们无法窥探它内部的工作,而frida和Ollydbug这些工具,就是我们打开黑盒面纱的钥匙。

我们要实现的功能:

破解vip才能使用的变声功能

付费语音包的使用

Jadx反编译,窥探APP源码,定位关键类

通过jadx反编译,找到应用包名,在Mainactivity里搜索关键词VIP,就找到了关键函数gotoBuyVIPUI

image-20220125234730911

IntelliJ smalidea 插件,动态调试APP

用Android killer 拆apk后,用IntelliJ打开项目。找到我们之前找到关键函数,在这下断点

image-20220125235703838

在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:#打开js脚本文件
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语法啊