hook⼯具frida原理及使⽤
⼀,原理简介:
1. ⼿机端安装⼀个rver程序
2. 然后把⼿机端的端⼝转到PC端,
3. PC端写python脚本进⾏通信,python脚本中需要hook的代码采⽤javascript语⾔。
frida使⽤的是动态⼆进制插桩技术(DBI),⾸先来了解⼀下插桩技术:
插桩技术是指将额外的代码注⼊程序中以收集运⾏时的信息,可分为两种:
红葡萄酒的功效与作用(1)源代码插桩[Source Code Instrumentation(SCI)]:顾名思义,在程序源代码的基础上增加(注⼊)额外的代码,从
⽽达到预期⽬的或者功能;
鸡斗
源代码插桩实例
(2)⼆进制插桩(Binary Instrumentation):额外代码注⼊到⼆进制可执⾏⽂件中,通过修改汇编地址,改变程序运⾏内容,运⾏后再返回到原来程序运⾏出处,从⽽实现程序的额外功能。
●静态⼆进制插桩[Static Binary Instrumentation(SBI)]:在程序执⾏前插⼊额外的代码和数据,⽣成⼀个永久改变的可执⾏⽂件。
●动态⼆进制插桩[Dynamic Binary Instrumentation(DBI)]:在程序运⾏时实时地插⼊额外代码和数据,对可执⾏⽂件没有任何永久改变。* DBI能做什么?
(1)访问进程的内存
(2)在应⽤程序运⾏时覆盖⼀些功能
(3)从导⼊的类中调⽤函数
(4)在堆上查找对象实例并使⽤这些对象实例
(5)Hook,跟踪和拦截函数等等
frida原理和xpod差不多,⽂章写完才发现发现这⾥有⼀篇m4bln⼤神的⽂章对原理解释更清楚,解析了frida的源码,从dalvik和art的启动底层原理讲起,Frida源码分析
下⾯重点讲下frida的使⽤。
家常黄花鱼
⼆,安装
⾸先通过上⾯的介绍,明⽩frida是通过本地设备与远程设备端通信实现hook脚本传递注⼊的,所以可以确定要有本地客户端和远程服务端两部分组成:电脑如何开热点
1,本地客户端是基于Python的,⾸先安装python环境,然后使⽤ pip install frida双子座的幸运色
所以在远程端⼀定要有⼀个服务端⽤来接收我们发过去的js代码,即frida-rver官⽅地址 , 其中包括各种平台
服务端下载页⾯
这⾥我们需要根据我们要hook设备的系统选择相应的下载包,这⾥我们选择Android系统
rver
其实我们在这⾥还可以看到有很多其他的Android的选择,如下,其实每类服务端都适⽤于不同的场景,
⽐如:gadget适⽤于当⽆法获取root权限时可以将gadget.so植⼊⽬标apk中重打包,通过修改应⽤,使得rver以应⽤的权限启动;还有frida-gum、frida-gumjs、frida-inject、frida-devkit等。
inject
gumjs
gum
索玛花是什么花devkit
java层hook:
1,hook构造⽅法
腌鱼的制作方法原⽅法:
谈心谈话制度
原⽅法
hook代码:
hook代码
⾸先脚本中使⽤Java.u⽅法通过类名获取类类型,然后构造⽅法是固定写法:$init;这个要记住,然后因为需要重载所以⽤overload(……)形式即可,参数和参数之间⽤逗号隔开即可,这⾥⽤return重新调⽤了原来⽅法。
2,hook普通⽅法(s tatic、p r iv ate、p ub lic等)
原⽅法:
原⽅法
hook代码: