干货:木马DLL实现热更新的骚操作

admin 2020年11月27日10:00:50评论229 views字数 699阅读2分19秒阅读模式
来自公众号:小白学黑客

以前开发木马有个需求:木马是一个DLL文件,DLL需要注入到某个进程常驻,该DLL具备自我升级能力,当发现新的可用版本时,立即Free自己,加载新的

下面是我的一个实现方案:

开启一个监听线程,从网络上拉新的可用版本,下载放到一个临时目录,如果发现需要升级,则立即FreeLibrary自身,然后执行更新过程

由于FreeLibrary之后当前模块的内存区域已经无效,所以更新的过程使用一个单独的线程,并将要更新过程的代码通过shellcode的形式写到分配的内存中执行。

更新过程中将会使用一些系统API函数,这里不能直接通过函数名来调用,因为这样会访问导入表,而DLL此时已经Free掉了。所以事先通过准备一个参数传递给该线程,该参数有更新线程要用到的一些数据和地址:

干货:木马DLL实现热更新的骚操作

下面看看更新监听线程如何工作以及如何准备这些参数:

干货:木马DLL实现热更新的骚操作

创建好更新线程后,自己得及时退出并Free自己,这里需要用特殊的技巧调用FreeLibray(这样更新线程才能把自己删掉):

干货:木马DLL实现热更新的骚操作

下面看看更新线程如何工作:

干货:木马DLL实现热更新的骚操作

同Free自己模块一样,最后VirtualFree参数和当前代码所占内存页面后,不能再回来,通过构建栈参数的形式,结束当前线程。这个函数编译后的二进制指令保存到全局数组中:

干货:木马DLL实现热更新的骚操作

下面是测试的效果(XP、Win7 32 &64均测试通过):

干货:木马DLL实现热更新的骚操作

最后有几个地方要说明的是: 

1、 加载新的dll前要把临时目录下的文件删除掉,防止出现递归循环更新过程。 

2、 执行更新过程前需要判断dll的版本信息,同样是为防止出现递归循环过程。

推荐↓↓↓

干货:木马DLL实现热更新的骚操作

Linux学习

本文始发于微信公众号(黑客技术与网络安全):干货:木马DLL实现热更新的骚操作

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年11月27日10:00:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   干货:木马DLL实现热更新的骚操作https://cn-sec.com/archives/191200.html

发表评论

匿名网友 填写信息