看了下上面的讨论,求助千问大师傅,弄了一个frida脚本。现在只需利用autox.js脚本在索引页点击词条来模拟查词,就能得到html内容了。 脚本会自动以 {uwid}.html
格式将html写入应用私有目录。
Java.perform(function () {
var targetClass = "cn.dictcn.android.digitize.module.dict.ui.WordPageFragment$d";
var dictDataClassName = "cn.dictcn.android.digitize.pojo.DictData";
var WordPageFragmentD = Java.use(targetClass);
var File = Java.use("java.io.File");
var FileWriter = Java.use("java.io.FileWriter");
var JString = Java.use("java.lang.String");
console.log("[*] Hooking invokeSuspend in class: " + targetClass);
WordPageFragmentD.invokeSuspend.implementation = function (param) {
if (param !== null && typeof param === 'object') {
try {
var className = param.getClass().getName();
// 只处理 DictData 类型
if (className === dictDataClassName) {
var fieldList = param.getClass().getDeclaredFields();
var uwid = null;
var wordData = null;
for (var i = 0; i < fieldList.length; i++) {
var field = fieldList[i];
field.setAccessible(true);
var name = field.getName();
var value = field.get(param);
if (name === "uwid" && value !== null && value.toString) {
uwid = value.toString();
} else if (name === "wordData" && value !== null && value.toString) {
wordData = value.toString();
}
}
if (uwid && wordData) {
// 构建文件路径
var dirPath = "/data/user/0/cn.dictcn.android.digitize.wys_lwddgjyycd_8027/files/";
var filePath = dirPath + uwid + ".html";
// 创建目录(如果不存在)
var dir = File.$new(dirPath);
if (!dir.exists()) {
dir.mkdirs();
}
// 将 JS 字符串转为 Java String
var javaWordData = JString.$new(wordData);
// 写入文件
var writer = FileWriter.$new(filePath);
writer.write(javaWordData, 0, javaWordData.length());
writer.close();
}
}
} catch (e) {
console.error("[ERROR] 提取字段失败:", e.message);
}
}
return this.invokeSuspend(param);
};
});
看前面讨论,说朗文这本词典在模拟器上打不开。我在mumu上测试,可以在模拟器上使用。
图片、例句发音都可以从html里提取到明文地址。
没购买这本词典,只能查几个词体验了一下,暂未发现问题。如果有效的话,通杀haidi的词典。
示例html:
587741461.7z (1dianji