Skip to content
Security
Skill

/do-analyze

对 jar-analyzer-engine 构建的 SQLite 数据库执行安全审计分析查询。支持方法调用搜索、调用链追踪、Spring 组件分析、字符串搜索、漏洞模式检测等。

From plugin
jar-analyzer-claude
1402 skills
Install
$ npx -y skills add jar-analyzer/jar-analyzer-claude --skill do-analyze --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/do-analyze

Context preview

The summary Claude sees to decide when to auto-load this skill.

对 jar-analyzer-engine 构建的 SQLite 数据库执行安全审计分析查询。支持方法调用搜索、调用链追踪、Spring 组件分析、字符串搜索、漏洞模式检测等。

SKILL.md

do-analyze.SKILL.md
name: do-analyze
description: 对 jar-analyzer-engine 构建的 SQLite 数据库执行安全审计分析查询。支持方法调用搜索、调用链追踪、Spring 组件分析、字符串搜索、漏洞模式检测等。

do-analyze — Jar Analyzer 数据库分析与安全审计

概述

在 `build-db` skill 构建好 `jar-analyzer.db` 后,使用本 skill 对数据库进行各类安全分析查询。 通过 SQL 查询 + 反编译验证的方式,实现方法调用搜索、调用链追踪、漏洞模式检测等功能。

前提条件

  • 已使用 `build-db` skill 构建了 `jar-analyzer.db` 数据库
  • 当前工作目录下存在 `jar-analyzer.db` 文件
  • Java 8+ 可用(用于反编译验证)

数据库表结构

> **不要在本文件中重复描述数据库表结构。** > 请参考 `<plugin_dir>/references/DATABASE.md` 获取完整的数据库 Schema、字段说明、表关联关系和常用查询模式。

重要约定

方法唯一标识(四元组)

任何方法节点必须通过 **四元组** 唯一标识:

(jar_id, class_name, method_name, method_desc)

> **禁止**仅用方法名进行 join 或追链,因为方法重载很常见。

类名格式

数据库中的类名使用 `/` 分隔(JVM 内部格式),而非 `.` 分隔:

  • ✅ `com/example/controller/UserController`
  • ❌ `com.example.controller.UserController`

方法描述符格式

使用 JVM 方法描述符格式:

  • `(Ljava/lang/String;)V` = `void method(String)`
  • `(Ljava/lang/String;I)Ljava/lang/String;` = `String method(String, int)`
  • `()V` = `void method()`

分析操作流程(SOP)

执行 SQL 查询的方式

**优先使用 `sqlite3` 命令行工具**(直接、高效):

# 单条查询
sqlite3 jar-analyzer.db "SELECT COUNT(*) FROM method_table;"

# 格式化输出(带表头、列对齐)
sqlite3 -header -column jar-analyzer.db "SELECT class_name, method_name FROM method_table LIMIT 10;"

# 多条查询
sqlite3 -header -column jar-analyzer.db <<'EOF'
SELECT 'JAR文件' AS type, COUNT(*) AS count FROM jar_table
UNION ALL
SELECT '类', COUNT(*) FROM class_table
UNION ALL
SELECT '方法', COUNT(*) FROM method_table;
EOF

# 输出为 CSV
sqlite3 -header -csv jar-analyzer.db "SELECT * FROM spring_method_table;" > routes.csv

**如果 `sqlite3` 不可用,使用 Python 作为备选**:

import sqlite3

conn = sqlite3.connect('jar-analyzer.db')
cursor = conn.execute("SQL_QUERY_HERE")
for row in cursor:
    print(row)
conn.close()

> 将上述代码写入临时 `.py` 文件执行,分析完成后删除临时文件。

常用分析场景与 SQL

1. 项目概览 — 了解分析目标的基本信息

SELECT 'JAR文件' AS type, COUNT(*) AS count FROM jar_table
UNION ALL
SELECT '类', COUNT(*) FROM class_table
UNION ALL
SELECT '方法', COUNT(*) FROM method_table
UNION ALL
SELECT '方法调用', COUNT(*) FROM method_call_table
UNION ALL
SELECT '字符串常量', COUNT(*) FROM string_table
UNION ALL
SELECT 'Spring Controller', COUNT(*) FROM spring_controller_table
UNION ALL
SELECT 'Spring 映射', COUNT(*) FROM spring_method_table
UNION ALL
SELECT 'Servlet/Filter', COUNT(*) FROM java_web_table;

2. 方法调用搜索 — 查找谁调用了某个方法

-- 查找谁调用了某个特定类的方法(精确搜索)
SELECT DISTINCT
    caller_class_name, caller_method_name, caller_method_desc
FROM method_call_table
WHERE callee_class_name = 'java/lang/Runtime'
  AND callee_method_name = 'exec';

-- 模糊搜索
SELECT DISTINCT
    caller_class_name, caller_method_name,
    callee_class_name, callee_method_name
FROM method_call_table
WHERE callee_class_name LIKE '%ClassName%'
  AND callee_method_name LIKE '%methodName%';

3. 方法定义搜索 — 查找某个方法定义在哪里

-- 精确搜索
SELECT class_name, method_name, method_desc, is_static, line_number
FROM method_table
WHERE method_name = 'execute';

-- 模糊搜索
SELECT class_name, method_name, method_desc, line_number
FROM method_table
WHERE method_name LIKE '%upload%'
   OR method_name LIKE '%file%';

4. 反向调用链追踪 — 从 sink 回溯到 entry

-- 使用 SQLite 递归 CTE 追踪调用链(推荐)
WITH RECURSIVE call_chain AS (
    SELECT caller_class_name, caller_method_name, caller_method_desc,
           callee_class_name, callee_method_name, callee_method_desc, 1 AS depth
    FROM method_call_table
    WHERE callee_class_name = 'java/lang/Runtime' AND callee_method_name = 'exec'
    UNION ALL
    SELECT mc.caller_class_name, mc.caller_method_name, mc.caller_method_desc,
           mc.callee_class_name, mc.callee_method_name, mc.callee_method_desc, cc.depth + 1
    FROM method_call_table mc
    JOIN call_chain cc ON mc.callee_class_name = cc.caller_class_name
                      AND mc.callee_method_name = cc.caller_method_name
                      AND mc.callee_method_desc = cc.caller_method_desc
    WHERE cc.depth < 10
)
SELECT DISTINCT caller_class_name, caller_method_name, depth
FROM call_chain
ORDER BY depth;

> 也可以编写 Python 脚本实现 DFS/BFS 调用链追踪,灵活度更高。

5. Spring 入口分析

-- 列出所有 Spring Controller
SELECT class_name FROM spring_controller_table;

-- 列出所有 HTTP 映射(API 入口)
SELECT class_name, method_name, restful_type, path
FROM spring_method_table
ORDER BY path;

-- 查找特定 URL 模式的处理方法
SELECT class_name, method_name, method_desc, restful_type, path
FROM spring_method_table
WHERE path LIKE '%user%' OR path LIKE '%admin%';

6. Java Web 组件分析

-- 列出所有 Servlet/Filter/Listener
SELECT type_name, class_name FROM java_web_table;

-- 只看 Filter(可能是安全过滤器)
SELECT class_name FROM java_web_table WHERE type_name = 'Filter';

7. 字符串搜索 — 敏感信息检测

-- 搜索包含关键字的字符串(如密码、密钥等)
SELECT class_name, method_name, value
FROM string_table
WHERE value LIKE '%password%'
   OR value LIKE '%secret%'
   OR value LIKE '%key%'
   OR value LIKE '%token%';

-- 搜索 JNDI/LDAP/RMI 相关字符串
SELECT class_name, method_name, value
FROM string_table
WHERE value LIKE '%jndi%' OR value LIKE '%ldap://%' OR value LIKE '%rmi://%';

-- 搜索 SQL 语句(可能有 SQL 注入风险)
SELECT class_name, method_name, value
FROM string_table
WHERE value LIKE '%SELECT%FROM%'
   OR value LIKE '%INSERT%INTO%'
   OR value LIKE '%UPDATE%SET%'
   OR value LIKE '%DELETE%FROM%';

-- 搜索 IP 地址和 URL
SELECT class_name, method_name, value
FROM string_table
WHERE value LIKE '%://%'
   OR value LIKE '%.%.%.%';

8. 继承关系分析

-- 查找某个类的所有子类
SELECT class_name, super_class_name
FROM class_table
WHERE super_class_name LIKE '%AbstractController%';

-- 查找某个接口的所有实现类
SELECT class_name, interface_name
FROM interface_table
WHERE interface_name LIKE '%Serializable%';

-- 查找方法实现(接口方法 → 具体实现)
SELECT class_name, method_name, method_desc, impl_class_name
FROM method_impl_table
WHERE method_name = 'doFilter';

9. 注解分析

-- 查找所有带特定注解的类/方法
SELECT class_name, method_name, anno_name
FROM anno_table
WHERE anno_name LIKE '%RequestMapping%'
   OR anno_name LIKE '%GetMapping%'
   OR anno_name LIKE '%PostMap
Read more
Ships withjar-analyzer-claude

基于 jar-analyzer 的 Claude Code 插件,用于 Java JAR/WAR 包静态分析与安全审计。

Get the whole plugin
Stats
140
Stars
8
Forks
Maintained
Maintenance
5mo ago
Last commit
6mo ago
Created

Repo: jar-analyzer/jar-analyzer-claude

Other skills on jar-analyzer-claude.