0
点赞
收藏
分享

微信扫一扫

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

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




 目录



① 参数分析

② 断点调试

③ 算法还原

④ 心得分享



一、参数分析


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逆向第四期)_json_09


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

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



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

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



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

某某创意加密参数逆向分析(JS逆向第四期)_json_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逆向第四期)_断点调试_14



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



四、心得分享


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


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

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


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

举报

相关推荐

0 条评论