环境搭建
安装frida
python3.9 -m pip install frida
安装frida-tools
pip3 -m pip install frida-tools
下载运行在目标机上的frida-sever端,下载时要选择对应的版本下载,例如我的机器是模拟器,架构位x86_64,就选择ffrida-server-14.2.18-android-x86_64下载,然后解压,把解压的文件通过ADB命令push到手机的/data/local/tmp目录下,同时通过chmod命令给文件夹赋予权限。
做完以上几步后,新开一个命令行输入命令frida-ps -U查看手机进程,如果出现以下结果,则frida安装成功。
hook java层
public class MainActivity extends AppCompatActivity {
private TextView textView;
private String hallo = "Hello World!!!!";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//xposed_init
textView = (TextView) findViewById(R.id.tv_text);
textView.setText(hallo);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText(testFrida());
}
});
}
public String testFrida(){
return textView.getText().equals(hallo)? "change str" : hallo;
}
}
Python代码
import frida #导入frida模块
import sys #导入sys模块
jscode = """ #从此处开始定义用来Hook的javascript代码
Java.perform(function(){
var MainActivity = Java.use('com.example.testfrida.MainActivity'); //获得MainActivity类
MainActivity.testFrida.implementation = function(){ //Hook testFrida函数,用js自己实现
send('Statr! Hook!'); //发送信息,用于回调python中的函数
return 'Change String!' //劫持返回值,修改为我们想要返回的字符串
}
});
"""
def on_message(message,data): #js中执行send函数后要回调的函数
print(message)
process = frida.get_remote_device().attach('com.example.testfrida') #得到设备并劫持进程com.example.testfrida(该开始用get_usb_device函数用来获取设备,但是一直报错找不到设备,改用get_remote_device函数即可解决这个问题)
script = process.create_script(jscode) #创建js脚本
script.on('message',on_message) #加载回调函数,也就是js中执行send函数规定要执行的python函数
script.load() #加载脚本
sys.stdin.read()
现在python脚本编写完毕,我们来执行该脚本,首先手机端执行frida,然后通过命令adb forward tcp:27043 tcp:27043和adb forward tcp:27042 tcp:27042来转发这两个端口,接着在手机上运行该应用程序,在命令行中执行脚本(python3.9 test_frida.py),最后点击应用的按钮,即可看到字符串已经被替换成我们要替换的了!!!
网友评论