撰寫本系列文章目的在於提升資訊安全之實務能力,
並透過實作體悟到資訊安全領域的重要性,
本系列所有文章之內容皆有一定技術水平,
不得從事非法行為、惡意攻擊等非法活動,
「一切不合法規之行為皆受法律所約束」,
為了避免造成公司、廠商或玩家之間困擾,
所有實作不會拿已上市產品、Online Game 等等來作範例學習,
且部分具有深度、價值之內容,將會提升一定閱讀門檻(不對該技術做分析、解說),
請勿透過本系列文章所學,從事任何非法活動,請不要以身試法!!!
就在前兩天已經講了以下內容:
還沒看的人可以先點擊上面的連結觀看呦!
那今天會來談談,如何找出已透過 PEB 斷鏈隱藏起來的 DLL。
首先開始前要先說一下,
小弟我目前還屬於菜鳥階段,正不斷努力學習中,
若有發現錯誤或不妥之處還請不吝賜教。
歡迎大家多多留言,互相交流交流。
那麼進入今天主題~~
首先,先來觀察一下還沒有透過 PEB 斷鏈隱藏 DLL 時 PEB 的情況:
lkd> .process /p ffffd706ebf4e5c0; !peb ecc500b000
Implicit process is now ffffd706`ebf4e5c0
PEB at 000000ecc500b000
--- --- ---
--- --- ---
Ldr 00007ffd23c9f3a0
Ldr.Initialized: Yes
Ldr.InInitializationOrderModuleList: 0x?? . 0x??
Ldr.InLoadOrderModuleList: 0x?? . 0x??
Ldr.InMemoryOrderModuleList: 0x?? . 0x??
Base TimeStamp Module
7ff72e150000 6148108f --- C:\Users\admin\Desktop\Project1.exe
7ffd23b40000 493793ea --- C:\Windows\SYSTEM32\ntdll.dll
7ffd22220000 0c2cf900 --- C:\Windows\System32\KERNEL32.DLL
7ffd20650000 4736733c --- C:\Windows\System32\KERNELBASE.dll
7ffd20330000 70f70cc4 --- C:\Windows\System32\ucrtbase.dll
7ffd18fe0000 5ee8384d --- C:\Windows\SYSTEM32\VCRUNTIME140.dll
假設現在隱藏了 ntdll.dll 這個 Module:
lkd> .process /p ffffd706ebf4e5c0; !peb ecc500b000
Implicit process is now ffffd706`ebf4e5c0
PEB at 000000ecc500b000
--- --- ---
--- --- ---
Ldr 00007ffd23c9f3a0
Ldr.Initialized: Yes
Ldr.InInitializationOrderModuleList: 0x?? . 0x??
Ldr.InLoadOrderModuleList: 0x?? . 0x??
Ldr.InMemoryOrderModuleList: 0x?? . 0x??
Base TimeStamp Module
7ff72e150000 6148108f --- C:\Users\admin\Desktop\Project1.exe
7ffd22220000 0c2cf900 --- C:\Windows\System32\KERNEL32.DLL
7ffd20650000 4736733c --- C:\Windows\System32\KERNELBASE.dll
7ffd20330000 70f70cc4 --- C:\Windows\System32\ucrtbase.dll
7ffd18fe0000 5ee8384d --- C:\Windows\SYSTEM32\VCRUNTIME140.dll
用普通的 API、簡單的方法就列舉不到啦~~
不過已經成功騙過 Cheat Engine 拉~
但是呢,
如果使用 Process-Explorer 查看的話,
你/妳就會發現:
ntdll.dll 被發現了!!!
所以所以~ 現在要進入今天的主軸了,
隱藏 Module 第二招:
刪除 MZ 標誌/刪除 Header
就在前天,也就是 【Day 03】- 打針!打針!從 R0 注入的那件事! 文章最後有說到,
在 Blackbone 注入 DLL 後會有兩個動作:
說到這,先簡單的介紹一下 PE Structure:
用 Process Hacker 來對比一下 ntdll.dll:
PE 的特徵:
This Program cannot be run in DOS mode
好的,講到這邊已經簡單介紹完 PE 了。
所以你/妳有想到為什麼有些工具還是可以找到 PEB 斷鏈後的 DLL 嗎?
原因就是 DLL 也是一種 PE,它有 PE 的「特徵」,所以被「暴力」找出來了。
所以~
只要想辦法把上面說到的 PE 特徵刪除,是不是就找不到了?!
現在就回到 Blackbone 的 Inject.c 的 BBInjectDll() 中
PIMAGE_NT_HEADERS64 pHdr = RtlImageNtHeader( pUserBuf->module );
size =
(pHdr->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) ?
((PIMAGE_NT_HEADERS32)pHdr)->OptionalHeader.SizeOfHeaders :
pHdr->OptionalHeader.SizeOfHeaders;
ZwProtectVirtualMemory(
ZwCurrentProcess(),
&pUserBuf->module,
&size,
PAGE_EXECUTE_READWRITE,
&oldProt
)
RtlZeroMemory( pUserBuf->module, size );
ZwProtectVirtualMemory(
ZwCurrentProcess(),
&pUserBuf->module,
&size,
oldProt,
&oldProt
);
還是被找到了阿,不是說刪除 PE 特徵,就找不到了嗎?????
看來 Process-Explorer 也不是省油的燈,我們稍後再來談談這件事,
先來執行一下自己寫好的暴力窮舉 DLL 的 EXE(找 PE 特徵),看看能不能找的到:
太棒了,連自己都找不到自己了 XDD
好了,最後來談談:
為什麼還是有些工具能找出隱藏起來的 DLL 呢?
已經斷鏈 + 刪除 PE Header 了,還能找到!?
嘿嘿嘿~
這就來介紹一下,在 EProcess 裡面還有一樣東西,它叫做:VadRoot
它是一個 _RTL_AVL_TREE 類型的二元樹,
那它的功能是什麼呢?
這裡簡單講一下,這個 VadRoot 裡面也藏有 DLL 資訊!!
所以如果能列舉一下這棵樹,然後刪掉(斷鏈)要隱藏的 DLL,是不是就...
最後簡單整理了一下思維:
好啦,VadRoot 是明天要講的內容,這篇就到這結束了!
大家若有發現哪裡寫得不好或錯誤的地方,都留個言討論一下吧 XD
那我們下期見 o( ̄▽ ̄)ブ