概述
最近接触了很多Frida的Hook的东西,没有时间做详细笔记,这里仅仅针对看过的文章做个记录,以便后续可以翻阅查阅,
仅供自己查阅使用
参考文章
关于SSLpin的hook,这是最全的一篇 https://paper.tuisec.win/detail/e10c553d9c9f0ca
关于Frida 的Hook基本学习的话,这是最全的一篇:http://www.ninoishere.com/frida-learn-by-example/
关于Frida针对的hook详细动手的案例,这里有个不错的案例:https://blog.csdn.net/zouyuanxc/article/details/80492465
Hook常见问题
自己在Hook过程中遇到的问题:
1,interface的接口就不要Hook了,Hook的话需要自己实现一个对象,然后再进行实现
2,关于函数的参数写错了,也不用着急,或者不知道怎么写也不用着急,Overload使用之后,Frida运行过程中,仔细观察Log输出,进行纠正就行了,直接保存,不用重启,Frida会自动读取
Error: c(): specified argument types do not match any of:
.overload('com.xxx.IHttpCallback')
.overload('long', 'com.xxxxs.IHttpCallback')
.overload('java.util.Map', 'com.xxxs.IHttpCallback')
.overload('java.lang.String', 'com.xxxs.IHttpCallback')
.overload('java.lang.String', 'java.lang.String', 'int', 'com.xxxs.IHttpCallback')123456
overload有以下几种参数类别,没有必要都记住的,随时都可以参考
.overload()
.overload('java.lang.String')
.overload('android.app.Activity')
.overload('int')
.overload('[B') // byte array
.overload('float')
.overload('android.content.Context')
.overload('[C')
.overload('android.content.Context', 'android.view.View')
.overload('android.app.Activity', 'com.cherrypicks.hsbcpayme.model.object.PayMeNotification')
.overload('android.content.Context', 'boolean')
.overload('android.content.Context', 'int')
.overload('android.content.Context', 'java.lang.String')
.overload('android.app.Activity', 'int')
.overload('java.lang.String', 'java.lang.String')
.overload('android.content.Context', 'android.graphics.Bitmap')
.overload('java.lang.String', 'java.io.File')
.overload('android.content.Context', 'java.lang.String', 'java.util.List')
.overload('java.lang.String', 'java.lang.String', 'java.lang.String')
.overload('java.lang.String', '[B', '[B')
.overload('java.lang.String', 'java.lang.String', 'android.content.Context')
.overload('android.app.Activity', 'com.cherrypicks.hsbcpayme.model.object.PayMeNotification', 'int')
.overload('[B', '[B', '[B')
.overload('android.content.Context', 'java.lang.String', 'java.lang.String')
.overload('android.app.Activity', 'int', 'int', 'int', 'boolean')12345678910111213141516171819202122232425
3,Hook过程中,同一个包名的PID可能会有多个,没有办法,只能一个一个尝试,一般这种情况下,会有一个主进程,找到那个PID就好了
4,很多时候Hook asset文件会有出其不意的效果,部分代码如下:
使用-U 是不需要进行端口转发的,-R才需要的
frida -U -p xxxxx -l hookA.js1
Java.perform(function () {
var AssetManager = Java.use("android.content.res.AssetManager");
var FileInputStream = Java.use("java.io.FileInputStream");
AssetManager.open.overload("java.lang.String").implementation = function(str) {
send("hook asset")
if(str.endsWith(".xxx")){
return FileInputStream.$new("/data/local/tmp/xxxxx");
}
return this.open(str)
}});1234567891011
Hook最重要的还是要了解业务,找到特殊的函数,不然空有技术,找不到入口,也是没有用的
找入口的话,可以尝试AndroidStudio的布局,Trace等进行跟踪,进行辅助测试
关于Native的Hook,这个后面再补充,还没有研究好