【免责说明】
本贴仅用于交流经验之用,只可用于我的研究试验,不得用于商业用途。
请在下24小时后删除,若产生不良后果,使用者应自已承担。与本人无关。
文章未经做者赞成,禁止转载!若有侵权可联系simon9921@qq.com删贴
上篇
记录金盾加密视频提取工具被逆向分析过程一 说过把内存数据保存到文件的算法后,本篇继续分析它的二次解密算法。一样,运行替换机器码的播放器,注入 win7.dll 内存监视中,发现它对avformat-56.dll文件进行了内存修改:

直接进入HOOK地址查看汇编代码:
0BFD1330 60 pushad 0BFD1331 8B0D BCAEFD0B mov ecx,dword ptr ds:[0xBFDAEBC] 0BFD1337 83EA 01 sub edx,0x1 0BFD133A 2BD1 sub edx,ecx 0BFD133C 8B1D B8AEFD0B mov ebx,dword ptr ds:[0xBFDAEB8] 0BFD1342 8B0D B0AEFD0B mov ecx,dword ptr ds:[0xBFDAEB0] 0BFD1348 03CA add ecx,edx 0BFD134A 890D B4AEFD0B mov dword ptr ds:[0xBFDAEB4],ecx 0BFD1350 A2 84AEFD0B mov byte ptr ds:[0xBFDAE84],al 0BFD1355 A1 B4AEFD0B mov eax,dword ptr ds:[0xBFDAEB4] 0BFD135A 8B0D C0AEFD0B mov ecx,dword ptr ds:[0xBFDAEC0] 0BFD1360 6A 00 push 0x0 0BFD1362 68 ACAEFD0B push win7.0BFDAEAC 0BFD1367 50 push eax 0BFD1368 51 push ecx 0BFD1369 E8 68120C00 call win7.0C0925D6 0BFD136E 3BA0 84AEFD0B cmp esp,dword ptr ds:[eax+0xBFDAE84] 0BFD1374 34 13 xor al,0x13 0BFD1376 A2 84AEFD0B mov byte ptr ds:[0xBFDAE84],al 0BFD137B 8B15 C0AEFD0B mov edx,dword ptr ds:[0xBFDAEC0] 0BFD1381 6A 00 push 0x0 0BFD1383 68 A8AEFD0B push win7.0BFDAEA8 0BFD1388 6A 01 push 0x1 0BFD138A 68 84AEFD0B push win7.0BFDAE84 0BFD138F 52 push edx 0BFD1390 E8 A5160C00 call win7.0C092A3A 0BFD1395 61 popad 0BFD1396 61 popad 0BFD1397 83F0 13 xor eax,0x13 0BFD139A 8BC8 mov ecx,eax 0BFD139C FF35 D0AEFD0B push dword ptr ds:[0xBFDAED0] ; avformat.644EFDAF 0BFD13A2 C3 retn 0BFD13A3 61 popad
上面的汇编代码你们跟一下就会明白在干什么了,我就不废话了。
首先HOOK的位置,通过分析,它会读取第一次解密的视频数据在进行一次解密。就是读取视频帧后,判断根据前面的字节进行几回XOR运算,XOR的值是一个常数0x13;而在分析中,EDX的值正是偏移量。文章出处:it资源社区
该提取工具的做者很巧妙的运用这位置对提取后的视频文件在二次解密,获得了彻底解密的视频文件。
上面的汇编代码也很明了,多是我语言描述很差。不知你们可否理解。html
0BFD1331 8B0D BCAEFD0B mov ecx,dword ptr ds:[0xBFDAEBC] [color=#008000]0BFD1337 83EA 01 sub edx,0x1 0BFD133A 2BD1 sub edx,ecx[/color] 0BFD133C 8B1D B8AEFD0B mov ebx,dword ptr ds:[0xBFDAEB8] 0BFD1342 8B0D B0AEFD0B mov ecx,dword ptr ds:[0xBFDAEB0] [color=#ff0000]0BFD1348 03CA add ecx,edx 0BFD134A 890D B4AEFD0B mov dword ptr ds:[0xBFDAEB4],ecx[/color]
这部分汇编,就是在计算文件偏移量,0BFD1369 E8 68120C00 call win7.0C0925D6
这个CALL是咱们上篇分析过的功能,函数:SetFilePointer算法
[color=#ff0000]0BFD1374 34 13 xor al,0x13[/color] [color=#ff0000]0BFD1376 A2 84AEFD0B mov byte ptr ds:[0xBFDAE84],al[/color] 0BFD137B 8B15 C0AEFD0B mov edx,dword ptr ds:[0xBFDAEC0] 0BFD1381 6A 00 push 0x0 0BFD1383 68 A8AEFD0B push win7.0BFDAEA8 0BFD1388 6A 01 push 0x1 [color=#800080]0BFD138A 68 84AEFD0B push win7.0BFDAE84[/color] 0BFD138F 52 push edx [color=#ff0000]0BFD1390 E8 A5160C00 call win7.0C092A3A ;WriteFile[/color]
这部分汇编就是将读取的值和0X13进行XOR,而后写入到文件里去。循环读,解密,写文件,直到视频播放完毕。
有些功能被V掉,须要本身去猜和测试。至于视频加速播放,达到快速提取的分析,你们有兴趣的去跟下。
总结:
一、这样的提取方法不知道做者是怎么跟到的,但确实很巧妙。不得不说思路决定出路啊!
二、这样提取后的视频仍是不能播放的,须要它提供的修复工具修复编程
逆向编程交流QQ1462109921bash
分析这个修复工具,实际只是把视频头作了个替换。就直接能播放了。(为何这么作?须要你们去学习MKV的视频格式了)
三、通过上面的跟踪,有种更快速的提取方法。先把第一层数据解密保存文件后,写一个解析MKV格式的工具,而后对帧开头作XOR操做。
四、更快速的提取方法:直接调用FFMPEG库对音视频进行编码达到提取。
以上就是该提取工具对视频提取的整个过程了。能力有限,表达能力也不强。感兴趣的你们本身去练手吧!函数