[Python] 纯文本查看 复制代码 Java.perform(function () {
var KeyStore = Java.use("java.security.KeyStore");
var FileOutputStream = Java.use("java.io.FileOutputStream");
var InputStream = Java.use("java.io.InputStream");
var File = Java.use("java.io.File");
var Environment = Java.use("android.os.Environment");
var IOException = Java.use("java.io.IOException");
var String_class = Java.use("java.lang.String");
// 创建一个帮助函数来将 InputStream 保存到文件
function saveInputStreamToFile(inputStream, filePath) {
var outputStream = null;
var buffer = Java.array('byte', 1024);
var bytesRead;
try {
outputStream = FileOutputStream.$new(filePath);
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.flush();
} catch (e) {
if (!(e instanceof IOException)) {
throw e;
}
console.error("Error saving file: " + e.message);
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (e) {
if (!(e instanceof IOException)) {
throw e;
}
console.error("Error closing output stream: " + e.message);
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (e) {
if (!(e instanceof IOException)) {
throw e;
}
console.error("Error closing input stream: " + e.message);
}
}
}
}
// 拦截 KeyStore.load 方法
KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (inputStream, password) {
var text = String_class.$new(password);
console.log("Password: " + text);
// 获取 SD 卡路径(注意:需要适当的权限)
var sdCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
var filePath = sdCardPath + "/certificate.crt";
var file = File.$new(filePath);
// 确保目录存在
var dirs = file.getParentFile();
if (!dirs.exists()) {
dirs.mkdirs();
}
// 保存 InputStream 到文件
saveInputStreamToFile(inputStream, file);
console.log("Certificate saved to: " + filePath);
// 调用原始方法
this.load(inputStream, password);
};
}); |