Python3 搜索 运行 windows 进程的虚拟内存
Python3 Search the virtual memory of a running windows process
开始 TLDR;
我想编写一个 python3 脚本来扫描 运行 windows 进程的内存并查找字符串。
结束 TLDR;
这是一个 CTF 二进制文件。这是一个典型的 Windows x86 PE 文件。目标只是在进程运行时从进程内存中获取一个标志。使用 ProcessHacker 这很容易,您可以搜索 运行 应用程序内存中的字符串并使用正则表达式找到标志。现在,因为我是一个受虐狂,我努力为 CTF(真正的一切)编写解决方案。具体来说,我想使用 python3,C# 也是一个选项,但我真的很想将所有解决方案脚本保留在 python。
认为这将是一项非常简单的任务。你知道...... pip 安装一些由已经解决问题的人编写的库并使用它。找不到任何能让我完成这项任务所需的东西。这是我已经尝试过的库。
ctypes - 这是我使用的第一个,特别是 ReadProcessMemory。不断收到 299 错误,这是因为我传入的缓冲区大于内存的那部分,所以我创建了一个递归函数来捕获该异常,将缓冲区长度除以 2,直到它得到一些东西然后一次读取一个字节直到遇到 299 错误。可能一直在正确的轨道上,但我无法获得标志。只有当我知道标志的确切地址(我从进程黑客那里得到)时,我才能找到该标志。我可能会在 SO 上提出一个单独的问题来解决这个问题,这个问题实际上只是我在深入研究之前询问社区是否已经存在某些东西。
pymem - 一个很好的 ctypes 包装器,但有与上述相同的问题。
winappdbg - 仅限 python2.x。我不想使用 python 2.x.
haystack - 看起来这取决于 winappdbg,它取决于 python 2.x.
angr - 这是一种可能性,到目前为止只触及了表面。看起来很复杂,它在学习列表中,但现在不想深入研究无法解决问题的东西。
volatility - 看起来这是为了处理完整的 RAM 转储,而不是为了连接到当前 运行 进程和读取内存。
我目前的计划是更深入地研究 angr 看看是否可行,然后返回 pymem/ctypes 并尝试更多的东西。如果一切都失败了 ProcessHacker 是开源的。我对 C 语言不是很流利,因此需要时间来弄清楚他们是如何做到的。真的希望有一些 python3 图书馆我失踪了,或者我可能以错误的方式解决这个问题。
开始 TLDR;
我想编写一个 python3 脚本来扫描 运行 windows 进程的内存并查找字符串。
结束 TLDR;
这是一个 CTF 二进制文件。这是一个典型的 Windows x86 PE 文件。目标只是在进程运行时从进程内存中获取一个标志。使用 ProcessHacker 这很容易,您可以搜索 运行 应用程序内存中的字符串并使用正则表达式找到标志。现在,因为我是一个受虐狂,我努力为 CTF(真正的一切)编写解决方案。具体来说,我想使用 python3,C# 也是一个选项,但我真的很想将所有解决方案脚本保留在 python。
认为这将是一项非常简单的任务。你知道...... pip 安装一些由已经解决问题的人编写的库并使用它。找不到任何能让我完成这项任务所需的东西。这是我已经尝试过的库。
ctypes - 这是我使用的第一个,特别是 ReadProcessMemory。不断收到 299 错误,这是因为我传入的缓冲区大于内存的那部分,所以我创建了一个递归函数来捕获该异常,将缓冲区长度除以 2,直到它得到一些东西然后一次读取一个字节直到遇到 299 错误。可能一直在正确的轨道上,但我无法获得标志。只有当我知道标志的确切地址(我从进程黑客那里得到)时,我才能找到该标志。我可能会在 SO 上提出一个单独的问题来解决这个问题,这个问题实际上只是我在深入研究之前询问社区是否已经存在某些东西。
pymem - 一个很好的 ctypes 包装器,但有与上述相同的问题。
winappdbg - 仅限 python2.x。我不想使用 python 2.x.
haystack - 看起来这取决于 winappdbg,它取决于 python 2.x.
angr - 这是一种可能性,到目前为止只触及了表面。看起来很复杂,它在学习列表中,但现在不想深入研究无法解决问题的东西。
volatility - 看起来这是为了处理完整的 RAM 转储,而不是为了连接到当前 运行 进程和读取内存。
我目前的计划是更深入地研究 angr 看看是否可行,然后返回 pymem/ctypes 并尝试更多的东西。如果一切都失败了 ProcessHacker 是开源的。我对 C 语言不是很流利,因此需要时间来弄清楚他们是如何做到的。真的希望有一些 python3 图书馆我失踪了,或者我可能以错误的方式解决这个问题。