gpt4 book ai didi

python - 从外部获取正在运行的Python脚本的源代码

转载 作者:太空宇宙 更新时间:2023-11-03 19:56:15 28 4
gpt4 key购买 nike

原始问题

我最近编写了一个小型 Python 脚本,它的作用就像一个服务器,它有 +/- 200 行长,并且没有分成多个文件。原始文件已被删除并且没有备份,但进程本身仍在运行。

我知道以下代码将读出当前脚本的源代码,但是假设该文件仍然存在(并且该代码必须位于包含的脚本中)。 source

with open(__file__) as f:
print f.read()

我想知道的是,是否有可能在不再拥有原始文件的情况下获得无限运行脚本的源代码。我目前使用的是基于 Ubuntu Linux 的服务器,但跨平台解决方案将不胜感激。谢谢

<小时/>

编辑

到目前为止,我只能读取脚本的反汇编字节码,或者直接读取变量。我需要该脚本的主要原因是为了在删除脚本时丢失数据库密码后找回密码。

为此,我必须安装 pyrasite它使用 gdb 。以下是我用来安装 Ubuntu 所需的所有库的命令列表:

# Installing GDB and the libraries I had to use
root@hostname:~# apt-get install glibc-source
root@hostname:~# apt-get install libc6-dbg
root@hostname:~# apt-get install gdb

# Installing pyrasite
root@hostname:~# pip install pyrasite
root@hostname:~# echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

安装完所有内容后,我使用 Pyrasite 将 Python IDLE shell 注入(inject)正​​在运行的进程中,这样我就可以与代码进行交互。

# Injecting a python IDLE shell into our process and retrieving variable values
root@hostname:~# ps aux | grep python
root 7589 0.0 1.3 230544 13296 pts/1 S 12:16 0:00 python main.py
root 7610 0.0 0.1 11284 1088 pts/0 S+ 12:19 0:00 grep --color=auto python

root@hostname:~# pyrasite-shell 7589
Pyrasite Shell 2.0
Connected to 'python main.py'
Python 2.7.12 (default, Jul 1 2016, 15:12:24)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(DistantInteractiveConsole)

>>>

由于我需要取回数据库凭据,因此我只是通过将它们写入 shell 来回显它们:

# There we go
>>> DB_USER
'root'

>>> DB_PASS
'********'

>>> DB_NAME
'SomeDatabase'

>>> DB_HOST
'127.0.0.1'

尽管脚本的源代码已经消失,我们仍然可以使用 dis 反编译内存中的对象,并将我们想要的方法传递给它。我还尝试使用 inspect 模块,但尝试调用 inspect.getsourcelines() 只会导致 IOError

>>> import dis
>>> dis.dis(foo)

Disassembly of foo:
7 0 LOAD_CONST 1 ('Hello world')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE

如果您想要返回的方法中有任何文本,您可以在那里找到它。我无法将此代码转换回可用的 python,但我设法得到了我需要的东西。

最佳答案

您有权访问运行该进程的服务器吗?

那么也许你可以尝试http://pyrasite.readthedocs.io/en/latest/CLI.html

(免责声明:我自己从未使用过它)

HTH,

关于python - 从外部获取正在运行的Python脚本的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515892/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com