python - Python3搜索正在运行的windows进程的虚拟内存
问题描述
开始 TLDR;
我想编写一个 python3 脚本来扫描正在运行的 Windows 进程的内存并查找字符串。
结束 TLDR;
这是针对 CTF 二进制文件的。这是一个典型的 Windows x86 PE 文件。目标只是在进程运行时从进程内存中获取一个标志。使用 ProcessHacker 很容易,您可以搜索正在运行的应用程序内存中的字符串并使用正则表达式查找标志。现在,因为我是一个受虐狂,我努力为 CTF 编写解决方案(真的适用于所有事情)。具体来说,我想使用 python3,C# 也是一个选项,但我真的很想将所有解决方案脚本保留在 python 中。
认为这将是一个非常简单的任务。你知道... pip install 一些由已经解决问题的人编写的库并使用它。找不到任何可以让我完成这项任务所需的东西。这是我已经尝试过的库。
ctypes - 这是我使用的第一个,特别是 ReadProcessMemory。不断收到 299 个错误,这是因为我传入的缓冲区大于内存的那部分,所以我创建了一个递归函数来捕获该异常,将缓冲区长度除以 2,直到它得到一些东西然后一次读取一个字节直到遇到 299 错误。那里可能一直在正确的轨道上,但我无法获得旗帜。只有当我知道标志的确切地址(我从进程黑客那里得到)时,我才能找到标志。我可能会就 SO 提出一个单独的问题来解决这个问题,这个问题实际上只是我在深入研究之前询问社区是否已经存在某些东西。
pymem - 一个不错的 ctypes 包装器,但存在与上述相同的问题。
winappdbg - 仅限 python2.x。我不想使用 python 2.x。
haystack - 看起来这取决于取决于 python 2.x 的 winappdbg。
angr - 这是一种可能性,到目前为止只触及了表面。看起来很复杂,它在学习列表中,但现在不想深入研究不能解决问题的东西。
波动性- 看起来这适用于处理完整的 RAM 转储,而不是用于连接到当前正在运行的进程和读取内存。
我目前的计划是更深入地研究 angr,看看这是否可行,回到 pymem/ctypes 并尝试更多的东西。如果一切都失败了,ProcessHacker 是开源的。我对 C 语言不流利,所以需要时间来弄清楚他们是如何做到的。真的希望我缺少一些python3库,或者我可能会以错误的方式解决这个问题。
解决方案
推荐阅读
- python - 如何在忽略其他项目的同时重命名列表中的选定项目?
- html - 使用具有给定高度和宽度的 html 标记时,在 QML Text 中垂直对齐文本和图像
- java - 我们可以使用响应实体来处理异常而不是自定义期望吗
- node.js - 是否可以使用不和谐机器人将音频从我的 DAW 流式传输到不和谐?
- java - Jackson 序列化期间的必填字段
- oracle - Oralce:如何确保Oracle函数串行执行
- html - 如何使用 2 种语言为新的 HTML 网站保留 SEF URL
- javascript - NestJS 的自定义路由装饰器
- algorithm - 局部有轻微乱序的最长公共序列
- php - 如何将配置参数放入命令中