2012-04-19 33 views
32

Proguard có hoạt động để làm xáo trộn các hằng số chuỗi tĩnh không?Proguard có hoạt động để làm xáo trộn các hằng số chuỗi tĩnh không?

+3

Đây là mẫu của chuỗi đơn giản ẩn sử dụng file 'build.gradle': https://gist.github.com/shomeser/68f4fe360be0edac95e4 –

+0

@OleksiiKropachov Tôi nghĩ trên bình luận nên được đăng như là một câu trả lời, coz nó là giúp đỡ. –

+0

Proguard không làm xáo trộn các chuỗi tĩnh [nhập liên kết mô tả tại đây] (http://stackoverflow.com/questions/7435980/protect-string-constant-against-reverse-engineering/38050992#38050992) –

Trả lời

2

Dựa trên đọc sách của tôi trong những lựa chọn obfuscation trong cuốn hướng dẫn, câu trả lời là số

Chuỗi obfuscation đen là về mặt lý thuyết có thể, nhưng nó sẽ là cần thiết để sử dụng một classloader đặc biệt mà de-obfuscated các literals String như chúng được đọc từ tệp lớp. Điều này sẽ phức tạp. Trên hết, nó không đạt được nhiều, vì ai đó có thể dễ dàng khôi phục các chuỗi ban đầu bằng cách chạy ứng dụng của bạn với trình gỡ lỗi Java được đính kèm.

+0

Bạn không cần phải sử dụng trình nạp lớp tùy chỉnh, bạn chỉ có thể chèn các hàm vào lớp để xắp xếp lại các chuỗi khi chạy. Đó là những gì Zelix Klassmater làm. Tất nhiên thật dễ dàng để bỏ qua nếu bạn biết những gì bạn đang làm, nhưng obfuscation chỉ là tốt cho deterring người dùng bình thường anyway. – Antimony

8

Điều gì ProGuard hiện (nếu được định cấu hình chính xác để làm như vậy) là hằng số chuỗi trong dòng. Nó sẽ không có ý nghĩa nhiều để làm xáo trộn chúng, nghĩ về nó, một chuỗi liên tục có thể được sử dụng để đại diện cho một thông điệp cho người dùng, và những gì tốt sẽ làm gì nếu nó đã được obfuscated?

+0

Proguard được sử dụng để làm cho mã biên dịch trở nên khó đọc và dễ hiểu, nếu mỗi điểm của một phương thức hiển thị thông điệp người dùng rõ ràng cho người dùng, tôi nghĩ mỗi dòng mã trở nên khá dễ hiểu. Nếu trong các trường hợp như tôi, nơi tôi log.debug ("fun()"), sự khởi đầu của mỗi phương thức được hiển thị trong mã được biên dịch, việc tước tên của phương thức là khá vô ích! Vì vậy, đó là một vấn đề lớn ... –

+0

@ sarah.ferguson Bạn có thể [cấu hình ProGuard để loại bỏ các cuộc gọi đăng nhập] (http://stackoverflow.com/questions/13218772/removing-log-call-using-proguard), quá . –

11

Không, ProGuard không mã hóa chuỗi hằng số (Proguard FAQ Link)

Nhưng có một số sản phẩm thương mại mà sẽ giúp bạn điều đó. Tôi sẽ giới thiệu các Stringer Java Obfuscator vì nó có tính năng kiểm soát ngữ cảnh và kiểm soát tính toàn vẹn của cuộc gọi làm cho kỹ thuật đảo ngược càng khó càng tốt. IMHO Stringer là bộ mã hóa chuỗi tốt nhất cho Java và Android trên thị trường hiện nay.

Đồng thời xem Allatori Java Obfuscator.

N.B. Tôi là CEO tại Licel LLC. Nhà phát triển của Stringer Java Obfuscator.

+0

Stringer Java Obfuscator là không miễn phí –

+4

@ sarah.ferguson Một sản phẩm thương mại vốn dĩ không miễn phí, vâng. – Sipty

57

ProGuard không làm xáo trộn các hằng số chuỗi, như được đề cập trong FAQ của nó. Người anh em nguồn đóng chuyên ngành gần đây hơn của nó cho Android, DexGuard, cung cấp các kỹ thuật bảo vệ ứng dụng bổ sung, như mã hóa chuỗi và mã hóa lớp.

(Tôi là nhà phát triển của ProGuard và DexGuard)

+1

+1 DexGuard là sản phẩm thương mại để bảo vệ các chuỗi trong ứng dụng của bạn. Cá nhân tôi sử dụng một hoạt động bithift, nhưng sẽ không ủng hộ cho các giá trị mà PHẢI đứng lên để kẻ tấn công. – Syntax

+1

@Syntax Tôi sẽ không bênh vực cho tất cả những gì phải đứng trước kẻ tấn công. Những chuỗi đó không nên nằm trong mã của bạn nếu chúng quan trọng. Tôi chưa nhìn thấy một obfuscator Java, nơi mã hóa chuỗi không phải là dễ dàng để phá vỡ, và tôi đã nhìn khá một vài. – Antimony

+1

Như tôi đã nói: P Tôi sẽ KHÔNG ủng hộ việc sử dụng obfuscation cho bất cứ điều gì mà tin tặc không được phép truy cập. Tôi bithift khóa công khai của tôi cho API thanh toán Android và không quá quan tâm nếu mọi người phá vỡ sự che khuất và có quyền truy cập vào nó. – Syntax

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