2010-07-20:

HiperDrop 0.0.1

hiperdrop:reverse engineering:easy:windows:c++
Przeglądając ostatnio katalogi na dysku znalazłem trochę narzędzi które z jakiegoś powodu ukrywałem i do tej pory nie opublikowałem. Zastanawiam się nad dokończeniem ich podstawowej funkcjonalności i wrzuceniu w końcu na sieć. W każdym bądź razie, jednym z takich narzędzi (które prawie bez zmian nadawało się do publikacji) jest HiperDrop - prosty, konsolowy, tool do zrzucania pamięci procesu, pod Windows.

Jeśli chodzi o zasadę działania HiperDrop, to jest trywialna. Podłącza się on do procesu, ściąga całą jego pamięć (w przeciwieństwie do LordPE / OllyDump, to narzędzie ściąga całą pamieć procesu, a nie tylko dany image PE), po czym zapisuje ją na dysk.

Podłączanie się do procesu jest zaimplementowane na dwa sposoby:
1. OpenProcess
2. albo korzystając z API debugera

Szukanie zaalokowanej pamięci do zrzucenia również jest zrobione na dwa sposoby:
1. VirtualQueryEx
2. albo brute-force'ową metodą która polega na wywołaniu ReadProcessMemory na każdej stronie procesu, bez uprzedniego sprawdzania czy strona jest w ogóle zaalokowana

Jeśli chodzi o output, to tutaj są "aż" trzy sposoby do wyboru:
1. każdy ciągły blok pamięci zapisywany jest w oddzielnym pliku
2. lub jest tylko jeden plik, w którym wszystkie istniejące strony pamięci są zapisywane po sobie
3. lub jak wyżej, z tą różnicą że w miejsce "nieistniejących" stron wrzuca się ciąg zer binarnych

Anyway, HiperDrop jest open source (szczegóły w pliku License.txt), napisany w C++, i może się przydać przy zabawie z malware lub ogólnie podczas reverse'owania różnych rzeczy (mi się przydawał ;>)

Download:
HiperDrop-0.0.1.zip (63 KB)

Paczka zawiera:
HiperDrop.cpp - źródło (jakieś 900 linii kodu)
HiperDrop.exe - exek pod Windowsa, utworzony przez MinGW GCC
License.txt - zgadliście! to plik z licencją ;)
Readme.txt - trochę więcej detali na temat HiperDrop

Na liście TODO znajduje się obecnie kilka priorytetowych rzeczy:
* wygenerowany plik .map (tj. ze spisem zrzuconych bloków pamięci) powinien zawierać dodatkowe informacje, takie jak prawa dostępu do pamięci, entropia, co to za blok (PEB/stos/etc), etc
* dodać ściąganie pamięci bez używania ReadProcessMemory, korzystając z wstrzykniętego kodu który prześle dane po pipe'ach

Dodatkowo, rozważam dodanie ściągania zawartości pamięci z trybu jądra, ale w sumie już takie narzędzie istnieje - TraceHook by j00ru. Można o tym poczytać tutaj (0.0.1) i tutaj (0.0.2).

Sporo rzeczy TODO można też znaleźć grepując źródło na frazę "TODO" :)

I w sumie tyle. Więcej info na temat używania i budowy można znaleźć w Readme.txt i/lub pisząc HiperDrop -h.
Komentarze, jak zwykle, mile widziane!

Comments:

2010-07-20 13:08:18 = hxv
{
Super, wczoraj (i parę razy wcześniej) dokładnie czegoś takiego potrzebowałem, dokładam do mojej biblioteczki ;)
}
2010-07-20 19:59:27 = Gynvael Coldwind
{
@hxv
Cool ;) Cieszę się że się przyda ;)))
}
2010-07-22 14:17:38 = bobo
{
spasiba :>
}

Add a comment:

Nick:
URL (optional):
Math captcha: 5 ∗ 5 + 5 =