Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Loading DLL from memory
Search
ry0kvn
January 22, 2020
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Loading DLL from memory
ry0kvn
January 22, 2020
More Decks by ry0kvn
See All by ry0kvn
Code Injection詰め合わせ
ry0kvn
0
33
Process Hollowing
ry0kvn
0
2.6k
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
520
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Site-Speed That Sticks
csswizardry
13
1.6k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
New Earth Scene 8
popppiees
4
2.7k
Paper Plane
katiecoart
PRO
5
54k
For a Future-Friendly Web
brad_frost
184
10k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Practical Orchestrator
shlominoach
192
12k
WCS-LA-2024
lcolladotor
0
890
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Transcript
メモリからDLLを読み込んでみる 2020 年 1 月 22 日 @ry0kvn
About Me セキュリティキャンプ 2019 受講生 CODE BLUE2019 学生スタッフ Twitter@ry0kvn りょーくん
https://twitter.com/ry0kvn/status/1218966574293323777
メモリからDLLを読み込んでみる “DLL(dynamic link library) は通常、 Windows API の Loadlibrary 関数や
LoadlibraryEX 関数を使ってディスク上から読み込んで使用する。 この LoadLibrary や LoadLibraryEx 関数は、ファイルシステム上のファイルでのみ機能し 直接メモリから DLL をロードすることはできない。 またこれを端的に実現できる公式の Windows API も存在しない。 メモリから DLL を読み 込むには疑似的な PE ローダーを実装する必要がある。 ”
DLLとは? “A dynamic-link library (DLL) is a module that contains
functions and data that can be used by another module (application or DLL).” 引用 : Dynamic-Link Libraries (Dynamic-Link Libraries) - Win32 apps
なぜメモリから読み込む必要があるのか - Game developer 耐解析 - Malware developer 検出回避
PEファイルフォーマット “Portable Executable ( PE )は、主に 32 ビットおよび 64 ビット版の
Microsoft Windows 上で 使用される実行ファイル (EXE) 、オブジェクトファイル、 DLL 、 SYS ( デバイスドライバ ) 、 FON フォントファイル等のファイルフォーマットである。 PE フォーマットは実行コードを管 理するために Windows OS ローダが必要とする情報をカプセル化するデータ構造であ る。 ” 引用 : https://ja.wikipedia.org/wiki/Portable_Executable
None
None
メモリへの展開 On Disk On Memory DOS Header NT Header ...
Section Header Section ... DOS Header NT Header Section Header ... Section ... そのまま配置 ローダーによる調整
ベース再配置 リンカが想定する 理想のメモリ配置 ロードされた イメージファイル 0x00400000 ローダが選択する 現実のメモリ配置 マップ済み 0x00400000
ロードされた イメージファイル 0x00800000
IATの解決前 IMAGE_IMPORT_DESCRIPTOR OriginalFirstThunk TimeDateStamp ForwarderChain Name FirstThunk kernel32.dll IMAGE_THUNK_DATA[0] IMAGE_THUNK_DATA[]
(INT) IMAGE_THUNK_DATA[...] IMAGE_THUNK_DATA[N] IMAGE_THUNK_DATA[0] IMAGE_THUNK_DATA[] (IAT) IMAGE_THUNK_DATA[...] IMAGE_THUNK_DATA[N] 0x1, AcquireSRWLockExclusive ... 0x65D, uaw_wcsrchr
IATの解決後 IMAGE_IMPORT_DESCRIPTOR OriginalFirstThunk TimeDateStamp ForwarderChain Name FirstThunk kernel32.dll IMAGE_THUNK_DATA[0] IMAGE_THUNK_DATA[]
(INT) IMAGE_THUNK_DATA[...] IMAGE_THUNK_DATA[N] IMAGE_THUNK_DATA[0] IMAGE_THUNK_DATA[] (IAT) IMAGE_THUNK_DATA[...] IMAGE_THUNK_DATA[N] 0x1, AcquireSRWLockExclusive ... 0x65D, uaw_wcsrchr 0x7ff9ba0e0000 ... 0x7ff9be539000
DLLの実行 using DLLEntry = BOOL(WINAPI*)(HINSTANCE dll, DWORD reason, LPVOID reserved);
DLLEntry DllEntry = (ntHeaders->OptionalHeader.AddressOfEntryPoint + dllBase); (*DllEntry)(dllBase, DLL_PROCESS_ATTACH, 0);
demo
https://twitter.com/ry0kvn/status/1218928288107659264