【问题标题】:Frida Android: Hook StringBuilder and print data only from a specific classFrida Android:挂钩 StringBuilder 并仅从特定类打印数据
【发布时间】:2020-05-21 14:54:57
【问题描述】:

我已通过使用此代码将 StringBuilder 类方法连接到字符串

Java.perform(function() {
  const StringBuilder = Java.use('java.lang.StringBuilder');
  StringBuilder.toString.implementation = function() {

    var res = this.toString();
    var tmp = "";
    if (res !== null) {
      tmp = res.toString().replace("/n", "");
      console.log(tmp);
    }

    return res;
  };

});

此代码正在打印大量不相关的数据。我只想打印来自特定类/方法的数据。如何实现? 谢谢

【问题讨论】:

  • 您可以获取堆栈跟踪并检查调用者是哪个方法/类:stackoverflow.com/questions/48480980/…
  • 我已经尝试过了,但是由于很多异常,进程正在终止。我检查了日志,上面写着“JNI ERROR (app bug): local reference table overflow (max=512)”

标签: security hook reverse-engineering code-injection frida


【解决方案1】:

我没有测试过代码,但以下应该可以工作:

还挂钩使用您感兴趣的 StringBuilder.toString() 的特定方法,并设置一个变量,以便在您使用该方法时启用您的 StringBuilder 挂钩代码:

var sbActivate = false;

Java.perform(function() {
  const StringBuilder = Java.use('java.lang.StringBuilder');
  StringBuilder.toString.implementation = function() {

    var res = this.toString();
    if (sbActivate) {
        var tmp = "";
        if (res !== null) {
          tmp = res.toString().replace("/n", "");
          console.log(tmp);
        }
    }
    return res;
  };

});

Java.perform(function() {
  const someclass = Java.use('<the specific class you are interested in>');
  someclass.someMethod.implementation = function() {

    sbActivate = true;
    var res = this.someMethod();
    sbActivate = false;

    return res;
  };

});

【讨论】:

    猜你喜欢
    • 2019-10-08
    • 2017-12-05
    • 2020-12-17
    • 1970-01-01
    • 2020-12-11
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多