更新:
文件命令输出:
bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=212a49c7fff7342713aec6af6789abbaf3a8014, stripped
我还有一个名为.lib的.so文件:libpython2.7.so.1.0,我相信它是python解释器。
二进制文件中也有一个.pydata节,如下所示: br />
[27] pydata PROGBITS 0000000000000000 00007a48
00000000000a0c47 0000000000000000 0 0 1
二进制文件中包含字符串,如下所示:
Py_SetPythonHome
Cannot dlsym for Py_SetPythonHome
Error loading Python lib '%s': dlopen: %s
Error detected starting Python VM.
libpython2.7.so.1.0
所以,我很确定它是Python代码编译为Linux二进制文件。
这些项目都不适合我。
unfrozen_binary-出现错误,因为在common.py中,它将导入反编译器库无法使用。
pyThaw-它利用radare2,但是当我将其与二进制文件一起使用时,它会挂起并且不会提取源代码。用于Linux的带有python字节码的二进制文件?
#1 楼
可以肯定地说您的二进制文件已使用PyInstaller编译。搜索字符串“检测到启动Python VM时出错”。导致出现PyInstaller存储库。简而言之,这是重要的部分PyInstaller中使用了两种存档。一个是ZlibArchive,
,它允许有效地存储Python模块,并使用某些
导入挂钩直接导入。另一个文件是CArchive,类似于.zip文件,这是打包(以及可选地压缩)任意数据块的通用方法。它之所以得名,是因为它可以通过C以及Python轻松地进行操作。这两个都是从公共基类派生的,因此很容易创建新型的
存档。 PyInstaller二进制文件。
使用
pyi-archive_viewer
命令检查任何类型的存档:pyi-archive_viewer archivefile
使用此命令,您可以检查使用PyInstaller(PYZ或PKG)或任何可执行文件(.exe文件或
ELF或COFF二进制文件)构建的任何归档文件的内容
您现在可以尝试什么。对于Windows,有一个等效的工具pyinstxtractor(我是作者),但不幸的是,目前不支持ELF。
评论
我能够提取python代码,但是它不是纯文本,里面还有一些二进制数据。我使用了pyi-archive_viewer的“ X”选项来提取内容。它告诉我文件的压缩大小和未压缩大小。当我提取时,大小匹配未压缩的大小,但是文件不是正确的python代码。我检查了文件的标题并对其进行了binwalk,以查看其是否为压缩形式。但事实并非如此。我已经更新了答案。你能检查一下吗?
–霓虹灯
18年11月17日在18:50
@NeonFlash您需要先将提取的pyc文件的标题修复,然后再将其提供给反编译器。我发现您已经知道了:)
– 0xec
18年11月17日在21:06
#2 楼
显然,这样一种替代方法是手动提取python代码/字节码。由于集成python解释器和/或字节码编译器需要一些工程,因此许多解决方案都倾向于使用简单道路。尽管可能不是将python代码作为混淆措施转换为可执行文件的情况,但对于大多数python到可执行文件的转换器(例如py2exe,PyInstaller等),绝对是这种情况。
我提到的简单方法是将整个python解释器包括在内,将原始
py
或pyc
文件提取到一个临时目录中,然后使用python解释器执行提取的代码。了解是否是这种情况您的样本应该很容易通过过程监视或调试来完成,并且还可以通过静态逆向工程来实现(众所周知,这是硬编码方式)。
作为旁注,您正在查看的文件可以使用一种可用的工具生成,但随后进行了一些调整,以使普通提取器无法识别或无法解析。您可以尝试通过查看文件结构类似于任何python可执行文件构建器的方式来处理该问题。
评论
请清楚描述您要撤消的文件。是在.text节中包含x86_64目标代码的ELF目标文件,还是其他全部文件?我将添加更多详细信息。是的,它是ELF 64位二进制文件。它里面有一个pydata部分,我还有一个.so文件,它与python解释器相对应。
您可以在PyEval_EvalFrameEx上为启动器设置一个断点,并在执行字节代码时转储它们。虽然不是完整的解决方案。
可以提供二进制文件吗?