返回介绍

Beacon 加载执行过程

发布于 2024-06-01 22:17:40 字数 2791 浏览 0 评论 0 收藏 0

前面粗略的分析了一下stager现在我们来动态调试一下,我也不用啥分析模拟工具了,就一小段也没混淆反调试,直接x32dbg手工走起(随意用啥都行看个人喜好)

shellcode转成exe直接x32dbg打开

断在系统断点后直接F9来到shellcode入口点

F7几次来到第一个call ebp看堆栈我们可以看到loadlibrarya api的哈希值第二个就是loadlibrarya函数的参数wininet,很明显是用来加载wininet.dll的,因为后面需要用到wininet.dll里的函数所以必须要先加载wininet.dll

msf和cs的shellcode基本都是这样来调用win api的有兴趣的可以跟一下,我这里直接向下走到VirtualAlloc


调用VirtualAlloc分配内存可写可读可执行属性
调用InternetReadFile循环读取stage到VirtualAlloc分配的空间中

读取完成后直接ret到stage(shellcode)去执行

开始运行接收到的stage(shellcode)

跳过来后,还是一个call pop 将call后面的地址放到ebx里


这里就是循环xor解密我写有注释可以看一下
解密完成准备跳转去执行Beacon.dll(可以看到内存中的4D5A一个明显的PE头特征)
跳转到Beacon.dll头开始执行

这个解密出来的stage其实就是Beacon.dll(一个修补过的反射dll)。我们把东西dump出来重建一下看看


dump记得重建一下PE,dump大小源自上面解密过程中的解密长度

dump完了用PE工具查看一下


可以看到两个非常明显的特征

这个beacon.dll就是核心所在,前面所有的工作都是为了加载执行beacon.dll这个反射dll

关于反射dll的原理请自行谷歌,反射dll修补技术可以看我曾经开源的一个项目我这里就不在做详细讲解了 仅供参考写的比较垃圾 https://wbglil.github.io/2020/03/27/%E5%85%B3%E4%BA%8E%E5%8F%8D%E5%B0%84dll%E4%BF%AE%E8%A1%A5/

基本上这块就写这么多吧,写的有些匆忙

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文