返回列表 上一主題 發帖

[發問] 保護vba源碼的方法探討

[發問] 保護vba源碼的方法探討

如題:
網路上流傳的方法,大部份都是VBAProject屬性加入密碼。
但說真的,這一招根本沒用,網路上都找得到破解方法。小弟也破解過別人加密的vba源碼。不是為了偷師,而是單純想試試這種破解法真的有用嗎,驗證結果,是有用的。
excel 檔案連開都不用開,就直接被破解了。破解後,再打開excel,密碼保護就取消了,作者的vba源碼被看得一清二楚。

想請教版上高手們。如果不使用VBAProject屬性的加密方法去保護自已寫的vba源碼,
請問還有什麼更好的方法嗎?
EXCEL VBA新手,請前輩多多指教

小弟先在此拋磚引玉一下,想到一個解決方案

在vba寫下一段程式碼
只要visual Basic或巨集這二個功能被點擊開啟,就出現一組密碼。
輸入錯誤,這彈出的vbe視窗或巨集視窗立刻自動關閉。

可能得用到尋找窗體的功能

但如何寫到偵測這二個窗體被打開,系統不斷偵測這二個視窗的狀況卻又不佔資源,可能得再想一想可行性了。
EXCEL VBA新手,請前輩多多指教

TOP

回復 3# PKKO


    哇,看了售價
這付費軟體也太貴了吧
EXCEL VBA新手,請前輩多多指教

TOP

回復 6# stillfish00


    有在關注這位版主的文章
但有些方法都已有破解法
小弟因寫出一套系統,想說可以嚐試拿出來賣,但.....源碼的保護是我最確切要完美實現的部份
EXCEL VBA新手,請前輩多多指教

TOP

回復 5# Scott090


重點有「vb專案不可現」的實現
如果以現有vb專案的密碼保護,破解方法根本不用開啟本檔,而是用另一個軟體,指定檔案路徑就可以將密碼取消掉
如果有方法讓vbe完全打不開,那就完美了。
或是vbe打開了,馬上被關掉,那也蠻不錯的。
EXCEL VBA新手,請前輩多多指教

TOP

禁用VBE編輯窗口

Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
vbewin = False
End Sub
Private Sub Workbook_Open()
'檔案開啟前先關閉VBE視窗(如果VBE視窗已開啟)
If Application.VBE.MainWindow.Visible Then
Application.VBE.CommandBars.FindControl(ID:=752).Execute
End If
vbewin = True
VBEwindow
End Sub
'-----------------------------------------------------------------
Public Declare Function GetActiveWindow Lib "user32" () As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, _
ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Public vbewin As Boolean
Sub VBEwindow()
'直到檔案關閉
Do While vbewin
DoEvents
Call CheckVBE_Event
Loop
End Sub
Sub CheckVBE_Event()
Dim hwnd As Long
Dim WText As String
Dim L As Long: L = 255
WText = String(255, " ")
'取得當前視窗 Hwnd
hwnd = GetActiveWindow
'取得當前視窗類別名稱
L = GetClassName(hwnd, WText, L)
WText = Left(WText, L)
'VBE視窗的類別名稱為:wndclass_desked_gsk
If WText = "wndclass_desked_gsk" Then
MsgBox "已偵測到VBE視窗開啟,VBE視窗將自行關閉"
'關閉VBE視窗
Application.VBE.CommandBars.FindControl(ID:=752).Execute
End If
End Sub

'----------------------------------------------------------------------------------------------
說明:
Excel 視窗的 ClassName="XLMAIN"
Application.VBE.CommandBars.FindControl(ID:=752)就是VBE視窗中的 檔案=>關閉並回到 MicrosoftExcel
VBE 視窗的 ClassName="wndclass_desked_gsk"
UserForm 視窗的 ClassName="" ThunderDFrame",如果是Excel 97版(含)以後的則為 ClassName="ThunderXFrame"



在網路上找到這個教學
但不知是不是版本問題
我試過了
結果變成全部的功能鍵全都被禁止了,只剩下儲存格可以使用。
有沒有高手願意出手相助,看一下是那一段程式碼須修改的呢?
小弟使用的是 office 2013 32位元
EXCEL VBA新手,請前輩多多指教

TOP

本帖最後由 ketrddem 於 2016-5-31 21:02 編輯

回復 11# 准提部林


  深有同感。版本的不同,有時相同的語法卻無法執行,很令人頭疼.....

另外請教部林大哥
有無方法能用VBA監測VBE視窗被開啟呢。

如果監測VBE視窗被開啟,其實就有辦法做後續動作了(比如: 本文件即將自我刪除)
EXCEL VBA新手,請前輩多多指教

TOP

本帖最後由 ketrddem 於 2016-6-8 23:09 編輯

回復 13# rocky.gary


不知道耶。

但小弟想到一個方法,不知可不可行。想利用時間來試試看。

有聽過按鍵精靈這套軟體嗎?

就是兩者互控

excel每三秒抓按鍵精靈窗口,只要按鍵精靈窗口消失,excel 就自動關閉。(意思就是要強制由按鍵精靈來監控EXCEL)。

按鍵精靈每三秒抓VBE窗口。只要找到窗口,自動關閉EXCEL。(這狀況,就算開啟EXCEL,設定在設計階段後再打開VBE,關閉EXCEL的動作是由按鍵精靈執行的)。

開啟EXCEL時,自動啟動按鍵精靈。

這只是概念,真的寫出來,相信會損耗不少系統資源。

不知版上高手們,能不能用類似這種想法,直接寫一個批次檔就能取代按鍵精靈或VBE窗口呢。用批次檔來監控。
EXCEL VBA新手,請前輩多多指教

TOP

        靜思自在 : 要比誰更受誰.不要比誰更怕誰。
返回列表 上一主題