最近听朋友说有个游戏每次启动后的进程名都不一样,有时还变成了系统应用的名字,很强势.
其原理就是修改
1 | /prco/pid/stat |
, 来修改进程名.
对于前两种方法,调用 prctl 函数就可以修改.
1 | int prctl(int __option, ...); |
而对于 /prco/pid/cmdline, 也就是 main 参数里的 argv [0], 修改就比较麻烦
在 linux 系统上,可以直接在 main 函数里修改 argv [0] 来修改进程名,但在 android 的 app 里,并没有 main 函数和 argv 参数.
但也并非没有办法.
1 | Linux 还有环境变量参数信息,表示进程执行需要的所有环境变量信息。通过全局变量 |
还有最关键的一点是:
1 | 命令行参数argv和环境变量信息environ是在一块连续的内存中表示的,并且environ紧跟在argv后面 |
也就是说可以根据 environ 来找到 argv [0]
1 | extern char **environ; |
在 logcat 里找到日志
1 | 2022-05-26 22:55:34.680 22933-22933/com.shocker.processhide D/Shocker: environ:7fd85b633b |
打开 ceserver, 查看 0x7fd85b633b 附近的内存
0x7fd85b62d8 就是进程名了,直接修改它.
之后在用 ps -ef|grep 命令查看
哈,发现它的进程名已经被修改了.