안녕하세요 오늘은 지뢰찾기 리버싱을 해보겠습니다.
준비물 : 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) 입니다.
자 이렇게 해서 지뢰의 위치가 어떻게 만들어지는지 확인했습니다 .
다음 글에서는 스택에 어떻게 저장되는지를 확인해 보도록 하겠습니다.
'Study > reversing' 카테고리의 다른 글
window aslr 제거하는 방법 (0) | 2016.09.09 |
---|---|
process id (pid)를 쉽게 확인하는 방법 (윈도우) (1) | 2016.09.01 |
window xp 지뢰찾기(1) (2) | 2016.09.01 |
리버싱이란 ?? (0) | 2016.08.29 |
댓글