日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC++生成序列号和注册机总结

發布時間:2025/4/14 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC++生成序列号和注册机总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
VC++生成序列號和簡單注冊機實例

在成品軟件中,軟件注冊是必需的,在VC++中,如何實現程序注冊功能呢?今天發一下VC++生成程序序

列號和注冊機程序的代碼,或許是個參考
一、生成程序序列號的具體實現:
HCURSOR CJiemishuoDlg::OnQueryDragIcon()
{
? ? return (HCURSOR) m_hIcon;
}


void CJiemishuoDlg::OnButton1()
{
? ? DWORD num;
? ? UpdateData(1);
? ? num=m_jms;
? ? num^=0x1999aa98;
? ? if(num==m_gkh)
? ? ? ? MessageBox("ok"); ? //提示解密正確


? ? CFile ff;
? ? if(!ff.Open("play.exe",CFile::modeWrite))
? ? ? ? return;
? ? CString str;
? ? str.Format("%10d",m_jms);
? ? MessageBox(str);
? ? ff.Seek(-10,CFile::end);
? ? ff.Write(str,10);//添加到play.exe尾部
? ? ff.Close();
}


void CJiemishuoDlg::OnButton2()
{
? ? //功能:得到解密匙.
? ? UpdateData(1);
? ? long aa=m_gkh^0x1999aa98;
? ? m_jms=aa;
? ? UpdateData(0);
}


void CJiemishuoDlg::OnAdd()
{
? ? DWORD num;
? ? UpdateData(1);
? ? num=m_jms;
? ? num^=0x1999aa98;


? ? if(num==m_gkh)
? ? ? ? MessageBox("ok"); ? //提示解密匙正確


? ? CFile ff;
? ? if(!ff.Open("play.exe",CFile::modeWrite))
? ? ? ? return;


? ? CString str;
? ? str.Format("%10d",m_jms);
? ? MessageBox(str);
? ? ff.SeekToEnd();
? ? ff.Write(str,10);//改寫解密匙
? ? ff.Close();
}
二、簡單注冊機的實現:
void CZhuCeJiDlg::OnJieMi()
{
? ? //在你要加密的文件play.exe末部改寫解密匙.
? ? long num;
? ? UpdateData(1);
? ? num=m_jms;
? ? num^=0x1999aa98;
? ? if(num==m_gkh)
? ? ? ? MessageBox("ok");//提示解密匙正確?
? ? CFile ff;
? ? if(!ff.Open("play.exe",CFile::modeWrite))
? ? ? ? return;
? ? CString str;
? ? str.Format("%10d",m_jms);
? ? MessageBox(str);
? ? ff.Seek(-10,CFile::end);
? ? ff.Write(str,10); ? //改寫解密匙
? ? ff.Close();
}
http://www.codefans.net/articles/1437.shtml
========
http://www.newxing.com/Code/VC/zfcl/1386.html
VC 根據序列號生成注冊碼示例
========
http://blog.csdn.net/A8572785/article/details/7644342
加密解密-TraceMe—注冊機


寫了個TraceMe的注冊機
unsigned char Table[8] = {0xC, 0xA, 0x13, 0x9,0xC,0xB,0xA,0x8}; ?
?unsigned long GenRegCode(CHAR * name, int len) ?
{ ?
? ? CString temp; ?
? ? int i, j; ?
? ? unsigned long ID =0; ?
? ? for(i=3,j=0; i<len; i++,j++) ?
? ? { ?
? ? ? ? if(j>7) ?
? ? ? ? ? ? j=0; ?
? ? ? ? ID+=name[i]*Table[j]; ?
? ? } ?
? ? return ID; ?
} ?
void CTraceMeDlg::OnRegist() ??
{ ?
? ? // TODO: Add your control notification handler code here ?
? ? CString str1; ?
? ? CString test; ?
? ? unsigned long str2; ?
? ? char* buf; ?
? ? GetDlgItemText(IDC_Name,str1); ?
? ? buf = (LPSTR)(LPCTSTR)str1; ?
? ? str2 = GenRegCode(buf,strlen(str1)); ?
? ? test.Format("%ld",str2); ?
? ? SetDlgItemText(IDC_ID, test); ?
}

========

程序初始化時調用

BOOL CMySoftApp::InitInstance()
{
AfxEnableControlContainer();


if(!IsRegisterOK())
return FALSE;

......


BOOL CMySoftApp::IsRegisterOK() {DWORD dwVolumeSerialNumber,dwUserID,dwDecodeNumber; DWORD dwMask=87654321; //運算子,隨便設定DWORD dwKey=0x20080808; //密鑰碼,設成自己好記、別人不知的CString strUserID,strRegCode;char str[200];int str_len=200;// 將硬盤序列號與運算子異或后做為用戶號::GetVolumeInformation("C:\\",NULL,NULL,&dwVolumeSerialNumber,NULL,NULL,NULL,NULL); dwUserID=dwVolumeSerialNumber^dwMask; strUserID.Format("%8d",dwUserID);// 正確的注冊碼應為16進制形式=(10進制的dwUserID轉16進制后)^(16進制的密鑰碼)// 開發者可利用科學型計算器,根據用戶報知的用戶號直接算出注冊碼返回給用戶// 先直接從操作系統的win.ini讀取注冊碼if( ::GetProfileString("MySoft","RegCode","",str,str_len)!=0 ){strRegCode=str;// 驗證注冊碼dwDecodeNumber=strtoul(strRegCode,NULL,16); dwDecodeNumber^=dwKey; //解密鑰dwDecodeNumber^=dwMask; //還原硬盤序列號if(dwDecodeNumber==dwVolumeSerialNumber) //注冊成功return TRUE;}// 如果上面讀取的注冊碼不對或沒有,再通過對話框取注冊碼for(;;){CDlgRegister dlg;dlg.m_strUserID=strUserID;if(dlg.DoModal()==IDOK){strRegCode=dlg.m_strRegCode;delete dlg;// 驗證注冊碼dwDecodeNumber=strtoul(strRegCode,NULL,16); dwDecodeNumber^=dwKey; //解密鑰dwDecodeNumber^=dwMask; //還原硬盤序列號if(dwDecodeNumber==dwVolumeSerialNumber) //注冊成功{// 將通過的注冊信息保存到操作系統的win.ini,以備以后直接讀取::WriteProfileString("MySoft","UserID",strUserID);::WriteProfileString("MySoft","RegCode",strRegCode);return TRUE;}elseAfxMessageBox("注冊碼錯誤! 請重試輸入或向開發者索取本機注冊碼!");}else{delete dlg;break; }}return FALSE; //注冊失敗 }
http://download.csdn.net/download/dancer8th/1862601

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的VC++生成序列号和注册机总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。