From 9ff435a62cdc79239fe1fb6f9285a0ee8745536e Mon Sep 17 00:00:00 2001 From: mether049 Date: Wed, 19 Feb 2020 00:27:38 +0900 Subject: [PATCH] Update malware-tech_ref_and_memo.md --- malware-tech_ref_and_memo.md | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/malware-tech_ref_and_memo.md b/malware-tech_ref_and_memo.md index 50dc0ef..918ebc8 100644 --- a/malware-tech_ref_and_memo.md +++ b/malware-tech_ref_and_memo.md @@ -94,16 +94,27 @@ to do... ## API obfuscation [A Museum of API Obfuscation on Win32](https://www.symantec.com/content/en/us/enterprise/media/security_response/whitepapers/a_museum_of_api_obfuscation_on_win32.pdf)
### Using GetProcAddress and GetModulehandleA -- GetProcAddressを利用して呼び出したいAPIのアドレスを動的に解決する +- GetProcAddressを利用して呼び出したいAPIのアドレスを動的に解決することで,APIの呼び出し解析を回避する - GetProcAddressの引数は第一引数に対象dllのハンドルを指定(i.e. GetModuleHandleA("kernel32.dll"))し,第二引数にdllから呼び出したいAPI名を指定 -``` -FARPROC GetProcAddress( - HMODULE hModule, - LPCSTR lpProcName -); -``` +```cpp +// Get a handle on kernel32.dll +HMODULE kernel32 = GetModuleHandleA("kernel32.dll"); +// Define the prototype of 'OpenProcess' (see https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-openprocess) +using OpenProcessPrototype = HANDLE(WINAPI*)(DWORD, BOOL, DWORD); +// Perform the dynamic resolving using GetProcAddress +OpenProcessPrototype OpenProcess = (OpenProcessPrototype)GetProcAddress(kernel32, "OpenProcess"); +``` +- GetProcAddressやGetModuleWのみインポートすること自体が怪しまれる可能性がある +- ref: + - [Hidden in PEB Sight: Hiding Windows API Imports With a Custom Loader,2020-02](https://blog.christophetd.fr/hiding-windows-api-imports-with-a-customer-loader/) +### Using PEB +- GetProcAddressやGetModulehanleWのアドレスも動的に解決させることができる +- PEB(Process Environmental Block)の[PEB_LDR_DATA](https://docs.microsoft.com/en-us/windows/win32/api/winternl/ns-winternl-peb_ldr_data)構造体や[LDR_DATA_TABLE_ENTRY](https://docs.microsoft.com/en-us/windows/win32/api/winternl/ns-winternl-peb_ldr_data#remarks)構造体のリストを反復処理して,目的のDLL名を探しアドレスを取得する +- 目的のDLLのメモリ内のエクスポートテーブルから呼び出す対象のAPIを探しアドレスを取得する +- ref: + - [Hidden in PEB Sight: Hiding Windows API Imports With a Custom Loader,2020-02](https://blog.christophetd.fr/hiding-windows-api-imports-with-a-customer-loader/) ## PowerShell Script obfuscation - 難読化ツール