购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1.3 Hook重载方法

方法重载是一个类的多态性的表现,重载方法在一个类中方法名字相同,而参数不同,返回值也可以不同。由此可以确定,重载方法的独特性在于其独一无二的参数类型列表,因此在Hook时也需要额外注意其参数类型列表。

在测试应用的Utils类中存在重载方法getCalc,它拥有三个不同的重载,源代码如下所示:

这三个方法的名字是一样的,在Android应用的onCreate方法中存在调用。 因为重载方法存在不同的参数签名,要对重载方法进行Hook需要分为两步,通常借助Frida框架的提示进行代码编写。第一步,先对重载方法的不同参数签名视而不见,直接进行重载方法的覆写,并加载Hook脚本。 编写的代码如下:

可以发现,脚本的覆写方法里没有添加任何参数,当Frida框架加载了上述脚本代码之后,会有报错提示,这正是第一步要达到的目的, 让Frida框架告诉开发者重载方法的参数应该怎么编写。 命令行中的报错代码如下:

可以清晰地看到,Frida框架提示开发者从三个不同参数签名的重载方法中进行选择,而且指明使用overload方法。这三个overload中存在不同的参数签名,分别对应Android应用源代码中的三个重载方法。

第二步,借助刚才的报错提示,编写正确的Hook代码, 这里使用Frida框架提示的overload方法覆写拥有两个int参数的重载方法:

Hook重载方法和Hook一般方法是大相径庭的,开发者不需要死记硬背,在需要使用的时候,回忆上述两步走的方案即可。

掌握了两步走的方案之后,如果想要Hook getCalc全部的重载方法,代码的编写只是一种重复性的体力工作。具体Hook代码如下所示: w80HXTY1u4WRbaEckPzSNIVn7rEOSmCudX972PJHmfwAOjL3cdypfH5eEoVstsal

点击中间区域
呼出菜单
上一章
目录
下一章
×