好友
阅读权限20
听众
最后登录1970-1-1
|
应官网邀请
程序全局逻辑如下:
1.程序首先判断用户名的有效性:
首先判断用户名的长度是否为39位,然后用#分割字符串1111#2222#3333#4444#5555#6666#7777#8888,分割为8串,且必须是0-9,A-F的组合,并且换为大写。
2. 如果用户名通过了检测,则进入第二步,利用8串字符串算出5个magic code
具体的实现伪代码如下:
3.接着程序就开始解析序列号了,解析序列号的算法是一个变异的base64
需要修改的地方有2处,一处是base64置换字符串被修改为了ZO6Kq79L&CPWvNopzQfghDRSG@di*kAB8rsFewxlm+/u5a^2YtTJUVEn0$HI34y#=第二处是每次查表的时候都需要一个新的变换
把标准的base64修改后,即可正常编/解码了
3.解码后的序列号有判断,是0x20的字符,接着程序会解密这20个字符。解密的函数是aes的变异版本,通过众多0x2C可以观察出来,该部分比较复杂。程序首先传入被加密过的内存与一个密钥welcomegslab2018
进入该函数,首先进入眼睛的就是aes的初始化rk的过程了
在这里,我们可以拿到被修改过后的sbox表,
首先,程序在根据key初始化rk表的时候,有一些地方跟正常的aes不一样。rk表会跟自己再进行xor一遍,每个字节的顺序也发生了变化
我们可以通过跟踪程序的相关代码分析出来
初始化完rk表后,跟标准的aes并不一样,然后就开始第一轮AddRoundKey了
伪代码如下:
此时的状态矩阵为
接着程序就要开始逆S盒变换了,要注意这里的行列是互换的,还有逆S盒也是经过替换的,也需要去修改
所以我们要修改行列的位置
处理完的状态矩阵为
接着,程序开始进行逆行变换
这里是行列相反,相关伪代码如下
此时的状态矩阵为:
然后程序开始第一次InvMixColumns,
第一次非常多的case的就是对in的InvMixColumns,完成后的矩阵变成了
接着程序开始变换key
先把第四行跟第三行交换,然后对key进行InvMixColumns,然后对加密的数据进行xor对key进行InvMixColumns:
Key xor 数据
伪代码如下:
接着就是aes-128的10轮循环了,附加个数据矩阵变换图
当程序解密完成后,有4个int64的值u1,u2,u3,u4其中u4是写死的
然后程序根据上面获取的5个magic code与u1,u2,u3做逻辑运算
得出解:
根据算出的u1,u2,u3就可以得到注册码了
|
免费评分
-
参与人数 4 | 威望 +1 |
吾爱币 +13 |
热心值 +4 |
收起
理由
|
JavaSM
| |
+ 1 |
+ 1 |
感谢发布原创作品,吾爱破解论坛因你更精彩! |
小小白/X
| |
+ 1 |
+ 1 |
如果是牛,就大牛 |
Hmily
| + 1 |
+ 10 |
+ 1 |
感谢发布原创作品,吾爱破解论坛因你更精彩! |
hackysh
| |
+ 1 |
+ 1 |
欢迎分析讨论交流,吾爱破解论坛有你更精彩! |
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|