Có thể dịch ngược tệp .apk của Android không?


86

Người dùng có thể chuyển đổi tệp apk của ứng dụng của tôi trở lại mã thực không? Nếu họ làm vậy - có cách nào để ngăn chặn điều này không?


1
Có một số phương pháp dịch ngược APK . Tôi chỉ APKTool thường xuyên hơn, nó là tốt nhất và mạnh mẽ nhất. Nó rất dễ dàng để sửa đổi các tệp apk với nó.
Taranfx

Tôi đã viết một bài đăng blog ở đây: codexplo.wordpress.com/2012/03/15/... nhưng một lần nữa, nó sẽ là khó khăn cho mã khó hiểu ...
rokonoid


Câu trả lời:


80

Đầu tiên, một tệp apk chỉ là một tệp jar đã được sửa đổi. Vì vậy, câu hỏi thực sự là họ có thể dịch ngược các tệp dex bên trong. Câu trả lời là đại loại. Đã có các trình tháo rời, chẳng hạn như debexersmali . Bạn có thể mong đợi những điều này chỉ trở nên tốt hơn và về mặt lý thuyết, cuối cùng nó sẽ có thể dịch ngược sang nguồn Java thực tế (ít nhất là đôi khi). Xem câu hỏi trước khi dịch ngược DEX thành mã nguồn Java .

Những gì bạn nên nhớ là obfuscation không bao giờ hoạt động. Chọn một giấy phép tốt và cố gắng hết sức để thực thi nó thông qua luật pháp. Đừng lãng phí thời gian với các biện pháp kỹ thuật không đáng tin cậy.


45
Không bao giờ nói không bao giờ. Obfuscation sẽ không ngăn được một tên trộm kiên quyết nhưng nó sẽ làm chậm hoặc ngăn cản nhiều kẻ khác. Xử lý với Proguard là một cách dễ dàng và đáng tin cậy để làm xáo trộn mã của bạn và như một phần thưởng, nó cũng sẽ tối ưu hóa nó. Và nó được bao gồm trong Android SDK, vì vậy nó được Google xác nhận.
Barry Fruitman,

3
Obfuscation chắc chắn hoạt động, nhưng bạn phải xác định rõ ràng hơn mục tiêu của mình là gì. Rõ ràng là cách duy nhất bạn có thể giữ cho mã nguồn của mình thực sự an toàn là không bao giờ cấp cho bất kỳ ai quyền truy cập vào nó, máy chủ hoặc máy khách. Lưu ý rằng Proguard không hoạt động tốt trên các lớp có tham chiếu trong tệp XML. Bạn cần sử dụng tính năng xáo trộn thủ công để giải quyết vấn đề đó.
MattC

35

Có thể giải mã tệp APK. Nhưng có thể khó hiểu mã nếu nó bị xáo trộn.

ApkTool để xem tài nguyên bên trong tệp APK

  • Giải nén AndroidManifest.xml và mọi thứ trong thư mục res (bố cục tệp xml, hình ảnh, htmls được sử dụng trên webview, v.v.)
  • chỉ huy : apktool.bat d sampleApp.apk
  • LƯU Ý: Bạn có thể đạt được điều này bằng cách sử dụng tiện ích zip như 7-zip. Tuy nhiên, nó cũng trích xuất tệp .smali của tất cả các tệp .class.

Sử dụng dex2jar

  • Tạo tệp .jar từ tệp .apk, chúng tôi cần JD-GUI để xem mã nguồn từ tệp .jar này.
  • chỉ huy : dex2jar sampleApp.apk

Giải mã .jar bằng JD-GUI

  • dịch ngược các tệp .class (bị xáo trộn- trong trường hợp của ứng dụng android, nhưng mã gốc có thể đọc được lấy trong trường hợp của tệp .jar khác). tức là, chúng tôi lấy lại .java từ ứng dụng.

apktool không tạo ra các tệp nguồn java! Chỉ smali
IgorGanapolsky

1
như tôi đã nói trong câu trả lời, apktool tạo .jar từ .apk và chúng tôi phải sử dụng công cụ giống như JD-GUI để dịch ngược .jar để đạt được các tệp nguồn .java.
gtiwari333

1
mày đã cứu mạng tao! thật là một bài viết tuyệt vời! Tôi đã mất mã trong hai ngày qua do ổ SSD bị lỗi (thật đáng buồn, tôi không cam kết với git). Tuy nhiên, tôi đã có apk và bây giờ tôi có nguồn của mình, phiền bạn, hơi khác một chút, nhưng nguồn!
farcrats

3

Tôi cũng có thể nói thêm, rằng ngày nay có thể dịch ngược ứng dụng Android trực tuyến, không cần phần mềm!

Đây là 2 lựa chọn cho bạn:


ngược lại là offline (khi tải apk lên, bạn sẽ gặp sự cố khi tải lại) và javadecompilers.com/apk đã đặt apk của tôi vào hàng đợi trong một thời gian dài. Tôi đã ngoại tuyến, sau đó trực tuyến, nó vẫn đang trong tình trạng xếp hàng. Tôi đã xóa tất cả lịch sử duyệt web và bây giờ apk tôi tải lên lần thứ hai đang trong hàng đợi.
iOSAndroidWindowsMobileAppsDev

1

Tải xuống công cụ jadx này https://sourceforge.net/projects/jadx/files/

Giải nén nó và hơn trong thư mục lib chạy tệp jadx-gui-0.6.1.jar bây giờ duyệt tệp apk của bạn. Xong rôi. Tự động apk sẽ dịch ngược và lưu nó bằng cách nhấn nút lưu. Hy vọng nó sẽ làm việc cho bạn. Cảm ơn


0

Đôi khi bạn nhận được mã bị hỏng khi sử dụng dex2jar/ apktool, đáng chú ý nhất là trong các vòng lặp. Để tránh điều này, hãy sử dụng jadx , công cụ này sẽ dịch ngược dalvik bytecode thành mã nguồn java, mà không cần tạo tệp .jar/ .classtrước dex2jar(tôi nghĩ là apktool sử dụng dex2jar). Nó cũng là mã nguồn mở và đang được phát triển tích cực. Nó thậm chí còn có GUI, dành cho những người cuồng GUI. Thử nó!


0

Người dùng có thể chuyển đổi tệp apk của ứng dụng của tôi trở lại mã thực không?

Đúng.

Mọi người có thể sử dụng các công cụ khác nhau để:

  • phân tích: apk của bạn
  • giải mã / hack apk của bạn
    • sử dụng FDex2để kết xuất dextệp
      • sau đó sử dụng dex2jarđể chuyển đổi sangjar
        • sau đó sử dụng jadxđể chuyển đổi sang javamã nguồn

Nếu họ làm vậy - có cách nào để ngăn chặn điều này không?

Đúng. Một số cách (có thể kết hợp) để ngăn chặn (mức độ nhất định) điều này:

  • cấp thấp: mã làm mờ
    • sử dụng Android ProGuard
  • cấp độ cao: sử dụng kịch bản cứng android

Chi tiết hơn có thể tham khảo hướng dẫn tiếng Trung của tôi :安卓 应用 的 安全 和 破解


0

Có, có rất nhiều phần mềm có sẵn để dịch ngược tệp .apk.

Gần đây, tôi đã tổng hợp danh sách 47 trình dịch ngược APK tốt nhất trên trang web của mình. Tôi đã sắp xếp chúng thành 4 phần khác nhau.

  1. Trình biên dịch APK nguồn mở
  2. Trình biên dịch APK trực tuyến
  3. APK Decompiler cho Windows, Mac hoặc Linux
  4. Ứng dụng trình biên dịch APK

Tôi hy vọng bộ sưu tập này sẽ hữu ích cho bạn.

Liên kết: https://www.edopedia.com/blog/best-apk-decompilers/

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.