如何为Android ELF可执行文件通过Frida传递自定义参数
在Android通过Frida带参数启动ELF可执行文件的方法
可行,问题出在参数传递的位置——Frida要求传递给目标程序的参数必须放在--之后,否则会被识别为Frida自身的参数。
正确的启动命令
su -c "/data/local/tmp/frida -f /data/local/tmp/mycpp -s /data/local/tmp/systemhook.js -- arg1 arg2"
原理说明
--是Frida的参数分隔符,作用是明确告知Frida:分隔符之后的所有参数都要直接传递给被启动的目标进程(也就是你的mycpp程序),而不是由Frida自身处理。你之前的命令没有加--,导致arg1和arg2被当成Frida的命令行参数,没有传递给目标程序。
验证效果
运行上述命令后,目标程序会输出:
ARG 1 -> arg1 ARG 2 -> arg2
同时Frida的hook脚本会输出:
CMD USED -> echo hello
附用户提供的示例代码
C++程序(mycpp源码)
#include <iostream> #include <unistd.h> int main(int argc, char* argv[]){ printf("ARG 1 -> %s\n",argv[1]); printf("ARG 2 -> %s\n", argv[2]); system("echo hello"); return 0; }
Frida Hook脚本(systemhook.js)
Interceptor.attach(Module.findExportByName(null, "system"), { onEnter: function (args) { console.log("CMD USED -> " + Memory.readUtf8String(args[0])); } });
内容的提问来源于stack exchange,提问作者Aimar
相关产品推荐
相关产品推荐

