2013-01-02 41 views
5

Hai câu hỏi liên quan đến obfuscation:F # MSIL obfuscation

1) Có bất kỳ công cụ có thể tháo rời F # trở lại hình thức mã nguồn của nó, hoặc một cái gì đó gần gũi với nó, từ hình thức mục tiêu MSIL? Đây không phải là một nỗ lực bảo mật thông qua tối tăm nhưng tôi muốn bảo vệ một số mã nguồn từ "trộm cắp".

2) Tôi nhìn ngắn gọn một số đầu ra trình biên dịch F # và nói chung nó xuất hiện khá vô nghĩa so với những gì bạn nhận được nếu bạn tháo rời mã biên dịch C#, có lẽ vì C# gần hơn với biểu diễn trung gian MSIL. Mã chỉ đọc một phần duy nhất mà tôi đã thấy từ trình biên dịch C# là các trình vòng lặp (và có lẽ là không đồng bộ như của C# 5.0).

Cho đến nay ấn tượng của tôi là mã F # được biên dịch là hợp lý "bị xáo trộn" nhưng điều đó có đúng không? (Tôi nhận ra đây là một câu hỏi hơi chủ quan.)

+4

Làm thế nào tốt là đối thủ của bạn? Bất kỳ nhà phân tích phần mềm độc hại có thẩm quyền nào cũng có thể đảo ngược mã của bạn từ một kết xuất bộ nhớ, không bao giờ bận tâm đến IL. Bạn là ai "bảo vệ" nguồn của bạn? –

+0

Đối thủ cạnh tranh tiềm năng. Tôi thấy nó không chắc nhưng an toàn hơn là xin lỗi. Tôi chỉ không muốn mã dễ bị xáo trộn với các công cụ phù hợp. Nó phải đủ khó để tự viết mã dễ dàng hơn. Tôi không nghĩ rằng các nhà phân tích phần mềm độc hại nằm trong phạm vi mục tiêu. Giống như một người có hiểu biết trung cấp về F #. :-) –

+2

Tôi sẽ không nói nó bị làm xáo trộn. Nó chỉ được dịch. Tất cả các đường F # được hoàn tác. Ngoài ra nếu bạn dịch ngược nó, nó khá rõ ràng rằng nó đến từ F #, và bất kỳ F #/C# cá nhân có kinh nghiệm bán lại có thể tổng hợp lại F # từ phiên bản được biên dịch lại. Có những mẫu xảy ra, và tất cả những gì bạn phải làm là tạo ra một vài kịch bản thử nghiệm để xem bộ giải mã làm gì và bạn có thể thấy mọi thứ được làm việc như thế nào. – devshorts

Trả lời

8
  1. Tôi chưa từng nghe về bất cứ điều gì như thế này; tuy nhiên, tôi nghĩ có khả năng một công cụ như vậy sẽ xuất hiện trong tương lai gần.
  2. Các hội đồng được sản xuất bởi trình biên dịch F # (tức là, MSIL và siêu dữ liệu có liên quan) không bị làm phiền theo bất kỳ cách nào. Tuy nhiên, một số mã nó tạo ra khác xa so với mã được tạo bởi trình biên dịch C# hoặc VB.NET, vì vậy nó sẽ không dễ dàng để đảo ngược kỹ sư (đơn giản vì các công cụ để làm như vậy không có sẵn). Tất nhiên, như @Craig Stuntz nói, điều này không đủ khả năng bảo vệ chống lại một kẻ tấn công có kinh nghiệm, có động lực.

Nếu bạn thực sự hoang tưởng, bạn có thể cân nhắc sử dụng công cụ obfuscation trên cụm được biên dịch của bạn trước khi gửi chúng. Tôi đã sử dụng {SmartAssembly} với F # kể từ cuối năm 2010, vì vậy tôi biết rằng một trong những hoạt động với F #; nếu bạn đi với một công cụ khác, hãy chắc chắn bạn thử nghiệm nó với một số cụm F # phức tạp trước khi mua nó - lúc đó tôi đang tìm kiếm một obfuscator, nhiều người trong số họ đã không hoạt động chính xác (hoặc ở tất cả) với F # assemblies.

Tôi đã viết lên một số lưu ý một khi trở lại về Obfuscating F # lắp ráp, nếu bạn muốn đọc thêm: Any experience using .NET obfuscators on F# assemblies?

1

F # là một phần của ngôn ngữ .NET do đó nó có thể được dịch ngược. Bạn có thể có một cái nhìn tại Reflector RedGate nếu bạn muốn chi tiêu tiền hoặc dnSpy 0xd4d của (và có, nó cùng một nhà phát triển như DeobDuscator deobDotcator rất nổi tiếng). Mã được biên dịch thực sự gần với mã được mã hóa cứng, logic vẫn giống nhau và bạn có thể sao chép/dán mã nguồn.

Nếu bạn muốn bảo vệ một F # ứng dụng mà bạn có thể cân nhắc sử dụng một obfuscator, & hiện nay họ gần như tất cả các xử lý bởi De4Dot nên thật khó để lựa chọn một cách khôn ngoan, mặc dù .NETGuard thực sự mạnh mẽ, nó có thể xử lý F # ứng dụng, nó có thể sản xuất một bản địa đầu ra & nó có một số bảo vệ liên tục mạnh mẽ và De4Dot không thể xử lý nó.

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