JS逆向 - 某乎搜索接口x-zse-96参数分析

文章旨在学习和记录,若有侵权,请联系删除


前言

目标网址:aHR0cHM6Ly93d3cuemhpaHUuY29tL2FwaS92NC9zZWFyY2hfdjM/dD1nZW5lcmFsJnE9JUU3JTlGJUE1JUU0JUI5JThFJmNvcnJlY3Rpb249MSZvZmZzZXQ9MCZsaW1pdD0yMCZmaWx0ZXJfZmllbGRzPSZsY19pZHg9MCZzaG93X2FsbF90b3BpY3M9MCZzZWFyY2hfc291cmNlPU5vcm1hbA==

目标参数:x-zse-96


一、抓包

在页面点击搜索键寻找接口,确定目标参数。在这里插入图片描述

二、逆向

1. 定位js

全局搜索中搜索 x-zse-96,很舒服只在一个文件 main.app.xxx里面;
点进去,继续搜索x-zse-96,会搜到两个地方,下图为目标处。
在这里插入图片描述

2. 跟堆栈

我们发现 x-zse-96 是由 “2.0_” 和 y 拼接而成的,而y其实就是 signature,signature 等于 u()(f()(s)) ,我们在sigsignature处打上断点,刷新网页。
在这里插入图片描述
怎么理解u()(f()(s)) 呢?
其实我们可以将 u()(f()(s)) 拆开来看,方法u() 传入了 方法f() ,然后f() 传入了参数s。

我们从最里面往外看,先看参数s是什么:
在这里插入图片描述
如上图所见,参数s 是用 + 拼接的 固定值 和 接口url后缀 和 服务器返回的同名cookie。我们可以在调试工具里找到该cookie:
在这里插入图片描述
接着我们来看 方法f(),先看下调用结果,是熟悉的32位小写字符串,不禁怀疑方法f() 是hash的md5或sha1,那我们来校验下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这边使用了猿人学的工具网站进行了md5检验,发现和网站输出的结果一模一样,所以方法f() 其实就是md5,那我们就可以通过python的hashlib在请求前构造字符串。(也可以直接扣出f())

然后就剩方法u() 了,选中u() 点进去看,直接定位到的是函数b;我们可以看到与 b同级的方法函数都是逗号分隔开的,意味着这些个代码块是在一个大的对象内,可以直接往上找到对象的开头处扣下来。
在这里插入图片描述
这个对象的头部是一个function,我们只要将这整个function扣下来,再做一些处理就能够模拟出加密的结果啦。
在这里插入图片描述

3. 扣代码

扣下来的代码骨骼长这样,小小改动下,
给函数起名为wzj,传入形参data(其实传入的实参数就是前面加密的md5)。
函数尾部返回 b函数调用参数data。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2a55c4a325df4d9a9e6a04f17259ca1b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATWF4Vy0=,size_20,color_FFFFFF,t_70,g_se,x_16
传入上面加密得出的md5值,浏览器环境运行结果如下:
参数:848951efd31705cb9bcbd5251310516a
输出:aXNqr4u0r02xcTYqyhS8nqU8FCFxoX20yBOBr49y6_FX
在这里插入图片描述
看下网站的调用情况:
在这里插入图片描述
结果一致,加密算法部分成功扣出,剩下的就是补环境了。

4. 补环境

我们首先运行一下前面扣出来的代码,看看是否能成功调用。
控制台报了__g._encrypt不是一个方法函数,我们有理由怀疑代码检测了我们的环境,从而不给这个方法定义。
在这里插入图片描述
那我们先补上环境看看,这次补环境我来介绍下神器 jsdom。
我们先node安装一下 jsdom,如果没安装node可以自行教程安装,菜鸟教程这有非常详细的安装配置使用指南:https://www.runoob.com/nodejs/nodejs-install-setup.html
安装好node后直接 npm install jsdom ,出现下图样式即为安装成功:
在这里插入图片描述
然后我们将下面这段代码贴到扣出来的代码顶部

const { JSDOM } = require('jsdom');
const jsDomIntance = new JSDOM(`
    <!DOCTYPE html>
    <body>
    <p id="root"></p>
    </body>
`)
const window = jsDomIntance.window;
const document = jsDomIntance.document;

运行后上面 __g 的报错没有了,然后出现了个新的报错 atob is not defined 。
在这里插入图片描述
atob 是 BOM(浏览器对象模型)里面的方法,所以node环境和DOM里面是没有的,我们需要自己实现一个。

if (typeof btoa === 'undefined') {
    btoa = function (str) {
    return new Buffer.from(str).toString('base64');
  };
}

if (typeof atob === 'undefined') {
    atob = function (b64Encoded) {
    return new Buffer.from(b64Encoded, 'base64').toString('binary');
  };
}

继续补到头部,然后运行。
在这里插入图片描述
和网站调用出来的一模一样,可以直接拿来用了。

总结

1.某乎的加密算法还算比较好扣,补环境这块介绍了神器 jsdom的基础用法,补起来十分的省心,但 jsdom不是万能的,有些大厂的加密算法是能够检测到 jsdom的,需要多加注意。
2.还有一个小坑就是模拟的 atob Base64方法中,某乎的加密需要将结果转为binary(上面已经实现)否则还是会报__g 未定义的错误。
3.最后一点是在模拟发送请求时,加密x-zse-96使用d_c0需要和cookie中的保持一致,否则不给返回数据。

码字不易,希望大佬们看完点个小赞哈~~~

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
知乎是一个知识分享平台,也是一个社交问答的平台。在知乎上,用户可以提出问题,也可以回答其他用户的问题,共同交流和分享知识。而x-zse-96是一个用户在知乎上的用户名,代表了这个用户在知乎上的个人身份。 知乎为用户提供了一个广阔的知识世界,用户可以在这里找到各种各样的问题和答案,涵盖了生活、科技、文化、艺术等各个领域。在知乎上,用户可以向其他人请教问题,也可以分享自己的知识和经验,进行知识的交流和探讨。通过回答他人的问题,用户可以向其他人展示自己的专业知识和见解,也可以通过其他人的回答来扩展自己的知识面。 而x-zse-96作为一个知乎用户,在知乎上也可以发挥自己的作用。用户可以根据自己的兴趣和专业领域,回答其他用户的问题,分享自己的知识和经验。通过在知乎上的互动,用户可以结识到志同道合的人,参与到各种讨论和话题中。 知乎作为一个知识分享平台,追求高质量的内容和专业的讨论。在知乎上,用户可以查找到各种有深度的问题和答案,扩展自己的知识和视野。同时,用户也可以通过关注感兴趣的话题和用户,得到最新的信息和讨论。知乎致力于打造一个开放、包容、有质量的知识社区,为用户提供一个学习和成长的平台。对于x-zse-96这个用户来说,知乎是他分享和获取知识的地方,也是他展示自己的才华和见解的舞台。通过知乎,他可以与全世界的用户进行交流和互动,共同探索和传播知识的力量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追风暴的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值