Tôi nghĩ rằng tôi hơi bối rối về việc biên dịch mã byte byte thành mã gốc hoặc có thể tôi đã nhầm lẫn về kết quả cuối cùng. Vì vậy, xin vui lòng chịu với tôi khi tôi cố gắng để sắp xếp thông qua những gì tôi nghĩ rằng tôi hiểu để bạn có thể giúp tôi tìm ra những gì tôi đang mất tích.Biên dịch C# thành Gốc?
Điều tôi muốn làm là biên dịch đơn đăng ký bằng C# xuống mã gốc thường dùng như tôi đã nhận được nếu tôi đã viết nó trong C. Lý do của tôi không liên quan gì đến hiệu suất, mà là một số mức độ bảo vệ. Tôi hiểu rằng mục tiêu cuối cùng của tôi không phải là không thể (hoặc thậm chí thực sự khó khăn) để phá vỡ, nhưng tôi chỉ cảm thấy như đảo ngược lắp ráp x86 là khó khăn hơn so với đảo ngược những gì Reflector mang lại cho tôi.
Ngay bây giờ nếu tôi ném ứng dụng C# vào Reflector, về cơ bản tôi sẽ lấy lại mã nguồn của mình. Thông thường khi tôi ném các ứng dụng C/C++ không được quản lý của mình vào IDAPro và sử dụng trình giải mã HexRays, tôi không hoàn toàn có được mức độ giải mã ngược lại và tôi phải sử dụng công cụ tháo gỡ x86 để hiểu luồng logic. Đó là sự hiểu biết của tôi rằng sự giải mã tuyệt vời như vậy đến từ Reflector do ứng dụng đang ở trong MSIL thay vì mã nguồn gốc thô tục hơn mà HexRays cố gắng dịch ngược.
Tôi không có lo ngại về máy khách vẫn cần .NET. Tôi không cố gắng phá vỡ bất kỳ điều nào. Tôi muốn chạy các chương trình obfuscation phần mềm bình thường như upx
trên chương trình của tôi, và thực hiện nó dưới dạng nhị phân .NET.
Đó là sự hiểu biết của tôi từ this câu hỏi liên quan mà ngen
làm những gì tôi muốn. Tôi đã thử sử dụng ngen
. Nhưng sau khi sao chép các tập tin đầu ra từ thư mục C:\Windows\assemblies\...\applicationName.ni.exe
đến một nơi nào đó tôi có thể nhấp đúp chuột, và cố gắng để chạy nó tạo ra một lỗi về nó không phải là "một ứng dụng Win32 hợp lệ". Hơn nữa, khi tôi quăng các applicationName.ni.exe
vào Reflector, tôi nhận được cùng một đầu ra như tôi đã làm từ chỉ applicationName.exe
. Kể từ khi applicationName.ni.exe
được coi là mã gốc, tôi dự kiến Reflector sẽ bị lỗi, nhưng không. Nếu đây là cách tôi phải làm điều này, tại sao Reflector vẫn cho tôi một sự giải mã tuyệt vời như vậy?
Vì vậy, chỉ để tóm tắt câu hỏi chính của tôi một lần nữa: Làm thế nào tôi có thể biên dịch chương trình .NET của tôi thành một nhị phân gốc mà Reflector sẽ không dễ dàng dịch ngược? Hoặc một số phương pháp hay nhất để bảo vệ sản phẩm được viết bằng ngôn ngữ .NET từ kỹ sư đảo ngược newbie là gì?
Nếu tôi cần một công cụ khác, tôi muốn một cái gì đó miễn phí và không giống như Codewall.
Cảm ơn!
CẬP NHẬT: Tôi hiểu rằng những gì tôi đang tìm kiếm có thể giới hạn một số tính năng của ngôn ngữ như Reflection, nhưng tôi nghĩ tôi ổn với điều đó. Không có mã nào của tôi thực hiện bất kỳ lệnh gọi nào rõ ràng Assembly.Load
hoặc bất kỳ thứ gì sắp xếp. Nhưng không phải những người chỉ được thay thế bằng các cuộc gọi GetProcAddress/LoadLibrary
?
Mở mã bảo vệ/obstufactors nhất trong số đó là thương mại và vừa tốn kém nếu bạn không phải là một công ty phát triển phần mềm tuy nhiên ngay cả những tầng trên cùng những người thương mại có thể có tấn vấn đề với mã của bạn thực sự làm việc ngay sau khi nó làm điều đó. –