Skocz do zawartości

xor eax, eax

  • wpisy
    3
  • komentarzy
    5
  • wyświetleń
    4 650

[tut]Igraszki z notatnikiem #1, czyli jak pisać w notatniku bez użycia notatnika?


A więc witam na moim nowym blogu, poświęconym głównie programowaniu i tematom pochodnym, czy też, podobnym. Że to tak, delikatnie rzecz biorąc, ujmę.

 

Igraszki z notatnikiem #1, czyli jak pisać w notatniku bez użycia notatnika?

 

 

Wstęp

Życie pokazuje mi że programowanie(szczególnie w liceum, pozdrawiam wszystkich z profilu mat-fiz-inf) jest sprowadzone wyłącznie do naku...robienia algorytmów, rozwiązywania problemów, dopasowywania się do standardów. Ale gdzie w tym wszystkim trochę funu? Takiej beztroskiej, wręcz trochę bezcelowej zabawy, ale jakże fascynującej - bo związane z (jak dla mnie) najciekawszą stroną programowania.Ale bez zbędnych wstępów, przejdźmy do części właściwej cóż chcę pokazać:

 

Zamierzam poprowadzić chociaż trochę serię artykułów która będzie się opierać...o notatnik. Tak, ten uroczy plik notepad.exe, który każdy ma na swoim komputerze. I pokażę cóż można z nim zrobić..A uwierzcie mi, że można, sporo, a jak ktoś się uprze, to praktycznie wszystko(przykład Anonimowych którzy niedawno włamali się do Sony jest wprost idealny, nieprawdaż?). A zacznę od czegoś prostego, czego nie da się wytłumaczyć prosto, chociaż w jakimś stopniu sens przekazuje tytuł tego wpisu : D

 

Użyte narzędzia?

  • Olly
  • Dev-C++
  • Wspomnę jedynie że działam na maszynie wirtualnej z Windowsem XP, SP3

Parę słów wyjaśnienia, czym jest Olly - jest to debugger, za sjp.pwn.pl:

debugger [wym. debager] «program służący do identyfikacji błędów w programach i systemach komputerowych»

Ale oprócz identyfikacji błędów, potrafi pokazać nam, ludziom, pliki exe, które zwykle są niekoniecznie czytelne, w miarę zrozumiałej formie:

notatnikotwartywnotatni.jpg

Rys. 1 - Notatnik otwarty w notatniku(???)

 

notatnikotwartywollym.jpg

Rys. 2 - Notatnik otwarty w Ollym

 

No ale coś za coś: Olly pokazuje nam programy w asemblerze, którego wypada się jednak nauczyć(albo mieć wyczucie i znać nieco angielski, jak ja xD), żeby pogrzebać nieco głębiej w systemie. Żeby zrozumieć głębsze przesłanie kryjące się za tym artykułem warto znać też conieco podstawy pisania aplikacji GUI w Windowsie...oczywiście będę starał się tłumaczyć wszystko na bieżąco, ale wiecie, jak to jest >.>

 

Rozpoznanie

Więc chcemy dobrać się do notatnika, okeej...nasz cel wygląda tak:

celj.jpg

Rys. 3 - Cel. Straszny, nie?

 

I co my właściwie chcemy zrobić? Powiedzmy, że chcemy znaleźć jakąś unikatową drogę, żeby pisać w notatniku...ale nie, nie satysfakcjonuje nas symulowanie jakichś durnych naciśnięć klawiszy, chcemy znaleźć coś ciekawszego żeby wpisać tam, powiedzmy, "PWND LOL NOOB, HEHE". Okej, cel mamy, teraz pora zacząć prawdziwą zabawę!

 

Let's rock, czy jakoś tak

Żeby mieć się do czegoś odnieść skorzystam po drodze z pewnej aplikacji która jest dorzucona do AutoIt i zobaczę, co ona mówi na temat tegóż editboxa:

rozpoznanie.jpg

Rys 22 - profesjonalne rozpoznanie sponsorowane by AutoIt

Więc okno to, do którego możemy beztrosko przelewać swoje myśli, robić ascii-arty albo odrabiać pracę domową jest..Editem!

 

Szybki look w google na hasło "kurs winapi", i wpadamy na taką stronę...Ciekawe, CreateWindow? Zajrzyjmy do msdn(jeżeli jeszcze nie znacie tej strony, to znaczy że nigdy nie programowaliście na poważnie w Windowsie albo macie linuxa) - no proszę, na stronie poświęconej CreateWindow jest uwaga brzmiąca tak:

To use extended window styles in addition to the styles supported by CreateWindow, use the CreateWindowEx function.

Iii...bingo. Teraz pora odpalić Olly'ego i poszukać wywołania tej funkcji w programie.

 

Z tego miejsca teoretycznie mam dwie drogi - Olly, jak każdy debugger posiada dwie bardzo ciekawe "instrukcje", dzięki którym mogę poruszać się po programie - jest to Step Over i Step In. O co chodzi, czym to się różni? Spieszę z wyjaśnieniami: Każdy program ma wywołania jakichś funkcji, procedur, itd. I Step Over pozwala nam "przejść nad" wywołaniem takiej procedury, a "Step In" zagłębić się, cóż się w takiej procedurze dzieje...I mógłbym sobie od początku robić "Step Over", aż nie pojawiłoby się okno, wtedy zapamiętywałbym funkcję która okno stworzyła i wchodził do niej, a tam znów bawił się w StepOver...i tak w kółko, aż trafię na moją lubą, CreateWindowEx. : d

Aczkolwiek muszę was zasmucić, jestem zbyt leniwy żeby bawić się w coś takiego i zrzucę trochę roboty na debugger - znajdę wywołania mojej funkcji i ustawię na niej tzw.breakpointy(to są miejsca, w których debugger z normalnego działania programu "staje" i oddaje pełnię władzy nam),

 

Otwieramy Olly'ego, drugim klawiszem myszki klikamy w okienku "CPU"->Search For->Intermodular calls. W okienku które następnie nam wyskoczy wpisujemy nazwę naszej funkcji(Intermodular - tj.z innego modułu, a funkcje z WinApi są jakby "importowane" z systemu)..ii...wiola! ewentualnie, krystyna:

hyhyhye.jpg

Rys. 5 - Hyhyhyh :>

 

Klikamy na tym drugim klawiszem myszki ii.."Set breakpoint on every call to CreateWindowEx". Teraz Naciskamy "Play" i szukamy szczęścia w polu...właściwie, w programie. Żeby wywołanie było z jakimś editem, miejmy nadzieję...

 

*chwila trwogi*(klikamy play póki nie natrafimy na właściwe wywołanie)

 

JEEEST!

 

wygrac.jpg

Rys. 6 - nanan **

I co my tu mamy? Uchwyt(to jest jakby numer identyfikacyjny tego editboxa, bo jak wiadomo, nic w przyrodzie(czy też windowsie) nie ginie, nawet taki editbox musi gdzieś się chować : D) jest zwracany pod jakiś STAŁY! adres(czyli możemy się do niego odwołać za każdym razem!)...może wykorzystajmy go w C(++)? ;>

 

Tylko wstępna uwaga - widzimy że w SetWindowText jest taki fragment:

To set the text of a control in another process, send the WM_SETTEXT message directly instead of calling SetWindowText.
.

Więc odpada wywoływanie SetWindowText, trzeba wysłać im WM_SETTEXT przez SendMessage...Ale cóż to dla nas, nie?

 

Spisujemy sobie adres gdzie uchwyt siedzi w pamięci notatnika...i napiszmy coś!

 

kodt.jpg

Rys. któryś z rzędu - kod. Dlaczego nie daję w postaci tekstowej? Bo po pierwsze nie chce mi się kopiować z maszyny wirtualnej, a po drugie przepisanie samemu też ma walory edukacyjne xD

 

Moje małe niedopatrzenie - zamiast liniki z GetWindowText powinno być

SendMessage(editBox, WM_GETTEXT, 256, (LPARAM)out);

 

I zobaczmy, jak działa...

przedkh.jpg

Rys. A - przed uruchomieniem...

 

81384078.jpg

Rys. B - po uruchomieniu ^^

 

Jak widzimy, wszystko pięknie działa. : d

 

I to by było właściwie na tyle, być może kiedyś będzie jakaś następna część, poruszająca inne techniki/rzeczy.Ale to w przyszłości.

Komentarze oczywiście mile widzane.

 

Dziękuję za uwagę i pozdrawiam,

Piotr Fronczewski

5 komentarzy


Rekomendowane komentarze

Gość szymon1215

Opublikowano

Ciekawe, jednak z plikiem zabezpieczonym tak nie zrobisz...

Teesik

Opublikowano

Ciekawe, jednak z plikiem zabezpieczonym tak nie zrobisz...

 

zależy co rozumiesz przez pojęcie "zabezpieczony" - nie zrobię tak pod windowsem x64, bo tam wszystkie natywne aplikacje są w osławionych 64 bitach które potrzebują odpowiednich debuggerów. : d

No, chyba że chodzi Ci o procesy spakowane różnymi rodzaju packerami - ale w sieci aż roi się od poradników jak różne ciekawe rzeczy można rozpakować.. ^^

Ema

Opublikowano

wrzucil bys notatnik 32bit? bo na 64 nie idzie ;/

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...