首页
社区
课程
招聘
[原创]萌新逆向学习笔记——远程线程注入DLL
发表于: 2020-8-17 18:33 10599

[原创]萌新逆向学习笔记——远程线程注入DLL

2020-8-17 18:33
10599

上一篇文章中,笔者学习并整理了有关消息钩子的原理,实现了一个键盘记录器。撇开键盘记录器这个具体的功能不说,从更加抽象的角度来看,消息钩子的利用让我们得以在"别人的EXE"中实现了自己的代码功能,只不过这功能仅限于类似鼠标,键盘的输入监听罢了。而今天的主题——远程线程注入DLL则是更为广泛的,用以在他人EXE中实现自己代码功能的操作,这次就不仅限于键盘记录了。

阅读并实现本文主题,需要以下工具及知识:

在讲解远程注入DLL原理之前,读者需要知道从代码层级上DLL加载时的函数调用流程。

要在一个Win32 app中,也就是我们的exe程序中加载DLL只需要调用一个函数——LoadLibraryA/W
以下是LoadLibrary文档

以下为一个控制台程序加载DLL示例:

参数 LPCWSTR lpLibFileName为DLL文件的路径,需要说的是,当加载的DLL文件和EXE在同一文件夹下可只写DLL为文件名。

当DLL被使用LoadLibraryA/W加载后,在DLL文件中的DllMain函数会被自动调用:
以下为创建的DLL文件:

DllMain函数在我们创建DLL文件时会自动创建,没有编程基础的读者也不用过于害怕,我们只要记住,在EXE调用LoadLibraryA/W函数后,DLL文件就会执行DllMain函数中的代码。

所以,如果我们想在"别人的EXE"中实现自己的代码功能,只要想办法,让别人的EXE调用LoadLibraryA/W 函数加载我们自己写的DLL文件即可。

可,这要怎么做呢?而这正是本文记载的主要内容。

要使"别人的EXE"加载我们的DLL其实很简单,这是因为微软设计的时候提供了一个函数用来在"别人的EXE"里执行一个指定函数——CreateRemoteThread

虽然参数过多,但我们只需要关注三个参数即可:

先前说过,我们传递给CreateRemoteThread的函数必须符合一定格式,这个格式可以在微软文档)中查得到

请记住上面的这个只是模板规格,它要求我们传递的函数必须符合这样的格式。大家应该还记得我们的目标吧——调用CreateRemoteThread来迫使"别人的EXE"调用LoadLibraryA/W函数来加载我们的DLL。因此,如果我们能把LoadLibraryA/W函数传过去该多好。

可要传递过去就必须符合上面的格式呀,LoadLibraryA/W函数的格式符合吗?我们来再次看看:

啊这,这简直就很像嘛,模板中返回值DWORD是表示一个unsigned long值,而参数中的LPVOID则可以指向任何类型。

所以除了返回值似乎有所不同以外,其他除了名字不同,简直就很像。因此我们可以通过把LoadLibraryA/W强行转换为模板的类型(微软定义了一个类型LPTHREAD_START_ROUTINE 来代指模板)传递过去即可。

可就算我们知道我们要传递的LoadLibraryA/W函数符合了模板格式,那要怎样才知道这个函数在"别人的EXE"中的地址呢?因为我们传递的LoadLibraryA/W函数地址必须是在"别人的EXE"中的地址,因此我们不能平白无故的把自己的地址传过去。

这里有一个常识,那就是每个EXE的虚拟地址是不一样,换句话来说我在自己程序里写了一个和别人EXE里相同的代码,加载出来的内存虚拟地址完全不同。

但凡事都有例外,系统核心的函数地址在每个EXE中都是一样的,而LoadLibraryA/W正是系统核心的函数之一。其位于系统核心文件kernel32.dll之中

所以我们只要:通过GetProcAddress函数获取系统核心函数LoadLibraryA/W的地址->转换成模板格式->传递到CreateRemoteThread中便可大功告成。

只贴出部分核心源码,需要注意的是编码的程序涉及到两个文件,一个是药引子EXE,也就是我们调用CreateRemoteThread的地方,另一个是自己编写的DLL文件,也就是迫使"别人EXE"加载并执行的文件。
EXE中代码:

DLL中代码:

一些结果:

1

2

3

4

5

6

作为使用者我们只要知道调用CreateRemoteThread函数来实现DLL注入即可,参数则靠其他方法去凑。

作为学习者,我们要知道CreateRemoteThread更广泛的含义并不只有DLL注入,就如同其文档所述是在另一个进程中新创建一个线程,并从参数中的起始地址运行。只是不知道是微软故意如此设计还是有奇人无意中的发现,才造就了这样的DLL注入技术。

其实笔者的c++编程技术有限,WIN32中的API理解也捉襟见肘,文中大部分内容是笔者阅读《逆向工程核心原理》后的总结,可能存在疏漏和错误,若可指出感激不尽。


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

最后于 2020-8-17 18:33 被psycongroo编辑 ,原因:
收藏
免费 8
支持
分享
最新回复 (27)
雪    币: 184
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢分享,学习一下
2020-8-17 19:14
0
雪    币: 344
活跃值: (922)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
BIX
3
楼主文笔不错。
2020-8-17 20:43
0
雪    币: 270
活跃值: (1662)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
4
提点小建议,看到你最后写C++能力有限,建议也一定要提高C++的能力,正向和逆向并齐,底蕴高。
2020-8-17 21:13
2
雪    币: 3523
活跃值: (3454)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
5
好,谢谢指点。但现在C++正向能用到哪呢?我好像只能想到写WIN32了。
2020-8-17 23:25
0
雪    币: 3523
活跃值: (3454)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
6
BIX 楼主文笔不错。
第一次听说有人夸文笔好的哈哈哈,谢谢
2020-8-17 23:27
0
雪    币: 6112
活跃值: (1212)
能力值: (RANK:30 )
在线值:
发帖
回帖
粉丝
7
psycongroo 第一次听说有人夸文笔好的哈哈哈,谢谢
哈哈
2020-8-18 09:17
0
雪    币: 3023
活跃值: (2477)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
12
好帖子,学习了
2020-8-19 17:11
0
雪    币: 27
活跃值: (831)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
看雪没落了,10年前的技术都可以拿精华了。
2020-8-20 08:47
0
雪    币: 2435
活跃值: (750)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
bklang 看雪没落了,10年前的技术都可以拿精华了。
同意
2020-8-20 10:08
0
雪    币: 796
活跃值: (2044)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
bklang 看雪没落了,10年前的技术都可以拿精华了。
要恰饭的嘛,理解一下
2020-8-20 10:21
0
雪    币: 223
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
新手,用上面的代码学习了下注入不成功,win10专业版操作系统,想咨询下你也是在win10下运行吗?
2020-8-20 23:36
0
雪    币: 3523
活跃值: (3454)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
17
wangrong 新手,用上面的代码学习了下注入不成功,win10专业版操作系统,想咨询下你也是在win10下运行吗?
是的,用的win10家庭版
2020-8-21 14:40
0
雪    币: 12356
活跃值: (5879)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
18
bklang 看雪没落了,10年前的技术都可以拿精华了。
这论坛适合更名为看雪安全考古基地,有些原创的逆向文章操作难度不小只有优质,令人惋惜
2020-8-21 15:27
0
雪    币: 796
活跃值: (2044)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
hhkqqs 这论坛适合更名为看雪安全考古基地,有些原创的逆向文章操作难度不小只有优质,令人惋惜
几万用户,一人一篇一样的帖子,几万个精华可能就这样出现了
2020-8-22 21:30
0
雪    币: 7
活跃值: (4331)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
20
有人吐槽这是老旧的技术,但是答主只是把自己学的东西写出来分享而已,已经难能可贵了。如果对帖子的评级有异议的话可以艾特圈主提出意见。
2020-8-22 21:48
0
雪    币: 3523
活跃值: (3454)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
21
扎心了老铁萌,你说技术旧吧萌新我也不懂。可否提几个比较流行或者新的技术呢?我也好去学习学习
可是我万万没想到这年头写个学习总结也会引战
2020-8-22 22:02
0
雪    币: 7
活跃值: (4331)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
22
不慌,循序渐进慢慢来就行,该写写该发发
2020-8-22 22:25
0
雪    币: 3523
活跃值: (3454)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
23
0x2l 不慌,循序渐进慢慢来就行,该写写该发发[em_84]
好的,谢谢鼓励
2020-8-22 22:33
1
雪    币: 25
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24
对于萌新的我就爱看这种入门的技术贴,谢谢啦
2020-8-24 10:26
0
雪    币: 344
活跃值: (922)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
BIX
25
wangrong 新手,用上面的代码学习了下注入不成功,win10专业版操作系统,想咨询下你也是在win10下运行吗?
猜测没有修改注入文件路径
2020-9-15 21:26
0
游客
登录 | 注册 方可回帖
返回
//