歡迎您光臨本站 註冊首頁

虛擬機--破解的王道

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
近日,分析一個軟體,加密演算法還真複雜,如果老老實實的逆向出來,工作量實在太大,整整逆向了幾天也沒分析完.而且逆向牽涉的代碼越來越多.比如說,A是加密函數,A裡面又包含了B,C函數,B,C函數又包含了E,D,H,F函數,結果,複雜程度很快成幾何程度膨脹.使用GetCall腳本提取出來的代碼也太大了.
如果是dll的話就很好辦,可以直接載入dll去call加密函數.然而如果是exe就很麻煩了,無法把exe載入到合適的位置.則涉及到一些絕對地址,比如說mov eax , 0x87900 ,這樣的代碼肯定不能正常運行. ,究其原因,就是exe中沒有定位表.我們可以這樣做,在我們需要的函數地方停住程序(OD下個斷就行),然後dump下來起名字dump.exe,這個時候程序運行到了合適的環境,將這個dump.exe用pe文件編輯器打開,自己加個重定位表吧, ,沒有槍沒有炮,只有我們自己造.我們只需要把我們關心的函數裡面涉及需要的地址才安排重定位項,再懶惰一點,自己寫一個表,把需要重定位的項目登記下來,然後將exe用loadlibrary載入起來,然後用自己的定位表去重定位吧,也不複雜.這種方法有個缺點,比如說exe裡面有 mov eax , 0x909090 , 而0x909090這個地址是動態分配的地址,而動態分配的地址dump工具是不會去dump的.這個時候還需要自己手工處理.第二個缺點就是如果有調用api函數,還需要處理,可以放在重定位表中一併處理.
第二種方法就用虛擬機吧.有很多虛擬機代碼可以借鑒,我看了個虛擬機代碼,也不複雜.就是代碼量很大,而且對於OPcode不熟悉很難做.就算熟悉,寫起來代碼量也太大.就抄別人的吧,然後模擬PE文件載入工程,將exe載入到合適的地址,呵呵,只要將需要的段dump 下來,dump個合適的大小,然後裝載進虛擬機,然後run..模擬完取出模擬結果就行了.這個方法需要對api函數進行處理.
兩種方法,第一種方法是機器碼代碼,運行起來速度很快,就是局限很多.第二種方法方法靈活,只有api函數處理比較麻煩.其他地方,只需要在地址無效的地方列印一下地址,然後dump下來一段,然後加進需要load進虛擬機的地址就完了.缺點就是速度太慢了.


[火星人 ] 虛擬機--破解的王道已經有269次圍觀

http://coctec.com/docs/security/show-post-58960.html