2012-11-06 17 views
17

Tôi muốn kiểm tra xem DexGuard hoạt động như thế nào nhưng có vẻ như nó không có phiên bản dùng thử miễn phí.DexGuard mã hóa các lớp như thế nào?

DexGuard có thể mã hóa ứng dụng Android không? Hay nó đơn giản làm xáo trộn mã? Mã hóa DexGuard hoạt động như thế nào? Nếu bạn có thể cung cấp mã từ một ứng dụng mẫu chạy với DexGuard trước và sau khi giải mã, nó sẽ rất tuyệt.

Trả lời

50

ProGuard cung cấp tên obfuscation: nó có thể thay thế tên gốc của lớp, phương pháp và trường bằng tên ngắn, vô nghĩa. DexGuard bổ sung cung cấp mã hóa chuỗi và mã hóa lớp. Thuật ngữ mã hóa có thể gây nhầm lẫn trong bối cảnh này, vì đây là những loại obfuscation tích cực hơn. Các chuỗi và lớp được chỉ định được lưu trữ trong một số biểu mẫu được mã hóa cố ý phức tạp và được giải mã khi chạy với các khóa và thuật toán nhất thiết có sẵn cho ứng dụng. Theo một số cách tương tự, thị trường Google Play có thể mã hóa toàn bộ ứng dụng cho Android 4.1. Môi trường thời gian chạy sau đó giải mã các ứng dụng trước khi nó được thực hiện, trong một thời trang được kiểm soát.

(Tôi là nhà phát triển của ProGuard và DexGuard - cảm thấy tự do để liên lạc nếu bạn quan tâm)

+0

Xin chào! Cảm ơn vì đã trả lời! Có, tôi đã nhầm lẫn với định nghĩa mã hóa trong DexGuard. Về cơ bản, sự hiểu biết của tôi là mã hóa chuyển đổi dữ liệu với việc sử dụng một khóa bí mật. Tuy nhiên, nếu một ứng dụng Android được mã hóa, Dalvik sẽ không thể hiểu ứng dụng được mã hóa vì Dalvik không chứa bộ giải mã cho ứng dụng. Trừ khi tất nhiên một bộ giải mã được gắn bên trong ứng dụng cùng với khóa. Bằng cách này, lớp sẽ được giải mã bởi chính ứng dụng trước khi được Dalvik chạy. Đó có phải là cách DexGuard hoạt động không? – Arci

+0

Tôi có thể sử dụng DexGuard cùng với tính năng encyption của Google Play dành cho Android 4.1 không? Ngoài ra, có nên sử dụng DexGuard cùng với Proguard không? Tôi nhận thấy trên trang của Proguard rằng DexGuard không xác định trước các lớp. Làm thế nào tôi có thể chiếm ưu thế trong các lớp học nếu tôi sử dụng DexGuard? Cảm ơn bạn! : D – Arci

+2

Chính xác. Có, từ bên ngoài, một ứng dụng đã xử lý vẫn trông giống như bất kỳ ứng dụng nào khác; Google Play vẫn có thể mã hóa nó. Không, bạn không cần phải kết hợp ProGuard và DexGuard, vì DexGuard đã cung cấp chức năng của ProGuard. Chỉ cần yêu cầu xác minh trước cho Java Micro Edition và Java 6, không phải cho Android. –

1

Mặc dù họ sử dụng mã hóa hạn, có vẻ như nó thực sự là obfuscation. Tôi nói điều này đơn giản vì mặc dù họ có thể mã hóa một số chuỗi/giá trị nhất định ... thực tế là khóa mã hóa cũng phải được lưu trữ trong ứng dụng có nghĩa là chúng đang cung cấp "khóa" cho mã trong khi đồng thời đóng gói "khóa " với nó.

+3

Eric thực hiện chính xác điều đó trong câu trả lời của mình ở trên ... – Dori

2

DexGuard trong phiên bản cũ bằng cách sử dụng "DES" Alg để mã hóa lớp được chỉ định. Sau đó nó thay đổi "AES" alg. Sau khi mã hóa Lớp được chỉ định, nó lưu trữ dữ liệu mã hóa vào một lớp khác thông qua định dạng mảng dữ liệu với phương thức giải mã. Phương thức giải mã là khối tĩnh trong Dex là phương thức định dạng clinit, làm cho obfuscation bị obfuscation và che giấu API. Vì vậy, nó là một chút để giải mã phương pháp giải mã. Trong các lớp khác, tham khảo sự thay đổi lớp được chỉ định cho opcode phản chiếu. Mỗi khi APK chạy, lớp được mã hóa sẽ được giải mã trong phương thức tĩnh trước tiên. Và các lớp được giải mã sẽ được tải vào bộ nhớ dvm bằng cách sử dụng API phản chiếu. vì vậy các lớp khác có thể tham chiếu lớp được chỉ định một cách chính xác. Đó là nó. Theo tôi, DexGuard là công cụ obfuscation rất mạnh mẽ. Nếu mỗi tính năng obfuscations áp dụng cho APK, bạn sẽ mất rất nhiều thời gian để đảo ngược toàn bộ chương trình thực.

Các vấn đề liên quan