2009-08-14 25 views
9

Tôi đang làm việc trên một ứng dụng mà tôi sẽ sớm được phân phối công khai. Tôi muốn làm bất cứ điều gì trong khả năng của mình để đảm bảo rằng những người tải xuống chương trình của tôi không đảo ngược kỹ sư đó. Tôi hiểu rằng việc phân phối tệp .jar rất không an toàn.Bảo vệ tệp jar Java để phân phối

Có ai có thể giới thiệu một cách độc lập nền tảng để phân phối ứng dụng Java của tôi không? Ngoài ra, tôi muốn cài đặt nó như một dịch vụ trên bất kỳ nền tảng nào (Windows, Linux, Mac OSX).

Cảm ơn!

Trả lời

8

Bạn có thể tranh giành/xáo trộn bytecode của bạn với yGuard hoặc java bytecode-obfuscate khác.

Hệ điều hành phân phối độc lập có thể khó khăn. IMHO giải pháp tốt nhất là một kho lưu trữ thông thường có chứa một số tập lệnh (.bat/.cmd cho các cửa sổ, .sh cho Linux/OSX) cho chương trình khởi động trong Hệ điều hành mà chương trình hỗ trợ.

Chạy một chương trình java làm dịch vụ có thể còn khó khăn hơn: Thật dễ dàng trong Linux, nơi bạn chỉ cần viết một tập lệnh khởi động thích hợp để chạy nó trong nền. Tôi biết rằng FireDaemon có vấn đề khi chạy các chương trình java như dịch vụ, vì vậy nó có thể khó khăn (hoặc không thể) để chạy nó như là dịch vụ trên Windows. Xin lỗi, nhưng tôi không có ý tưởng về MacOS X. Có thể dễ dàng như Linux, có thể là không thể như Windows.

+0

Obfuscation là con đường để đi. – Carnell

2

Bạn đã cân nhắc sử dụng trình biên dịch mã gốc như GCJ chưa? Nó không phải là nền tảng độc lập (bạn sẽ phải biên dịch một nền tảng cho mỗi nền tảng đích), nhưng tôi không thấy cách bạn có thể phân phối bytecode độc ​​lập nền tảng mà chưa ẩn bytecode đó từ người dùng cuối của bạn.

1

bạn có thể làm xáo trộn nó. Nó sẽ làm cho kỹ thuật đảo ngược chương trình của bạn khó khăn hơn. Ngoài ra, tôi nghĩ bạn có thể làm cho tệp lớp của bạn có thể thực thi (ví dụ: .exe cho cửa sổ) quá

EDIT: thành thật mà nói, nếu bảo mật cho ứng dụng của bạn là rất quan trọng, tốt nhất nên tránh java hoàn toàn. Bạn có thể sử dụng trình biên dịch gcc cho c + + ví dụ (mà là nhiều hay ít nền tảng độc lập miễn là bạn không thực hiện các cuộc gọi hệ thống). Bạn chỉ cần biên dịch nó trên các máy chủ khác nhau (đó là một cái gì đó mà câu hỏi ban đầu của bạn chỉ ra là nhu cầu của bạn nhưng trên java).

Ngoài ra còn có qt, nhưng tôi chưa thử bản thân mình.

+0

Bạn có thể tạo các tệp thi hành - nhưng tất cả những gì bạn đang làm là nhúng một máy ảo. –

+0

Khó khăn, nhưng không phải là không thể. –

2

Bạn có thể mã hóa bình, nhưng sau đó bạn sẽ cần phải viết trình nạp lớp tùy chỉnh để tải nội dung của bình. Điều đó vẫn không phải là 100% chống lừa dối mặc dù - thực tế đơn giản là không có gì bạn có thể làm sẽ làm cho mã của bạn 100% an toàn nếu nó được nhắm mục tiêu. Xem thảo luận này tại đây.

How to create encrypted Jar file?

+1

Sự cố với các tệp JAR được mã hóa là bạn phải cung cấp một số mã để giải mã các tệp để thực thi. Mã đó có thể được thiết kế ngược để xác định khóa/thuật toán giải mã. –

+1

@Stephen - đồng ý 100%. Không có nghi ngờ rằng phương pháp này chỉ giống như một ổ khóa - được thực hiện để giữ một người đàn ông trung thực trung thực. Bất cứ ai muốn đặt bất kỳ mức độ nỗ lực nào vào việc lấy nguồn từ một cái bình có thể làm như vậy. Sau khi tất cả, một khi nó đã được giải mã nó có thể được đọc đồng bằng từ bộ nhớ. –

3

Chạy ứng dụng của bạn thông qua bộ obfuscator khiến kỹ thuật đảo ngược trở nên khó khăn và tốn kém hơn.

Hãy xem Java Service Wrapper để biết cách cài đặt và chạy ứng dụng java của bạn một cách tương đối dễ dàng như một dịch vụ trên nhiều nền tảng.

2

Như những người khác đã nói, bạn có thể làm xáo trộn mã của bạn. Điều đó sẽ làm cho kỹ thuật đảo ngược không tầm thường. Bạn cũng có thể biên dịch Java của bạn thành mã gốc bằng cách sử dụng (ví dụ) GCJ. Điều đó sẽ làm cho kỹ thuật đảo ngược trở nên khó khăn hơn, nhưng nó cũng có nghĩa là bạn phải tạo các gói phân phối khác nhau cho mỗi nền tảng phần cứng/hệ điều hành được hỗ trợ.

Nhưng cuối cùng bạn phải nhận ra rằng nếu bạn phân phối phần mềm để chạy trên nền tảng chứng khoán, không có gì kỹ thuật mà bạn có thể làm để ngăn kỹ thuật đảo ngược. Không có gì.

Cuối cùng, bạn phải trao đổi lợi ích của việc phân phối phần mềm của bạn so với rủi ro của một người nào đó đảo ngược kỹ thuật đó. Một cách tiếp cận mà mọi người thực hiện là tìm hiểu xem lợi ích có vượt quá rủi ro * chi phí và sử dụng các biện pháp bảo vệ pháp lý (ví dụ: giấy phép phần mềm thích hợp) để ngăn chặn kỹ thuật đảo ngược hay không. Cách tiếp cận khác là nói "chúc may mắn cho bạn" với các kỹ sư đảo ngược tiềm năng và kiếm tiền bằng cách cung cấp dịch vụ thay vì giấy phép phần mềm.

1

hoặc bạn có thể làm những gì tôi đã làm. java front end với các chức năng phụ trợ nhất định được viết bằng C++ được biên dịch thành một dll được gọi là thông qua JNI. Giao diện người dùng kết thúc là hoàn toàn di động với grunt phụ trợ được thực hiện bản địa.

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