#include "SunClientPrecompiledHeader.h" #if USING_GAMEGUARD #include ".\gameguardapi.h" #include "GameGuard/NPGameLib.h" #include "GlobalFunc.h" #include #include "resource.h" TCHAR GameGuardApi::error_message_[MAX_PATH] = {0, }; DWORD GameGuardApi::error_code_ = 0; BOOL GameGuardApi::is_timer_type_ = FALSE; GameGuardApi::GameGuardApi(void) : npgame_lib_ptr_(NULL) { ZeroMemory(error_message_, MAX_PATH); } GameGuardApi::~GameGuardApi(void) { Release(); } BOOL GameGuardApi::Init( TCHAR* construct_str ) { npgame_lib_ptr_ = new CNPGameLib(construct_str); if (!npgame_lib_ptr_) return FALSE; DWORD result = npgame_lib_ptr_->Init(); if (result != NPGAMEMON_SUCCESS) { // °¢ ¿¡·¯ÄÚµå 󸮹ýÀº ¿¹Á¦ ÂüÁ¶ ErrorCodeResult(result, true); return FALSE; } return TRUE; } BOOL GameGuardApi::Init( TCHAR* construct_str, TCHAR* module_path ) { TCHAR szFullFilePath[MAX_PATH]; TCHAR szOldFullFilePath[MAX_PATH]; GetModuleFileName(NULL, szOldFullFilePath, MAX_PATH); GetModuleFileName(NULL, szFullFilePath, MAX_PATH); size_t len = _tcslen(szFullFilePath); for (size_t i = len; i > 0; --i) { if (szFullFilePath[i] == '\\') break; szFullFilePath[i] = '\0'; } _tcscat(szFullFilePath, module_path); SetModulePath(szFullFilePath); TCHAR current_module_path[MAX_PATH] = {0, }; GetModuleFileName(NULL, current_module_path, MAX_PATH); npgame_lib_ptr_ = new CNPGameLib(construct_str, szFullFilePath); SetModulePath(szOldFullFilePath); GetModuleFileName(NULL, current_module_path, MAX_PATH); if (!npgame_lib_ptr_) return FALSE; DWORD result = npgame_lib_ptr_->Init(); if (result != NPGAMEMON_SUCCESS) { // °¢ ¿¡·¯ÄÚµå 󸮹ýÀº ¿¹Á¦ ÂüÁ¶ ErrorCodeResult(result); return FALSE; } return TRUE; } void GameGuardApi::SetClientHandle( HWND client_handle ) { if (!npgame_lib_ptr_) return; npgame_lib_ptr_->SetHwnd(client_handle); #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR log_message[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(log_message, INTERFACE_STRING_LENGTH, _T("GameGuardApi::SetClientHandle() ¼º°ø\n")); GlobalFunc::Write_GameGuard_Log(log_message); #endif // _NA_000000_20140519_GAMEGUARD_LOG } void GameGuardApi::ErrorCodeResult( DWORD dwResult, bool timer_type /* = false */ ) { TCHAR msg[256] = {0, }; LPCSTR lpszMsg; // ³ªÁß¿¡ ¿µ¾î·Î ÇÏÀÚ. switch (dwResult) { case NPGAMEMON_ERROR_EXIST: { #if defined(_KOREA) lpszMsg = _T("°ÔÀÓ°¡µå°¡ ½ÇÇà Áß ÀÔ´Ï´Ù. Àá½Ã Èijª ÀçºÎÆÃ ÈÄ¿¡ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù."); #else lpszMsg = _T("Game Guard is running now. Please wait or Re-boot your computer."); #endif // _KOREA } break; case NPGAMEMON_ERROR_GAME_EXIST: { #if defined(_KOREA) lpszMsg = _T("°ÔÀÓÀÌ Áߺ¹ ½ÇÇàµÇ¾ú°Å³ª °ÔÀÓ°¡µå°¡ ÀÌ¹Ì ½ÇÇà Áß ÀÔ´Ï´Ù. °ÔÀÓ Á¾·á ÈÄ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù."); #else lpszMsg = _T("Either Game is already running or Game Guard is running. Please close the game and start again."); #endif } break; case NPGAMEMON_ERROR_AUTH_GAMEGUARD: case NPGAMEMON_ERROR_NFOUND_GG: case NPGAMEMON_ERROR_AUTH_INI: case NPGAMEMON_ERROR_NFOUND_INI: { #if defined(_KOREA) lpszMsg = _T("°ÔÀÓ°¡µå ÆÄÀÏÀÌ ¾ø°Å³ª º¯Á¶µÇ¾ú½À´Ï´Ù. °ÔÀÓ°¡µå ¼Â¾÷ ÆÄÀÏÀ» ¼³Ä¡ÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù."); #else lpszMsg = _T("Game Guard file is missing or modulated. Please install Game Guard setup file."); #endif } break; case NPGAMEMON_ERROR_CRYPTOAPI: { #if defined(_KOREA) lpszMsg = _T("À©µµ¿ìÀÇ ÀϺΠ½Ã½ºÅÛ ÆÄÀÏÀÌ ¼Õ»óµÇ¾ú½À´Ï´Ù. ÀÎÅÍ³Ý ÀͽºÇ÷η¯(IE)¸¦ ´Ù½Ã ¼³Ä¡Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù."); #else lpszMsg = _T("Part of system window file is corrupted. Please re install Internet Explore."); #endif } break; case NPGAMEMON_ERROR_EXECUTE: { #if defined(_KOREA) lpszMsg = _T("°ÔÀÓ°¡µå ½ÇÇà¿¡ ½ÇÆÐÇß½À´Ï´Ù. °ÔÀÓ°¡µå Æú´õ »èÁ¦ ÈÄ °ÔÀÓÀ» Àç ½ÇÇàÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù."); #else lpszMsg = _T("Fail to run Game Guard. Please delete Game Guard folder and re start."); #endif } break; case NPGAMEMON_ERROR_ILLEGAL_PRG: { #if defined(_KOREA) lpszMsg = _T("ºÒ¹ý ÇÁ·Î±×·¥ÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù. ºÒÇÊ¿äÇÑ ÇÁ·Î±×·¥À» Á¾·áÇÑ ÈÄ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù."); #else lpszMsg = _T("illegal program has been detected. Please shut down unnecessary program and start again"); #endif } break; case NPGMUP_ERROR_ABORT: { #if defined(_KOREA) lpszMsg = _T("°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ®¸¦ Ãë¼ÒÇϼ̽À´Ï´Ù. Á¢¼ÓÀÌ °è¼Ó µÇÁö ¾ÊÀ» °æ¿ì ÀÎÅÍ³Ý ¹× °³ÀÎ ¹æÈ­º® ¼³Á¤À» Á¶Á¤ÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù."); #else lpszMsg = _T("Game Guard update has been cancelled. Please check your internet connection or personal firewall."); #endif } break; case NPGMUP_ERROR_CONNECT: { #if defined(_KOREA) lpszMsg = _T("°ÔÀÓ°¡µå ÃʱâÈ­ ¿¡·¯ ¶Ç´Â ±¸¹öÁ¯ÀÇ °ÔÀÓ°¡µå ÆÄÀÏÀÔ´Ï´Ù. °ÔÀÓ°¡µå ¼Â¾÷ÆÄÀÏÀ» ´Ù½Ã ¼³Ä¡ÇÏ°í °ÔÀÓÀ» ½ÇÇàÇØº¾´Ï´Ù."); #else lpszMsg = _T("Either Old Game Guard file or Game Guard reset error found. Please reinstall game guard and run again."); #endif } break; case NPGMUP_ERROR_PARAM: { #if defined(_KOREA) lpszMsg = _T("ini ÆÄÀÏÀÌ ¾ø°Å³ª º¯Á¶µÇ¾ú½À´Ï´Ù. °ÔÀÓ°¡µå ¼Â¾÷ ÆÄÀÏÀ» ¼³Ä¡Çϸé ÇØ°á ÇÒ ¼ö ÀÖ½À´Ï´Ù."); #else lpszMsg = _T("There is no ini file or corrupted ini file. Reinstalling Game Guard could solve this problem."); #endif } break; case NPGMUP_ERROR_INIT: { #if defined(_KOREA) lpszMsg = _T("npgmup.des ÃʱâÈ­ ¿¡·¯ÀÔ´Ï´Ù. °ÔÀÓ°¡µåÆú´õ¸¦ »èÁ¦ ÈÄ ´Ù½Ã °ÔÀÓ½ÇÇàÀ» ÇØº¾´Ï´Ù."); #else lpszMsg = _T("npgmup.des reset error. Please delete Game Guard folder and re start the game"); #endif } break; case NPGMUP_ERROR_DOWNCFG: { #if defined(_KOREA) lpszMsg = _T("°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ® ¼­¹ö Á¢¼Ó¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù. Àá½Ã ÈÄ Àç½Ãµµ ÇØº¸°Å³ª, °³ÀÎ ¹æÈ­º®ÀÌ ÀÖ´Ù¸é ¼³Á¤À» Á¶Á¤ÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù."); #else lpszMsg = _T("Unable to connect Game Guard update server. Please restart after while or change personal firewall setting."); #endif } break; case NPGMUP_ERROR_AUTH: { #if defined(_KOREA) lpszMsg = _T("°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ®¸¦ ¿Ï·áÇÏÁö ¸øÇß½À´Ï´Ù. ¹ÙÀÌ·¯½º ¹é½ÅÀ» ÀϽà ÁßÁö ½ÃŲ ÈÄ Àç½Ãµµ ÇØº¸½Ã°Å³ª, PC °ü¸® ÇÁ·Î±×·¥À» »ç¿ëÇÏ½Ã¸é ¼³Á¤À» Á¶Á¤ÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù."); #else lpszMsg = _T("Unable to finish Game Guard update. Please pause Anti-virus program and restart. PC management program can adjust its setting as well."); #endif } break; case NPGAMEMON_ERROR_NPSCAN: { #if defined(_KOREA) lpszMsg = _T("¹ÙÀÌ·¯½º ¹× ÇØÅ·Åø °Ë»ç ¸ðµâ ·Îµù¿¡ ½ÇÆÐ Çß½À´Ï´Ù. ¸Þ¸ð¸® ºÎÁ·À̰ųª ¹ÙÀÌ·¯½º¿¡ ÀÇÇÑ °¨¿°ÀÏ ¼ö ÀÖ½À´Ï´Ù."); #else lpszMsg = _T("Virus or Hacking tool checking module loading has been failed. There are possible shortage on memory or corrupted with virus"); #endif } break; case NPGG_ERROR_COLLISION: { #if defined(_KOREA) lpszMsg = _T("°ÔÀÓ°¡µå¿Í Ãæµ¹ ÇÁ·Î±×·¥ÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù."); #else lpszMsg = _T("Found a program that is clashing Game Guard."); #endif } break; default: { // ÀûÀýÇÑ Á¾·á ¸Þ½ÃÁö Ãâ·Â #if defined(_KOREA) lpszMsg = _T("°ÔÀÓ°¡µå ½ÇÇà Áß ¿¡·¯°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù. °ÔÀÓ Æú´õ ¾ÈÀÇ GameGuardÆú´õ¿¡ ÀÖ´Â &.erl ÆÄÀϵéÀ» Game1@inca.co.kr·Î ÷ºÎÇÏ¿© ¸ÞÀÏ º¸³»Áֽñ⠹ٶø´Ï´Ù."); #else lpszMsg = _T("Error occurs while Game Guard is running. Please attach &.erl files from Game Guard folder and send those to Game1@inca.co.k through email."); #endif } break; } #if defined(_KOREA) Sprintf(msg, _T("°ÔÀÓ°¡µå ¿¡·¯ : %lu"), dwResult); #else Sprintf(msg, _T("GameGuard Error : %lu"), dwResult); #endif if (true == timer_type) { _tcscpy(error_message_, lpszMsg); error_code_ = dwResult; is_timer_type_ = TRUE; GameGuardMessageBox(lpszMsg); } else { error_code_ = dwResult; GameGuardMessageBox(lpszMsg); is_timer_type_ = FALSE; } } DWORD GameGuardApi::Check() { if (npgame_lib_ptr_) { #ifdef _NA_000000_20140519_GAMEGUARD_LOG GlobalFunc::Write_GameGuard_Log(_T("GameGuardApi::Check() Call\n")); #endif // _NA_000000_20140519_GAMEGUARD_LOG return npgame_lib_ptr_->Check(); } return 0; } void GameGuardApi::Release() { SAFE_DELETE(npgame_lib_ptr_); } BOOL GameGuardApi::SendUserId( TCHAR* user_id_string ) { BOOL result = FALSE; if (npgame_lib_ptr_) { TCHAR user_id[ID_MAX_LEN] = {0, }; int len = lstrlen(user_id_string); _tcsncpy(user_id, user_id_string, ID_MAX_LEN - 1); if (len >= 0 && len < ID_MAX_LEN) { user_id[len + 1] = _T('\0'); } #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR result_log[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(result_log, INTERFACE_STRING_LENGTH, _T("GameGuardApi::SendUserId() Call : %s\n"), user_id); GlobalFunc::Write_GameGuard_Log(result_log); #endif // _NA_000000_20140519_GAMEGUARD_LOG // 0 - ½ÇÆÐ, 1 - ¼º°ø result = npgame_lib_ptr_->Send(user_id); if (result == 0) { ErrorCodeResult(0, true); } return result; } return result; } LPCSTR GameGuardApi::GetInfo() { if (npgame_lib_ptr_) { return npgame_lib_ptr_->GetInfo(); } return NULL; } LRESULT CALLBACK GameGuardApi::MessageBoxProc( HWND dlg, UINT message, WPARAM wParam, LPARAM lParam ) { switch (message) { case WM_INITDIALOG: { TCHAR title[256] = {0, }; if (error_code_ != 0) { _stprintf(title, _T("nProtect Gameuard : %u"), error_code_); } else { _stprintf(title, _T("nProtect GameGuard")); } SetWindowText(dlg, title); SetDlgItemText(dlg, IDC_MESSAGE_TEXT, error_message_); SetDlgItemText(dlg, IDOK, "OK"); if (is_timer_type_ == TRUE) { SetTimer(dlg, 1, 8000, (TIMERPROC) NULL); } } return TRUE; case WM_COMMAND: { if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(dlg, LOWORD(wParam)); GlobalFunc::LogOutGame(); return TRUE; } } break; case WM_TIMER: { switch (wParam) { case 1: { EndDialog(dlg, 0); GlobalFunc::LogOutGame(); } break; } } break; } return FALSE; } void GameGuardApi::GameGuardMessageBox( LPCTSTR message ) { is_timer_type_ = TRUE; _tcscpy(error_message_, message); DialogBox(g_hInstance, (LPCTSTR)IDD_MESSAGE_BOX, NULL, (DLGPROC)MessageBoxProc); ZeroMemory(error_message_, MAX_PATH); } void GameGuardApi::LastMessagePrint() { if (_tcscmp(error_message_, _T("")) != 0) { GameGuardMessageBox(error_message_); #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR log_message[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(log_message, INTERFACE_STRING_LENGTH, _T("GameGuardApi::LastMessagePrint() Call\n")); GlobalFunc::Write_GameGuard_Log(log_message); #endif // _NA_000000_20140519_GAMEGUARD_LOG } } void GameGuardApi::SendToGameGuardServer( PBYTE pbPacket, DWORD dwPacketSize, DWORD dwServerNumber ) { if (npgame_lib_ptr_) { npgame_lib_ptr_->Auth3(pbPacket, dwPacketSize, dwServerNumber); #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR result_log[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(result_log, INTERFACE_STRING_LENGTH, _T("GameGuardApi::SendToGameGuardServer() Call\n")); GlobalFunc::Write_GameGuard_Log(result_log); #endif // _NA_000000_20140519_GAMEGUARD_LOG } } bool GameGuardApi::Recv_CG_GAMEGUARD_SERVER_QUERY_CMD_Packet( MSG_BASE* msg ) { if ((msg->m_byCategory == CG_ARMORKIT) && (msg->m_byProtocol == CG_GAMEGUARD_SERVER_QUERY_CMD)) { MSG_CG_GAMEGUARD_SERVER_QUERY_CMD* cmd = static_cast(msg); if (npgame_lib_ptr_ && cmd) { // °ÔÀÓ°¡µå¿¡ Å뺸 npgame_lib_ptr_->Auth3(cmd->buffer, cmd->query_size, 0); #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR result_log[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(result_log, INTERFACE_STRING_LENGTH, _T("GameGuardApi::Recv_CG_GAMEGUARD_SERVER_QUERY_CMD_Packet() Call\n")); GlobalFunc::Write_GameGuard_Log(result_log); #endif // _NA_000000_20140519_GAMEGUARD_LOG return true; } } return false; } bool GameGuardApi::Recv_CG_GAMEGUARD_SERVER_QUERY_NAK_Packet( MSG_BASE* msg ) { if ((msg->m_byCategory == CG_ARMORKIT) && (msg->m_byProtocol == CG_GAMEGUARD_SERVER_QUERY_NAK)) { MSG_CG_GAMEGUARD_SERVER_QUERY_NAK* packet = static_cast(msg); if (npgame_lib_ptr_ && packet) { // Ŭ¶óÀÌ¾ðÆ® Á¾·á #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR result_log[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(result_log, INTERFACE_STRING_LENGTH, _T("GameGuardApi::Recv_CG_GAMEGUARD_SERVER_QUERY_NAK_Packet() Call\n")); GlobalFunc::Write_GameGuard_Log(result_log); #endif // _NA_000000_20140519_GAMEGUARD_LOG ErrorCodeResult(packet->result_code, true); return true; } } return false; } BOOL CALLBACK NPGameMonCallback(DWORD dwMsg, DWORD dwArg) { TCHAR szHackMsg[256] = {0, }; // ¸Þ½ÃÁö ó¸® Callback ÇÔ¼ö // °ÔÀÓ Á¾·á½Ã¿¡´Â false¸¦ return ÇØÁÖ°í, Á¾·áÇÏÁö ¾Ê´Â °æ¿ì´Â true¸¦ return ÇÕ´Ï´Ù. GameGuardApi::Instance()->error_code_ = dwMsg; switch (dwMsg) { case NPGAMEMON_COMM_ERROR: case NPGAMEMON_COMM_CLOSE: { #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR result_log[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(result_log, INTERFACE_STRING_LENGTH, _T("NPGameMonCallback() NPGAMEON_COMM_ERROR || NPGAMEON_COMM_CLOSE Call\n")); GlobalFunc::Write_GameGuard_Log(result_log); #endif // _NA_000000_20140519_GAMEGUARD_LOG _stprintf(GameGuardApi::error_message_, TEXT("GameGuard Error : %lu"), dwArg); // Á¾·á ÄÚµå GlobalFunc::LogOutGame(true); return FALSE; } break; case NPGAMEMON_INIT_ERROR: { #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR log_message[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(log_message, INTERFACE_STRING_LENGTH, _T("NPGameMonCallback::NPGAMEON_INIT_ERROR Call\n")); GlobalFunc::Write_GameGuard_Log(log_message); #endif // _NA_000000_20140519_GAMEGUARD_LOG #if defined(_KOREA) _stprintf(GameGuardApi::error_message_, TEXT("°ÔÀÓ°¡µå ÃʱâÈ­ ¿¡·¯ : %lu"), dwArg); #else _stprintf(GameGuardApi::error_message_, TEXT("Game Guard initializing error"), dwArg); #endif // Á¾·á ÄÚµå GlobalFunc::LogOutGame(true); return FALSE; } break; case NPGAMEMON_SPEEDHACK: { #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR log_message[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(log_message, INTERFACE_STRING_LENGTH, _T("NPGameMonCallback::NPGAMEON_SPEEDHACK Call\n")); GlobalFunc::Write_GameGuard_Log(log_message); #endif // _NA_000000_20140519_GAMEGUARD_LOG #if defined(_KOREA) _stprintf(GameGuardApi::error_message_, TEXT("½ºÇǵåÇÙÀÌ °¨ÁöµÇ¾ú½À´Ï´Ù.")); #else _stprintf(GameGuardApi::error_message_, TEXT("Speed hack has been detected.")); #endif // Á¾·á ÄÚµå GlobalFunc::LogOutGame(true); return FALSE; } break; case NPGAMEMON_GAMEHACK_KILLED: { #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR log_message[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(log_message, INTERFACE_STRING_LENGTH, _T("NPGameMonCallback::NPGAMEON_GAMEHACK_KILLED Call\n")); GlobalFunc::Write_GameGuard_Log(log_message); #endif // _NA_000000_20140519_GAMEGUARD_LOG #if defined(_KOREA) _stprintf(GameGuardApi::error_message_, TEXT("°ÔÀÓÇÙÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù.")); #else _stprintf(GameGuardApi::error_message_, TEXT("Game Hack has been detected.")); #endif CONST CHAR* temp_info = GameGuardApi::Instance()->GetInfo(); if (temp_info) { // ¼­¹ö Àü¼Û ÄÚµå ÇÊ¿ä } // Á¾·á ÄÚµå GlobalFunc::LogOutGame(true); return FALSE; } break; case NPGAMEMON_GAMEHACK_DETECT: { #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR log_message[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(log_message, INTERFACE_STRING_LENGTH, _T("NPGameMonCallback::NPGAMEON_GAMEHACK_DETECT Call\n")); GlobalFunc::Write_GameGuard_Log(log_message); #endif // _NA_000000_20140519_GAMEGUARD_LOG #if defined(_KOREA) _stprintf(GameGuardApi::error_message_, TEXT("°ÔÀÓÇÙÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù.")); #else _stprintf(GameGuardApi::error_message_, TEXT("Game Hack has been detected.")); #endif CONST CHAR* temp_info = GameGuardApi::Instance()->GetInfo(); if (temp_info) { // ¼­¹ö Àü¼Û ÄÚµå ÇÊ¿ä } // Á¾·á ÄÚµå GlobalFunc::LogOutGame(true); return FALSE; } break; case NPGAMEMON_GAMEHACK_DOUBT: { #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR log_message[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(log_message, INTERFACE_STRING_LENGTH, _T("NPGameMonCallback::NPGAMEON_DOUBT Call\n")); GlobalFunc::Write_GameGuard_Log(log_message); #endif // _NA_000000_20140519_GAMEGUARD_LOG #if defined(_KOREA) _stprintf(GameGuardApi::error_message_, TEXT("°ÔÀÓÀ̳ª °ÔÀÓ°¡µå°¡ º¯Á¶µÇ¾ú½À´Ï´Ù.")); #else _stprintf(GameGuardApi::error_message_, TEXT("Game or Game Guard is corrupted.")); #endif // Á¾·á ÄÚµå GlobalFunc::LogOutGame(true); return FALSE; } break; case NPGAMEMON_CHECK_CSAUTH3: { PCSAuth3Data pCSAuth3 = (PCSAuth3Data)dwArg; MSG_CG_GAMEGUARD_SERVER_QUERY_ACK msg; memcpy(&(msg.buffer), pCSAuth3->bPacket, pCSAuth3->dwPacketSize); msg.query_size = pCSAuth3->dwPacketSize; // ¿©±â´Â °ÔÀÓ¼­¹ö·Î Àü¼ÛÇÏ´Â °÷ #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR result_log[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(result_log, INTERFACE_STRING_LENGTH, _T("NPGAMEON_CHECK_CSAUTH3 Call\n")); GlobalFunc::Write_GameGuard_Log(result_log); ZeroMemory(result_log, INTERFACE_STRING_LENGTH); Snprintf(result_log, INTERFACE_STRING_LENGTH, _T("PCSAuth3Data PacketSize : %d\n"), pCSAuth3->dwPacketSize); GlobalFunc::Write_GameGuard_Log(result_log); #endif // _NA_000000_20140519_GAMEGUARD_LOG // ¼­¹ö·Î Àü¼Û GlobalFunc::SendPacket(CI_GAMESERVERIDX, &msg, sizeof(msg)); return TRUE; } break; case NPGAMEMON_GAMEHACK_REPORT: { DWORD dwHackInfoSize = 0; LPBYTE pHackInfo = NULL; pHackInfo = GetHackInfoFromGameMon(&dwHackInfoSize); if (pHackInfo && dwHackInfoSize > 0) { // ¾Æ·¡ ÇÔ¼ö´Â °ÔÀÓ°¡µå¿¡¼­ Á¦°øÇÏ´Â ÇÔ¼ö°¡ ¾Æ´Õ´Ï´Ù. MSG_CG_GAMEGUARD_HACKDATA_CMD msg; memcpy(&(msg.buffer), pHackInfo, dwHackInfoSize); // ¼­¹ö·Î Àü¼Û GlobalFunc::SendPacket(CI_GAMESERVERIDX, &msg, sizeof(msg)); #ifdef _NA_000000_20140519_GAMEGUARD_LOG TCHAR result_log[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(result_log, INTERFACE_STRING_LENGTH, _T("NPGAMEON_GAMEHACK_REPORT Call\n")); GlobalFunc::Write_GameGuard_Log(result_log); #endif // _NA_000000_20140519_GAMEGUARD_LOG } } return TRUE; } return TRUE; // °è¼Ó ÁøÇà } #endif // USING_GAMEGUARD