某图网站新版加密分析

文章介绍了某图网站最新版图片链接加密的获取和解密过程,包括图片链接现在由Ajax请求,通过JS解密得到。作者详细讲述了如何找到并复现解密代码,涉及到AES和MD5加密算法,以及Python实现的解密函数。同时,提到网站的App使用SSL证书双向验证和数据加固,增加了分析难度。
摘要由CSDN通过智能技术生成

某图网站新版加密分析

1. 前言


网站:aHR0cHMlM0EvL21tenp0dC5jb20

关于该网站的js加密方式,我在之前分享过。最近发现网站图片链接的获取方式又有所改变,于是再次分析图片的获取方法。

2. 解密过程


网站有无限debugger,可以选择本地替换或者js注入。

2.1 图片链接来源


在之前的分析中,我们找出图片链接的来源是在当前界面的源代码中(comment中),现在网站改变了获取方式,通过开发者工具可以发现,链接实际来源改由ajax获取。 ajax 从上面的请求中可以得知,网站通过当前界面的id请求加密的图片链接资源,推测网站接下来将会通过js解密得到图片链接。在这里需要注意,网站在获取到data后会储存,因此可能会出现刷新后获取不到数据包的情况。 alt

2.2 寻找解密代码


经过打断点、查看堆栈后,发现数据解密入口函数 alt 可以看到,_0x1ecabc函数获取两个参数:id和data,通过解密后得到一个包含图片链接关键信息的列表,由于web端的限制,该列表只有20条数据。接下来,我们进入这个函数分析。 alt 发现实际上是这个函数,我们把它扣下来,放入vscode中运行试试。 alt 提示_0x1708未定义,在源代码中搜索 alt alt 找到这个函数后同样扣下来,再次运行,发现又缺少_0x32ea这个函数,再去源代码中找 alt alt 将_0x32ea扣下来,并将代码进行一定优化后再次运行,可以看到已经不缺其他的自定义方法了。

2.3 代码优化


接下来对代码进行优化并复现解密方法。 alt 在简化代码的过程中,可以发现这个地方非常奇怪,尤其是在后面的代码优化中更是如此,于是中途试运行代码打印出运行中使用到的变量,发现完全不符合预期。经过一段时间的寻找,终于发现原来在开头的地方对fun1中的字符串列表的顺序进行了改变,但是我们不必关心它的方法,只需要在最后把正确顺序的列表抓出来即可 alt

得到正确的列表后再次对代码进行优化。 代码的大致思路是:在fun1中存了一个字符串列表,fun2中使用一个参数,将它减去一个值后作为索引取到fun1中的字符串,而在最终的fun3中则大量使用了其中的字符串,此外代码中有大量的16进制数字和字符串,看起来十分混乱,简化后的最终代码,只需要最后一个函数即可。

3. 解密方法复现


现在我们使用python代码复现数据的解密方法,此处我选择使用chatgpt将上面的最终代码改写为python代码,以下是chatgpt给我的并经过我优化改写后的代码。

from Crypto.Cipher import AES
from Crypto.Hash import MD5
from Crypto.Util.Padding import unpad
import base64
import json
from loguru import logger


def decrypt(pid: int, data: str) ->str :
    rel_data = data.split('固定字符')[1]
    iv = ''
    for i in range(2, 18):
        iv += str(pid % i % 9)
    logger.info(f'IV:{iv}')

    data_bytes = bytes.fromhex(rel_data)
    data_base = base64.b64encode(data_bytes).decode()
    key = MD5.new((str(pid) + '固定字符' + iv).encode()).hexdigest()[8:24]
    logger.info(f'Key:{key}')
    result = AES.new(key.encode(), AES.MODE_CBC, iv=iv.encode()).decrypt(base64.b64decode(data_base))
    return json.loads(unpad(result, AES.block_size).decode())

通过以上代码即可成功解密ajax传回的data数据。

4. 总结

总体而言,这个网站的加密不算复杂,要说麻烦主要来源于大量的16进制数据与混淆的变量和方法名,细心一点还是比较容易。

完整的文件代码:https://lanzout.com/idLC10qj7rdi

分享:经过分析,这个网站的app确实使用了ssl证书双向验证,使用r0ysue的项目r0capture可以导出p12证书,将证书导入charles中可以实现对app的抓包,不过返回的依然是加密数据。此外,app使用了数据加固,并能够检测模拟器和xposed,难以分析。

本文由 mdnice 多平台发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值