D
Deleted member 1392
Guest
Cấu trúc lưu trữ code VBA trong file Excel
Như trong bài viết ẩn module của vothanhthu (link
Các nội dung được lấy từ nguồn
Trong Excel, chúng ta thường thấy Microsoft sử dụng các định dạng .xlsb, .xlsx, .xlsm... Bản chất của những tệp này là một vùng ZIP được nén lại. Khi giải nén, bạn sẽ có thế truy cập vào file vbaProject.bin, File này mang định dạng Compound File Binary Format (CFBF), và là file chứa toàn bộ thông tin macro của file.
Khi mở file bằng Hex, ta sẽ thấy rất nhiều mã nhị phân khó hiểu. Đây không phải là cấu trúc thật của file, cái các bạn đang thấy chỉ là định dạng nhị phân đang được thể hiện ở dạng nén. Cấu trúc thật của file bao gồm rất nhiều tệp nhỏ (gọi là luồng) trong một tệp lớn vbaProject.bin
Trong các luồng, ta sẽ có một số luồng quan trọng như sau:
PROJECT: Xác định cấu trúc VBA, cấu hình nên GUI của VBA Editor
_VBA_PROJECT: Luồng này chứa cách macro được diễn giải trong VBA Editor
Dir: Chứa bố cục của toàn dự án VBA
Module: Chứa toàn bộ code thực tế mà chúng sẽ được thực thi
Quay trở lại phương pháp ẩn Module được vothanhthu trình bày, việc ta xoá đoạn Module=Module1 trong Hex, thực tế là ta đang tác động đến luồng PROJECT. Như mình đã đề cập ở trên, luồng này cấu hình nên những gì được nhìn thấy trong VBA Editor. Việc bạn việc xoá Module=Module1 sẽ làm biến mất tên Module trong VBA Editor nhưng lại không hề làm mất đi code thực thi. Vì thực tế, code đang được lưu ở luồng Module. Lưu ý, bạn không thể tác động đến module "Thisworkbook" và "ThisDocument".
Qua bài viết chắc các bạn cũng hình dung phần nào cấu trúc của tệp vbaProject.bin. Trong bài viết tiếp theo, chúng ta sẽ tìm hiểu làm sao chúng ta có thể biết được cấu trúc chính xác của một file Excel, Thậm chí là có thể trích xuất code VBA mà không cần mở file, bỏ qua toàn bộ bảo mật của file.
Như trong bài viết ẩn module của vothanhthu (link
Bạn cần đăng nhập để thấy link
), việc khi chúng ta tác động đến file vbaProject.bin sẽ làm có ảnh hưởng đến cấu trúc cũng như code trong VBA, vậy nguyên nhân là do đâu?, chúng ta sẽ cùng tìm hiểu:Các nội dung được lấy từ nguồn
Bạn cần đăng nhập để thấy link
của Microsoft.Trong Excel, chúng ta thường thấy Microsoft sử dụng các định dạng .xlsb, .xlsx, .xlsm... Bản chất của những tệp này là một vùng ZIP được nén lại. Khi giải nén, bạn sẽ có thế truy cập vào file vbaProject.bin, File này mang định dạng Compound File Binary Format (CFBF), và là file chứa toàn bộ thông tin macro của file.
Bạn cần đăng nhập để thấy hình ảnh
Khi mở file bằng Hex, ta sẽ thấy rất nhiều mã nhị phân khó hiểu. Đây không phải là cấu trúc thật của file, cái các bạn đang thấy chỉ là định dạng nhị phân đang được thể hiện ở dạng nén. Cấu trúc thật của file bao gồm rất nhiều tệp nhỏ (gọi là luồng) trong một tệp lớn vbaProject.bin
Bạn cần đăng nhập để thấy đính kèm
Trong các luồng, ta sẽ có một số luồng quan trọng như sau:
PROJECT: Xác định cấu trúc VBA, cấu hình nên GUI của VBA Editor
_VBA_PROJECT: Luồng này chứa cách macro được diễn giải trong VBA Editor
Dir: Chứa bố cục của toàn dự án VBA
Module: Chứa toàn bộ code thực tế mà chúng sẽ được thực thi
Bạn cần đăng nhập để thấy đính kèm
Quay trở lại phương pháp ẩn Module được vothanhthu trình bày, việc ta xoá đoạn Module=Module1 trong Hex, thực tế là ta đang tác động đến luồng PROJECT. Như mình đã đề cập ở trên, luồng này cấu hình nên những gì được nhìn thấy trong VBA Editor. Việc bạn việc xoá Module=Module1 sẽ làm biến mất tên Module trong VBA Editor nhưng lại không hề làm mất đi code thực thi. Vì thực tế, code đang được lưu ở luồng Module. Lưu ý, bạn không thể tác động đến module "Thisworkbook" và "ThisDocument".
Qua bài viết chắc các bạn cũng hình dung phần nào cấu trúc của tệp vbaProject.bin. Trong bài viết tiếp theo, chúng ta sẽ tìm hiểu làm sao chúng ta có thể biết được cấu trúc chính xác của một file Excel, Thậm chí là có thể trích xuất code VBA mà không cần mở file, bỏ qua toàn bộ bảo mật của file.