002/160 CrackMe Afkayas #1

Crack

依旧可以搜索字符串找到提示的错误信息
之后在上面下断点,单步往下走就可以在寄存器中看到正确的序列号了
002/160 CrackMe Afkayas #1_第1张图片
002/160 CrackMe Afkayas #1_第2张图片
002/160 CrackMe Afkayas #1_第3张图片

KeyGen

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

关键代码:
002/160 CrackMe Afkayas #1_第4张图片
C语言注册机:

#include 
#include 

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

注册效果:
002/160 CrackMe Afkayas #1_第5张图片
然而到这里还没有结束,你会发现输入中文不能正确注册
这是因为中文采用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;
}

中文注册效果:
002/160 CrackMe Afkayas #1_第6张图片

你可能感兴趣的:(CTF,#,Reverse)