start:2020年8月29日
一、前言
应用场景:我最近正在分析一个App的网络协议,通过分析我已经找到了加密方法的位置,我现在需要用这个加密方法为我主动加密一些数据,然后再将这些数据返回给服务器,这样我就可以提交自定义的内容给服务器了。
二、调用流程
-
ClassLoader -> 类加载器
-
Class - > 类
-
Instance -> 实例化对象
-
Method -> 方法
- 第一步:拿到要Hook的方法所在类的ClassLoader对象
- 第二步:通过这个ClassLoader找到对应的Class对象
- 第三步:通过这个Class对象实例化一个对象
- 第四步:通过这个实例化对象调用对应的方法
三、调用方式
方式一:callMethod()
返回值:调用方法的返回值
使用场景:明确知道方法参数的组成,直接调用。
方式二:findMethodBestMatch()
返回值:Method对象
使用场景:方法名重复,只知道方法参数的大概类型,匹配最佳方法。
四、方法在不同位置被调用
- 调用本类方法:
- 调用外部类方法1:
-
调用外部类方法2:
- 调用外部程序类:
五、总结
延伸:现在App大多加壳了,要想find到自己想要的Class,首先就需要拿到真正的ClassLoader对象,然后你再去findAndHook就能找到了,参考代码形式:调用外部程序类
end:by take