逆向工程對抗之代碼隱藏

很久前說過要發的,但U盤一直有問題,直到今天可以上網了。。。。(相互探討下,也許還不是很成熟)

 

 

模塊AB:可逆加密模塊

模塊BA:AB加密還原模塊

模塊DEX:由索引找相對偏移或由相對偏移找索引

模塊R:產生指定範圍隨機數據

結構鏈PO:{索引,相對偏移}對

設備驅動M:OS常駐內存服務,在進程間傳遞信息

表T:記錄系統各種狀態,包括生成代碼前狀態、進程通信狀態、OS修改狀態等實行PR時系統狀態,用於PR的決策

原始代碼D:原始應用系統二進制數據

數據文件DA:存放系統中各組件代碼的非原始形式,包括D,但不包含EXE文件首部

LOADER1:對OS下某一鉤子

 EXE頭文件H:存放DA中對應各組件代碼的EXE頭部二進制信息

OS內存空間文件K:一個EXE文件,只有EXE頭部信息但沒有實際代碼的EXE文件,用於在內存中開闢一常駐空間

LOADER2:根據T、H、DA生成系統各組件代碼

 CLEAN:將系統還原成初始狀態並終止系統及清除進程K中所有代碼數據——清零,並終止各管理進程。

系統協議PR: LOADER1下一鉤子,用LOADER2取代碼OS對PING回顯請求的正常反應。然後啓動命令PING 127.0.0.1並退出。當LOADER2被觸發後,創建進程K,並將DA中各組件隨機地存入K中相應位置——以模塊爲單位,通過M、DEX、T、H、BA(其中某些代碼須連續用BA 3、4次才能正常還原到最初代碼的二進制形態)。隨後,LOADER2用類似LOADER1的方式啓動在DA中的父進程O。

各組件載入後在內存中的狀態由T記錄。 O依據T,生成進程P、Q、R、S、TT,此五進程在DA中的代碼相同,在K中的代碼也相同(這是很顯然的),但參數不同。P、Q、R、S、TT五進程輪流從DA中D的範圍內(非連續)隨機產生的一位置取出隨機大小的二進制數據,再放到K範圍內一隨機偏移處——通過PO、R、DEX、M、T、BA。

P、Q、R、S、TT在O的管理下,根據執行需要生成D的代碼(用BA還原)並執行。某一代碼段在執行完畢後,O立即對內存中這段代碼清零。M隨機地對正在讀K內數據的進程進行檢查,當發現不是O、P、Q、R、S、TT時啓CLEAN並終止自己。在O、P、Q、R、S、TT、M的管理下,D執行應用系統應有的功能。正常退出時啓動CLEAN。

 以上是一模型,PR不變,改動H、DA、D、AB、BA、LOEADER等可構造對不同D的不同隱藏方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章