Rozpakowywanie
Omijanie obfuskacji
Rozpakowywanie to bezpłatna lekcja Ethical Hacking Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ethical Hacking Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ethical Hacking Academy zawiera 4 lekcji w sumie.
Czym jest pakowanie
Pakowanie kompresuje lub szyfruje właściwy kod programu i opakowuje go w mały stub. W czasie działania stub rozpakowuje oryginalny kod do pamięci i uruchamia go.
Autorzy złośliwego oprogramowania używają pakowania, aby omijać sygnatury i utrudniać analizę statyczną.
Dlaczego rozpakowywać
Spakowany plik binarny zawiera niewiele napisów i importów oraz ma wysoką entropię. Znaczący kod pozostaje ukryty do momentu uruchomienia stuba.
Rozpakowywanie odzyskuje oryginalny kod, aby można było przeanalizować go statycznie i wyodrębnić rzeczywiste IOC.
Wykrywanie packera
Narzędzia takie jak Detect It Easy (DIE) i PEiD rozpoznają znane packery na podstawie sygnatur. Wysoka entropia i bardzo mała tablica importów również są wyraźnymi wskazówkami.
Do popularnych packerów należą UPX, ASPack i Themida.
die sample.exe
# Packer: UPX(3.96)Rozpakowywanie UPX
UPX to popularny, nieszkodliwy packer, który można odwrócić za pomocą własnego narzędzia. Flaga -d dekompresuje plik binarny do pierwotnej postaci.
Wiele próbek spotykanych w praktyce korzysta z UPX lub nieznacznie zmodyfikowanej wersji UPX, dlatego jest to częsta pierwsza próba.
upx -d sample.exeRęczne rozpakowywanie: idea
Niestandardowych packerów nie można cofnąć za pomocą jednego narzędzia. Zamiast tego należy pozwolić stubowi rozpakować się w pamięci, a następnie przechwycić wynik.
Plan jest następujący: uruchomić próbkę pod debuggerem, zatrzymać ją zaraz po zakończeniu rozpakowywania i zrzucić ujawniony kod.
Znajdowanie OEP
Oryginalny punkt wejścia (OEP) to miejsce, do którego przeskakuje wykonanie po zakończeniu rozpakowywania. Osiągnięcie OEP oznacza, że właściwy kod znajduje się już w pamięci.
Do jego znalezienia można obserwować daleki skok poza stub albo ustawić pułapkę w pamięci, do której stub zapisuje dane, a następnie je wykonuje.
Pułapki na potrzeby rozpakowywania
Popularną sztuczką jest ustawienie sprzętowej pułapki na stosie (stub często przywraca rejestry tuż przed skokiem do OEP) albo pułapki na typowych wywołaniach API używanych przez rozpakowany kod.
Gdy pułapka zadziała w OEP, oryginalny kod jest już w pełni zdekodowany.
Zrzucanie procesu
W OEP należy zrzucić pamięć procesu do nowego pliku. Narzędzia takie jak Scylla (wbudowana w x64dbg) lub PE-sieve przechwytują rozpakowany obraz.
Zrzut zawiera już rzeczywiste instrukcje, ale może jeszcze nie działać samodzielnie.
Odbudowywanie importów
Po wykonaniu zrzutu tablica adresów importu jest często uszkodzona, ponieważ packer rozwiązywał importy w czasie działania. Scylla może odbudować IAT, dzięki czemu zrzut nadaje się do analizy.
Po naprawieniu importów można wczytać oczyszczony zrzut do Ghidra lub IDA.
Inne techniki zaciemniania
Oprócz pakowania złośliwe oprogramowanie stosuje inne techniki zaciemniania: napisy szyfrowane i dekodowane w czasie działania, śmieciowe instrukcje, spłaszczanie przepływu sterowania oraz kontrole antydebuggingowe.
Pokonuje się je zależnie od przypadku, często łącząc śledzenie dynamiczne z cierpliwą analizą statyczną.
Weryfikacja rozpakowanej próbki
Po wykonaniu zrzutu i odbudowaniu importów należy potwierdzić powodzenie, ponownie uruchamiając analizę statyczną: powinno być teraz widocznych znacznie więcej napisów oraz wypełniona tablica importów.
Jeśli entropia wróciła do normy, a interfejsy API są widoczne, rozpakowywanie zakończyło się powodzeniem i właściwy kod jest gotowy do analizy.
Szybkie sprawdzenie
Proszę przypomnieć sobie, co oznacza OEP podczas ręcznego rozpakowywania.
Podsumowanie
Znają już Państwo proces rozpakowywania:
- Pakowanie ukrywa właściwy kod; można je wykryć za pomocą DIE/PEiD, na podstawie wysokiej entropii i niewielkiej liczby importów.
- Znane packery, takie jak UPX, rozpakowuje się narzędziem (
upx -d). - W przypadku niestandardowych packerów należy uruchomić próbkę pod debuggerem, znaleźć OEP, wykonać zrzut za pomocą Scylla i odbudować importy.
- Inne techniki zaciemniania (szyfrowane napisy, antydebugging) obsługuje się zależnie od przypadku.
Ukończyli Państwo kurs Reverse Engineering Malware.
Często zadawane pytania
Czy lekcja „Rozpakowywanie” jest bezpłatna?
Tak — pełny tekst „Rozpakowywanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ethical Hacking Academy, przejdź na CoddyKit PRO. Kurs Ethical Hacking Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Rozpakowywanie”?
Omijanie obfuskacji Ćwiczysz Ethical Hacking Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Ethical Hacking Academy?
Nie wymagamy żadnego doświadczenia. Ethical Hacking Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Rozpakowywanie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Ethical Hacking Academy?
Tak. Każda lekcja Ethical Hacking Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.