Payload Obfuscation

常見的shellcode容易被發現

透過加解密消除特徵

對payload加解密或

  • XOR
  • RC4
  • AES
  • TEA
  • Chacha20 / salsa20

Import Table Hiding

目的是不要讓 Import Table 上出現容易被關注的function

  • VirtualAlloc / VirtualProtect
  • CreateRemoteThread
    在 runtime 才載入 DLL 並找到目標函數

WinAPI

LoadLibrary

給 DLL 的名字他就會丟進記憶體裡

GetModuleHandle

如果 Library 已經在記憶體裡
透過這個函式給 Handle (控制 Library 的物件)
HModule是 Module 在記憶體中的位置
還是有可能被 hook

GetProcAddress

取得 ModuleHandle 後就可以取得 Export Function 位置
並用 Pointer 呼叫

Custom GetModuleHandle

從 PEB 到 Ldr 取得當前 Process 的 DLL 資訊
其中就包含 每個 Module 的 Base Address

Custom GetProcAddress

HModule = BaseAddress
找到 DLL 的 PE 結構
找到 Export Directory
取出 AddressOfName 跟 AddressOfNameOrdinals
遍歷 AddressOfName 並比對字串找出 Ordinals
AddressOfName[ordinal]就是目標函式的 RVA

Callback Programming

函數的副作用
可以Anti-Debug