某应用市场下载链接JS混淆与MD5加盐分析

embedded/2024/10/19 5:28:46/

文章目录

  • 1. 写在前面
  • 1. 接口分析
  • 2. 断点分析
  • 3. 算法还原

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

1. 写在前面

  近期在做野生小应用市场APP下载的时候,发现有几个小市场的APK下载链接是做了一点点反爬虫措施的。链接加了一个动态的参数Key,使用的MD5加密加了一串自定义的盐,然后整个JS的代码又都是经过混淆的(有点多此一举)。难度算是入门级别的,适合学习爬虫技术或者刚刚入门JS逆向的小伙伴当作一个学习的案例来实践

案例站点

d3d3LjIyNjUuY29t

1. 接口分析

  打开APP应用的详情页面,点击下载地址进行下载触发!可以到看到完整的下载链接是第三方的,这种在小市场中很常见。一般自己不会存储太多的资源有的直接跳转到其他的主站去进行下载或者拿其他三放站点的下载链接丢给你

主要分析的就是key,初看就知道是一个MD5的加密,所以我们需要去找到参与MD5的数据是什么!逆向分析中分析的就是加密值在未完成加密的中间过程跟使用算法然后进行还原以此来达到逆向的目的

在这里插入图片描述

2. 断点分析

这里我们可以先全局搜索一下,可以看到有混淆的JS的,而且到的特征很明显,如下所示:

在这里插入图片描述

点击跳转到具体的JS文件中,先不急着去下断点。可以先静态分析一下代码,有时候下断的技巧是很重要的,往下可以看到疑似key的调用生成位置,如下所示:

在这里插入图片描述

_0x12282d大概率是time参数的时间戳获取,_0x34bab9大概率则是key参数的值,我们可以在这个位置下断刷新来验证一下这个猜测,如下所示:

在这里插入图片描述

证明猜测是对的,那么接下来就只需要跟进去看看参与MD5加密的内容是什么,这样我们就可以直接对算法进行还原。这里我们看下面的这一行代码,如下:

javascript">_m0s8a2d5(_0x1c8150 + atob(_0x22def0()) + _0x12282d);

其中_m0s8a2d5是加密方法,然后里面三个拼接的就是加密的内容,这里我们可以直接在控制台中输出看看是什么,如下所示:

在这里插入图片描述

_0x1c8150: 下载链接中的Path
atob(_0x22def0()): 这里使用了atob进行了一个解码操作到了最终的盐值abc…
_0x12282d: 这个的话就是时间戳

在这里插入图片描述

盐值也是在JS中的数组中固定的,这里也是看到了通过下标获取到一串b64编码的字符串

在这里插入图片描述
在这里插入图片描述

3. 算法还原

经过上述的分析,我们知道了最终的加密逻辑。 这里我们只需要使用几行代码就可以解决这个key参数的加密,代码如下所示:

python"># -*- coding: utf-8 -*-
import hashlibdownloader_link = response.xpath("substring-before(substring-after(//script[contains(.,'Address')]/text(),'Address:\"'),'\",TypeID')").get()         
times = int(time.time())
encrypt_info = downloader_link + f'abcxyzopq{times}'
md5 = hashlib.md5()
md5.update(encrypt_info.encode('utf-8'))
data["file_download_url"] = "http://a1.xzfile.com" + downloader_link + f'?time={times}&key={md5.hexdigest()}'

最终我们运行一下完整的Scrapy爬虫项目,可以看到数据的抓取情况以及完整的APK下载链接,我们可以使用下载工具进行下载来验证链接是否可用,如下所示:

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/embedded/120082.html

相关文章

现代前端框架实战指南:React、Vue.js、Angular核心概念与应用

随着互联网技术的发展,前端开发变得越来越复杂。 为了应对这些挑战,前端框架应运而生,它们提供了丰富的功能和工具,帮助开发者更高效地构建 和维护大型前端应用。前端框架是现代Web开发中不可或缺的一部分,它们提供了…

【ESP 保姆级教程】小课设篇 —— 案例:20240504_基于阿里云人脸识别api的py和esp32cam视频小程序

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2024-09-30 ❤️❤️ 本篇更新记录 2023-09-30 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…

凌晨1点开播!Meta Connect 2024开发者大会,聚焦Llama新场景和AR眼镜

作者:十九 编辑:李宝珠 北京时间 9 月 26 日凌晨 1 点,Meta Connect 2024 开发者大会即将举行,马克扎克伯格将聚焦 AI 和元宇宙,向大家分享 Llama 模型的更多潜在应用,并介绍 Meta 最新产品 AR 眼镜和 Meta…

react 函数组件

首先,明确一下,react在16.8之前,一直都是无状态组件。如果有人告诉你其在react16.8前使用函数组件进行状态管理,那他大概率是在胡扯 函数组件的定义 函数组件的定义是用函数定义,相对于类组件,函数组件更加…

游戏怎么录制?王者荣耀游戏录制指南:iOS与电脑端全面教程

在王者荣耀的战场上,每一个五杀、每一次极限逃生都可能成为你游戏生涯中的高光时刻。但这些瞬间往往转瞬即逝,如何将它们永久保存,成为你游戏历程中不可磨灭的印记呢?本文将为你揭晓答案。无论你是手持iPhone的iOS用户&#xff0c…

golang雪花算法实现64位的ID

推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…

en造数据结构与算法C# 之 二叉排序树的增/查

前篇:en造数据结构与算法C# 二叉排序树 泛型类的基本构成-CSDN博客 了解了基本结构以后就可以为其编写增加代码了 注意在二叉排序树类中定义了一个根节点 AddNode(添加节点)方法分析 输入: 一个添加节点的位置(默认为…

K8S配置管理中心Configmap实现微服务配置

文章目录 一、什么是Configmap?二、Configmap能解决哪些问题?三、Configmap应用场景四、Configmap局限性五、Configmap创建方法(1) 使用kubectl create configmap命令创建(2) 基于文件创建(3) 基于环境变量文件创建(4) 使用YAML文件定义并创建 六、Confi…