Shellcode: EAT i funkcja GetProcAddress

Gdy już w swoich rękach mam adres bazowy modułu kernel32.dll (zlokalizowany na przykład sposobem opisanym w poprzednim moim wpisie) kolejnym krokiem jest poznanie adresu dowolnej funkcji znajdującej się w tym module. W wielu sytuacjach wystarczy dorwać się tylko do GetProcAddress i LoadLibrary, co ułatwi wykorzystanie dowolnej innej funkcji z Windows API lub innej biblioteki. W … Czytaj dalej Shellcode: EAT i funkcja GetProcAddress

Opublikowano Kategorie /dev/null

x86/x64 Platform Independent Code

Znalazłem ciekawe tricki związane ze zmianami w opcodach instrukcji między x86 a x64. Odpowiednie wykorzystanie ich pozwala na łatwe wykrycie typu architektury i tworzenie wspólnej implementacji funkcji lub kodu dla obu tych platform. Co szczególnie może być użyteczne przy różnego rodzaju shellcodach i innych takich zabawkach. Nad takimi konstrukcjami w syringe zacząłem się zastanawiać, po … Czytaj dalej x86/x64 Platform Independent Code

Opublikowano Kategorie /dev/null

Blood2: Analiza cracka

Kolejna część dotycząca mojej starej ulubionej (ostatnio) gry, którą potraktowałem jako narzędzie analizy i zabawy w reverse enginering. Jak wspomniałem w poprzedniej (pierwszej) części, miałem problem ze znalezieniem odpowiedniego programu neutralizującego wymóg posiadania płyty CD. A wszystko na co trafiłem było jednosegmentowymi aplikacjami DOS-a. A jak wiadomo Windowsy 64-bitowe nie posiadają już subsystemu do odpalania … Czytaj dalej Blood2: Analiza cracka

Blood2: Crack me!

Jak zapewne niektórzy zauważyli na moim twitterze, (który staje się mini blogiem), ostatnio – tweet – uruchamiałem taką starą, wspaniałą grę z przełomu milenium, jaką jest Blood2: The Chosen. W młodości trochę w nią grywałem, jakiś sentyment pozostał. A że chciałem się trochę zrelaksować w weekend, a przy okazji spróbować skonteneryzować i uruchomić tą gierkę … Czytaj dalej Blood2: Crack me!

Odwracanie kolejności w SSE/AVX

W ostatniej notce, o możliwościach zmiany kolejności uporządkowania bajtów i bibliotece ByteOrder, wspomniałem, że w wolnej chwili postaram pobawić się SSE i spróbować, w prosty i w miarę wydajny sposób, zaimplementować operację bswap znaną z 32/64-bitowych rejestrów na rejestrach 128-bitowych, a nawet 256-bitowych. Poniekąd udało mi się to zrobić ;) SSE2 Druga wersja strumieniowych rozszerzeń … Czytaj dalej Odwracanie kolejności w SSE/AVX

ByteOrder – kolejność bajtów

Architektury współczesnych mikroprocesorów powszechnie używają dwóch różnych metod i konwencji przechowywania danych w pamięci, zwane „kolejnością bajtów” (byte order). Niektóre komputery umieszczają najbardziej znaczący bajt w słowie jako pierwszy (big-endian), a inne jako ostatni (little-endian). Przez większość czasu, kolejność bajtów może być ignorowana, programista nie musi się martwić o to, jaki format jest używany, ale … Czytaj dalej ByteOrder – kolejność bajtów

Haszowanie stringa

Haszowanie stringów z wykorzystaniem prostego algorytmu Roberta Sedgwicks z książki „Algorithms in C”. Według testów różnych prostych algorytmów opublikowanych na stronie Hash Function Efficiency, można zauważyć ze właśnie RS jest prostym i małokolizyjnym algorytmem. Dlatego właśnie go wybrałem do użycia w swoim projekcie, do haszowania nazw funkcji serwisowych eventów, hooków. Implementacja w C++: unsigned int … Czytaj dalej Haszowanie stringa