1

[原创]跟着病毒学技术---学习WannaCry自己实现LoadLibrary

ixiaohuo 2017-5-21 23:48 6338

最近逆了一下搞得人心惶惶的比特币勒索病毒WannaCry,发现里边有个知识点我挺感兴趣的,于是记下来跟大家分享。WannaCry在加载加密函数动态库的时候,并没有调用LoadLibrary()函数,而是自己实现将其加载到指定内存,并自己实现GetProcAddress()从而实现函数的调用。这样有什么好处呢?这样我们便无法查到它的加载模块与函数地址。我这里也有一个自己写的Demo,实现了LoadLibrary、GetProcAddress和FreeLibrary函数。代码中有我写的注释,比较详细可以看看。

其实,动态库的加载需要对PE格式有个清楚的认识,这样PE加载其实并不难,这里我推荐看雪的《PE权威指南》。

注:本例通过学习国外一大牛在GitHub上分享的开源代码,链接:https://github.com/fancycode/MemoryModule



推荐:论坛大聚会| 看雪安全开发者峰会将于7月21号火热来袭!

上传的附件:
最新回复 (32)
joker陈 2017-5-22 08:05
2
感觉可以精华了。哈哈
basketwill 2017-5-22 09:13
3
这个是老东西了,老技术了
ixiaohuo 2017-5-22 09:28
4
basketwill 这个是老东西了,老技术了
的确,但是不是说老技术就没有利用价值了。这不是最近那个病毒还在用么?给不会的人分享一下么
kanxue 2017-5-22 09:38
5
basketwill 这个是老东西了,老技术了
论坛欢迎基础的东西,这也是给新人一个学习的机会
syxdotar 2017-5-22 09:40
6
支持
kanxue 2017-5-22 09:40
7
joker陈 感觉可以精华了。哈哈
如果再加上一些文字解说,就可以精华了。
supersoar 2017-5-22 19:04
8
basketwill 这个是老东西了,老技术了
问题是老技术  也没几个人  愿意分享出来啊。。。。论坛我搜过  没几个  相关话题。
Rookietp 2017-5-22 23:39
9

注释很完整~感觉可以得精华。

newine 2017-5-23 16:03
10
像这种,想搜的时候都找不到,感谢分享,减少学习时间成本。
lynnux 2017-5-23 16:21
11
kanxue 如果再加上一些文字解说,就可以精华了。
用老外的代码却一点都不提出处,https://github.com/fancycode/MemoryModule
kanxue 2017-5-23 16:24
12
lynnux 用老外的代码却一点都不提出处,https://github.com/fancycode/MemoryModule
这个观点同意,大家引用别人的资料,参考资料里提一下。
ixiaohuo 2017-5-23 18:32
13
lynnux 用老外的代码却一点都不提出处,https://github.com/fancycode/MemoryModule
这个我忘了,的确是用的老外的资料,谢谢提醒
rlive 2017-5-24 10:35
14
注入弹个hello  world框,都算精华了。
叁毛 2017-5-24 11:19
15
很好,拼最后,大家都是拼谁对基础理解更透,细节更清楚。
技术本身没有过时的。
ugvjewxf 2017-5-26 06:23
16
这样我们便无法查到它的加载模块与函数地址。    好处就是这个,学习下,不错,感谢楼主分享出来
PPTV 2017-5-26 23:15
17
跟着病毒学技术---学习WannaCry自己实现LoadLibrary
yirucandy 2017-9-1 20:52
18
不错  鼓励一下
聖blue 2017-9-1 21:48
19
不错!!!!!!!
匿名编程 2017-9-4 09:11
20
研究学习
冰雄 2017-9-5 09:07
21
不错的东西。病毒代表技术的水平高低
拍拖 2017-9-5 18:03
22
              MemoryModule的实现有些问题,在加载VMPROTECT3.0以前加壳的DLL(启用内存保护功能)会
报文件被修改从而DLLMAIN初始化失败。
换个刀锋 2017-12-7 13:54
23
好东西,学到很多
niuzuoquan 2017-12-7 17:29
24
mark
ielts 2017-12-9 11:33
25
支持
编程小白 2018-1-17 16:48
26
点赞!
ielts 2018-1-23 11:39
27
支持
千缕情丝 2018-1-25 18:02
28
mark
hayde 2018-2-6 02:39
29
在哪里都能看见有人说,”这个早就有了“,“这个老技术”,“这个到处都是”,我都怀疑自己是不是地球人了!
这样的帖子我第一个支持,反正对我很有帮助就是了!
Dascolee 2018-4-9 18:01
30
支持
yyyang 2018-4-12 15:15
31
我补充两句,不对的地方,望见谅。
其实这个技术有一个更通俗的名字,叫内存加载,已经在大量的使用了,无论是木马还是病毒。好处不仅仅是楼主提到的,还有更值得一提的好处,那就是免杀。
举个例子:如果dll以源文件形式存在的话,一个exe要通过LoadLibrary加载一个dll文件,杀软便可以对dll文件做静态、动态扫描;如果dll不是以源文件形式存在的话(即dll文件以加密数据形式存在exe文件内部;或以加密文件形式存在),这样就可以给杀软分析造成麻烦,相对应的加载该类型dll的方法,就是内存加载——直接将dll数据解密在内存里,经过一些PE处理后,可以像LoadLibrary一样使用dll。
最后于 2018-4-12 15:31 被yyyang编辑 ,原因:
卡达 2018-4-30 11:44
32
收藏谢谢分享
petersonhz 2018-5-1 15:17
33
yyyang 我补充两句,不对的地方,望见谅。其实这个技术有一个更通俗的名字,叫内存加载,已经在大量的使用了,无论是木马还是病毒。好处不仅仅是楼主提到的,还有更值得一提的好处,那就是免杀。举个例子:如果dll以源文 ...
杀毒引擎对内存加载木马,一点办法都没有吗? 
返回