光阴似箭,不知不觉本公众号已经是第四期更新了,感恩大家陪我一起走过这段日子。废话不多数,直入主题,今天带来某某创意的解密分析全过程,全程高能,欢迎大家阅读!
目录
① 参数分析
② 断点调试
③ 算法还原
④ 心得分享
一、参数分析
1. 首先进行场景分析:打开指定的网站,登录后访问指定的页面,为了方便大家观赏,可以直接查看下面的截图:
2. 明确内容需求:这块我们想下载几首歌曲留着自己无聊的时候用来陶冶情操,那么我们就要去分析这个页面。
分析过程如下:
2.1 首先fn+12打开DevTools开发者界面,点击Network界面,按f5刷新当前界面。
2.2 然后截取网页中指定内容,打开Search工具进行文本搜索。搜索结果如下:
2.3 我们发现,通过搜索指定的文本可以获取到响应json的url接口地址。
2.4 找到json连接后,用在线json工具格式化,查看里面的数据内容如下:
通过分析,我们发现songs数组中的dict数据类型即为我们想要获取的信息。
2.5 参数分析结果如下:
id:为当前素材的唯一id地址
title:为当前歌曲的歌名
poster:为图片封面
duration:为歌曲的时长(单位:秒)
singer:歌手名字
其他参数就不一一分析了,突然发现,这里面也没有歌曲的下载地址啊!
2.6 思路分析,那么这大兄弟藏哪里去了呢?传统的方式已经不能够定位到这个兄弟去哪里了。那么就要做猜测,是不是触发下载的时候,才会发送下载的url请求呢?接下来就要进行模拟操作了。
二、断点调试
1. 断点调试前,我们先进行下载触发操作,看下具体的下载结果,本次操作截图如下:
2. 可以看见,触发下载后,直接将歌曲下载到了本地。这个时候,赶紧查看开发者工具,是否能定位出下载的接口地址,截图如下:
3. 我们发现这个url即为下载歌曲的url地址,但是奇怪的是这个url是从哪里来的呢?然而并没有看到他是从哪里加载的?再分析下其他的url地址,果然有重大发现,截图如下:
request参数:
response参数:
4. 仔细分析,我们发现request请求中url地址参数的id即为前面json中的素材唯一id地址,这个时候捋一下思路,流程如下:需要发送当前请求去获取响应数据data,然后从data中解密还原出音乐的下载地址。流程确定后,我们直接打断点开干。
5. 断点调试,捕获当前XHR加载的url断点进行回溯堆栈,调试解密如下:
5.1 断点成功定位后,进行js调试,由于流程过于复杂,这块我只分析重要的步骤,持续更近后的断点截图如下:
查看截图,可以发现当前的i、c的变量中的data即为我们发送请求时候的参数值,分析当前js代码,可以确定当请求响应成功后,猜测会从data中去解密还原下载地址,我们继续追进js代码如下:
5.2 查看上面截图,可以肯定p变量即为我们要的url地址,通过分析当前js代码,可以确定这是一个AES对称加密方式,通过ConSole打印当前页面的参数信息如下:
a :为加密的data参数,s:为秘钥key,u:为iv偏移量。
可以确定加密模式为:CBC模式!通过在线工具还原加密,截图如下:
三、算法还原
# 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打印后的结果如下:
完整流程到这里就结束了,接下来分享一些心得体会!
四、心得分享
如果确定要做一件事情,就要放手大胆去做,不要犹豫不决。希望大家都能活成我们心中想要的模样,眼中有光,精神富足!
我是TheWeiJun,分享工作或日常学习中关于爬虫、逆向和分析的一些思路,文中若有错误的地方,恳请大家联系我进行批评指正。
做一个爱分享的程序员,做一个爱学习的程序员!⛽️⛽️⛽️