python shellcode分析
2021/8/15 7:37:01
本文主要是介绍python shellcode分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
https://blog.csdn.net/qq_32261191/article/details/108994177
分析shellcode
ctypes是 Python 的外部函数库。它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数。可使用该模块以纯 Python 形式对这些库进行封装。在C/C++语言中,通过申请内存将shellcode加载到内存中进行执行,在Python语言中通过ctypes模块将shellcode加载到内存并执行。
内存申请
ctypes.windll.kernel32.VirtualAlloc函数。VirtualAlloc是Windows提供的API,通常用来分配大块的内存。
此处可参考https://blog.csdn.net/qq_37865996/article/details/107807123
VirtualAlloc函数原型:
调用kernel32.dll动态链接库中的VirtualAlloc函数申请内存,0x3000代表MEM_COMMIT | MEM_RESERVE,0x40代表可读可写可执行属性。
RtlMoveMemory从指定内存中复制内存至另一内存里 ,语法如下:
CreateThread创建一个新线程
系统将创建一个进程和一个主线程。CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤:
1.在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回
2. 把线程退出码置为STILL_ACTIVE,把线程挂起计数置1
3. 分配context结构
4. 分配两页的物理存储以准备栈,保护页设置为PAGE_READWRITE,第2页设为PAGE_GUARD
5. lpStartAddr和lpvThread值被放在栈顶,使它们成为传送给StartOfThread的参数
6. 把context结构的栈指针指向栈顶(第5步)指令指针指向startOfThread函数
WaitForSingleObject等待创建的线程,里两个参数,一个是创建的线程,一个是等待时间。正常的话我们创建的线程是需要一直运行的,所以将时间设为负数,等待时间将成为无限等待,程序就不会结束。
进行排察工作,通过手工逐行删除文件定位特征码,发现删除第三行或第四行后发现不再报毒,所以将这两句进行混淆。所有的作者将所有的shellcode进行编码。
使用pyinstaller打包
使用pyinstaller -F -w -i a3.ico horse.py打包为horse.exe
这篇关于python shellcode分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享