0x02.Afkayas.1-WP

先打开程序随便输入查看情况

    

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;
 } 

猜你喜欢

转载自blog.csdn.net/qq_39153247/article/details/79226605