您好,登錄后才能下訂單哦!
之前,花了三、四天的時間寫了一個壓縮殼,Mark一下。
簡單說下邏輯:
1、MFC實現的UI交互部分:展示殼的功能,獲取被加殼程序的路徑,顯示加殼進度。
2、加殼功能Pack導出為一個dll,MFC部分動態加載。
3、殼的本體Stub,把數據段、只讀數據段合并到代碼段,添加到被加殼程序的最后。
簡單說下功能:
1、支持反調試,檢查PEB可以過x64dbg,NtQueryInformationProcess可以過StrongOD。
2、加密代碼段,用的AES加密庫。大概思路:遍歷區段頭表,找到.text區段頭表,通過PointerToRawData字段加上被加殼程序讀取到內存中的首地址,找到.text段在內存中的位置;通過SizeOfRawData得到它的文件大小;調用AES加密庫。
3、壓縮代碼段,大概思路:通過.text段頭表找到.text段,調用壓縮庫壓縮。申請內存空間,大小=PE頭+已壓縮.text+其他區段。依次從內存空間把文件拷貝過去:PE頭、已壓縮.text段、其他區段,重組PE文件。同時,修改.text的SizeOfRawData、修改其他區段的PointerToRawData。
4、檢測虛擬機,大概思路:動態獲取遍歷進程的幾個函數,在殼里面檢測虛擬機相關的進程。
5、IAT加密,大概思路:遍歷被加殼程序的導入表,獲取API函數地址,動態加密。申請內存空間,寫入解密和跳轉的shellcode。IAT表地址改為指向這個內存空間。
6、重定位,有多處需要重定位。
6.1、Stub.dll的.text段需要進行重定位,因為默認加載基址從0x10000000變成了0x400000。
6.2、要想被加殼程序支持重定位,需要把被加殼程序的重定表重定向Stub.dll的.reloc段。因為殼程序優先執行,利用系統自動完成殼部分的重定位。在殼程序中,手動完成目標程序的重定位。
7、TLS,需要在殼程序中定義一個TLS變量,佯裝使用一下,編譯的時候生成TLS相關的信息。然后,手動調用被加殼程序的TLS回調函數才能成功。
8、在碼云有一個工程:https://gitee.com/shihuozhiyu/SimplePack
9、有一個腦圖:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。