我知道我可以在使用[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 r2piper2pipe.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