#include "SunClientPrecompiledHeader.h" #include "HackShield.h" #include "GlobalFunc.h" #include "interfaceManager.h" #include "GameFrameWork.h" #include "resource.h" #include "ClientVer.h" #ifdef __NA000000_070913_HACKSHIELD_INSTALLATION__ TCHAR HackShield::error_message_[MAX_PATH] = {0, }; //------------------------------------------------------------------------------ HackShield::HackShield(): check_variable_crc_(0) { memset(title_, 0, sizeof(title_)); memset(error_message_, 0, sizeof(error_message_)); } HackShield::~HackShield() { } BOOL HackShield::CheckCompatibilityMode() { #ifdef _CHECK_COMPATIBILITY_MODE /* GetVersionEx() ¿Í VerifyVersionInfo() À» ÀÌ¿ëÇÑ È£È¯¼º¿©ºÎ üũ GetVersionEx() À» ÀÌ¿ëÇÑ OS¹öÀüÁ¤º¸¸¦ VerifyVersionInfo() ¸¦ ÅëÇÏ¿© ½ÇÁ¦ OS¹öÀüÁ¤º¸ÀÎÁö È®ÀÎ !> VerifyVersionInfo() ÇÔ¼ö°¡ À©µµ¿ì2000ºÎÅÍ Áö¿øµÊ. */ OSVERSIONINFOEX os_version_info; ZeroMemory(&os_version_info, sizeof(OSVERSIONINFOEX)); os_version_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); GetVersionEx((OSVERSIONINFO*)&os_version_info); DWORDLONG dwlConditionMask = 0; VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_EQUAL); VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_EQUAL); BOOL check_verify = VerifyVersionInfo(&os_version_info, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask); return check_verify; #else return TRUE; #endif //_CHECK_COMPATIBILITY_MODE } BOOL HackShield::HS_Init() { GetWindowText(g_hWndMain, title_, sizeof(title_)); int nRet = 0; TCHAR szFullFilePath[MAX_PATH]; TCHAR szFullFileDLLPath[MAX_PATH]; TCHAR szMessage[INTERFACE_STRING_LENGTH]; 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'; } lstrcpy(szFullFileDLLPath, szFullFilePath); //------------------------------------------------------------------------------ #ifdef _SUNGAME_VER // sungame.exe // °¢ ±¹°¡¹öÀüº° °ÔÀÓ ÄÚµå ¹× ¶óÀ̼¾½º ÄÚµå ºÎ¿© #if defined( _KOREA ) char * license = "132370F56EA3A25145D48FB1"; int gamecode = 7012; char* hackshield_monitorconnect_IP = "127.0.0.1"; #elif defined( _JAPAN ) char * license = "26628E6F50BCC589D6B4192C"; int gamecode = 7018; char* hackshield_monitorconnect_IP = "127.0.0.1"; #elif defined( _CHINA ) char * license = "5B1EADF1FB22BB0B5587862E"; int gamecode = 7019; char* hackshield_monitorconnect_IP = "114.80.196.21"; if (PROGRAMPARAM->nation_type() == kLanguageTaiwan) //!< 2:Áß±¹, 3:´ë¸¸ { //! ´ë¸¸ license = "CBA5ED73840EBC165E95A851"; gamecode = 7021; hackshield_monitorconnect_IP = "127.0.0.1"; } #elif defined( _GLOBAL ) // ±Û·Î¹ú °ÔÀÓÄÚµå¿Í ¶óÀ̼¾½º char * license = "5822055B34F0FFADD9E72461"; int gamecode = 7020; char* hackshield_monitorconnect_IP = "127.0.0.1"; #else // »õ·Î¿î ±¹°¡¹öÀüÀÇ °æ¿ì ±âÁ¸´ë·Î ±¹³» Äڵ带 Àӽ÷Π»ç¿ë char * license = "132370F56EA3A25145D48FB1"; int gamecode = 7012; char* hackshield_monitorconnect_IP = "127.0.0.1"; #endif #elif defined( _GAMECLIENT_VER ) char * license = "9E5D4B3960E56F6C176BFE56"; // gameclient.exe int gamecode = 7014; char* hackshield_monitorconnect_IP = "127.0.0.1"; #elif defined( _SUNGAME_DUMP_VER ) char * license = "948B1F9C4EC58A1D87ACC7ED"; // sungame_dump.exe int gamecode = 7015; char* hackshield_monitorconnect_IP = "127.0.0.1"; #else char * license = "9902A239DBEFEB010C31A26F"; // sungametest.exe int gamecode = 7013; char* hackshield_monitorconnect_IP = "127.0.0.1"; #endif //------------------------------------------------------------------------------ AHNHS_EXT_ERRORINFO HsExtError; //HShield.h ¿¡ Á¤ÀÇµÈ ±¸Á¶Ã¼ ZeroMemory(&HsExtError, sizeof(HsExtError)); strncpy(HsExtError.szServer, hackshield_monitorconnect_IP, MAX_PATH); strncpy(HsExtError.szGameVersion, c_tcBUILD_VERSION, MAX_PATH); strncpy(HsExtError.szUserId, "", MAX_PATH); //¾ÆÀ̵𸦠ȮÀÎÇÒ¼ö ÀÖ´Â ½ÃÁ¡¿¡¼­ _AhnHS_SetUserId È£Ãâ //------------------------------------------------------------------------------ #ifdef _AHN_SMART_UPDATE_ lstrcat(szFullFilePath + i, _T("\\HShield")); #ifdef _APPLY_HACKSHIELD_MONITOR if (PROGRAMPARAM->nation_type() == kLanguageTaiwan) //!< 2:Áß±¹, 3:´ë¸¸ { //! ´ë¸¸ nRet = _AhnHS_HSUpdate(szFullFilePath, 600000); } else { // Ex ÇÔ¼ö¸¦ »ç¿ëÇϽǶ§´Â ¹Ýµå½Ã HSUpSetEnv.exe ¼³Á¤ Åø·Î env ÆÄÀÏ¿¡ // °ÔÀÓ Äڵ带 ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù. nRet = _AhnHS_HSUpdateEx(szFullFilePath, // ÇÙ½¯µå Æú´õ °æ·Î 1000 * 600, // ¾÷µ¥ÀÌÆ® Àüü ŸÀÓ ¾Æ¿ô gamecode, // °ÔÀÓ ÄÚµå AHNHSUPDATE_CHKOPT_HOSTFILE | AHNHSUPDATE_CHKOPT_GAMECODE, HsExtError, 1000* 20); // ¼­¹ö ¿¬°á ŸÀӾƿô } #else nRet = _AhnHS_HSUpdate(szFullFilePath, 600000); #endif if (nRet != HACKSHIELD_ERROR_SUCCESS) { switch (nRet) { case HSERROR_ENVFILE_NOTREAD: case HSERROR_ENVFILE_NOTWRITE: case HSERROR_NETWORK_CONNECT_FAIL: case HSERROR_LIB_NOTEDIT_REG: case HSERROR_NOTFINDFILE: case HSERROR_PROTECT_LISTLOAD_FAIL: case HSERROR_HSUPDATE_TIMEOUT: default: #ifdef _KOREA wsprintf(szMessage, "¾÷µ¥ÀÌÆ® ±â´É¿¡ ¹®Á¦°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.(%x)", nRet); #else wsprintf(szMessage, "An error has been occurred on the update functions.(%x)", nRet); #endif break; } MessageBox(NULL, szMessage, title_, MB_OK); return FALSE; } #endif //_AHN_SMART_UPDATE_ lstrcat(szFullFileDLLPath + i, _T("\\HShield\\EhSvc.dll")); #ifdef _APPLY_HACKSHIELD_MONITOR if (PROGRAMPARAM->nation_type() == kLanguageTaiwan) //!< 2:Áß±¹, 3:´ë¸¸ { //! ´ë¸¸ } else { //! Áß±¹ nRet = _AhnHS_StartMonitor(HsExtError, szFullFileDLLPath); if (nRet != ERROR_SUCCESS) { #ifdef _KOREA wsprintf(szMessage, "ÇØÅ·¹æÁö ¸ð´ÏÅ͸µ ±â´É¿¡ ¹®Á¦°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.(%x)", nRet); #else wsprintf(szMessage, "An error has been occurred on the anti-hacking monitor functions.(%x)", nRet); #endif MessageBox(NULL, szMessage, title_, MB_OK); return FALSE; } } #endif //_APPLY_HACKSHIELD_MONITOR DWORD dwOption = AHNHS_CHKOPT_ALL; DWORD dwSensingRatio = AHNHS_SPEEDHACK_SENSING_RATIO_NORMAL; #ifdef _CHINA // ´ë¸¸ ȣȯ¼º¸ðµå À̽´·Î ÀÎÇÑ ½ÃÇǵåÇÙ ¹Î°¨µµ ¼³Á¤ dwSensingRatio = AHNHS_SPEEDHACK_SENSING_RATIO_HIGHEST; if (PROGRAMPARAM->nation_type() != kLanguageTaiwan) //!< 2:Áß±¹, 3:´ë¸¸ { // Áß±¹ - ÇÙ½¯µå ¾÷µ¥ÀÌÆ® üũ ±â´É dwOption |= AHNHS_CHKOPT_UPDATED_FILE_CHECK; } #endif #ifdef _HACKSHIELD_CHECK_OPTION_LMP // LMP ¿É¼Ç Ãß°¡ dwOption |= AHNHS_CHKOPT_LOCAL_MEMORY_PROTECTION; #endif //_HACKSHIELD_CHECK_OPTION_LMP nRet = _AhnHS_Initialize(szFullFileDLLPath, HS_CallbackProc, gamecode, license, dwOption, dwSensingRatio); if (nRet != HS_ERR_OK) { switch (nRet) { case HS_ERR_UNKNOWN: // ¾Ë ¼ö ¾ø´Â ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. case HS_ERR_INVALID_PARAM: // ¿Ã¹Ù¸£Áö ¾ÊÀº ÀÎÀÚÀÔ´Ï´Ù. case HS_ERR_NOT_INITIALIZED: // ÇÙ½¯µå ¸ðµâÀÌ ÃʱâÈ­µÇÁö ¾ÊÀº »óÅÂÀÔ´Ï´Ù. case HS_ERR_COMPATIBILITY_MODE_RUNNING: // ÇöÀç ÇÁ·Î¼¼½º°¡ ȣȯ¼º ¸ðµå·Î ½ÇÇàµÇ¾ú½À´Ï´Ù. case HS_ERR_ALREADY_UNINITIALIZED: // Uninitialize°¡ ¼öÇàµÈ ÀÌÈÄ¿¡´Â °ÔÀÓÀ» Àç½ÇÇàÇÑÈÄ InitializeÇØ¾ß ÇÕ´Ï´Ù. case HS_ERR_INVALID_LICENSE: // ¿Ã¹Ù¸£Áö ¾ÊÀº ¶óÀ̼¾½º ŰÀÔ´Ï´Ù. case HS_ERR_INVALID_FILES: // À߸øµÈ ÆÄÀÏ ¼³Ä¡µÇ¾ú½À´Ï´Ù. ÇÁ·Î±×·¥À» À缳ġÇϽñ⠹ٶø´Ï´Ù. case HS_ERR_INIT_DRV_FAILED: case HS_ERR_ANOTHER_SERVICE_RUNNING: // ´Ù¸¥ °ÔÀÓÀ̳ª ÇÁ·Î¼¼½º¿¡¼­ ÇÙ½¯µå¸¦ ÀÌ¹Ì »ç¿ëÇϰí ÀÖ½À´Ï´Ù. case HS_ERR_ALREADY_INITIALIZED: // ÀÌ¹Ì ÇÙ½¯µå ¸ðµâÀÌ ÃʱâÈ­µÇ¾î ÀÖ½À´Ï´Ù. case HS_ERR_DEBUGGER_DETECT: // ÄÄÇ»ÅÍ¿¡¼­ µð¹ö°Å ½ÇÇàÀÌ °¨ÁöµÇ¾ú½À´Ï´Ù. µð¹ö°ÅÀÇ ½ÇÇàÀ» ÁßÁö½ÃŲ µÚ¿¡ ´Ù½Ã ½ÇÇà½ÃÄÑÁֽñâ¹Ù¶ø´Ï´Ù. case HS_ERR_EXECUTABLE_FILE_CRACKED: // ½ÇÇà ÆÄÀÏÀÇ Äڵ尡 Å©·¢ µÇ¾ú½À´Ï´Ù. case HS_ERR_NEED_ADMIN_RIGHTS: // ADMIN ±ÇÇÑÀÌ ÇÊ¿äÇÕ´Ï´Ù. case HS_ERR_START_ENGINE_FAILED: // ÇØÅ· ÇÁ·Î±×·¥ °¨Áö ¿£ÁøÀ» ½ÃÀÛÇÒ ¼ö ¾ø½À´Ï´Ù. case HS_ERR_ALREADY_SERVICE_RUNNING: // ÀÌ¹Ì ÇÙ½¯µå ¼­ºñ½º°¡ ½ÇÇà ÁßÀÔ´Ï´Ù. case HS_ERR_DRV_FILE_CREATE_FAILED: // ÇÙ½¯µå µå¶óÀ̹ö ÆÄÀÏÀ» »ý¼ºÇÒ ¼ö ¾ø½À´Ï´Ù. case HS_ERR_REG_DRV_FILE_FAILED: // ÇÙ½¯µå µå¶óÀ̹ö¸¦ µî·ÏÇÒ ¼ö ¾ø½À´Ï´Ù. case HS_ERR_START_DRV_FAILED: // ÇÙ½¯µå µå¶óÀ̹ö¸¦ ½ÃÀÛÇÒ ¼ö ¾ø½À´Ï´Ù. case HS_ERR_SERVICE_NOT_RUNNING: // ÇÙ½¯µå ¼­ºñ½º°¡ ½ÇÇàµÇ°í ÀÖÁö ¾ÊÀº »óÅÂÀÔ´Ï´Ù. case HS_ERR_SERVICE_STILL_RUNNING: // ÇÙ½¯µå ¼­ºñ½º°¡ ¾ÆÁ÷ ½ÇÇàÁßÀÎ »óÅÂÀÔ´Ï´Ù. case HS_ERR_NEED_UPDATE: // ÇÙ½¯µå ¸ðµâÀÇ ¾÷µ¥ÀÌÆ®°¡ ÇÊ¿äÇÕ´Ï´Ù. case HS_ERR_API_IS_HOOKED: // ÇØ´ç API°¡ ÈÄÅ·µÇ¾î ÀÖ´Â »óÅÂÀÔ´Ï´Ù. default: #ifdef _KOREA wsprintf(szMessage, "ÇØÅ·¹æÁö ±â´É¿¡ ¹®Á¦°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.(%x)", nRet); #else wsprintf(szMessage, "An error has been occurred on the anti-hacking functions.(%x)", nRet); #endif //g_InterfaceManager.GetInterfaceString( 6031, szMessage ); //lstrcat( szMessage, "(%x)" ); break; } MessageBox(NULL, szMessage, title_, MB_OK); return FALSE; } ::SetUnhandledExceptionFilter(Game_UnhandledExceptionHandler); return CryptManager::InitInfo(NULL); } BOOL HackShield::HS_StartService() { int nRet = 0; TCHAR szMessage[INTERFACE_STRING_LENGTH]; nRet = _AhnHS_StartService(); if (nRet != HS_ERR_OK) { switch (nRet) { case HS_ERR_UNKNOWN: // ¾Ë ¼ö ¾ø´Â ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. case HS_ERR_INVALID_PARAM: // ¿Ã¹Ù¸£Áö ¾ÊÀº ÀÎÀÚÀÔ´Ï´Ù. case HS_ERR_NOT_INITIALIZED: // ÇÙ½¯µå ¸ðµâÀÌ ÃʱâÈ­µÇÁö ¾ÊÀº »óÅÂÀÔ´Ï´Ù. case HS_ERR_COMPATIBILITY_MODE_RUNNING: // ÇöÀç ÇÁ·Î¼¼½º°¡ ȣȯ¼º ¸ðµå·Î ½ÇÇàµÇ¾ú½À´Ï´Ù. case HS_ERR_ALREADY_UNINITIALIZED: // Uninitialize°¡ ¼öÇàµÈ ÀÌÈÄ¿¡´Â °ÔÀÓÀ» Àç½ÇÇàÇÑÈÄ InitializeÇØ¾ß ÇÕ´Ï´Ù. case HS_ERR_INVALID_LICENSE: // ¿Ã¹Ù¸£Áö ¾ÊÀº ¶óÀ̼¾½º ŰÀÔ´Ï´Ù. case HS_ERR_INVALID_FILES: // À߸øµÈ ÆÄÀÏ ¼³Ä¡µÇ¾ú½À´Ï´Ù. ÇÁ·Î±×·¥À» À缳ġÇϽñ⠹ٶø´Ï´Ù. case HS_ERR_INIT_DRV_FAILED: case HS_ERR_ANOTHER_SERVICE_RUNNING: // ´Ù¸¥ °ÔÀÓÀ̳ª ÇÁ·Î¼¼½º¿¡¼­ ÇÙ½¯µå¸¦ ÀÌ¹Ì »ç¿ëÇϰí ÀÖ½À´Ï´Ù. case HS_ERR_ALREADY_INITIALIZED: // ÀÌ¹Ì ÇÙ½¯µå ¸ðµâÀÌ ÃʱâÈ­µÇ¾î ÀÖ½À´Ï´Ù. case HS_ERR_DEBUGGER_DETECT: // ÄÄÇ»ÅÍ¿¡¼­ µð¹ö°Å ½ÇÇàÀÌ °¨ÁöµÇ¾ú½À´Ï´Ù. µð¹ö°ÅÀÇ ½ÇÇàÀ» ÁßÁö½ÃŲ µÚ¿¡ ´Ù½Ã ½ÇÇà½ÃÄÑÁֽñâ¹Ù¶ø´Ï´Ù. case HS_ERR_EXECUTABLE_FILE_CRACKED: // ½ÇÇà ÆÄÀÏÀÇ Äڵ尡 Å©·¢ µÇ¾ú½À´Ï´Ù. case HS_ERR_NEED_ADMIN_RIGHTS: // ADMIN ±ÇÇÑÀÌ ÇÊ¿äÇÕ´Ï´Ù. case HS_ERR_START_ENGINE_FAILED: // ÇØÅ· ÇÁ·Î±×·¥ °¨Áö ¿£ÁøÀ» ½ÃÀÛÇÒ ¼ö ¾ø½À´Ï´Ù. case HS_ERR_ALREADY_SERVICE_RUNNING: // ÀÌ¹Ì ÇÙ½¯µå ¼­ºñ½º°¡ ½ÇÇà ÁßÀÔ´Ï´Ù. case HS_ERR_DRV_FILE_CREATE_FAILED: // ÇÙ½¯µå µå¶óÀ̹ö ÆÄÀÏÀ» »ý¼ºÇÒ ¼ö ¾ø½À´Ï´Ù. case HS_ERR_REG_DRV_FILE_FAILED: // ÇÙ½¯µå µå¶óÀ̹ö¸¦ µî·ÏÇÒ ¼ö ¾ø½À´Ï´Ù. case HS_ERR_START_DRV_FAILED: // ÇÙ½¯µå µå¶óÀ̹ö¸¦ ½ÃÀÛÇÒ ¼ö ¾ø½À´Ï´Ù. case HS_ERR_SERVICE_NOT_RUNNING: // ÇÙ½¯µå ¼­ºñ½º°¡ ½ÇÇàµÇ°í ÀÖÁö ¾ÊÀº »óÅÂÀÔ´Ï´Ù. case HS_ERR_SERVICE_STILL_RUNNING: // ÇÙ½¯µå ¼­ºñ½º°¡ ¾ÆÁ÷ ½ÇÇàÁßÀÎ »óÅÂÀÔ´Ï´Ù. case HS_ERR_NEED_UPDATE: // ÇÙ½¯µå ¸ðµâÀÇ ¾÷µ¥ÀÌÆ®°¡ ÇÊ¿äÇÕ´Ï´Ù. case HS_ERR_API_IS_HOOKED: // ÇØ´ç API°¡ ÈÄÅ·µÇ¾î ÀÖ´Â »óÅÂÀÔ´Ï´Ù. case HS_ERR_LMP_START: // LMP ±â´ÉÀ» ½ÃÀÛÇÒ ¼ö ¾ø½À´Ï´Ù. default: #ifdef _KOREA wsprintf(szMessage, "ÇØÅ·¹æÁö ±â´É¿¡ ¹®Á¦°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.(%x)", nRet); #else wsprintf(szMessage, "An error has been occurred on the anti-hacking functions.(%x)", nRet); #endif break; } MessageBox(NULL, szMessage, title_, MB_OK); return FALSE; } #ifdef _CHECK_COMPATIBILITY_MODE // ȣȯ¼º ¸ðµåÀÇ °æ¿ì Ŭ¶óÀÌ¾ðÆ® Á¾·á if (CheckCompatibilityMode() == FALSE) { MessageBox(NULL, "Can not use Compatibility Mode", NULL, MB_OK); return FALSE; } #endif //_CHECK_COMPATIBILITY_MODE return TRUE; } BOOL HackShield::HS_StopService() { int nRet = 0; nRet = _AhnHS_StopService(); if (nRet != HS_ERR_OK) { return FALSE; } return TRUE; } BOOL HackShield::HS_UnInit() { int nRet = 0; nRet = _AhnHS_Uninitialize(); if (nRet != HS_ERR_OK) { return FALSE; } return TRUE; } int __stdcall HackShield::HS_CallbackProc(long lCode, long lParamSize, void* pParam) { TCHAR szMessage[INTERFACE_STRING_LENGTH]; switch (lCode) { case AHNHS_ENGINE_DETECT_GAME_HACK: // °ÔÀÓ ÇØÅ·ÅøÀÇ ½ÇÇàÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù. #ifdef _KOREA wsprintf(szMessage, "´ÙÀ½ÀÇ ÇÁ·Î±×·¥°ú °ÔÀÓÀÌ ÇÔ²² ½ÇÇàµÉ¼ö ¾ø½À´Ï´Ù.(%x)\n[%s]", lCode, (LPTSTR)pParam); #else wsprintf(szMessage, "The game can not be executed with the following program.(%x)\n[%s]", lCode, (LPTSTR)pParam); #endif HSMessageBox(szMessage); break; case AHNHS_ACTAPC_DETECT_AUTOMACRO: // ¿ÀÅä¸ÞÅ©·Î ÇàÀ§°¡ °¨ÁöµÇ¾ú½À´Ï´Ù. #ifdef _KOREA wsprintf(szMessage, "¸ÅÅ©·Î ±â´ÉÀ¸·Î ÀǽɵǴ µ¿ÀÛÀÌ °¨ÁöµÇ¾ú½À´Ï´Ù.(%x)\n[%s]", lCode, (LPTSTR)pParam); #else wsprintf(szMessage, "An operation whitch seems to be Auto-macro has been detected.(%x)\n[%s]", lCode, (LPTSTR)pParam); #endif HSMessageBox(szMessage); break; case AHNHS_ACTAPC_DETECT_AUTOMOUSE: // ¿ÀÅ丶¿ì½º ÇàÀ§°¡ °¨ÁöµÇ¾ú½À´Ï´Ù. case AHNHS_ACTAPC_DETECT_ALREADYHOOKED: // ÀϺΠAPI°¡ ÀÌ¹Ì ÈÄÅ·µÇ¾î ÀÖ´Â »óÅÂÀÔ´Ï´Ù. (±×·¯³ª ½ÇÁ¦·Î´Â À̸¦ Â÷´ÜÇϰí Àֱ⠶§¹®¿¡ ÈÄÅ·ÇÁ·Î±×·¥Àº µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù.) break; case AHNHS_ACTAPC_DETECT_SPEEDHACK: // ½ºÇǵåÇÙ·ùÀÇ ÇÁ·Î±×·¥¿¡ ÀÇÇØ ½Ã½ºÅÛ ½Ã°£ÀÌ º¯°æµÇ¾ú½À´Ï´Ù. #ifdef _KOREA wsprintf(szMessage, "½ºÇǵåÇÙÀ¸·Î ÀǽɵǴ µ¿ÀÛÀÌ °¨ÁöµÇ¾ú½À´Ï´Ù.(%x)\n[%s]", lCode, (LPTSTR)pParam); #else wsprintf(szMessage, "An operation whitch seems to be Speed-hack has been detected.(%x)\n[%s]", lCode, (LPTSTR)pParam); #endif HSMessageBox(szMessage); break; case AHNHS_ACTAPC_DETECT_KDTRACE: // µð¹ö°Å Æ®·¡À̽ÌÀÌ ¹ß»ýÇß´Ù.(Ä¿³Î µð¹ö°Å Ȱ¼ºÈ­, ÀÌÈÄ ºê·¹ÀÌÅ© Æ÷ÀÎÅÍ Ã³¸®) case AHNHS_ACTAPC_DETECT_KDTRACE_CHANGED: // ¼³Ä¡µÈ µð¹ö°Å Æ®·¡À̽ÌÀÌ º¯°æµÇ¾ú´Ù. #ifdef _KOREA wsprintf(szMessage, "°ÔÀÓ¿¡ ´ëÇÏ¿© µð¹ö±ë ½Ãµµ°¡ °¨ÁöµÇ¾ú½À´Ï´Ù.(%x)\n[%s]", lCode, (LPTSTR)pParam); #else wsprintf(szMessage, "A debugging attempt to the game has been detected.(%x)\n[%s]", lCode, (LPTSTR)pParam); #endif HSMessageBox(szMessage); break; case AHNHS_ACTAPC_DETECT_DRIVERFAILED: // ÇØÅ· Â÷´Ü µå¶óÀ̹ö°¡ ·ÎµåµÇÁö ¾Ê¾Ò½À´Ï´Ù. case AHNHS_ACTAPC_DETECT_MESSAGEHOOK: // ¸Þ½ÃÁö ÈÄÅ·ÀÌ ½ÃµµµÇ¾úÀ¸¸ç À̸¦ Â÷´ÜÇÏÁö ¸øÇß½À´Ï´Ù. case AHNHS_ACTAPC_DETECT_HOOKFUNCTION: // º¸È£ API¿¡ ´ëÇÑ ÈÄÅ· ÇàÀ§°¡ °¨ÁöµÇ¾ú½À´Ï´Ù. case AHNHS_ACTAPC_DETECT_MODULE_CHANGE: // ÇÙ½¯µå °ü·Ã¸ðµâÀÌ º¯°æµÇ¾ú½À´Ï´Ù. #ifdef _KOREA wsprintf(szMessage, "ÇØÅ· ¹æ¾î ±â´É¿¡ ÀÌ»óÀÌ ¹ß»ýÇÏ¿´½À´Ï´Ù.(%x)\n[%s]", lCode, (LPTSTR)pParam); #else wsprintf(szMessage, "An error has been occurred on the anti-hacking functions.(%x)\n[%s]", lCode, (LPTSTR)pParam); #endif HSMessageBox(szMessage); break; case AHNHS_ACTAPC_DETECT_SPEEDHACK_RATIO: // ½ºÇǵåÇÙ °¨Áö ¿É¼ÇÀÌ 'GAME'ÀÌ °æ¿ì ÀÌ ÄݹéÀ¸·Î ÃÖ±Ù 5Ãʵ¿¾ÈÀÇ ½Ã°£Á¤º¸°¡ Àü´ÞµË´Ï´Ù. case AHNHS_ENGINE_DETECT_WINDOWED_HACK: // â¸ðµå ÇØÅ·Åø case AHNHS_ACTAPC_DETECT_ABNORMAL_MEMORY_ACCESS: // ÄÚµå ÆÐÄ¡ ½Ãµµ°¡ °¨ÁöµÇ¾ú½À´Ï´Ù. break; case AHNHS_ACTAPC_DETECT_ENGINEFAILED: // ¿£Áø±â´ÉÀÌ Á¤»óÀûÀÌÁö ¾Ê½À´Ï´Ù. case AHNHS_ACTAPC_DETECT_CODEMISMATCH: // Äڵ尡 ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù. case AHNHS_ACTAPC_DETECT_MEM_MODIFY_FROM_LMP: // º¸È£ ¸ðµâ¿¡ ´ëÇØ¼­ ¸Þ¸ð¸® º¯Á¶°¡ °¨ÁöµÇ¾ú½À´Ï´Ù. case AHNHS_ACTAPC_DETECT_LMP_FAILED: // ÇÙ½¯µå ·ÎÄà ¸Þ¸ð¸® º¸È£ ±â´ÉÀÌ Á¤»óÀûÀÌÁö ¾Ê½À´Ï´Ù. case AHNHS_ACTAPC_DETECT_ABNORMAL_HACKSHIELD_STATUS: case AHNHS_ACTAPC_DETECT_ANTIFREESERVER: #ifdef _KOREA wsprintf(szMessage, "ÇØÅ·À¸·Î ÀÎÇØ ÇÙ½¯µå ÆÄÀÏ¿¡ ÀÌ»óÀÌ »ý°å½À´Ï´Ù.(%x)\n[%s]", lCode, (LPTSTR)pParam); #else wsprintf(szMessage, "An error has been occurred on the anti-hacking functions.(%x)\n[%s]", lCode, (LPTSTR)pParam); #endif HSMessageBox(szMessage); break; } return 1; } LRESULT CALLBACK HackShield::MessageBoxProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: { SetWindowText(hDlg, "Error"); SetDlgItemText(hDlg, IDC_MESSAGE_TEXT, error_message_); SetTimer(hDlg, 1, 3000, (TIMERPROC) NULL); } return TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); GlobalFunc::LogOutGame(); return TRUE; } break; case WM_TIMER: { switch(wParam) { case 1: { EndDialog(hDlg, 0); GlobalFunc::LogOutGame(); } break; } } break; } return FALSE; } void HackShield::HSMessageBox(LPCTSTR szMessage) { if (FALSE == GlobalFunc::SysMessageBox(szMessage, TRUE)) { _tcscpy(error_message_, szMessage); DialogBox(g_hInstance, (LPCTSTR)IDD_MESSAGE_BOX, NULL, (DLGPROC)MessageBoxProc); } } LONG WINAPI HackShield::Game_UnhandledExceptionHandler(struct _EXCEPTION_POINTERS * lpTopLevelExcptionFilter) { HackShield::Instance()->HS_StopService(); HackShield::Instance()->HS_UnInit(); HackShield::DestroyInstance(); return EXCEPTION_CONTINUE_SEARCH; } #endif