FRIDA实践

2021-06-08  本文已影响0人  吃饱了就送

环境搭建

安装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安装成功。

frida-ps -U查看手机进程

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),最后点击应用的按钮,即可看到字符串已经被替换成我们要替换的了!!!

参考:https://www.52pojie.cn/thread-1128884-1-1.html

上一篇下一篇

猜你喜欢

热点阅读