본문 바로가기

My Study/Reversing

Age of Empires III 아시아의 왕조 정보

정보처리기사 실기 시험공부 중에 하기 싫을 때마다 그냥 기초리버싱 실습 좀 해보고 있었습니다.

에이지오브엠파이어.. 사실 스타보다 전.. 이걸 더 좋아했습니다 (__)ㅎㅎ


게임 도중 치트키로는 각 유닛의 능력치를 조절 할 수가 없더군요. 그래서 유닛의 능력치를 조절해 보고자 ..

뭐 많이 분석은 못했지만 시험이 끝나서 더이상 분석하기가 싫더군요. 그래서 그냥 분석 된 정보만 올립니다.


대부분 전략시뮬레이션 게임은 각 유닛마다 유닛에 대한 정보를 구조체로 가지고 있습니다.

제가 예전에 전략시뮬레이션 리버싱 최초로 해본 게임이 쥬라기원시전이라는 게임인데 해당 게임은 각 유닛마다 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