Chia sẻ Add_ins dùng để mã hóa code VBA (nhằm tạo sự khó đọc cho những kẻ tò mò)

Liên hệ QC
Bạn Copy code đó ở đâu ...của ai thì tốt nhất hỏi người đó ....code két nó nhiều trường phái

Mình là một tay amater hay phá phách ko thể phán được ......ngộ nhỡ phán ẩu gặp đông xưởng hay Hòa thân thì Mình toi Mạng ...Mới sang nay mở mắt dính rồi hết Hồn..!$@!!

Cho mình cáo lỗi và xin rút lui vậy
Sẳn đây bác Kieumanh cho tôi ngoài lề chút nghe. Tôi viết DLL bằng VB6 theo gợi ý của bác thì chạy ngon lành trên Excel 32bit nhưng lại không sử dụng được trên excel 64bit (Trong DLL không hề sử dụng API và bất kỳ thư viện nào khác), bác có kinh nghiệm gì chia sẻ với, chứ cái dự án của mình sắp phá sản rồi (do viết VB6 cho excel 32bit, nhưng khi nhờ người khác test excel 64bit thì không sử dụng được, bản thân chưa test thử nhưng theo sự góp ý của người dùng thì nó báo lỗi ngay những lệnh có sử dụng hàm trong DLL).
 
Sẳn đây bác Kieumanh cho tôi ngoài lề chút nghe. Tôi viết DLL bằng VB6 theo gợi ý của bác thì chạy ngon lành trên Excel 32bit nhưng lại không sử dụng được trên excel 64bit (Trong DLL không hề sử dụng API và bất kỳ thư viện nào khác), bác có kinh nghiệm gì chia sẻ với, chứ cái dự án của mình sắp phá sản rồi (do viết VB6 cho excel 32bit, nhưng khi nhờ người khác test excel 64bit thì không sử dụng được, bản thân chưa test thử nhưng theo sự góp ý của người dùng thì nó báo lỗi ngay những lệnh có sử dụng hàm trong DLL).

Mình nghe nói khi Bạn Viết trên Office64 bạn check Thư viện Office64 thì chỉ chạy trên Office64 ...

Nếu muốn chạy trên 32 thì phải make lại File *dll trên 32 thì phải

Mình cũng ko có Office 64 nên ko biết ...chỉ mò rồi rút kinh nghiệm vậy

Còn viết xài cho 2 Office32 & 64 chạy Ok thì Mình chưa Thử nên không nói lên được điều gì hết

Tham Gia:

Bạn viết trên hai Phiên bản Office 32 & 64 xong Bạn Viết File Setup khi nó chạy Kiểm tra xem 32 hay 64 thì xuất File đó ra ...đó là ý tưởng nhưng khó là làm sao dung code Kiểm tra được Office32 hay 64 ...Nếu Biết dược thì đó là chuyện nhỏ

Chính vì vậy mà một số phần mềm nó có 2 bản 32 và 64...gì gì đó

Bạn thử xem

Lưu ý Nhỏ: Mạnh không học qua trường lớp nào về code két hết ...Tự học vì vậy có phát Biểu nào Nông dân ko lọt tai Mong các bạn vui lòng Next...Chào
 
Lần chỉnh sửa cuối:
Bạn Copy code đó ở đâu ...của ai thì tốt nhất hỏi người đó ....code két nó nhiều trường phái

Mình là một tay amater hay phá phách ko thể phán được ......ngộ nhỡ phán ẩu gặp đông xưởng hay Hòa thân thì Mình toi Mạng ...Mới sang nay mở mắt dính rồi hết Hồn..!$@!!

Cho mình cáo lỗi và xin rút lui vậy

sau một thời gian ngồi gõ gõ không biết gõ cái gì tự nhiên giải quyết được vấn đề !$@!!!$@!!**~**
 
To GiaiPhap

Mình mới tìm hiểu thì Office32 hay 64 nó lưu trong Registry Theo Hình Sau

1/ Vấn còn lại là viết 1 code check nó nếu là x86 thì = 32 ...

2/ 1 cái nữa là bạn phải xài 2 bản Office32 và 64 trên 2 máy xong Make 2 file *.dll của 2 bản đó

3/ Khó nè : làm sao bạn nhét được 2 bản *.dll 32 và 64 vào một File *.exe xong khi chạy nó sẻ kiểm tra nếu là là 32 thì xuất Bản 32 ra và ngược lại ....

Vậy là Ok đó

Link tham khảo them registry
http://stackoverflow.com/questions/2203980/detect-whether-office-is-32bit-or-64bit-via-the-registry

https://social.msdn.microsoft.com/F...-ms-office-2010-is-32-or-64-bit?forum=worddev
 

File đính kèm

  • Capture.jpg
    Capture.jpg
    12.3 KB · Đọc: 81
To GiaiPhap

Mình mới tìm hiểu thì Office32 hay 64 nó lưu trong Registry Theo Hình Sau

1/ Vấn còn lại là viết 1 code check nó nếu là x86 thì = 32 ...

2/ 1 cái nữa là bạn phải xài 2 bản Office32 và 64 trên 2 máy xong Make 2 file *.dll của 2 bản đó

3/ Khó nè : làm sao bạn nhét được 2 bản *.dll 32 và 64 vào một File *.exe xong khi chạy nó sẻ kiểm tra nếu là là 32 thì xuất Bản 32 ra và ngược lại ....
Cảm ơn bạn, ngày hôm qua đã tìm được cách để inno setup dò win 32bit hay 64bit để cài đặt DLL theo ý muốn (cách cũng tương tự như đường Link bác gửi ở trên). Nhưng còn lo việc tạo DLL trên Win 64bit đây, đêm nay cài lại Win 64bit và VB6 để test thử, lại mất ngủ một đêm nửa rồi --=0 --=0 --=0
 
Cảm ơn bạn, ngày hôm qua đã tìm được cách để inno setup dò win 32bit hay 64bit để cài đặt DLL theo ý muốn (cách cũng tương tự như đường Link bác gửi ở trên). Nhưng còn lo việc tạo DLL trên Win 64bit đây, đêm nay cài lại Win 64bit và VB6 để test thử, lại mất ngủ một đêm nửa rồi --=0 --=0 --=0
xài thêm một cái máy ảo ý ....Máy chính 32 máy Ảo 64 copy qua đó check lại một cái xong Make nó lại ...xong Copy cái *.dll là xong

Nếu nhà thàu giàu thì mua thêm con latop 64 nữa chơi cho phê ...--=0

Mạnh ngồi máy Tính từ 6h sang đến 12h đêm ko có cái giống gì là ko chơi ...hai máy lận ...vậy mới phê

nhiều hôm quay máy ngoài banh xong mở máy trong chơi ..30 phút sau ghost lại xong chơi tiếp ....nối mạng LAN test code
 
Lần chỉnh sửa cuối:
xài thêm một cái máy ảo ý ....Máy chính 32 máy Ảo 64 copy qua đó check lại một cái xong Make nó lại ...xong Copy cái *.dll là xong

Nếu nhà thàu giàu thì mua thêm con latop 64 nữa chơi cho phê ...--=0

Mạnh ngồi máy Tính từ 6h sang đến 12h đêm ko có cái giống gì là ko chơi ...hai máy lận ...vậy mới phê

nhiều hôm quay máy ngoài banh xong mở máy trong chơi ..30 phút sau ghost lại xong chơi tiếp ....nối mạng LAN test code
Mới ghost lại Win 8 64bit để test, quả thực không chạy được DLL đã tạo ra bằng VB6 trên Win 32bit, không biết tính sao đây, đang cài VB6 để làm lại trên Win 64bit thử thế nào chắc thua thiệt quá.
 
Lỗi không Tạo được DLL trên Win 8 64. em mới test nè huhu

Sao Make EXE nó chạy bình thường nhỉ
exe.jpg
 
Lần chỉnh sửa cuối:
PHP:
To GiaiPhap

Mình mới tìm hiểu thì Office32 hay 64 nó lưu trong Registry Theo Hình Sau

1/ Vấn còn lại là viết 1 code check nó nếu là x86 thì = 32 ...

2/ 1 cái nữa là bạn phải xài 2 bản Office32 và 64 trên 2 máy xong Make 2 file *.dll của 2 bản đó

3/ Khó nè : làm sao bạn nhét được 2 bản *.dll 32 và 64 vào một File *.exe xong khi chạy nó sẻ kiểm tra nếu là là 32 thì xuất Bản 32 ra và ngược lại ....

Vậy là Ok đó

Anh Kiều Mạnh giải quyết được vấn đề này chưa anh ?
 
Lần chỉnh sửa cuối:
Sau 2 ngày Nghiên cứu Code Add-Ins mã hóa Bạn úp ....Mạnh mới chỉnh sửa và viết lại thành 1 File setup = VB6
Thật chứ? Có lẽ sửa hơi bị ít.
Hãy tạo tập tin mới và thêm UserForm1 -> đặt CommandButton1 trên Form -> toàn bộ code trong UserForm1 - chả để làm gì, mục đích chỉ để test thôi.
Mã:
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer

Private Const hic = "hichic": Private Const KEYEVENTF_KEYUP = 25: Private p As Boolean, q

Private Sub CommandButton1_Click()
On Error Resume Next
Dim c, d, e, g, h, k, m, n
    g = True
    c = CBool(GetKeyState(vbKeyNumlock))
    Debug.Print c
    Application.SendKeys IIf(c, d, e)
    If c <> g Then
        keybd_event h, k, m, n
        keybd_event h, k, KEYEVENTF_KEYUP, n
    End If
End Sub

Tiếp theo chạy Form rồi nhấn CommandButton1. Chả có lỗi gì cả.

Tiếp theo chạy menu của bạn và chạy tập tin vừa được mã, sau đó nhấn CommandButton1. Chắc chắn sẽ có lỗi.

Xem code thì thấy
Mã:
Private Type l_i_i_i_l_l_1_1_l_1_1_1
left As Long
top As Long
right As Long
bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
Private Const l_i_i_i_l_1_1_l_1_l_1_1 = "hichic": Private Const keyeventf_keyup = 25: Private l_i_i_i_l_1_1_l_1_1_l_1 As Boolean, q
Private Sub commandbutton1_click()
On Error Resume Next
Dim l_i_i_i_l_1_1_l_1_1_1_l, d, e, g, h, k, m, n
g = True
l_i_i_i_l_1_1_l_1_1_1_l = CBool(l_i_i_i_l_1_l_1_1_1_1_l(vbKeyNumlock))
Debug.Print l_i_i_i_l_1_1_l_1_1_1_l
Application.SendKeys IIf(l_i_i_i_l_1_1_l_1_1_1_l, d, e)
If l_i_i_i_l_1_1_l_1_1_1_l <> g Then
l_i_i_i_l_l_1_1_1_1_1_l h, k, m, n
l_i_i_i_l_l_1_1_1_1_1_l h, k, keyeventf_keyup, n
End If
End Sub

Tức làm gì còn type RECT nên khai báo hàm GetWindowRect bị lỗi. Lưu ý là type khong nhất thiết của API. Ta có thể tự có "Private Type EMAILFIELDS ..."

Bây giờ xóa type và khai báo GetWindowRect. Chạy Form rồi sau đó nhấn CommandButton1. Chắc chắn có lỗi do tên các hàm API bị mất. Làm sao có thể gọi hàm l_i_i_i_l_1_l_1_1_l_1_1 được.

Ngoài ra các biến sau không được mã hóa: q, d, e, g, h, k, m, n
--------------
Bây giờ thử mã hóa tập tin "Input From List.xls" của huuthang_bd. Tất nhiên các tên đã được mã hóa nhưng cứ coi đó là tên chưa mã, chỉ là người ta tự gõ tự đặt tên như thế. Chắc chắn không mã hóa được vì nửa đường bị lỗi.

Sửa lại quá ít chăng?
 
Tôi thử thấy đúng là như vậy, có lẽ 2 ngày nghiên cứu là hơi ít.
kieu manh nâng cấp phần mềm nhé --=0
 

File đính kèm

  • Test_EncryptVBA.xls
    32 KB · Đọc: 80
Thật chứ? Có lẽ sửa hơi bị ít.
Hãy tạo tập tin mới và thêm UserForm1 -> đặt CommandButton1 trên Form -> toàn bộ code trong UserForm1 - chả để làm gì, mục đích chỉ để test thôi.
Mã:
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer

Private Const hic = "hichic": Private Const KEYEVENTF_KEYUP = 25: Private p As Boolean, q

Private Sub CommandButton1_Click()
On Error Resume Next
Dim c, d, e, g, h, k, m, n
    g = True
    c = CBool(GetKeyState(vbKeyNumlock))
    Debug.Print c
    Application.SendKeys IIf(c, d, e)
    If c <> g Then
        keybd_event h, k, m, n
        keybd_event h, k, KEYEVENTF_KEYUP, n
    End If
End Sub

Tiếp theo chạy Form rồi nhấn CommandButton1. Chả có lỗi gì cả.

Tiếp theo chạy menu của bạn và chạy tập tin vừa được mã, sau đó nhấn CommandButton1. Chắc chắn sẽ có lỗi.

Xem code thì thấy
Mã:
Private Type l_i_i_i_l_l_1_1_l_1_1_1
left As Long
top As Long
right As Long
bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
Private Const l_i_i_i_l_1_1_l_1_l_1_1 = "hichic": Private Const keyeventf_keyup = 25: Private l_i_i_i_l_1_1_l_1_1_l_1 As Boolean, q
Private Sub commandbutton1_click()
On Error Resume Next
Dim l_i_i_i_l_1_1_l_1_1_1_l, d, e, g, h, k, m, n
g = True
l_i_i_i_l_1_1_l_1_1_1_l = CBool(l_i_i_i_l_1_l_1_1_1_1_l(vbKeyNumlock))
Debug.Print l_i_i_i_l_1_1_l_1_1_1_l
Application.SendKeys IIf(l_i_i_i_l_1_1_l_1_1_1_l, d, e)
If l_i_i_i_l_1_1_l_1_1_1_l <> g Then
l_i_i_i_l_l_1_1_1_1_1_l h, k, m, n
l_i_i_i_l_l_1_1_1_1_1_l h, k, keyeventf_keyup, n
End If
End Sub

Tức làm gì còn type RECT nên khai báo hàm GetWindowRect bị lỗi. Lưu ý là type khong nhất thiết của API. Ta có thể tự có "Private Type EMAILFIELDS ..."

Bây giờ xóa type và khai báo GetWindowRect. Chạy Form rồi sau đó nhấn CommandButton1. Chắc chắn có lỗi do tên các hàm API bị mất. Làm sao có thể gọi hàm l_i_i_i_l_1_l_1_1_l_1_1 được.

Ngoài ra các biến sau không được mã hóa: q, d, e, g, h, k, m, n
--------------
Bây giờ thử mã hóa tập tin "Input From List.xls" của huuthang_bd. Tất nhiên các tên đã được mã hóa nhưng cứ coi đó là tên chưa mã, chỉ là người ta tự gõ tự đặt tên như thế. Chắc chắn không mã hóa được vì nửa đường bị lỗi.

Sửa lại quá ít chăng?

Còn lỗi nhiều lắm đó Anh ...thấy code đó nó toàn có Hàm kết nối với nhau...coi nhức đầu quá ....Em làm biếng lâu nay ngại coi lại
có những khúc code nó mã hóa sai ...nó nhầm lẫn cái nọ với cái kia ...Nên nó ko hiểu hết ....quậy nhiều mới thấy hết ...--=0
Cảm ơn Anh
 
Lần chỉnh sửa cuối:
Em mới thử làm vài cái nó cũng ra giống như Anh... xem ra cái này cũng không Vui lắm ...
làm thủ công cũng được mà...có điều rất công phu và mắt phải sáng để dòm ....hahahahaha
code Mã hóa
Mã:
Public Function ldt1(ldt2 As Variant) As Variant
    Dim ldt3 As Variant, ldt4 As Long, ldt5 As Long
    ReDim ldt3(UBound(ldt2, 2), UBound(ldt2, 1))
    For ldt4 = 0 To UBound(ldt2, 2)
        For ldt5 = 0 To UBound(ldt2, 1)
            ldt3(ldt4, ldt5) = ldt2(ldt5, ldt4)
        Next ldt5
    Next ldt4
    ldt1 = ldt3
End Function
Tương tự như code dưới
Mã:
Public Function l_i_i_i_l_l_1_l_1_1_1_1(l_i_i_i_l_l_1_1_l_1_1_1 As Variant) As Variant
Dim l_i_i_i_l_l_1_1_1_l_1_1 As Variant, l_i_i_i_l_l_1_1_1_1_l_1 As Long, l_i_i_i_l_l_1_1_1_1_1_l As Long
ReDim l_i_i_i_l_l_1_1_1_l_1_1(UBound(l_i_i_i_l_l_1_1_l_1_1_1, 2), UBound(l_i_i_i_l_l_1_1_l_1_1_1, 1))
For l_i_i_i_l_l_1_1_1_1_l_1 = 0 To UBound(l_i_i_i_l_l_1_1_l_1_1_1, 2)
For l_i_i_i_l_l_1_1_1_1_1_l = 0 To UBound(l_i_i_i_l_l_1_1_l_1_1_1, 1)
l_i_i_i_l_l_1_1_1_l_1_1(l_i_i_i_l_l_1_1_1_1_l_1, l_i_i_i_l_l_1_1_1_1_1_l) = l_i_i_i_l_l_1_1_l_1_1_1(l_i_i_i_l_l_1_1_1_1_1_l, l_i_i_i_l_l_1_1_1_1_l_1)
Next l_i_i_i_l_l_1_1_1_1_1_l
Next l_i_i_i_l_l_1_1_1_1_l_1
l_i_i_i_l_l_1_l_1_1_1_1 = l_i_i_i_l_l_1_1_1_l_1_1
End Function
Mình thấy hay dọc thử, giờ nó mã hóa File gốc của mình rồi. Mình muốn chuyển lại công thức như củ được không
 
Các bạn đã từng thấy các đoạn code của bác Hữu Thắng hay chưa? nếu chưa thì có thể tham khảo ở hình dưới.
View attachment 162845
Vô tình lên mạng mình tìm thấy một tiện ích có chức năng tương tự như trên, nhưng nó còn một hạn chế là sau khi chuyển thì một số nút lệnh trên sheet sẽ gãy liên kết (ta phải làm lại công việc tạo lại các liên kết macro), và một lỗi nửa là các hàm API nó cũng chưa chuyển đúng (Mình đã chỉnh sửa lại bằng cách loại trừ các hàm API, trong file mình có ghi chú nếu trong code của bạn có các hàm AIP thì bạn phải khai báo trước khi cho nó chuyển đổi), bạn nào sử dụng và nghiên cứu tiếp để hoàn thiện add-ins. Trước hết bạn hãy mở tiện ích lên (nhớ giải nén thư mục tải về có 2 file, 1 file tiện ích và một file text) sau đó mở tiếp file excel có chắc macro bạn muốn mã hóa lên và chọn lệnh Encrypt VBA Project, sau đó chọn yes, chọn đường dẫn và gõ tên file cần lưu sau khi mã hóa. Đợi nó thực hiện chút xong nháy OK. Bây giờ bạn nhấn Alt+F11 để xem kết quả (Nhớ là phải xem lại có nút lệnh nào trên sheet sử dụng đến code VBA bạn phải sửa lại hết, do nó chỉ chuyển code còn Liên kết đến code cho các nút lệnh trên sheet không được cập nhật)

Hình như cái này không xài được nữa...
Nó báo lỗi #52
 
Sau 2 ngày Nghiên cứu Code Add-Ins mã hóa Bạn úp ....Mạnh mới chỉnh sửa và viết lại thành 1 File setup = VB6 Bạn tải về Test thử nha ....Viết Add-ins trên VB6 quá đơn giản mà ....Bảo mật code OK

1/ không phải dùng 1 phần mền của hãng khác Make nó lại thành file Setup ...mà mình làm trên VB6 từ A ...Z

2/ Không phải cài Vào Program nên không phải lo Rác hệ thống khi ko thích xài nữa vào Add-ins xóa nó đi là xong

3/ Mọi cái tự động hết chỉ 1 cái chuột và chọn Yes ( Nếu UAC ON)

4/ Bạn test thử và cho ý kiến chi tiết nha....

5/ Pass VBA Add-Ins là: 123

6/ Bạn nào Rảnh Mạnh nhờ Check dùm...

Xin cảm ơn
muốn mã hóa code VBA viết trong Word thì làm thế nào vậy Bác?
 
Web KT
Back
Top Bottom