最近使用的一个软件过期了,需要注册,没事就研究了一下。打开软件界面是这样的
1.png
初次打开这里的当前密码是没有的,我这里是注册过的,然后还要选择一下区域,我选的是欧洲区
1-1.png
随便输入一个码,然后下个断点,找到调用函数sub_41D500
2.png
发现需要长度是46,后10位是时间,由年月日时分组成,然后前面年份添加20开头,后面秒用01
3.png
3-1.png
接着往下走可以看到46位密码由前32位 + 4位的订阅时间 + 10位的时间 组成
4.png
前面是对密码的组成部分判断,sub_420D80函数就是具体处理的。
5.png
进入函数先截取了软件版本部分
6.png
然后用软件标识和软件版本调用TisServiceRegistration函数得到一个32位的码,这个码需要和输入的一致
7.png
第一次调用TisServiceRegistration后还需要调用一次,一个参数是上面的32位码,一个参数其中一部分是sub_425100而来,用他返回的结果+4位的订阅时间 + 10位的时间
8.png
这个函数里面用到了DecryptByRotatShiftVariable函数
9.png
DecryptByRotatShiftVariable需要的参数是前面Lookup调用的结果,我们通过aSharedseuKbc9x找一下就发现了
10.png
这样欧洲区域注册码的基本流程就完了,其他区域类似,有兴趣的小伙伴可以试试。
TisServiceRegistration和DecryptByRotatShiftVariable函数可以直接通过他的函数地址直接调用就懒得扣出来了
写代码试一下,注册码更改成新的了
11.png
12.png
13.png