【问题标题】:How to get return value of a function using context as parameter?如何使用上下文作为参数获取函数的返回值?
【发布时间】:2020-08-13 17:26:52
【问题描述】:

我是逆向工程的新手,我需要一些 frida 方面的帮助。

以下函数使用上下文作为参数。我需要获取返回值。

private final String getActiveMCCMNC(Context context) {
        Object systemService = context.getSystemService("phone");
        if (systemService != null) {
            String simOperator = ((TelephonyManager) systemService).getSimOperator();
            String str = "";
            if (simOperator != null && (!Intrinsics.areEqual((Object) simOperator, (Object) ""))) {
                try {
                    StringBuilder sb = new StringBuilder();
                    sb.append("");
                    String substring = simOperator.substring(0, 3);
                    Intrinsics.checkExpressionValueIsNotNull(substring, "(this as java.lang.Strin…ing(startIndex, endIndex)");
                    sb.append(substring);
                    String sb2 = sb.toString();
                    StringBuilder sb3 = new StringBuilder();
                    sb3.append(sb2);
                    sb3.append(HelpFormatter.DEFAULT_OPT_PREFIX);
                    String substring2 = simOperator.substring(3);
                    Intrinsics.checkExpressionValueIsNotNull(substring2, "(this as java.lang.String).substring(startIndex)");
                    sb3.append(substring2);
                    str = sb3.toString();
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                }
            }
            return !TextUtils.isEmpty(str) ? str : "";
        }
        throw new TypeCastException("null cannot be cast to non-null type android.telephony.TelephonyManager");
    }

我在一些文章的帮助下尝试过,但我遇到了一些错误。

Java.perform(function x(){
    console.log("Inside java perform function");
    var my_class = Java.use("util.PlayerDeviceIdentifier")
    var context = Java.use('android.app.ActivityThread').currentApplication().getApplicationContext();

    // context.getActiveMCCMNC.implementation = function(){

    //     console.log(this.val) 

    // } // tried with context

    my_class.getActiveMCCMNC.implementation = function(){

        console.log(this.val) 

    }

})

如何执行并获取返回值?

【问题讨论】:

  • 你遇到了什么错误?
  • 为了获得正确的上下文,我会挂钩主活动类的onCreate,然后保存上下文/在挂钩内执行依赖于上下文的上下文。

标签: java android reverse-engineering frida


【解决方案1】:

我了解您想要挂钩一个函数以检查它返回的值。 您不需要为此关心 Context 参数。您需要检索它以进行自定义调用,但我觉得这不是您想要的。

试试这样的:

Java.perform(function() {
  var my_class = Java.use("util.PlayerDeviceIdentifier");
  my_class.getActiveMCCMNC.implementation = function (context) { // replace original implementation
    var value = this.getActiveMCCMNC(context); // call original implementation
    // then do what you want with the returned value HERE
    // and finally return it so you don't break the app
    return value;
  };
});

【讨论】:

  • 我很高兴它有效,那么您应该将问题标记为已回答!
猜你喜欢
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 2020-10-04
  • 2014-03-19
  • 2015-04-11
  • 2010-10-14
相关资源
最近更新 更多