前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2019年末逆向复习系列之努比亚Cookie生成逆向分析

2019年末逆向复习系列之努比亚Cookie生成逆向分析

作者头像
云爬虫技术研究笔记
发布2019-11-28 23:13:04
1.3K0
发布2019-11-28 23:13:04
举报

郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关。

这篇文章是《2019年末逆向复习系列》的第二篇:《努比亚Cookie生成逆向分析

本次案例的代码都已上传到Review_Reverse上面,后面会持续更新,大家可以Fork一波。

逆向网址

努比亚-牛仔俱乐部:https://bbs.nubia.cn/

逆向背景

努比亚俱乐部的逆向有意思在它的Cookie是动态生成的,是由Js生成Cookie的案例,并且这个网站还有前端反调试的机制,对于新手爬虫工程师来说很值得学习和研究。

分析流程与逆向破解

我们以这个链接为例努比亚-牛仔俱乐部,访问并打开开发者工具,读者会发现并没有遇到什么异常情况。

等等,我们这次讲的是生成Cookie,我们首先需要把该网站的缓存、Cookie清除才行,不过我们先分析分析它们的Cookie的关键点。

看到Cookie的组成,觉得acw_sc__v2acw_sc__v3参数比较可疑,这个疑问我们先存在,之后再看看。 之后我们照例在Application->Clear Storage清除数据。

清除完之后我们依旧打开开发者工具重新刷新页面进行访问,可以发现,网站弹出debugger

知识点1:前端反调试

随着现在爬虫课程的普及,越来越多人都掌握了基本的爬虫用法,类似利用开发者工具寻找网站接口或者进行调试逆向寻找加密方法,对于网站本身来说,如何简单又有效地减缓这种行为是应该考虑的,所以一些网站在代码中注入了检测开发者工具是否打开的Js代码,这样,当我们想要打开开发者工具的时候我们就会陷入网站的无限循环的debugger地狱,而且这样还会造成Js的内存泄漏,你可以在遇到这种情况的时候检查你的chrome页面进程,会发现内存占用量越来越高,可你什么都没干?所以,对于这种反调试手段,我们需要学习如何绕过。

1. 绕过debugger地狱

我们首先查看右边的Call Stack调用栈,我们一一分析,可以追溯到如图所示的地方。

关键代码是这样的,也就是一开始会执行_0x4db1c这个函数(初步理解是上文所说的检测开发者工具是否打开的函数,之后setInterval函数是每隔一定时间执行)

代码语言:javascript
复制
_0x4db1c();setInterval(function() {_0x4db1c();}, 4000);

我们再看_0x4db1c的函数,它停在_0x355d23这个函数上面

面对这样的情况,我们可以直接在Console里面对这个函数进行重写

重写好之后我们执行下,会发现这个页面就直接生成好Cookie去访问页面了,这样达不到我们之前想研究它Cookie生成的逻辑的目的。

目前我们绕过了debugger反调试,那我们该怎么获取生成Cookie的逻辑呢?我们接着分析

2. 破解Cookie生成逻辑

为了我们分析的方便,我们可以直接把这个debugger的代码保存下来,在我们本地代码中删除debugger的逻辑之后进行调试。

我们直接打开这个html文件,我们会发现网页一直卡在Sources不动,为什么会出现这种情况?

仔细分析代码,发现有些Regexp的检测代码,根据以往的经验可能是检测代码是否长开?防止有人本地调试?我们使用压缩后的代码,大家可以用Js压缩/解压工具进行压缩

果然,压缩之后还是正常的,那么可以验证我们刚才的想法了。

我们删除debugger相关的代码,也就是

代码语言:javascript
复制
_0x4db1c();setInterval(function() {_0x4db1c();}, 4000);

打开网页后发现页面一直在闪?html代码不长,我们再仔细看看,注意到一个细节setTimeout

setTimeout是延后几秒执行一次,我们看一下’\x72\x65\x6c\x6f\x61\x64\x28\x61\x72\x67\x32\x29’是什么意思,我们把它放在Console里看看。

可以看到,setTimeout执行reload函数,我们看看reload函数

代码语言:javascript
复制
function reload(x) {            setCookie("acw_sc__v2", x);            document.location.reload();        }

里面的逻辑是先设置Cookie再重载页面,所以我们这里一直闪的原因是先执行setTimeout再重载页面又执行setTimeout,所以又是一个循环地狱,我们删除setTimeout这段代码就行。等等,我们再看看上面Console中的结果reload(arg2),然后到reload函数中,acw_sc__v2是由arg2这个函数得来的,好,我们现在明白了哪个地方生成的Cookie了,我们在html代码中搜索arg2,然后对它打上断点。

3. 分析加密算法

我们先总体看下arg2函数的构成

也就是需要_0x23a392_0x5e8b26这个两个关键参数,_0x23a392来自arg1的方法生成,它们都是有_0x55f3这同一个方法,所以我们的思路就清晰了。 我们先看看_0x55f3这个方法,并且做一些调试,可以发现_0x55f3通过传入的参数不同使用不同的方法,有些类似于控制流平坦化

知识点2:控制流平坦化

直接上图

首先_0x5e8b26这个参数我们多次调试后发现是个变量,可以先确定,"3000176000856006061501533003690027800375",当然我们也可以直接搜索_0x5e8b26

而我们获取到_0x23a392_0x5e8b26之后进行加密的方法如下

大致的加密就是如上这样,因为整体代码量也不大,可以直接改写或者使用python加载Js都行。

4. 总结思路

这次的案例主要是可以学习到两点,第一点就是我们懂得有些网站会进行前端反调试,手段之一就是会检测开发者工具是不是打开,而且如果我们把代码拿到本地,竟然还会检测本地代码是否是展开的?第二点我们需要习惯这种代码混淆的方式,有些网站会用_0xxxx等无意义的符号进行混淆,以及使用16进制来做混淆恶心我们,我们想要还原的话直接把代码放到Console里面执行一下就可以了,因为Js也能读取原始的16进制码。

代码实战

有了上面这个分析流程,我们就可以开始Coding了,以下是acw_sc__v2加密的流程。 获取arg1参数的代码

获取arg2参数的代码

测试的代码,先访问官网动态获取Cookie再在请求头的Header中加入这个acw_sc__v2参数去重载URL访问官网。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云爬虫技术研究笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 逆向网址
  • 逆向背景
  • 分析流程与逆向破解
    • 知识点1:前端反调试
      • 1. 绕过debugger地狱
        • 2. 破解Cookie生成逻辑
          • 3. 分析加密算法
            • 知识点2:控制流平坦化
          • 4. 总结思路
          • 代码实战
          相关产品与服务
          云开发 CLI 工具
          云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档