V 
		
				
			
		vothanhthu
Guest
File code mới nhất, các bạn download tại topic này: 
	
Admin tuhocvba
__________________________
1. Giới thiệu
Tiếp nối và mở rộng 2 chủ đề về bảo mật Code VBA mà mình đã đăng từ các bài đăng trước, nếu bạn nào chưa xem 2 bài viết bảo mật VBA mình đã đăng thì các bạn nên xem lại để có cái nhìn tổng quát về 2 kỹ thuật này trước khi xem bài viết của mình, link mình sẽ để bên dưới:
	
Trong 2 bài viết trước, mình đã hướng dẫn các bạn cách làm thủ công kỹ thuật Unviewable và kỹ thuật ẩn Module bằng cách chỉnh sửa Hex. Lần này, chúng ta sẽ mở rộng vấn đề ra hơn là sẽ tạo ra được một Addin Excel, chỉ cần chọn file cần Unviewable hoặc ẩn module thì code sẽ thực hiện các thao tác chỉnh sửa nhị phân mà không cần chúng ta phải tương tác thủ công. Trong Addin mình đã cố gắng thêm rất nhiều chú thích code giúp mọi người dễ hiểu nhất có thể.
2. Ý tưởng code
Khi chúng ta mở một file bất kì, chúng đều sẽ được lưu tạm thời trong thư mục Temp, cái này chắc các bạn đều biết. Chúng ta sẽ tận dụng thư mục này để tiến hành các thao tác trích xử lý file vbaProject.bin. Các thao tác di chuyển, kiểm tra, lấy thông tin file chúng ta dùng công cụ FSO (FileSystemObject) và dùng Shell để trích file vbaProject.bin trong file gốc của chúng ta ra thư mục Temp để xử lý, sau đó dùng các phương thức đọc, chỉnh sửa nhị phân để chỉnh sửa file vbaProject.bin và cuối cùng cũng dùng Shell để nạp file vbaProject.bin này lại.
3. Toàn bộ code và chú thích code
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
4. Cách sử dụng Addin
	
Các bạn có 2 cách sử dụng Addin:
- Mở trực tiếp lên, chọn các chức năng trong Tab ProtectVBA.
- Add vào như một Addin thông thường để sử dụng lâu dài.
Chọn vào chức năng Khóa Unviewable hoặc Ẩn Module, chọn file cần khóa (Vd: MacroA.xlsb). Chương trình sẽ tạo ra 1 file tương tự thêm tên tương ứng với chức năng khóa (Vd: MacroA_HiddenModule.xlsb) trong cùng thư mục.
Các nguồn tham khảo: Mình tham khảo Code từ bạn Kiều Mạnh, được mình chỉnh sửa, thay đổi code để phù hợp với các phương pháp mà chúng ta đã biết từ 2 bài viết trước của mình. Mình đã cố gắng gắn nhiều chú thích code sao cho bạn dễ hiểu nhất có thể.
	
	
		
			
	
		
	
Hiện Addin đã có thêm rất nhiều tính năng mới, Click vào Lịch sử Update Addin để có thể tải được phiên bản mới nhất nhé !
	
	
		
			
	
	
		
	
Mình sẽ rất vui nếu như chia sẽ của mình đã mang lại thêm cho bạn một kiến thức mới nào đó. Hãy cho mình biết suy nghĩ, thắc mắc của các bạn trong phần trả lời, chúng ta sẽ cùng nhau trao đổi !!
								
	Bạn cần đăng nhập để thấy link
Admin tuhocvba
__________________________
1. Giới thiệu
Tiếp nối và mở rộng 2 chủ đề về bảo mật Code VBA mà mình đã đăng từ các bài đăng trước, nếu bạn nào chưa xem 2 bài viết bảo mật VBA mình đã đăng thì các bạn nên xem lại để có cái nhìn tổng quát về 2 kỹ thuật này trước khi xem bài viết của mình, link mình sẽ để bên dưới:
	Bạn cần đăng nhập để thấy link
 và 
	
	Bạn cần đăng nhập để thấy link
Trong 2 bài viết trước, mình đã hướng dẫn các bạn cách làm thủ công kỹ thuật Unviewable và kỹ thuật ẩn Module bằng cách chỉnh sửa Hex. Lần này, chúng ta sẽ mở rộng vấn đề ra hơn là sẽ tạo ra được một Addin Excel, chỉ cần chọn file cần Unviewable hoặc ẩn module thì code sẽ thực hiện các thao tác chỉnh sửa nhị phân mà không cần chúng ta phải tương tác thủ công. Trong Addin mình đã cố gắng thêm rất nhiều chú thích code giúp mọi người dễ hiểu nhất có thể.
2. Ý tưởng code
Khi chúng ta mở một file bất kì, chúng đều sẽ được lưu tạm thời trong thư mục Temp, cái này chắc các bạn đều biết. Chúng ta sẽ tận dụng thư mục này để tiến hành các thao tác trích xử lý file vbaProject.bin. Các thao tác di chuyển, kiểm tra, lấy thông tin file chúng ta dùng công cụ FSO (FileSystemObject) và dùng Shell để trích file vbaProject.bin trong file gốc của chúng ta ra thư mục Temp để xử lý, sau đó dùng các phương thức đọc, chỉnh sửa nhị phân để chỉnh sửa file vbaProject.bin và cuối cùng cũng dùng Shell để nạp file vbaProject.bin này lại.
3. Toàn bộ code và chú thích code
			
				Mã:
			
		
		
		'Code tham khao: Kieu Manh
'Chinh sua, thay doi code, chu thich lai cho phu hop voi tieu chi de hieu nhat co the: vothanhthu (TuhocVBA.Net)
Option Explicit
Private Sub LockHiddenProject(ByVal strBinaryFile As String, ByVal LockUlock As Boolean)
    If LockUlock Then
        Call ChangeKeys(strBinaryFile, True)
    Else
        Call ChangeKeys(strBinaryFile, False)
    End If
End Sub
Private Function FixPath(ByVal sPath As String) As String
    FixPath = sPath & IIf(Right(sPath, 1) <> "\", "\", "")
End Function
Private Sub ChangeKeys(ByRef strBinaryFile As Variant, ByRef isLockView As Boolean)
    Dim F1 As Long, i As Long, bytTemp As Byte, strTemp As String * 5
    Dim F2 As Long, j As Long, bytTemp1 As Byte, strTemp1 As String * 7
'mo file vbaProject.bin dang nhi phan
If isLockView Then GoSub Read_Binary Else GoSub Hidden_Module 'Neu IsLockView = True thi tien hanh khoa, nguoc lai thi Hidden Module
Read_Binary:
F1 = FreeFile
Open strBinaryFile For Binary Access Read Write As #F1
        Do
            i = i + 1
            Get #F1, i, bytTemp 'Get bytTemp tai vi tri i
            If bytTemp = 67 Or bytTemp = 68 Or bytTemp = 71 Then 'Neu tim den dung cac vi tri 67,68,71 tuong ung la C, D, G thi
                Get #F1, i, strTemp 'Get StrTemp voi vi tri i
                If strTemp = "CMG=""" Or strTemp = "DPB=""" Or strTemp Like "GC=""*" Then GoSub Lock_VBA
            End If
        Loop While Not EOF(F1)
        GoTo Finally
Lock_VBA:
    For i = Loc(F1) + 1 To LOF(F1)
            Get #F1, i, bytTemp
            If bytTemp = 34 Then 'Neu Hex = 34 (")
                    Exit For 'Thoat For
            Else
                    Put #F1, i, CByte(49) 'Tien hanh ma hoa cac ki tu do thanh 1
            End If
    Next
    Return 'Tro lai Change_Binary
Finally:
        Close #F1
Hidden_Module:
F2 = FreeFile
Open strBinaryFile For Binary Access Read Write As #F2
    Do
            j = j + 1
            Get #F2, j, bytTemp1
            If bytTemp1 = 77 Then 'Neu tim thay hex 4D
                Get #F2, j, strTemp1
                If strTemp1 = "Module=" Then
                    For j = Loc(F2) - 6 To LOF(F2)
                        Get #F2, j, bytTemp1
                        Put #F2, j, CByte(10) 'thay the toan bo thanh 0A
                        If bytTemp1 = 13 Then Exit For 'Hex 0D se thoat for
                    Next
                End If
            End If
        Loop While Not EOF(F2)
    Close #F2
End Sub
Private Sub LockHiddenVBA(ByVal FileExcel As String, ByVal isLockView As Boolean)
    Dim Fso As Object, ObjShell As Object, TempPath
    Dim FileName_Path, ZipFile, vbaProject As String
    Dim sPath As String, NewFile As String, OldFile As String
    Dim strFileName, strFileType, strFileNote
    Set ObjShell = CreateObject("Shell.Application")
    Set Fso = CreateObject("Scripting.FileSystemObject") 'Kích hoat cong cu FSO
    If Fso.FileExists(FileExcel) = False Then Exit Sub 'Neu FileExcel khong ton tai se thoat Sub
    sPath = Fso.GetFile(FileExcel).ShortPath                                ''Lay ShortPath cua File
    FileName_Path = FixPath(Fso.GetFile(sPath).ParentFolder)                ''Lay ShortPath cua Folder .. xu ly loi khi Folder la Tieng Viet co dau
    'Khai bao Thong tin Su dung
    TempPath = FixPath(Fso.GetSpecialFolder(2))                             ''Lay duong dan Folder Rac
    vbaProject = TempPath & "vbaProject.bin" 'Lay dia chi cua file vbaProject.bin
    strFileName = Fso.GetBaseName(FileExcel) 'Lay ten FileExcel
    strFileType = "." & Fso.GetExtensionName(FileExcel) 'Lay phan mo rong cua FileExcel
    strFileNote = IIf(isLockView, "_Unviewable", "_HiddenModule") 'Ten phan phia sau name cua FileExcel tuy truong hop
    NewFile = TempPath & strFileName & strFileNote & strFileType 'Set toan bo dia chi cua file moi trong Folder Rac
    OldFile = FileName_Path & strFileName & strFileNote & strFileType 'Set duong dan thuc te cua file moi
    ZipFile = NewFile & ".zip" 'Them .ZIP sau File moi trong Folder Rac
    'Xoa het File cu neu co, tranh loi khong can thiet
    If Fso.FileExists(OldFile) Then Fso.DeleteFile (OldFile)
    If Fso.FileExists(NewFile) Then Fso.DeleteFile (NewFile)
    If Fso.FileExists(ZipFile) Then Fso.DeleteFile (ZipFile)
    If Fso.FileExists(vbaProject) Then Fso.DeleteFile (vbaProject)
    'Copy File Moi
    Fso.CopyFile FileExcel, NewFile, True 'Tao file moi voi duong dan la NewFile
    If Fso.FileExists(NewFile) Then 'Neu Duong dan NewFile ton tai thi
        Fso.MoveFile NewFile, ZipFile
        ObjShell.Namespace(TempPath).movehere ObjShell.Namespace(ZipFile).items.Item("xl\vbaProject.bin")         'Cut File vbaProject.bin Trong *.zip ra ngoai Folder
        Do While ObjShell.Namespace(ZipFile & "\xl\") Is Nothing
            Application.Wait (Now + 0.000005)                               ''Cho xu ly cho toi khi ket thuc sau 0.5 giay
        Loop
        Call LockHiddenProject(vbaProject, isLockView)                       ''Xu ly ma hoa chuoi trong File vbaProject.bin
        ObjShell.Namespace(ZipFile & "\xl\").movehere ObjShell.Namespace(TempPath).items.Item("vbaProject.bin")         'Cut File vbaProject.bin Vao File *.zip
        Do Until Not Fso.FileExists(vbaProject)
            Application.Wait (Now + 0.000005)
        Loop
        Fso.MoveFile ZipFile, NewFile
        Do Until Not Fso.FileExists(ZipFile)
           Application.Wait (Now + 0.000002)
        Loop
        Fso.MoveFile NewFile, FileName_Path
        MsgBox "Khóa thành công Code VBA", 64, "Thông Báo"
    End If
    Set ObjShell = Nothing
    Set Fso = Nothing
End Sub
Sub Lock_vbaProject()
    Dim vFile
    vFile = Application.GetOpenFilename("All Files, *.xls; *.xlsx; *.xlsm; *.xlsb;*.xla; *.xlam") 'Hien bang chon file voi cac dinh dang ho tro
    If TypeName(vFile) = "String" Then Call LockHiddenVBA(vFile, True) 'Neu co chon thi se goi sub LockHiddenVBA voi dang True
End Sub
Sub Hidden_Module()
    Dim vFile
    vFile = Application.GetOpenFilename("All Files, *.xls; *.xlsx; *.xlsm; *.xlsb;*.xla; *.xlam") 'Hien bang chon file voi cac dinh dang ho tro
    If TypeName(vFile) = "String" Then Call LockHiddenVBA(vFile, False) 'Neu co chon thi se goi sub LockHiddenVBA voi dang False
End Sub
	
	Bạn cần đăng nhập để thấy đính kèm
Các bạn có 2 cách sử dụng Addin:
- Mở trực tiếp lên, chọn các chức năng trong Tab ProtectVBA.
- Add vào như một Addin thông thường để sử dụng lâu dài.
Chọn vào chức năng Khóa Unviewable hoặc Ẩn Module, chọn file cần khóa (Vd: MacroA.xlsb). Chương trình sẽ tạo ra 1 file tương tự thêm tên tương ứng với chức năng khóa (Vd: MacroA_HiddenModule.xlsb) trong cùng thư mục.
Các nguồn tham khảo: Mình tham khảo Code từ bạn Kiều Mạnh, được mình chỉnh sửa, thay đổi code để phù hợp với các phương pháp mà chúng ta đã biết từ 2 bài viết trước của mình. Mình đã cố gắng gắn nhiều chú thích code sao cho bạn dễ hiểu nhất có thể.
	Bạn cần đăng nhập để thấy link
	Bạn cần đăng nhập để thấy link
: Thêm tính năng đơn giản code, mở khóa Unviewable, công cụ căn lề Code, fix lỗi.. 
	Bạn cần đăng nhập để thấy link
: Thêm mã hóa code, một tính năng năng mở khóa code