모기 땜에 잠 설쳐서 지뢰찾기 시작. 모기도 많고 지뢰찾기도 안되고 해서 지뢰찾기 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]