接到一个需求, 需要app内部的题库, 通过抓包发现题目和选项返回的全是加密,jadx编译了一下,没有找到具体的解密地址,所以使用frida hook一下可以直接获取解密后数据
jadx寻找数据地址bean
- 使用jadx反编译找到保存数据的bean
- bean 装填地址
- QuestionBean
进行 frida hook
import frida
import sys
rdev = frida.get_remote_device()
process = rdev.enumerate_processes()#获取手机所有进程
session = rdev.attach("xxxx")
script_js = """
console.log("start");
var List = Java.use('java.util.ArrayList');
Java.perform(function(){
var k = Java.use("com.lanjiyin.lib_model.util.TransUtils"); //hook 类名
console.log("Hook start");
k.onlineQuestionBeanToQuestionBean.implementation = function(a,b,c,d,e){ //onlineQuestionBeanToQuestionBean 方法名
var abc = this.onlineQuestionBeanToQuestionBean(a,b,c,d,e) // 调用onlineQuestionBeanToQuestionBean 返回bean
send(abc.getAnswer())
send(abc.getTitle())
var ArrayList = Java.use('java.util.ArrayList');
var ArrayList = ArrayList.$new(abc.getOption());
for(var i =0; i<ArrayList.size(); i++){
var opt = Java.cast(ArrayList.get(i), Java.use("com.lanjiyin.lib_model.bean.tiku.OptionBean")) //循环每个题目的选项
send(opt.getValue())
}
return abc
}
});
"""
def on_message(message, data):
print(message)
script = session.create_script(script_js)
script.on("message", on_message)
script.load()
sys.stdin.read()