您的位置:首页 > 其它

0x02.Afkayas.1-WP

2018-02-01 12:26 92 查看
先打开程序随便输入查看情况

    




OD打开后,搜索相应的字符串找到了这里



往上面看发现了这里的JE是整个跳转的关键,同时发现了You Get It的成功字样:



然后把JE给NOP掉就显示出了结果,(人家竟然让我KEYGEN….)



判断的函数应该在前面,所以在前面一步一步下断点,发现了当在这里断点的时候,寄存器出现了变化:



EAX中的‘ssss’是我随意输入的serial,ECX中的‘780345’不知道是什么。

调用了箭头所指函数后,EAX中出现了像serial一样的东西:



所以推测箭头执行的函数是把ECX里面的字符串前面加上AKA-变成了serial,看来又是固定前面字符串后面自动生成的类型。

重新打开输入尝试了一下发现结果正确,确实是serial:



那么接下来开始分析这个780345是怎么来的:

不断在上面设断点,发现了这个函数执行后EAX出现了780345(这段还是借助百度,自己思路确实不太够。):



最后从前面开始慢慢分析,遇到VBA的相关函数就百度,最后的分析结果如下(换了吾爱破解版的写注释,要不正常OD中文注释实在是看不清。)



知识点:

       VbaLenBstr 求字符串的字节数

       RtcAnsVauleBstr 求字符串第一个字符的ASCII码

       VbaStrI4 将数字(dec)转换成相应的字符串

所以最后serial=AKA-len(name)*17CFB+’name[0]’,这样就可以写keygen了!

keygen如下:

#include<string.h>
#include<iostream>
using namespace std;

int main(int argc,char *argv[])
{
char name[50];
int serial;

while(1)
{
cout<<"Input the name:";
cin>>name;
if(strlen(name)>50)
cout<<"The name is too long!"<<endl;
else
{
serial=strlen(name)*(0x17CFB)+name[0];
cout<<"The serial is:"<<"AKA-"<<serial<<endl;
}

cout<<"Coutinue or not(y/n)?";
char temp;
cin>>temp;
if(temp=='n') break;
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CrackMe