182 lines
4.6 KiB
C++
182 lines
4.6 KiB
C++
#include "stdafx.h"
|
|
#include "HackShield_Client.h"
|
|
|
|
#ifdef __NA000000_070913_HACKSHIELD_INSTALLATION__
|
|
|
|
//#ifdef __ANTICPX_TRANS_BUFFER__
|
|
// #undef __ANTICPX_TRANS_BUFFER__
|
|
//#endif
|
|
typedef struct AHNHS_EXT_ERRORINFO{
|
|
char szServer[MAX_PATH];
|
|
char szUserId[MAX_PATH];
|
|
char szGameVersion[MAX_PATH];
|
|
} AHNHS_EXT_ERRORINFO, *PAHNHS_EXT_ERRORINFO;
|
|
|
|
#include <HShield/HShield.h>
|
|
|
|
INT HackShieldCTRL::EXECUTION_CODE = 7005;
|
|
TCHAR* HackShieldCTRL::LICENSE_CODE = _T("2640BBED272E304EDC1D4A96");
|
|
DWORD HackShieldCTRL::OPTION_FLAG =
|
|
#ifdef USE_HACK_SHIELD
|
|
AHNHS_CHKOPT_ALL | AHNHS_USE_LOG_FILE
|
|
| AHNHS_ALLOW_SVCHOST_OPENPROCESS | AHNHS_ALLOW_LSASS_OPENPROCESS
|
|
| AHNHS_ALLOW_CSRSS_OPENPROCESS | AHNHS_DONOT_TERMINATE_PROCESS
|
|
| AHNHS_CHKOPT_HSMODULE_CHANGE;
|
|
#else
|
|
AHNHS_USE_LOG_FILE;
|
|
#endif //
|
|
|
|
BOOL HackShieldCTRL::Initialize()
|
|
{
|
|
INT iRet = 0;
|
|
TCHAR szFullFilePath[MAX_PATH];
|
|
TCHAR szMsg[MAX_PATH];
|
|
|
|
// 1) HackShield 폴더의 EhSvc.dll 위치를 지정
|
|
lstrcat(szFullFilePath, _T(".\\HShield\\EhSvc.dll"));
|
|
|
|
// 2) _AhnHS_Initialize 함수 호출에 쓰일 옵션 플랙을 정의합니다.
|
|
DWORD dwOption = AHNHS_CHKOPT_ALL | AHNHS_USE_LOG_FILE
|
|
| AHNHS_ALLOW_SVCHOST_OPENPROCESS | AHNHS_ALLOW_LSASS_OPENPROCESS
|
|
| AHNHS_ALLOW_CSRSS_OPENPROCESS | AHNHS_DONOT_TERMINATE_PROCESS
|
|
| AHNHS_CHKOPT_HSMODULE_CHANGE;
|
|
|
|
// 3) _AhnHS_Initlaize를 호출 HackShield 서비스를 초기화 합니다.
|
|
iRet = _AhnHS_Initialize(
|
|
szFullFilePath,
|
|
CallbackProc, // Callback
|
|
EXECUTION_CODE, // Game Code
|
|
LICENSE_CODE, // License Key
|
|
dwOption, // Option Flag
|
|
AHNHS_SPEEDHACK_SENSING_RATIO_NORMAL
|
|
);
|
|
|
|
if(HS_ERR_OK != iRet)
|
|
{
|
|
switch(iRet)
|
|
{
|
|
case HS_ERR_COMPATIBILITY_MODE_RUNNING:
|
|
case HS_ERR_NEED_ADMIN_RIGHTS:
|
|
case HS_ERR_INVALID_FILES:
|
|
case HS_ERR_INIT_DRV_FAILED:
|
|
case HS_ERR_DEBUGGER_DETECT:
|
|
default:
|
|
sprintf(szMsg, "해킹방지 기능에 문제가 발생하였습니다.(%x)", iRet);
|
|
break;
|
|
}
|
|
|
|
MessageBox(NULL, szMsg, "Client HackShield", MB_OK);
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL HackShieldCTRL::Release()
|
|
{
|
|
INT iRet = 0;
|
|
|
|
// ① _AhnHS_Uninitialize 함수를 호출하여 핵쉴드 서비스를 종료합니다.
|
|
iRet = _AhnHS_Uninitialize();
|
|
|
|
if (HS_ERR_OK != iRet)
|
|
{
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL HackShieldCTRL::StartService()
|
|
{
|
|
INT iRet = 0;
|
|
TCHAR szMsg[MAX_PATH];
|
|
|
|
// ① _AhnHS_StartService 함수를 호출하여 핵쉴드 서비스를 시작합니다.
|
|
iRet = _AhnHS_StartService();
|
|
|
|
// ② _AhnHS_StartService 함수의 리턴 값을 검사하여 에러 처리합니다.
|
|
if (HS_ERR_OK != iRet)
|
|
{
|
|
switch (iRet)
|
|
{
|
|
case HS_ERR_START_ENGINE_FAILED:
|
|
case HS_ERR_DRV_FILE_CREATE_FAILED:
|
|
case HS_ERR_REG_DRV_FILE_FAILED:
|
|
case HS_ERR_START_DRV_FAILED:
|
|
default:
|
|
sprintf (szMsg, "해킹 방지 기능에 문제가 발생 하였습니다(%x)", iRet);
|
|
break;
|
|
}
|
|
MessageBox(NULL, szMsg, "Client HackShield", MB_OK);
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL HackShieldCTRL::StopService()
|
|
{
|
|
INT iRet = 0;
|
|
|
|
// ① _AhnHS_StopService 함수를 호출하여 핵쉴드 서비스를 정지합니다.
|
|
iRet = _AhnHS_StopService();
|
|
|
|
if(HS_ERR_OK != iRet)
|
|
{
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
// 원형은 다시 설정하기로 한다.
|
|
INT __stdcall HackShieldCTRL::CallbackProc(LONG lCode, LONG lParamSize, PVOID pParam)
|
|
{
|
|
TCHAR szMsg[MAX_PATH];
|
|
|
|
// ① 각 경우에 대하여 알맞은 에러 메시지를 출력합니다
|
|
switch (lCode)
|
|
{
|
|
// ② Engine Callback
|
|
case AHNHS_ENGINE_DETECT_GAME_HACK:
|
|
wsprintf(szMsg, "다음의 프로그램과 게임이 함께 실행될 수 없습니다. (%x) \n [%s]",
|
|
lCode, (LPTSTR)pParam);
|
|
MessageBox(NULL, szMsg, "Client HackShield", MB_OK);
|
|
break;
|
|
// ③ 오토메크로 탐지
|
|
case AHNHS_ACTAPC_DETECT_AUTOMACRO:
|
|
wsprintf(szMsg, _T("매크로 기능으로 의심되는 동작이 감지되었습니다. (Code = %x"),
|
|
lCode);
|
|
MessageBox(NULL, szMsg, "Client HackShield", MB_OK);
|
|
break;
|
|
// ④ 별도의 처리를 하지 않음
|
|
case AHNHS_ACTAPC_DETECT_AUTOMOUSE:
|
|
case AHNHS_ACTAPC_DETECT_ALREADYHOOKED:
|
|
break;
|
|
// ⑤ Speed 관련
|
|
case AHNHS_ACTAPC_DETECT_SPEEDHACK:
|
|
case AHNHS_ACTAPC_DETECT_SPEEDHACK_APP:
|
|
wsprintf(szMsg, "스피드핵으로 의심되는 동작이 감지되었습니다. (%x)", lCode);
|
|
MessageBox(NULL, szMsg, "Client HackShield", MB_OK);
|
|
break;
|
|
// ⑥ 디버깅 방지
|
|
case AHNHS_ACTAPC_DETECT_KDTRACE:
|
|
case AHNHS_ACTAPC_DETECT_KDTRACE_CHANGED:
|
|
wsprintf(szMsg, "게임에 대하여 디버깅 시도가 감지되었습니다. (%x)", lCode);
|
|
MessageBox(NULL, szMsg, "Client HackShield", MB_OK);
|
|
break;
|
|
// ⑦ 그 외 해킹 방지 기능 이상
|
|
case AHNHS_ACTAPC_DETECT_DRIVERFAILED:
|
|
case AHNHS_ACTAPC_DETECT_HOOKFUNCTION:
|
|
case AHNHS_ACTAPC_DETECT_MESSAGEHOOK:
|
|
case AHNHS_ACTAPC_DETECT_MODULE_CHANGE:
|
|
wsprintf(szMsg, "해킹 방어 기능에 이상이 발생하였습니다. (%x)", lCode);
|
|
MessageBox(NULL, szMsg, "Client HackShield", MB_OK);
|
|
break;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
#endif //__NA000000_070913_HACKSHIELD_INSTALLATION__
|
|
|