frida 介绍
官网对Frida的介绍是“Frida是平台原生App的Greasemonkey”,专业一点就是一种动态插桩工具,可以插入一些代码到原生App的内存空间去动态地监视和修改其行为,这些原生平台可以是Windows、Mac、Linux、Android或者iOS,同时Frida还是开源的。
frida 环境安装
python3.7.5
pip install frida==12.8.0 frida-tools==5.3.0
frida-server下载
https://github.com/frida/frida/releases/tag/12.8.0
使用vscode打开该工程可以有frida脚本的代码提示
https://github.com/oleavr/frida-agent-example
一些 frida 命令
查看手机上正在运行的进程
frida-ps -U
以attach模式注入指定应用
frida -U -l hello_world.js android.process.media
一些 adb 命令
查看系统架构命令
adb shell getprop ro.product.cpu.abi
列出所有安装的apk包名
adb shell pm list packages
用于查看App使用的数据库信息
adb shell dbinfo <package-name>
查看包信息,包括四大组件信息以及MIME等相关信息
adb shell dumpsys package <package-name>
查看当前处于前台的Activity
adb shell dumpsys activity top
frida 案例
js 部分
function main() {
Java.perform(function () {
var MainActivity = Java.use("com.example.myapplication.MainActivity");
MainActivity.fun.implementation = function (x, y) {
console.log(`x=>${x} y=>${y}`);
var ret_value = this.fun(x, y);
return ret_value;
};
});
}
setImmediate(main);
android 部分
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt_check = findViewById(R.id.check);
bt_check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("demo", "hello");
}
});
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
fun(50, 30);
}
}
private void fun(int x, int y) {
Log.d("demo", String.valueOf(x + y));
}
}
目的是为了监控fun函数的参数