首页
社区
课程
招聘
[讨论]是什么留下了注入DLL的痕迹?
发表于: 2018-1-22 17:42 7404

[讨论]是什么留下了注入DLL的痕迹?

2018-1-22 17:42
7404

很普通的用VirtualAllocEx和CreateRemoteThread对目标进程A注入了自己的dll。

在Loader.exe退出之后,再运行一个检测程序B,依然被检测出了Loader.exe的存在并且给出了文件路径,而且改名了Loader.exe都没有用,显然是留下了File Object的痕迹。

而且考虑到检测程序是在Loader已经执行完退出之后才运行的,那么应该是VirtualAllocEx或者CreateRemoteThread留下了痕迹,有谁知道是哪个留下的痕迹吗?应该怎么抹除?

用下面这样的步骤是不是能更好的隐藏掉注入痕迹?

1. 在目标进程分配内存块X

2. 修改目标进程的EIP跳入新分配的内存块X执行,X中代码通知Loader并进入等待

3. Loader在自身进程空间加载要注入的DLL,并且通知目标进程中内存块X的代码

4. X中的代码根据DLL在Loader中的大小,分配内存块Y

5. 通过RPM把Loader中的DLL所在内存拷贝到内存块Y中,并且CreateThread执行。

6. 释放内存块X并跳回原EIP地址

这样在理论上是不是注入之后再运行的检测程序几乎就无痕迹可查了?


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
除非自己分析加载dll,否则都是可以被检查到的
2018-1-22 18:08
0
雪    币: 212
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
czcqq 除非自己分析加载dll,否则都是可以被检查到的
所以我后面提出的这个步凑就是基于这些考虑
目标进程空间内,注入的DLL所在内存块Y是由目标进程本身分配的,DLL加载行为本身也是在Loader进程内完成,目标进程只是CopyMemory了一份而已。对64位进程应该拷贝过来直接能用,32位就还要根据PE头中的重定位数据处理一遍。
从注入之后的结果来看,目标进程只是多了一块由目标进程自己分配的内存并且多了一个线程。唯一可能留下痕迹的就是中转用的内存块X是通过VirtualAllocEx分配,但加载完毕后这块内存也释放掉了,这样是否还会留下痕迹?
2018-1-22 18:16
0
雪    币: 433
活跃值: (1930)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
先比速度,再比猥琐
2018-1-22 22:26
0
雪    币: 2402
活跃值: (6813)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
5
路过帮顶,CreateRemoteThread是不是异步的呢
2018-1-22 23:35
0
雪    币: 9207
活跃值: (6420)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
VirtualAllocEx调用后输出分配的地址。然后用CE去看目标进程的地址内容。你会发现你自己好像漏了啥
2018-1-23 03:03
0
雪    币: 225
活跃值: (273)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
很好奇,检测程序B  是什么?能放出来吗?
2018-1-23 10:48
0
雪    币: 285
活跃值: (1100)
能力值: ( LV13,RANK:405 )
在线值:
发帖
回帖
粉丝
8
你说的这个是不是我可以理解成反射式注入DLL,刚刚发的帖子:https://bbs.pediy.com/thread-224241.htm,不过我没有实现内存块的释放。有些不同的是,这里是DLL自身实现的loader,注射器注射之后,就没有作用了,你的这种注入,CreateRemoteThread函数执行的线程函数是不是LoadLibrary?这是可以被某些监控工具检测到的
2018-1-23 12:17
0
雪    币: 212
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
试验了一下,还没有做到这个程度,仅仅是做了一个“跳板”似乎就解决问题了。
也就是VirtualAllocEx和CreateRemoteThread之后,在目标进程中再VirtualAlloc和CreateThread,释放掉Loader创建的内存和线程,改成在目标进程内部创建出来的内存和线程来Load  DLL,暂时就还没检测出来了。
再多运行几次,跑一段时间看看,确认一下吧。
2018-1-23 16:23
0
雪    币: 1176
活跃值: (1269)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
10
有一个方法很简单  火绒剑看不到  pchunter能看到卸载蓝屏。。  目前测试只能win7x64可以用  win10  1703不行  其它版本不知道  。。
2018-1-25 19:59
0
雪    币: 39
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
你的这个方法可以通过GetModuleHandle  拿到文件句柄的。而且底层调用ntdll的  LdrLoadDll,以及LdrRegisterDllNotification    都能监控到。你要自己实现dll加载应该就可以绕过去了
2018-1-26 22:29
0
雪    币: 212
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
allh 你的这个方法可以通过GetModuleHandle 拿到文件句柄的。而且底层调用ntdll的 LdrLoadDll,以及LdrRegisterDllNotification 都能监控到。你要自己实现 ...
是的,最后还是要用从内存加载DLL,这样才能最好的隐藏。
只是之前被检测出来的不是DLL本身,而是用于注入DLL的Loader.exe。而且奇怪的是Loader.exe在被检测出来的时候,其进程早就已经退出了。但是Loader.exe的File  Object依然存留在内存中,这个残留的痕迹才是要最优先解决的。
2018-1-26 23:51
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
13
jhjzero 是的,最后还是要用从内存加载DLL,这样才能最好的隐藏。 只是之前被检测出来的不是DLL本身,而是用于注入DLL的Loader.exe。而且奇怪的是Loader.exe在被检测出来的时候,其进程早就 ...
你这是哪个文件没有释放吧?不应该啊  ,实在不行,用Rundll32.exe这接口
2018-2-22 12:22
0
雪    币: 45
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
jhjzero 试验了一下,还没有做到这个程度,仅仅是做了一个“跳板”似乎就解决问题了。 也就是VirtualAllocEx和CreateRemoteThread之后,在目标进程中再VirtualAlloc和Cre ...
此方式目前测试情况如何?
2018-4-20 14:02
0
游客
登录 | 注册 方可回帖
返回
//