아래 경로 참고
https://www.lazenca.net/display/TEC/Anti-cheating+Engine+for+Android
Check debug
- 아래와 같이 두가지 방식으로 디버깅 여부를 확인할 수 있습니다.
- 첫번째는 해당 프로세스의 "/proc/pid/cmdline" 파일의 내용을 확인하는 것 입니다.
- 프로그램이 GDB에 의해 실행 될 경우 PPID의 프로세스는 gdb이기 때문에 "cmdline" 파일을 이용해 gdb를 탐지 할 수 있습니다.
bool isCheckCmdline()
bool isCheckCmdline() { char filePath[32], fileRead[128]; FILE* file;
snprintf(filePath, 24, "/proc/%d/cmdline", getppid()); file = fopen(filePath, "r");
fgets(fileRead, 128, file); fclose(file);
if(!strcmp(fileRead, "gdb")) { DbgPrint("Debugger(gdb) detected\n"); return true; } DbgPrint("Clear(Debug)\n"); return false; } |
-
- 두번째는 해당 프로세스의 "/proc/pid/status" 파일의 내용을 확인하는 것 입니다.
- status 파일에는 해당 프로세스의 상태, 스레드 정보, 메모리 정보, 등 많은 정보들이 저장되어 있습니다.
-
여기에서 Debug 여부를 확인하기 위해 "TracerPid"의 값을 이용 할 수 있습니다.
- 해당 프로세스가 다른 프로세스에 의해 추적 되고 있다면 추적하고 있는 프로세스의 PID가 저장됩니다.
- 추적이 되고 있지 않으면 '0' 이 저장됩니다.
bool isCheckTracerPid()
bool isCheckTracerPid() { int TPid; char buf[512];
const char *str = "TracerPid:"; size_t strSize = strlen(str);
FILE* file = fopen("/proc/self/status", "r");
while (fgets(buf, 512, file)) { if (!strncmp(buf, str, strSize)) { sscanf(buf, "TracerPid: %d", &TPid); if (TPid != 0) { DbgPrint("Debugger detected\n"); return true; } } } fclose(file); DbgPrint("Clear(Debug)\n"); return false; } |
'모바일' 카테고리의 다른 글
iOS 10.x.x 탈옥 (0) | 2020.08.04 |
---|---|
Cydia Impactor 없이 IPA 파일 설치(Xcode 7.3 에러 우회) (0) | 2020.08.02 |
ios 환경에서 gdb 이용 (0) | 2020.07.15 |
IDA Remote debugging 안드로이드 (0) | 2020.07.15 |
Android 안티디버깅 관련 대응방안 (0) | 2020.07.15 |