Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // find and trace all methods declared in a Java Class
- var targetClass = 'org.awallet.ui.UnlockActivity';
- Java.perform(function() {
- var hook = Java.use(targetClass);
- var methods = hook.class.getDeclaredMethods();
- hook.$dispose;
- var parsedMethods = [];
- methods.forEach(function (method) {
- parsedMethods.push(method.toString().replace(targetClass + ".", "TOKEN").match(/\sTOKEN(.*)\(/)[1]);
- });
- var targets = uniqBy(parsedMethods, JSON.stringify);
- targets.forEach(function (targetMethod) {
- traceMethod(targetClass + "." + targetMethod);
- });
- });
- // trace a specific Java Method
- function traceMethod(targetClassMethod) {
- var delim = targetClassMethod.lastIndexOf(".");
- if (delim === -1) return;
- var targetClass = targetClassMethod.slice(0, delim);
- var targetMethod = targetClassMethod.slice(delim + 1, targetClassMethod.length);
- var hook = Java.use(targetClass);
- var overloadCount = hook[targetMethod].overloads.length;
- console.log("Tracing " + targetClassMethod + " [" + overloadCount + " overload(s)]");
- for (var i = 0; i < overloadCount; i++) {
- hook[targetMethod].overloads[i].implementation = function() {
- console.warn("\n*** entered " + targetClassMethod);
- // print backtrace
- // Java.perform(function() {
- // var bt = Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new());
- // console.log("\nBacktrace:\n" + bt);
- // });
- // print args
- if (arguments.length) console.log();
- for (var j = 0; j < arguments.length; j++) {
- console.log("arg[" + j + "]: " + arguments[j]);
- }
- // print retval
- var retval = this[targetMethod].apply(this, arguments); // rare crash (Frida bug?)
- console.log("\nretval: " + retval);
- console.warn("\n*** exiting " + targetClassMethod);
- return retval;
- }
- }
- }
- // remove duplicates from array
- function uniqBy(array, key) {
- var seen = {};
- return array.filter(function(item) {
- var k = key(item);
- return seen.hasOwnProperty(k) ? false : (seen[k] = true);
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement