该工具的目的是追踪用户输入,以便发现进入敏感方法(如 java.lang.Runtime.exec、java.sql.Statement.executeQuery 等)的注入点,以及这些输入从注入点到方法调用之间发生的变异。
会生成“标记”(Marks),你必须在应用的每个可能的用户输入中插入这些标记。不同的标记将帮助你确定警报的来源。
受监控方法的列表可通过 CLI 中的 > list_breakpoints 命令查看。该列表可通过 > add_breakpoint 和 > delete_breakpoint 命令进行修改。
Captain Hook Docker Main machine
container
┌────────────────────────────────────────┐ ┌────────────────────────────────────────┐
│ │ │ │
│ ┌─────────────────┐ ┌────────────────┐ │ │ ┌──────────────────────────┐ │
│ │ │ │ │ │ │ │ │ │
│ │ ┌────┐ │ │ Java Debugger │ │ │ │ │ │
│ │ │ │ Python │ │ ├─┼─────────────┼──────────► │ │
│ │ │ │ + │ │ │ │ │ │ Program being │ │
│ │ │ │ Frida │ │ │ │ JDWP │ │ analyzed │ │
│ │ │ │ │ │ ◄─┼─────────────┼──────────┤ │ │
│ │ │ │ ◄─┤ │ │ │ │ │ │
│ │ │CLI │ ├─► │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ └────────────────┘ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ ┌──────┐ │ │ │
│ │ │ │ ├────────────────────┼─────────────┤►│frida-├─► │ │
│ │ │ │ │ │ │ │server◄─┤ │ │
│ │ └────┘ │ │ │ │ │ └──────────────────────────┘ │
│ │ │◄───────────────────┼─────────────┼─┤ │ │
│ └─────────────────┘ │ │ └──────┘ │
│ │ │ │
└────────────────────────────────────────┘ └────────────────────────────────────────┘
其 JVM 必须使用以下选项启动:
-Xdebug-Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n-Xint当然,监听端口(上例中的 1000)是任意的,可以根据需要更改。
如果可能,请在包含被分析程序的机器上安装 frida-server,并使用以下命令启动它:
# frida-server -l 0.0.0.0:1500 &
监听端口/地址也可以根据你的需要更改。
在位于 ./dbg 的 Dockerfile 末尾,设置“主机”(运行待分析程序的机器)IP 地址、JDWP 监听端口和 Frida 监听端口(如果 frida-server 不可用,则设为 0)。
然后运行 # make build,再运行 # make run-dbg。使用 # docker exec -it $(docker ps -lq) bash 将第二个终端附加到该容器。
在第一个终端中运行:cd debugger && make debug,然后在第二个终端中运行:cd frida && make instrument
你将通过第二个终端与 Captain Hook 交互,该终端会为你呈现一个 CLI。输入 > help 可查看所有可用命令的完整列表,这些命令均有文档说明。
“agent”文件夹以及 > set_object_inspection_strategy 命令纯粹是实验性的。