某水果网站逆向分析

     缘起:果酱视频原名为茄子视频,是早期的一种水果软件,偶然在52pojie网站上看到该app的逆向破解,但是并没有提供具体细节,应该是作者怕出问题。从作者的提示中发现该网站的VIP视频是可以破解的,于是着手进行逆向。但是app进行了加固,由于本人并没有脱壳经验,所以选择了他们的web网站进行js逆向。

本文主要涉及:JS逆向,flutter框架的web逆向,AES加解密,m3u8下载

主要加密点:请求头中D参数加密,请求体加密,返回图片加密,m3u8加密

收益:主要总结逆向的流程及思路,以及一些逆向小技巧。技巧点会以<技巧>(1)标识

  • 一、分析网络请求

首先打开F12进行网络抓包,随便找一个url点开查看,发现两处加密点,第一处位于请求头的D参数,第二处位于请求的响应数据,如下图

二、debug分析

加密本身并看不出有什么特别之处,那就直接下断点,点开=发起程序=选项卡,点第一个发起的程序下断点

b.send,猜测b为xhr对象,send为发送请求。那此时可以使用HOOK来断住xhr,当然也可以跟着调用栈进行分析,这里两种方法效果是一样的。我们进行一下hook断点<技巧>(1)

1.加密方法

(function () {

    var open = window.XMLHttpRequest.prototype.open;

    window.XMLHttpRequest.prototype.open = function (method, url,

async) {

        debugger;

        return open.apply(this, arguments);

    };

})();

将上述代码输入到控制台中,然后继续请求,发现断住的位置来到了xhr新建的地方,但是这里请求参数和请求头的加密参数早已经生成完毕。只能跟栈分析。

对于逐步代码分析来说没有什么太好的方法,但是却是最有效的方式。在debug过程中不能只是盯着需要找到的点进行debug,这样的话很快就会被框架的来回调用导致没有耐心。比如这个flutter框架,类似webpack模式,他会进行许多懒加载以及代理调用,所以在debug时会发现无论什么方法好像都会进入同一个方法然后找不到真正的源头(因为源头总是flutter的源码)。所以这里也就引出,不能依赖跟栈,要时不时终止断点来正向单步调试<技巧点>(2)。

回到这个网站本身,在寻找这个请求头中的D参数到底是从那里来时,我们在栈中发现。在调用aEy方法时参数al已经有值,那么就有看调用aEy的是谁,但是我们发现,无法继续向下跟栈,无论无何跟栈都是回到了flutter的调用中,无法找到谁真正的调用了aEy(我猜测是flutter发送xhr是只需要告诉flutter要发送什么,而不需要自己调用xhr。Flutter会自己处理后会异步发送请求)。

至此已经无法靠跟栈来获得解密方式了,尝试直接搜索url可以找到和发送有关系的代码,在这里打断点然后一步一步向下调试,

通过一步一步进行调用查看功能发现

  1. bnX()为加密方法,内部又调用了a3N
  2. 直接给出加密代码

里是AES加密方式,总的来说是先将请求的json进行一次md5加密后得到s,再把s放入json中进行一次AES加密,就可以得到密文。至此其实已经可以构造本网站的所有请求。

三、m3u8获取

此时我们可以构造本网站的所有请求。那么我们随便点开一个视频进行播放,发现他会进行一次playNew的请求获取到m3u8的地址,随后我们打开这个m3u8文件以及请求头查看一下。

我们可以发现,他没有带任何鉴权。而且m3u8文件虽然不是完整视频文件,但是我们是否可以构造后续ts文件链接来补全视频文件。经过实验确实可以,具体流程就是获取到视频完整时长,然后构造后续ts链接,将新的m3u8文件进行播放或者下载发现可行!

  • 四、总结

逆向是需要一点运气和很多耐心的工程。本次逆向其实可以算的上失败,虽然最后成功找到了加密点也做出了破解,但是基本上是靠单步调试来实现的。Flutter框架本身的xhr请求完全无法定位到本身的加密点,只能透过一点点线索来找到真正的代码逻辑。

本次逆向重点转折点是直接搜索请求链接,然后顺着请求连接正向debug找到了加密点,在这个过程中需要时刻注意加密是否完成,如果加密完成则倒回去一步一步寻找是哪个函数进行加密。

同时也要善用工具库来进行密文比对,这样可以不用看具体实现,在console中直接运行代码后进行比对,如果比对成功则直接使用即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值