freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Js逆向实战案例
2023-02-28 18:19:00
所属地 广东省



案例一:某平台数据加密

测试时抓包发现数据包的请求包和返回包内容都进行了加密,且请求包内容形如:abchtrne/rerhn34rhnfe,而返回包内容则为{"data":"reene43jygrnd534htrfdre"},由此可见该站请求包和返回包内容的加密方式不相同

1677508806_63fcc0c63128ac9452051.png!small?1677508807349

点击调试器,选中要查看的js文件,点击下方的{}使代码更容易查看

1677508828_63fcc0dc334a7ed7e70f8.png!small?1677508829056

寻找加解密关键点,在encryption文件夹下的js文件可以看到该项目很有可能使用的是国密加密算法SM3,SM4

1677508886_63fcc1168cbb8ebdf3c67.png!small?1677508887134

在app.js中搜索关键词sm3,sm4,encryptData等关键词,找到加解密方法,以下os和rs方法为请求包加密方法,而cs和ls则为返回包解密函数。由于从数据包中看到的请求体数据和返回包数据的格式分别为字符和json数据。os方法加密后的数据为json格式,因此请求包加密方式为先使用SM4的CBC模式加密,然后使用ECB模式进行加密,最后使用SM3对json数据加密。

1677508914_63fcc132b896cfd1b1602.png!small?1677508915728

由于返回包json数据中并没有iv,但是存在data参数,因此返回包的解密方式为先使用ls方法再使用cs方法

1677508939_63fcc14bca418a1603aff.png!small?1677508940557

使用控制台先调用ls方法第一次解密返回包内容

1677508957_63fcc15d9b9d93ca30fb0.png!small?1677508958453

查看第一次解密后的数据

1677508976_63fcc170c264aebf19278.png!small?1677508977632

调用cs方法获取真实数据

1677508995_63fcc183b517e9448820b.png!small?1677508996290

在控制台中debuge调试,t字段中包含加密前的数据

1677510422_63fcc7160f9633473dcb9.png!small?1677510423836

在控制台中修改t中的数据即可在加密前修改请求包内容

1677509040_63fcc1b08ed44bf7f9c7a.png!small?1677509041132

案例二:某平台数据加密+签名

某平台登记完基础信息后点击提交信息查看数据包可以看到数据均被加密

1677509783_63fcc497d9c38a01abaaa.png!small?1677509784838

同时该功能点存在反调试相关代码

1677509803_63fcc4ab5cfebd701d33f.png!small?1677509804203

当右键点击检查时网页自动进入调试状态

1677509822_63fcc4bed4ae9b8ddaace.png!small?1677509823395

在debugger处下断点选择修改断点

1677509838_63fcc4ce3ed898e3ebdd9.png!small?1677509839119

设置为false即可

1677509853_63fcc4dd819d27da890ed.png!small?1677509854028

请求包和返回包中均存在三个参数,x、x1、sign

查看js代码寻找加密逻辑其中x1疑似aes加密,直接搜索关键词定位到关键代码代码逻辑大致如下(代码经过简化)

1677509868_63fcc4ec056d16a38d8c5.png!small?1677509868930

通过查看代码知道x为AES加密后的json数据,x1是经过RSA加密后的AES密钥,sign则是某种签名,且AES加密的密钥为动态密钥。继续查看RSA加密方法,key_1就是RSA加密的私钥

1677509880_63fcc4f8d4e7863a72e4a.png!small?1677509881631

既然知道了RSA私钥,且数据包中存在x1参数,那些直接使用RSA私钥解密X1参数获取AES加密的密钥

1677509900_63fcc50c148f11bcd5227.png!small?1677509900883

然后再用获取的AES密钥解密X内容获取真实请求数据

1677509930_63fcc52ab8c065b9a317b.png!small?1677509931580

而签名可以直接通过调用js的sign()去计算

1677509946_63fcc53a12eb3d69c8c73.png!small?1677509947012

# web安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录