Compare commits

..

24 Commits

Author SHA1 Message Date
13d89b020d 更新 hookssl.js 2024-03-07 00:24:13 +08:00
34735c3e0e 创建 baidunetdisk.js 2024-03-07 00:24:09 +08:00
866701b499 更新 main.py 2024-03-07 00:24:06 +08:00
f47e9cb306 更新 main.py 2023-11-09 17:08:12 +08:00
8c4cd61081 更新 main.py 2023-11-07 14:18:03 +08:00
cfefd337b9 删除 url_request.js 2023-11-06 17:02:31 +08:00
af1a9e1859 更新 test.py 2023-11-06 17:02:29 +08:00
6c7278a064 删除 test.js 2023-11-06 17:02:27 +08:00
58c81f32e5 创建 url_request.js 2023-11-06 17:02:24 +08:00
67623951ce 创建 test.js 2023-11-06 17:02:22 +08:00
8960406388 创建 monitor_request.js 2023-11-06 17:02:18 +08:00
51bf1e5a6f 创建 hookssl.js 2023-11-06 17:02:16 +08:00
0e75201906 创建 hook_qqmusic.js 2023-11-06 17:02:14 +08:00
8aa5351ccc 创建 hook_conversions.js 2023-11-06 17:02:12 +08:00
1e80a8067b 删除 hookssl.js 2023-11-06 17:02:09 +08:00
df7b021ea0 删除 hook_qqmusic.js 2023-11-06 17:02:07 +08:00
86f1a339d0 删除 hook_conversions.js 2023-11-06 17:02:04 +08:00
b8e653e57d 更新 main.py 2023-11-06 17:01:58 +08:00
9ec56ced34 更新 main.py 2023-10-24 19:54:40 +08:00
e949fdc3e5 创建 hook_qqmusic.js 2023-10-24 19:54:38 +08:00
7167780f0f 创建 url_request.js 2023-10-19 11:26:26 +08:00
dd6a0f4018 创建 test.js 2023-10-19 11:26:24 +08:00
64e5f9c6d9 更新 main.py 2023-10-19 11:26:22 +08:00
f16dd8cae1 更新 hook_conversions.js 2023-10-19 11:26:18 +08:00
9 changed files with 221 additions and 17 deletions

18
main.py
View File

@@ -8,7 +8,8 @@ import time
FIRST_WRITE = True # 全局变量,用于跟踪是否是首次写入
def on_message(message, data):
modules.files_utils.write_log(message)
print(message)
# modules.files_utils.write_log(message)
# print(message)
# if message['type'] == 'send':
# print(message['payload'])
@@ -24,11 +25,12 @@ def attach_method(is_spawn):
def main(package_name,script_path,is_spawn):
# 从Python发送数据到Frida的JavaScript脚本
print(f"script_path: {script_path}")
js_code = modules.files_utils.read_javascript(script_path)
# print(js_code)
modules.command.start_frida()
modules.command.clearCache(package_name)
# modules.command.clearCache(package_name)
# 连接到USB设备
device = frida.get_usb_device()
print(device)
@@ -37,8 +39,10 @@ def main(package_name,script_path,is_spawn):
print(f"进程pid: {pid}")
process = device.attach(pid)
script = process.create_script(js_code)
script.on("message", on_message)
# script.on("message", on_message)
script.load()
# data_to_send = {'data': 'Hello from Python!'}
# script.post({'type': 'input_data', 'payload': data_to_send})
device.resume(pid) # 加载完脚本后, 恢复进程运行
sys.stdin.read()
else:
@@ -63,10 +67,10 @@ if __name__ == '__main__':
# 是否以spawn模式运行
is_spawn = True
# 目标进程名
attach_process_name = "Navi"
attach_process_name = "百度网盘"
# 目标包名
package_name = "com.msf.angelmobile"
package_name = "com.baidu.netdisk"
# 注入的脚本路径
script_path = "./hook_conversions.js"
# script_path = "./r0capture/script.js"
# script_path = "scripts/hook_conversions.js"
script_path = "scripts/baidunetdisk.js"
main(package_name,script_path, is_spawn)

21
scripts/baidunetdisk.js Normal file
View File

@@ -0,0 +1,21 @@
console.log("Script loaded successfully");
Java.perform(function () {
var Request = Java.use("okhttp3.Request");
// Hook Request的toString方法
Request.toString.implementation = function () {
// 调用原始的toString方法并保存结果
var result = this.toString();
// 打印结果
console.log("Request.toString result: " + result);
// 返回原始方法调用的结果
return result;
};
});

View File

@@ -1,4 +1,4 @@
console.log("Script loaded successfully");
log_info("Script loaded successfully");
// hook_okhttp_client()
if (Java.available) {
hook_json()
@@ -145,8 +145,8 @@ function hook_json() {
var JSONObject = Java.use('org.json.JSONObject');
JSONObject.toString.overload().implementation = function () {
var result = this.toString.call(this);
// console.log("Serialized JSONObject: " + result);
log_info("Serialized JSONObject: " + result)
// get_conversions(result)
// log_info("Serialized JSONObject: " + result)
return result;
};
});
@@ -166,6 +166,7 @@ function log_info(messages) {
const timestamp = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}:${milliseconds}`;
console.log(`${timestamp} - ${messages}`);
send(`${timestamp} - ${messages}`);
}
function check_class(class_name) {
@@ -185,4 +186,12 @@ function check_class(class_name) {
}
});
return classFound;
}
}
recv('input_data', function(payload) {
console.log(typeof(payload))
console.log(JSON.stringify(payload))
console.log('Received data from Python: ' + payload.payload.data);
});

40
scripts/hook_qqmusic.js Normal file
View File

@@ -0,0 +1,40 @@
log_info("Script loaded successfully");
if (Java.available) {
hook_json()
Java.perform(function () {
log_info("start hook java.net.URL");
var URL = Java.use('java.net.URL');
URL.$init.overload('java.lang.String').implementation = function (spec) {
log_info("URL request: " + spec)
return this.$init(spec);
};
});
}
function log_info(messages) {
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0'); // Months are 0-based
const day = String(now.getDate()).padStart(2, '0');
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
const milliseconds = String(now.getMilliseconds()).padStart(3, '0');
const timestamp = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}:${milliseconds}`;
console.log(`${timestamp} - ${messages}`);
send(`${timestamp} - ${messages}`);
}
function hook_json() {
Java.perform(function () {
var JSONObject = Java.use('org.json.JSONObject');
JSONObject.toString.overload().implementation = function () {
var result = this.toString.call(this);
// get_conversions(result)
log_info("Serialized JSONObject: " + result)
return result;
};
});
}

View File

@@ -1,3 +1,4 @@
console.log("Script loaded successfully");
Java.perform(function() {
/*
@@ -67,11 +68,6 @@ hook list:
} catch (e) {
quiet_send("registerClass from X509TrustManager >>>>>>>> " + e.message);
}
// Prepare the TrustManagers array to pass to SSLContext.init()
var TrustManagers = [TrustManager.$new()];

View File

@@ -0,0 +1,32 @@
log_info("Script loaded successfully");
Java.perform(function () {
var OkHttpClient = Java.use('okhttp3.OkHttpClient');
var Request = Java.use('okhttp3.Request');
OkHttpClient.newCall.implementation = function (request) {
var url = request.url().toString();
var method = request.method();
var body = request.body();
var size = body != null ? body.contentLength() / 1024 : 0;
console.log("Method: " + method + "\nURL: " + url + "\nSize: " + size + " kb");
return this.newCall(request);
};
});
function log_info(messages) {
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0'); // Months are 0-based
const day = String(now.getDate()).padStart(2, '0');
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
const milliseconds = String(now.getMilliseconds()).padStart(3, '0');
const timestamp = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}:${milliseconds}`;
console.log(`${timestamp} - ${messages}`);
send(`${timestamp} - ${messages}`);
}

20
scripts/test.js Normal file
View File

@@ -0,0 +1,20 @@
Java.perform(function() {
var ByteArrayOutputStream = Java.use('java.io.ByteArrayOutputStream');
var HttpsURLConnection = Java.use('javax.net.ssl.HttpsURLConnection');
HttpsURLConnection.getOutputStream.implementation = function() {
var outputStream = this.getOutputStream();
// 创建一个新的 ByteArrayOutputStream 实例,以便于我们读取数据。
var byteArrayOutputStream = ByteArrayOutputStream.$new();
outputStream.write.overload('[B').implementation = function(buffer) {
byteArrayOutputStream.write(buffer);
console.log("[*] Data written to URL:", this.getURL().toString());
console.log("[*] Data:", byteArrayOutputStream.toString('UTF-8'));
return outputStream.write(buffer);
};
return outputStream;
};
});

82
scripts/url_request.js Normal file
View File

@@ -0,0 +1,82 @@
Java.perform(function() {
var URL = Java.use("java.net.URL");
var HttpsURLConnection = Java.use("javax.net.ssl.HttpsURLConnection");
var HttpURLConnection = Java.use("java.net.HttpURLConnection");
var OutputStreamWriter = Java.use("java.io.OutputStreamWriter");
var BufferedReader = Java.use("java.io.BufferedReader");
var InputStreamReader = Java.use("java.io.InputStreamReader");
var OutputStream = Java.use('java.io.OutputStream');
var OkHttpClient = Java.use('okhttp3.OkHttpClient');
URL.$init.overload('java.lang.String').implementation = function(url) {
console.log("[*] URL init:", url.toString());
return this.$init(url);
};
HttpsURLConnection.setDoOutput.implementation = function(value) {
console.log("[*]HttpsURLConnection setDoOutput:", value);
return this.setDoOutput(value);
};
HttpsURLConnection.setRequestProperty.implementation = function(key, value) {
console.log("[*] setRequestProperty:", key, value);
return this.setRequestProperty(key, value);
};
HttpsURLConnection.getOutputStream.implementation = function() {
console.log("[*] getOutputStream");
return this.getOutputStream();
};
HttpURLConnection.setRequestProperty.implementation = function(key, value) {
console.log("[*] setRequestProperty:", key, value);
return this.setRequestProperty(key, value);
};
HttpURLConnection.setDoOutput.implementation = function(value) {
console.log("[*]HttpURLConnection setDoOutput:", value);
return this.setDoOutput(value);
};
// HttpURLConnection.getOutputStream.implementation = function() {
// console.log("[*] getOutputStream");
// var outputStream = this.getOutputStream();
//
// outputStream.write.overload('[B').implementation = function(buffer) {
// console.log("[*] Data written:", Java.array('byte', buffer).toString());
// return this.write(buffer);
// };
// return outputStream;
// };
// OutputStream.write.overload('[B').implementation = function(buffer) {
// console.log("[*] Data written:", Java.array('byte', buffer).toString());
// return this.write(buffer);
// };
BufferedReader.readLine.overload().implementation = function() {
var line = this.readLine();
// console.log("[*] BufferedReader.readLine:", line);
return line;
};
InputStreamReader.$init.overload('java.io.InputStream').implementation = function(stream) {
console.log("[*] InputStreamReader.init:", stream);
return this.$init(stream);
};
OkHttpClient.newCall.overload('okhttp3.Request').implementation = function(request) {
console.log("[*] Request URL:", request.url().toString());
console.log("[*] Request Headers:", request.headers().toString());
if (request.method() == "POST") {
console.log("[*] Request Body:", request.body().toString());
}
return this.newCall(request);
};
});

View File

@@ -1,7 +1,7 @@
import frida,sys
import modules.files_utils
js_code = modules.files_utils.read_javascript("./hook_conversions.js")
js_code = modules.files_utils.read_javascript("scripts/hook_conversions.js")
device = frida.get_usb_device()
pid = device.spawn(["com.naviapp"]) # 以挂起方式创建进程
process = device.attach(pid)