簡單的軟件加密

這段時間給公司做了一套軟件,要發佈的時候,被公司告知要寫加密程序,因爲對這個領域不數太瞭解,我就用序列號驗證的方法在程序中做了簡單的驗證,其中的加了一點花指令(初級的)。下面的代碼是在程序啓動時做的驗證方法,我帖出來,大家幫嗎看看這樣做可不可以,還有沒更好的方法,因爲都是初級的,大家多指教:

 

    char* msg = NULL;
    __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);

 

 彈出對話框引用的字符串是直接寫在程序的代碼段的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章