#ifndef _ANTICPX_SERVER_H_ #define _ANTICPX_SERVER_H_ // 유효하지 않은 핸들을 의미한다 #define ANTICPX_INVALID_HANDLE_VALUE (0) ////////////////////////////////////////////////////////////////////////// // 에러 코드 ////////////////////////////////////////////////////////////////////////// #define ANTICPXSVR_BASECODE_ERROR 0xE9040000 // 파일에 접근 권한이 없습니다 #define ERROR_ANTICPXSVR_FILE_ACCESS_DENIED (ANTICPXSVR_BASECODE_ERROR + 0x1) // 파일을 찾을 수가 없습니다 #define ERROR_ANTICPXSVR_FILE_NOT_FOUND (ANTICPXSVR_BASECODE_ERROR + 0x2) // 입력값이 올바르지 않습니다 #define ERROR_ANTICPXSVR_INVALID_PARAMETER (ANTICPXSVR_BASECODE_ERROR + 0x3) // 올바른 포멧이 아닙니다 #define ERROR_ANTICPXSVR_BAD_FORMAT (ANTICPXSVR_BASECODE_ERROR + 0x4) // 요청에 대한 응답을 받지 않았습니다 #define ERROR_ANTICPXSVR_NOT_YET_RECEIVED_RESPONSE (ANTICPXSVR_BASECODE_ERROR + 0x5) // 대기하고 있지 않습니다 #define ERROR_ANTICPXSVR_NO_WAITING (ANTICPXSVR_BASECODE_ERROR + 0x6) // 메모리가 부족합니다 #define ERROR_ANTICPXSVR_NOT_ENOUGH_MEMORY (ANTICPXSVR_BASECODE_ERROR + 0x7) // 송수신된 메시지가 올바르지 않습니다 #define ERROR_ANTICPXSVR_BAD_MESSAGE (ANTICPXSVR_BASECODE_ERROR + 0x8) // 패킷 분석을 위한 재전송 공격이 감지되었습니다 #define ERROR_ANTICPXSVR_REPLY_ATTACK (ANTICPXSVR_BASECODE_ERROR + 0x9) // 핵쉴드 모듈 변조가 감지되었습니다 #define ERROR_ANTICPXSVR_HSHIELD_FILE_ATTACK (ANTICPXSVR_BASECODE_ERROR + 0xA) // 클라이언트 파일 변조가 감지되었습니다 #define ERROR_ANTICPXSVR_CLIENT_FILE_ATTACK (ANTICPXSVR_BASECODE_ERROR + 0xB) // 메모리 변조가 감지되었습니다 #define ERROR_ANTICPXSVR_MEMORY_ATTACK (ANTICPXSVR_BASECODE_ERROR + 0xC) // 구 버전 클라이언트 지원이 중지되었습니다 // (서버 중지 없이 HSB 파일을 업데이트하였을 경우 HSB 정책에 구 버전 클라이언트를 지원하지 않도록 // 설정되어 있을 경우 이 오류가 발생할 수 있다. 정책에 의한 것이므로 명백한 오류는 아니다.) #define ERROR_ANTICPXSVR_OLD_VERSION_CLIENT_EXPIRED (ANTICPXSVR_BASECODE_ERROR + 0xD) // HSB 파일을 생성할 때 지정한 핵쉴드 모듈과 짝이 맞지 않습니다 #define ERROR_ANTICPXSVR_UNKNOWN_CLIENT (ANTICPXSVR_BASECODE_ERROR + 0xE) // V3 Small Engine 파일의 변조가 감지되었습니다. #define ERROR_ANTICPXSVR_V3SENGINE_FILE_ATTACK (ANTICPXSVR_BASECODE_ERROR + 0xF) // Nano Engine 파일의 변조가 감지되었습니다. #define ERROR_ANTICPXSVR_NANOENGINE_FILE_ATTACK (ANTICPXSVR_BASECODE_ERROR + 0x10) // HackShield Version이 지원되지 않는다. #define ERROR_ANTICPXSVR_INVALID_HACKSHIELD_VERSION (ANTICPXSVR_BASECODE_ERROR + 0x11) // Engine Version이 지원되지 않는다. #define ERROR_ANTICPXSVR_INVALID_ENGINE_VERSION (ANTICPXSVR_BASECODE_ERROR + 0x12) // 정의되지 않은 에러 #define ERROR_ANTICPXSVR_UNKNOWN (ANTICPXSVR_BASECODE_ERROR + 0xFF) #ifndef UNIX #ifdef AHNHS_EXPORTS #define AHNHS_API __declspec(dllexport) #else #define AHNHS_API __declspec(dllimport) #endif #else #define IN #define OUT #define __stdcall #define AHNHS_API #endif typedef unsigned long AHNHS_SERVER_HANDLE; typedef unsigned long AHNHS_CLIENT_HANDLE; #ifndef __ANTICPX_TRANS_BUFFER__ #define __ANTICPX_TRANS_BUFFER__ #define ANTICPX_TRANS_BUFFER_MAX 400 // [2008.1.2][남성일][BT35349][AntiCpXSvr.dll 1.0.0.10 이후 부터 적용] // 게임사에서 기본 bytealigment를 사용하지 않으면 핵쉴드 서버연동 모듈 적용 후 게임 // bytealignment가 변경되어 버그 발생할 수 있어 기존 정보를 스택에 저장. #pragma pack(push) //기존 alignment 저장 #pragma pack(8) typedef struct _AHNHS_TRANS_BUFFER { unsigned short nLength; unsigned char byBuffer[ANTICPX_TRANS_BUFFER_MAX/* 송수신 패킷의 최대 크기 */]; } AHNHS_TRANS_BUFFER, *PAHNHS_TRANS_BUFFER; #pragma pack(pop) // 기존 alignment 복구. #endif // __ANTICPX_TRANS_BUFFER__ #if defined(__cplusplus) extern "C" { #endif /** 서버 핸들(Server Handle)을 생성한다 @param const char *pszFilePath ; [입력값] HackShield Briefcase (.hsb) 파일 경로 @retval 서버 핸들(Server Handle) @remarks 서버핸들을 올바르게 생성하지 못했을 경우 NULL 값을 리턴한다. 보통 HackShield Briefcase (.hsb) 파일 경로가 올바르지 않을 경우나 시스템 리소스(메모리)가 부족할 경우 발생한다. @see 확장 서버연동 Quick Guide를 참고해 주세요. */ AHNHS_API AHNHS_SERVER_HANDLE __stdcall _AhnHS_CreateServerObject ( IN const char *pszFilePath ); /** 서버 핸들(Server Handle)을 닫는다 @param AHNHS_SERVER_HANDLE hServer ; [입력값] 서버 핸들(Server Handle) @retval 없음 @remarks 생성한 서버핸들은 서버 프로세스나 서비스 프로세스가 종료할 때 닫아주어야 서버핸들 생성에 사용되었던 메모리나 시스템 자원을 해제하게된다. @see 확장 서버연동 Quick Guide를 참고해 주세요. */ AHNHS_API void __stdcall _AhnHS_CloseServerHandle ( IN AHNHS_SERVER_HANDLE hServer ); /** 클라이언트 핸들(Client Handle)을 생성한다 @param AHNHS_SERVER_HANDLE hServer ; [입력값] 서버 핸들(Server Handle) @retval 클라이언트 핸들(Client Handle) @remarks 서버 핸들을 입력 받아 클라이언트 핸들을 생성한다. 클라이언트 핸들은 클라이언트가 접속할 때 마다 생성하며, 세션이 유지되는 동안 핸들을 닫지 않고 재사용한다. @see 확장 서버연동 Quick Guide를 참고해 주세요. */ AHNHS_API AHNHS_CLIENT_HANDLE _AhnHS_CreateClientObject ( IN AHNHS_SERVER_HANDLE hServer ); /** 클라이언트 핸들(Client Handle)을 닫는다 @param AHNHS_CLIENT_HANDLE hClient ; [입력값] 클라이언트 핸들(Client Handle) @retval 없음 @remarks 생성한 클라이언트 핸들은 클라이언트 세션이 종료될 때 해제되어야 한다. 이때 클라이언트 핸들 생성에 사용되었던 메모리나 시스템 자원을 해제하게된다. @see 확장 서버연동 Quick Guide를 참고해 주세요. */ AHNHS_API void __stdcall _AhnHS_CloseClientHandle ( IN AHNHS_CLIENT_HANDLE hClient ); /** 클라이언트의 해킹 시도를 감지하기 위해 요청(메시지)를 생성한다. @param AHNHS_CLIENT_HANDLE hClient ; [입력값] 클라이언트 핸들 PAHNHS_TRANS_BUFFER pRequestBuffer ; [출력값] 보낼 데이터 버퍼/길이 @retval ERROR_ANTICPXSVR_xxx 형식으로 정의되어 있는 에러 코드 @remarks 현재 세션에 맞는 클라이언트 핸들을 입력하여 요청 메시지를 생성한다. 요청 메시지는 AHNHS_TRANS_BUFFER 구조체 형태로 출력되며, 멤버 변수 값은 다음과 같다. typedef struct _AHNHS_TRANS_BUFFER { unsigned short nLength; unsigned char byBuffer[ANTICPX_TRANS_BUFFER_MAX]; // 송수신 패킷의 최대 버퍼 크기 } AHNHS_TRANS_BUFFER, *PAHNHS_TRANS_BUFFER; nLength ; 요청 메시지 생성에 사용된 버퍼 길이 byBuffer ; 요청 메시지 생성에 사용될 수 있는 최대 바이트 버퍼 주의 사항!!! byBuffer는 요청 메시지 생성에 사용될 수 있는 최대 버퍼 크기이므로 네트워크로 전송할 때 nLength 만큼만 전송해야한다. Example: AHNHS_TRANS_BUFFER stReqTransBuf; ulRet = _AhnHS_MakeRequest ( hClient, &stReqTransBuf ); if ( ulRet != ERROR_SUCCESS ) return ulRet; bytesSent = send( ConnectSocket, stReqTransBuf.byBuffer, stReqTransBuf.nLength, 0 ); ... @see 확장 서버연동 Quick Guide를 참고해 주세요. */ AHNHS_API unsigned long __stdcall _AhnHS_MakeRequest ( IN AHNHS_CLIENT_HANDLE hClient, OUT PAHNHS_TRANS_BUFFER pRequestBuffer ); /** 클라이언트의 응답(메시지)이 올바른지 검사한다. @param AHNHS_CLIENT_HANDLE hClient ; [입력값] 클라이언트 핸들 unsigned char *pbyResponse ; 클라이언트로 부터 받은 데이터 버퍼 unsigned long nResponseLength ; 클라이언트로 부터 받은 데이터 길이 @retval ERROR_ANTICPXSVR_xxx 형식으로 정의되어 있는 에러 코드 @remarks _AhnHS_MakeRequest 함수를 통한 요청(메시지)에 대한 클라이언트의 응답이 올바른지 검사하는 함수이다. @see 확장 서버연동 Quick Guide를 참고해 주세요. */ AHNHS_API unsigned long __stdcall _AhnHS_VerifyResponse ( IN AHNHS_CLIENT_HANDLE hClient, IN unsigned char *pbyResponse, IN unsigned long nResponseLength ); #if defined(__cplusplus) } #endif #endif // _ANTICPX_SERVER_H_