当前位置 : 主页 > 编程语言 > java >

某某创意加密参数逆向分析(JS逆向第四期)

来源:互联网 收集:自由互联 发布时间:2023-02-04
光阴似箭,不知不觉本公众号已经是第四期更新了,感恩大家陪我一起走过这段日子。废话不多数,直入主题,今天带来某某创意的解密分析全过程,全程高能,欢迎大家阅读! 目录

某某创意加密参数逆向分析(JS逆向第四期)_json

    光阴似箭,不知不觉本公众号已经是第四期更新了,感恩大家陪我一起走过这段日子。废话不多数,直入主题,今天带来某某创意的解密分析全过程,全程高能,欢迎大家阅读!

 目录

① 参数分析

② 断点调试

③ 算法还原

④ 心得分享

一、参数分析

1. 首先进行场景分析:打开指定的网站,登录后访问指定的页面,为了方便大家观赏,可以直接查看下面的截图:

某某创意加密参数逆向分析(JS逆向第四期)_断点调试_02

2. 明确内容需求:这块我们想下载几首歌曲留着自己无聊的时候用来陶冶情操,那么我们就要去分析这个页面。

分析过程如下:

2.1 首先fn+12打开DevTools开发者界面,点击Network界面,按f5刷新当前界面。

2.2 然后截取网页中指定内容,打开Search工具进行文本搜索。搜索结果如下:

某某创意加密参数逆向分析(JS逆向第四期)_断点调试_03

2.3 我们发现,通过搜索指定的文本可以获取到响应json的url接口地址。

2.4 找到json连接后,用在线json工具格式化,查看里面的数据内容如下:

某某创意加密参数逆向分析(JS逆向第四期)_json_04

通过分析,我们发现songs数组中的dict数据类型即为我们想要获取的信息。

2.5 参数分析结果如下:

id:为当前素材的唯一id地址

title:为当前歌曲的歌名

poster:为图片封面

duration:为歌曲的时长(单位:秒)

singer:歌手名字

其他参数就不一一分析了,突然发现,这里面也没有歌曲的下载地址啊!

2.6 思路分析,那么这大兄弟藏哪里去了呢?传统的方式已经不能够定位到这个兄弟去哪里了。那么就要做猜测,是不是触发下载的时候,才会发送下载的url请求呢?接下来就要进行模拟操作了。

二、断点调试

1. 断点调试前,我们先进行下载触发操作,看下具体的下载结果,本次操作截图如下:

某某创意加密参数逆向分析(JS逆向第四期)_搜索_05

2. 可以看见,触发下载后,直接将歌曲下载到了本地。这个时候,赶紧查看开发者工具,是否能定位出下载的接口地址,截图如下:

某某创意加密参数逆向分析(JS逆向第四期)_搜索_06

3. 我们发现这个url即为下载歌曲的url地址,但是奇怪的是这个url是从哪里来的呢?然而并没有看到他是从哪里加载的?再分析下其他的url地址,果然有重大发现,截图如下:

request参数

某某创意加密参数逆向分析(JS逆向第四期)_搜索_07

response参数:

某某创意加密参数逆向分析(JS逆向第四期)_断点调试_08

4. 仔细分析,我们发现request请求中url地址参数的id即为前面json中的素材唯一id地址,这个时候捋一下思路,流程如下:需要发送当前请求去获取响应数据data,然后从data中解密还原出音乐的下载地址。流程确定后,我们直接打断点开干。

5. 断点调试,捕获当前XHR加载的url断点进行回溯堆栈,调试解密如下:

某某创意加密参数逆向分析(JS逆向第四期)_搜索_09

5.1 断点成功定位后,进行js调试,由于流程过于复杂,这块我只分析重要的步骤,持续更近后的断点截图如下:

某某创意加密参数逆向分析(JS逆向第四期)_json_10

查看截图,可以发现当前的i、c的变量中的data即为我们发送请求时候的参数值,分析当前js代码,可以确定当请求响应成功后,猜测会从data中去解密还原下载地址,我们继续追进js代码如下:

某某创意加密参数逆向分析(JS逆向第四期)_断点调试_11

5.2 查看上面截图,可以肯定p变量即为我们要的url地址,通过分析当前js代码,可以确定这是一个AES对称加密方式,通过ConSole打印当前页面的参数信息如下:

某某创意加密参数逆向分析(JS逆向第四期)_断点调试_12

a :为加密的data参数,s:为秘钥key,u:为iv偏移量。

可以确定加密模式为:CBC模式!通过在线工具还原加密,截图如下:

某某创意加密参数逆向分析(JS逆向第四期)_json_13

三、算法还原

# python代码还原如下class AESUtil(object): """ 算法:AES 模式:CBC 补全算法:PKCS7 """ def __init__(self, key: str, iv: str, block_size=AES.block_size): self.key = key.encode("utf-8") if (key and isinstance(key, str)) else key self.iv = iv.encode("utf-8") if (iv and isinstance(iv, str)) else iv self.mode = AES.MODE_CBC self.block_size = block_size def aes_decrypt(self, data): cipher = AES.new(self.key, self.mode, self.iv) return cipher.decrypt(b64decode(data)).decode()if __name__ == '__main__': aes = AESUtil(key="cc.oceanengine.com/material_mark", iv="material_market_") url = aes.aes_decrypt("15tb591BTABm1v5VMOHkvBRrr7+iCxuiDeZjbUFUjJPM+iakLE0ExkVooviERuMqHi9jxuVphK+tlGocCOt4LOzRGryQaC7AJ6qxIgt4ofePJIX05krqQmVUpasmyQYr") print(url) # 输出结果如下图

python打印后的结果如下:

某某创意加密参数逆向分析(JS逆向第四期)_json_14

完整流程到这里就结束了,接下来分享一些心得体会!

四、心得分享

        如果确定要做一件事情,就要放手大胆去做,不要犹豫不决。希望大家都能活成我们心中想要的模样,眼中有光,精神富足!

某某创意加密参数逆向分析(JS逆向第四期)_json_15

    我是TheWeiJun,分享工作或日常学习中关于爬虫、逆向和分析的一些思路,文中若有错误的地方,恳请大家联系我进行批评指正。

    做一个爱分享的程序员,做一个爱学习的程序员!⛽️⛽️⛽️  

某某创意加密参数逆向分析(JS逆向第四期)_断点调试_16

上一篇:Scrapy源码分析之Robots协议(第一期)
下一篇:没有了
网友评论