U E D R , A S I H C RSS

이영호/지뢰찾기

모기 땜에 잠 설쳐서 지뢰찾기 시작.
모기도 많고 지뢰찾기도 안되고 해서 지뢰찾기 Reverse Engineering
지뢰찾기 만든 coder가 어떤 생각으로 이걸 짰는지 분석부터 시작.

목표: 지뢰 찾기 분석
결과: 2차원 배열로 만들어져 있으며 일반적이다.
Crack: 분석 완료 직후, Inline Patch로 배열 부분을 손보고 지뢰 찾기 시작 후 고급 기록 1초 갱신 완료.


아래 소스는 지뢰찾기 분석한 것을 coder가 제작한 게임 소스 그대로 C언어로 완벽하게 구현한 것이다. (아마 M$에 있는 소스와 완벽히 똑같을 것이다.)

--------------------------------지뢰 생성 함수 시작--------------------------------
int func(int limit)
{
	int num = (int)rand();
	return num%limit;
}

// 지뢰 생성 함수
// srand(GetTickCount()); 를 이 함수 밖에서 수행한다.
main_func()
{
...

	int base = 0x1E;	// 가로길이 (30) <- 원래 main_func()의 매개변수로 받아온다.
	int height = 0x10;	// 세로길이 (16)
	int count = 0x0A;	// 지뢰 갯수(10)
	int map[height][base] = {0x0f, };	// 눈여겨 볼점은 x좌표는 뒤에 y좌표는 앞에 썼다는 점.. 지뢰 없는 곳은 0x0f로 기록 있는 곳은 0x80
	int ret_base, ret_height;

	do {
		ret_base = func(base)++;
		ret_height = func(height)++;

		if(map[ret_height][ret_base] == 0x80)
			continue;

		map[ret_height][ret_base] = 0x80;

		count--;
	} while(count);

...
}
// map 배열은 DS:1005340에서 시작
--------------------------------지뢰 생성 함수 끝--------------------------------


재밌네..~ 전에 동우님(http://ssrnet.snu.ac.kr/~leedw)처럼 디스어셈블 시도해서 분석한 것임~? --1002
네~ 맞아요~! 이거 쓰고 모기를 16마리 잡았네요 -0- --영호
Reverse 하는 김에 모기 퇴치 프로그램도 같이 짜야 할듯; --1002
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2013-11-27 09:36:22
Processing time 0.0861 sec