修补封闭源网络应用程序以从文件中读取

Patching a closed source network application to read from file

所以让我解释一下,我想对一个名为 Y 的闭源应用程序进行模糊测试,该应用程序实现了一个自定义协议,让我们将该协议命名为 XY 是用 C 写的。
有没有办法修补 send/read 系列函数以从文件而不是套接字读取?
这可能适用于 AFL/AFL++ 模糊器吗?
请记住,该应用程序是为类 UNIX 生态系统开发的。

是的,您可以通过 netcat 在命名管道 (fifos) 和 TCP 连接之间建立桥接来轻松做到这一点。

创建两个文件(命名管道):

mkfifo /tmp/program_input /tmp/program_output

现在,在这些文件和应用程序之间架起一座桥梁。

如果应用程序是 TCP/IP 客户端,您的网桥将是 TCP/IP 服务器:

tail -f /tmp/program_input | nc -kl 127.0.0.1 50000 | tee /tmp/program_output > /dev/null

然后您必须将应用程序的对等 IP 地址配置为您的桥运行的主机的 IP。端口也必须匹配并且是任意的。 (上例中的“50000”。)

如果您无法更改应用程序使用的 IP address/TCP 端口,您必须将路由器上的这些映射到网桥应用程序的 IP/port(请参阅“端口转发” ").

如果应用程序是 TCP/IP 服务器,请创建一个 TCP/IP 客户端作为桥接器:

tail -f /tmp/program_input | nc <application_ip_address> <application_port> | tee /tmp/program_output > /dev/null

如果您想向正在分析的网络应用程序写入一些内容,请写入 /tmp/program_input。阅读 /tmp/program_output 以查看其输出。

我对 AFL/AFL++ 不太熟悉,但是您当然可以直接与应用程序通信,或者也可以为模糊器建立 socket/file 桥梁。