Files
2022-10-26 12:25:11 +08:00

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__