2009-05-16 37 views
9

Bạn đã bao giờ làm xáo trộn mã của mình trước đây chưa? Có lý do chính đáng nào để làm như vậy không?Tại sao bạn làm xáo trộn mã của bạn?

+0

Tôi không thể không nhận thấy có hai cách để giải thích điều này: 1) bàn tay bị làm xáo trộn, và 2) máy bị làm xáo trộn. Như đã nói, câu hỏi là khuyến khích các câu trả lời dựa trên cả hai giả định. –

Trả lời

18

Tôi đã làm xáo trộn JavaScript của mình. Nó làm cho nó nhỏ hơn, do đó giảm thời gian tải xuống. Ngoài ra, kể từ khi mã được giao cho khách hàng, công ty của tôi không muốn họ có thể đọc được nó.

+1

Và bạn không nói với ông chủ của bạn, rằng obfuscation là đảo ngược? Nếu bạn có Javascript trong Trình duyệt, mọi người có quyền truy cập vào trang đều có thể nhận được tập lệnh. Obfuscation chỉ là một trở ngại nhỏ. – Mnementh

+4

Tôi nói với họ, mua họ nhận được những gì họ muốn. Mã không đáng để ăn cắp. – geowa4

+3

20% rào cản này có thể là đủ cho 80% số người đánh cắp. – lImbus

13

Có, để làm cho kỹ sư đảo ngược khó hơn.

+1

Có. Khó hơn, nhưng không phải là không thể. :-) –

+14

Có tất cả chúng ta đều biết không thể làm điều gì đó bất khả chiến bại. Cũng giống như nó không thể cho một tòa nhà được an toàn 100%, chúng tôi vẫn cố gắng hết mức có thể. – Unknown

+0

@Unkown - +1 cho câu trả lời ngắn và điểm của bạn –

-1

Điều này thường được thực hiện khi bạn cần để cung cấp thứ gì đó trong nguồn (thường là do môi trường được tích hợp sẵn, chẳng hạn như hệ thống không có thư viện được chia sẻ, đặc biệt nếu bạn là người bán không có hệ thống chính xác xây dựng cho), nhưng bạn không muốn người mà bạn cho nó để có thể sửa đổi hoặc mở rộng nó đáng kể (hoặc ở tất cả).

Điều này thường được sử dụng phổ biến hơn ngày hôm nay. Nó cũng dẫn đến cuộc thi C không tồn tại.

Sử dụng pháp lý (mặc dù không được cho là "hợp pháp") có thể là để phát hành "nguồn" cho một ứng dụng bạn đang liên kết với mã GPL theo kiểu thời trang khó hiểu. Đó là nguồn, nó có thể được sửa đổi, nó chỉ là rất khó khăn. Đó sẽ là một phiên bản cực đoan của việc phát hành nó mà không có bình luận, hoặc phát hành với tất cả khoảng trống được cắt tỉa, hoặc (và điều này sẽ thúc đẩy cơ sở pháp lý) giải phóng nguồn lắp ráp được tạo ra từ C (và có thể điều chỉnh bằng tay để bạn có thể nói nó không chỉ cần mã trung gian).

+0

tăng cường. Nếu đó là sự thật, vậy thì điều gì khiến bạn không thể giải phóng nó như một hội nghị? –

+3

Nguồn bị xáo trộn không tuân thủ các yêu cầu GPL. GPL-2 và GPL-3 đều nói "Mã nguồn của một tác phẩm có nghĩa là hình thức ưu tiên của tác phẩm để thực hiện các sửa đổi cho nó". Rõ ràng, đó không phải là phiên bản obfuscated. Và chắc chắn không phải là đầu ra lắp ráp. – derobert

+0

Tôi đã không kiểm tra nếu có ngôn ngữ như vậy; chắc chắn một bản phát hành như vậy vi phạm ý định của GPL. Tôi nghi ngờ có diện tích màu xám pháp lý đáng kể ở đó (tước ý kiến? Không bao gồm tài liệu bên ngoài?) Nhưng obfuscation đúng dường như vi phạm điều khoản đó. – jesup

6

Tôi không tin rằng việc tạo kỹ thuật đảo ngược khó hơn là một lý do hợp lệ.

Lý do chính đáng để làm xáo trộn mã của bạn là giảm dấu chân được biên dịch. Ví dụ, các ứng dụng J2ME cần phải nhỏ nhất có thể. Nếu bạn chạy ứng dụng của bạn thông qua một obfuscator (và optimiser) thì bạn có thể giảm jar từ vài Mb đến vài trăm Kb.

Điểm khác, nằm bên trên, là hầu hết các bộ obfuscators cũng là trình tối ưu hóa có thể cải thiện hiệu suất của ứng dụng của bạn.

+0

Lý do tôi không nghĩ rằng việc tạo ra kỹ thuật đảo ngược khó hơn là một lý do chính đáng khiến nó gây khó khăn không ngăn nó xảy ra. –

+0

Đó được gọi là tối ưu hóa trình biên dịch. Thực tế là nó xảy ra để obfuscate là một tác dụng phụ, không phải là mục đích chính. – Unknown

+5

Ổ khóa không ngăn chặn xe ô tô bị đánh cắp, nhưng chúng làm cho nó khó hơn. Ai đó đã thực sự muốn chiếc xe hơn là chỉ một Joe trung bình muốn có một chuyến đi vui vẻ. Obfuscation làm cho nó khó khăn hơn để ăn cắp mã. Một người nào đó thực sự muốn nó vẫn sẽ làm điều đó, nhưng nó sẽ ngăn chặn kịch bản-kiddie trung bình của bạn. (-1) – bsneeze

0

Tôi nhớ đã tạo một dịch vụ Windows cho ứng dụng Sao lưu trực tuyến được xây dựng trong .NET. Tôi có thể dễ dàng sử dụng Visual Studio hoặc các công cụ như .NET Reflector để xem các lớp và mã nguồn bên trong nó.

Tôi đã tạo một ứng dụng Visual Studio Test mới và thêm tham chiếu Windows Service vào nó. Nhấp đúp vào tham chiếu và tôi có thể thấy tất cả các lớp, không gian tên tất cả mọi thứ (không phải là mã nguồn mặc dù). Bất kỳ ai cũng có thể tìm ra hoạt động nội bộ của các mô-đun của bạn bằng cách nhìn vào tên lớp. Trong trường hợp của tôi, một lớp như vậy là FTPHandler cho biết rõ ràng nơi các bản sao lưu đang diễn ra.

Phản xạ .NET vượt xa điều đó bằng cách hiển thị mã thực tế. Nó thậm chí còn có một tùy chọn để xuất toàn bộ dự án để bạn có được một dự án VS với tất cả các lớp và mã nguồn tương tự như những gì nhà phát triển đã có.

Tôi nghĩ điều đó có ý nghĩa để làm xáo trộn, để làm cho nó khó hiểu hơn nếu không thể không ai có thể tháo rời. Ngoài ra tôi nghĩ rằng nó có ý nghĩa đối với các sản phẩm liên quan đến cơ sở khách hàng lớn, nơi bạn không muốn đối thủ cạnh tranh của bạn biết nhiều về sản phẩm của bạn.

0

Nếu tôi đang cung cấp ứng dụng Java Swing cho khách hàng, tôi luôn làm xáo trộn các tệp lớp trước khi phân phối.

Bạn không bao giờ có thể quá cẩn thận - Tôi đã từng chỉ ra một trình giải mã Java khá (tôi đã sử dụng JD Java Decompiler - http://www.djjavadecompiler.com/) tại các tệp lớp của mình và được thưởng một bản sao gần như hoàn hảo của mã gốc. Đó là khá đáng lo ngại, vì vậy tôi bắt đầu obfuscating mã sản xuất của tôi kể từ đó. Tôi sử dụng chính Klassmaster (http://www.zelix.com/klassmaster/)

+0

Câu hỏi đặt ra là bạn có nghĩ rằng bạn sẽ mất kinh doanh do giải mã? Cướp biển sẽ sao chép nó bất kể việc làm xáo trộn. Khách hàng doanh nghiệp hợp pháp sẽ không quan tâm theo cách này hay cách khác. – PowerApp101

+0

Chúng tôi có những người rất muốn đảo ngược kỹ sư mã của chúng tôi và đưa ra một sản phẩm cạnh tranh. -R – Huntrods

7

Để đảm bảo công việc cho cuộc sống, tất nhiên (đang đùa).

Điều này khá vui nhộn và giáo dục: How to Write Unmaintanable Code.

+0

https://github.com/Droogans/unmaintainable-code –

1

Tôi tin rằng tất cả các hộp cáp TV sẽ có mã java bị xáo trộn. Điều này làm cho mọi việc khó khăn hơn để hack, và vì các hộp cáp sẽ ở trong nhà của bạn, chúng có thể bị hack về mặt lý thuyết.

Tôi không chắc chắn nó sẽ quan trọng như thế nào kể từ khi thẻ cáp vẫn kiểm soát mã hóa tín hiệu và được ủy quyền trực tiếp từ nguồn video thay vì hướng dẫn mã java hoặc ứng dụng java, nhưng chúng khá dành riêng cho khái niệm .

Nhân tiện, không dễ để theo dõi ngoại lệ được ném từ một ngăn xếp bị xáo trộn! Tôi thực sự ghi nhớ tại một thời điểm rằng aH có nghĩa là "Null Pointer Exception" cho một công trình cụ thể.

2

Điều này cũng không được sử dụng làm bảo mật thông qua sự tối tăm? Khi mã nguồn của bạn là công khai có sẵn (javascript vv) bạn có thể muốn ít nhất nó hơi khó hiểu những gì đang thực sự xảy ra ở phía khách hàng.

Bảo mật luôn có đầy đủ các thỏa hiệp. nhưng tôi nghĩ rằng an ninh bởi sự tối tăm là một trong những phương pháp hiệu quả nhất.

0

Nhìn vào một số mã tôi đã viết cho dự án trình điều khiển đĩa của mình khiến tôi đặt câu hỏi về ý nghĩa của việc bị làm xáo trộn.

((int8_t (*)(int32_t, void *)) hdd->_ctrl)(DISK_CMD_REQUEST, (void *) dr); 

Hoặc đó chỉ là lập trình hệ thống trong C? Hay dòng chữ đó nên được viết khác đi? Câu hỏi ...

+0

Đó không phải là xấu ... Họ có thể đã sử dụng một typedef trên loại chức năng mặc dù. Đối với những người khác, hdd -> _ ctrl là hàm mất (int32_t, void *) và trả về int8_t. Chúng tôi vượt qua nó các thông số thực tế DISK_CMD_REQUEST và dr. –

7

Nó được gọi là "Bảo mật công việc". Đây cũng là lý do để sử dụng Perl - không cần phải làm obfuscation như nhiệm vụ riêng biệt, do đó năng suất cao hơn, mà không mất an ninh công việc.

Gọi đó là "bảo mật thông qua khả năng quan sát" nếu bạn muốn.

+0

Tôi chỉ hy vọng bạn hài hước: P – shylent

+0

bạn đoán sao? :) (vâng - Tôi vô ích đủ để nghĩ rằng tôi không cần phải sử dụng các thủ thuật đó) – StaxMan

0

Có và không, tôi chưa phân phối ứng dụng có công cụ dễ dàng giải mã được.

Tôi đã chạy một cái gì đó như obfuscators cho phiên dịch cũ Basic và UCSD Pascal, nhưng đó là vì một lý do khác, tối ưu hóa thời gian chạy.

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