Czy można „zdekompilować” plik .exe systemu Windows? A przynajmniej zobaczyć Zgromadzenie?

237

Mój przyjaciel pobierał złośliwe oprogramowanie z Facebooka i jestem ciekawy, co robi bez zarażania się. Wiem, że tak naprawdę nie można zdekompilować pliku .exe, ale czy mogę przynajmniej wyświetlić go w asemblerze lub dołączyć debugger?

Edytuj, aby powiedzieć, że nie jest to plik wykonywalny .NET, brak nagłówka CLI.

Swilliams
źródło
3
złośliwe oprogramowanie z Facebooka? czy mógłbyś to wyjaśnić
Aditya Mukherji
Przepraszam za super późną odpowiedź ... ale myślę, że tak się stało: uruchomiła złośliwe oprogramowanie, które w pewnym momencie spamowało wszystkie swoje kontakty na FB (mnie) z linkiem do „filmu”, który prosił cię pobierz „nowy kodek”. Zakładam, że w tym sensie zachowywał się jak robak.
swilliams,

Odpowiedzi:

446

Za pomocą debugera możesz interaktywnie przechodzić przez zestaw programu.
Za pomocą dezasemblera możesz wyświetlić zestaw programu bardziej szczegółowo.
Za pomocą dekompilatora możesz zmienić program z powrotem w częściowy kod źródłowy, zakładając, że wiesz, w czym został napisany (co możesz dowiedzieć się za pomocą bezpłatnych narzędzi, takich jak PEiD - jeśli program jest spakowany, musisz go najpierw rozpakować LUB Wykryj to łatwe, jeśli nigdzie nie możesz znaleźć PEiD. DIE ma obecnie silną społeczność programistów na github ).

Debugery:

  • OllyDbg , darmowy, świetny 32-bitowy debugger, w którym można znaleźć wiele wtyczek i skryptów stworzonych przez użytkownika, aby uczynić go jeszcze bardziej przydatnym.
  • WinDbg , darmowy, całkiem sprawny debugger firmy Microsoft. WinDbg jest szczególnie przydatny do przeglądania wewnętrznych elementów systemu Windows, ponieważ wie więcej o strukturach danych niż inne debuggery.
  • SoftICE , SICE do znajomych. Komercyjne i rozwojowe zostały zatrzymane w 2006 roku. SoftICE jest rodzajem hardcorowego narzędzia, które działa pod systemem operacyjnym (i zatrzymuje cały system po wywołaniu). SoftICE jest nadal używany przez wielu profesjonalistów, chociaż może być trudny do uzyskania i może nie działać na niektórych urządzeniach (lub oprogramowaniu - a mianowicie, nie będzie działał na kartach Vista lub NVIDIA gfx).

Dezasemblery:

  • IDA Pro (komercyjny) - topowy deasembler / debugger. Używany przez większość profesjonalistów, takich jak analitycy szkodliwego oprogramowania itp. Kosztuje jednak sporo dolców (istnieje darmowa wersja , ale jest dość ograniczona)
  • W32Dasm (bezpłatny) - trochę przestarzały, ale wykonuje zadanie. Wierzę, że W32Dasm porzuca dziś oprogramowanie i istnieje wiele hacków stworzonych przez użytkowników, aby dodać kilka bardzo przydatnych funkcji. Musisz się rozejrzeć, aby znaleźć najlepszą wersję.

Dekompilatory:

  • Visual Basic: komercyjny dekompilator VB generuje nieco identyfikowalny kod bajtowy.
  • Delphi: DeDe , darmowy, produkuje dobrej jakości kod źródłowy.
  • C: HexRays , reklama, wtyczka do IDA Pro tej samej firmy. Daje świetne wyniki, ale kosztuje dużą złotówkę i nie zostanie sprzedany nikomu (a przynajmniej tak słyszę).
  • .NET (C #): dotPeek , darmowy, dekompiluje zestawy .NET 1.0-4.5 do C #. Obsługa plików .dll, .exe, .zip, .vsix, .nupkg i .winmd.

Niektóre powiązane narzędzia, które mogą się przydać w tym, co robisz, to edytory zasobów, takie jak ResourceHacker (bezpłatny) i dobry edytor hex, taki jak Hex Workshop (komercyjny).

Ponadto, jeśli przeprowadzasz analizę złośliwego oprogramowania (lub korzystasz z SICE) , z całego serca sugeruję uruchomienie wszystkiego na maszynie wirtualnej, a mianowicie VMware Workstation . W przypadku SICE ochroni Twój rzeczywisty system przed BSOD, aw przypadku złośliwego oprogramowania ochroni Twój rzeczywisty system przed programem docelowym. Możesz przeczytać o analizie złośliwego oprogramowania za pomocą VMware tutaj .

Osobiście korzystam z Olly, WinDbg i W32Dasm oraz kilku mniejszych narzędzi.

Pamiętaj też, że dezasemblacja, a nawet debugowanie oprogramowania innych osób jest zazwyczaj co najmniej sprzeczne z umową licencyjną użytkownika końcowego :)

anon6439
źródło
16
Doceniam ostatni akapit w ogólnym zarysie, dobrą radę, ale jest zabawny w kontekście pytania: wątpię, czy wirus ma licencję EULA! ;-)
PhiLho,
4
W rzeczywistości niektóre złośliwe oprogramowanie, a nawet trojany ostatnio, mają w sobie umowy EULA (och, ci Rosjanie ...) Oczywiście mogą być (i są) ignorowane przez badania, ponieważ można założyć, że nikt nie zgłosi się, aby ich pozwać. .. Zazwyczaj są one zbyt źle napisane, aby w każdym razie coś znaczyć w sądzie.
anon6439,
2
Pamiętaj, że poprzednia wersja IDA Pro jest bezpłatna do użytku niekomercyjnego.
Simon Buchan
6
Zauważ, że większość złośliwych programów (przynajmniej skompilowane) może łatwo wykryć, czy działa w VMWare, Virtual PC, WINE, VirtualBox itp.
Mick
Jeśli używasz maszyny wirtualnej, uważaj na atak Niebieskiej Pigułki.
Siqi Lin,
44

doskonałe posty psoula odpowiadają na twoje pytanie, więc nie powielę jego dobrej pracy, ale uważam, że pomogłoby to wyjaśnić, dlaczego jest to jednocześnie całkowicie prawidłowe, ale także strasznie głupie pytanie. W końcu jest to miejsce do nauki, prawda?

Nowoczesne programy komputerowe są tworzone przez szereg konwersji, zaczynając od wprowadzenia czytelnego dla człowieka zbioru instrukcji tekstowych (zwanego „kodem źródłowym”), a kończąc na czytelnym dla komputera zestawie instrukcji (nazywanym alternatywnie „binarnym” lub „maszyną” kod").

Sposób, w jaki komputer uruchamia zestaw instrukcji kodu maszynowego, jest ostatecznie bardzo prosty. Każda czynność, którą może podjąć procesor (np. Odczyt z pamięci, dodanie dwóch wartości) jest reprezentowana przez kod numeryczny. Gdybym ci powiedział, że cyfra 1 oznacza krzyk, a cyfra 2 oznacza chichot, a następnie podniósł karty z 1 lub 2 na nich, oczekując, że będziesz krzyczeć lub chichotać odpowiednio, korzystałbym z tego samego systemu, którego używa komputer operować.

Plik binarny jest tylko zbiorem tych kodów (zwykle nazywanych „kodami operacji”) i informacji („argumentów”), na które działają kody operacji.

Teraz język asemblera to język komputerowy, w którym każde słowo polecenia w tym języku reprezentuje dokładnie jeden kod operacji na procesorze. Istnieje bezpośrednie tłumaczenie 1: 1 między poleceniem asemblera a kodem operacyjnym procesora. Dlatego zestaw kodowania dla procesora x386 różni się od zestawu kodowania dla procesora ARM.

Demontaż jest po prostu następujący: program odczytuje plik binarny (kod maszynowy), zastępując kody operacyjne ich odpowiednikami w języku asemblera, i wyświetla wynik w postaci pliku tekstowego. Ważne jest, aby to zrozumieć; jeśli twój komputer potrafi odczytać plik binarny, to możesz również odczytać plik binarny, albo ręcznie, korzystając z tabeli kodów operacyjnych w ręku (ick), albo poprzez deasembler.

Dezasemblery mają kilka nowych sztuczek, ale ważne jest, aby zrozumieć, że deasembler jest ostatecznie mechanizmem wyszukiwania i zastępowania. Dlatego każda umowa EULA, która tego zabrania, ostatecznie wieje gorącym powietrzem. Nie można jednocześnie zezwolić komputerowi na odczyt danych programu, a także zabronić komputerowi odczytu danych programu.

(Nie zrozum mnie źle, próbowano to zrobić. Działają one równie dobrze jak DRM w plikach utworów.)

Istnieją jednak zastrzeżenia dotyczące metody demontażu. Nazwy zmiennych nie istnieją; coś takiego nie istnieje w twoim CPU. Wywołania biblioteczne są mylące jak diabli i często wymagają demontażu kolejnych plików binarnych. A montaż jest trudny do odczytania w najlepszych warunkach.

Większość profesjonalnych programistów nie umie siedzieć i czytać asemblera bez bólu głowy. Dla amatora po prostu tak się nie stanie.

W każdym razie jest to nieco przesadne wyjaśnienie, ale mam nadzieję, że to pomoże. Każdy może skorygować wszelkie zniekształcenia z mojej strony; minęło trochę czasu. ;)

Jason L.
źródło
1
To rozwija się przy demontażu, ale chciałbym usłyszeć opracowanie na temat dekompilacji. Czy to może być tak samo bezowocne? Jakie są tego zastrzeżenia?
Prometeusz
@ ma: Dekompilacja kodu natywnego jest dość trudnym wyzwaniem, często wręcz niemożliwym. Optymalizatory są wyjątkowo agresywne, często tłumacząc kod źródłowy na nic. Nie można nic dekompilować.
Widoczny
11

Każdy przyzwoity debugger może to zrobić. Wypróbuj OllyDbg . (edycja: ma świetny deasembler, który nawet dekoduje parametry wywołań WinAPI!)

utku_karatas
źródło
10

x64dbg jest dobrym i aktywnym debuggerem typu open source.

BullyWiiPlaza
źródło
6

Jasne, spójrz na IDA Pro . Oferują wersję eval, więc możesz ją wypróbować.

Douglas Mayle
źródło
6

Jeśli próbujesz dowiedzieć się, co robi złośliwe oprogramowanie, może być o wiele łatwiej uruchomić je w ramach czegoś takiego jak bezpłatne narzędzie Process Monitor które będzie raportować za każdym razem, gdy spróbuje uzyskać dostęp do systemu plików, rejestru, portów itp.

Korzystanie z maszyny wirtualnej, takiej jak bezpłatny serwer VMWare, jest bardzo pomocne w tego rodzaju pracy. Możesz zrobić „czysty” obraz, a następnie powrócić do tego przy każdym uruchomieniu szkodliwego oprogramowania.

joeld
źródło
4

Możesz uzyskać pewne informacje, przeglądając je w asemblerze, ale myślę, że najłatwiej jest uruchomić maszynę wirtualną i zobaczyć, co robi. Upewnij się, że nie masz żadnych otwartych udziałów ani czegoś takiego, przez co może skakać;)

Rob Prouse
źródło
Tak, myślałem o tym, ale wolałbym nie
męczyć się
1
To prawda, że ​​jest to kłopot dla tej jednej sprawy, ale zawsze uważam, że przydatne jest trzymanie maszyny wirtualnej w pobliżu w celu testowania nowego oprogramowania lub podobnych rzeczy. Mogę wtedy zrobić, co mi się podoba, i po prostu zdecydować, aby nie zapisywać stanu na końcu i wrócić do czystej maszyny wirtualnej do następnego uruchomienia.
Rob Prouse
4

Warto również sprawdzić bumerang .

Andru Luvisi
źródło
Nie całkiem. powoduje awarie i wypala wszystko, co jest bardziej skomplikowane niż najbardziej trywialne pliki wykonywalne.
shoosh
4

To, czego chcesz, to rodzaj oprogramowania o nazwie „Disassembler”.

Szybkie google daje to: Link

Corey Trager
źródło
Nie wyjaśniłeś tego
scitronboy
3

Nie mogę uwierzyć, że nikt jeszcze nie powiedział nic o Debuggerze odporności .

Immunity Debugger to potężne narzędzie do pisania exploitów, analizowania złośliwego oprogramowania i inżynierii wstecznej plików binarnych. Początkowo był oparty na kodzie źródłowym Ollydbg 1.0, ale z naprawionym błędem wymazywania nazw. Ma dobrze obsługiwany interfejs API języka Python dla łatwej rozbudowy, dzięki czemu możesz pisać skrypty python, które pomogą ci w analizie.

Jest też dobry napisany przez Petera z zespołu Corelan mona.py , doskonałe narzędzie btw.

jyz
źródło
2

Jeśli chcesz uruchomić program, aby zobaczyć, co robi bez infekowania komputera, użyj go z maszyną wirtualną, taką jak VMWare lub Microsoft VPC, lub programem, który może piaskownicować program taki jak SandboxIE

Joel Lucsy
źródło
2

Możesz użyć dotPeek, bardzo dobrego do dekompilacji pliku exe. To jest darmowe.

https://www.jetbrains.com/decompiler/

Do Nhu Vy
źródło
1
Dlaczego dotpeek nie daje wsparcia exe?
SarveshwarPM
2

Powiedziałbym, że w 2019 r. Warto sprawdzić Ghidra ( https://ghidra-sre.org/ ). Jest open source (i darmowy) i ma fenomenalne możliwości analizy kodu, w tym możliwość dekompilacji aż do dość czytelnego kodu C.

Dylan McNamee
źródło
0

Zestaw eksploratora może robić, co chcesz.

FloatFish
źródło