前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android逆向之frida脚本中overload带的参数

android逆向之frida脚本中overload带的参数

作者头像
用户4682003
发布2022-05-19 14:33:04
1.4K0
发布2022-05-19 14:33:04
举报
文章被收录于专栏:网络安全技术点滴分享

该篇文章主要介绍frida脚本hook android app的对象方法以及当方法重载时如何使用。

一、hook android app的对象方法

创建一个类对象(以文中提供的测试app为例,具体测试app代码即frida脚本,可在公众号回复“overload测试代码”进行下载)

代码语言:javascript
复制

//创建的类对象即我们要hook的方法所在的类的类名,具体类名根据实际需求填写
var parametersTestClass = Java.use("com.example.parameterstest.ParametersTest");

调用对象方法

代码语言:javascript
复制

//创建完类对象中,即可通过类对象调用对象的方法,如下所示
parametersTestClass.multiply.implementation = function(val1,val2){
//在这里我们可以做一些hook操作,比如打印参数
   var result = this.multiply(val1,val2);
//在这里我们可以做一些hook操作,比如打印返回值
   return result;
}

如果我们调用的对象方法有其他重载方法时,则需要通过overload指定具体参数类型,否则会报如下错误。当然错误中也提供了具体的参数类型,可通过错误信息提取我们需要的参数类型进行hook即可

代码语言:javascript
复制

{'type': 'error', 'description': "Error: multiply(): has more than one overload, use .overload(<signature>) to choose from:\n\t.overload('long', 'long')\n\t.overload('short', 'short')\n\t.overload('int', 'int')\n\t.overload('byte', 'byte')\n\t.overload('float', 'float')\n\t.overload('double', 'double')", 'stack': "Error: multiply(): has more than one overload, use .overload(<signature>) to choose from:\n\t.overload('long', 'long')\n\t.overload('short', 'short')\n\t.overload('int', 'int')\n\t.overload('byte', 'byte')\n\t.overload('float', 'float')\n\t.overload('double', 'double')\n    at pe (frida/node_modules/frida-java-bridge/lib/class-factory.js:549)\n    at ve (frida/node_modules/frida-java-bridge/lib/class-factory.js:538)\n    at frida/node_modules/frida-java-bridge/lib/class-factory.js:911\n    at /script1.js:11\n    at frida/node_modules/frida-java-bridge/lib/vm.js:11\n    at frida/node_modules/frida-java-bridge/index.js:392\n    at frida/node_modules/frida-java-bridge/index.js:377\n    at we (frida/node_modules/frida-java-bridge/lib/class-factory.js:598)\n    at frida/node_modules/frida-java-bridge/lib/class-factory.js:581", 'fileName': 'frida/node_modules/frida-java-bridge/lib/class-factory.js', 'lineNumber': 549, 'columnNumber': 1}

二、类方法重载时指定具体参数(overload)

当方法重载时,则我们需要通过如下方式进行hook(在overload方法中指定参数类型)

代码语言:javascript
复制

parametersTestClass.multiply.overload('int','int').implementation = function(val1,val2){
            //在这里我们可以做一些hook操作,比如打印参数
            var result = this.multiply(val1,val2);
            //在这里我们可以做一些hook操作,比如打印返回值
            return result;
        }

如下列出了大部分的参数类型(Java中参数类型对应JS脚本中参数类型)

当参数是某个类对象时,则需要在overload中填写其完整包名路径+类名即可,跟上面的<Object>(比如String、List)一样,如下所示

代码语言:javascript
复制
parametersTestClass.display.overload("com.example.parameterstest.ParametersTest").implementation = function (val1){
  this.display(val1);
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络安全技术点滴分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档