“”"
使用Frida对小猿口算进行hook,当PK结束时,获取上传回服务器的包,并且修改完成时间
鸣谢原作者:GitHub|Hawcett
仓库:https://github.com/Hawcett/XiaoYuanKouSuan_Frida_hook/
源码:https://github.com/Hawcett/XiaoYuanKouSuan_Frida_hook/blob/main/xyks.py
使用说明:
- 预先工作:
1.1 安装MuMu模拟器/Python
1.2 配置ADB,打开MuMu模拟器的Root权限
1.3 安装Python库:pip install frida frida-ps
1.3 安装安卓端的frida-server,在https://github.com/frida/frida/releases下载,使用ADB安装到/data/local/tmp/
sh adb connect <YOUR_DEVICE_IP>:<YOUR_DEVICE_PORT> adb root adb push /path/to/frida-server /data/local/tmp/ adb shell su chmod 777 /data/local/tmp/frida-server
- 使用
2.1 启动frida-server
sh adb connect <YOUR_DEVICE_IP> <YOUR_DEVICE_PORT> adb root adb shell su ./data/local/tmp/frida-server
2.2 修改xyks.py
的TIME_MS
值,要多少自己改,单位:毫秒
2.3 先启动小猿口算,运行本脚本,另开一个命令行窗口,执行:
sh python xyks.py
2.4 在小猿口算PK中正常做题,完成后回,秒数会被修改
“”"
TIME_MS = 1000 # 需要多少时间自己改
import json
import frida
import binascii
sc = ‘’’
function Hookr2B(){
Java.perform(function(){
let r2 = Java.use(“com.fenbi.android.leo.utils.r2”);
console.log(“XYKS r2 函数已钩住”)
r2.b.overload(“[B”).implementation = function (data) {
var String= Java.use(“java.lang.String”);
let data_ori = data
data = Bytes2HexString(data)
send(data)
let new_data
let new_data_2
var instance
recv(function (received_json_object) {
new_data = received_json_object.my_data
instance = String.$new(new_data);
new_data_2 = instance.getBytes()
}).wait();
let result = this"b";
console.log(‘参数劫持完成,即将Return’)
return result;
};
});
}
function Bytes2HexString(arrBytes) {
var str = “”;
for (var i = 0; i < arrBytes.length; i++) {
var tmp;
var num = arrBytes[i];
if (num < 0) {
//此处填坑,当byte因为符合位导致数值为负时候,需要对数据进行处理
tmp = (255 + num + 1).toString(16);
} else {
tmp = num.toString(16);
}
if (tmp.length == 1) {
tmp = “0” + tmp;
}
str += tmp;
}
return str;
}
setImmediate(Hookr2B);
‘’’
def str_to_hex_binascii(input_str):
# 将字符串编码为字节
byte_data = input_str.encode(‘utf-8’)
# 转换为十六进制
hex_output = binascii.hexlify(byte_data)
return hex_output.decode(‘utf-8’)
def my_message_handler(message, payload):
print(payload)
bytes_obj = bytes.fromhex(message[‘payload’])
string = bytes_obj.decode(‘utf-8’)
json_data = json.loads(string)
print(‘原始花费时间:’, json_data[‘costTime’])
json_data[‘costTime’] = TIME_MS
print(‘现在花费时间:’, json_data[‘costTime’])
data = json.dumps(json_data)
script.post({'type': 'send', 'my_data': data})
if name == ‘main’:
manager = frida.get_device_manager()
device = manager.get_usb_device()
session = device.attach(‘小猿口算’)
script = session.create_script(sc)
script.on(“message”, my_message_handler)
script.load()
input() # 保持程序运行
来源于https://github.com/Hawcett/XiaoYuanKouSuan_Frida_hook