撰写本系列文章目的在於提升资讯安全之实务能力,
并透过实作体悟到资讯安全领域的重要性,
本系列所有文章之内容皆有一定技术水平,
不得从事非法行为、恶意攻击等非法活动,
「一切不合法规之行为皆受法律所约束」,
为了避免造成公司、厂商或玩家之间困扰,
所有实作不会拿已上市产品、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( ̄▽ ̄)ブ
>>: [前端暴龙机,Vue2.x 进化 Vue3 ] Day11.列表渲染
《赖田捕手:番外篇》第 36 天:用 Netlify 布署前端网页 (一) 那麽,你说你要一个完全免...
今天来看一下如何使用Shioaji问回历史交易资料,不过在此先提醒一下,上一篇有讲到的永丰讲师的Yo...
扩充 Record Mapper 大部分 domain 的 mapper 皆为 key 的转换,而在...
Hello 大家, 没有连假就要撑五天才可以放假呜呜, 撑得下去的... 接续着昨天继续介绍, 第一...
【前言】 本系列为个人前端学习之路的学习笔记,在过往的学习过程中累积了很多笔记,如今想藉着IT邦帮忙...