第一个是这个技术的主文件,编译好的文件有,第二个工艺花园是根据这个技术做的一些案例 
工艺花园的案例好多都是关于dll的,与我们上文dll模块加载是很相关的。
使用我们上文《DLL模块重载初探》的dll演示代码。
1 |
|
进入simple_rdll项目编译加载器生成.o文件
编译生成bin文件
加载器进行加载
可以看到现在堆栈不干净,那么我们使用上文所说的dll模块覆盖加载,然后加上Draugr引擎伪装栈即可。比较重要的是如何把我们之前的C代码改装成Crystal技术使用的加载器,所以需要详细学习如何使用,这里只能简单介绍一下,项目比较复杂。
最好的方式还是从他给的工艺花园,直接看已经写好的代码,比如我们刚刚看的simple_rdll。
Crystal Palace 的奥义是:绝对解耦。用 C 语言写一个纯粹的加载器 (Loader),编译成 loader.o,与DLL拼接,调用shellcode的起始位置即可调用加载器然后加载dll。
所以现在我们的重点,可以不是这个dll本身,比如cs的话,我们自写一个beacon.dll,里面硬编码上配置,加载即可上线,这个dll里面只专注于与cs的交互等功能正常稳定实现即可,我们自己使用水晶宫的技术进行编写加载器,然后把加载器+dll编译成与位置无关的shellcode,这样随便开辟一块内存,直接执行就行了,比如我的dll,这个test.exe只是进行了一个简单的loadlibrary的函数直接加载的。
使用水晶宫技术加载dll。
在pic的加载器中编写了堆栈混淆,sleep masking操作,此时堆栈就是这样
Cobalt Strike 4.4 引入了 UDRL 概念,同样可以使用这个cs自带,进行使用写好的加载器。不过我喜欢使用自己的dll,配置硬编码到代码中自己编译出来,更加灵活,从根源修改一些东西。
水晶宫更像是一种语言,把写shellcode变得流程化标准化,我也是用大模型生成了一份中文文档,在我的博客另一篇文章《Crystal Palace 官方文档详细中文版》,可以学习一下,有很多技巧,比如各种混淆,hook,或者yara匹配汇编然后进行修改等。