锁定共享软件功能
本文描述了如何在共享软件产品中锁定某些功能。用户只有在获得密钥文件后才能解锁它们。
引言
如果您是共享软件程序员,您可能需要锁定您的产品的一些功能,以防止未经授权的访问。问题是黑客可以在未经您许可的情况下解锁这些功能。 :-) 在本文中,我将展示如何锁定共享软件功能,并降低黑客破解您产品的风险。
背景
基本思想是通过密钥文件中传递给用户的地址来调用隐藏的共享软件函数。在这种情况下,黑客无法破解程序,因为他无法确定受保护函数的必要地址。在提供的演示项目中,函数的地址存储在一个开放的文件(pass.txt)中,但没有什么可以阻止您使用用户的硬盘序列号对该地址进行加密,例如。
所需步骤
- 让我们找出函数的地址
// somewhere in program body our shareware function lives void HiddenPaintFunc(DWORD pv,DWORD pp) { //... } BOOL CSharewareDialog::OnInitDialog() { // // let's find out its address. It can be done with debugger, // or simply like this: CString strAddress; strAddress.Format("0x%X",HiddenPaintFunc); AfxMessageBox(strAddress);// this string need to be commented // after obtaining an address ...
- 在十六进制编辑器中创建一个密钥文件,并将地址写入其中(不要忘记返回顺序 - 例如:00401602 -> 02164000)
- 最后,代替常规函数调用,我们编写以下代码
void CSharewareDialog::INeedCallLockedFunction(CDC*pDC) { FILE*pFile=NULL; pFile=fopen("C:\\pass.txt","r");// open key file if(pFile){ DWORD dwHidden=0; fread((void*)&dwHidden,4,4,pFile); fclose(pFile); if(dwHidden){ try{ DWORD dwParam=(DWORD)pDC; DWORD dwParam2=(DWORD)this; __asm{ xor ebx,ebx mov ebx,dwParam // pass some parameters push ebx mov ebx,dwParam2 push ebx call dwHidden // address of function we've got from key file // if key file is wrong - jump to anywhere } } catch(...){ AfxMessageBox("You must register this program."); } } else { AfxMessageBox("You must register this program."); } } else { AfxMessageBox("You must register this program."); } }
- 就是这样。
注释
有必要跟踪共享软件函数的地址,因为它可能会从构建到构建之间发生变化。