jadx: Trình Decompiler Dex sang Java cho Android
jadx là công cụ command-line và GUI để chuyển file APK và DEX của Android trở lại thành mã Java đọc được. Dùng nó khi bạn cần đọc nhanh logic của một app — kiểm tra một permission, lần theo một callback, xem một thư viện thật sự làm gì — chứ không phải khi bạn cần dựng lại chính xác 100% project gốc có thể compile được, vì chính jadx cũng thừa nhận không thể khôi phục toàn bộ code.
jadx là gì?
jadx là một Dex to Java decompiler có cả bản command-line lẫn GUI, dùng để chuyển bytecode Android đã compile trở lại thành source code đọc được. Trỏ nó vào file APK, DEX, AAR, AAB, JAR, class, smali hoặc zip, jadx sẽ dựng lại các class Java, giải nén AndroidManifest.xml và bảng resources.arsc, đồng thời chạy deobfuscator tích hợp sẵn trên các class và method bị đổi tên.
Tính năng chính của jadx
- ✓Có cả chế độ command-line và GUI dùng chung một lõi decompiler, nên batch job và duyệt tương tác cho ra cùng một kết quả.
- ✓Đọc trực tiếp file APK, DEX, AAR, AAB, JAR, class, smali và zip — không cần bước giải nén hay convert riêng.
- ✓GUI có thêm syntax highlighting, jump-to-declaration, find-usage và full-text search trên toàn bộ project đã decompile.
- ✓Deobfuscator tích hợp sẵn đổi tên class, field, method bị obfuscate, có thể chỉnh độ dài tên và whitelist.
- ✓Smali debugger trong jadx-gui cho phép đặt breakpoint và step qua thực thi ở mức bytecode, theo wiki của dự án.
- ✓Decompilation mode có thể chỉnh — auto, restructure, simple hoặc fallback — đánh đổi giữa độ dễ đọc và độ chính xác trên code khó.
- ✓Có hệ thống plugin với lệnh `plugins` để cài, liệt kê, cập nhật và tắt các extension từ jadx-plugins-list marketplace.
- ✓Có thể export thẳng APK đã decompile thành Gradle project (Android app, Android library, hoặc Java thường) bằng `--export-gradle`.
Cài đặt jadx
Trên Arch Linux: `sudo pacman -S jadx`. Trên macOS: `brew install jadx`. Qua Flathub: `flatpak install flathub com.github.skylot.jadx`. Nếu không, tải file zip của bản release mới nhất từ trang releases trên GitHub (hoặc bản nightly chưa ổn định), giải nén, rồi chạy script trong thư mục `bin` — `jadx` cho bản command-line, `jadx-gui` cho bản GUI. Trên Windows, double-click vào file `.bat`. Dù chọn cách nào cũng cần cài sẵn Java 11 trở lên, bản 64-bit. Muốn build từ source thì clone repo và chạy `./gradlew dist` với JDK 17 trở lên; script build sẽ nằm ở `build/jadx/bin` và file zip ở `build/jadx-<version>.zip`.
Decompile APK đầu tiên của bạn
Cú pháp cơ bản: `jadx -d out app.apk` — jadx ghi source Java đã decompile và resource đã giải mã vào thư mục `out`. Thêm `--no-res` để bỏ qua giải mã resource, hoặc `--single-class com.example.MainActivity` để chỉ lấy đúng một class theo tên. Thêm `--deobf` để bật deobfuscator tích hợp sẵn, hoặc `--show-bad-code` để giữ lại các method jadx không dựng lại gọn được thay vì bỏ qua. Chạy `jadx-gui app.apk` sẽ mở cùng decompiler đó trong GUI, có syntax highlighting, jump-to-declaration và full-text search trên toàn bộ output.
Điểm mạnh
- ✓Một công cụ duy nhất vừa có CLI để decompile hàng loạt, vừa có GUI để duyệt tương tác — không cần cài riêng cho từng việc.
- ✓Đọc được nhiều định dạng: APK, DEX, AAR, AAB, JAR, class, smali và zip, không cần bước convert thủ công.
- ✓Chạy trực tiếp từ một file zip đã giải nén — không cần cài đặt.
- ✓Deobfuscator và smali debugger có sẵn, không phải plugin rời phải tự tìm thêm.
- ✓Có hệ thống plugin mở rộng — dex-input, java-convert, kotlin-metadata, rename-mappings, smali-input — mà không cần fork lõi.
Giới hạn khi decompile
- △jadx không thể decompile 100% code trong hầu hết trường hợp — README cảnh báo lỗi sẽ xảy ra và dẫn tới trang wiki troubleshooting.
- △Bytecode bị obfuscate nặng hoặc control-flow bị làm rối có thể cho ra Java thiếu hoặc sai hẳn, chứ không chỉ khó đọc.
- △Hướng dẫn setup smali debugger nằm hoàn toàn ở một trang wiki riêng, không có trong README chính, nên lần đầu setup khá mất công.
- △Không có tính năng repackage hay recompile APK tích hợp sẵn — jadx chỉ đọc bytecode, không dựng lại APK đã ký từ phần bạn sửa.
So sánh jadx với các decompiler khác
Câu hỏi thường gặp
jadx hỗ trợ trực tiếp file APK, AAR và AAB, cùng với DEX, JAR, class, smali và zip — bạn không cần giải nén hay convert trước; jadx tự đọc định dạng và decompile bytecode Dalvik bên trong.
jadx có thể dùng như một thư viện ngay trong dự án Java của bạn, không chỉ là công cụ CLI hay GUI độc lập — wiki của dự án có hẳn một trang 'Use jadx as a library' hướng dẫn setup và API.
Chạy jadx với flag `--deobf` để bật deobfuscator tích hợp sẵn, giúp đổi tên các class, field và method bị làm rối. Bạn có thể chỉnh `--deobf-min`/`--deobf-max` để giới hạn độ dài tên, đặt whitelist các package cần bỏ qua, hoặc trỏ `--mappings-path` tới file mapping dạng Tiny, Tiny v2 hay Enigma nếu đã có sẵn.
jadx tự nói rõ là không thể decompile 100% code trong hầu hết trường hợp, và lỗi sẽ xảy ra — README nêu thẳng điều này và dẫn link tới trang wiki troubleshooting. Nguyên nhân thường gặp là bytecode bị obfuscate nặng, control-flow bị làm rối, hoặc không theo chuẩn; các chế độ `--show-bad-code` và fallback decompilation sinh ra chính là để lộ rõ những trường hợp đó thay vì giấu đi.
Chạy bản release có sẵn của jadx hoặc jadx-gui cần Java 11 trở lên, bản 64-bit, cài sẵn trên máy. Build jadx từ source khắt khe hơn: README yêu cầu JDK 17 trở lên để chạy `./gradlew dist`.
jadx-gui có sẵn smali debugger, cho phép đặt breakpoint và step qua từng bước thực thi ở mức bytecode, với hướng dẫn setup và cách dùng nằm trên một trang wiki riêng. Tính năng debug này thuộc về jadx-gui, không có ở bản jadx command-line thuần.
Vấn đề jadx giải quyết
Android build ra file APK chứa DEX bytecode đã compile, và không có cách chính thức nào để đọc lại thành thứ con người hiểu được — bạn hoặc phải tin lời developer nói về việc app làm gì, hoặc phải tự đọc từng instruction Dalvik thô. jadx sinh ra để lấp khoảng trống đó: trỏ vào APK là có ngay source Java, manifest đã giải mã và resource đã giải nén thay vì bytecode.
Trường hợp dùng tốt nhất
- •Kiểm tra một APK bên thứ ba xem có network call hay lạm dụng permission đáng ngờ không, trước khi cài nội bộ.
- •Khôi phục source đọc được cho một app Android nội bộ cũ mà project gốc đã thất lạc.
- •Debug một crash trên bản release bằng cách đọc stack trace đã decompile, đối chiếu với tên gốc bị obfuscate.
- •Step qua bytecode Dalvik bằng smali debugger của jadx-gui khi reverse engineer một protocol hoặc SDK.
Nên dùng — và nên bỏ qua khi nào
Dùng jadx nếu bạn thường xuyên cần đọc bên trong một app Android — nhà nghiên cứu bảo mật kiểm tra APK, developer khôi phục source của một project đã thất lạc, hoặc ai đó debug crash trên bản release bị obfuscate. Bỏ qua nếu bạn cần dựng lại chính xác 100%, compile lại được app gốc: chính README của jadx thừa nhận không thể khôi phục toàn bộ code, và APK bị obfuscate hay bảo vệ nặng sẽ để lại những khoảng trống bạn phải tự bù vào.
Repo liên quan
jadx có đáng để bạn bỏ thời gian?
ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về jadx.
