Co to jest format pliku DEX?
Plik .dex to Dalvik Executable - skompilowany kontener bajtokodu zaprojektowany do działania w środowisku systemowym Android. Zawiera on skompilowany kod gotowy do wykonania na systemie Android i pierwotnie był interpretowany przez maszynę wirtualną Dalvik. Od wersji Android 5.0 (Lollipop), nowoczesne środowisko ART (Android Runtime) kompiluje bajtokod .dex metodą ahead-of-time (przed uruchomieniem) zamiast go interpretować, ale format ten pozostaje standardowym formatem wykonywalnym systemu Android.
Pliki DEX w pakietach APK
Pliki .dex są powszechnie spotykane wewnątrz pakietów APK, które służą do instalowania nowego oprogramowania na systemie Android. Historycznie każdy APK zawierał pojedynczy plik classes.dex przechowujący wszystkie klasy i metody używane przez aplikację. Większe aplikacje korzystają obecnie z mechanizmu multidex - dzieląc kod na classes.dex, classes2.dex, classes3.dex i tak dalej - aby przekroczyć limit 65 536 metod narzucony przez pojedynczy plik.
Generowanie i inspekcja plików DEX
Plik .dex może być generowany automatycznie w ramach procesu budowania aplikacji Android lub ręcznie. Nowoczesny łańcuch narzędzi wykorzystuje kompilator d8 (część Android SDK build-tools) do tłumaczenia bajtokodu Java lub Kotlin na format .dex. Każdy plik zaczyna się od sygnatury magicznej dex\n, po której następuje 3-cyfrowy numer wersji formatu (taki jak 035, 037, 038 lub 039) i bajt zerowy. Podczas instalacji ART dodatkowo kompiluje .dex do kodu natywnego, tworząc pliki .odex lub .vdex przechowywane na urządzeniu.
Bezpieczeństwo
RYZYKO: MEDIUMSam plik .dex nie uruchamia się w systemie Windows, więc posiadanie go wiąże się z niskim ryzykiem. Prawdziwy kontekst to analiza złośliwego oprogramowania na Androida: złośliwe aplikacje ukrywają swoją logikę w DEX (czasem ładowanym dynamicznie w czasie wykonywania), więc plik .dex wyodrębniony z niezaufanego APK może zawierać szkodliwy kod. Takie pliki należy sprawdzać wyłącznie w bezpiecznym środowisku (dekompilator/piaskownica), nigdy poprzez instalację macierzystego APK. Należy uważać na podejrzane strony oferujące pobranie „dex to exe / dex opener” - nie oferują one legalnych funkcji i często zawierają oprogramowanie reklamowe.
Szczegóły formatu
w pigułceProgramy otwierające pliki DEX
Szczegóły techniczne
specyfikacja| Architektura VM | Oparta na rejestrach (w przeciwieństwie do opartej na stosie JVM; każda instrukcja DEX jawnie nazywa operandy rejestrów, co zmniejsza całkowitą liczbę instrukcji) |
| Magiczne bajty | 8 bajtów na początku pliku (offset 0): ASCII „dex”, nowa linia (0x0A), 3-cyfrowa wersja formatu (np. 035, 037, 038, 039), bajt zerowy (0x00) |
| Wersje formatu | 035 (Android 2.2), 037 (Android 7.0), 038 (Android 8.0), 039 (Android 9+); cyfry wersji są osadzone w nagłówku magicznym |
| Limit indeksu metod | 65 536 metod na plik .dex (16-bitowy indeks odniesienia do metody); aplikacje przekraczające ten limit dzielą kod na classes2.dex, classes3.dex itd. |
| Pola integralności | Nagłówek zawiera sumę kontrolną Adler-32 oraz 20-bajtową sygnaturę SHA-1, które razem obejmują resztę pliku |
| Pula ciągów znaków | Wszystkie literały ciągów znaków są przechowywane raz we wspólnej, zdeduplikowanej puli; bajtokod odwołuje się do ciągów poprzez indeks całkowity |
| Kolejność bajtów | Domyślnie Little-endian; nagłówek zawiera stałą kolejności bajtów 0x12345678, co pozwala na wykrycie odwróconej kolejności |
| Języki źródłowe | Java i Kotlin (oraz dowolny język celujący w JVM); kompilator d8 konwertuje bajtokod .class lub archiwa .jar na DEX |
| Kompilator czasu budowania | d8 (Android SDK build-tools 28.0.1+) zastąpił starsze narzędzie dx; przyjmuje pliki .class JVM lub archiwa .jar jako wejście |
| Kompilacja ART ahead-of-time | W czasie instalacji narzędzie dex2oat środowiska ART konwertuje .dex na natywny kod maszynowy, przechowując wyniki jako pliki .odex / .oat w /data/dalvik-cache |
| Typ MIME | application/octet-stream (nie istnieje dedykowany zarejestrowany typ MIME dla formatu DEX) |
| Historia wykonywania | Interpretowany przez Dalvik VM z JIT (Android 1.0-4.4); kompilowany ahead-of-time + profile-guided JIT przez ART (Android 5.0+) |
| Deasemblacja i dekompilacja | baksmali deasembluje .dex do asemblera Smali; jadx i podobne narzędzia dekompilują .dex z powrotem do czytelnego kodu źródłowego Java |
| Lokalizacja wewnątrz APK | Przechowywany bez kompresji wewnątrz archiwum ZIP APK; główny wpis zawsze nazywa się classes.dex, a kolejne classes2.dex i następne dla aplikacji multidex |
| Wydano | 2008 (Android 1.0; Dalvik VM, executed by ART since Android 5.0) |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | source.android.com |
Konwersje DEX
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki DEX.