winrar密码破解原理
第一步:用winhex将下面数据生成rar格式的文件。
526172211A0700CF907300000D0000000000000056947424965E00600000004900000002E3B1696DEE413D3B1D33310020000000C3EBC6C6B2E2CAD44279CCECD2D76C6F76652E74787400796AD234784B6DD58B0A427929591366006C6F7665002E7478742E2E5B7A2D7B7D2E2E39423843569449C8691BEC768E16663C5F9ED737AE6CDDC6178C0837F6BB88DAA8356B02A700C776FC0F1091C1D16712FC075A011D5B5DEF7E46966E8B878B80DABCDF9683C49165FFB993A77CDE8600A1262200F3D3D5315DF0FC4E2B3ACAA3943F142EC43D7B00400700
第二步:在winhex中取65h-71h一段数据ctrl+c后粘贴到密码输入框点确定完成秒破。(实例一)
实例二
526172211A0700CE997380000D00000000000000395B7A2D7B7D2E2ED417190FDC99688612D2B31773CD93FE082F30D3229C8F77F51B936AD003E65AADF605471FA4ED0E3655748BCC8F5FA5BFDE4651275A2AA306CB7999C579C249C5AF56A0D3744BD7A695586FEF9FB1AB146CA80DED886936DE3AB003EC44215BA8497E4C1A974D45810C8F1277726881548FBAB842BCF9E17B815C116260ADFEB9151DF97C6F93A673629691B767F883950018B7DE7C0D86FFF04A10905E32BD1DB015B709A298DB8D2C42DF23A131F2AD999AA3BB2316F031C5115c179a2f877a41393761683939
选中14h-1bh一段数据ctrl+c后粘贴到密码输入框中后面再加上dch-e3h处的ASCII字符,确定后即秒破了!信不信由你!
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就可以了。
具体步骤:
创建一个新RAR文件,OD载入WINRAR程序,F9跑起来,打开这个空RAR文件,往里面添加一个文件,这时WINRAR程序会弹出添加文件到压缩文件的对话框。第一步要做的是在这个对话框保存我们输入的密码时断下。
怎么定位这个并不难,因为当在添加文件的对话框中高级选项卡点击“设置密码”的时候,会弹出输入密码的框,就从拦截这个对话框入手,程序弹出这个子对话框采用的是DialogBox
ParamA,只要在这个API上下断就可以断下:
77D3B144 > 8BFF            mov    edi, edi                        ; WinRAR.004BB5D0
看堆栈:
0012A404  00482A3B /CALL 到 DialogBoxParamA 来自 WinRAR.00482A36
0012A408  00400000 |hInst = 00400000
0012A40C  004AC73C |pTemplate = "GETPASSWORD2"
0012A410  00040714 |hOwner = 00040714 ('高级',class='#32770',parent=001B06FA)
0012A414  0047D78A |DlgProc = WinRAR.0047D78A
0012A418  0012A428 \lParam = 0012A428
进到调用来源00482A36,看一下调用过程:
00482A1E |. 8D95 7CFFFFFF lea    edx, dword ptr [ebp-84]
中秋法定假日几天
00482A24 |. 52            push    edx                              ; /lParam
00482A25 |. 68 8AD74700  push    0047D78A                        ; |DlgProc = WinRAR.0047D78A
00482A2A |. 53            push    ebx                              ; |hOwner
00482A2B |. 68 3CC74A00  push    004AC73C                        ; |pTemplate = "GETPASSWORD2"
00482A30 |. FF35 48214B00 push    dword ptr [4B2148]              ; |hInst = 00400000
00482A36 |. E8 95F10100  call    <jmp.&USER32.DialogBoxParamA>    ; \DialogBoxParamA
00482A3B |. 85C0          test    eax, eax快刀斩乱麻打一成语是什么
00482A3D |. 0F95C1        setne  cl
00482A40 |. 83E1 01      and    ecx, 1
00482A43 |. 8BD9          mov    ebx, ecx
00482A45 |. 84DB          test    bl, bl
00482A47 |. 74 15        je      short 00482A5E
00482A49 |. 8D85 7CFFFFFF lea    eax, dword ptr [ebp-84]
00482A4F |. 50            push    eax
00482A50 |. 57            push    edi
00482A51 |. E8 2A520100  call    00497C80                        ; CopyString
由于对话框调用完后紧接着是一个字符串拷贝,因此可以推断传送给密码对话框的这个lParam参数就是让密码对话框保存密码的位置,对话框关闭之后又将密码Copy到一个全局数据区保存起来(对对话框窗口过程的调试证明这个推测是正确的),而此时的edi就是保存密码的全局数据区地址,这个值是004BB5D0。
授权委托书格式
在call DialogBoxParamA的下一句下断,F9让密码对话框出现,填写密码(不要超过8字节),按确定,断下了,然后F8观察CopyString的参数证实上面的推测是正确的。
现在仍然在对话框的窗口过程中:
00446AB4 |. E8 27BF0300  call    004829E0
00446AB9 |. 84C0          test    al, al
00446ABB |. 74 47        je      short 00446B04
00446ABD |. B8 E6000000  mov    eax, 0E6
00446AC2 |. 803D D0B54B00>cmp    byte ptr [4BB5D0], 0
00446AC9 |. 75 05        jnz    short 00446AD0
00446ACB |. 05 F8020000  add    eax, 2F8
湖北的二本大学00446AD0 |> E8 FBBAFCFF  call    004125D0
关于疫情的诗
显然后续代码证实了4BB5D0开始的全局数据区的确是在存取密码的。
于是下一步在WINRAR程序从这里取出密码进行加密操作的时候把它断下。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。