Короче говоря, я занимаюсь реверс-инжинирингом приложения для Android.Я пытаюсь интерпретировать значение java-объекта, который передается в интересующую меня функцию. Я динамически перехватил функцию и просто пытаюсь распечатать содержимое java-объекта.Я могу получить java-объект, хранящийся в переменной, в моей программе перехвата javascript, но я не нашел хорошего способа отображения содержимого объекта на консоли.
Я нашел некоторый код JavaScript, который идентифицирует тип аргумента как таковой:
function hookOverloads(className, func) {
var clazz = Java.use(className);
var overloads = clazz[func].overloads;
for (var i in overloads) {
if (overloads[i].hasOwnProperty('argumentTypes')) {
var parameters = [];
var curArgumentTypes = overloads[i].argumentTypes, args = [], argLog = '[';
for (var j in curArgumentTypes) {
var cName = curArgumentTypes[j].className;
parameters.push(cName);
argLog += "'(" + cName + ") ' + v" + j + ",";
args.push('v' + j);
}
argLog += ']';
var script = "var ret = this." + func + '(' + args.join(',') + ") || '';\n"
+ "console.log(JSON.stringify(" + argLog + "));\n"
+ "return ret;"
args.push(script);
clazz[func].overload.apply(this, parameters).implementation = Function.apply(null, args);
}
}
}
["(java.lang.Runnable) [object Object]"]
IЯ попробовал JSON.stringify, и я получил огромный массив чисел от -123 до 123. Я распечатал это в ASCII, UTF8, Unicode и различных других вероятных форматах, и хотя я вижу некоторые строки, очевидно, что данные хранятся в разных форматах.внутри объекта.Обратите внимание, что эти данные записываются в файл с расширением .mdb, но говорят, что они повреждены, когда я открываю файл с доступом Microsoft.
Небольшой снимок вывода ASCII:
GroupMsgsBean-V-7-- -UgP-lO-9dlastNotHiidenMsgId-7-- ->-ew--] lastMsgId-4-8--
Кто-нибудь знает простой способ получения читаемого формата java-объекта и всех его атрибутов?