[0x401000]> . server.py
的会话中执行脚本,并且当我不带参数调用r2pipe.open()
时,管道将连接到该脚本。 理想情况下,我想在python中生成一个简单的tcp服务器,该服务器等待来自客户端的特定命令。从实时r2会话(例如
[0x401000]> . client.py --command doAnalysis
)调用客户端。命令被传递到服务器,服务器打开到我的r2会话的管道,执行分析,然后更新我的会话(确实是为了能够从未从我的r2会话打开的服务器运行命令)。我要求服务器始终运行的原因是因为它将收集数据,并且我不想每次需要进行分析时都重新收集该数据。我无法从r2会话中调用服务器,因为该会话将被服务器阻止。 如果服务器可以直接打开r2pipe到我的r2会话,那将是很好的选择,但是我不知道该怎么办,甚至可能。我尝试使用pickle在套接字上发送r2实例,但无法对其进行腌制。有什么想法吗?
#1 楼
我不确定我是否完全理解您,但是无论如何我都会尝试一下。以下说明将说明如何实现这样的目标:|
radare2带有自己的Web服务器。尽管乍一看似乎有点过头,但它实际上却很有用,特别是在您要调试嵌入式系统或仅从远程终端执行命令时。
用
=h <port>
简单启动Web服务器并与任何HTTP客户端连接。您可以使用
=h?
打印此命令的帮助: oneliner命令生成带有与我们钟爱的/bin/ls/
的会话的radera2 Web服务器: 您可以使用
curl
来做到这一点: br /> 虽然很酷,但并不能帮助您-您要求使用r2pipe的解决方案。好吧...
什么是r2pipe?该函数接受描述运行r2命令的字符串参数
,并返回带有结果的字符串。
来源:r2pipe资料库
您可能知道,使用python,您只需执行
import r2pipe
和r2pipe.open("/bin/ls")
即可使用“ / bin / ls”打开radare2会话。您是否知道可以使用r2pipe连接到远程Web服务器?是的。让我们写一个快速的脚本来做到这一点:
[0x00000000]> =h?
|Usage: =[hH] [...] # http server
| http server:
| =h port listen for http connections (r2 -qc=H /bin/ls)
| =h- stop background webserver
| =h-- stop foreground webserver
| =h* restart current webserver
| =h& port start http server in background
| =H port launch browser and listen for http
| =H& port launch browser and listen for http in background
将脚本保存到驱动器上的
poc.py
。现在让我们在一个终端上运行
r2 -c=h /bin/ls
,在另一个终端上运行python poc.py
:
评论
对不起,有时候我很难解释自己。有没有办法使用这种方法使用可视模式?还是可以将Web服务器置于后台并在单个终端中正常使用r2?然后,如果我想从该终端的r2调用脚本中的任务,该脚本可以改为连接至Web服务器并执行其操作。那将是完美的。你的答案恰好是我在寻找一堆谢谢!!
– Nux
18年5月23日在22:08
耽误!我知道了。我用r2打开一个文件。然后执行e http.sandbox = false(这样我就可以运行脚本)和= h&,在后台运行繁荣的Web服务,而r2仍然正常运行!我想要的设置可能看起来有些奇怪,但是所有的工作都像我最初想要的那样。我的python服务器运行,并且在收到命令时将其连接到Web服务,并将任何r2.cmd()都转发给它!再次感谢你的帮助!
– Nux
18年5月23日在23:36
哇。不知道您可以r2pipe到Web服务器。很高兴知道!
–PawełŁukasik
18年5月24日在9:23