一
网上很多教程的python环境都是安装了Anaconda,那就下载吧。但下载之后我们需要用到的工具是里面的spyder,但现在用不到。
二
安装完之后,在该文件夹下找到 pip指令,或者在安装anaconda时,选择了添加环境变量的设置,就不需要专门去找该指令的目录。然后 cmd
pip install frida
pip install frida-tools
安装完成后,在github上下载frida-server
链接
虚拟机用x86,真机用arm
三
下载完frida-server之后,将目标文件解压,之后放进模拟器(真机中),我使用的是逍遥安卓模拟器,按照好之后需要connect端口。
adb命令如下:
adb push frida-server /data/local/tmp
之后,进入该目录进行文件授权
adb shell //进入手机调试
cd /data/local/tmp //移动到该目录下
ls -l //查看该目录下的文件列表
chmod 777 frida-server //对frida-server文件进行授权
./frida-server //执行frida-server
之后打开一个新的cmd,进行端口转发
adb forward tcp:27042 tcp:27042
四
打开spyder,新建一个py文件。完整代码如下,右下角是调试窗口
import frida,sys
jscode="""
Java.perform(function (){
var utils=Java.use('com.example.fridatest.Utils');//包名加类名
utils.getCalc.implementation=function(a,b){
console.log("Hook Start...");
send("Success!");//发送信息,用于回调python中的函数
send(a);//获得函数的参数a,b
send(b);
return 50;//劫持返回值,修改为我们想要返回的字符串
}
});
"""
def message(message,data):
if message["type"] =='send':
print("[*] {0}".format(message['payload']))
else:
print(message)
process=frida.get_remote_device().attach('com.example.fridatest')
# get_remote_device():获取远程设备。attach(应用包名)。获得进程
script=process.create_script(jscode) # 为进程设置一个脚本
script.on("message",message) #设置监听(绑定事件)
script.load()
sys.stdin.read()
打开模拟器应用进行调试
原本调试情况:
运行frida后,可以将js代码中的返回值代替该返回值。
android项目地址:链接
Java层:
# Hook普通方法
jscode="""
Java.perform(funct