Bảo mật Code VBA như thế nào là tốt nhất?

  • Thread starter vothanhthu
  • Ngày gửi
V

vothanhthu

Guest
Bài viết được viết đựa trên những gì Thứ hiểu và biết về thế giới bảo mật code VBA. Bảo mật mạnh hay yếu là do khả năng mỗi người, nên mọi nội dung mang tính chủ quan của Thứ. Các bạn đọc làm tư liệu tham khảo, rồi từ đó nghiên cứu để tìm được phương pháp bảo mật code tốt nhất cho bản thân mình. Oke, chúng ta bắt đầu nào !.

Khi ta lập trình một chương trình, một Tool VBA là cả một công sức, quá trình đầu tư chất xám, bảo vệ chất xám là một nhu cầu không thể chối cãi được trong xã hội nói chung và trong lập trình VBA nói riêng. Do đó, Thứ xin phép được tổng hợp lại các phương pháp bảo mật VBA trên thế giới hiện vẫn đang sử dụng. Trong bài viết, chúng ta đi từ cấp độ bảo vệ thấp đến cao cho dễ hình dung!
1. VBAProject
Phải nói, đây là cấp độ bảo mật đơn giản, sơ khai nhất trong VBA. Nó nằm sẵn trong các chức năng bảo mật của VBA trong Excel
Bạn cần đăng nhập để thấy đính kèm

2. Unviewable
Đây là cấp độ bảo mật cực kì thông dụng. Phương pháp này sẽ mã hóa một số Byte làm cho ta không thể mở được dự án VBA để xem được code bên trong. Phương pháp này cũng cũng có rất nhiều cách thực hiện, mỗi cách sẽ lại cần một vài biến hóa nếu như muốn mở khóa.
Bạn cần đăng nhập để thấy đính kèm

3. Mã hóa code (Encrypt code)
Đây là phương pháp được dùng để mã hóa các tên, biến có thể đổi tên được thành các chuỗi kí tự cực kì khó hiểu, việc này làm cho việc đọc và hiểu code trở nên cực kì khó khăn. Thứ xếp phương pháp này tốt hơn Unviewable là bởi vì, code được mã hóa mặc dù có thể replace nhưng việc đọc để hiểu là rất mệt...
Bạn cần đăng nhập để thấy đính kèm

4. Ẩn Module

Đây là phương pháp sẽ ẩn toàn bộ Module (chỉ Module, không bao gồm Class Module và UserForm) trong dự án VBA. Về mặt tổng thể, phương pháp này khá khó để mở khóa vì cần biết chính xác tên các Module, nếu như gặp người ẩn Module có năng lực ẩn luôn mọi nguồn xem tên Module sẽ là cực kì khó khăn khi bạn muốn hiện Module lại.

Cả 3 phương pháp bảo mật trên đều nằm trong do Thứ viết, các bạn có thể xem tại
Bạn cần đăng nhập để thấy hình ảnh

5. Tạo file Exe cho VBA
Đây là phương pháp được dùng để nén một file Excel vào trong một file .Exe. Phương pháp này bắt buộc dùng phần mềm bên thứ 3 để thực hiện việc nén, khi tạo ra file .exe thì không cần phần mềm bên thứ 3 vẫn mở được bình thường chỉ cần có Excel . Khi chạy file .exe, file excel sẽ được giải nén và mở lên như một file excel thông thường nhưng không thể xem dự án VBA bên trong (mất hoàn toàn dự án VBA trong file). Khi Save as vẫn sẽ tạo ra file .exe luôn.
Bạn cần đăng nhập để thấy đính kèm

6. Lập trình DLL cho VBA
Đây có thể nói là phương pháp bảo mật cao nhất tính đến thời điểm hiện tại. Toàn bộ Code chủ đạo của bạn sẽ nằm trong file DLL, khả năng bảo mật như thế nào là do file DLL ấy quyết định. Do khả năng bảo mật của code phụ thuộc hoàn vào DLL, cho nên ngôn ngữ viết ra file DLL đó là cực kì quan trọng quyết định khả năng bảo mật. Thứ sẽ xếp loại chúng lần lượt từ thấp đến cao như sau:
6.1. VB6 cho VBA
Đây là ngôn ngữ láng giềng với VBA, cấu trúc code nhìn chung là rất giống nhau, nên lập trình DLL trên VB6 cho VBA là cực kì dễ dàng. Thứ cũng có một bài viết nói về lập trình DLL cho VBA trên VB6 tại , các bạn có thể ghé qua đọc nha. Trong bài viết mình cũng nói rất rõ, VB6 chỉ hỗ trợ nền tảng 32bit và đã bị Bác Bill ngưng hỗ trợ từ năm 1998 nên khả năng bảo mật phương pháp này chỉ trên ẩn Module và Exe cho VBA một chút.

6.2. VB.NET cho VBA
Khác với VB6, VB.Net được Bác Bill chăm sóc rất kỹ và vẫn còn đang được phát triển tính đến thời điểm hiện tại. VB.Net hỗ trợ đa nền tảng từ 32bit cho đến 64bit. Cấu trúc VB.Net và VB6 có nhiều điểm tương đồng, không quá giống nhau nhưng cũng không quá khó để làm quen nếu như các bạn đã quen với cấu trúc VB6. Nếu như bạn đã hiểu cách viết DLL cho VBA trên VB6 thì việc viết DLL trên VB.Net là tương đối dễ. Khả năng bảo mật khi viết DLL trên VB.Net là cao hơn nhiều so với VB6

6.3. C/C++ cho VBA
Đây là ngôn ngữ viết DLL cho VBA cực kì tốt. Một file DLL viết bằng C/C++ sẽ cho ra khả năng bảo mật cao, rất khó dịch ngược. Tuy nhiên, hạn chế là về cấu trúc của C/C++ hoàn toàn khác so với VBA. Học C/C++ so với VBA chẳng khác gì việc ta đang người Việt Nam mà học Tiếng Trung Quốc. Đó là hạn chế lớn khi viết C/C++ cho VBA, nhưng đổi lại là khả năng bảo mật tuyệt vời của nó.

6.4. Delphi cho VBA
Tương tự như viết C/C++ cho VBA. Bảo mật cao, nhưng cấu trúc code khác hoàn toàn VBA.

Vậy theo bạn, đâu là phương pháp bảo mật tốt nhất?, hãy cho mình biết qua phần thảo luận nhé !
Hy vọng bạn đã có được những kiến thức bổ ích từ bài viết Thế nào là bảo vệ code VBA tốt nhất ?
 
Sửa lần cuối bởi điều hành viên:

minhtungph

Thành viên mới
phần 6. cho mình nêu lên 1 suy nghĩ hạn hẹp của mình, vb6 sau khi biên dịch ra dll thì nó là dạng hợp ngữ, thứ duy nhất có thể dịch ngược nó là , tuy nhiên nó chỉ dịch được code trong form, còn code trong module hoặc class thì nó chỉ dịch ra dạng mã máy nên việc dịch ngược ra code vb6 gốc viết trong dll đó gần như không thể, còn với dll viết trên .net (C# hoặc VB.net) nếu không dùng thêm mã hoá của bên thứ 3 để tạo dll thì chỉ cần 1 phần mềm free là có thể dịch ngược được ra code gốc luôn, riêng về delphi thì các form vẫn dịch ra được, chỉ những code viết trong các unit mới ko dịch được.
 

NhanSu

Thành Viên Nổi Bật

Trước đây mình cũng hay mày mò mấy thứ dịch ngược này nhưng chỉ đọc và làm được vài thứ cơ bản thôi. VB6 có 2 kiểu biên dịch thành p code hoặc native code. Native code là mã máy (không phải hợp ngữ nhé, bạn @minhtungph đang lẫn lộn 2 khái niệm này), pcode là mã giả. Khi chạy chương trình thì vb sẽ chuyển pcode (nếu đang là pcode) thành native code rồi chạy. Cả hai loại biên dịch này đều chứa các lệnh gọi đến file thư viện của vb6 là msvbvm60.dll
Dịch ngược native code sẽ khó hơn pcode. Các ngôn ngữ .NET do được dịch ra mã trung gian nên cũng dễ bị dịch ngược. Delphi hay C++ dịch ra mã máy nên khi dịch ngược sẽ ra hợp ngữ Assembly.
 

minhtungph

Thành viên mới
Trước đây mình cũng hay mày mò mấy thứ dịch ngược này nhưng chỉ đọc và làm được vài thứ cơ bản thôi. VB6 có 2 kiểu biên dịch thành p code hoặc native code. Native code là mã máy (không phải hợp ngữ nhé, bạn @minhtungph đang lẫn lộn 2 khái niệm này), pcode là mã giả. Khi chạy chương trình thì vb sẽ chuyển pcode (nếu đang là pcode) thành native code rồi chạy. Cả hai loại biên dịch này đều chứa các lệnh gọi đến file thư viện của vb6 là msvbvm60.dll
Dịch ngược native code sẽ khó hơn pcode. Các ngôn ngữ .NET do được dịch ra mã trung gian nên cũng dễ bị dịch ngược. Delphi hay C++ dịch ra mã máy nên khi dịch ngược sẽ ra hợp ngữ Assembly.
đúng như bạn nói đấy, trong vb6 1 khi ứng dụng đã packed rồi thì decompiler sẽ không đọc được, lúc đó chỉ có thể dùng onlly để đọc ra mã máy, nhưng tới cái này thì các chuyên gia bảo mật đọc được nó chỉ để crack phần mềm (tức là chuyển giới hạn thời gian thành vĩnh viễn dựa vào 1 lỗ hỏng nào đó) chứ việc dịch được code và viết lại gần như ko thể
 

minhtungph

Thành viên mới
@minhtungph vậy bạn có cách nào hay không ?
Hiện tại mình chuyển tất cả code VBA sang VB6 để xuất ra dạng dll, kiểu này 99% không thể bẻ khóa được, chỉ trừ 1% các chuyên gia, mà với chuyên gia thì code của mình chỉ là con muỗi, còn việc học delphi thì có anh Nguyễn Duy Tuân dạy, mình cũng có học 1 thời gian, nhưng ngẫm lại chỉ để bảo mật mà học Delphi thì quá phí thời gian, vì Delphi nó khác hoàn toàn với VBA và VB6, nó là 1 ngôn ngữ cấp cao, ai ko rãnh hướng đối tượng thì học vào như vịt nghe sắm, và Delphi nó rất rộng lớn , mảng dll cho Excel cũng chỉ là hạt cát trong đó, nên có lẽ mình sẽ an phận với Vb6, đơn giản, dễ dùng, gần gửi với VBA, với lại nó là ngôn ngữ cổ đại nên rất ít được hacker dòm ngó, kaka
 

NhanSu

Thành Viên Nổi Bật

Đối với chúng ta có lẽ việc viết lại chương trình có tính năng tương tự còn dễ dàng hơn nhiều. Mình thì không có code cần bảo mật nhưng đang tìm hiểu C# thấy tốc độ tính toán nhanh hơn Excel nhiều.
 

Anh

Thành viên mới
Hiện tại mình chuyển tất cả code VBA sang VB6 để xuất ra dạng dll, kiểu này 99% không thể bẻ khóa được, chỉ trừ 1% các chuyên gia, mà với chuyên gia thì code của mình chỉ là con muỗi, còn việc học delphi thì có anh Nguyễn Duy Tuân dạy, mình cũng có học 1 thời gian, nhưng ngẫm lại chỉ để bảo mật mà học Delphi thì quá phí thời gian, vì Delphi nó khác hoàn toàn với VBA và VB6, nó là 1 ngôn ngữ cấp cao, ai ko rãnh hướng đối tượng thì học vào như vịt nghe sắm, và Delphi nó rất rộng lớn , mảng dll cho Excel cũng chỉ là hạt cát trong đó, nên có lẽ mình sẽ an phận với Vb6, đơn giản, dễ dùng, gần gửi với VBA, với lại nó là ngôn ngữ cổ đại nên rất ít được hacker dòm ngó, kaka
Chuyển bằng cách nào bạn chỉ cho mình với.Xin cảm ơn
 

Kieu Manh

Thành viên mới
Các bạn rảnh nên học 1 tools gì đó mà Viết *.DLL Or *.Xll ... Viết code vào đó xong làm thủ tục khai báo từ Excel mà sử dụng cho nó an toàn
Tôi rảnh tôi học Delphi viết 1 cái Thư viện hàm chung nhất xong khi cần từ Excel cứ thế mà gọi là xài thôi
Các bạn ở đây chắc cũng ko lạ gì mình cả ... cứ qua GPE cái nick mới Kiều Mạnh ( có dấu ... còn Nick cũ kieu manh không dấu ) tìm bài là biết

Hiện Mình Đang viết cái Add-Ins SQL cho Excel + Access + Sever chưa xong hết ..khi nào xong Úp tặng cho ai đó cần mà xài

VB6 viết DLL cũng rất dễ đó ... Viết 1 File DLL duy nhất chạy chung cho Officex32 và X64 đấy sẻ có người cho mình nói xạo ... nếu ko tin qua GPE lục là ra nhé
 
Sửa lần cuối:

Yukino Ichikawa

Thành viên
@Kieu Manh : Tôi nghĩ tiếp cận bằng VBNet thì thuận lợi hơn so với Delphi. Với người đang code VBA thì họ có thể tận dụng các kiến thức đang có và tiếp cận với VBNet rất nhanh.
Nếu là lập trình tạo addin XLL thì trên diễn đàn cũng đã có một topic hướng dẫn cơ bản:

Về Tool Add-Ins SQL cho Excel + Access + Sever : Tôi nghĩ đây là Tool không mới nhưng là chủ đề mới. Nếu như bạn có thể tạo dựng dược một chủ đề hướng dẫn cặn kẽ từng bước để mọi người tự xây dựng được một tool như thế thì rất có ý nghĩa.
Mong chờ bài viết của bạn dù là ở trên diễn đàn nào đi nữa. Bởi sự đóng góp ấy là đóng góp chung cho cộng đồng VBA Việt Nam.
 

USA_Covid19

Thành viên tích cực
Bảo vệ bằng cách này được không các bạn !
Bạn cần đăng nhập để thấy đa phương tiện
Link Test:
Hướng dẫn:
Bạn cần đăng nhập để thấy hình ảnh


b1: Chạy file Unlock.xll theo phiên bản office nhấn send code lên đây mình cung cấp key nhé !
b2: Nhập key nhấn ok và file protected sẽ dc mở các bạn thử hack code được không nhé !

*Folder gồm 5 file:
Bạn cần đăng nhập để thấy hình ảnh


-2 file Unlock dùng cho phiên bản office 32 và 64 bit có chức năng mở file LayDL-Protected.xlsb (là file chứa code VBA được bảo vệ) !
-File Dulieu.xlsm dùng để test khi mở file protected để lấy dữ liệu từ bên ngoài (xem video để rõ hơn).
-File keycode.bin chứa thông tin mã hóa cần để mở file protected nên không dc thay đổi !
-File protected được bảo vệ bằng mật khẩu mở !
*Thực tế chỉ cần 3 file là đủ: file.bin, file excel cần bảo vệ code VBA và file Unlock.xll .
*Lưu ý file Unlock.xll có yêu cầu kích hoạt khi mở là tính năng bảo mật cấp phép sử dụng cho sản phẩm !
*Đây là chương trình demo mang tính chất thử nghiệm mong các bạn góp ý !
 
Sửa lần cuối:

tuhocvba

Administrator
Thành viên BQT
Tôi đọc cả bài viết #12 không hiểu đang nói cái gì. Hãy sơ đồ hóa câu chuyện của bạn bằng hình ảnh cho dễ hiểu hơn thì tốt.
 

Ngày Mới

Thành viên tích cực
Theo tôi hiểu thì cách bảo mật của bạn sẽ có cấu trúc như sau:
Bạn cần đăng nhập để thấy hình ảnh

Vậy vấn đề thực tế đặt ra cho người dùng khi dùng cách bảo vệ này:

1. Làm sao để người dùng chỉ cần có 1 Tool, chọn File là nó có thể tự động tạo ra tất cả các file bảo mật này?.

2. Về việc thông qua Key để mở khóa: Nếu người dùng đã mở khóa một lần rồi thì những lần sau có cần phải nhập lại mã mở khóa không?.

3. Nếu người dùng có nhu cầu di chuyển, chỉnh sửa file thì phải bắt buộc di chuyển cả 3 file này đi, như vậy thay vì lưu 1 file giờ ta phải lưu đến 3 file, tức gấp 3 lần, nếu có nhiều file cần bảo mật thì sẽ là vấn đề ta cần xem lại.

4. Nếu trong quá trình sử dụng, người dùng lỡ tay xóa mất file Unlock hoặc KeyCode.bin thì phải làm sao?.
 
Sửa lần cuối:

USA_Covid19

Thành viên tích cực
@Ngày Mới mình giải đáp như sau:
1.1 tool tạo ra file bảo mật như video mình nêu ToolProtect.exe.
2. Lần sau ko cần nhập trên máy đó nữa nhưng qua máy khác cần phải dk như ban đầu ! Đây là tính năng cấp phép sử dụng file nhằm cấm người khác mở file.
3.Nhiều file thì chỉ cần file. bin + file unlock+ các file Protected.
4.Lỡ xóa hai file này có thể tạo lại như file bin có thể tạo lại từ phần mềm Toolprotect.exe , file unlock có thể tải lại từ đây !
 

USA_Covid19

Thành viên tích cực
Key Dùng 1 ngày : RWONS-PSPVM-HIFDY-WB5RS-WWU5O-VY/YP-OGIM8-MYLM5
Key full:Q1FPD-ZH3ML-K4SD+-/93MS-WWU5O-VY/YP-OGIM8-MYLM5
Mã máy : 45WQW-FDGNI-RTSTL-UAFED
 
Sửa lần cuối:

USA_Covid19

Thành viên tích cực
-Đơn giản hơn mình chỉ tạo 2 file: 1 file đã khóa bằng password open và 1 file Unlocker.xll để mở nó lên file này mình đã bỏ đăng kí các bạn chạy thử nhé !
-link:
-Lưu ý các file excel đang mở sẽ bị đóng trước và sau khi đóng file unlocker.xll nhé !
 

Ngày Mới

Thành viên tích cực
Bị lỗi giống addin lần trước à @USA_Covid19 . Khi mình nhấn nút "Lấy dữ liệu" và Cancel đi thì nó hiện một form ảo tên "Tuhocvba.Net" và không tắt được. Khi còn form đó mà đóng file thì sẽ hiện ra bảng mật khẩu Open. Không nhập pass, nhấn đóng luôn file thì form đó vẫn hiện.
Bạn cần đăng nhập để thấy hình ảnh

Hình 1: Đây là hình ảnh về form ảo hiện ra khi nhấn Cancel nút "Lấy dữ liệu"

Bạn cần đăng nhập để thấy hình ảnh

Hình 2: Đây là hình ảnh sau khi đóng file File_Protected.exe

Bạn cần đăng nhập để thấy hình ảnh

Hình 3: Đây là hình ảnh khi đóng toàn bộ file
 

USA_Covid19

Thành viên tích cực
@Ngày Mới vì file unlocker.xll chạy song song nên nó hiện form đó để bạn có thể đóng file excel. Lỗi khi đóng file vẫn hiện mật khẩu cái này mình chưa khắc phục được bạn có thể lưu file bằng ctrl s và đóng file băng form nhé ! Cám ơn bạn đã góp ý còn vấn đề bảo mật code vba bạn thấy thế nào ?
 
Top