使用Resource Hacker+IDA定位程序验证逻辑,不熟悉的可以看我逆向技巧栏目相关文章。按下F5分析,可以得出等价伪代码以及对应注册算法如下
#include <iostream>
using namespace std;
/*int main(HWND hWnd)
{
int result; // eax@3
char szSerial[33]; // [sp+Eh] [bp-42h]@1
char szName[33]; // [sp+2Fh] [bp-21h]@1
char szCipherText[] = "203945709398475029384750293875577934765620110289347563929867122287863095762304984875020398746563";
int iSLen = GetDlgItemTextA(hWnd, 102, szSerial, 32);
int iNLen = GetDlgItemTextA(hWnd, 101, szName, 32);
if ( iSLen==iNLen && iNLen>=4)
{
for (int i=0; i<iNLen; ++i)
{
if (szSerial[i] != szCipherText[szName[i]-32])
{
MessageBoxA(hWnd, off_40204C, off_402048, 0);
return 0;
}
}
MessageBoxA(hWnd, off_40203C, off_402038, 0);
result = 1;
}
else
{
MessageBoxA(hWnd, lpText, lpCaption, 0);
result = 0;
}
return result;
}*/
void main()
{
char szSerial[5] = {'\0'};
char szName[] = "@@@@";
char szCipherText[] = "203945709398475029384750293875577934765620110289347563929867122287863095762304984875020398746563";
for (int i=0; i<4; ++i)
szSerial[i] = szCipherText[szName[i]-32];
cout<<"The Serial:"<<szSerial<<endl;
}