ratel扩展base64算法,扩展后仍然属于一种编码算法而非加密算法(其实融合了密码功能,但是考虑本身也是对称算法,密码依然需要写入到客户端。所以将密码写私死到算法中)。 具体包括如下扩展:
修改了base64标准码表,这是很容易实现的对抗。攻击难度不大,但是实现简单。
标准base64算法,采用三字节分组,结果为三字节到四字节的转换。3 * 8 -> 4 * 6
,对应关系从高位到低位顺序分割。
ratel扩展算法,使用了随机分割方式,在24比特中,按照随机码表,抽取对应的比特位。组成另外的 4 * 6组合。抽取码表随机生成,并且码表会附加到base64算法输出内容中。
码表对应关系,及其容易通过概率统计方式攻击成功。为了避免相同输入,产生相同的输出,需要对输出结果执行震荡操作。最简单的实现方式就是异或。 首先由于伪随机算法特征,对于指定随机种子,按照特定的随机数获取顺序,可以产生特定的随机数序列。可以保证输出的随机数序列不可逆+具有震荡效果。 我们使用特定随机数种子,产生无限长的随机数序列。并且使用该序列和base64输出执行异或操作。
rsa算法做二次定制难度较大,需要有比较高的数学功底。所以我没有对rsa做自定义,但是rsa算法可以实现非对称加密。依赖这个特征,没有人可以实现通用注册机(客户端只会存在rsa公钥,不会存在私钥)。 没有人在没有私钥的情况下,获取到ratel授权证书签发权限,就算最终破译我们的加密算法也无法做到。
在ras公钥私钥描述中,我使用ratelBase64算法dump字节流(正常情况下,应该使用标准的bases64实现dump)。 ras公私钥定义如下
wBHNol9A#+ZmOaGnPYFudvxbc8a367c8bXJgXbAuquFXaPKIllTl1tRTnu6cQfbDLtA92G9tZBAvrAxWzh9m4R2OSk9ysIvDUuGNAPWfBSmqUpmuoiOdvHUmGPEnntYB6#TcUpVPsbGgQRk1OOaMtWCAlNg1JZLEJz5WMBmZAR8hwC+rI2aCsWxxa3k1yEwxiMSqsb5UgZNDXz1USwtK6C73qWPo0oQNNigbs5eModQqvRgCR1rO4jUbBGGjISpMyh4Ayrwk3g0tjm4zSrnCt3+SWOS00huE4J7va4ZxJfDpWNlnj#Mh7didiHwC5qNg7fwSVTa+0ERUK3BNAwMwsC6YHapvnOuWVbrI#GqDeeN4iMdPeY5bn3I+Ob#yfbLaGjbytrUqGNcQHXFkT2jzfzfiIXZ3JmW2lqbpwyiB91SlN5gj2ZmxHXfFcwOpEyMjNWTVUuLM2FsKmEM3O6VmqRXmMgkFJHQb58WzpYNAon9pnM5gsJGlmbd#4blRTRUMJGOwEkvCSM30kEpNX94nKJVfiL7ZrbnILJzbnoPYfejsx86tmdCs92zK11+2ZDXG1lcJigIBv0U8knmdpb4XwCXusbvEzK#Cut#tphla2gcrBtmhaS59rOec0or18DSLgMpGZfFIH5UsUhSI4PmDDjTme3XG8zyMIEZUucCGjnGQBGm21bz76OL60#A0HGAUzcY628Ij#IpTdc6bClJxHZ0wTvu4HfIyDu0SJfrCNyyY9MMplvrXHnepvyeESgjhzPJ90vDhyPnv1559M82nWjRYUnhk7z4b4TLXrqZzmrpdJWJtXTV2NuVufwLQ415nx9jL8LTAjnGKYvIIKfh0om2eSmG6x+RR2Ydji6gveJlE4aB=
wZYxOmvlud#b9NaPnBHFAoG+fc530e06couQVdTZOaaq+bhrof1qtSLwz3IR0alykOlNN#lFO1GRe9E#sZoPzUvCdamtAdHoVhbt#YONYdJWyvPsW#q8Ly1GO6WzRTJWYnvAxiHrNaU9vzycEejWhyfaWEHdsLh908r0QLXnqT6seG3fSRmHx6eMImKX2KDtgTcHxuL5P8uzvJD4r1i#FFq8wpx1BJ8xvCHXLaWinIANQoZnm0Jca4zD
base64算法本身来说,起算法逻辑还是比较简单,不少人可以在不看算法描述的情况下,独立完成base64算法实现。我们对base64的改造,应该也不会增加太大强度(其实我觉得难度已经让大部分高手无法攻破了)。 所以,仍然需要一个复杂的加密算法,进行二次改造。在标准算法基础上,做少许改动,让他不符合标准之后,攻击者在对算法逆向过程中,纯粹依靠对二进制的熟悉程度来说是无法做到攻击成功的。需要攻击成功必须对本算法的标准, 做到非常了解(知道改动点和标准的差异分支)。也就是说,二进制逆向能力+标准加密算法能力都需要非常精通才行。
des修改点如下:
- 处理轮数,由16轮,修改为17轮。然后在subkey的移位表中,需要append低17轮的移位配置。
- 采用cbc模式加密,并设定初始向量(Initial Vector)为:5597
- 调整E置换表(扩展置换表),起左右冗余关系顺序调整
- subkey 产生过程,增加异或操作: cd = cd ^ 3543654654623L;
- sBox,第二组,第三组修改顺序
- feistel函数输出,增加异或操作: return P(dst) ^ 3436547;
首先执行des加密,加过结果使用ras私钥再次加密,rsa加密的输出,使用自定义base64处理,得到最终结果
TODO
ratel-keygen -a virjar -t AuthorizeTypeDebug -x "just for ratel debug key" -p "com.xxx.xxx" -s "23435,547657,95645"
UlOLyd5iWWJopE0XlrjUk+daaNAKvf5+YMsl7UTZPOmZQHINMwQogqK2VUBpH79PpkY+HFEwfLTr7LVnwQXgZf0v+IfY3f7vBR3rfBgQUQufJLBDAVXFzjJ9HNmRQV1Nbv4EBWmz1CSd67zJ32vlLa74nr2CmZuVeYrl/wNUlAdXy96fP3SUZQ8qIIC7sVtJyyoKlgH+fUGhxyGbbG3ObO5I2pI52x+ugqaAu2i5Z8zjkrtYE4KWxb6XvkH33Ke6uL8NqdE3dGUTIxBZSxW03GT6NgYZ5gvhM00X3JnSEF7DZIMfcE8qXo2JrWu628OYMHIRQOc41XN1aAQw7B6dsBpKCtrAFLEdwQ1z4WsjRqG5GaKTLvQWNBwAjKFz0vvxRZEIpsaEvET1rPhfjVS39MLihK6SCq9fIiJcoIHMtDkMZ0kWUomYK0Dkf1ePXJlmpOC1puRIacGgXF617yXfJY6dWFJs4DtlMm+vu4oCNmsxwbEP+d3Pg9q2mufIeF4zHuSLj9SnGGqa/F/CoQo+rrZkWtUAFJOpt0nAzSvxvbZnVDnIDnz3wVHpRAxKq7h8CSaZi7qwuMjE24Cr/aKhUY4yqR/Cc7C0VzIJSmWSXQm7P6EUHbUb1HYQtCnPyCS/mSkVRUeIWINSFaXfEBBl3e9eFGF901a1QNVMzfk3EFgotgyNfNmxn7smtVIrjbVoNDyg97qFtZlbPO66I2+/w7fGy6X1nIHmmCwuJnX6IBrz951lXSUFcGxLpaLtSCMPUErmydPtFNcUv6C6OPIBCbDttgr2mdQaMyfxiMuAfVZcEAl0lmwzk3aPCtapINBXDi5n7jL1BEbh0v+jtttzwiOtWCIp5v5+6KeYBCOg4s2Z0oZVxhmf0bcBA8lRiUk2HR4BY6cYVrvuAy6OCjDLtXdJQPYSQxJ+HCRVh/2oXfIitmUWesrmC7w4Tnhj94s3FkptGnJ2d62riCaRlr2h4LMiosAfpmh+1Gx/mrA5nndsEMNVFST1XHOdPIffoPlR
ratel-keygen -i UlOLyd5iWWJopE0XlrjUk+daaNAKvf5+YMsl7UTZPOmZQHINMwQogqK2VUBpH79PpkY+HFEwfLTr7LVnwQXgZf0v+IfY3f7vBR3rfBgQUQufJLBDAVXFzjJ9HNmRQV1Nbv4EBWmz1CSd67zJ32vlLa74nr2CmZuVeYrl/wNUlAdXy96fP3SUZQ8qIIC7sVtJyyoKlgH+fUGhxyGbbG3ObO5I2pI52x+ugqaAu2i5Z8zjkrtYE4KWxb6XvkH33Ke6uL8NqdE3dGUTIxBZSxW03GT6NgYZ5gvhM00X3JnSEF7DZIMfcE8qXo2JrWu628OYMHIRQOc41XN1aAQw7B6dsBpKCtrAFLEdwQ1z4WsjRqG5GaKTLvQWNBwAjKFz0vvxRZEIpsaEvET1rPhfjVS39MLihK6SCq9fIiJcoIHMtDkMZ0kWUomYK0Dkf1ePXJlmpOC1puRIacGgXF617yXfJY6dWFJs4DtlMm+vu4oCNmsxwbEP+d3Pg9q2mufIeF4zHuSLj9SnGGqa/F/CoQo+rrZkWtUAFJOpt0nAzSvxvbZnVDnIDnz3wVHpRAxKq7h8CSaZi7qwuMjE24Cr/aKhUY4yqR/Cc7C0VzIJSmWSXQm7P6EUHbUb1HYQtCnPyCS/mSkVRUeIWINSFaXfEBBl3e9eFGF901a1QNVMzfk3EFgotgyNfNmxn7smtVIrjbVoNDyg97qFtZlbPO66I2+/w7fGy6X1nIHmmCwuJnX6IBrz951lXSUFcGxLpaLtSCMPUErmydPtFNcUv6C6OPIBCbDttgr2mdQaMyfxiMuAfVZcEAl0lmwzk3aPCtapINBXDi5n7jL1BEbh0v+jtttzwiOtWCIp5v5+6KeYBCOg4s2Z0oZVxhmf0bcBA8lRiUk2HR4BY6cYVrvuAy6OCjDLtXdJQPYSQxJ+HCRVh/2oXfIitmUWesrmC7w4Tnhj94s3FkptGnJ2d62riCaRlr2h4LMiosAfpmh+1Gx/mrA5nndsEMNVFST1XHOdPIffoPlR