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

举报
lateautumn4lin 发表于 2019/11/27 00:57:59 2019/11/27
【摘要】 本篇文章是2019年末逆向复习系列的第二篇:《努比亚Cookie生成逆向分析》

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

这篇文章是《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函数是每隔一定时间执行)

_0x4db1c();setInterval(function() {_0x4db1c();}, 4000);

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

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

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

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

2. 破解Cookie生成逻辑

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

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

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

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

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

_0x4db1c();setInterval(function() {_0x4db1c();}, 4000);

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

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

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

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访问官网。

复习要点

从这个复习的案例我们可以总结下思路:

  1. 如何绕过前端反调试?

  2. 别害怕混淆的代码,代码虽然混淆,但是逻辑还是一样的。


号主介绍


多年反爬虫破解经验,AKA“逆向小学生”,沉迷数据分析和黑客增长不能自拔,虚名有CSDN博客专家和华为云享专家。

私藏资料


呕心沥血从浩瀚的资料中整理了独家的“私藏资料”,公众号内回复“私藏资料”即可领取爬虫高级逆向教学视频以及多平台的中文数据集

小学生都推荐的好文

Python2寿命只剩一个月啦!还不快赶紧学起Python3酷炫到爆的新特性!
搜狗微信下线了怎么获取公众号文章?最新方式手把手教你
万物皆可Hook!重新捡起Hook神器-Xposed框架
下一代容器架构已出,Docker何去何处?看看这里的6问6答!!
日志太多怎么搞?一套爬虫监控系统全搞定!

strip


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。