Skip to content

Latest commit

 

History

History
55 lines (45 loc) · 3.12 KB

File metadata and controls

55 lines (45 loc) · 3.12 KB

自定义String类型数据(CustomString)

  • 类别:custom 别名:— 优先级:200
  • 作者:—
  • 依赖:无(仅用 JDK 与框架接口)

作用

把用户提供的字符串原样返回,作为链的数据源(最内层产物)。它产出的是 String 而非 byte[],用于需要「自定义文本负载」的场景——把任意字符串(如探测标记、协议报文、明文命令)交给消费方直接输出或注入。

链接标签

  • 入口 tagsCustomStringPayloadEND
    • CustomStringPayload —— 声明产出为「自定义字符串负载」(与字节版的 CustomBytePayload 对应)。tag-graph 中该标签作为入口出现 1 次、作为 nextTags 出现 0 次,说明它是一个纯源头、无上游衔接的孤立标签。
    • END —— 终结标签,表示这是链的叶子/源头,内部不再调用下一环。
  • 衔接 nextTags:(空)—— 链尾数据源,后面不接 gadget。
  • excludes:(空)

源码剖析

本类是全库最简单的 gadget 之一:

@GadgetTags(tags={"CustomStringPayload", "END"})
@GadgetAnnotation(name="自定义String类型数据", priority=200)
public class CustomString implements Gadget {
    @Param(name="字符串")
    public String data;

    public Object getObject() {
        return this.data;            // 原样返回,不做任何编解码
    }

    @Override
    public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
        return this.getObject();     // 纯数据源,不 chain.doCreate
    }
}

关键点:

  • 无任何解码/转换,getObject 直接把 data 字段返回;产物类型是 String
  • invoke 调用 chain.doCreate(context),符合 END 语义——它是链的最内层文本源。
  • 与三个 ByteArray* 构件的根本区别在于产物类型:这里是 String,因此它挂 CustomStringPayload 而非 CustomBytePayload,消费方按文本处理(例如需要以字符串形式发送的自定义协议内容)。

参数(@Param)

字段 名称 说明 默认 可选值
data 字符串 原样作为最终 String 负载返回,不做编解码 任意字符串

适用版本与原理要点

  • 与目标环境版本无关,属生成端「离线数据封装」构件,是最朴素的自定义负载入口。
  • 用途:当消费方(TcpServer / HTTPServer 类的自定义数据生成)需要的是一段现成文本而非字节数组时使用;也常作为调试/占位或协议明文的注入点。

所属预设链

自由构件,未直接出现在 51 条预设链中。属 custom 自定义数据生成体系。

关联

  • 字节数组对应物(同为 custom 数据源、改产 byte[]):ByteArrayFromBase64ByteArrayFromHexByteArrayFromUploadFile
  • 消费方 Payload:与 CustomBytePayload 同属「自定义数据生成」体系的 UserCustomPayload(HTTP Server / TCP Server 模式;字符串负载走 CustomStringPayload 分支)。