- 类别:custom 别名:— 优先级:200
- 作者:—
- 依赖:无(仅用 JDK 与框架接口)
把用户提供的字符串原样返回,作为链的数据源(最内层产物)。它产出的是 String 而非 byte[],用于需要「自定义文本负载」的场景——把任意字符串(如探测标记、协议报文、明文命令)交给消费方直接输出或注入。
- 入口
tags:CustomStringPayload、ENDCustomStringPayload—— 声明产出为「自定义字符串负载」(与字节版的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,消费方按文本处理(例如需要以字符串形式发送的自定义协议内容)。
| 字段 | 名称 | 说明 | 默认 | 可选值 |
|---|---|---|---|---|
data |
字符串 | 原样作为最终 String 负载返回,不做编解码 |
无 | 任意字符串 |
- 与目标环境版本无关,属生成端「离线数据封装」构件,是最朴素的自定义负载入口。
- 用途:当消费方(TcpServer / HTTPServer 类的自定义数据生成)需要的是一段现成文本而非字节数组时使用;也常作为调试/占位或协议明文的注入点。
自由构件,未直接出现在 51 条预设链中。属 custom 自定义数据生成体系。
- 字节数组对应物(同为
custom数据源、改产byte[]):ByteArrayFromBase64、ByteArrayFromHex、ByteArrayFromUploadFile。 - 消费方 Payload:与
CustomBytePayload同属「自定义数据生成」体系的UserCustomPayload(HTTP Server / TCP Server 模式;字符串负载走CustomStringPayload分支)。