Kỹ thuật ẩn Module - Bảo vệ code VBA

  • Thread starter vothanhthu
  • Ngày gửi
Trạng thái
Không mở trả lời sau này.
V

vothanhthu

Guest
1. Giới thiệu sơ lược về bảo mật
Như các bạn đã biết, viết code VBA trong Excel khó lòng mà bảo mật được, vì các biện pháp bảo vệ VBA thông thường gần như không hiệu quả. Mình đơn cử như việc các bạn hay dùng nhất là bảo vệ code bằng mã VBAProject, mã này rất dễ bị bẻ, 1 chút mẹo nhỏ là phá được. Hay giỏi hơn một chút, bạn có thể Unviewable không cho nhập mật khẩu khi mở khóa VBA, cách này ngày xưa từng là một biện pháp an toàn nhưng giờ thì không. Hiện nay đã có rất nhiều công cụ bẻ được loại khóa này. Hoặc một phần mềm bên thứ 3 như LockXLS, Nhưng đó lại là ở một bài viết khác. Mình lang thang Google và thấy có rất ít bài viết nói về phương pháp bảo mật này. Cho nên hôm nay, mình sẽ giới thiệu với các bạn một phương pháp bảo mật khá mới trong các phương pháp bảo mật hiện nay đó là Kỹ thuật ẩn Module.

2. Cách thức thực hiện phương pháp

Cách thức thực hiện phương pháp này khá đơn giản nhưng lại khá hữu hiệu trong việc bảo mật.
Giả sử mình đang có ở đây là File Book1.xlsb, trong file này mình tạo 1 Module tên Module1, trong Module này mình tạo một Sub Test có chứa 1 msgbox
Bạn cần đăng nhập để thấy hình ảnh

Bước 1: Thoát và Save, bạn chọn file và Rename tên file đó thêm đuôi .ZIP phía sau tên file để ta có thể Bug file này ra.
Bạn cần đăng nhập để thấy hình ảnh

Bước 2: Lên mạng và tải phần mềm mang tên , phiên bản mình đang sử dụng là 2.3.0. Hoặc bạn có thể tải bất cứ phần mềm nào khác có khả năng biên tập Hex. cái này không bắt buộc.

Bước 3: Mở file vừa thêm đuôi .ZIP đó lên, truy cập theo đường dẫn xl/vbaProject.bin để mở file này lên.
Lưu ý: Các bạn không nên giải nén file .ZIP này, mình thấy có một số bài hướng dẫn khi thêm đuôi nén giải nén rồi mới làm, làm xong rồi nén lại. Điều này là không nên vì các bạn nên biết các bạn đang thao tác Bug file Excel và thêm đuôi nén là do ta tự ý thêm vào. Việc các bạn giải nén rồi nén lại sẽ có rất nhiều nguy cơ làm "tèo" luôn file Excel của bạn.
Bạn cần đăng nhập để thấy hình ảnh


Bước 4: Lúc này, bạn Ctrl + F và tìm đến tên các Module có trong file của bạn (file mình có 1 Module tên Module1 nên mình sẽ gõ Module1) nhấn Search All.. Các bạn tìm đến dòng Module=Module1 (ở đây Module1 là tên Module của mình)
Bạn cần đăng nhập để thấy hình ảnh

Bước 5: Đây là bước quan trọng, chổ đoạn chữ Module=Module1 bạn thay thế toàn bộ chuỗi hệ thập lục phân bên trái có chứa vị trí Module thành 0A hết (như file của mình là 4D cho đến 31). Sau đó Save lại chính trong file nén. Nếu trong file nén có tạo thêm File vbaProject.bin.bank thì xóa file đó đi.
Bạn cần đăng nhập để thấy hình ảnh

Bước 6: Bạn lưu file nén đó lại và đổi tên bỏ đuôi .ZIP ra, mở file excel và xem kết quả
Bạn cần đăng nhập để thấy hình ảnh

3. Khả năng bảo mật của phương pháp
Các liên kết của code trong module như Button, Userform... sẽ hoàn toàn hoạt động bình thường.

Việc ta hủy bỏ vị trí của một Module, khi người khác muốn khôi phục lại vị trí Module đó là một việc không hề dễ dàng. Bạn phải biết được chính xác vị trí các byte và tên của Module rồi từ đó điền vào thì Module mới hiện trở lại. Chỉ cần bạn nhập sai một kí tự thì Excel sẽ tạo ra các Module ảo.

Nếu như các bạn có phương pháp nào hay hơn hoặc giải pháp tốt hơn cho phương pháp này thì đừng ngần ngại comment bên dưới chúng ta cùng thảo luận.

Mình là Thứ, Trên đây là những chia sẽ của mình về kỹ thuật ẩn Module tương đối mới trong các phương pháp bảo mật. Hy vọng nó sẽ giúp ích cho bạn trong việc bảo vệ code VBA của mình trước còn mắt của những kẻ tò mò!

Đây là File thực tế, các bạn có thể xem qua:
Nhấn vào để tải về
 
Sửa lần cuối bởi điều hành viên:

tuhocvba

Administrator
Thành viên BQT
Nhận thấy tầm quan trọng của hình vẽ minh họa trong topic này, cho nên tôi xin phép upload ảnh trực tiếp lên host của forum.
Cảm ơn tác giả topic đã có một bài viết trình bày cặn kẽ, dễ hiểu.
Bạn ấy có file như thế này.
Bạn cần đăng nhập để thấy đính kèm


Bạn ấy thêm .zip vào đuôi file.
Bạn cần đăng nhập để thấy đính kèm


Bạn ấy sẽ dùng win hex để chỉnh sửa file .bin như dưới đây:

Bạn cần đăng nhập để thấy đính kèm


Bạn ấy sẽ tìm tới chỗ ghi tên Module:
Bạn cần đăng nhập để thấy đính kèm


Và chuyển hết từ 4D...31 thành 0A
Bạn cần đăng nhập để thấy đính kèm


Sau cùng bạn ấy lưu lại và trả lại đuôi file, bỏ .zip đi.
Kết quả là không còn thấy Module nữa.
Bạn cần đăng nhập để thấy đính kèm


Lời bàn: Chủ trương của diễn đàn là chia sẻ kiến thức, do đó không khuyến khích thành viên dùng nó để ẩn code. Tuy nhiên cũng cần biết cách thực hiện để từ đó tìm cách làm ngược lại, làm sao để cho hiện code lên để tham khảo. Chúc mọi người gặt hái được nhiều kiến thức và luôn có tấm lòng chia sẻ cho cộng đồng như bạn chủ topic đã làm.
 

Thái Phúc

Yêu THVBA
1. Giới thiệu sơ lược về bảo mật
Như các bạn đã biết, viết code VBA trong Excel khó lòng mà bảo mật được, vì các biện pháp bảo vệ VBA thông thường gần như không hiệu quả. Mình đơn cử như việc các bạn hay dùng nhất là bảo vệ code bằng mã VBAProject, mã này rất dễ bị bẻ, 1 chút mẹo nhỏ là phá được. Hay giỏi hơn một chút, bạn có thể Unviewable không cho nhập mật khẩu khi mở khóa VBA, cách này ngày xưa từng là một biện pháp an toàn nhưng giờ thì không. Hiện nay đã có rất nhiều công cụ bẻ được loại khóa này. Hoặc một phần mềm bên thứ 3 như LockXLS, Nhưng đó lại là ở một bài viết khác. Mình lang thang Google và thấy có rất ít bài viết nói về phương pháp bảo mật này. Cho nên hôm nay, mình sẽ giới thiệu với các bạn một phương pháp bảo mật khá mới trong các phương pháp bảo mật hiện nay đó là Kỹ thuật ẩn Module.

2. Cách thức thực hiện phương pháp

Cách thức thực hiện phương pháp này khá đơn giản nhưng lại khá hữu hiệu trong việc bảo mật.
Giả sử mình đang có ở đây là File Book1.xlsb, trong file này mình tạo 1 Module tên Module1, trong Module này mình tạo một Sub Test có chứa 1 msgbox
Bạn cần đăng nhập để thấy hình ảnh

Bước 1: Thoát và Save, bạn chọn file và Rename tên file đó thêm đuôi .ZIP phía sau tên file để ta có thể Bug file này ra.
Bạn cần đăng nhập để thấy hình ảnh

Bước 2: Lên mạng và tải phần mềm mang tên , phiên bản mình đang sử dụng là 2.3.0. Hoặc bạn có thể tải bất cứ phần mềm nào khác có khả năng biên tập Hex. cái này không bắt buộc.

Bước 3: Mở file vừa thêm đuôi .ZIP đó lên, truy cập theo đường dẫn xl/vbaProject.bin để mở file này lên.
Lưu ý: Các bạn không nên giải nén file .ZIP này, mình thấy có một số bài hướng dẫn khi thêm đuôi nén giải nén rồi mới làm, làm xong rồi nén lại. Điều này là không nên vì các bạn nên biết các bạn đang thao tác Bug file Excel và thêm đuôi nén là do ta tự ý thêm vào. Việc các bạn giải nén rồi nén lại sẽ có rất nhiều nguy cơ làm "tèo" luôn file Excel của bạn.
Bạn cần đăng nhập để thấy hình ảnh


Bước 4: Lúc này, bạn Ctrl + F và tìm đến tên các Module có trong file của bạn (file mình có 1 Module tên Module1 nên mình sẽ gõ Module1) nhấn Search All.. Các bạn tìm đến dòng Module=Module1 (ở đây Module1 là tên Module của mình)
Bạn cần đăng nhập để thấy hình ảnh

Bước 5: Đây là bước quan trọng, chổ đoạn chữ Module=Module1 bạn thay thế toàn bộ chuỗi hệ thập lục phân bên trái có chứa vị trí Module thành 0A hết (như file của mình là 4D cho đến 31). Sau đó Save lại chính trong file nén. Nếu trong file nén có tạo thêm File vbaProject.bin.bank thì xóa file đó đi.
Bạn cần đăng nhập để thấy hình ảnh

Bước 6: Bạn lưu file nén đó lại và đổi tên bỏ đuôi .ZIP ra, mở file excel và xem kết quả
Bạn cần đăng nhập để thấy hình ảnh

3. Khả năng bảo mật của phương pháp
Các liên kết của code trong module như Button, Userform... sẽ hoàn toàn hoạt động bình thường.

Khi ta lưu file Excel lại thì chuỗi 0A sẽ bị Excel tự động xóa đi. Việc ta hủy bỏ vị trí của một Module, khi người khác muốn khôi phục lại vị trí Module đó là một việc không hề dễ dàng. Bạn phải biết được chính xác vị trí các byte và tên của Module rồi từ đó điền vào thì Module mới hiện trở lại. Chỉ cần bạn nhập sai một kí tự thì Excel sẽ tạo ra các Module ảo.

Nếu như các bạn có phương pháp nào hay hơn hoặc giải pháp tốt hơn cho phương pháp này thì đừng ngần ngại comment bên dưới chúng ta cùng thảo luận.

Mình là Thứ, Trên đây là những chia sẽ của mình về kỹ thuật ẩn Module tương đối mới trong các phương pháp bảo mật. Hy vọng nó sẽ giúp ích cho bạn trong việc bảo vệ code VBA của mình trước còn mắt của những kẻ tò mò!

Đây là File thực tế, các bạn có thể xem qua
Cái này chỉ ẩn được Module thôi bác nhỉ? Em thử với Form và Class thì lỗi.
 
D

Deleted member 560

Guest
lang thang Google và thấy có rất ít bài viết nói về phương pháp bảo mật này. Cho nên hôm nay, mình sẽ giới thiệu với các bạn một phương pháp bảo mật khá mới trong các phương pháp bảo mật hiện nay đó là Kỹ thuật ẩn Module.
bạn đi copy ở nơi khác về thì cần bổ sung nguồn gốc thông tin vào nhé (nói vậy là bạn tự hiểu, vì tôi biết bạn đã đọc bài viết của tôi).
 

Euler

Administrator
Thành viên BQT
bạn đi copy ở nơi khác về thì cần bổ sung nguồn gốc thông tin vào nhé (nói vậy là bạn tự hiểu, vì tôi biết bạn đã đọc bài viết của tôi).
1. Diễn đàn không cổ vũ viết bài mà không dẫn link tham khảo. Tuy nhiên nếu có tranh chấp -khiếu nại thì bạn nên post bài đúng Box.
Cụ thể là post vào đây:
2. Bạn đang vi phạm luật diễn đàn khi viết một bài viết không có tính thảo luận học thuật trong một Box học thuật. Trong ngày 15/12/2019, BQT diễn đàn sẽ xem xét và đánh giá mức độ vi phạm cũng như những đóng góp của bạn đã giành cho diễn đàn, từ đó đưa ra mức kỷ luật phù hợp. Vậy trân trọng thông báo để bạn biết.
 
V

vothanhthu

Guest
bạn đi copy ở nơi khác về thì cần bổ sung nguồn gốc thông tin vào nhé (nói vậy là bạn tự hiểu, vì tôi biết bạn đã đọc bài viết của tôi).
Mình không copy của bạn! Bạn vui lòng xem phần giải quyết khiếu nại giúp mình !
 

thaipv

Mod
Thành viên BQT
Một hướng mới có thể sẽ giúp bảo vệ mã nguồn vba an toàn hơn rất nhiều là sử dụng phương pháp Inject Shellcode (được các hacker rất ưa chuộng).

Đây là 1 link như thế :
Câu hỏi : Làm sao để chuyển code vba thành những số (shellcode) như vậy ?

Các bạn thử nghiên cứu xem nhé. Ai biết thì chỉ cho tôi với.

Lưu ý : Ở đây tôi chỉ muốn bàn về vấn đề bảo mật, không bàn về hack nhé !
 
Sửa lần cuối:
V

vothanhthu

Guest
Bạn xem có cách nào ẩn nốt class với UserForm cho đủ bộ đi ^^
Lúc trước mình mò nhiều, giờ công việc hơi nhiều nên Mình hơi ích thời gian nghiên cứu. Chỉ còn Share, Nhưng sẽ cố gắng tìm hiểu
 
Sửa lần cuối bởi điều hành viên:
T

thanhphong

Guest
Một topic hay và bổ ích. Nếu suy nghĩ sâu thêm, làm sao để ẩn cả project bao gồm class, US thì triệt để hơn.
 

PeterVu

Yêu THVBA nhất
Giả sử có người sử dụng phương pháp này ở mức chuyên sâu hơn, rồi Macro họ ghi theo kiểu mở file là tự động thực hiện chương trình (mờ ám) nào đó thì hậu quả có lường trước được không nhỉ? Mình muốn nhấn mạnh ở đây là mặt trái của phương pháp này để ta suy xét xem có nên chia sẻ nó như 1 kiến thức phổ thông không.
 
V

vothanhthu

Guest
Giả sử có người sử dụng phương pháp này ở mức chuyên sâu hơn, rồi Macro họ ghi theo kiểu mở file là tự động thực hiện chương trình (mờ ám) nào đó thì hậu quả có lường trước được không nhỉ? Mình muốn nhấn mạnh ở đây là mặt trái của phương pháp này để ta suy xét xem có nên chia sẻ nó như 1 kiến thức phổ thông không.
Mình có nhấn mạnh rất rõ, đây là một bài viết chia sẽ kiến thức, nó không phải một bài viết hướng dẫn cho bạn làm việc ác như hack hay "bơm" mã độc và mình tuyệt đối không khuyến khích những hành động đó. Excel luôn có chức năng cảnh báo, ngăn chặn Macro khi tiến hành mở file co thực thi Macro. Không một code VBA nào có thể tự ý mở Enable Macro lên được. Việc thực sự có người nào đó "bơm" mã độc Macro vào file excel, rồi bạn mở lên dính độc thì nó tương tự như việc bạn thực thi một tiệp virut .exe trên mạng về vậy. Bạn đâu biết trong file .exe đó có Virut hay không nếu như bạn không quét Virut, kiểm tra nguồn. Việc bảo vệ bản thân phải do chính chúng ta tự làm chủ.

Bài viết mình chỉ hướng dẫn mọi người ẩn Module, nếu như có sự kiện Open tại Thisworkbook có chứa gọi Sub gì đó mà ta lại không thấy Code đó đâu thì ít ra các bạn đã biết là họ đã ẩn Module đó đi rồi mà có biện pháp phòng ngừa. Nếu như không có bài viết của mình, các bạn sẽ không biết được họ làm gì cái code đó cứ thế mà sài, thế mình thấy còn nguy hiểm hơn.

Mình cũng nói luôn là kỹ thuật ẩn module này thật sự là có thể bẻ được chứ không phải là không.

Kiến thức luôn luôn có 2 mặt. Giống như bạn học luật thì bạn có thể trở thành một luật sư giỏi hoặc cũng có thể bạn sẽ là một người chuyên đi "lách luật" để thực hiện những mục đích cá nhân. Nhưng mình tin một khi kiến thức đã được nhân rộng ở mức độ phổ thông, ai cũng biết thì nó không còn là cách để các Hacker có thể sử dụng để tấn công nữa. Vì ai cũng biết thì dùng cũng không có tác dụng. Vì vậy, Mình mong tất cả các bạn đọc được bài viết của mình sẽ biết vận dụng những gì mình chia sẽ vào mục đích chính đáng như mong muốn của mình cũng như của @tuhocvba
 
Sửa lần cuối bởi điều hành viên:

tuhocvba

Administrator
Thành viên BQT
Nói chuyện thì nên có lập luận, có chứng cớ. Cứ ngồi đấy tưởng tượng rồi phát ngôn ra thì nghe rất giáo điều.
Ví dụ: Không nên mua bán và sử dụng xe máy. Thử tưởng tượng người có ý đồ xấu họ có phương tiện xe máy thì gây án sẽ rất nhanh so với việc họ đi bộ.

Hoặc: Không nên mua bán dao kéo. Thử tưởng tượng người có ý đồ xấu họ có dao kéo trong tay thì nếu đâm vào ai hậu quả sẽ rất lớn.

Cần phân biệt phương tiện và mục đích. Phương tiện thì không có gì xấu cả. Mọi người nên học hỏi để có phương tiện trong tay. Còn việc sử dụng phương tiện vào mục đích tốt hay xấu thì phương tiện không quyết định được. Tự bản thân người ta đã muốn làm điều xấu, thì bằng cách này hay cách khác, họ vẫn cứ tiến hành làm cho dù là không có phương tiện A hay phương tiện B.

Tôi không muốn các bạn đi vào tranh luận vô bổ là nên hay không nên phổ biến kiến thức này hay không. tuhocvba.net cũng không phải là cái rốn của vũ trụ. Nếu không đọc ở đây thì cũng đọc ở nơi khác. Việc mọi người sử dụng nó như thế nào đó là quyền của mọi người, cũng như internet nếu biết dùng thì rất tốt, còn nếu không biết dùng thì hậu quả cũng rất lớn, nhưng không vì thế mà người ta cấm internet.
Mỗi người tự chịu trách nhiệm về hành vi của bản thân.

Tất cả các bài viết tranh luận về việc kiến thức nào là nên hay không nên phổ biến sẽ xóa mà không cần báo trước. Kiến thức nào cũng cần phổ biến. Đọc hay không là quyền của mọi người.
 
V

vothanhthu

Guest
@tranhungkcn Bạn cho mình biết cụ thể là bạn làm đến bước số mấy file excel bạn lưu không dc. Lưu không dc là không dc như thế nào?, bị lỗi hay sao, bạn vui lòng chụp màn hình lỗi đó lên mình xem.
 

tuhocvba

Administrator
Thành viên BQT
Thôi, người ta nếu cần thì sẽ có thông tin cụ thể.
Bạn ơi sao mình làm không được.
Hiện trạng: Mình làm như thế này (tái hiện lại thao tác).
Bị lỗi như thế này: Ảnh về lỗi.

Đằng này chỉ là một câu nói bâng quơ, không được. Không được như thế nào, có cần mọi người giúp không-không thấy nói. Cho nên không cần mất thời gian với bài viết như vậy.
 

kenjytai

Yêu THVBA
Kỹ thuật này sử dụng cho excel 2003 không được phải ko bạn
"Bước 3: Mở file vừa thêm đuôi .ZIP đó lên, truy cập theo đường dẫn xl/vbaProject.bin để mở file này lên." file .bin excel 2003 ko có
 

tranhungkcn

Yêu THVBA
Xin lỗi mọi người vì đến bây giờ mới quay lại câu hỏi này, do bữa trước thử xong, gặp trục trặc mà bận việc khác nên gác lại luôn.
Thực ra nếu ẩn 1 module thì không sao, nó sẽ chỉ hiện lên "The project profile xxx(tên file) contain invalid key..... continue load project" , yes là chạy bình thường.
Nhưng nếu ẩn 2 module, thì khi lưu file nó sẽ báo "document not saved"
mình không biết cách chèn hình ảnh, nhưng nội dung thông báo mình ghi lại đầy đủ như vậy, chắc mọi người cũng hình dung được rồi
 
Trạng thái
Không mở trả lời sau này.
Top