정보처리기사 실기 시험공부 중에 하기 싫을 때마다 그냥 기초리버싱 실습 좀 해보고 있었습니다.
에이지오브엠파이어.. 사실 스타보다 전.. 이걸 더 좋아했습니다 (__)ㅎㅎ
게임 도중 치트키로는 각 유닛의 능력치를 조절 할 수가 없더군요. 그래서 유닛의 능력치를 조절해 보고자 ..
뭐 많이 분석은 못했지만 시험이 끝나서 더이상 분석하기가 싫더군요. 그래서 그냥 분석 된 정보만 올립니다.
대부분 전략시뮬레이션 게임은 각 유닛마다 유닛에 대한 정보를 구조체로 가지고 있습니다.
제가 예전에 전략시뮬레이션 리버싱 최초로 해본 게임이 쥬라기원시전이라는 게임인데 해당 게임은 각 유닛마다 12Byte 크기의 구조체를 가지고 있었습니다. 사실 처음 전략시뮬레이션 게임 리버싱을 해보았기 때문에 아 구조체에 모든게 다 담겨있는구나..
라고 생각 했습니다. 하지만.. 게임 퀄리티와 급이 다른 에이지오브엠파이어를 리버싱 해본 결과.. 헐헐헐 ㅡ ㅡ ;
멘붕 왔습니다. 유닛 공격 능력치 조절을 위해서 구조체 포인터를 4번 이상 들어가야하더군요. 뭐 끝까지 이 부분은 분석 안했습니다. 기사 시험을 봐버렸거든요..ㅋㅋ
먼저 조절 동영상을 찍었는데 용량이 커서... 업로드는 못하겠네요. 67MB 정도짜리 SWF 파일 업로드 방법좀 알려주세요.
SWF 업로드 사이트도 마땅한게 없네요. 쩝;
분석 결과는 그냥 조잡하게.. 적고 끝내겠습니다.
유닛 구조체 부분만 살짝..;
1CD3769C 00B934B8
1CD376A0 06CC3B90
1CD376A4 00000043
1CD376A8 00000010
1CD376AC 00040663 ; 유닛 고유 값 ( 죽으면 FFFFFFFF 로 바뀜 )
=== 유닛 위치 정보 ===
1CD376B0 430A791B
1CD376B4 40EB854E
1CD376B8 43916486
1CD376BC 3F65D176
1CD376C0 BDDAA13B
1CD376C4 BEDAD708
1CD376C8 3DDD7FCF
1CD376CC 3F7E70EE
1CD376D0 BCACAFE3
1CD376D4 BEDAA8D9
1CD376D8 3CDFAB26
1CD376DC BF675FDE
=====================
1CD376E0 11B07800
1CD376E4 1CD51834
1CD376E8 1F31BA00
1CD376EC 1AF160F0
1CD376F0 06CC3B80
1CD376F4 19E92974
1CD376F8 1E016000 ; 유닛 능력
1CD376FC 138C2C54 ; 수정하면 유닛 모양 변함..;
1CD37700 44A9C000 ; 유닛 현재 체력
이제 유닛 하나에 대한 구조체 입니다. 대략 100Byte로 이루어져 있는 것 같군요. 위치 정보를 위해 48Byte를 사용하는데요.
상당히 지형이 복잡한 에이지오브엠파이어 답군요.
아래서 세번째 값인 1E016000 값은.. 구조체 포인터 입니다. 즉.. 저 값은 포인터 값으로 안으로 들어가봐야합니다.
왜 저 구조체에 다 넣지 않고 포인터를 사용해 관리하고 있을까요?
에이지오브엠파이어는 하나의 유닛이 가지고 있는 정보들이 많습니다.
그렇기 때문에 저 많은 정보들을 유닛마다 구조체에 담았다가 메모리가 넘치게 될것 입니다. 어짜피 전략시뮬레이션은 하나의 유닛이 여러개 나올 수 있으므로 위치정보 같은건 빼놓고 능력 정보는 하나의 구조체에서 관리하고 유닛 구조체에서는 능력 정보 구조체 주소만 가지고 있으면 됩니다. 이러면 유닛 100마리가 있어도 능력 정보 구조체는 하나만 존재하면 되니까요.
( 분석하면서 게임을 껐다켰다해서.. 주소가 다릅니다;; )
1EFDC800 00B9F404
1EFDC804 000004DB ; 케릭터 클릭 했을 때 나오는 이미지 바뀜
1EFDC808 000004DB ; 케릭터에 대한 음성 바뀜
1EFDC80C 0000072A
1EFDC810 1A6C2CE8 ; 게임자체에서 구분하는 케릭터 이름
1EFDC814 00000734
.
.
.
1EFDC838 00000020
1EFDC83C 00000002
1EFDC840 00000000
1EFDC844 1A6BFE38 ; 구조체 포인터 ( 공성 공격/감시자 공격/근접 공격 )
1EFDC848 41400000
.
.
.
1EFDC87C BF800000
1EFDC880 40D00000 ; 속도
1EFDC884 41080000
1EFDC888 3F4A3D71
1EFDC88C 3F4A3D71
1EFDC890 7F7FFFFF
1EFDC894 41900000
1EFDC898 44A28000 ; 전체 체력
1EFDC89C 44A28000
.
.
.
1EFDC8C0 3F800000
1EFDC8C4 3E99999A ; 저항력
1EFDC8C8 41200000
.
.
.
1EFDC8E8 1A6B5F00
1EFDC8EC 0000000A ; 유닛 명령 부분
1EFDC8F0 00000010
.
.
.
1EFDC93C FFFFFFFF
1EFDC940 0001002E ; 유닛 이름 바뀜;
1EFDC944 0001002F
1EFDC948 FFFFFFFF
.
.
.
.
여기서는 유닛 능력 관련 정보를 가지고 있는 구조체 인데요. 512Byte로 이루어져 있습니다. 엄청 크군요. ㅡ ㅡ;
저항력 값과 속도는 바로 수정할 수 있습니다. 하지만 공격 정보는 포인터를 따라 또 들어가는군요.. ㅠ ㅠ
또 들어가보겠습니다.
1A6BFE38 049E5BC0 ; UNICODE "daimyo.tactics"
1A6BFE3C 1A6C91E8
1A6BFE40 00000004
1A6BFE44 00000001
1A6BFE48 1A6BCC50
1A6BFE4C 00000003
1A6BFE50 00000004
1A6BFE54 1EFD5360 ; 공격 정보 하지만 포인터..
1A6BFE58 00000006
1A6BFE5C 00000008
구조체가 작아지긴 했지만 공격 정보를 위해선 또 포인터를 따라 들어가야합니다.
가장 위에 있는 "daimyo.tactics" 는 유닛 별로 구분되어 있는 이름입니다.
아무튼 공격 관련 정보를 위해 또 들어가보겠습니다.
1EFD5360 1EFDDA80 ; 근접 공격
1EFD5364 1EFDDB60 ; 감시자 공격
1EFD5368 1EFDDC40 ; 공성 공격..
1EFD536C 1EFDDD20
1EFD5370 1EFDDE00
1EFD5374 1EFDDEE0
.
.
.
이 부분도 구조체가 쫌 컸습니다. 하지만 위쪽 값들이 중요한데요. 아쉽게도 저 값들 조차.. 또 포인터입니다.
여기까지도 공격 부분 수정을 위해 3번의 포인터를 따라 들어왔는데요. 또 들어가야한다는 것입니다.
하지만 시험이 끝나 분석은 여기서 끝냈습니다. 저 포인터 부분들을 다른 종류 유닛의 포인터 값으로 바꿔주면 해당 유닛의 능력이 다른 유닛의 능력으로 바뀌게 됩니다. ㅋㅋ
아무튼.. 복잡합니다. 게임 리버싱은 할게 못됩니다. 다시 프로젝트 집중.. -_-.. 뻘짓 스톱..
'My Study > Reversing' 카테고리의 다른 글
온라인 알까기 가상머신 탐지 우회 (6) | 2012.09.06 |
---|---|
VERA ( Reversing tool ) (12) | 2012.07.31 |
WriteProcessMemory Anti Reversing (0) | 2012.06.27 |
Prefetch queue Anti Debugging (4) | 2012.05.25 |
백신 Avast의 Anti-attach 우회하기 (11) | 2012.04.19 |