内容仅供参考学习
目标
网址:https://www.chanmama.com/promotionDetail/0IHXaJ1y7lRNaZyiTsKa6vHtvaZDe6zy/live
直播记录接口返回值加密
分析
-
打开调试工具,先截获一个请求:
-
进入Initiator
-
一般情况通过这边进入函数中挨着找解密位置
-
我们这边用二般方法:搜索
-
遇到解密我们一般可以直接搜索decrypt,加密的话就是encrypt了
-
点击第一个
app.xxxx.js
-
打上断点后,重新触发一次请求
-
此时只能看到
e
为返回的加密值,我们在return最末那边打上个断点,看看中间操作是否为解密
-
到了这里我们就可以知道我们找的地方是正确的了
剥离 JS 加密代码
-
由于这是个webpack格式,所以第一步寻找分发器,这个就不过多介绍了
-
找到分发器位置后,开始寻找
_
这个对象在哪里生成或者说被赋值的, 下面的x
也在这边:
-
后面就是把分发器自执行函数整个扣下来:
(function(t) { 省略 var m = u; c.push([0, "chunk-vendors"]), n() } )({字典内容先不抠过来})
- 然后定义一个全局变量,给它赋值分发器外层的函数,这样我们后面可以通过全局变量来调用我们需要的方法
- 后面我们在分发器那边
console.log
一下,看看缺哪些东西,然后补在我们之前空着的字典里就行了就行了
- 最终模拟解密就行了
function decrypt(e){
return App = app("3452"),
Decrypt = app("acff"),
n = App.enc.Utf8.parse("cmmgfgehahweuuii"),
a = App.AES.decrypt(e, n, {
mode: App.mode.ECB,
padding: App.pad.Pkcs7,
}),
i = O(a),
r = Decrypt.ungzip(i, {
to: "string"
}),
r
}
欢迎朋友们V一起交流: zcxl7_7