모기 땜ì—� ìž ì„¤ì³�서 지뢰찾기 시작.
모기ë�„ ë§Žê³ ì§€ë¢°ì°¾ê¸°ë�„ 안ë�˜ê³ 해서 지뢰찾기 Reverse Engineering
지뢰찾기 ë§Œë“ coderê°€ ì–´ë–¤ ìƒ�ê°�으로 ì�´ê±¸ 짰는지 ë¶„ì„�부터 시작.
모기ë�„ ë§Žê³ ì§€ë¢°ì°¾ê¸°ë�„ 안ë�˜ê³ 해서 지뢰찾기 Reverse Engineering
지뢰찾기 ë§Œë“ coderê°€ ì–´ë–¤ ìƒ�ê°�으로 ì�´ê±¸ 짰는지 ë¶„ì„�부터 시작.
목표: 지뢰 찾기 분�
ê²°ê³¼: 2ì°¨ì›� 배열로 ë§Œë“¤ì–´ì ¸ 있으며 ì�¼ë°˜ì �ì�´ë‹¤.
Crack: ë¶„ì„� 완료 ì§�후, Inline Patch로 ë°°ì—´ 부분ì�„ ì†�ë³´ê³ ì§€ë¢° 찾기 시작 후 ê³ ê¸‰ 기ë¡� 1ì´ˆ ê°±ì‹ ì™„ë£Œ.
ê²°ê³¼: 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- --ì�´ì˜�호
네~ ë§žì•„ìš”~! ì�´ê±° ì“°ê³ ëª¨ê¸°ë¥¼ 16마리 잡았네요 -0- --ì�´ì˜�호
Reverse 하는 ê¹€ì—� 모기 퇴치 프로그램ë�„ ê°™ì�´ 짜야 í• ë“¯; --1002










