Python 通过pywin32模块调用WindowsAPI接口,实现对特定进程加载模块的枚举输出并检测该PE程序模块所启用的保护方式,此处枚举输出的是当前正在运行进程所加载模块的DLL模块信息,需要用户传入进程PID才可实现输出。

  • 首先需要安装两个依赖包:
  • pip install pywin32
  • pip install pefile

然后再命令行模式下执行命令启动枚举功能。

# By: LyShark
import win32process
import win32api,win32con,win32gui
import os,pefile,argparse def Banner():
print(" _ ____ _ _ ")
print(" | | _ _/ ___|| |__ __ _ _ __| | __")
print(" | | | | | \___ \| '_ \ / _` | '__| |/ /")
print(" | |__| |_| |___) | | | | (_| | | | < ")
print(" |_____\__, |____/|_| |_|\__,_|_| |_|\_\\")
print(" |___/ \n")
print("E-Mail: me@lyshark.com") def GetProcessModules(pid):
ModuleList = []
handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, pid )
hModule = win32process.EnumProcessModules(handle)
for item in hModule:
Module_Addr = hex(item)
Module_Path = win32process.GetModuleFileNameEx(handle,item)
Module_Name = os.path.basename(str(Module_Path))
ModuleList.append([Module_Addr,Module_Name,Module_Path])
win32api.CloseHandle(handle)
return ModuleList def CheckModulesProtect(ClassName):
UNProtoModule = []
if type(ClassName) is str:
handle = win32gui.FindWindow(0,ClassName)
threadpid, procpid = win32process.GetWindowThreadProcessId(handle)
ProcessModule = GetProcessModules(int(procpid))
else:
ProcessModule = GetProcessModules(int(ClassName))
print("-" * 100)
print("映像基址\t\t模块名称\t基址随机化\tDEP保护兼容\t强制完整性\tSEH异常保护")
# By: LyShark.com
print("-" * 100) for item in ProcessModule:
pe = pefile.PE(item[2])
DllFlage = pe.OPTIONAL_HEADER.DllCharacteristics
print("%10s"%(item[0]),end="\t")
print("%21s"%(item[1]),end="\t") # 随机基址 => hex(pe.OPTIONAL_HEADER.DllCharacteristics) & 0x40 == 0x40
if( (DllFlage & 64)==64 ):
print(" True",end="\t\t")
else:
print(" False",end="\t\t")
UNProtoModule.append(item[2])
if( (DllFlage & 256)==256 ):
print("True",end="\t\t")
else:
print("False",end="\t\t")
if ( (DllFlage & 128)==128 ):
print("True",end="\t\t")
else:
print("False",end="\t\t")
if ( (DllFlage & 1024)==1024 ):
print("False",end="\t\t\n")
else:
print("True",end="\t\t\n") print("-" * 100)
print("\n[+] 总模块数: {} 可利用模块: {}".format(len(ProcessModule),len(UNProtoModule)),end="\n\n")
for item in UNProtoModule:
print("[-] {}".format(item))
print("-" * 100) if __name__ == "__main__":
Banner()
parser = argparse.ArgumentParser()
parser.add_argument("-H","--handle",dest="handle",help="指定一个正在运行的进程Handle")
parser.add_argument("-P","--pid",dest="pid",help="指定一个正在运行的进程PID")
args = parser.parse_args()
if args.handle or args.pid:
if args.handle:
CheckModulesProtect(str(args.handle))
elif args.pid:
CheckModulesProtect(int(args.pid))
else:
parser.print_help()

输出枚举效果如下:

Python 检测PE所启用保护方式的更多相关文章

  1. python检测文件的MD5值

    python检测文件的MD5值MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权 ...

  2. 使用python检测一个设备是否ping的通

    使用python检测一个设备是否ping的通 一,subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并 ...

  3. python检测服务器是否ping通

    好想在2014结束前再赶出个10篇博文来,~(>_<)~,不写博客真不是一个好兆头,至少说明对学习的欲望和对知识的研究都不是那么积极了,如果说这1天的时间我能赶出几篇精致的博文,你们信不信 ...

  4. 安全篇:弱密码python检测工具

    安全篇:弱密码python检测工具 https://github.com/penoxcn/PyWeakPwdAudit

  5. python检测是否是质数

    python检测是否是质数 编写python脚本,使得实现以下功能: 输入一个整数,通过脚本判断出输入的这个数是否是质数,然后输出是否是质数. 脚本如下图所示: Num = input("P ...

  6. python检测变量名

    python检测变量名 变量在编程中的用途非常广,在python中,变量的名称只能以字母或者下划线“_”开头,变量名只能由字母.数字.下划线组成. 编写python,使得其实现以下功能: 1.输入一个 ...

  7. Python检测URL状态

    需求:Python检测URL状态,并追加保存200的URL 代码一: #! /usr/bin/env python #coding=utf-8 import sys import requests d ...

  8. python检测远程udp端口是否打开的代码

    研发过程,把开发过程较好的代码收藏起来,如下的代码内容是关于python检测远程udp端口是否打开的代码,希望对各朋友有较大帮助. import socketimport threadingimpor ...

  9. python检测当前端口是否使用

    基于python检测端口是否在使用 - 缘起花渊 - 博客园https://www.cnblogs.com/yqmcu/p/9804002.html def net_is_used(port,ip=' ...

  10. python检测文件的MD值

    使用hashlib模块,可对文件MD5一致性加密验证: #python 检测文件MD5值 #python version 2.6 import hashlib import os,sys #简单的测试 ...

随机推荐

  1. 电缆厂 3D 可视化管控系统 | 图扑数字孪生

    近年来,我国各类器材制造业已经开始向数字化生产转型,使得生产流程变得更加精准高效.通过应用智能设备.物联网和大数据分析等技术,企业可以更好地监控生产线上的运行和质量情况,及时发现和解决问题,从而提高生 ...

  2. 关于el-upload上传图片的一些坑clearFiles()的使用

    https://blog.csdn.net/weixin_46421824/article/details/109195624?spm=1001.2101.3001.6661.1&utm_me ...

  3. Go-值传递&引用传递

    值类型和引用类型 值类型关注其值 引用类型关注其指针 值类型和引用类型区别在于传递值的时候拷贝的对象不同,值传递拷贝是变量的值,引用传递拷贝的是变量的指针 拷贝 -- 传递值 赋值 函数调用 初始化 ...

  4. 精通 VS 调试技巧,学习与工作效率翻倍!

    ​ 欢迎大家来到贝蒂大讲堂 ​ 养成好习惯,先赞后看哦~ ​ 所属专栏:C语言学习 ​ 贝蒂的主页:Betty's blog ​ 1. 什么是调试 当我们写代码时候常常会遇见输出结果不符合我们预期的情 ...

  5. [转帖]充分利用 Oracle SQL监控

    https://zhuanlan.zhihu.com/p/397834311 经常被问到查看执行计划的最佳工具是什么,对我来说,答案总是SQL Monitor(包含在 Oracle Tuning Pa ...

  6. [转帖]技术分享 | 国产麒麟 arm 上编译安装 xtrabackup8

    原创 发布于 2022-07-19 13:29:29 3220 举报 作者:王向 爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理.擅长数据库故障处理.对数据库技术 ...

  7. [转帖]一文快速入门 ClickHouse

    https://zhuanlan.zhihu.com/p/621480049 什么是clickhouse ClickHouse是一种OLAP类型的列式数据库管理系统,这里有两个概念:OLAP.列式数据 ...

  8. 【转帖】MySQL InnoDB存储原理深入剖析与技术分析

    一.MySQL记录存储: MySQL InnoDB的数据由B+树来组织,数据记录存储在B+树数据页(page)中,每个数据页16kb,数据页 包括页头.虚记录.记录堆.自由空间链表.未分配空间.slo ...

  9. [转帖]Linux性能分析:理解系统平均负载

    Linux系统中,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数.它不仅包括了正在使用CPU的进程,也包括处于不可打断的睡眠状态的进程-它们是在等待其它系统资源如磁盘 I/O 等的进程. ...

  10. [转帖]比 Python 快 35000 倍!LLVM&Swift 之父宣布全新编程语言 Mojo:编程被颠覆了

    https://www.infoq.cn/article/GFfVLVpkIGOcKYB85Opb "Mojo 可能是近几十年来最大的编程语言进步." 近日,由 LLVM 和 Sw ...