Files
Leviathan/Library/External/include/hack_shield/AntiCpXSvr.h
T
2026-06-01 12:46:52 +02:00

277 lines
8.7 KiB
C

#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_