其他分享
首页 > 其他分享> > [160CrackMe]Afkayas.1

[160CrackMe]Afkayas.1

作者:互联网

是个VB写的程序,输入错误的时候会显示You Get Wrong. Try Again
在这里插入图片描述
OD中打开,字符串没有被隐藏,双击跟踪you get it
在这里插入图片描述
双击跟踪之后向上翻,有个jge条件跳转(ZF=1),上面那个test修改标志位,说明si里面的值是关键,si里面的值不能是0
在这里插入图片描述
向上翻,看看esi里面的值被修改的地方,找到几处,发现了一个_vbaStrCmp字符串比较函数,返回值放到esi里面,然后先用neg取相反数,然后自增,再取相反数。
在这里插入图片描述
继续向上翻,对VBAPI不是很熟悉,没找到文本框输入函数在哪里,直接下断点调试了。

输入测试数据之后让程序断在如下所示的位置(多次调试可以发现输入文本在此处第一次开始被处理),接着看看它做了什么,

_vbaLenBstr函数获取了输入的用户名的长度,然后把这个长度乘上了常数0x17CFB,然后加上第一个字符的ASCII值,这个ASCII值是用的rtcAnsiValueBstr得到的。

加好后数据转成对应字符(例如 1 → \rightarrow →’1’)。
在这里插入图片描述
紧接着是一些无关紧要的实例化对象,释放内存等等,直到下图所示的地方,"AKA-"跟那个字符串拼接成了一个新的字符,与我们输入的序列号用_vbaStrCmp函数做对比。
在这里插入图片描述
分析结束,可以写注册机了

#define _CRT_SECURE_NO_WARNINGS
#include<string>
#include<iostream>
using namespace std;
int main()
{
	int temp;
	string name;
	cout << "请输入你的用户名:";
	cin>>name;
	temp = name.size()*0x17CFB+name[0];
	cout<<"your serial is \"AKA-"<<temp<<"\""<<endl;
	return 0;
}

验证一下
在这里插入图片描述
在这里插入图片描述

标签:Afkayas.1,字符,name,160CrackMe,字符串,相反数,输入,函数
来源: https://blog.csdn.net/m0_46296905/article/details/118709772