Udostępnij za pośrednictwem


[Debugging Toolbox]Playing with Minesweeper

[DT]Playing with Minesweeper

https://blogs.msdn.com/debuggingtoolbox/archive/2007/03/28/windbg-script-playing-with-minesweeper.aspx

글 : Roberto Alexis Farah
번역 : 이태화

오늘은 디버깅 이슈가 아니고 지뢰찾기를 가지고 장난을 치는 내용입니다.


첫째, 이 script 는 부정한 목적으로 만든것은 아닙니다. 지뢰찾기와도 동작하지만, 몇바이트 더 속이면 어플리케이션을 속이는  더 나은 작업을 할 수도 있습니다.

그러나, 주 관점은 debugger 가 어떻게 강력하고 정확하게 동작하나입니다. 여러분이debugger 의 사용법을 더 많이 알게 된다면 강력한 tool 로 사용할 수 있을 것입니다.

재미를 위해서 script 를 만들었으며 source code 나 symbol 을 사용하지 않고 raw disassembled code 만을 사용하였습니다. 저의 assemble skill 향상을 위해 작성하였습니다. 저의 assembly 분석능력향상을 위해 저는 공통패턴을 찾을 수 있습니다. 더욱이 저는 source code 로 나타낼 수 있습니다. 이 것들은 나의 일을 도와줍니다.  여러분이 여러분의 assembly skill 을 향상시키려고 한다면 좋은 시도가 될것 입니다.

script 는 아래에 있으며 저는 이것을 재미를 위해라고 분류하였습니다. 저는 이것의 동작을 설명하지 않습니다. 직접 찾아 보시기 바랍니다.

지뢰찾기를 Windows XP SP 2 에서 실행시키고 debugger 로 attach 한다음 아래 script 를
실행 시키고 새 게임을 실행시키면 됩니다.

심볼은 필요하지 않습니다.

It’s fun! I hope you enjoy it.

참고

peb + 0x8 은 ImageBaseAddress 입니다.

0:001> dt _peb
ntdll!_PEB
   +0x000 InheritedAddressSpace : UChar
   +0x001 ReadImageFileExecOptions : UChar
   +0x002 BeingDebugged    : UChar
   +0x003 SpareBool        : UChar
   +0x004 Mutant           : Ptr32 Void
   +0x008 ImageBaseAddress : Ptr32 Void

 

수정전
0:001> u 010036fa
winmine!StartGame+0x80:
010036fa 800880          or      byte ptr [eax],80h

 

수정후
0:001> u 010036fa
winmine!StartGame+0x80:
010036fa c6008a          mov     byte ptr [eax],8Ah

위쪽코드가 StartGame 을 할때 화면을 그리는 루틴에서 지뢰를 보여주게 수정한 것으로 보이는 군요

$$
$$ =======================================================================================
$$ Displays all hidden bombs (from Minesweeper :)). 
$$
$$ Compatibility: Win32, specific for Windows XP SP2.
$$
$$ Usage: $$>< to run the program.
$$
$$ Roberto Alexis Farah
$$ Blog: https://blogs.msdn.com/debuggingtoolbox/
$$
$$ All my scripts are provided "AS IS" with no warranties, and confer no rights.
$$ =======================================================================================
$$
eb poi(@$peb+0x8)+0x36fa c6 00 8a
$$ =============================================================================