记录金盾专用播放器加密视频提取工具逆向分析过程二

【免责说明】
本贴仅用于交流经验之用,只可用于我的研究试验,不得用于商业用途。
请在下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库对音视频进行编码达到提取。

以上就是该提取工具对视频提取的整个过程了。能力有限,表达能力也不强。感兴趣的你们本身去练手吧!函数

相关文章
相关标签/搜索