Python检测PE所启用保护方式详解

作者:lyshark 时间:2022-03-11 12:36:08 

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所启用保护方式详解

来源:https://www.cnblogs.com/LyShark/p/16125498.html

标签:Python,检测,PE,保护方式
0
投稿

猜你喜欢

  • 一篇文章带你轻松了解MySQL之事务的简介

    2024-01-20 15:57:33
  • python 绘制国旗的示例

    2023-01-05 19:29:32
  • python编译pyc文件的过程解析

    2022-08-13 20:48:19
  • Extjs显示从数据库取出时间转换JSON后的出现问题

    2024-01-18 12:52:13
  • WinHttp.WinHttpRequest--XmlHttp获取跳转页面的功能

    2010-03-22 14:34:00
  • Runnable.com 在线测试代码片分享网站

    2023-02-04 09:25:54
  • 在CentOS上MySQL数据库服务器配置方法

    2024-01-19 07:01:21
  • Python快速生成随机密码超简单实现

    2022-08-07 19:26:09
  • YOLOV5代码详解之损失函数的计算

    2022-06-09 02:01:58
  • Python编程实现双链表,栈,队列及二叉树的方法示例

    2021-11-10 12:35:17
  • 使用:after清除浮动

    2008-10-30 12:10:00
  • python中添加模块导入路径的方法

    2021-12-17 14:35:30
  • 对Golang import 导入包语法详解

    2024-02-20 19:10:28
  • pycharm无法安装cv2模块问题及解决方案

    2023-02-14 21:20:49
  • 磁盘缓存专题之一 缓存命中和缓存未命中&缓存与缓冲间的差异

    2012-10-07 11:02:46
  • ASP中生成文件的两种方式

    2007-08-30 09:49:00
  • 使用带批注的 XDR 架构创建 XML 视图

    2008-09-04 14:24:00
  • golang redigo发布订阅使用的方法

    2024-04-29 13:05:23
  • python assert断言的实例用法

    2023-06-24 22:15:42
  • Python类和实例的属性机制原理详解

    2022-12-12 19:47:27
  • asp之家 网络编程 m.aspxhome.com