記錄金盾專用播放器加密視頻提取工具逆向分析過程二

【免責說明】
本貼僅用於交流經驗之用,只可用於我的研究試驗,不得用於商業用途。
請在下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庫對音視頻進行編碼達到提取。

以上就是該提取工具對視頻提取的整個過程了。能力有限,表達能力也不強。感興趣的你們本身去練手吧!函數

相關文章
相關標籤/搜索