Skip to content

t0mmy-678470/myOwnPEPacker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

myOwnPEPacker

Introduction

加殼器是一種防止逆向工程的手段,不管是病毒或商用軟體都可能會加殼來保護執行檔,防止輕易的被逆向工程破解或是避免被防毒軟體偵測。加殼就像是把執行檔套了一層殼,執行時才會動態剝殼,一般分析很容易就被檔在外面的殼。根據加殼器的實作,常見的殼可分為壓縮殼、加密殼和虛擬機殼。本次專題將會透過會實作壓縮殼了解基本加殼器的運作方式、執行檔從一個靜態檔案到被執行起來的流程和 anti-reverse engineering 的技術。

開發環境與工具

  • 作業系統
    • Windows 10/11
  • 編譯器
    • MinGW:用於編譯加殼器
    • FASM:用於編譯殼
  • Debug
    • x64dbg
    • PE-bear
  • 程式語言
    • C:用於撰寫加殼器
    • ASM:用於撰寫殼

加殼器設計與實作架構

加殼階段 (C 撰寫)

  1. 先判斷目標是不是 PE 格式的檔案
  2. 利用開源輕量的 aPLib 套件壓縮各個 section、section header、解殼需要的資訊
  3. 給各個 section 寫入的權限,用於解殼時恢復 section 內容、section 的 SizeOfRawData 和 PointerToRawData 欄位設為 0
  4. 新增 .mop1、.mop2、.mop3 三個 section
  • .mop1:儲存壓縮後的資料,其包括加殼前各個 section 的內容、加殼前的 section header、解殼需要的資訊
  • .mop2:存放 stub,用組合語言撰寫,負責解殼的程式片段
  • .mop3:存放不能壓縮的資料,像是 resource、load configuration 等等

解殼階段 (ASM 撰寫)

  1. push 各個 register、flag
  2. 解壓 .mop1 的內容
  3. 根據解壓後的原資料復原各個 header
  4. 模擬 loader 把解壓縮後的原 section 內容根據 section header 放到指定位置
  5. 模擬 loader 遍歷原 import table,手動 load 一個個 dll 進來和根據原 import name table 一個一個復原 IAT 的內容
  6. pop 各個 register、flag
  7. 成功解殼,跳到原程式的 oep

build

fasm ./stub/stub.asm ./stub/stub.bin
gcc packer.c -o packer.exe

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published