Có cách nào để lấy mã nguồn từ tệp APK không?


1262

Ổ cứng trên máy tính xách tay của tôi vừa bị hỏng và tôi đã mất tất cả mã nguồn cho một ứng dụng mà tôi đã làm việc trong hai tháng qua. Tất cả những gì tôi có là tệp APK được lưu trong email của tôi từ khi tôi gửi cho bạn bè.

Có cách nào để trích xuất mã nguồn của tôi từ tệp APK này không?


28
FYI Có kiểm tra dịch ngược trực tuyến tại đây
edwin

11
Điều này có nghĩa là chúng ta có thể nhận được mã nguồn của các ứng dụng trị giá hàng triệu đô la như Whatsapp hoặc Facebook? Đây có phải là tất cả nguồn mở?
Faizan

3
@Faizan bạn đã nghe nói về proguard ??
Vishwajit Palankar

1
Các cụm từ của câu hỏi có chứa các mẩu tin câu chuyện cuộc sống không liên quan và như vậy có thể được hiểu là đề xuất một công cụ . Tuy nhiên, câu trả lời có thể có khả năng javac -decompile, sau đó sẽ phù hợp với hướng dẫn SO. Nó xuất hiện với tôi rằng các câu trả lời là lạc đề , không phải là câu hỏi.
SwiftArchitect

2
trong bài viết này, họ giải thích cách họ đảo ngược kỹ sư Pokemon Go
anders

Câu trả lời:


1569

Cách đơn giản: sử dụng công cụ trực tuyến http://www.javadecompilers.com/apk , tải lên apk và lấy mã nguồn.


Quy trình giải mã tập tin .apk, phương pháp từng bước:

Bước 1:

  1. Tạo một thư mục mới và sao chép tập tin .apk mà bạn muốn giải mã.

  2. Bây giờ đổi tên phần mở rộng của tệp .apk này thành .zip (ví dụ: đổi tên từ filename.apk thành filename.zip) và lưu nó. Bây giờ bạn có thể truy cập các tệp class.dex, v.v ... Ở giai đoạn này, bạn có thể thấy các tệp drawable nhưng không phải các tệp xml và java, vì vậy hãy tiếp tục.

Bước 2:

  1. Bây giờ giải nén tệp .zip này trong cùng một thư mục (hoặc NEW FOLDER).

  2. Tải xuống dex2jar và giải nén nó vào cùng một thư mục (hoặc NEW FOLDER).

  3. Di chuyển tệp class.dex vào thư mục dex2jar.

  4. Bây giờ hãy mở dấu nhắc lệnh và thay đổi thư mục vào thư mục đó (hoặc NEW FOLDER). Sau đó viết d2j-dex2jar classes.dex(đối với thiết bị đầu cuối mac hoặc ghi ubfox ./d2j-dex2jar.sh classes.dex) và nhấn enter. Bây giờ bạn có tệp class.dex.dex2jar trong cùng một thư mục.

  5. Tải xuống trình dịch ngược java , nhấp đúp chuột vào jd-gui, nhấp vào tệp đang mở và mở tệp class.dex.dex2jar từ thư mục đó: bây giờ bạn có được các tệp lớp.

  6. Lưu tất cả các tệp lớp này (Trong jd-gui, nhấp vào Tệp -> Lưu tất cả các nguồn) bằng tên src. Ở giai đoạn này, bạn nhận đượ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.

Bước 3:

Bây giờ hãy mở một thư mục mới

  1. Đặt vào tệp .apk mà bạn muốn giải mã

  2. Tải về phiên bản mới nhất của apktool apktool cài đặt cửa sổ (cả hai có thể được tải về từ liên kết giống nhau) và đặt chúng trong cùng một thư mục

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

  4. Bây giờ hãy chạy lệnh như thế apktool if framework-res.apk(nếu bạn không có nó ở đây ) và tiếp theo

  5. apktool d myApp.apk (trong đó myApp.apk biểu thị tên tệp 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à có thể dễ dàng đọc các tệp xml của apk.

Bước 4:

Đó không phải là bất kỳ bước nào, chỉ cần sao chép nội dung của cả hai thư mục (trong trường hợp này là cả hai thư mục mới) sang một thư mục duy nhất

và tận hưởng mã nguồn ...


26
@prankulgarg, Ở điểm 5 của bước 3 tôi gặp phải lỗi sau: Không thể truy cập jarfile E: \ apktojava \ testt \\ apktool.jar

55
Thay vì viết dex2jar class.dex trong cmd, hãy thử d2j-dex2jar class.dex . Bởi vì dex2jar class.dex cmd này không được dùng nữa.
Umesh

23
Đối với những người không thể tìm thấy framework-res.apk. Tải xuống từ đây
atulkhatri

12
Những người không tìm thấy d2j-dex2jar.sh, tải xuống dex2jar từ đây: dex2jar.googlecode.com/files/dex2jar-0.0.9.15.zip
Reaz Murshed

14
Đối với những người bị mắc kẹt trong bước 2: 4, hãy tải xuống phiên bản này và nó sẽ giải quyết vấn đề: sourceforge.net/projects/dex2jar/files/dex2jar-2.0.zip/doad nó đã làm cho tôi. @delive
siriuseteor77

126

Đây là một mô tả thay thế - chỉ trong trường hợp ai đó bị mắc kẹt với mô tả ở trên. Thực hiện theo các bước:

  1. tải xuống apktool.bat(hoặc apktoolcho Linux) và apktool_<version>.jartừ http://ibotpeaches.github.io/Apktool/install/
  2. đổi tên tệp jar từ trên xuống apktool.jarvà đặt cả hai tệp vào cùng một thư mục

  3. mở một hộp dos ( cmd.exe) và thay đổi vào thư mục đó; xác minh rằng Môi trường Java đã được cài đặt (đối với Linux cũng kiểm tra các ghi chú liên quan đến các thư viện cần thiết)
  4. Khởi đầu: apktool decode [apk file]

    Kết quả trung gian : tệp tài nguyên,AndroidManifest.xml

  5. giải nén tệp APK với trình giải nén bạn chọn

    Kết quả trung gian :classes.dex

  6. tải xuống và trích xuất dex2jar-0.0.9.15.ziptừ http://code.google.com.vn/p/dex2jar/doads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=
  7. kéo và thả classes.dexvào dex2jar.bat(hoặc nhập <path_to>\dex2jar.bat classes.dexvào hộp DOS; để sử dụng Linux dex2jar.sh)

    Kết quả trung gian :classes_dex2jar.jar

  8. giải nén classes_dex2jar.jar(có thể là tùy chọn tùy thuộc vào trình dịch ngược được sử dụng)
  9. dịch ngược các tệp lớp của bạn (ví dụ với JD-GUI hoặc DJ Decompiler )

    Kết quả : mã nguồn

Lưu ý: không được phép dịch ngược các gói của bên thứ ba; hướng dẫn này chỉ nhằm phục hồi mã nguồn cá nhân từ tệp APK; cuối cùng, mã kết quả rất có thể sẽ bị xáo trộn


6
Tôi cũng có thể thêm, rằng có một giải pháp thay thế hiện đại cho APKTool-> dex2jar-> JD-GUI này! Chỉ cần thử trình giải mã APK và DEX mã nguồn mở có tên là Jadx: sourceforge.net/projects/jadx/files Nó cũng có phiên bản trực tuyến tại đây: javadecompilers.com/apk
Andrew Rukin

1
Được phép (đọc: hợp pháp) để dịch ngược bất kỳ tệp APK nào . Xem câu hỏi sau: stackoverflow.com/questions/9674557/
Kẻ

1
Tại sao những người apktooltrả lại smalitập tin? Làm thế nào để có được javatập tin?
rminaj

108

Mặc dù bạn có thể dịch ngược APKtệp của mình , nhưng bạn có thể sẽ gặp một vấn đề lớn:

nó sẽ không trả lại mã bạn đã viết. Thay vào đó, nó sẽ trả về bất cứ thứ gì trình biên dịch nội tuyến, với các biến được đặt tên ngẫu nhiên, cũng như các hàm được đặt tên ngẫu nhiên. Có thể mất nhiều thời gian hơn để cố gắng dịch ngược và khôi phục nó thành mã bạn đã có, hơn là bắt đầu lại từ đầu.

Đáng buồn thay, những thứ như thế này đã giết chết nhiều dự án.
Trong tương lai, tôi đặc biệt khuyên bạn nên học Hệ thống kiểm soát phiên bản, như CVS , SVNgit, v.v.

và làm thế nào để sao lưu nó.


19
Một dịch vụ như Dropbox cũng sẽ giúp.
Jeremy Logan

1
và luôn có cách để ghi đĩa CD
JerryGidel

52

Ngoài ra còn có một ứng dụng mới trên Cửa hàng Play có thể dịch ngược apk (ứng dụng hệ thống) và xem mã nguồn ngay trên điện thoại thông minh của bạn. Nó lưu các tệp vào thẻ SD của bạn để bạn cũng có thể xem nó trên máy tính của mình. Nó không yêu cầu root hoặc cái gì khác.

Chỉ cần cài đặt và vui chơi. Tôi nghĩ rằng đây là cách dễ nhất để dịch ngược ứng dụng.


1
Đây là dễ nhất.
Midhun Vijayakumar

@HayhunVijayakumar bạn có thể vào apk để chuyển đổi mã nguồn bằng cách này không?
Sajeev

28

apktool là điều tốt nhất bạn có thể thử. Tôi đã lưu một số xml với nó, nhưng thực lòng tôi không biết nó sẽ hoạt động như thế nào với mã .java.

Tôi khuyên bạn nên có một kho lưu trữ mã ngay cả khi bạn là người viết mã duy nhất. Tôi đã sử dụng Project Locker cho các dự án của riêng tôi. Nó cung cấp cho bạn repos svn và git miễn phí.


Bạn sẽ tìm thấy apktool không thể thiếu nếu bạn muốn trích xuất tài nguyên (tức là hình ảnh từ ứng dụng Android. Thực tế, công cụ này không có đối thủ nào cả!) Phiên bản trực tuyến của apktool có sẵn tại đây: www.javadecompilers.com/apktool
Andrew Rukin

23

Hai bài viết này mô tả cách kết hợp việc sử dụng apktooldex2jarlấy một APKtệp và tạo một dự án Eclipse có thể xây dựng và chạy nó.

http://blog.inyourbits.com/2012/11/extending-ex hiện-android-appluggest.html

http://blog.inyourbits.com/2012/12/extending-ex hiện-android-appluggest.html

Về cơ bản bạn:

  1. Sử dụng apktoolđể lấy các tệp tài nguyên ra khỏi apk
  2. Sử dụng dex2jarđể có được một tệp jar chứa các lớp theo định dạng mà Eclipse sẽ thích.
  3. Tạo một dự án Eclipse trỏ nó vào các tệp tài nguyên và tệp jar mới
  4. Mở tệp jar bằng tiện ích zip và xóa các tài nguyên hiện có
  5. Mở tệp jar JDGuiđể xem mã nguồn
  6. Lấy bất cứ mã nguồn nào bạn cần JDGui, gắn nó vào một lớp bên trong Eclipse và sửa đổi nó
  7. Xóa lớp đó khỏi tệp jar (vì vậy bạn không có cùng một lớp được xác định nhiều lần)
  8. Chạy nó

2
Tôi biết câu hỏi này vẫn được trả lời, tôi muốn chuyển một thông tin: có một trình dịch ngược trực tuyến cho apks android decompileandroid.com Tải lên apk từ máy cục bộ, Đợi một lát, tải mã nguồn ở định dạng zip.
Snehal Masne

2
Nghe hay đấy. Và sau đó trang web decompileandroid cũng có một bản sao của tất cả các nguồn của bạn! Tài giỏi!
DDSports

Một câu hỏi, tôi có một apk được dịch ngược nhưng trong jd gui tôi không biết liệu có các lớp java thực sự không, bạn có biết nếu một apk bị dịch ngược thì có các lớp Java thực không?

21

apktool sẽ hoạt động. Bạn thậm chí không cần biết kho khóa để trích xuất mã nguồn (điều này hơi đáng sợ). Nhược điểm chính là nguồn được trình bày ở định dạng Smali thay vì Java. Mặc dù vậy, các tệp khác như biểu tượng và tệp chính vẫn hoàn toàn ổn và có thể bạn nên dành thời gian để khôi phục những tệp đó. Cuối cùng, rất có thể bạn sẽ cần phải viết lại mã Java của bạn từ đầu.

Bạn có thể tìm thấy apktool ở đây . Đơn giản chỉ cần tải xuống apktool và trình trợ giúp thích hợp (cho Windows, Linux hoặc Mac OS). Tôi khuyên bạn nên sử dụng một công cụ như 7-zip để giải nén chúng.


16

Có một số cách để làm điều này:

  1. Sử dụng tính năng "Hồ sơ hoặc gỡ lỗi APK" trong Android Studio 3.0.

    Nó cho phép bạn mở và khám phá APK trong Android Studio. Các lớp học được dịch ngược thành smali. Tài nguyên không được trích xuất và những thứ như "Chuyển đến Định nghĩa", "Tìm tất cả tài liệu tham khảo" và gỡ lỗi không hoạt động nếu không có mã nguồn (android studio 3.0 canary 9). Một số tính năng smali bổ sung có thể hoạt động với smalidea .

    phòng thu android

    chọn tập tin

    mã

  2. Sử dụng jadx .

    Jadx dịch ngược mã trong APK đã cho thành các tệp nguồn java.

    jdax-img

  3. Sử dụng apktool .

    Apktool là một công cụ dòng lệnh trích xuất tài nguyên và dịch ngược mã thành smali cho một apk nhất định. Bạn cũng có thể biên dịch lại bằng apktool. Đây là một ví dụ về nó trong hành động:

    $ apktool d test.apk
    I: Using Apktool 2.2.4 on test.apk
    I: Loading resource table...
    I: Decoding AndroidManifest.xml with resources...
    I: Loading resource table from file: 1.apk
    I: Regular manifest package...
    I: Decoding file-resources...
    I: Decoding values */* XMLs...
    I: Baksmaling classes.dex...
    I: Copying assets and libs...
    I: Copying unknown files...
    I: Copying original files...
    $ apktool b test
    I: Using Apktool 2.2.4 on test
    I: Checking whether sources has changed...
    I: Smaling smali folder into classes.dex...
    I: Checking whether resources has changed...
    I: Building resources...
    I: Building apk file...
    I: Copying unknown files/dir...

Tôi đã thử jadx, nhưng ngay cả với hellowworld đơn giản, mặc dù nó đã dịch ngược nó thành java, Tuy nhiên, cố gắng mở dự án trong studio android và biên dịch lại thành apk, vì nhiều lý do (các tệp trùng lặp, v.v.). Có phương pháp nào tạo java có thể được biên dịch lại thành apk không?
chuộc

1
@ransh Tôi thường sử dụng jadx để đọc mã sau đó apktool để sửa đổi mã. apktool không tạo java nhưng nó cho phép biên dịch lại.
0xcaff

0xcaff, cảm ơn đã làm rõ. Điều đó có ý nghĩa bây giờ. Becuase đang cố gắng biên dịch java dịch ngược trong studio android, không hoạt động.
chuộc

16

Có thể là người dễ dàng để xem nguồn:

Trong studio Android 2.3 , Build -> Analyze APK -> Select the apk that you want to decompile.
Bạn sẽ thấy mã nguồn của nó.

Liên kết để tham khảo:
https://medium.com/google-developers/making-the- most-of-the-apk-anzerzer-c066cb871ea2


9
Nó liệt kê các lớp và phương thức nhưng không cung cấp mã nguồn.
WSS

Bạn chỉ có thể nhận được các tệp trên bằng cách thay đổi ".apk" thành ".zip"
M. Usman Khan

7

Tôi sẽ chỉ cho bạn cách khác để dịch ngược các tệp .apk .

Bạn có thể làm theo 2 bước đầu tiên từ " prankul garg ". Vì vậy, bạn có một cơ hội khác:

Bước 3':

Tải xuống "JD-GUI" , thật dễ dàng để tìm thấy cái này. Mở tệp .jar của bạn trong "jd-gui.exe". (Tệp> Mở tệp> 'tìm thấy tệp .jar của bạn '). Sau thủ tục này, bạn có thể lưu tất cả tài nguyên trong tệp .zip .

Vì thế,

1 - Bạn phải đổi tên tệp .apk thành .zip

Thứ 2 - Bạn phải giải mã tệp .dex (nếu bạn muốn, giải mã tệp .apk thành dex2jar , điều đó là có thể)

Thứ 3 - Bạn phải giải mã tệp .jar bằng JD-GUI


20
Câu trả lời này cung cấp những gì mà những người khác không có?
Jørgen R

Bạn không thực sự phải đổi tên nó thành zip. Tôi có thể mở tệp apk trực tiếp bằng 7-zip.
miva2

7

Bên dưới công cụ TRỰC TUYẾN :

http://www.javadecompilers.com/apk

nó thực hiện TẤT CẢ bằng một cú nhấp chuột: dịch ngược tệp .java + resource + xml (trong một tệp .zip) với trình dịch ngược rất tốt (jadx trả lại mã java ở các vị trí / hàm trong đó các trình biên dịch khác trả về các bình luận bên trong hàm như "không thể dịch ngược" hoặc một số trình biên dịch Android / mã máy)


vâng, điều này thật tuyệt, nhưng thay vì tên hàm, nó đã thay đổi tất cả các tên hàm thành CS1001, v.v. Vậy làm thế nào để nhận ra những điều này. và một điều nữa là, chúng ta có thể sử dụng apk dịch ngược này trực tiếp như dự án phòng thu Android của mình không, nó có hoạt động không?
Zia Ur Rahman

sau đó với mục đích gì chúng ta sử dụng để dịch ngược một số apk, nếu chúng ta không thể sử dụng chức năng của chúng trong các ứng dụng của mình.
Zia Ur Rahman

@ZiaUrRahman Tôi không biết. Tuy nhiên trong trường hợp của tôi, tôi dịch ngược mã để phân tích thuật toán. Bạn có kiểm tra xem mã dịch ngược từ công cụ đó có thể được biên dịch bởi studio android theo cách hoàn toàn tự động - hoặc cần một số "xử lý của con người" không?
Kamil Kiełczewski

1
Tôi đã nhập dự án dịch ngược trong studio android, nhưng Không có lớp nào ở đó và dự án có nhiều tệp nhưng không hiểu cho đến khi chúng tôi chạy nó. Đơn giản là nó không hoạt động. Tôi cần phải thực hiện dự án dịch ngược hoàn toàn trong hệ thống android và sau đó lấy một số chức năng cốt lõi của một số dự án, sau đó muốn sử dụng / nhúng nó vào dự án của riêng tôi. Vì vậy, có cách nào để làm điều này?
Zia Ur Rahman

6

Trang web này https://www.apkdecompilers.com/ đã tự động làm điều đó.

Tôi đã thử trang web được đề cập trong câu trả lời được chấp nhận trước nhưng điều đó không hiệu quả với tôi.


tôi không thể truy xuất mã nguồn java của mình ... đôi khi nó giống như tệp đính kèm và ..
iman kazemayni

@imankazemayni trong liên kết ở trên, "duyệt" đến tệp APK của bạn và nhấp vào "Dịch ngược APK của bạn". Sẽ mất một chút thời gian và sau đó nó sẽ cung cấp cho bạn mã nguồn, nếu mã không được mã hóa.
M. Usman Khan

Bạn có biết là tác động của multidex đến mã hóa?
iman kazemayni

6

Cá nhân tôi khuyên bạn nên hiển thị Ứng dụng Java Android để lấy mã nguồn. Bạn có thể tải nó từ cửa hàng chơi hoặc từ đây


Hầu hết các trình biên dịch trực tuyến không hoạt động, nhưng ứng dụng này đang hoạt động. Cảm ơn bạn
Sunil

4

Apktool cho kỹ thuật đảo ngược bên thứ 3, đóng, ứng dụng Android nhị phân.

Nó có thể giải mã tài nguyên về dạng gần như ban đầu và xây dựng lại chúng sau khi thực hiện một số sửa đổi.

Nó làm cho có thể gỡ lỗi mã smali từng bước. Ngoài ra, nó làm cho việc làm việc với một ứng dụng dễ dàng hơn do cấu trúc tệp giống như dự án và tự động hóa một số tác vụ lặp đi lặp lại như xây dựng apk, v.v.

http://ibotpeaches.github.io/Apktool/


3

apktool là con đường để đi. Dịch vụ apktool trực tuyến cũng tồn tại: http://www.javadecompilers.com/apktool

Rõ ràng, một số hạn chế tồn tại do dịch vụ 'bản chất trực tuyến': bạn có thể trích xuất và nghiên cứu tài sản và tệp kê khai, nhưng không thể biên dịch lại ứng dụng vào lúc này.

Tuy nhiên, đây là một cách không rắc rối để 'mở' ứng dụng Android.


3

Bạn có thể thử DexPatcher . Nó thậm chí còn tích hợp với Android Studio. Nó sử dụng ApktoolDex2Jar trong nội bộ.
Bạn có thể sử dụng những công cụ độc lập là tốt. Apktool dịch ngược apk và trích xuất các tệp .dex, có thể được chuyển đổi thành jar bằng Dex2Jar. Jar có thể được dịch ngược bằng cách sử dụng JD-GUI . Bạn có thể thấy mã Java với sự trợ giúp của công cụ đó. Mặc dù sự giống nhau của mã dịch ngược với mã thực tế không thể được đảm bảo. Có một số công cụ mã hóa nâng cao có sẵn trên thị trường, làm rối mã để gây khó khăn cho việc dịch ngược / hiểu. ví dụ. Bảo vệ


Xin chào Làm thế nào để sử dụng DexPatcher với Android Studio?
ravi152

Không thể giải thích mọi thứ trong các bình luận. Google là bạn của bạn :) Có một số hướng dẫn youtube hay.
Lakshmikant Deshpande

2

dựa trên điều kiện của bạn, nếu apk android của bạn:

Điều kiện1: KHÔNG làm cứng (bởi Tencent Legu / Qihoo 360 / ...)

Lựa chọn1: sử dụng dịch vụ trực tuyến

nhu la:

sử dụng www.javadecompilers.com

đi đến:

để tự động giải mã từ apk sang java sourcecode

các bước:

uploadtập tin apk + nhấp Run+ chờ một chút thời gian + nhấp Downloadđể nhận zip + giải nén ->

sources/com/{yourCompanyName}/{yourProjectName}

là mã nguồn java dự kiến ​​của bạn

Lựa chọn 2: dịch ngược / crack một mình

sử dụng công cụ liên quan để tự dịch ngược / bẻ khóa:

sử dụng jadx/ jadx-guichuyển đổi apksangjava sourcecode

tải về jadx-0.9.0.zip sau đó giải nén để có bin/jadx, sau đó:

  • chế độ dòng lệnh:
    • trong thiết bị đầu cuối chạy: jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
    • output_folder sẽ hiển thị được giải mã sourcesresources
      • sources/com/{yourCompanyName}/{yourProjectName} là mong đợi của bạn java sourcecode
  • Chế độ GUI
    • nhấp đúp chuột để chạy jadx-0.9.0/bin/jadx-gui(Linux's jadx-gui.sh/ Windows jadx-gui.bat)
    • mở apktập tin
    • nó sẽ tự động giải mã -> xem mã nguồn java dự kiến ​​của bạn
    • save all hoặc là save as Gradle project

ví dụ:

Điều kiện2: cứng lại (bởi Tencent Legu / Qihoo 360 / ...)

phương pháp chính của 3 steps:

  1. apk/app to dex
  2. dex to jar
  3. jar to java src

giải thích chi tiết:

Bước 1: apk/app to dex

sử dụng công cụ ( FDex2/ DumpDex) tệp kết xuất / móc ra (một hoặc nhiều) dextừ ứng dụng đang chạy

các bước:

chuẩn bị môi trường

đổ ra dexkhỏi ứng dụng đang chạy

  • chạy FDex2sau đó nhấp vào tên apk của bạn để kích hoạt sau để chụp / móc ra dex

  • (trong điện thoại / trình giả lập) chạy ứng dụng của bạn
  • tìm và sao chép toàn bộ tài nguyên apk trong /data/data/com/yourCompanyName/yourProjectName
    • trong thư mục gốc của nó thường sẽ tìm thấy một số dextập tin

Bước 2: dex to jar

sử dụng tệp dex2jarchuyển đổi tool ( ) cụ thể, chứa logic ứng dụng) dexthành jartệp

tải dex2jardex-tools-2.1-SNAPSHOT.zip , giải nén đã nhận dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh, sau đó

sh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex

ví dụ:

dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.xxx.yyy8825612.dex
dex2jar com.xxx.yyy8825612.dex -> ./com.xxx.yyy8825612-dex2jar.jar

Bước 3: jar to java src

sử dụng một trong các công cụ:

chuyển đổi jarsangjava src

cho hiệu ứng chuyển đổi từ jar sang java src:

Jadx> Procyon> CRF>>JD-GUI

vì vậy nên sử dụng: Jadx/jadx-gui

các bước:

  • nhấp đúp chuột để chạy jadx-gui
  • mở dextập tin
  • File -> save all

ví dụ:

đã xuất java src:


Giải thích chi tiết hơn có thể xem hướng dẫn ebook trực tuyến tiếng Trung của tôi :


2

Android studio cung cấp cho bạn để phân tích bất kỳ tập tin apk.

1 - Từ menu xây dựng chọn tùy chọn phân tích apk và chọn tệp apk. 2 - Điều này sẽ dẫn đến cho bạn tệp class.dex và các tệp khác. 3 - Nhấp vào class.dex sẽ cung cấp cho bạn danh sách các thư mục, gói, thư viện và tệp. 4 - Cài đặt studio từ và android cài đặt một plugin có tên "Dex to Jar" 5 - nhấp vào bất kỳ tệp hoạt động nào của dự án được trích xuất của bạn và chọn dex để jar từ menu xây dựng.

Điều này sẽ dẫn đến cho bạn mã thực tế của tệp java của bạn.

Chúc mừng.


1

Cách đơn giản nhất là sử dụng Apk OneClick Decompiler. Đó là gói công cụ để dịch ngược và phân tách APK (gói android).

ĐẶC TRƯNG

  • Tất cả các tính năng được tích hợp vào menu chuột phải của Windows.
  • Dịch ngược các lớp APK thành mã nguồn Java.
  • Tháo rời APK để mã smali và giải mã tài nguyên của nó.
  • Cài đặt APK cho điện thoại bằng cách nhấp chuột phải.
  • Biên dịch lại APK sau khi chỉnh sửa mã smali và / hoặc tài nguyên. Trong quá trình biên dịch lại:
  • Tối ưu hóa hình ảnh png
  • Ký apks
  • Zipalign

YÊU CẦU

Môi trường chạy thi hành Java (JRE) phải được cài đặt.

Bạn có thể tải xuống từ liên kết này Apk OneClick Decompiler

Hãy tận hưởng điều đó.


1

Tôi tìm thấy sau đây là phương pháp đơn giản nhất:

  1. Đổi tên app.apk của bạn thành app.zip (Thay đổi tiện ích mở rộng từ apk sang zip)
  2. Giải nén tập tin zip vào một thư mục
  3. Sử dụng công cụ JADX để đọc mã nguồn, có trong tệp class.dex.

1

Có một ứng dụng cho điều đó và thường chỉ mất vài cú nhấp chuột và bạn đã hoàn thành. https://github.com/Nuvolect/DeepDive-Android

  1. Chọn Ứng dụng, trong "Ứng dụng đã cài đặt", chọn ứng dụng của bạn. Nếu không có, bạn có thể tải APK.
  2. Chọn "Trích xuất APK"
  3. Chọn "Giải nén APK"
  4. Chọn "Biên dịch với Jadx". Quá trình này có thể mất vài giây hoặc vài phút tùy thuộc vào tốc độ của thiết bị của bạn

Sau đó, bạn có thể duyệt mã nguồn, tải nó xuống một máy tính khác với el Downloader hoặc tìm kiếm thông qua nó bằng Lucene.

Ngoài Jadx, nó còn có bộ dịch ngược CFR và Fernflower.


0

Tôi đã khiến bản thân mình phát điên trong nhiều ngày khi cố gắng để dex2jar hoạt động trên máy tính xách tay fedora 31 với một apk không hoạt động. Kịch bản python 3 này đã thực hiện thủ thuật trong vài phút và cài đặt jd-gui làm cho các tệp lớp có thể đọc được.

http://java-decompiler.github.io/

https://github.com/Storyyeller/enjarify

cụ thể, đây là những gì tôi đã chạy:

# i installed apktool before the rest of the stuff, may not need it but here it is
$> cd /opt
$> sudo mkdir apktool
$> cd apktool/
$> sudo wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
$> sudo wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.4.1.jar
$> sudo mv apktool_2.4.1.jar apktool.jar
$> sudo mv apktool* /usr/bin/
$> sudo chmod a+x /usr/bin/apktool*

# and enjarify
$> cd /opt
$> sudo git clone https://github.com/Storyyeller/enjarify.git
$> cd enjarify/
$> sudo ln -s /opt/enjarify/enjarify.sh /usr/bin/enjarify

# and finally jd-gui
$> cd /opt
$> sudo git clone https://github.com/java-decompiler/jd-gui.git
$> cd jd-gui/
$> sudo ./gradlew build

# I made an alias to kick of the jd-gui with short commandline rather than long java -jar blahblahblah :)
$> echo "jd-gui='java -jar /opt/jd-gui/build/launch4j/lib/jd-gui-1.6.6.jar'" >> ~/.bashrc

Bây giờ người ta có thể rum những điều sau đây để có được các tập tin lớp:

$> enjarify yourapkfile.apk

Và để bắt đầu jd-gui:

$> jd-gui

Sau đó, chỉ cần mở tập tin lớp của bạn!



0

Sử dụng công cụ này http://www.javadecompilers.com/

Nhưng gần đây, một làn sóng dịch ngược mới đã xuất hiện trên thị trường: Procyon, CFR, JD, Fernflower, Krakatau, Nến.

Dưới đây là danh sách các trình dịch ngược được trình bày trên trang web này:

CFR - Miễn phí, không có mã nguồn có sẵn, http://www.benf.org/other/cfr/ Tác giả: Lee Benfield

Trình dịch ngược được cập nhật rất tốt! CFR có thể dịch ngược các tính năng Java hiện đại - các mô-đun Java 9, lambdas Java 8, các công tắc Chuỗi Java 7, v.v.

JD - miễn phí cho chỉ sử dụng phi thương mại, http://jd.benow.ca/ Tác giả: Emmanuel Dupuy

Được cập nhật vào năm 2015. Có giao diện trực quan và các plugin riêng cho Eclipse và IntelliJ. Viết bằng C ++, nên rất nhanh. Hỗ trợ Java 5.

Procyon - mã nguồn mở, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler Tác giả: Mike Strobel

Hoa hướng dương - mã nguồn mở, https://github.com/fesh0r/fernflower Tác giả: Egor Ushakov

Được cập nhật vào năm 2015. Trình dịch ngược Java phân tích rất hứa hẹn, giờ trở thành một phần không thể thiếu của IntelliJ 14. ( https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler ) Hỗ trợ Java lên phiên bản 6 (Chú thích, khái quát, enums)

JAD - được đưa ra ở đây chỉ vì lý do lịch sử. Miễn phí, không có mã nguồn có sẵn, jad download mirror Tác giả: Pavel Kouznetsov

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.