前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >免杀Tips--利用GUID来加载shellcode

免杀Tips--利用GUID来加载shellcode

作者头像
鸿鹄实验室
发布2021-04-15 10:10:34
1K0
发布2021-04-15 10:10:34
举报
文章被收录于专栏:鸿鹄实验室鸿鹄实验室

前几天,很多的公众号都复现了来自Lazarus组织的加载器的实现方法,UUID法,具体链接可以查看:https://research.nccgroup.com/2021/01/23/rift-analysing-a-lazarus-shellcode-execution-method/,然后今天带来一个类似的方法,即使用GUID来加载shellcode。原文链接可点击原文链接查看。

GUID:一个全球唯一标识符 或 GUID 是一个假随机数用于软件中。虽然每个产生的GUID是不保证唯一的,但不同的标识符总数是(2128 也就是3.4028×1038)如此之大,以至于相同的数字被产生两次的机率是很相当小的。而这种加载方法也是从一个样本之中发现的。起初是国外的安全人员在样本中发现了大量的GUID字样,如下:

然后在IDA里分析是,发现了其加载代码以及解密代码(GUID做了部分变化):

然后我们发现,其中比较罕见的就是GUIDFromStringW该函数的调用。而作者也通过使用下面的方法成功的将GUID还原成立bin文件:

代码语言:javascript
复制
$GUIDs = Get-Content .\guid.txt

foreach ($GUID in $GUIDs){
    $Bytes += [System.Guid]::new($GUID).ToByteArray()
}
[io.file]::WriteAllBytes("C:\Users\Administrator\Desktop\2.bin",$Bytes)

然后通过火眼的https://github.com/fireeye/speakeasy工具得到了目标的部分信息(蓝队同学的工具+1)

那么了解到了这些之后,我们便可以学习这种思路,来编写我们自己的GUID的loader,首先就是GUID的生成。C#中提供了现成的代码:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Part8
{
    class Program
    {
        static void Main(string[] args)
        {
            string hex = "0F1F006666660F1F8400000000000F1F";
            Guid guid = new Guid(hex);
            Console.WriteLine(guid);
        }
    }
}

剩下的就是像IDA里面一样,编写一个加载器来加载就好了,这边就不放代码出来了,有兴趣的小伙伴可以自己实现一下。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿鹄实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档