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