본문 바로가기

reversing

window xp 지뢰찾기(0)






안녕하세요 오늘은 지뢰찾기 리버싱을 해보겠습니다.


준비물 : IDA, Ollydbg, 윈도우 xp 버전 지뢰찾기 32bite, 지뢰찾기의 심볼 



목적 : 지뢰의 위치를 미리 파악한다. 





1. 일단 IDA 에 winmine을 올립니다 .

(그림 표 같은 것 이 나오면 tab을 눌러주세요





저는 리버싱이 처음이라 저 코드 한줄 한줄 해석하고 있었습니다 ㅜㅜ.


계속  한줄 한줄 해석하고 있다가 발견한 것 이 바로 왼쪽의  functions name 입니다.


즉 함수의 이름이죠 자 쭉 내려보면 심볼이 있기 때문에 어떤 기능을 하는지 대충 알 수 있습니다. 



그래서 저는 처음으로 StartGame()에 들어가 봤습니다. (alt+t 로 검색할 수 있습니다. )





이러한 코드가 나옵니다. 더욱 자세히 알기위헤 tab 키를 이용해 어셈블리언어로 확인합니다. 






일단 눈에 띄는 것이 저 rnd 입니다 . rnd 는 생각하시는 랜덤이 맞습니다 .  

일단 뭔가 xbox와 ybox가 x,y좌표인거 같은 느낌이 있습니다.


그럼 뭔가 의심이 되므로 하나씩 하나씩 해석해봅니다.



push  _xBoxMac         --> _xBoxMac을 push 합니다.

call  _Rnd@4             -->  랜덤 함수를 호출 합니다.

push  _yBoxMac         --> yBocMac을 push 합니다.

mov  esi,eax              --> eax의 값을 esi로 복사합니다. 

inc esi                    --> inc 는 대상에 1을 더하는 연산입니다 .

call _Rnd@4              --> 다시 랜덤 함수를 호출 합니다.

inc     eax                --> eax  1을 더합니다. 


무언가 랜덤함수를 호출하고 거기에 1을 더한다..

지뢰 찾기게임에서 랜덤함수를 언제 사용 할까 생각을 해보다가 

지뢰의 위치를 만들 때 사용 되겠다 라는 추측을 했습니다. 




자 여기까지 ollydbg를 사용해 레지스터의 값을 확인 해 봅시다. 

(IDA에서 text: 주소값  을 복사해서 olldybg로 그 위치에  break point를 걸어줍니다.) (  주소로 이동 ctrl+G, bp = F2 )

잘 안보이시겠지만 오른 쪽 위를 보시면 Esi 는 5 EAX는 7 입니다. 


뭔가 느낌이 오시나요 ? 저는 제가 생각했던 대로 Esi x 값으로 eax  y 값으로 생각했습니다. 

  

  

ollydbg 로 확인해 봤습니다. (F9) 역시 왼쪽 위부터 (1.1) 입니다. 


자 이렇게 해서 지뢰의 위치가 어떻게 만들어지는지 확인했습니다 .


다음 글에서는 스택에 어떻게 저장되는지를 확인해 보도록 하겠습니다. 

 


   

'reversing' 카테고리의 다른 글

window aslr 제거하는 방법  (0) 2016.09.09
process id (pid)를 쉽게 확인하는 방법 (윈도우)  (0) 2016.09.01
window xp 지뢰찾기(1)  (2) 2016.09.01
window xp 지뢰찾기(0)  (2) 2016.08.29
리버싱이란 ??  (0) 2016.08.29