Trình obfuscator Java tốt nhất? [đóng cửa]


106

Tôi đang phát triển một phần mềm bảo mật và muốn làm xáo trộn mã java của mình để không thể thiết kế ngược. Trình obfuscator java đáng tin cậy nhất là gì?


10
@Xinus "không thể đảo ngược thiết kế" - hầu như không, tốt nhất đã thử và thất bại
kiến

211
Tôi đã có một số đồng nghiệp đã tạo ra một số mã khó hiểu. Nhưng đó không phải là ý định của họ.
Steve McLeod

7
It was once said that if you had an infinate amount of monkeys on typewiters and an infinate amount of time, they would write all of the great works of Shakespeare.- Dilbert
ant

7
Không thể tránh được kỹ thuật đảo ngược.
Mnementh

11
@Mnementh: nó đủ để làm cho kỹ thuật đảo ngược trở nên đắt đỏ đến mức nghiêm trọng cho ứng dụng cụ thể của bạn.
Dmitry Leskov

Câu trả lời:


98

Đầu tiên, bạn thực sự cần lưu ý rằng không bao giờkhông thể thiết kế ngược một thứ gì đó. Mọi thứ đều có thể hack được. Một nhà phát triển thông minh sử dụng IDE thông minh đã có thể đi đủ xa.

Vâng, bạn có thể tìm thấy ở đây một danh sách. ProGuard là khá tốt. Tôi đã tự mình sử dụng nó, nhưng chỉ để "rút gọn" mã Java.


1
@BalusC: Vậy bạn sử dụng công cụ nào để xáo trộn mã java? bạn làm xáo trộn mã java của bạn, phải không?
Thinhbk

@Thinhbk Obfuscation khiến việc lấy dấu vết ngăn xếp hữu ích khó hơn.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: Đồng ý. IMO, sự xáo trộn sẽ làm cho các dấu vết ngăn xếp trở nên gần như vô dụng. Trong trường hợp đó, tôi đang sử dụng một số thủ thuật với tin nhắn nhật ký, có thể hữu ích.
Thinhbk

2
@Thinhbk Proguard tạo một bản đồ để dịch các dấu vết ngăn xếp bị mờ trở lại mã ban đầu. Nếu không, như bạn nói, chồng dấu vết sẽ trở thành vô dụng (nhưng những người được ngoại lệ uncaught anyway ... ;-))
Matthieu

@Matthieu: Có thể tự động dịch dấu vết ngăn xếp được sao lưu sang mã gốc không? Nó sẽ là tuyệt vời, và mới đối với tôi. Tôi chỉ biết rằng dịch ngược thủ công có thể khó khăn nếu cơ sở mã quá lớn.
Thinhbk

33

Nếu một máy tính có thể chạy nó, một con người có động cơ phù hợp có thể thiết kế ngược lại nó.


3
Có bao nhiêu người có thể đọc mã bị xáo trộn và hiểu logic? Tôi có rất nhiều người bạn kỹ sư và họ không thể làm điều đó. Chỉ John Nash có thể làm được điều này;)
kodmanyagha

5
@kodmanyagha Nếu họ có đủ động lực, họ sẽ học nó. Nó không khó.
Thorbjørn Ravn Andersen

1
Theo nghĩa toán học, nó có thể chạy mà không có cách nào để thiết kế ngược nó. Đây là nội dung của mã hóa đồng hình, nhưng có khá nhiều trở ngại cần được giải quyết để nó có thể sử dụng thực tế trên phần mềm máy tính thay vì SaaS. Chúng tôi đang di chuyển đến đó từ từ. Công trình bán lẻ của Gentry về mã hóa đồng hình hoàn toàn và "câu đố ghép hình toán học" của Amit Sahai và cộng sự. đã tạo ra một bước nhảy vọt theo hướng đó. Chỉ còn thiếu một yếu tố (mà tôi gọi là "chức năng rào cản") có thể làm cho toàn bộ kế hoạch khả thi. Điều không thể hiện tại sẽ có thể thực hiện được trong tương lai.
ogggre

30

Hãy xem bài viết của tôi Bảo vệ mã Java của bạn - Thông qua Obfuscators And Beyond [Đã lưu trữ] để thảo luận về obfuscation và ba cách khác để làm cho kỹ thuật đảo ngược của ứng dụng của bạn đắt hơn và một bộ sưu tập các liên kết đến các công cụ và tài liệu đọc thêm.


1
Đây là những gì tôi thực sự cần. Tôi muốn viết PHP obfuscator cho các dự án của mình. Logic là giống nhau ở mọi nơi. Cảm ơn ...
kodmanyagha

1
Bài viết hay và sâu rộng về bộ sưu tập phần mềm và giải mã Java.
m3nda

15

Tôi nghĩ rằng Proguard là tốt nhất. Cũng có thể tích hợp nó với IDE của bạn (ví dụ: NetBeans). Tuy nhiên, hãy lưu ý rằng nếu bạn làm xáo trộn mã của mình thì có thể khó theo dõi các vấn đề trong nhật ký của bạn ..


6
+1 cho "hãy cân nhắc rằng nếu bạn làm xáo trộn mã của mình, có thể khó theo dõi các vấn đề trong nhật ký của bạn". Chỉ khi bạn nghĩ rằng gỡ lỗi là đủ cứng ...
Adam Paynter

7
Một obfuscator tốt để thay đổi tên và thông tin số dòng phải tạo ra một nhật ký để đảo ngược quá trình. Bằng cách này, ít nhất các dấu vết ngăn xếp vẫn hữu ích cho các tệp nhị phân bị xáo trộn.
Joachim Sauer

3
ProGuard tạo các tệp đảo ngược như vậy để gỡ lỗi. :-)
Malax



7

Đúng là luôn luôn có thể đảo ngược một số mã, giống như không thể bảo vệ một ngôi nhà để không ai có thể ăn cắp nó. Tuy nhiên, điều đó không ngăn tôi khóa cửa. Trên thực tế, tôi không ở trong thế giới java, tôi sử dụng BitHelmet cho .net.


7
+1 để đưa bạn trở lại net 0. Câu trả lời này không phải là không hữu ích.
HaloWebMaster

6

Tôi đã từng làm việc với Klassmaster ở công ty trước đây của mình và nó hoạt động rất tốt và có thể tích hợp khá tốt với các hệ thống xây dựng (hỗ trợ maven rất tuyệt vời). Nhưng nó không miễn phí.



6

Tôi không biết chắc liệu giải pháp có an toàn hay không, nhưng về giải pháp ClassGuard , thật thú vị khi đọc bài viết và nhận xét tại: http://www.javaworld.com/community/?q=node/1604#comment -12296


Và khác thay thế mà còn sử dụng mã gốc thay vì defineClass là JarCrypt
Renato

Một bài viết hướng dẫn cách crack ClassGuard : setrst.blogspot.com/2010/04/classguard-ungu canh.html . Tôi chỉ không biết liệu điều này có còn hoạt động trên phiên bản mới nhất hay không.
Renato
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.