JS逆向实战案例

admin 2023年5月28日11:43:59评论58 views字数 995阅读3分19秒阅读模式

案例一:某平台数据加密

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

JS逆向实战案例

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

JS逆向实战案例

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

JS逆向实战案例

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

JS逆向实战案例

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

JS逆向实战案例

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

JS逆向实战案例

查看第一次解密后的数据

JS逆向实战案例

调用cs方法获取真实数据

JS逆向实战案例

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

JS逆向实战案例

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

JS逆向实战案例

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

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

JS逆向实战案例

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

JS逆向实战案例

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

JS逆向实战案例

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

JS逆向实战案例

设置为false即可

JS逆向实战案例

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

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

JS逆向实战案例

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

JS逆向实战案例

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

JS逆向实战案例

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

JS逆向实战案例

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

JS逆向实战案例

本文作者:白Einzz, 转自FreeBuf.COM
JS逆向实战案例

原文始发于微信公众号(乌雲安全):JS逆向实战案例

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月28日11:43:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JS逆向实战案例https://cn-sec.com/archives/1768694.html

发表评论

匿名网友 填写信息