11.11大促主会场
新人页面
精选商品
首月0月租体验,领12个月京东PLUS
自营热卖

004/160 CrackMe ajj CKme

执手共存亡 1年前   阅读数 90 0

分析

可以通过搜索字符串的方式找到 “恭喜恭喜!注册成功” 的提示
在关键跳转上面打断点,输入一组假的 Name Serial 测试
发现点击图片框时程序会停在断点,说明图片框和按钮作用相同
直接 nop 掉关键跳转即可完成爆破,下面再研究一下注册机

在这里插入图片描述

注册机算法分析

分析上面的代码,但是看不出来注册码是怎么算出来的
甚至也找不到正确的注册码
在这里插入图片描述
查一下发现是 Delphi写的在这里插入图片描述
那么可以用 Delphi Decompiler 试一下
发现三个有关函数 chkcodePanel1ClickPanel1DblClick
chkcode 的位置在 0x00457C40,回到 OD 下断点试试
在这里插入图片描述
在 OD 里找到对应的位置,上面还有一些奇奇怪怪的字符串
下完断点在注册码里每输入一个字符都会触发一次断点
说明注册码的正确性应该是在输入过程中进行判断的
在这里插入图片描述
果然,注册码的生成就在 chkcode 这部分
在输入注册码过程中判断是否正确,再点图片框显示图片
最终注册码为 "黑头Sun Bird" + [注册码长度+5] + "dseloffc-012-OK" + [用户名]
在这里插入图片描述
粘贴进去试试:
在这里插入图片描述
这个时候你会发现输入注册码以后需要点好几下才能显示注册成功的图片
想起刚才看到的 Panel1ClickPanel1DblClick 两个函数
在 IDA 里对反编译这两个函数就会发现
输入注册码之后还需要 先双击再单击图片框 才能显示图片
下图对比 IDA 中单击和双击和两个函数
左侧为单击事件,右侧为双击事件
在这里插入图片描述
C语言注册机:
简单粗暴,终于不用像前两个CM一样考虑中文了,感动ing

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

//英文 
int main()
{
	unsigned char username[200];
	scanf("%s",username);
	printf("黑头Sun Bird%ddseloffc-012-OK%s",strlen(username)+5,username);
	return 0;
}

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

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

注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: