【免責說明】
本貼僅用於交流經驗之用,只可用於我的研究試驗,不得用於商業用途。
請在下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庫對音視頻進行編碼達到提取。
以上就是該提取工具對視頻提取的整個過程了。能力有限,表達能力也不強。感興趣的你們本身去練手吧!函數