0%

Android-修改进程名

最近听朋友说有个游戏每次启动后的进程名都不一样,有时还变成了系统应用的名字,很强势.

其原理就是修改

1
2
3
/prco/pid/stat
/prco/pid/status
/prco/pid/cmdline

, 来修改进程名.

对于前两种方法,调用 prctl 函数就可以修改.

1
int prctl(int __option, ...);

而对于 /prco/pid/cmdline, 也就是 main 参数里的 argv [0], 修改就比较麻烦

在 linux 系统上,可以直接在 main 函数里修改 argv [0] 来修改进程名,但在 android 的 app 里,并没有 main 函数和 argv 参数.

但也并非没有办法.

1
2
Linux 还有环境变量参数信息,表示进程执行需要的所有环境变量信息。通过全局变量
char **environ;可以访问环境变量.

还有最关键的一点是:

1
命令行参数argv和环境变量信息environ是在一块连续的内存中表示的,并且environ紧跟在argv后面

也就是说可以根据 environ 来找到 argv [0]

1
2
extern char **environ;
LOGD("environ:%llx",environ[0]);

在 logcat 里找到日志

1
2022-05-26 22:55:34.680 22933-22933/com.shocker.processhide D/Shocker: environ:7fd85b633b

打开 ceserver, 查看 0x7fd85b633b 附近的内存

0x7fd85b62d8 就是进程名了,直接修改它.

之后在用 ps -ef|grep 命令查看

哈,发现它的进程名已经被修改了.

参考了:
Linux 进程隐藏:初级篇
如何改变进程名称
Linux 修改进程名称 (setproctitle ())