본문 바로가기
게임

[HackShield] LOG

by dladbru 2015. 6. 7.

 음.. 핵쉴드 우회 성공했는데 약간 어이없게 성공했네요

 

원인은 제 코드에 0x18 을 18 로써서 CRC에서 망가졌던걸로...

 

일단 치트엔진은 기본 치트엔진이고(변조X) 핵쉴드 모듈을 무력화 했습니다.

 

그리고 무력화 한 코드들을 다 숨겼습니다..

 

그래서 HeartBeat 도 정상모듈로 인식하고 동작합니다...

 

작동 CRC 타입 총 7개

 

[8132] Detour Success

[8132] Memory Patching

[8132] CALLBACK1 Found : 4844d3d, MyDispatch : 73661420

[8132] CALLBACK2 Found : 47ab0b8

[8132] DETECTION Found : 47ab020

[8132] ASSEMBLY Found : 47df2ed

[8132] ANTICRASH Found : 47f151e

[8132] NANOCHECK1 Found : 47f14b0

[8132] NANOCHECK2 Found : 47ee0a1

[8132] NANOCHECK3 Found : 47f0a8d

[8132] NANOSCAN1 Found

[8132] NANOSCAN2 Found

[8132] PROCESSSCANNER Found : 47f5480

[8132] MODULESCANNER Found : 47fc2f0

[8132] MEMORYPROTECTION Found : 487755c

[8132] CRC Bypass Start

[8132] HSCRC1 Found : 4839402

[8132] HSCRC2 Found : 4b0e8c5

[8132] HSCRC3 Found : 49ffee0

[8132] HSCRC4 Found : 481637d

[8132] HSCRCDynamic1 Found : 47b5438

[8132] HSCRCDynamic2_Hook Found : 47b54b2

[8132] Patching process ended

[8132] 후킹 완료

[8132] ServiceDispatch called

[8132] 5

[8132] ServiceDispatch called

[8132] 19

[8132] ServiceDispatch called

[8132] 13

[8132] Table : 41c02c8

[8132] HSCRCDynamicCheck1 Found : 41c0337

[8132] Table : 41c02c8

[8132] HSCRCDynamicCheck2 Found : 41c031c

[8132] Table : 41c02c8

[8132] HSCRCDynamicCheck3 Found : 41c0323

[6784] 13

[6784] Table : 425009c

[6784] HSCRCDynamicCheck1 Found : 425010b

[6784] Table : 425009c

[6784] HSCRCDynamicCheck2 Found : 42500f0

[6784] Table : 425009c

[6784] HSCRCDynamicCheck3 Found : 42500f7

[6784] Table : 425009c

[6784] ServiceDispatch called

[6784] 13

[6784] Table : 425068e

[6784] HSCRCDynamicCheck1 Found : 42506fd

[6784] Table : 425068e

[6784] HSCRCDynamicCheck2 Found : 42506e2

[6784] Table : 425068e

[6784] HSCRCDynamicCheck3 Found : 42506e9

[6784] Table : 425068e

 

제가 드릴 수 있는 힌트는 여기까지고...

 

위 로그에 대해 설명을 하자면

 

각종 디텍션을 제거합니다.

 

그다음 CRC를 제거합니다.

 

여기까진 여타 우회와 비슷한데

 

아래 보면 HeartBeat(서비스코드 13번콜)에서 CRC 검사가 일어납니다.

 

그리고 그 CRC 검사 하는 코드는 HeartBeat 각각 3번씩 일어납니다.

 

또한 그 코드는 rep movs 같은 코드로

 

임의 메모리안에 코드를 복호화해서 놓고 CRC 검사 후에는 바로 지워버린다음

 

약간 위치를 바꾸어 다른 코드를 씁니다.

 

[6784] Table : 425068e << 코드 테이블 임의 할당

[6784] HSCRCDynamicCheck1 Found : 42506fd << 그 테이블에서 CRC 체크 부분 찾음

[6784] Table : 425068e << 코드 테이블 임의 할당2

[6784] HSCRCDynamicCheck2 Found : 42506e2 << 그 테이블에서 CRC 체크 부분 찾음2

[6784] Table : 425068e

[6784] HSCRCDynamicCheck3 Found : 42506e9

 

이것을 우회하려면

 

먼저 이 코드를 쓰는 곳을 알아내야하고

 

그 코드를 쓰는 곳을 알아냈으면 그 블록에

 

코드 시작 주소가 들어있습니다.

 

그것을 코드 패치로 뺀 뒤, ret 근처에서 다시 코드패칭으로

 

할당된 주소에서 입력된 코드를 분석해 CRC 우회를 하면 됩니다.

 

만약 여기에서 실패하면 별다른 에러 없이 서버에서 튕굽니다.

(Heart Beat 13번 CRC 인증 실패로 에러 없이 팅굼)

 

그리고 그 이후론 CRC 인증이 성공해도 바로 튕굽니다. (클라이언트 생성시 고유 난수 아이디 생성 후

 

그 아이디를 불법으로 등록하는듯..)

 

모든 패치를 패턴검색 + 와일드카드 기법으로 만들었기 때문에 아마 반년은 가지 않을까 생각함....

 

(추가.. 5분 후 서버에서 튕구던데.. 바로 아까 핵쉴드 콜백 찾았는데 여기서 튕구는거 같네요..)

 

아래는 콜백에서 switch 로 거르는 상수들 입니다. 참고가 될껍니다!

 

#define AHNHS_ACTAPC_STATUS_HACKSHIELD_RUNNING  0x010001  // 핵쉴드 상태 확인 기능을 사용하는 경우에 호출 되는 콜백입니다.  

                 // 핵쉴드가 정상적으로 동작 하고 있는 동안 이 콜백이 호출 됩니다. 

                 // 오류 코드 가 아니므로 게임에서 내부적으로 확인 합니다. 

#define AHNHS_ACTAPC_DETECT_ALREADYHOOKED   0x010101  // 일부 API가 이미 후킹되어 있는 상태입니다. (그러나 실제로는 이를 차단하고 있기 때문에 후킹프로그램은 동작하지 않습니다.)

#define AHNHS_ACTAPC_DETECT_AUTOMOUSE    0x010102  // 오토마우스 행위가 감지되었습니다. 

#define AHNHS_ACTAPC_DETECT_AUTOMACRO    0x010104  // 오토메크로 행위가 감지되었습니다. 

#define AHNHS_ACTAPC_DETECT_HOOKFUNCTION   0x010301  // 보호 API에 대한 후킹 행위가 감지되었습니다.

#define AHNHS_ACTAPC_DETECT_DRIVERFAILED   0x010302  // 해킹 차단 드라이버가 로드되지 않았습니다.

#define AHNHS_ACTAPC_DETECT_SPEEDHACK    0x010303  // 스피드핵류의 프로그램에 의해 시스템 시간이 변경되었습니다.

#define AHNHS_ACTAPC_DETECT_MESSAGEHOOK    0x010306  // 메시지 후킹이 시도되었으며 이를 차단하지 못했습니다.

#define AHNHS_ACTAPC_DETECT_KDTRACE     0x010307  // 디버거 트래이싱이 발생했다.(커널 디버거 활성화, 이후 브레이크 포인터 처리)

#define AHNHS_ACTAPC_DETECT_KDTRACE_CHANGED   0x010308  // 설치된 디버거 트래이싱이 변경되었다.

#define AHNHS_ACTAPC_DETECT_SPEEDHACK_RATIO   0x01030B  // 스피드핵 감지 옵션이 'GAME'이 경우 이 콜백으로 최근 5초동안의 시간정보가 전달됩니다.

#define AHNHS_ENGINE_DETECT_GAME_HACK    0x010501  // 게임 해킹툴의 실행이 발견되었습니다.

#define AHNHS_ENGINE_DETECT_WINDOWED_HACK   0x010503  // 창모드 해킹툴

#define AHNHS_ACTAPC_DETECT_MULTI_LOADING   0x010504  // 클라이언트 멀티 로딩 감지.

#define AHNHS_ACTAPC_DETECT_ABNORMAL_MEMORY_ACCESS 0x010601  // 코드 패치 시도가 감지되었습니다.

#define AHNHS_ACTAPC_DETECT_MODULE_CHANGE   0x010701  // 핵쉴드 관련모듈이 변경되었습니다.

#define AHNHS_ACTAPC_DETECT_ENGINEFAILED   0x010702  // 엔진기능이 정상적이지 않습니다.

#define AHNHS_ACTAPC_DETECT_CODEMISMATCH   0x010703  // 코드가 일치하지 않습니다. 

#define AHNHS_ACTAPC_DETECT_PROTECTSCREENFAILED  0x010704  // 화면 보호기능이 정상적이지 않습니다.

#define AHNHS_ACTAPC_DETECT_MEM_MODIFY_FROM_LMP  0x010705  // 보호 모듈에 대해서 메모리 변조가 감지되었습니다.

#define AHNHS_ACTAPC_DETECT_LMP_FAILED    0x010706  // 핵쉴드 로컬 메모리 보호 기능이 정상적이지 않습니다.

#define AHNHS_ACTAPC_DETECT_RMEM_MODIFY_FROM_LMP 0x010709  // 보호 모듈에 대해서 읽기전용 메모리 변조가 감지되었습니다.

#define AHNHS_ACTAPC_DETECT_ABNORMAL_FUNCTION_CALL 0x010801  // Game EXE내의 코드를 외부 모듈에서 임의로 호출하였습니다.

#define AHNHS_ACTAPC_DETECT_ANTIFREESERVER   0x010901  // Game이 올바른 서버로 접속을 하지 않았습니다.

#define AHNHS_ACTAPC_DETECT_ABNORMAL_HACKSHIELD_STATUS 0x010A01 // HackShield 보안 기능이 정상적으로 동작하지 않습니다.

 

추가 ) 핵쉴드가 크리티컬한 디텍션을 하면 클라이언트에서 게임을 안꺼도 핵쉴드 자체에서 프로세스를 종료합니다.

크리티컬한 요인이 아닌경우 보통 클라이언트에서 콜백함수로 인자를 받아 처리합니다.

 

추가 ) 동적으로 검사하는 CRC는 핵쉴드가 아닌 Themida 에서 제공하는 CRC 체크입니다.

VM Machine Code들도 검사합니다.

궁금한게 생겼는데.. Themida CRC 체크하고 핵쉴드하고 통신하는게 있나...


제가 첫작성자는 아니고 탈퇴한 유저의것인데 저도 똑같이 하였으므로.. ^^*

반응형

댓글