VB的好處我就不多說了。VB初學者模仿能力很強,總希望自己的程序看起來專業一點,如用密碼登錄、制作限次版、限時版、強行啟動等等,其實這些東西並不神秘,在VB裡只要用少量代碼就可實現。
1.最簡單的可執行文件密碼登錄:
在程序啟動時加入以下代碼:
PrivateSubForm_Load()
DimaasVariant
a=InputBox("請輸入密碼!")
Ifa<>"****"ThenMsgBox"密碼錯誤,您不能使用本軟件!":End注釋:****為預先設定的字符
EndSub
怎麼樣,能唬人吧。什麼?太爛!
2.在硬盤上建立一個文件用於存放密碼,這樣就可以讀寫修改了
OnErrorGoTosss
注釋:若文件不存在,則捕獲該錯誤,建立密碼
Open("c:abc.abc")ForInputAs#1
注釋:文件存在,則打開文件
Input#1,b注釋:將密碼讀入變量b
Close#1
a=InputBox("請輸入密碼!")
Ifa<>bThenMsgBox"密碼錯誤,您不能使用本軟件!":End
ExitSub
sss:
a=InputBox("請建立密碼!")
Open("c:abc.abc")ForOutputAs#2注釋:在硬盤上建立存放密碼的文件
Print#2,a
Close#2
MsgBox"建立密碼成功!"
使用InputBox輸入密碼的缺點是密碼被顯示出來,大家可以另建一個窗體代替輸入對話框,加入一TextBox並將其PasswordChar屬性設為*就行了。文件abc.abc可用任何文本文件打開編輯,因此在你未學會加密算法之前可將文件命名為*.sys或*.dll,並放在windows或system目錄下,甚至將其屬性設為隱藏,哈哈,系統文件誰敢亂改!不過要小心不要覆蓋真正的系統文件。
用啟動登錄的方法加密會令用戶反感,最好只用在軟件中較重要的修改數據部分或用於多用戶登錄。如果你想制作共享軟件,那就先試試限次版吧。
3.軟件限定使用次數說白了也是在硬盤中的某個地方作個標記,每啟動一次就記數一次,當次數加到一定值時就不允許使用軟件。以上代碼稍加改動也能實現:
PrivateSubForm_Load()
OnErrorGoTosss
注釋:若文件不存在,則建立文件
Open("c:abc.abc")ForInputAs#1
注釋:文件存在,則打開文件
Input#1,b注釋:將數值讀入變量b
Close#1
Ifb>100ThenMsgBox"對不起,您只能使用本軟件100次!":End
注釋:提示用戶使用次數並退出程序
c=b+1注釋:計數器加1
Open("c:abc.abc")ForOutputAs#3
Print#3,c注釋:將加1後的數值寫入文件
Close#3
ExitSub
sss:
Open("c:abc.abc")ForOutputAs#2
Print#2,1注釋:建立文件,並寫入數值1
Close#2
EndSub
4.大家一定對win.ini和system.ini文件很熟悉吧,它是一種專門用來保存應用程序初始化信息和運行環境信息的文本文件,Windows軟件的初始化參數的獲取與保存是通過讀取擴展名為.ini的文本文件來實現的。目前很多軟件干脆就把軟件密碼保存在自己的ini文件中。VB只要利用API的GetPrivateProfileString和WritePrivateProfileString兩個函數就可以很方便地讀寫ini文件,從而可以保存、讀出和驗證密碼。首先認識一下ini文件。
ini文件的形式為:
[section1]
keyword1=value1
keyword2=value2
……
[section2]
keyword1=value1
keyword2=value2
……
section是段名,keyword是關鍵字名,value為關鍵字對應的設定值
首先用WritePrivateProfileSection創建新的段名和關鍵字名:
DeclareFunctionWritePrivateProfileSectionLib"kernel32"Alias"WritePrivateProfileSectionA"(ByVallpAppNameAsString,ByVallpStringAsString,ByVallpFileNameAsString)AsLong
DeclareFunctionWritePrivateProfileStringLib"kernel32"Alias"WritePrivateProfileStringA"(ByVallpApplicationNameAsString,ByVallpKeyNameAsAny,ByVallpStringAsAny,ByVallpFileNameAsString)AsLong
A=WritePrivateProfileSection("user","password","c:windowsuser.ini")
在windows目錄下的user.ini文件中創建新段名user及該段名下的關鍵字password,如果目錄下沒有user.ini文件,則創建該文件
B=WritePrivateProfileString("user","password","1234","c:windowsuser.ini"),設定關鍵字user的值為1234。這樣在你的user.ini文件就會多出一段:
[user]
password=1234
利用GetPrivateProfileString函數可以讀出password的值:
DeclareFunctionGetPrivateProfileStringLib"kernel32"Alias"GetPrivateProfileStringA"(ByVallpApplicationNameAsString,ByVallpKeyNameAsAny,ByVallpDefaultAsString,ByVallpReturnedStringAsString,ByValnSizeAsLong,ByVallpFileNameAsString)AsLong
DimkeyasString*255
c=GetPrivateProfileString("user","password","false",key,255,"c:windowsuser.ini")
Ifkey="false"then
MsgBox"文件不存在或沒有該字段"
Else:Form1.Print"Thepasswordis";key
該函數將文件user.ini中password的值(即你設定的密碼)賦予key,若發生錯誤(文件不存在或沒有該段名)則key的值為“false”,注意一定要聲明變量key的長度並與函數中的值一致。這樣你就可以將key與登錄密碼進行對照或直接處理key的值來決定是否繼續運行程序。
使用ini文件存儲密碼還有一個好處,就是設計者可以建立幾個段名來存儲不同的密碼,從而可實現多用戶登錄。
5.在注冊表中標記密碼可能是保護你的勞動成果的最高境界了。主要方法是在注冊表中創建一個鍵名,在鍵值裡存放你的密碼,以後運行時則取出該數據進行驗證或處理,當滿足條件時終止程序。可以認為注冊表是"以亂取勝",只要你選擇到一個隱蔽的位置做標記或存放數據,不用做任何加密算法的處理都應該是比較安全的。令人驚喜的是VB很容易利用API操作注冊表。這裡只簡單介紹幾個API函數,大家只要參照函數說明,正確引用變量傳遞數據,不需要任何技巧就可操作注冊表。
RegCreateKeyEx:創建關鍵字,如果關鍵字已存在,則將只簡單地將它打開
RegOpenKey:用於打開某鍵
RegSetValueEx:打開某鍵後,用於設置其鍵值
RegQueryValueEx:查詢一個存在的值,如果此函數調用成功,會返回ERROR_SUCCESS標志
制作限時版只要會用幾個函數如day、month、year、date就行了。例如到了2001年就不能執行程序:
a=Year(Date)
ifa>=2001thenMsgBox"對不起,該軟件已過期":End
你還可以用前面的方法使條件滿足時在硬盤上作個標記,而用戶通過修改系統時間、重新安裝也不能再使用軟件。
怎麼樣?學會了對硬盤的簡單讀寫操作,這些東東一點也不神秘了吧!雖然不是很高明,但很多軟件都確實使用這種方法進行簡單加密;隨著解密手段越來越高明,單一加密方法已成為過去,一些軟件同時在ini文件和注冊表等地方做標記,當然不是簡單的把你輸入的保存起來,win9x撥號上網時如果選擇保存密碼也會在硬盤上生成user.pwl文件,不過該文件加了密,強行用文本編輯器打開時只會看到些亂碼。哈哈,又心癢癢想學其他招數了吧!->