003/160 CrackMe Afkayas #2

Nag

启动的窗口去除很简单
在 VBExplorer 里把 Timer1 的 Interval 改成1就可以了
在这里插入图片描述

KeyGen

涉及到一些 VB 函数

  • __vbar8Str 将一个字符串转为双精度单精度浮点型(8个字节)的数值形式

还有一些浮点相关的汇编语句:

  • fld dword ptr ds:[0x401008] 将[0x401008]的值以浮点型放进ST0里面
  • fdiv dword ptr ds:[0x40100C] ST0中的浮点数除以[0x40100C]的值
  • fstsw (store status register) 把状态寄存器取出并存入内存变量中
  • fstp qword ptr ss:[esp] 将ST0里面的浮点值,放到esp指向的堆栈里面,同时清空ST0

分析过程:
依然是搜索字符串下断点,单步分析,过程比较长,分多步进行计算
第一步计算方法和 002 Afkayas #1 一模一样
只不过把数换成了 0x15B38 而已
在这里插入图片描述
第二步:
在这里插入图片描述
第三步:
在这里插入图片描述
第四步:
在这里插入图片描述
四步运算之后就可以得到注册码了

总结一下:
注册码为:(用户名长度*0x15B38+用户名第一个字符的ASCII码值)整体+2,得到的结果*3,再减去2,最后加上15

C语言注册机:

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

int main()
{
	unsigned char username[200];
	int u1,u0;
	int id;
	scanf("%s",username);
	//第一步
	id=0x15B38*strlen(username);
	id+=username[0];
	//第二步
	id+=2;
	//第三步
	id*=3;
	id-=2;
	//第四步
	id+=15;
	printf("%d",id);
	return 0;
}

注册效果:
在这里插入图片描述
中文处理方式同 Afkayas #1

C语言中文注册机:

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

int main()
{
	unsigned char username[200];
	int u1,u0;
	int id;
	scanf("%s",username);
	//第一步
	id=0x15B38*(strlen(username)/2);
	id+=(0xFFFF<<16)+(username[0]<<8)+username[1];
	//第二步
	id+=2;
	//第三步
	id*=3;
	id-=2;
	//第四步
	id+=15;
	printf("%d",id);
	return 0;
}

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值