아래 경로 참고

 

https://www.lazenca.net/display/TEC/Anti-cheating+Engine+for+Android

 

Anti-cheating Engine for Android - TechNote - Lazenca.0x0

Excuse the ads! We need some help to keep our site up. List Anti-cheating Engine for Android 해당 내용은 2016년에 분석하고 개발한 Anti-cheating Engine for Android에 대한 설명입니다.여기에서 설명하는 내용들은 아주 기초�

www.lazenca.net

 

 

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;

}

 

블로그 이미지

wtdsoul

,