如何用Brida自动破解签名验证?
TOPIC SOURCE
用BurpSuit的Brida自定义插件搞定加密签名算法
在移动端安全测试中,签名字段往往是阻断抓包改包的关键点。若能让目标程序自行完成签名运算,整个拦截流程就可以实现全自动化,这正是 Brida 与 Frida 合力的用武之地。
准备工作:工具链与环境搭建
一台 Windows 10 64 位机器上,需装好 Burp Suite、Python 2.7(Brida 0.3 仍依赖该版本)以及 Frida‑core。随后在 Burp 的 Extensions 页面加载 Brida 插件,确保插件能够通过 Pyro4 与本地的 Frida 进程通信。
定位签名实现:从静态到动态
使用 JADX 反编译目标 APK,搜索 sign、JNISecurity 等关键字,往往会发现类似 String sign = JNISecurity.signJava(payload) 的调用。此时可以确认签名运算被封装在 native 库中,直接逆向往往碰壁。
为绕过逆向,思路转向“让程序自己算”。只要把完整的待签名字符串喂给 signJava,返回值即为合法的 sign。
编写 Brida 脚本:一次调用搞定签名
// brida_sign.js
function getSign(rawBody) {
var timestamp = new Date().getTime();
var payload = 'KEYKEYKEYKEYKEYKEY' + timestamp + rawBody;
var sign;
Java.perform(function () {
var Sec = Java.use('com.example.app.JNISecurity');
sign = Sec.signJava(payload);
});
return sign;
}
脚本的核心只有三行:构造包含固定密钥、时间戳以及原始请求体的字符串,然后调用 Java 层的 signJava 方法,最终把返回值转为十六进制供后续使用。
自定义 Burp 插件:自动注入签名
def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
if not messageIsRequest:
return
request = messageInfo.getRequest()
info = self.helpers.analyzeRequest(request)
body = request[info.getBodyOffset():]
bodyStr = ''.join(map(chr, body))
# 调用 Brida 脚本获取签名
sign = self.calc_sign(bodyStr)
# 替换或新增 Header
headers = list(info.getHeaders())
newHeaders = [h for h in headers if not h.lower().startswith('sign:')]
newHeaders.append('Sign: %s' % sign)
newReq = self.helpers.buildHttpMessage(newHeaders, body)
messageInfo.setRequest(newReq)
def calc_sign(self, body):
uri = 'PYRO:BridaServicePyro@localhost:9999'
proxy = Pyro4.Proxy(uri)
result = proxy.callexportfunction('getSign', [body])
proxy._pyroRelease()
return result
插件在拦截到请求后,先提取 Body,随后通过 Pyro4 把 Body 传递给前面的 brida_sign.js,拿到签名后重新组装 Header 并写回。整个过程对使用者透明,手动改签的繁琐瞬间消失。
实战效果:从单条到批量
把插件激活后,Intruder 的 payload 列表可以直接填入想要修改的字段,Burp 在每一次发送前自动完成签名计算。一次抓包、一次改包、一次发送,整个链路的耗时从数秒降至毫秒级,批量暴力测试也因此不再受签名瓶颈限制。

参与讨论
这玩意太硬核了,看得我头皮发麻🤔
求问这个在红米上能跑吗?一直连不上frida服务
之前搞过类似的东西,结果每次更新app签名逻辑就变,折腾死人
不是…这年头还有用Python 2.7的工具?太离谱了吧
要是目标APP加了防调用检测这招还管用不?
脚本那段直接抄走能用吗?
@ 祁门红茶 直接抄可能不行,密钥和时间戳得看你目标App具体怎么算的。