/*----------------------------------------------------------------------------- * typedef_AKv1HackDetect.h *----------------------------------------------------------------------------- * ArmorKit v1ÀÇ Çì´õ ÆÄÀÏ * ÃÖÃÊ ÀÛ¼º : ¼­½ÂÇö (truefroggie@gmail.com , shseo@webzen.co.kr) * 2005.11.16 ³ë¿ëȯ * - ÇÁ·ÎÁ§Æ® ±¸¼º ¹Ù²Ù¸é¼­ Çì´õÆÄÀϵµ ÇÔ²² Á¤¸®ÇÔ (¾çÀÌ ¸¹¾Æ ¾î¶²°É Á¤¸®ÇÑÁö Àß ¸ð¸§ ^_^) * 2007.03.21 ¹Ú¼¼À² * - ArmorKit.hÆÄÀÏÀÌ º¯°æµÇ¸é º» ÆÄÀϵµ ¼öÁ¤ÇØÁà¾ß ÇÔ * 2007.07.13 ¹Ú¼¼À² * - WOPS¿¡¼­ AKDETECT_PEINTEGRITY°¡ AKDETECT_ERROR·Î º¯°æµÊ¿¡ µû¶ó »ó¼ö¼±¾ðº¯°æ *----------------------------------------------------------------------------- * Copyright (c) , 2005, WEBZEN Inc. * All rights reserved. * * Author : Noh Yong Hwan, 2005, WEBZEN Inc. Research & Development Dept. * fixbrain@gmail.com , somma@webzen.co.kr **---------------------------------------------------------------------------*/ #ifndef _TYPEDEF_AKV1_HACK_DETECT_H_ #define _TYPEDEF_AKV1_HACK_DETECT_H_ /*----------------------------------------------------------------------------- * WOPS¿Í ¿¬µ¿À» À§ÇÑ RTT »ó¼ö ¼±¾ð **---------------------------------------------------------------------------*/ #define V1_SUN_BUF_SIZE 1024 #define V1_MAX_SIG_NAME 255 #define V1__MAX_PATH 260 #define V1__MAX_DRIVE 3 #define V1__MAX_DIR 256 #define V1__MAX_FNAME 256 #define V1__MAX_EXT 256 #define V1__MAX_API_NAME 256 #define V1__MAX_FORWARDER_NAME V1_MAX_FNAME * 2 #define V1__OPCODE_DUMP_LENGTH 16 #define V1__OPCODE_DUMP_BUF_LENGTH ((V1__OPCODE_DUMP_LENGTH * 2) + sizeof(TCHAR)) #define V1_MAX_SCANBUFF 256 #define V1_bGarbage '\xCC' #define V1_MAX_SIGLEN 256 #define AT_EXPORTED 0 #define V1_AT_IMPORTED 1 #define V1_AT_INTEGRITY 2 #define V1_RETCODE_LIB_SUCCESS 0 #define V1_RETCODE_LIB_ERROR -1 #define V1_RETCODE_NOT_HOOKED 0 #define V1_RETCODE_API_HOOKED 1 #define V1_AH_EAT_MODIFIED V1_RETCODE_API_HOOKED #define V1_AH_EAT_INLINE_HOOKED -2 #define V1_AH_EAT_COUNT_ERROR -3 #define V1_AH_EAT_COUNT_ZERO -4 #define V1_AH_IAT_MODIFIED V1_RETCODE_API_HOOKED #define V1_AH_IAT_INLINE_HOOKED -6 #define V1_ATR_STREAM_LEN sizeof(int) /*----------------------------------------------------------------------------- * ŽÁöÇ÷¡±× (DWORD) - Ç÷¡±×¿¡ µû¶ó ÇØ´ç ±â´É ¼öÇà **---------------------------------------------------------------------------*/ #define V1_AKCHECK_SPEEDHACK 0x00000001 // ½ºÇǵåÇ٠ŽÁö #define V1_AKCHECK_MALWARE 0x00000002 // Malware ŽÁö #define V1_AKCHECK_PEINTEGRITY 0x00000004 // °ÔÀÓ¹ÙÀ̳ʸ®º¯Á¶ #define V1_AKCHECK_AKINTEGRITY 0x00000008 // ¾Æ¸ÓŶ º¯Á¶ #define V1_AKCHECK_DEBUG 0x00000010 // µð¹ö±× »óÅÂŽÁö #define V1_AKCHECK_MEMEDIT 0x00000020 // ¸Þ¸ð¸®Á¶ÀÛ #define V1_AKCHECK_DOUBT 0x00000040 // Àǽɰ¡´Â S/W ŽÁö #define V1_AKCHECK_RUNCODE 0x00000080 // ·±Å¸ÀÓ ÄÚµå º¯Á¶¸¦ ŽÁö #define V1_AKCHECK_IAT_HOOK 0x00000100 // °ÔÀÓÇÔ¼öº¯Á¶ #define V1_AKCHECK_EAT_HOOK 0x00000200 #define V1_AKCHECK_ALL V1_AKCHECK_SPEEDHACK | \ V1_AKCHECK_MALWARE | \ V1_AKCHECK_PEINTEGRITY | \ V1_AKCHECK_AKINTEGRITY | \ V1_AKCHECK_DEBUG | \ V1_AKCHECK_MEMEDIT | \ V1_AKCHECK_DOUBT | \ V1_AKCHECK_RUNCODE | \ V1_AKCHECK_IAT_HOOK | \ V1_AKCHECK_EAT_HOOK /*----------------------------------------------------------------------------- * ArmorKit »ç¿ëÀÚ Á¤ÀÇ ÇÁ·Î½ÃÁ® °á°ú°ª Á¤ÀÇ (HackType) **---------------------------------------------------------------------------*/ #define V1_AKRUNTIME_ERROR -1 // ArmorKit ³»ºÎ ¿¡·¯ ¹ß»ý #define V1_AKDETECT_SPEEDHACK 1 // ½ºÇǵåÇ٠ŽÁö #define V1_AKDETECT_MALWARE 2 // Malware ŽÁö #define V1_AKDETECT_ERROR 3 // ¾Æ¸ÓŶ ¿¡·¯ #define V1_AKDETECT_APIHOOK 4 // °ÔÀÓÇÔ¼öº¯Á¶ #define V1_AKDETECT_AKINTEGRITY 5 // ¾Æ¸ÓŶ º¯Á¶ #define V1_AKDETECT_DEBUG 6 // µð¹ö±× »óÅÂŽÁö #define V1_AKDETECT_MEMEDIT 7 // ¸Þ¸ð¸®Á¶ÀÛ #define V1_AKDETECT_DOUBT 8 // Àǽɰ¡´Â S/W ŽÁö #define V1_AKDETECT_RUNCODE 9 // ·±Å¸ÀÓ Äڵ庯Á¶¸¦ ŽÁö #define V1_AKDETECT_HOOK_DETECT 10 // API Hook ŽÁö by HOOKDefender #define V1_AKDETECT_HOOK_RESTORE_FAIL 11 // API Hook º¹¿ø ½ÇÆÐ by HOOKDefender #define V1_AKDETECT_KABUSE 12 // by somma. kernel mode abuse detected #define V1_AKDETECT_TOUCH 100 // touch service /*----------------------------------------------------------------------------- * Malicious S/W ÀÇ Å¸ÀÔ **---------------------------------------------------------------------------*/ #define V1_TYPE_KEYLOGER 1 // Ű·Î°Å·ù #define V1_TYPE_MEMEDITOR 2 // ¸Þ¸ð¸®¿¡µðÅÍ #define V1_TYPE_DEBUGGER 3 // µð¹ö°Å #define V1_TYPE_AUTOMOUSE 4 // ¿ÀÅ丶¿ì½º #define V1_TYPE_SPEEDHACK 5 // ½ºÇǵåÇÙ #define V1_TYPE_UNKNOWN 99 // ±âŸ, ¹ÌºÐ·ù /*----------------------------------------------------------------------------- * HookDefenderÀÇ ¿¡·¯ ŸÀÔ **---------------------------------------------------------------------------*/ #define V1_HDERR_NONE 0 // ¿À·ù ¾øÀ½ #define V1_HDERR_GENERIC -1 // ÀÏ¹Ý ÀûÀÎ ¿À·ù (SetErrorString() À¸·Î ¿À·ù Á¤º¸ ¼³Á¤) #define V1_HDERR_IAT_RESTORE -2 // IMPORT TABLE º¹¿ø ½ÇÆÐ #define V1_HDERR_EAT_RESTORE -3 // EXPORT TABLE º¹¿ø ½ÇÆÐ #define V1_HDERR_INVALID_PE -4 // Á¤»óÀûÀÎ PE ÆÄÀÏÀÌ ¾Æ´Ô #define V1_HDERR_NO_API_FOUNDED -5 // API ¸¦ PE ·ÎºÎÅÍ Ã£À» ¼ö ¾øÀ½ #define V1_HDERR_INVALID_ADDRESS -6 // VirtualProtect() ¶Ç´Â ÇØ´ç ¸Þ¸ð¸® ¿¢¼¼½º°¡ ½ÇÆÐÇÑ °æ¿ì /*----------------------------------------------------------------------------- * ¿¡·¯ ÄÚµå Á¤ÀÇ **---------------------------------------------------------------------------*/ #define V1_AKERROR_INIT_FAIL -1 #define V1_AKERROR_GENERAL_APIFAIL -2 // Windows APIÇÔ¼ö È£ÃâÀÌ ½ÇÆÐÇßÀ½ #define V1_AKERROR_SET_PRIVILEGE -11 // ÇÁ·Î¼¼½º¸¦ ½ºÄµÇϱâ À§ÇØ ±ÇÇÑ »ó½Â¿¡ ½ÇÆÐÇÏ¿´À½, #define V1_AKERROR_INIT_INVALID_HANDLE -13 // ÃʱâÈ­º¯¼öÀÇ HWND °¡ À¯È¿ÇÏÁö ¾ÊÀ½ #define V1_AKERROR_PECHKSUM_ZERO -14 // PEÇì´õÀÇ Ã¼Å©¼¶ÀÌ 0ÀÔ´Ï´Ù. #define V1_AKERROR_FILEFROMID_GETFAIL -16 // ID·Î ºÎÅÍ È­ÀÏÀ» °¡Á®¿À´Âµ¥ ½ÇÆÐÇß½À´Ï´Ù. /*----------------------------------------------------------------------------- * ÀÚ·á ±¸Á¶ Á¤ÀÇ **---------------------------------------------------------------------------*/ // // ŽÁöÇÑ ÇØÅ·¿¡ ´ëÇÑ Á¤º¸¸¦ ³Ñ°ÜÁÖ´Â ±¸Á¶Ã¼ // typedef struct _HACK_DETECT_INFO_V1 { INT HackType; INT Size; LPSTR Buf; } HACK_DETECT_INFO_V1, *PHACK_DETECT_INFO_V1; // // µð¹ö±×üũ¸¦ À§ÇÑ ÀڷᱸÁ¶ // typedef struct _ANTI_DEBUG_CHECK_INFO_V1 { // °Ë»ç ¹æ¹ý ÁöÁ¤ BOOL bSpecificAPI; // Ưº°ÇÑ API µéÀ» »ç¿ëÇÑ Å½Áö BOOL bProcessInfo; // ÇÁ·Î¼¼½º Á¤º¸¿¡ ÀÇÇÑ Å½Áö BOOL bParentProcessInfo; // ºÎ¸ð ÇÁ·Î¼¼½º Á¤º¸¸¦ ÅëÇÑ Å½Áö BOOL bActiveDevices; // Soft-Ice ·ùÀÇ Æ¯Á¤ µð¹ÙÀ̽º Ȱ¼ºÈ­ ¿©ºÎ¿¡ ÀÇÇÑ Å½Áö BOOL bSEH; // SEH ¿¡ ÀÇÇÑ Å½Áö // °Ë»ç °á°ú°ª INT bResSpecificAPI; // Ưº°ÇÑ API µéÀ» »ç¿ëÇÑ Å½Áö °á°ú INT bResProcessInfo; // ÇÁ·Î¼¼½º Á¤º¸¿¡ ÀÇÇÑ Å½Áö °á°ú INT bResParentProcessInfo; // ºÎ¸ð ÇÁ·Î¼¼½º Á¤º¸¸¦ ÅëÇÑ Å½Áö °á°ú INT bResActiveDevices; // Soft-Ice ·ùÀÇ Æ¯Á¤ µð¹ÙÀ̽º Ȱ¼ºÈ­ ¿©ºÎ¿¡ ÀÇÇÑ Å½Áö °á°ú INT bResSEH; // SEH ¿¡ ÀÇÇÑ Å½Áö °á°ú } ANTI_DEBUG_CHECK_INFO_V1, *PANTI_DEBUG_CHECK_INFO_V1; // // PE üũ¼¶À» À§ÇÑ ÀڷᱸÁ¶ // typedef struct _PE_CHECKSUM_INFO_V1 { DWORD HeaderSum; // PE Çì´õÀÇ Ã¼Å©¼¶ DWORD CalcSum ; // °è»êµÈ üũ¼¶ (HeaderSum °úÀÇ ºñ±³´ë»ó°ª) } PE_CHECKSUM_INFO_V1, *PPE_CHECKSUM_INFO_V1; // // ½ºÇǵåÇ٠üũ¸¦ À§ÇÑ ÀڷᱸÁ¶ // typedef struct _SPEED_HACK_CHECK_INFO_V1 { DWORD dwTGT; // TimeGetTime() DWORD dwGTC; // GetTickCount() DWORD dwTSC; // RDTSC DWORD dwQPC; // QueryPerformanceCounter() } SPEED_HACK_CHECK_INFO_V1, *PSPEED_HACK_CHECK_INFO_V1; // // ÇØ½¬°ª üũ¸¦ À§ÇÑ ÀڷᱸÁ¶ // typedef struct _PE_HASH_INFO_V1 { DWORD HeaderSum; BYTE HashBytes[256]; DWORD HashLen ; } PE_HASH_INFO_V1, *PPE_HASH_INFO_V1; // // ÇÁ·Î¼¼½º ½ºÄµÀ» À§ÇÑ ÀڷᱸÁ¶ // typedef struct _PROCESS_SCAN_INFO_V1 { TCHAR ProcessName[MAX_PATH + 1]; DWORD ProcessId; DWORD SignatureIndex; DWORD SianatureType; TCHAR SignatureName[MAX_PATH + 1]; } PROCESS_SCAN_INFO_V1, *PPROCESS_SCAN_INFO_V1; // // ScanDoubtProcessList() ¿¡¼­ »ç¿ëµÇ´Â ÀǽɵǴ ÇÔ¼ö¸¦ ã¾Æ³»±â À§ÇÑ ÀڷᱸÁ¶ // typedef struct _PROC_DOUBTAPI_V1 { TCHAR *lptszFuncName ; TCHAR *lptszDllName ; DWORD Reserved ; } PROC_DOUBTAPI_V1, *PPROC_DOUBTAPI_V1; // // HOOKED_API_INFO.API_TYPE == AT_EXPORTED ÀÎ °æ¿ì »ç¿ëµÇ´Â ±¸Á¶Ã¼ // typedef struct _HOOKED_EXPORT_API_V1 { INT HOOKED_CODE; // hooking ŸÀÔ(inline? address modify, ...) TCHAR DLLName[MAX_PATH]; TCHAR ApiName[MAX_PATH]; DWORD_PTR OriginalAddr; // hook µÇÁö ¾ÊÀº ¿ø·¡ÀÇ api ÀÇ ÁÖ¼Ò DWORD_PTR HookdAddr; // hooking µÈ ÇöÀçÀÇ api ÁÖ¼Ò } HOOKED_EXPORT_API_V1, *PHOOKED_EXPORT_API_V1; // // HOOKED_API_INFO.API_TYPE == AT_IMPORTED ÀÎ °æ¿ì »ç¿ëµÇ´Â ±¸Á¶Ã¼ // typedef struct _HOOKED_IMPORT_API_V1 { INT HOOKED_CODE; // hooking ŸÀÔ(inline? address modify, ...) TCHAR DLLName[V1__MAX_PATH]; TCHAR ApiName[MAX_PATH]; DWORD_PTR HookdAddr; // hooking µÈ ÇöÀçÀÇ api ÁÖ¼Ò DWORD_PTR DetourAddr; // jmp ÇÒ °÷ÀÇ ÁÖ¼Ò (INLINE HOOKING ŸÀÔÀÎ °æ¿ì¸¸ À¯È¿) DWORD_PTR dwStart; DWORD_PTR dwEnd; } HOOKED_IMPORT_API_V1, *PHOOKED_IMPORT_API_V1; // // HOOKED_API_INFO.API_TYPE == AT_INTEGRITY ÀÎ °æ¿ì »ç¿ëµÇ´Â ±¸Á¶Ã¼ // typedef struct _IMP_MOD_INTEGRITY_V1 { INT OrgImpModCount; INT CurImpModCount; } IMP_MOD_INTEGRITY_V1, *PIMP_MOD_INTEGRITY_V1; // // // typedef union _UAPI_INFO_V1 { HOOKED_EXPORT_API_V1 HEA; // if (API_TYPE == AT_EXPORTED) HOOKED_IMPORT_API_V1 HIA; // if (API_TYPE == AT_IMPORTED) IMP_MOD_INTEGRITY_V1 IMI; // if (API_TYPE == AT_INTEGRITY) } UAPI_INFO_V1; // // ÄݹéÇÔ¼ö·Î ³Ñ±â´Â ÃÖÁ¾ ±¸Á¶Ã¼ // typedef struct _HOOKED_API_INFO_V1 { INT API_TYPE; UAPI_INFO_V1 API_INFO; } HOOKED_API_INFO_V1, *PHOOKED_API_INFO_V1; // // API Hook ŸÀÔ // typedef enum _ENUM_HOOK_TYPE_V1 { V1_HT_NONE, V1_HT_ENTRY_HOOK_INVALID_ADDR_IAT, V1_HT_ENTRY_HOOK_INVALID_ADDR_EAT, V1_HT_ENTRY_HOOK_USE_CAVE_EAT, V1_HT_INLINE_HOOK_EAT }ENUM_HOOK_TYPE_V1; // // API º¹¿øÀ» À§ÇÑ Á¤º¸¸¦ ´ã°í ÀÖ´Â ±¸Á¶Ã¼ // typedef struct _API_TO_RESTORE_V1 { ENUM_HOOK_TYPE_V1 HookType; TCHAR DLLName[V1__MAX_PATH]; INT Ordinal; TCHAR ApiName[V1__MAX_API_NAME]; DWORD_PTR OriginalAddr; DWORD_PTR CurrentAddr; DWORD_PTR DetourAddr; TCHAR OriginalOpcodes[V1__OPCODE_DUMP_BUF_LENGTH]; TCHAR CurrentOpcodes[V1__OPCODE_DUMP_BUF_LENGTH]; TCHAR DetourAddrOpcodes[V1__OPCODE_DUMP_BUF_LENGTH]; DWORD_PTR ValidStartAddr; DWORD_PTR ValidEndAddr; } API_TO_RESTORE_V1, *PAPI_TO_RESTORE_V1; // // API º¹¿ø¿¡ ½ÇÆÐÇÑ API ¿Í ÀÌ¿¡ ´ëÇÑ ¿¡·¯ Á¤º¸¸¦ ´ã±â À§ÇÑ ±¸Á¶Ã¼ // typedef struct _RESTORE_FAULT_API_V1 { INT ErrorCode; API_TO_RESTORE_V1 apiInfo; } RESTORE_FAULT_API_V1, *PRESTORE_FAULT_API_V1; #include typedef std::vector HDFAULT_API_LIST; #endif // _TYPEDEF_AKV1_HACK_DETECT_H_