BinProxy 是一个用于任意 TCP 连接的代理。你可以使用 BinData gem 定义自定义消息格式。
sudo apt install build-essential ruby-dev 即可。--tls(未指定显式证书/密钥)的 openssl 二进制文件。gem install binproxy
根据你的 Ruby 安装情况,可能需要使用 sudo。
git clone https://github.com/nccgroup/BinProxy.git binproxy
cd binproxy
# 安装 ruby 依赖项。
# 根据你的环境,以下一个或两个命令可能需要 sudo。
gem install bundler && bundle
# UI 使用 webpack/babel 工具链构建:
(cd ui && npm install) \
&& rake build-ui
# 确认一切正常
# run.sh 设置环境并将所有参数传递给 binproxy
./run.sh --help
要构建并安装 gem 包:
gem build binproxy.gemspec
# 同样,此处可能需要 sudo
gem install binproxy-1.0.0.gem
欢迎报告安装问题!
binproxy。参见 --help 获取完整列表,但简要说明如下:
binproxy -c <class> [<local-host>] <local-port> <remote-host> <remote-port>
如果省略 -c 参数,将显示简单的十六进制转储。
如果省略本地主机,binproxy 默认为 localhost。
使用 --socks-proxy 或 --http-proxy 选项时,远程主机和端口会动态确定,不应指定。
# 从 localhost:9000 代理到 example.com:9000
binproxy localhost 9000 example.com 9000
# 在 localhost:1080 上作为 SOCKS 代理运行
# MITM 并解开代理流量的 TLS 加密,使用自签名证书和密钥
binproxy -S --tls 1080
# “Burp 的廉价替代品”模式:
#
# HTTP 代理;使用预生成证书的 MITM TLS;简单的头部解析
# 注意:这只对 HTTPS 流量有效,对纯 HTTP 无效!
# 如果你使用源码仓库,可以通过以下命令生成证书:
# rake makecert[example.com]
# 然后将 certs/ca-cert.pem 导入你的浏览器或操作系统的信任存储。
binproxy -H --tls \
--tls-cert certs/example.com-cert.pem \
--tls-key certs/example.com-key.pem \
--class-name DumbHttp::Message \
localhost 8080
默认情况下,代理使用内置的 RawMessage 类,该类仅提供每个消息的十六进制转储(假设消息与 TCP 数据包一一对应)。
你可以通过 --class 命令行参数指定一个 BinData::Record 子类†来查看解析后的协议信息。
你可能还希望在你的类中定义以下内容:
def summary
# 返回此记录的单行描述
end
# 目前支持的选项有
# - nil : 使用默认显示
# - "anon" : 对于结构体,直接显示内容
# - "hex" : 对于数字,显示为 0x1234ABCD
# - "hexdump" : 对于字符串,显示为 `hexdump -C` 格式
default_parameter display_as: "..."
# TODO: 记录状态相关内容
def self.initial_state
end
def current_state
end
def update_state
end
† 技术上,任何 BinData::Base 的子类都可以工作。
默认情况下,BinProxy 将所有流量中继到静态的上游主机和端口。它也可以配置为通过 --socks-proxy 和 --http-proxy 标志分别充当 SOCKS(v4 或 v4a)或 HTTP 代理。
注意: 目前,HTTP 代理仅支持通过 HTTP CONNECT 动词建立的隧道连接;它无法代理原始的 HTTP GET、POST 等请求。实际上,这意味着 HTTPS 流量可以工作,但纯 HTTP 流量无法工作,除非客户端支持强制隧道的标志,如 curl -p。
使用 --tls 标志可以在处理消息之前解开 TLS 加密。默认情况下,BinProxy 会生成自签名证书。你可以使用 --tls-cert 和 --tls-key 指定包含证书和密钥的 PEM 文件。(如果你克隆了源码仓库,可以使用 rake makecert[example.com] 生成一个静态 CA 和一个带有适当主机名的证书。)
另请参阅 TODO 文件,其中包含随机的想法和愿望清单。
BinProxy 的核心 TCP 代理功能最初源于 Sean Devlin 编写的一个专用代理。Rusty Burchfield 为该代理贡献了 HTML UI。虽然代码已经发生了足够多的变化,他们不再对当前任何错误负责,但如果没有他们两人的工作,BinProxy 很可能不会存在。