介绍

Go加载shellcode的学习之路……

本次思路也采用了shellcode和加载器分离以及对shellcode进行加密的思路,但是在这之上添加了一些新的想法。

构成

处理器

处理器其实是前期对shellcode的一个aes加密处理,并且aes加密的密钥是自行输入,加密密钥未写入到代码中,这样也使加密过程更加灵活,可以采用不同的加密密钥对shellcode进行加密。

处理过程:

  • 接收用户输入的shellcode原始路径,即生成的二进制bin文件或者raw文件。

  • 接受用户输入的aes加密后shellcode的保存位置,文件名以及后缀可随意。

  • 接受用户输入的aes加解密密钥,只支持16/24/32位的字符串。

采用的aes加密代码和之前文章采用的是一样的代码。

处理器下载地址:[点击下载](https://blog.axzzsec.com/upload/LoadR.zip)

加载器

加载器也是和之前大同小异,但是运行方式有所变化,在运行的时候需要输入aes加密后的shellcode位置信息,以及aes加解密密钥,还有就是自定义在程序内部的一个运行判断语句,只有三者都输入正确,加载器才会正常运行并加载shellcode上线。

加载过程:

  • 接收aes加密后的shellcode位置。

  • 接收aes解密密钥。

  • 接收程序内部自定义的运行密码。(我自定义为了whoami)

加载代码和上篇也一样。

加载器下载地址:[点击下载](https://blog.axzzsec.com/upload/LoadL.zip)

结果

最终这样的免杀性还是不怎么样,可能和上篇的特征相似太多,加上上篇已经送样本了,所以这个上传到VT效果不如上篇第一次传上去后的效果好。