Bảo vệ mã nguồn C#

Ứng dụng C# luôn phải đối mặt với nguy cơ bị dịch ngược (reverse engineering). Hacker có thể xem code C# để tìm lỗ hổng, thông tin nhạy cảm như chuỗi kết nối (connection string), mật khẩu, hoặc tệ hơn là cơ chế xác thực license key của ứng dụng. Để ngăn chặn tình trạng này, ta dùng phương pháp làm rối mã (obfuscation) nhằm xáo trộn code C#.

Có rất nhiều công cụ dịch ngược code C#. Nổi bật nhất là ILSpy. Đây là ứng dụng nguồn mở, kích thước nhỏ và giao diện đơn giản.

ILSpy

Công cụ dịch ngược nổi tiếng khác là JustDecompiler của Telerik. Chương trình này tuy miễn phí nhưng phải cài đặt rườm rà. Telerik cũng tranh thủ quảng cáo để dụ người dùng mua sản phẩm khác của hãng. Do vậy, tôi chẳng bao giờ dùng JustDecompiler dù có nhiều người bảo nó tốt.

Rõ ràng, ứng dụng .NET nếu không giấu code thì rất dễ bị hack. Do vậy, trước khi tung sản phẩm thị trường, ta nên dùng obfuscator để che cái code. Obfuscator cũng đa dạng như trình dịch ngược, có phí lẫn miễn phí. Theo tâm lý chung, hễ ứng dụng liên quan đến bảo mật thì người ta chuộng nguồn mở hơn vì code có thể được kiểm tra bởi cộng đồng. Obfuscator tôi thường dùng tên là ConfuserEX.

ConfuserEX

Đầu tiên, ta kéo assembly vào thẻ Project. Tiếp theo, ta chuyển qua thẻ Settings và chọn tên assembly ở khung bên trái. Nhìn sang phải danh sách Rule, ta thấy một dải các nút. Ta bấm nút dấu cộng để thêm Rule mới. Sau đó, ta bấm nút hình cây viết để chỉnh Rule này. Trong hộp thoại mới hiện ra, ta chọn mức độ làm rối trong mục Preset. Mức Minimum chỉ xáo trộn một phần nhỏ của code, còn mức Maximum sẽ xáo trộn toàn bộ code. Sau khi chọn xong, ta nhấn nút Done. Cuối cùng, ta chuyển sang thẻ Protect! và nhấn nút Protect!. Lúc này, ConfuserEX sẽ xáo trộn code C# và sinh ra một assembly mới. Nếu dùng ILSpy để xem cái assembly này, ta thấy nội dung bị làm rối tùy theo mức độ đã chọn trong phần Preset.

Làm rối mã sẽ làm nản chí hacker khi chúng cố dịch ngược ứng dụng, nhưng nó không đảm bảo an toàn 100%. Nếu đủ độ “trâu”, hacker vẫn tìm ra cách để quậy phá. Bảo mật không bao giờ là tuyệt đối. Do vậy, làm rối mã không loại bỏ nguy cơ bị hack, mà chỉ hạn chế tối đa nguy cơ này.