先打开程序看看:
需要解决一开始的NAG窗口和之后的serial(做完了回来补充:name可以不是数字,因为通过name生成数组字符串,但是serial必须是数字,因为要进行浮点数之间的比较,所以如果不是数字会报错)
通过搜索关键字符串找到了这里:
发现了You Get it,进入汇编代码位置,发现关键跳转函数:
所以很简单,只要把je给nop掉就能显示You Get It 了:
接下来开始想办法写Keygen了:
往上查找,看到了一个VbaStrMove函数,应该在搞事情,所以设断点后重新运行,发现了寄存器中疑似serial的东西
又因为name和serial只能是数字,所以这个可能就是完整的serial,输入进去看了一下,果然正确了:
那我们就继续向上去找生成serial的函数,找了好久之后找到了这里:
应该就是生成serial的入口了(跟Afkayas.1挺像),接下来开始分析这段函数
执行到这里就可以看到正确的serial了,说明算法到这里应该就结束了,不过谨慎起见再看看:
果然发现下一步跳到的地方开始将我们输入的serial变成浮点数然后进行比较了。
所以最后的serial=[len(name)*15B38+ASCII(NAME[0])+10/5]*3-2-(-15)
keygen如下:
#include<iostream>
#include<string.h>
using namespace std;
int main(int argc,char *argv[])
{
int serial;
char name[50];
while(1)
{
cout<<"Input the name:";
cin>>name;
serial=strlen(name)*(0x15B38)+name[0]+10/5;
serial=serial*3-2+15;
cout<<"The serial is:"<<serial<<endl;
cout<<"Coutinue or not(y/n)?";
char temp;
cin>>temp;
if(temp=='n') break;
}
system("pause");
return 0;
}