Files
Sun1602/include/HShield/5040501/AntiCpSvrFunc.h
T
2022-10-26 12:25:11 +08:00

262 lines
11 KiB
C

/*
* (C) Copyright 2005 ~ 2007. AhnLab, Inc.
*
* Any part of this source code can not be copied with
* any method without prior written permission from
* the author or authorized person.
*
* File Name : AntiCpSvrFunc.h
*/
#ifndef _ANTICPSVRFUNC_H
#define _ANTICPSVRFUNC_H
#define SIZEOF_REQMSG 160 // Request Message를 담을 버퍼의 크기
#define SIZEOF_REQINFO 88 // Request Info를 담을 버퍼의 크기
#define SIZEOF_ACKMSG 72 // Ack Message를 담을 버퍼의 크기
#define SIZEOF_GUIDREQMSG 20 // GUID Request Message를 담을 버퍼의 크기
#define SIZEOF_GUIDREQINFO 20 // GUID Request Info를 담을 버퍼의 크기
#define SIZEOF_GUIDACKMSG 340 // GUID Ack Message를 담을 버퍼의 크기
#define ALLOWED_ALL_SESSION 0xFFFFFFFF
#define ALLOWED_ONLY_LATEST_SESSION 0x00000001
#define ANTICPSVR_UNINITIALIZED 0x0
#define ANTICPSVR_INITIALIZED 0x1
#define ANTICPSVR_CHECK_GAME_MEMORY 0x01 // Game에서 보호하는 Memory에 대한 Request만 만든다.
#define ANTICPSVR_CHECK_HACKSHIELD_FILE 0x02 // HackShield File에 대한 Request만 만든다.
#define ANTICPSVR_CHECK_GAME_FILE 0x04 // Game File에 대한 Request만 만든다.
#define ANTICPSVR_CHECK_NANOENGINE_FILE 0x08 // Heuristic Engine Data(.mhe)에 대한 Request를 만든다.
#define ANTICPSVR_CHECK_ALL ( ANTICPSVR_CHECK_GAME_MEMORY | ANTICPSVR_CHECK_HACKSHIELD_FILE | ANTICPSVR_CHECK_GAME_FILE | ANTICPSVR_CHECK_NANOENGINE_FILE )
// 에러코드 정의
#define ERROR_ANTICPSVR_BASECODE 0x0001C000
#define ERROR_ANTICPSVR_INIT_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x1
#define ERROR_ANTICPSVR_INIT_INSERTCRCDATATOLIST_FAIL ERROR_ANTICPSVR_BASECODE + 0x2
#define ERROR_ANTICPSVR_INIT_INSERTHSHIELDFILECRCDATATOLIST_FAIL ERROR_ANTICPSVR_BASECODE + 0x3
#define ERROR_ANTICPSVR_INIT_READPUBLICKEY_FAIL ERROR_ANTICPSVR_BASECODE + 0x4
#define ERROR_ANTICPSVR_MAKEREQMSG_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x10
#define ERROR_ANTICPSVR_MAKEREQMSG_MAKESKEY_FAIL ERROR_ANTICPSVR_BASECODE + 0x11
#define ERROR_ANTICPSVR_MAKEREQMSG_INITCRYPT_FAIL ERROR_ANTICPSVR_BASECODE + 0x12
#define ERROR_ANTICPSVR_MAKEREQMSG_ENCRYPT_FAIL ERROR_ANTICPSVR_BASECODE + 0x13
#define ERROR_ANTICPSVR_MAKEREQMSG_GETRNDHASHINFO_FAIL ERROR_ANTICPSVR_BASECODE + 0x14
#define ERROR_ANTICPSVR_ANALACKMSG_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x20
#define ERROR_ANTICPSVR_ANALACKMSG_MAKESKEY_FAIL ERROR_ANTICPSVR_BASECODE + 0x21
#define ERROR_ANTICPSVR_ANALACKMSG_INITCRYPT_FAIL ERROR_ANTICPSVR_BASECODE + 0x22
#define ERROR_ANTICPSVR_ANALACKMSG_DECRYPT_FAIL ERROR_ANTICPSVR_BASECODE + 0x23
#define ERROR_ANTICPSVR_ANALACKMSG_HSHIELD_ERROR ERROR_ANTICPSVR_BASECODE + 0x24
#define ERROR_ANTICPSVR_ANALACKMSG_PACKET_ERROR ERROR_ANTICPSVR_BASECODE + 0x25
#define ERROR_ANTICPSVR_ANALACKMSG_FILECRC_ERROR ERROR_ANTICPSVR_BASECODE + 0x26
#define ERROR_ANTICPSVR_ANALACKMSG_MEMORYCRC_ERROR ERROR_ANTICPSVR_BASECODE + 0x27
#define ERROR_ANTICPSVR_ANALACKMSG_INVLIDSESSION ERROR_ANTICPSVR_BASECODE + 0x28
#define ERROR_FAKEANTICPSVR_ANALACKMSG_DELAYEDSPIKING ERROR_ANTICPSVR_BASECODE + 0x29
#define ERROR_ANTICPSVR_ANALACKMSG_ENGINECRC_ERROR ERROR_ANTICPSVR_BASECODE + 0x2A
#define ERROR_ANTICPSVR_ANALACKMSG_NANOENGINECRC_ERROR ERROR_ANTICPSVR_BASECODE + 0x2B
#define ERROR_ANTICPSVR_ANALACKMSG_EXCEPTION ERROR_ANTICPSVR_BASECODE + 0x2C
#define ERROR_ANTICPSVR_INITCRYPT_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x30
#define ERROR_ANTICPSVR_MAKESESSIONKEY_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x31
#define ERROR_ANTICPSVR_GETENCMSG_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x32
#define ERROR_ANTICPSVR_GETDECMSG_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x33
#define ERROR_ANTICPSVR_MAKEACKSEQ_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x34
#define ERROR_ANTICPSVR_GETRNDHASHINFO_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x35
#define ERROR_ANTICPSVR_GETRNDHASHINFO_INVALIDENTRY ERROR_ANTICPSVR_BASECODE + 0x36
#define ERROR_ANTICPSVR_GETRNDHASHINFO_EMPTYFUNCTIONLIST_ERROR ERROR_ANTICPSVR_BASECODE + 0x37
#define ERROR_ANTICPSVR_EXCEPTION_OCCURED ERROR_ANTICPSVR_BASECODE + 0x38
#define ERROR_ANTICPSVR_GETGUIDFROMCRCFILE_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x39
#define ERROR_ANTICPSVR_GETTIEMSTAMPFROMCRCFILE_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x3A
#define ERROR_ANTICPSVR_GETTIEMSTAMPFROMNANOENGINEFILE_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x3B
#define ERROR_ANTICPSVR_MAKEGUIDREQMSG_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x40
#define ERROR_ANTICPSVR_MAKEGUIDREQMSG_MAKESKEY_FAIL ERROR_ANTICPSVR_BASECODE + 0x41
#define ERROR_ANTICPSVR_MAKEGUIDREQMSG_INITCRYPT_FAIL ERROR_ANTICPSVR_BASECODE + 0x42
#define ERROR_ANTICPSVR_MAKEGUIDREQMSG_ENCRYPT_FAIL ERROR_ANTICPSVR_BASECODE + 0x43
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_INVALIDPARAM ERROR_ANTICPSVR_BASECODE + 0x50
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_MAKESKEY_FAIL ERROR_ANTICPSVR_BASECODE + 0x51
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_INITCRYPT_FAIL ERROR_ANTICPSVR_BASECODE + 0x52
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_DECRYPT_FAIL ERROR_ANTICPSVR_BASECODE + 0x53
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_PACKET_ERROR ERROR_ANTICPSVR_BASECODE + 0x54
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_DENIED_NEWSESSION ERROR_ANTICPSVR_BASECODE + 0x55
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_GETGUIDFROMCRCFILE_ERROR ERROR_ANTICPSVR_BASECODE + 0x56
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_INSERTCRCDATATOLIST_FAIL ERROR_ANTICPSVR_BASECODE + 0x57
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_INVALIDGUID ERROR_ANTICPSVR_BASECODE + 0x58
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_HSHIELDDENIED_NEWSESSION ERROR_ANTICPSVR_BASECODE + 0x59
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_GETTIMESTAMPFROMCRCFILE_ERROR ERROR_ANTICPSVR_BASECODE + 0x5A
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_INSERTHSHIELDCRCDATATOLIST_FAIL ERROR_ANTICPSVR_BASECODE + 0x5B
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_INVALIDTIMESTAMP ERROR_ANTICPSVR_BASECODE + 0x5C
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_NANODENIED_NEWSESSION ERROR_ANTICPSVR_BASECODE + 0x5D
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_INSERTNANOCRCDATATOLIST_FAIL ERROR_ANTICPSVR_BASECODE + 0x5E
#define ERROR_ANTICPSVR_ANALGUIDACKMSG_EXCEPTION ERROR_ANTICPSVR_BASECODE + 0x5F
#ifndef UNIX
#ifdef ANTICPSVR_EXPORTS
#define ANTICPSVR_API __declspec(dllexport)
#else
#define ANTICPSVR_API __declspec(dllimport)
#endif
#else
#include <stdint.h>
#define DWORD uint32_t
#define PVOID void *
#define IN
#define OUT
#define __stdcall
#define ANTICPSVR_API
#endif
#if defined(__cplusplus)
extern "C"
{
#endif
#pragma pack ( push )
#pragma pack ( 8 )
typedef struct _HSHIELD_CLIENT_CONTEXT
{
PVOID pGameCrc;
PVOID pHShieldCrc;
PVOID pEngineCrc;
} HSHIELD_CLIENT_CONTEXT, *PHSHIELD_CLIENT_CONTEXT;
#pragma pack ( pop )
/*!
*
* @remarks 이 함수는 서버가 로딩될때 한번 호출하는 함수로 내부적으로 사용하는 정보들을 초기화한다.
*
* @param lpszHashFilePath : 해쉬정보저장 파일(HackShield.crc)에 대한 전체 경로
*
*/
ANTICPSVR_API
DWORD
__stdcall
_AntiCpSvr_Initialize (
IN const char *lpszHashFilePath
);
/*!
*
* @remarks 이 함수는 서버가 언로딩될때 한번 호출하는 함수로 내부적으로 사용하던 정보들을 초기화한다.
*
*/
ANTICPSVR_API
void
__stdcall
_AntiCpSvr_Finalize ();
/*!
*
* @remarks 이 함수는 새로운 클라이언트가 연결될때 클라이언트당 한번 호출되는 함수로 현재 접속한
* 클라이언트가 사용하는 GUID 버전이 무엇인지 확인하기 위한 요청메시지를 생성하는 함수이다.
*
* @param pbyGuidReqMsg : 클라이언트에게 보낼 암호화된 Guid Request Message
* 이 데이터를 담을 버퍼의 크기(Byte)는 위에 정의된 SIZEOF_GUIDREQMSG이다.
* @param pbyGuidReqInfo : _AntiCpSvr_AnalyzeGuidAckMsg() 에서 검사할때 사용할 원본 Guid Request Info
* 이 데이터를 담을 버퍼의 크기(Byte)는 위에 정의된 SIZEOF_GUIDREQINFO이다.
*
* @attention 이 함수를 호출하지 않으면 해당 클라이언트의 GUID를 알 수 없어 크랙 유무를 확인할 수 없다.
* 또한 버퍼 크기는 앞으로 변경될 수도 있으므로 반드시 이 헤더파일에 정의된 것을 사용하여야한다.
*
*/
ANTICPSVR_API
DWORD
__stdcall
_AntiCpSvr_MakeGuidReqMsg (
OUT unsigned char *pbyGuidReqMsg,
OUT unsigned char *pbyGuidReqInfo
);
/*!
*
* @remarks 이 함수는 새로운 클라이언트가 연결될때 클라이언트당 한번 호출되는 함수로
* _AntiCpSvr_MakeGuidReqMsg()를 통해 생성된 GUID Request Message의 응답메시지를
* 클라이언트가 암호화하여 보내면 해당 클라이언트의 GUID가 허용되는 버전인지 확인한 후
* 허용되는 버전일 경우 앞으로 계속 사용하게 될 CRC Info의 주소를 리턴한다.
*
* @param pbyGuidAckMsg : 클라이언트에서 보낸 암호화된 Guid ACK Message
* @param pbyGuidReqInfo : _AntiCpSvr_MakeGuidReqMsg() 함수에서 만들어진 원본 Guid Request Info
* @param pCrcInfo : CRC Info를 담고있는 메모리를 가리킬 포인터를 저장할 버퍼
*
* @attention 여기서 리턴되는 ppCrcInfo에 담긴 주소는 해당 클라이언트의 Session이 끊길때까지
* 계속해서 사용되므로 클라이언트별로 저장되고 관리되어야 한다.
*
*/
ANTICPSVR_API
DWORD
__stdcall
_AntiCpSvr_AnalyzeGuidAckMsg (
IN unsigned char *pbyGuidAckMsg,
IN unsigned char *pbyGuidReqInfo,
OUT PHSHIELD_CLIENT_CONTEXT pCrcInfo
);
/*!
*
* @remarks 이 함수는 클라이언트의 크랙 유무를 확인하고 싶을때마다 호출되는 함수로
* 해당 클라이언트 버전에 맞는 CRC 정보를 이용하여 실행파일 및 메모리, 핵쉴드
* 모듈이 정상적으로 동작하는지 확인하는 Request Message를 생성해 낸다.
*
* @param pCrcInfo : _AntiCpSvr_AnalyzeGuidAckMsg() 함수에서 구해진 CRC Info의 메모리 주소
* @param pbyReqMsg : 클라이언트에게 보낼 암호화된 Request Message
* 이 정보를 담을 버퍼의 크기(Byte)는 위에 정의된 SIZEOF_REQMSG이다.
* @param pbyReqInfo : _AntiCpSvr_AnalyzeAckMsg() 에서 검사할때 사용할 원본 Request Info
* 이 정보를 담을 버퍼의 크기(Byte)는 위에 정의된 SIZEOF_REQINFO이다.
* @param ulOption : 어떤 정보들에 대한 Request Message를 만들지에 대한 Flag, 위에 정의된
* ANTICPSVR_CHECK_GAME_MEMORY, ANTICPSVR_CHECK_HACKSHIELD_FILE,
* ANTICPSVR_CHECK_GAME_FILE, ANTICPSVR_CHECK_NANOENGINE_FILE들의 OR를 이용하여 정의할 수 있다.
* 단, 안전을 위해 최초 호출시는 ANTICPSVR_CHECK_ALL Option을 이용하여
* 전체에 대한 안전 유무를 검사하고 그 다음부터는 Performance를 위해
* ANTICPSVR_CHECK_GAME_MEMORY Option만 사용하길 권장한다.
*
* @attention 버퍼 크기는 앞으로 변경될 수도 있으므로 반드시 이 헤더파일에 정의된 것을 사용하여야한다.
*
*/
ANTICPSVR_API
DWORD
__stdcall
_AntiCpSvr_MakeReqMsg (
IN PHSHIELD_CLIENT_CONTEXT pCrcInfo,
OUT unsigned char *pbyReqMsg,
OUT unsigned char *pbyReqInfo,
IN DWORD ulOption
);
/*!
*
* @remarks 이 함수는 _AntiCpSvr_MakeReqMsg() 함수를 통해 생성된 크랙 유무 Request Message에
* 대한 응답으로 클라이언트로부터 암호화된 Ack Message가 올 경우 해당 Ack Message를
* 분석하여 클라이언트가 정상적인지 검사한다.
*
* @param pCrcInfo : _AntiCpSvr_AnalyzeGuidAckMsg() 함수에서 구해진 CRC Info의 메모리 주소
* @param pbyAckMsg : 클라이언트에서 보낸 암호화된 ACK Message
* @param pbyReqInfo : _AntiCpSvr_MakeReqMsg() 함수에서 만들어진 원본 Request Message 정보
*
*/
ANTICPSVR_API
DWORD
__stdcall
_AntiCpSvr_AnalyzeAckMsg (
IN PHSHIELD_CLIENT_CONTEXT pCrcInfo,
IN unsigned char *pbyAckMsg,
IN unsigned char *pbyReqInfo
);
#if defined(__cplusplus)
}
#endif
#endif //_ANTICPSVRFUNC_H