首页
社区
课程
招聘
[原创]某政务APP登录链路逆向:datagram 参数与 signature 签名分析
发表于: 2026-5-9 21:19 3334

[原创]某政务APP登录链路逆向:datagram 参数与 signature 签名分析

2026-5-9 21:19
3334

本次分析的APP信息(因保密原因不能完全透露):

本次分析重点为登录时请求参数分析


感觉是base64编码后的,通过hook base64调用看下情况:

是base64加密后的,跟踪调用链看下cn.gov.chinatax.gt4.bundle.tpass.depend.util.SM4Util.encryptData_ECB,发现函数下面有SM4标准加密

参数都对的上
hook一下这回两个加密函数,看下到底是哪个加密的

发现是参数String那个

将入参明文直接用SM4加密,发现前面全都对得上,只有最后21个字符串对不上,这里怀疑是填充方式有问题

把b64-->hex,发现是最后32位对不上,也就是说最后一轮有问题
在刚刚的代码里发现了轮函数线索:

尝试hook一下,和普通加密最后一轮对比一下

这是标准SM4加密后的最后一轮:

对比一下发现最后填充的有问题。
不是“纯标准 SM4 ECB PKCS5”,而是 先在明文末尾追加一个 0x00,再做剩余长度的 PKCS5/PKCS7 补位;因此最后一个分组从 ...0808 变成了 ...00070707...,最终导致看到的最后一段密文不同。

到这datagram参数已经还原到了第一步

接着我们分析一下sm4加密传入的参数,进一步分析一下直到原始数据

分析一下这个值怎么来的,参数一眼b64加密后的
追一下b64 hook

追一下这个调用链cn.gov.chinatax.gt4.bundle.tpass.depend.util.RequestUtil.getCompressedDatagram
发现也是个native函数

hook一下

账号密码明文传入,加密成这个数据
返回值H4sIAAAAAAAAAKtWKkgsLi7PL0pRslIyNDI2MTUzt1DSUUpMTs4vzSsBCRobmZobmZhZmhoq1QIA7XQPhy8AAAA=
是base64加密
前四个b64字符为:H4sI → 1F 8B 08 这是gzip压缩的头标志(感谢GPT)
尝试一下结果正确

梳理一下整个调用链:


也是和datagram一样,从b64调用开始追

追一下这个调用函数,发现是SM3HashMac,hook一下

签名每次都在变化,大概率和时间戳有关

这里观察到入参明文:

刚好和其他参数相对应
zipCode+encryptCode+datagram+timestamp

所以每次只有时间戳变化,每一次的结果都不一样
直接就还原出来了,标准的HMacSM3签名

推荐一下比较好用的 Frida 工具:Frida-Hookers

本分析仅面向受控样本、授权测试目标或本地研究环境,目的在于理解应用实现、协议流程、加密逻辑与安全机制,不针对任何未授权真实业务系统实施攻击或滥用。

文中涉及的 Hook、解包、流量分析、协议还原、加密验证等操作,仅用于安全研究与技术验证。所有结论仅作学习记录和研究参考,不作为未授权利用指南。

{
  "access_token": "",
  "datagram": "Vs0sGlHrcqzFO6umQ2CEUKLhCCUIzMN9n3UZeGY3OHN5iOaVNOg/r1s3dx9fNK1X0Ast0GzfsG4KEFn56kh9bNfE5jph0GMNYxq5G2FEh09a8arW8RkqMRhqg0knoRUW",
  "encryptCode": "2",
  "signature": "wv22glX8Thg6M0Nj8yDSGmPJK+nqnRpcbovdHk11Wbw=",  //抓包每次都会变化
  "signtype": "HMacSM3",
  "timestamp": "20260509195242",
  "zipCode": "1"
}
  • RequestUtil.getCompressedDatagram(String) 的返回值是 gzip 后再 base64 的字符串
  • SM4Util.encryptData_ECB(String, String) 是实际命中的加密入口
  • 此处不是“纯标准 SM4 ECB PKCS5/PKCS7”
  • 实际行为是:先在明文末尾追加一个 0x00,再按剩余长度做 PKCS5/PKCS7 样式补位
  • 账号密码明文 JSON
  • RequestUtil.getCompressedDatagram(String)
  • 返回 H4sI... 字符串
  • SM4Util.encryptData_ECB(String, String)
  • 最终生成 datagram
  • 原始 JSON
  • gzip 压缩
  • base64 编码
  • 得到 H4sI... 字符串
  • 明文末尾追加 0x00
  • 再做剩余长度补位
  • SM4 ECB 加密
  • 最终输出 datagram
  • signatureSM3Util.sm3HashMac(...) 生成
  • 参与签名的明文与:zipCode + encryptCode + datagram + timestamp 对应
  • 因为 timestamp 每次变化,所以 signature 每次都会变化
  • zipCode + encryptCode + datagram + timestamp
  • 标准HMacSM3
  • timestamp 参与签名
  • 所以相同业务数据下,只要时间戳变化,signature 就会变化
  • RequestUtil.getCompressedDatagram(String) 的返回值是 gzip 后再 base64 的字符串
  • SM4Util.encryptData_ECB(String, String) 是实际命中的加密入口
  • 此处不是“纯标准 SM4 ECB PKCS5/PKCS7”
  • 实际行为是:先在明文末尾追加一个 0x00,再按剩余长度做 PKCS5/PKCS7 样式补位

  • [培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

    最后于 2026-5-12 18:43 被Mengz3编辑 ,原因:
    上传的附件:
    收藏
    免费 52
    打赏
    分享
    最新回复 (29)
    雪    币: 515
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    2
    看看
    2026-5-9 22:00
    0
    雪    币: 411
    活跃值: (101)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    3
    看看
    2026-5-10 09:39
    0
    雪    币: 59
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    4
    看看
    2026-5-10 14:02
    0
    雪    币: 1004
    活跃值: (50)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    5
    11
    2026-5-10 14:09
    0
    雪    币: 39
    活跃值: (617)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    6
    66
    2026-5-10 17:40
    0
    雪    币: 7
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    7
    感谢分享
    2026-5-10 20:29
    0
    雪    币: 3472
    活跃值: (3800)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    8
    感谢分享
    2026-5-11 10:49
    0
    雪    币: 8881
    活跃值: (5618)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    9
    看看
    2026-5-11 13:21
    0
    雪    币: 8571
    活跃值: (4706)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    10
    学习学习
    2026-5-11 14:03
    0
    雪    币: 2804
    活跃值: (3097)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    11
    1111111
    2026-5-11 14:11
    0
    雪    币: 247
    活跃值: (527)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    12
    学习
    2026-5-11 14:13
    0
    雪    币: 8
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    13
    1
    2026-5-11 15:01
    0
    雪    币: 375
    活跃值: (3917)
    能力值: ( LV3,RANK:30 )
    在线值:
    发帖
    回帖
    粉丝
    14
    我看刑
    2026-5-11 15:19
    0
    雪    币: 0
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    15
    666
    2026-5-11 17:47
    0
    雪    币: 4
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    16
    666
    2026-5-11 17:59
    0
    雪    币: 196
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    17
    999
    2026-5-12 09:22
    0
    雪    币: 196
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    18
    登录接口的逆向都不用到so层嘛?
    2026-5-12 09:30
    0
    雪    币: 6223
    活跃值: (11177)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    19
    学习了谢谢
    2026-5-12 09:39
    0
    雪    币: 57
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    20
    111
    2026-5-12 09:54
    0
    雪    币: 553
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    21
    66666
    2026-5-12 10:12
    0
    雪    币: 71
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    22
    2522
    2026-5-12 14:15
    0
    雪    币: 1120
    活跃值: (1936)
    能力值: ( LV3,RANK:30 )
    在线值:
    发帖
    回帖
    粉丝
    23
    666学习一下
    2026-5-12 14:26
    0
    雪    币: 153
    能力值: ( LV1,RANK:0 )
    在线值:
    发帖
    回帖
    粉丝
    24
    666
    2026-5-13 10:31
    0
    雪    币: 713
    活跃值: (1060)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    25
    1
    2026-5-15 12:14
    0
    游客
    登录 | 注册 方可回帖
    返回