首页
社区
课程
招聘
[原创]小萌新的第三个crackme算法分析(序列号保护)
发表于: 2020-2-4 21:45 5116

[原创]小萌新的第三个crackme算法分析(序列号保护)

2020-2-4 21:45
5116

小萌新的第三个crack算法详解(序列号保护)

Lixu

2020年2月4日 20:48:16

这个crack还是来自看雪,哈哈, 每天一个小crack练习,让我的算法分析更上一层楼,加油呀!!!

工具:PEID,DO

1,老规矩直接查壳,看来这个crack的作者很调皮哦!看入口点就知道,没有啥吧!

 

2,进OD发现作者人不错,没有刁难我们,往下扒拉扒拉就可以找到GetDlgItemTextA这个函数调用的地方,当然你也可以用OD的函数名搜索,然后下断点也可以过来。过来之后我们就要开始详细的算法分析。

 1. 第一块很简单,就是看你输入的用户名的字母个数是不是>=5;比5小的话就直接提示错误。

 

2. 第二块,获取到字符串后进行判断,看你是不是输入了奇奇怪怪的符号,保证每个字符的hex值>20.并将每个字符的hex值进行累加,保存到eax。

 

3. 第三块,将刚刚的累加结果进行循环左移3位,这里在写注册机的时候稍微有点费劲。再和0x515a5进行异或,然后存入eax。

 

4. 第四块,依次获取序列号,必须是纯数字,每次取一个数然后将hex值-0x30后存入ebx,然后将A和edi相乘,再将上两步的结果相加存入edi,继续下一次的循环。循环结束后再将循环结果和0x87CA进行异或。

 

5. 第五块,将用户名和序列号的计算值相加,判断是不是等于0x797e7,相等的话就正确。

 

算法总结:
由于注册信息必须满足
F(注册名) + G(注册码) = 定值
所以要进行逆推.已知定值等于0x797E7
很容易得出:G(注册码) = 定值0x797E7 - F(注册名)
根据分析的结论,以注册名yanmeng为例,
F(注册名) = 0x502DD
所以: G(注册码) = 定值0x797E7 - F(注册名) = 0x797E7 -  0x502DD = 0x2950A
因为
G(注册码) = XOR(注册码的16进制,0x87CA), 
所以:注册码的16进制就等于XOR(0x2950A,0x87CA) 
即::注册码的16进制 = XOR(0x2950A,0x87CA)  = 212C0
所以注册码就应该等于135872

注册机:


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2020-2-5 18:14
2
游客
登录 | 注册 方可回帖
返回
//