Kỹ thuật đảo ngược từ tệp APK sang dự án


244

Tôi đã vô tình xóa dự án của mình khỏi Eclipse và tất cả những gì tôi còn lại là tệp APK mà tôi đã chuyển sang điện thoại của mình. Có cách nào để đảo ngược quá trình xuất một ứng dụng sang tệp .apk, để tôi có thể lấy lại dự án của mình không?



2
Bạn có biết rằng nhật thực có một lịch sử phiên bản của riêng mình không?
eis


4
nếu bạn đang viết một cái gì đó quan trọng với bạn, bạn nên sử dụng một VCS. Bitbucket có kho riêng tư miễn phí.
lxknvlk

Câu trả lời:


287

Có hai công cụ hữu ích sẽ tạo mã Java (thô nhưng đủ tốt) từ tệp APK không xác định.

  1. Tải về công cụ dex2jar từ dex2jar .
  2. Sử dụng công cụ để chuyển đổi tệp APK sang JAR :

    $ d2j-dex2jar.bat demo.apk
    dex2jar demo.apk -> ./demo-dex2jar.jar
  3. Khi tệp JAR được tạo, sử dụng JD-GUI để mở tệp JAR. Bạn sẽ thấy các tệp Java.

Đầu ra sẽ tương tự như:

GUI GUI


6
làm cách nào để lấy các tệp tài nguyên
srini

26
cmd không được dùng nữa, sử dụng d2j-dex2jarthay thế (v0.0.9.15).
Fredrick Gauss

1
@sri chỉ cần đổi tên tệp apk thành zip và giải nén nó, bạn sẽ có các tệp tài nguyên trong resthư mục
Hoàng Huỳnh

8
@HoangHuynh bạn sẽ có một resthư mục chứa các tệp xml không thể đọc được
S.Thiongane

6
Trong trường Machợp bạn không thể sử dụng dex2jar: permission deniedthì hãy làm điều này $sudo chmod +x d2j-dex2jar.sh
Min2

81

Trước hết tôi khuyên bạn nên thisvideo này có thể xóa tan mọi nghi ngờ của bạn

Nếu không xin vui lòng đi qua nó

Procedure for decoding .apk files, step-by-step method:

Step 1:

Tạo một thư mục mới và đặt tệp .apk vào đó (mà bạn muốn giải mã). Bây giờ đổi tên phần mở rộng của .apktệp này thành .zip(ví dụ: đổi tên từ filename.apk thành filename.zip) và lưu nó.

Nếu sự cố trong quá trình chuyển đổi thành .zip vui lòng tham khảo link

Sau khi nhận được .zip bây giờ bạn nhận được các tệp class.dex, v.v ... Ở giai đoạn này, bạn có thể thấy các tệp có thể rút được nhưng không phải là xml và java, vì vậy hãy tiếp tục. Nếu bạn không thấy các tiện ích mở rộng, hãy kiểm tra cấu hình

Step 2:

Bây giờ giải nén tập tin apk zip này trong cùng một thư mục. Bây giờ tải xuống dex2jar từ nàylink

và giải nén nó vào cùng một thư mục. Bây giờ hãy mở dấu nhắc lệnh và thay đổi thư mục vào thư mục đó.

Sau đó viết dex2jar classes.dexvà nhấn enter. Bây giờ bạn nhận được classes.dex.dex2jartập tin trong cùng một thư mục.

Sau đó tải xuống trình dịch ngược java

Và bây giờ, nhấp đúp chuột vào jd-gui và nhấp vào mở tệp. Sau đó mở classes.dex.dex2jartập tin từ thư mục đó. Bây giờ bạn có được các tệp lớp và lưu tất cả các tệp lớp này (nhấp vào tệp sau đó nhấp vào "lưu tất cả các nguồn" trong jd-gui) bằng tên src. Giải nén tập tin zip đó(classes_dex2jar.src.zip) và bạn sẽ nhận được tất cả các tệp java của ứng dụng.

Ở giai đoạn này bạn có được nguồn java nhưng các tệp xml vẫn không thể đọc được, vì vậy hãy tiếp tục.

Step 3:

Bây giờ hãy mở một thư mục mới và đặt các tệp này

  1. đặt tập tin .apk mà bạn muốn giải mã

  2. tải Apktool cho windows v1.xApktool

cài đặt cửa sổ bằng google và đặt vào cùng một thư mục

  1. tải xuống tệp framework-res.apk bằng google và đặt vào cùng một thư mục (Không phải tất cả các tệp apk đều cần tệp framework-res.apk)

  2. Mở một cửa sổ lệnh

  3. Điều hướng đến thư mục gốc của APKtool và gõ lệnh sau: apktool if framework-res.apk.

Lệnh trên sẽ dẫn đến Framework installed ....

  1. apktool d "appName" .apk ("appName" biểu thị ứng dụng mà bạn muốn giải mã) bây giờ bạn có một thư mục tệp trong thư mục đó và bây giờ bạn cũng có thể dễ dàng đọc các tệp xml.

Step 4: Cuối cùng, chúng tôi đã nhận được res/mã java cũng như dự án là mục tiêu của chúng tôi khi bắt đầu.

P.S. Nếu bạn không thể lấy thư mục res theo các bước trên, vui lòng cài đặt mới apktool

  • Java 1.7 đã được cài đặt chưa? Cài đặt Apktool 2.x
  • Được cài đặt Java 1.6 trở lên? Cài đặt Apktool 1.x

Enjoy and happy coding


thực sự hữu ích Chỉ cần một cái gì đó bạn chưa đề cập: apktool.jarkhông phải trong cùng một gói, tôi đã nhận nó từ gói cũ và dán nó trong cùng một thư mục như apktool.
S.Thiongane

1
Tôi đã đảo ngược kỹ sư mã nhưng tại sao tên của lớp, biến giống như aa, bc, v.v. và cũng có nhiều lỗi
user2934930

1
không thể làm điều đó trong cmd
Meghal Agrawal

có cách nào khác để làm điều đó không?
Meghal Agrawal

2
@ user2934930 Điều này có nghĩa là mã đã bị xáo trộn khi sử dụng ProGuard.
cascal

58

Không có phần mềm & Không có quá nhiều bước ..

Chỉ cần tải lên APK của bạn và nhận tất cả tài nguyên của bạn từ trang web này ..

https://www.apkdecompilers.com/

Trang web này sẽ dịch ngược mã được nhúng trong tệp APK và trích xuất tất cả các tài sản khác trong tệp.

lưu ý: Tôi dịch ngược tệp APK của mình và nhận mã trong một phút từ trang web này

Cập nhật 1 :

Tôi tìm thấy một trang web dịch ngược trực tuyến khác,

http://www.javadecompilers.com/apk/ - Không hoạt động liên tục yêu cầu chặn cửa sổ bật lên

Cập nhật 2:

Tôi tìm thấy ứng dụng dịch ngược apk trong cửa hàng chơi,

https://play.google.com/store/apps/details?id=com.njlabs.showjava

Chúng tôi có thể dịch ngược các tập tin apk trong điện thoại Android của chúng tôi. và chúng tôi cũng có thể xem các tệp java & xml trong ứng dụng này

Cập nhật 3:

Chúng tôi có thể sử dụng tùy chọn khác Phân tích tính năng APK từ phiên bản Android studio 2.2

Xây dựng -> Phân tích APK -> Chọn APK của bạn -> nó cho kết quả

nhập mô tả hình ảnh ở đây


3
trong phương thức cuối cùng, chúng ta không thể mở lớp java, chỉ hiển thị tên phương thức
Choletski

@Choletski bạn có thử ShowJava không? nếu không hãy thử và cập nhật cho tôi
Ranjith Kumar

@RanjithKumar giới hạn ở kích thước APK 50 MB .. tôi có APK 85 MB để dịch ngược.
Ravi Sharma


1
Làm thế nào để chạy dự án dịch ngược trong studio android? bất cứ ai có thể xin vui lòng viết về điều này.
mayur kukadiya


4

Không hẳn vậy. Có một số bộ giải mã / bộ dịch ngược dex ngoài đó như smali hoặc dex2jar sẽ tạo ra đầu ra có thể đọc được (trong trường hợp của dex2jar, bạn có thể lấy mã java thông qua việc sử dụng một cái gì đó như JD-GUI nhưng quá trình này là không hoàn hảo và rất có thể bạn sẽ không thể tạo lại 100% mã nguồn của mình. Tuy nhiên, nó có khả năng cung cấp cho bạn một nơi để bắt đầu xây dựng lại cây nguồn của bạn.


@MAC: Anh ấy cần nguồn chứ không phải tệp APK !!
Shashank Kadne

2
@ShashankKadne có thể tôi sẽ không nhận lại lời nói của mình
MAC

3

Vâng, bạn có thể lấy lại dự án của bạn. Chỉ cần đổi tên yourproject.apktệp thành yourproject.zipvà bạn sẽ nhận được tất cả các tệp trong tệp ZIP đó. Chúng tôi đang thay đổi phần mở rộng tập tin từ .apk sang .zip. Từ tệp ZIP đó, giải nén classes.dextệp và dịch ngược tệp theo cách sau.

Trước tiên, bạn cần một công cụ để trích xuất tất cả các lớp (đã biên dịch) trên DEX sang JAR. Có một cái gọi là dex2jar , được tạo bởi một sinh viên Trung Quốc.

Sau đó, bạn có thể sử dụng JD-GUI để dịch ngược các lớp trong JAR thành mã nguồn. Mã nguồn kết quả phải khá dễ đọc, vì dex2jar áp dụng một số tối ưu hóa.


3

Đối với nền tảng Android, bạn có thể dùng thử ShowJava , có sẵn trên Play Store.

Bạn có thể tham khảo mã được tạo thông qua giao diện ứng dụng và cấu trúc tệp và thư mục java được tạo được lưu trữ trong ShowJavathư mục /sdcardbên cạnh .jartệp kết quả từ chuyển đổi.

Ứng dụng miễn phí với biểu ngữ quảng cáo ở cuối chế độ xem chính, nhưng có tùy chọn mua trong ứng dụng (3,99 $) để xóa ứng dụng. Mua trong ứng dụng không thêm bất kỳ chức năng nào bên cạnh việc xóa biểu ngữ quảng cáo.

Tiết lộ: Tôi không phải là nhà phát triển ứng dụng, tôi cũng không liên kết với anh ấy.


Tôi thường sử dụng nó cho ... Ứng dụng tuyệt vời
Rahul Kushwaha

2

Thực hiện theo các bước dưới đây để làm điều này hoặc chỉ đơn giản là sử dụng đá quý apkToJava cho quy trình này, thậm chí còn chăm sóc cài đặt các công cụ cần thiết để nó hoạt động.

  • chuyển đổi tập tin apk sang zip
  • giải nén tập tin
  • trích xuất class.dex từ nó
  • sử dụng dex sang jar để chuyển đổi class.dex thành tệp jar
  • sử dụng jadx gui để mở tệp jar dưới dạng mã nguồn java

2

Nếu bạn đang tìm kiếm một sự thay thế chuyên nghiệp, hãy xem JEB Decompiler từ PNF Software.

Có một phiên bản demo sẽ cho phép bạn dịch ngược hầu hết mã.


2

Dưới đây là một số công cụ mà bạn có thể sử dụng để thực hiện kỹ thuật đảo ngược từ tệp APK sang mã nguồn:

  1. Dex2jar
  2. Trình dịch ngược Java
  3. Apktool
  4. Phân tích Apk

2

Trong Android Studio 3.5, thật dễ dàng khi bạn có thể đạt được nó trong một phút. Sau đây là một quá trình khôn ngoan.

1: Mở Android Studio, nhấn nút cửa sổ -> Gõ Android Studio -> nhấp vào biểu tượng để mở màn hình giật gân của studio android sẽ giống như thế này.

nhập mô tả hình ảnh ở đây

2: Tại đây bạn có thể thấy tùy chọn "Hồ sơ hoặc gỡ lỗi APK" nhấp vào nó và chọn tệp apk của bạn và nhấn ok.

nhập mô tả hình ảnh ở đây

3: Nó sẽ mở tất cả các lớp kê khai và java của bạn trong một phút tùy thuộc vào kích thước của apk.

nhập mô tả hình ảnh ở đây

Đó là nó.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.