# dbschema-agent **Repository Path**: pedoc/dbschema-agent ## Basic Information - **Project Name**: dbschema-agent - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-30 - **Last Updated**: 2026-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # signature-bypass-agent Java Agent,通过字节码改写拦截 `java.security.Signature.verify(...)` 的所有重载, 使其无论实际签名是否匹配都返回 `true`。 ## 项目结构 ``` . ├── pom.xml └── src/main/java/com/example/ ├── agent/ │ └── SignatureBypassAgent.java # Agent 入口 + Advice 注入逻辑 └── demo/ └── SignatureVerifyDemo.java # 验证 agent 是否生效的演示程序 ``` ## 构建 ```bash mvn clean package ``` 产物:`target/signature-bypass-agent.jar`(fat jar,已包含 ASM) ## 使用方式 ### 1. 作为 `-javaagent` 加载(推荐) ```bash java -javaagent:target/signature-bypass-agent.jar -jar your-app.jar ``` ### 2. 通过 .vmoptions 文件加载(IDEA / 调试场景) 如果你的项目使用 `.vmoptions` 文件配置 JVM 参数(IntelliJ IDEA 的 **Edit Custom VM Options**,或 Gradle 的 `org.gradle.jvmargs` 等), 直接在其中加一行: ```properties --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED --add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED -javaagent:E:/Crack/DbSchema/dbschema-agent/target/signature-bypass-agent.jar ``` **IntelliJ IDEA 运行配置**:在 `Run/Debug Configurations` → `VM options` 中添加: ```bash -javaagent:E:/Crack/DbSchema/dbschema-agent/target/signature-bypass-agent.jar ``` **Gradle(`gradle.properties`)**: ```properties org.gradle.jvmargs=-javaagent:path/to/signature-bypass-agent.jar ``` **Maven Surefire(测试时加载)**: ```xml org.apache.maven.plugins maven-surefire-plugin -javaagent:${project.basedir}/path/to/signature-bypass-agent.jar ``` **注意**:路径建议用绝对路径,避免工作目录不同导致找不到 jar。 ### 3. 验证 demo ```bash # 不加载 agent —— 预期 verify=false java -cp target/signature-bypass-agent.jar com.example.demo.SignatureVerifyDemo # 加载 agent —— 预期 verify=true java -javaagent:target/signature-bypass-agent.jar \ -cp target/signature-bypass-agent.jar \ com.example.demo.SignatureVerifyDemo ``` ### 4. JDK 9+ 模块系统 如果目标应用本身用了模块系统,可能需要额外 opens: ```bash java \ --add-opens java.base/java.security=ALL-UNNAMED \ -javaagent:target/signature-bypass-agent.jar \ -jar your-app.jar ``` ## 工作原理 1. `premain` / `agentmain` 被 JVM 调用,拿到 `Instrumentation` 实例。 2. Byte Buddy 注册一个 `ClassFileTransformer`,在 `java.security.Signature` 类加载时改写其字节码。 3. 对每个 `verify` 方法注入一段 `Advice`:在方法退出时把 `boolean` 返回值强制改写为 `true`。 4. 因为拦截发生在类加载阶段,对上层调用方完全透明。 ## 拦截范围 | 方法 | 是否拦截 | |------|----------| | `Signature.verify(byte[])` | ✅ | | `Signature.verify(byte[], int, int)` | ✅ | ## 注意事项 - 本 agent 仅做全局拦截。如需只拦截特定调用方,可在 `AgentBuilder` 中增加 `.and(ElementMatchers.is(...))` 等条件过滤。 - 打包时用 `maven-shade-plugin` 把 Byte Buddy 重定位到内部包 (`com.example.agent.shaded.net.bytebuddy`),避免和目标应用自带的 Byte Buddy 版本冲突。