
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资源社区
该提取工具的作者很巧妙的运用这位置对提取后的视频文件在二次解密,得到了完全解密的视频文件。
上面的汇编代码也很明了,可能是我语言描述不好。不知大家能否理解。
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掉,需要自己去猜和测试。至于视频加速播放,达到快速提取的分析,大家有兴趣的去跟下。
总结:
1、这样的提取方法不知道作者是怎么跟到的,但确实很巧妙。不得不说思路决定出路啊!
2、这样提取后的视频还是不能播放的,需要它提供的修复工具修复
逆向编程交流QQ1462109921
分析这个修复工具,实际只是把视频头做了个替换。就直接能播放了。(为什么这么做?需要大家去学习MKV的视频格式了)
3、经过上面的跟踪,有种更快速的提取方法。先把第一层数据解密保存文件后,写一个解析MKV格式的工具,然后对帧开头做XOR操作。
4、更快速的提取方法:直接调用FFMPEG库对音视频进行编码达到提取。
以上就是该提取工具对视频提取的整个过程了。能力有限,表达能力也不强。感兴趣的大家自己去练手吧!