关于反射 dll 修补

发布于 2024-09-02 19:41:29 字数 1743 浏览 9 评论 0

最近开源了一个小工具反射 dll 修补工具,其原理类似 msf 和 cs 分段 payload 加载,我就算便写写,写的不好勿喷。

废话不多说开始

关于反射 dll 的原理我实在是懒得写的请看别人吧因为要写的话有点多,反射 dll 的核心就在 ReflectiveLoader 函数好好看它的源码吧。

其实所谓的修补反射 dll 其实就是修改 dll 头部让其变成汇编指令去调用 ReflectiveLoader 函数然后 ReflectiveLoader 函数会经过一系列处理最后会调用 DllMain。这时这个 dll 就像 shellcode 一样可以直接执行,其实我们所做的就是解析 dll 找到 ReflectiveLoader 函数并将其地址硬编码写到 Dll 头部然后 call

我这里以 x86 为例 x64 类似都在 py 代码里我就不写了

dec ebp             ; M
pop edx ; Z
call 0 ; 为了将下一条指令压到栈里
pop ebx ; 将压到栈里的地址弹到 ebx
push edx ; 恢复 edx
inc ebp ; 恢复 ebp
push ebp ; 保存 ebp
mov ebp, esp ; 切换堆栈
add ebx,0x??? ; ebx+ReflectiveLoader 函数文件偏移-7
call ebx ; call ReflectiveLoader

MZ 都不用多说了都知道是 PE 文件标志对应十六进制的 4D5A 也是 x86 汇编指令的 dec ebp 和 pop edx 你问我为什么要用这个两个开头你看 ReflectiveLoader 函数里的代码就知道了。

call 0 这句是为了将下一条指令的地址压到栈了

pop ebx 这句是为了将栈里的地址弹到 ebx 里

push edx 恢复 edx

inc ebp 恢复 ebp

push ebp 保存 ebp

mov ebp,esp 切换堆栈

add ebx,0xxx 这句就是关键这后面的 0xxx 就是 ReflectiveLoader 函数的文件偏移-7(你问为什么-7 因为文件偏移是从 0 开始的,ebx 从+7 开始)

call ebx 调用 ReflectiveLoader 函数

修改后 dll 基本结构如图

d.png

关键的就是这段引导程序是由它来调用 ReflectiveLoader 函数,其余的自己看看 py 代码吧都不难主要就是解析 pe 文件寻址 ReflectiveLoader 函数文件偏移然后将引导程序和文件偏移都硬编码到 dll 头部

github 地址: https://github.com/WBGlIl/ReflectiveDLL_Patch

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

陈年往事

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

玍銹的英雄夢

文章 0 评论 0

我不会写诗

文章 0 评论 0

十六岁半

文章 0 评论 0

浸婚纱

文章 0 评论 0

qq_kJ6XkX

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文