Zine.net online

Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc
w Szukaj

mgrzeg.net - Admin on Rails :)

Czy jesteś saperem?

Dziś zabawa dla saperów :) Jeśli należysz do tych szczęśliwców, którzy wiedzą, co powinno znaleźć się na białej poduszce, a do tego nie boisz się uruchomić WinDbg, to zapraszam do dalszej lektury i wspólnej zabawy.

Saper od środka

Bierzemy na ruszt systemowego sapera z Windows XP. Po zakończonej zwycięstwem rozgrywce możemy zrobić zrzut pamięci sapera (np. używając do tego celu procdumpa) i przyjrzeć się bliżej temu, co też w środku siedzi.

Zaczynamy od przeładowania symboli

0:000> .reload /f winmine.exe
0:000> lm
start    end        module name
01000000 01020000   winmine    (pdb symbols)          c:\websymbols\winmine.pdb\3B7D84751\winmine.pdb
5ad70000 5ada8000   uxtheme    (deferred)            
5cb70000 5cb96000   shimeng    (deferred)            
6f880000 6fa4a000   AcGenral   (deferred)            
769c0000 76a74000   userenv    (deferred)            
76b40000 76b6d000   winmm      (deferred)            
77120000 771ab000   oleaut32   (deferred)            
773d0000 774d3000   comctl32   (deferred)            
774e0000 7761d000   ole32      (deferred)            
77be0000 77bf5000   msacm32    (deferred)            
77c00000 77c08000   version    (deferred)            
77c10000 77c68000   msvcrt     (deferred)            
77dd0000 77e6b000   advapi32   (deferred)            
77e70000 77f02000   rpcrt4     (deferred)            
77f10000 77f59000   gdi32      (deferred)            
77f60000 77fd6000   shlwapi    (deferred)            
77fe0000 77ff1000   secur32    (deferred)            
7c800000 7c8f6000   kernel32   (deferred)            
7c900000 7c9af000   ntdll      (pdb symbols)          c:\websymbols\ntdll.pdb\1751003260CA42598C0FB326585000ED2\ntdll.pdb
7c9c0000 7d1d7000   shell32    (deferred)            
7e410000 7e4a1000   user32     (pdb symbols)          c:\websymbols\user32.pdb\D18A41B74E7F458CAAAC1847E2D8BF022\user32.pdb

Wygląda na to, że wszystko mamy. Po kilku chwilach zabawy znajdujemy interesujące nas symbole

0:000> x winmine!*box*
010057a0          winmine!cBoxVisitMac = <no type information>
010010b8          winmine!_imp__MessageBoxW = <no type information>
01003084          winmine!StepBox (<no parameter info>)
010057a4          winmine!cBoxVisit = <no type information>
01005338          winmine!yBoxMac = <no type information>
010031a0          winmine!PopBoxUp (<no parameter info>)
01001120          winmine!_imp__DialogBoxParamW = <no type information>
01005334          winmine!xBoxMac = <no type information>
0100316b          winmine!PushBoxDown (<no parameter info>)
0:000>
x winmine!*bomb*
01002f3b          winmine!CountBombs (<no parameter info>)
01002801          winmine!DisplayBombCount (<no parameter info>)
01002f80          winmine!ShowBombs (<no parameter info>)
01002785          winmine!DrawBombCount (<no parameter info>)
01005194          winmine!cBombLeft = <no type information>
0100346a          winmine!UpdateBombCount (<no parameter info>)
01005330          winmine!cBombStart = <no type information>
0:000> x winmine!*rgb*
01005340          winmine!rgBlk = <no type information>
0:000>
dd winmine!cBombStart L1
01005330 
0000000a
0:000>
dd winmine!xBoxMac L1
01005334 
00000009
0:000>
dd winmine!yBoxMac L1
01005338  00000009

A zatem mamy 10 bomb umieszczonych na planszy 9 x 9. Zróbmy zatem jeszcze zrzut zawartości samej planszy (zrzut powyżej). Dla czytelności część wydruku wyciąłem.

0:000> db /c 20 winmine!rgBlk L160
01005340  10 10 10 10 10 10 10 10-10 10 10 0f
01005360  10 40 41 8e 42 8e 42 8e-41 40 10 0f
01005380  10 40 41 41 42 41 43 42-42 40 10 0f
010053a0  10 41 41 40 40 41 42 8e-41 40 10 0f
010053c0  10 8e 41 40 40 41 8e 42-41 40 10 0f
010053e0  10 42 43 41 41 41 41 41-40 40 10 0f
01005400  10 8e 42 8e 41 40 41 41-41 40 10 0f
01005420  10 42 43 41 41 40 41 8e-41 40 10 0f
01005440  10 8e 41 40 40 40 41 41-41 40 10 0f
01005460  10 41 41 40 40 40 40 40-40 40 10 0f
01005480  10 10 10 10 10 10 10 10-10 10 10 0f

Wynik możemy zapisać jako ciąg {x[i]y[i]}, gdzie x[i] - numer wiersza, y[i] - kolumny, licząc od lewego górnego rogu i zaczynając numerację od '1'. Powyższą rozgrywkę możemy zapisać jako
{13,15,17,37,41,46,61,63,77,81}
a w postaci stringu jako
"13151737414661637781"

Rozbroisz mnie?

Skoro wszystko już jest jasne, to czy znajdzie się jakiś saper, który rozbroi zaminowane pole? Zrobiłem zrzut pamięci, który można ściągnąć stąd, reszta w waszych rękach :) Jako wynik podajcie iloczyn (lub sumę - do wyboru) wszystkich składowych + położenie jednej miny.

I jeszcze na sam koniec. Chodzi mi po głowie przygotowanie złożonej zagadki typu DebugMe (nawiązując do nazwy CrackMe), ale czy byliby jacyś chętni do jej rozwiązania? Jeśli tak, to proszę ujawnijcie się w komentarzach, a poświęcę trochę czasu i coś przygotuję.

(Ilustracja użyta na początku tekstu - autor nieznany, plik ściągnięty z udostępnionych przez Justynę Spychałę na FB).

Opublikowane 5 sierpnia 2012 18:01 przez mgrzeg
Filed under: , ,

Powiadamianie o komentarzach

Jeżeli chciałbyś otrzymywać email gdy ta wypowiedź zostanie zaktualizowana, to zarejestruj się tutaj

Subskrybuj komentarze za pomocą RSS

Komentarze:

 

gt said:

Pomysł DebugMe ciekawy, ale myślę, że chętnym braknie odwagi. W moim przypadku przez brak wiedzy. A tak na marginesie poszukiwania min: http://blogs.technet.com/b/plitpromicrosoftcom/archive/2009/03/24/minesweeper-consultant-solitaire-expert.aspx

I jako wyzwanie, pytanie zadane w komentarzach... ;)

sierpnia 5, 2012 19:25
 

Paweł said:

O ile się nie pomyliłem w liczeniu to suma: 518, jedna z min 69 :)

Co do DebugMe - jasne :) Tylko zapowiedz wcześniej, żeby człowiek mógł sobie wolne zaplanować - nic tak nie denerwuje jak ciekawe zadanko i brak czasu :)

Paweł

sierpnia 5, 2012 22:48
 

mgrzeg said:

@gt: odwagi!!! :) Plan jest taki, że do rozwiązania zadań powinna wystarczyć wiedza zdobyta w ramach mojego blogu :) Co do solitaira - może w wolnej chwili trzeba będzie zajrzeć? :)

@Pawel: Policz jeszcze raz sumę, przy wklejaniu w kalkulator dopisz na końcu '=' ;)

Biorąc pod uwagę zainteresowanie, to chyba przesunę realizację pomysłu na 'kiedyś' ;)

sierpnia 6, 2012 14:13
 

Paweł said:

617. Nie wiem czemu liczyłem 9 min zamiast 10ciu.

Paweł

sierpnia 6, 2012 15:05
 

mgrzeg said:

Paweł, przeszedłeś test sapera, gratuluję :) Jacyś inni chętni?

sierpnia 6, 2012 15:35
 

maczek said:

Suma 617 bombka 96.

Dopisuję się chętnych do DebugMe :)

sierpnia 7, 2012 11:08
 

mgrzeg said:

maczek, gratuluję! :) Następnego sapera proszę o podanie iloczynu :)

sierpnia 7, 2012 11:16
 

Mateusz said:

Bardzo chętnie ale brak wiedzy mocno doskwiera.

Jedyna przygoda z WinDbg to analizowanie zrzutów pamięci po BSOD.

sierpnia 14, 2012 18:14

Co o tym myślisz?

(wymagane) 
(opcjonalne)
(wymagane) 

  
Wprowadź kod: (wymagane)
Wyślij

Subskrypcje

W oparciu o Community Server (Personal Edition), Telligent Systems