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;
}
中文注册效果: