002/160 CrackMe Afkayas #1

Crack

依旧可以搜索字符串找到提示的错误信息
之后在上面下断点,单步往下走就可以在寄存器中看到正确的序列号了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

KeyGen

直接扔进 IDA 中效果不理想,所以只能分析汇编了
在判断的上面打上断点,直到算出注册码,找到关键计算过程
由于不支持asm代码高亮,所以还是放图片吧
最终注册码为:用户名长度*0x17CFB+首位ASCII码

关键代码:
在这里插入图片描述
C语言注册机:

#include <stdio.h>
#include <string.h>

int main()
{
	unsigned char username[200];
	int id;
	scanf("%s",username);
	id=0x17CFB*strlen(username);
	id+=username[0];
	printf("AKA-%d",id);
	return 0;
}

注册效果:
在这里插入图片描述
然而到这里还没有结束,你会发现输入中文不能正确注册
这是因为中文采用GBK编码,需要考虑前两个字节
同时 movsx 会把高位填成 0xFFFF

C语言中文注册机:

int main()
{
	unsigned char username[200];
	int id;
	scanf("%s",username);
	id=0x17CFB*(strlen(username)/2);
	id+=(0xFFFF<<16)+(username[0]<<8)+username[1];
	printf("AKA-%d",id);
	return 0;
}

中文注册效果:
在这里插入图片描述

发布了32 篇原创文章 · 获赞 104 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/csg999/article/details/104044647