-
-
[原创]小萌新的第三个crackme算法分析(序列号保护)
-
发表于:
2020-2-4 21:45
5116
-
[原创]小萌新的第三个crackme算法分析(序列号保护)
小萌新的第三个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期)