ps axなどで見れるのは、プロセス名でなく起動時のコマンドライン文字列である。/proc/プロセスID/cmdlineで見れる。
プロセス名は、/proc/プロセスID/statusで見れる。
別のプログラムを、コマンドライン文字列を偽って実行する
プロセス名はごまかせないが、psで見たときの画面をごまかせる。
int main() { char *newargv[] = { "GRADIUS", "-b", NULL }; char *command = "/usr/bin/top"; execve( command, newargv ); return 0; }
指定したプログラムを別名に見せかけて起動する。
psで見ると別名に見えるが、プロセス名を確認するともとのまま
自分のプロセス名を偽る
#include <sys/prctl.h> int main() { prctl( PR_SET_NAME, "GRADIUS" ); for(;;) sleep(1); }
プロセス名を変更できる。
コマンドラインはそのままなので ps での見た目は変わらない
自分のコマンドラインを偽る
超インチキな手段を使用する
#include <string.h> int main( int argc, char *argv[] ) { strcpy(argv[0],"GRADIUS"); for(;;) sleep(1); }
コマンドライン文字列を直接変更する(当然ぶっ飛ぶ可能性がある)
プロセス名変更と組み合わせればなお良し