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

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值