海思H.265解碼庫破解(去除海思LOGO)
最近在做一個關於H.265視頻流的項目時,遇到一個問題:用海思H.265解碼庫,解碼出來的圖像會附加一個海思的logo嚴重影響了視頻的體驗。
於是自己琢磨這怎么把這個logo去掉。經過廣覽資料和咨詢朋友得到了解決方法:反匯編解碼庫,然后把加logo的這段代碼跳過去,然后再鏈接回去。
靜態庫破解
這個給了我很大的幫助。直接按照他的第二步來開工。
——————————–
我的環境是Win7+VS2013,在vs2013的目錄下
圖中紅色框的文件夾里的 《VS2013 x86 本機工具命令提示》這個工具下進行反匯編按照上面的資料的步驟來:
1. 導出OBJ文件 :lib /LIST HW_H265dec_Win32.lib > liblist.txt
得到解碼庫的OBJ文件列表,然后利用UltraEdit編輯liblist.txt,用Column菜單的Insert/Fill column功能做一個批處理文件liblist.bat,形如:
運行該批處理文件會將靜態庫中的所有obj文件導出到當前目錄下,此時再用UltraEdit將所有obj文件打開,選擇
“search / Find in Files”,查找關鍵字”add_log”,發現在Util.obj和DPB.obj中找到了它,需
要破解的obj文件找到了!就是Util.obj和DPB.obj,而添加LOGO的函數叫做_add_logo_H265_c。
2. 分析需要被破解的obj:運行以下命令dump出Util.obj和DPB.obj中盡可能詳細的信息:dumpbin /ALL Util.obj > dumpcrackingobj.txt(DPB.obj 同樣)然后經過分析Util.obj里面是_add_logo_H265_c的定義和實現,而DPB.obj里面是_DisplayPic里面調用了_add_logo_H265_c,我一開始按照常規思路就想在_DisplayPic直接跳過_add_logo_H265_c的調用,然后發現只要播放到要加LOGO的時候播放器就崩潰了,這個失敗的過程就不放出來了,然后我就開始研究_add_logo_H265_c的過程:因為海思這個解碼庫如果視頻源是從海思自己設備出來的就不會出現,所以他在_add_logo_H265_c這個函數中肯定有一個判斷跳過貼LOGO這個步驟。於是乎,再次運行dumpbin,反匯編Util.obj,命令如下:
dumpbin /disasm Util.obj > dumpasm.txt
編輯該文件,查找InitSkinMagicLib,會看到如下信息:
從圖中就可以看出第一個紅框是加載海思logo,第二紅框小於直接跳到這個函數的最后,第三個紅框也是小於直接跳到最后,於是我把第二個紅框和第三個紅框之間的操作全部改成nop,把第三個操作改成大於跳過,這樣就不管怎么樣都會跳到函數的最后而不會繪制海思logo。
紅框部分就是修改部分。
3. 分將修改后的obj導入到靜態庫:
直接運行以下命令將修改后的obj文件再導入到靜態庫:lib HW_H265dec_Win32.lib Release\Util.obj
需要到當前目錄建一個子目錄Release把Util.obj放進去。
然后播放果然不會出現海思LOGO了。
關於海思H.264的庫也可以用這個方法破解,不過H.264的庫的函數叫_add_logo_c
破解好的庫