Suy nghĩ về điều này, có một số loại obfuscation khác nhau. Hãy bắt đầu với việc mã hóa mã nguồn, việc này hoàn toàn lãng phí thời gian; đủ khó để hiểu mà không có điều đó! Vì vậy, thay vào đó hãy tập trung vào việc xáo trộn gói phân phối, về cách mã được gửi đến người dùng.
Béo nhẹ
Obfuscation nhỏ tồn tại để ngăn người dùng thông thường chọc ngón tay vào và phá vỡ mọi thứ một cách dễ dàng. Nó không ngăn chặn được tin tặc xác định, nhưng nó có giá trị trong việc giúp đảm bảo rằng những thứ bạn được yêu cầu hỗ trợ là những gì bạn thực sự đã giao. Mức độ bảo vệ cần thiết cho loại điều này thực sự khá thấp; gói giao hàng chỉ đơn giản là trông không dễ đọc và có thể chỉnh sửa (không có công cụ chuyên môn) và điều đó khá tốt.
Thu nhỏ Javascript là một ví dụ về điều này, mặc dù nó không được bán trên thị trường như vậy. Không ai có thể muốn đọc và chỉnh sửa một tệp JS được rút gọn, ngay cả khi về mặt kỹ thuật hoàn toàn có thể làm được nếu bạn đủ quyết tâm / kiên trì.
Tương tự với việc phân phối các ứng dụng Java. Chỉ đóng gói mã vào một JAR thực thi sẽ ngăn chặn phần lớn sự dại dột, mặc dù nó có tất cả lực lượng của một câu lịch sự vui lòng Giữ lại Dấu hiệu Cỏ trong một công viên thành phố.
Ngay cả khi phân phối mã C ++, tước bỏ các ký hiệu không cần thiết từ tệp thực thi sẽ đủ để đủ điều kiện là mã hóa nhỏ. Điều quan trọng là thật khó xử khi đọc kết quả với tư cách là người dùng, nhưng không phải là vấn đề khi thực hiện nó dưới dạng máy tính.
Obfuscation lớn
Obfuscation chính là giữ cho người dùng xác định và hiểu biết ra. Đây cũng là một trò chơi thua hoàn toàn; nếu một máy tính có thể thực thi nó, một người có thể tách nó ra và tìm ra những gì nó làm. Cách gần nhất bạn có thể nhận được là làm cho chương trình tự giải mã liên tục, biến đổi những gì nó làm một lúc thành một điều hoàn toàn khác mà nó làm vào một thời điểm khác. Việc tạo ra những thứ như vậy sẽ khá khó khăn và vẫn không thể ngăn chặn được một hacker thực sự giỏi (mặc dù chúng sẽ thực sự khá khó khăn với bạn khi kết thúc nó với số lượng nỗ lực cần thiết để giải mã tất cả mã tự sửa đổi đó).
Tốt hơn nhiều là suy nghĩ về các giải pháp khác. Ví dụ: bạn có thể giữ mã vương miện của nữ hoàng trên mã máy chủ mà bạn kiểm soát và chỉ cho phép các cuộc gọi dịch vụ đến nó, làm cho máy khách trở thành một tặng phẩm miễn phí về cơ bản là phần đầu cho các bit có giá trị. Hoặc bạn có thể đi theo con đường hợp đồng / hợp pháp hơn và chỉ bàn giao các cơ quan thực thi cho các tổ chức chính thức đồng ý không chọc vào mã của bạn hoặc bồi thường cho bạn nếu họ làm như vậy (vì vậy đó sẽ là một loại NDA). Mục đích sẽ là tạo ra một động lực mạnh mẽ để tin tặc không hack và cho người dùng để giữ mã khỏi mọi tin tặc không bị ràng buộc bởi thỏa thuận.
Nhưng bạn không được cho rằng mã của bạn không bao giờ bị bẻ khóa. Với ảo hóa, bất kỳ trạng thái chương trình thực thi nào cũng có thể được kiểm tra và theo dõi, và bất cứ điều gì cố gắng đánh bại điều đó (ví dụ, theo dõi đồng hồ đến nguồn thời gian bên ngoài) sẽ có nhiều khả năng gây ra sự cố cho người dùng hợp pháp hơn tin tặc. (Xem lịch sử của DRM để biết các nhà xuất bản thông tin rất kiên quyết không thể giữ an toàn cho hệ thống của họ một khi mã nằm trong tay đối thủ của họ.) Tốt hơn hết là tập trung vào việc làm cho người dùng thực sự hài lòng. Các khoản lỗ từ vết nứt thường xuyên sẽ không là gì so với số tiền thêm vào thông qua việc làm hài lòng khách hàng đúng cách.