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

  • A+
所属分类:逆向工程

 前几天,很多的公众号都复现了来自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字样,如下:


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


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


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


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


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


$GUIDs = Get-Content .guid.txt
foreach ($GUID in $GUIDs){ $Bytes += [System.Guid]::new($GUID).ToByteArray()}[io.file]::WriteAllBytes("C:UsersAdministratorDesktop2.bin",$Bytes)


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


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


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); } }}

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


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


     ▼
更多精彩推荐,请关注我们

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



本文始发于微信公众号(鸿鹄实验室):免杀Tips--利用GUID来加载shellcode

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: