[转贴] RAR“秒破”教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[转贴]RAR“秒破”教程
技术是一点点积累的,每天消化一点吧
以前的东西,绝对的经典
winrar加密分析
原作者:天易love 转载来自:看雪学院
一、加密文件大体结构:
1、只加密文件内容时。偏移14-15h是对其后一直到文件头结束处
也就是加密数据开始处的校验值。文件头中文件名后至文件头结束处是八字节的salt和5字节的未知区域(功能暂不详),加密数据后紧跟固定的结束字符串c4 3d 7b 00 40 07 00。
2、头和内容均加密时:偏移14-15h是salt2,尾部还出现一次。紧
跟的是加密的文件头(头中尾部是salt1和5字节的未知区域)和加密的文件内容(压缩后再进行aes加密),最后就是salt2和经过aes 加密的固定结束字符串。注:生成salt的函数调用了2次。
二、简述salt算法:
1、由SystemTime得到FileTime;
2、分别对FileTime的两个DWORD进行hash_process;
3、hash_final后得到的digest的最前面的两个DWORD就是salt。
三、加密过程:
1、先将salt接在unicode形式的密码后再用hash_final生成aesinit、aeskey、10轮round key。
2、压缩好的文件内容分组长为每一个分组128bit,开始加密前先与前一个分组xor生成一个state参与aes加密,第一个分组与aesinit进行xor。
四、隐患:
由于salt是随机产生,因而aeskey和round key也是随机的,文件加密结果就是随机的。这个变量的使用给我们提供了利用空间。插一句,假如由加密后数据逆推得到aeskey但由于是经过hash得到,这是不可逆的,所以不可能知道密码。唯一可行就是让其加密过程中自己将密码保存到salt处最好用可逆向的加密算法处理一下,这不会有任何影响,只是让它多了层含义。
以上是我的一点肤浅的认识,望批评指正!
天易love
winrar加密“秒破”
原作者:天易
love 转载来自:看雪学院
第一步:用winhex将下面数据生成rar格式的文件。526172211A0700CF907300000D0000000000000056947424965E006000 00004900000002E3B1696DEE413D3B1D33310020000000C3EBC6C6B2E2 CAD44279CCECD2D76C6F76652E74787400796AD234784B6DD58B0A4279 29591366006C6F7665002E7478742E2E5B7A2D7B7D2E2E394238435694 49C8691BEC768E16663C5F9ED737AE6CDDC6178C0837F6BB88DAA8356B 02A700C776FC0F1091C1D16712FC075A011D5B5DEF7E46966E8B878B80 DABCDF9683C49165FFB993A77CDE8600A1262200F3D3D5315DF0FC4E2B 3ACAA3943F142EC43D7B00400700
第二步:在winhex中取65h-71h一段数据ctrl+c后粘贴到密码输入框点确定完成秒破。(实例一)
实例二
526172211A0700CE997380000D00000000000000395B7A2D7B7D2E2ED4 17190FDC99688612D2B31773CD93FE082F30D3229C8F77F51B936AD003 E65AADF605471FA4ED0E3655748BCC8F5FA5BFDE4651275A2AA306CB79 99C579C249C5AF56A0D3744BD7A695586FEF9FB1AB146CA80DED886936 DE3AB003EC44215BA8497E4C1A974D45810C8F1277726881548FBAB842 BCF9E17B815C116260ADFEB9151DF97C6F93A673629691B767F8839500 18B7DE7C0D86FFF04A10905E32BD1DB015B709A298DB8D2C42DF23A131
F2AD999AA3BB2316F031C5115c179a2f877a41393761683939
选中14h-1bh一段数据ctrl+c后粘贴到密码输入框中后面再加上dch-e3h处的ASCII字符,确定后即秒破了!信不信由你!
轩辕小聪的分析:
了楼主给的文件,再学习一下RAR文件头结构,算是明白楼主的意思:
RAR加密的原理,是将UNICODE格式的密码,与随机生成的一个8字节的SALT连在一起,根据它生成AES算法的密钥来进行加密。而加密后的RAR中,除了加密后的原压缩内容之外,文件头结构还保存了这个SALT值用于解密。
原则上SALT的生成过程跟用户输入时的密码一点关系都没有,因此它本来不保存关于密码的显式信息,但是我们可以对WINRAR程序进行patch,使SALT跟密码发生直接联系,从而使这个SALT成为潜在的“后门”。
由于SALT只有8个字节,所以对于8个字节以内的密码,可以直接保存在SALT中(或者简单的XOR一下或其他,反正可以用很容易的可逆的算法处理)。
那么密码超出8字节怎么办?这里楼主分为两种方式处理,分别是实例一和实例二。
实例一应该是利用了把文件头的HEAD_SIZE字段改大,这样文件头多出来的地方(WINRAR读取文件头时是跳过这部分的)就可以保存密码8字节以后的内容。实例一中的65h-6ch内容就是SALT,而
6dh-71h就属于把HEAD_SIZE改大之后多出来的部分了。
但是实例一这种方法应用的前提是文件头没加密。如果文件头被加密(这时MAIN_HEAD的HEAD_FLAGS包含0x0080),那么MAIN_HEAD 后面紧跟着的就是SALT(实例二的14h-1bh内容),SALT后面则是被加密的所有内容(包括文件头)。那么怎么把密码8字节以后部分搞进去?实例二的做法,我猜是因为加密过程是16字节为一组,加密后的内容也应该是16字节的倍数,所以解密时也以16字节为单位读取,当文件内容最后跟着一段小于16字节的数据时,WINRAR 解密时直接无视这段数据。于是就可以把密码的后半部分放在文件最后(但是不能超过16字节),这样用这种方法可以保存不超过23字节的密码。
按照这个思路,我调试了一下我电脑上的WINRAR 3.70。
我只考虑密码不超过8字节,实际上问题就是找到WINRAR程序操作压缩的过程,在程序把SALT和密码连在一起之前,把SALT改为和密码一样,这样压缩出来的就是那样的文件了。超过8字节的代码只要按照上述思路自己修改生成后的RAR就可以了。