這段時間給公司做了一套軟件,要發佈的時候,被公司告知要寫加密程序,因爲對這個領域不數太瞭解,我就用序列號驗證的方法在程序中做了簡單的驗證,其中的加了一點花指令(初級的)。下面的代碼是在程序啓動時做的驗證方法,我帖出來,大家幫嗎看看這樣做可不可以,還有沒更好的方法,因爲都是初級的,大家多指教:
__asm{
lea eax, DWORD PTR [errormsgok]
mov [msg],eax
}
// 函數調用,返回代碼直接寫入eax
TestKey();
__asm{
push eax
cmp eax, 0x0
// 註冊跳轉
jz normal
// 未註冊跳轉
lea eax, DWORD PTR [errormsgerr]
mov [msg],eax
jnz abnormal
// 以下防止一般的反彙編,寫入花指令
_emit 0Ebh
// 以下防止一般的反彙編程序查找字符串引用
errormsgok: // 字符串: "OK!"
_emit 0x4f
_emit 0x4b
_emit 0x21
_emit 0x00
errormsgerr: // 字符串:"未註冊用戶!"
_emit 0xCE
_emit 0xB4
_emit 0xD7
_emit 0xA2
_emit 0xB2
_emit 0xE1
_emit 0xD3
_emit 0xC3
_emit 0xBB
_emit 0xA7
_emit 0xA3
_emit 0xA1
_emit 0x00
}
abnormal:
// 平衡堆棧
__asm{
pop eax
}
AfxMessageBox(msg);
return FALSE;
normal:
// 平衡堆棧
__asm{
pop eax
}
AfxMessageBox(msg);
彈出對話框引用的字符串是直接寫在程序的代碼段的。