易游网-易游模拟器

 找回密码
 立即注册
查看: 2548|回复: 0

[破解逆向] frida java overload类型对应关系

[复制链接]

1406

主题

1663

帖子

1万

积分

管理员

夏墨独周

Rank: 9Rank: 9Rank: 9

积分
10094

论坛元老技术达人

QQ
发表于 2021-2-1 22:19:54 | 显示全部楼层 |阅读模式
一、hook android app的对象方法
//创建的类对象即我们要hook的方法所在的类的类名,具体类名根据实际需求填写
var parametersTestClass = Java.use("com.example.parameterstest.ParametersTest");
调用对象方法
//创建完类对象中,即可通过类对象调用对象的方法,如下所
parametersTestClass.multiply.implementation = function(val1,val2){   //在这里我们可以做一些hook操作,比如打印参数   var result = this.multiply(val1,val2);   //在这里我们可以做一些hook操作,比如打印返回值   return result;}
如果我们调用的对象方法有其他重载方法时,则需要通过overload指定具体参数类型,否则会报如下错误。当然错误中也提供了具体的参数类型,可通过错误信息提取我们需要的参数类型进行hook即可
{'type': 'error', 'description': "Error: multiply(): has more than one overload, use .overload(<signature>) to choose from:
.overload('long', 'long')
.overload('short', 'short')
.overload('int', 'int')
.overload('byte', 'byte')
.overload('float', 'float')
.overload('double', 'double')", 'stack': "Error: multiply(): has more than one overload, use .overload(<signature>) to choose from:
.overload('long', 'long')
.overload('short', 'short')
.overload('int', 'int')
.overload('byte', 'byte')
.overload('float', 'float')
.overload('double', 'double')
at pe (frida/node_modules/frida-java-bridge/lib/class-factory.js:549)
at ve (frida/node_modules/frida-java-bridge/lib/class-factory.js:538)
at frida/node_modules/frida-java-bridge/lib/class-factory.js:911
at /script1.js:11
at frida/node_modules/frida-java-bridge/lib/vm.js:11
at frida/node_modules/frida-java-bridge/index.js:392
at frida/node_modules/frida-java-bridge/index.js:377
at we (frida/node_modules/frida-java-bridge/lib/class-factory.js:598)
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方法中指定参数类型)
parametersTestClass.multiply.overload('int','int').implementation = function(val1,val2){
            //在这里我们可以做一些hook操作,比如打印参数            var result = this.multiply(val1,val2);            //在这里我们可以做一些hook操作,比如打印返回值            return result;        }
如下列出了大部分的参数类型(Java中参数类型对应JS脚本中参数类型)
Java Type (Java中参数类型)         int byte short long float double char  <Object>(比如String、List)                                              int[]  byte[]  short[] long[] float[] double[] char[]    <Object>[](比如String[])
Frida Type (frida脚本中参数类型)   int byte short long float double char  <package>.<Object>(比如java.lang.String、java.util.List)      [I     [B       [S        [J      [F      [D         [C         L<package>.<Object>; (比如 [Ljava.lang.String;)当参数是某个类对象时,则需要在overload中填写其完整包名路径+类名即可,跟上面的<Object>(比如String、List)一样,如下所示
parametersTestClass.display.overload("com.example.parameterstest.ParametersTest").implementation = function (val1){
  this.display(val1);}









来源:易游模拟器(QQ:207621422),转载请注明出处!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易游网-易游模拟器 Copyright @2015-2021 ( 浙ICP备15028007号-1 )

GMT+8, 2024-5-2 08:59 , Processed in 0.030274 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表