【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程

这篇具有很好参考价值的文章主要介绍了【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章

1. 写在前面

  相信很多爬虫工程师在进行Web端JS逆向的时候,面对加密参数无从下手,不知道如何进行定位与分析。本期作者将介绍一款针对Web端逆向Hook定位加密的辅助工具给大家!内存漫游确实听起来有些虚高大上、实则就是检索浏览器内存数据…

以下是该工具功能与原理的部分描述:

    • 访问目标网站时设置浏览器走自定义的代理服务器,这个代理服务器要支持能够使用代码处理请求,这里选择是anyproxy
    • 在代理服务器这里,对请求做处理,对于JavaScript响应和HTML响应里的JS代码,使用AST实时处理,注入Hook逻辑
    • Hook逻辑就是所有涉及到变量的地方都经过我们的Hook方法,所以实现页面上所有的变量值都可以捕获到,可以把这个理解为内存中变量级别的抓包监控
    • 抓到的变量会被保存到一个变量数据库中,然后当你访问页面请求时带上加密参数的请求之后,从Chrome开发者工具的网络中把那个加密参数复制出来,切换到控制台调用本工具提供的api在变量数据库中搜索一下,可以搜索到存储该字符串的变量及变量所在的代码位置,点击代码位置可以自动切换到源面板并自动定位到变量位置
    • 变量级抓包监控,根据加密参数秒秒钟定位到加密逻辑的代码位置(追加密逻辑代码位置的通杀方案)

然后打断点往前找加密逻辑抠出来就可以,如果有多个加密参数或者加密参数为多个地方拼接生成,无脑重复此步骤即可!!

按照上述项目的描述,对Web端进行JS逆向中,在我们有时候无法快速精准的定位到加密参数入口时,确实可以用以辅助

2. 环境搭建

首先,第一步我们需要下载项目到本地,安装依赖:

npm install -g anyproxy
npm install shelljs

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

缺什么根据提示安装即可,如果在这里出现npm异常,可以尝试:

npm cache clean --force
npm config set strict-ssl false
npm config set registry https://npm.aliyun.com/

接下来,需要启动两个本地服务,我们分别来看一下代码实现,proxy-server.js代码如下所示:

const AnyProxy = require("anyproxy");

const options = { 
    port: 10086,
    rule: require("./rules"),
    webInterface: {
        enable: true,
        webPort: 8002
    },  
    throttle: 10000,
    forceProxyHttps: true,
    wsIntercept: false, // 不开启websocket代理
    silent: false
};
const proxyServer = new AnyProxy.ProxyServer(options);

proxyServer.on("ready", () => { /* */ }); 
proxyServer.on("error", (e) => { /* */ }); 
proxyServer.start();

首先导入一个代理服务的包Anyproxy,这个包的话在之前已经安装好了。端口设置的是10086,这个我们是可以自行修改的,然后引用了一个rules文件,这个文件内引用的就是核心的Hook逻辑。另外Web端口是8002,可以直接访问类似mit抓包界面

另一个需要启动的api-server.js服务代码如下所示:

const express = require("express");
const bodyParser = require("body-parser");
const {injectHook} = require("../components/global-assign-hook-component/core/inject-hook");

const app = express();

app.use(bodyParser.raw({
    verify: function (req, res, buf, encoding) {
        if (buf && buf.length) {
            req.rawBody = buf.toString("UTF-8");
        }   
    }, type: function () {
        return true
    }   
}));
// 将传过来的js代码注入hook
app.post("/hook-js-code", function (request, response) {
    const jsCode = decodeURIComponent(request.body.toString());
    let newJsCode = jsCode;
    try {
        newJsCode = injectHook(jsCode);
    } catch (e) {
        console.error(e);
    }   
    response.setHeader("Content-Type", "text/plain; charset=utf-8");
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "*");
    response.send(encodeURIComponent(newJsCode));
    response.end();
})

// 以后如果能够和页面上双向通信,上报各种数据到这里,就能够实现功能更强的分析之类的

const server = app.listen(10010, function () {
    console.log("启动成功");
})

代码中同样导入了一个NodeJS的Web服务器包express,有时候我们做爬虫可能会用到它来开发接口服务

启动第一个代理服务,运行命令如下:

node src/proxy-server/proxy-server.js

运行服务可能会提示缺少根证书(CA),在AnyProxy中,为了进行HTTPS代理,需要使用根证书进行中间人攻击,解决方法我们需要运行anyproxy-ca命令来生成根证书,如下图所示:

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook
【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

记得设置Anyproxy证书信任,不然无法进行有效的Hook

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

证书信任完成后,重新启动Server服务,如下:

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

接下来进入项目api-server文件下,同样方式启动监听服务:

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

服务启动后,在浏览器中配置IP地址跟端口,这里推荐使用Chrome搭建单独的调试环境,配合使用Proxy Switchy0mega或者其它类似的插件作为代理路由辅助,配置信息如下:

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

除了以上浏览器插件配置的方式,也可在网络设置中进行配置,具体方案不限,只要能够实现流量走AnyProxy代理就可以

2. 加密定位实战

服务已经搭建完成,接下来,这里我找了一个有加密参数的网站进行测试,这是一个翻页请求中带sign签名加密参数的接口,点击更多翻页,可以看到sign的值如下所示:

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

ATS实时处理JS文件会比较慢,同时会生成一个缓存目录来存放JS文件,加载文件如下:

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

这个时候我们直接将上面截图中sign签名的值拿到控制台进行Hook搜索,如下所示:

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

可以看到在上图的控制台中,会展示很多重要的信息字段,我们重点需要知道的就是sign这个值是在什么地方生成的,可以看到e是生成后的结果,执行的方法是Xt,我们点击跳转到代码处,如下所示:
【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

这里会发现出现了很多名为cc11001100_hook的函数,可以把这个函数理解为它会直接返回第二个参数的值,对整体逻辑没有影响,分析时忽略它即可!

这里可能很多职业玩家会质疑,有的加密参数,直接使用参数名搜索或者轻量级Hook跟栈甚至是XHR跟栈那不是更加简便?没错!这个网站中的sign参数使用关键词搜索就能够定位到入口,如下所示:

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

可以看到加密方法Xt接受一个参数n,控制台打印看一下:

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

n是翻页接口请求URL所拼接的一堆参数,测试了一下Xt是一个标准的MD5加密算法:

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程,Python爬虫实战,javascript,python,抓包工具,Hook

有点讲的跑题了,本期还是回归主题说的是利用Hook工具去辅助我们JS逆向定位加密参数

最后,按照作者自己的说法本项目本身就是一个通杀工具,它并不针对某一个站。所以在爬虫Web端JS逆向分析中大家可以根据经验来选择合适的方案与工具!毕竟,一款好用的工具确实能够让JS逆向变得更加简单

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章文章来源地址https://www.toymoban.com/news/detail-836250.html

到了这里,关于【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爬虫&搜索引擎&浏览器

    搜索引擎和浏览器是两个不同的概念,它们在互联网使用过程中扮演着不同的角色。 浏览器 是一种用来访问互联网并查看网页的软件应用程序。用户通过浏览器可以输入网址、点击链接、搜索信息、观看视频等。常见的浏览器包括 Chrome、Safari、Firefox、Edge 等。浏览器充当了

    2024年02月04日
    浏览(58)
  • 爬虫进阶之selenium模拟浏览器

    Selenium是一个用于自动化浏览器操作的工具,通常用于Web应用测试。然而,它也可以用作爬虫,通过模拟用户在浏览器中的操作来提取网页数据。以下是有关Selenium爬虫的一些基本介绍: 浏览器自动化: Selenium允许你通过编程方式控制浏览器的行为,包括打开网页、点击按钮

    2024年01月20日
    浏览(69)
  • python爬虫之selenium库,浏览器访问搜索页面并提取信息,及隐藏浏览器运行

    如果链接简单,爬虫可以通过链接用requests库提取页面信息,如爬取豆瓣top250影片信息,链接简单易懂。参考:爬取豆瓣top250影片信息 但如果遇到一些搜索之类的,基于js动态加载的网页,以上就不适合,如爬虫b站,搜索“爬虫”页面,第一页链接如下,第二页又是很长没规

    2024年01月23日
    浏览(110)
  • Python爬虫(2)-Selenium控制浏览器

    Selenium中提供了不少的方法来操作浏览器 使用driver.get(‘网址’)的方式来打开浏览器 driver.refresh() 浏览器切换标签的方法就是, driver.current_window_handle 用selenium点击新打开了一个网页,需要告知selenium目前这个窗口是新的窗口,那么它才能早新的页面进行操作不然的话就无法操

    2024年02月08日
    浏览(56)
  • python爬虫之selenium模拟浏览器

    之前在异步加载(AJAX)网页爬虫的时候提到过,爬取这种ajax技术的网页有两种办法:一种就是通过浏览器审查元素找到包含所需信息网页的真实地址,另一种就是通过selenium模拟浏览器的方法[1]。当时爬的是豆瓣,比较容易分析出所需信息的真实地址,不过一般大点的网站像

    2024年02月03日
    浏览(62)
  • Python 和 Selenium 的浏览器爬虫

    Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操作,方便各种 Web 应用的自动化测试。 它的取名很有意思,因为当时最流行的一款自动化测试工具叫做 QTP,是由 Mercur

    2024年02月08日
    浏览(62)
  • Windows使用selenium操作浏览器爬虫

    以前的大部分程序都是操作Chrome,很少有操作Edge,现在以Edge为例。 Selenium本身是无法直接控制浏览器的,不同的浏览器需要不同的驱动程序,Google Chrome需要安装ChromeDriver、Edge需要安装Microsoft Edge WebDriver,其他浏览器也需要安装相应的驱动。 edge://version/ https://developer.micros

    2024年02月04日
    浏览(58)
  • 【python爬虫】设计自己的爬虫 4. 封装模拟浏览器 Selenium

    有些自动化工具可以获取浏览器当前呈现的页面的源代码,可以通过这种方式来进行爬取 一般常用的的有Selenium, playwright, pyppeteer,考虑到他们的使用有许多相同之处,因此考虑把他们封装到一套api中 先看基类 Selenium是一个自动化测试工具,利用它可以驱动浏览器完成特定

    2024年02月03日
    浏览(63)
  • python使用selenium控制浏览器进行爬虫

    这里以谷歌浏览器为例,需要安装一下chromedriver,其他浏览器也有相对应的driver,chromedriver下载地址:https://googlechromelabs.github.io/chrome-for-testing/ 然后是打开python环境安装一下依赖 pip install selenium ,验证一下控制浏览器是否成功 点击运行脚本可以看到以下页面就成功了。 爬虫

    2024年02月04日
    浏览(67)
  • 【python爬虫】10.指挥浏览器自动工作(selenium)

    上一关,我们认识了cookies和session。 分别学习了它们的用法,以及区别。 还做了一个项目:带着小饼干登录,然后在博客中发表评论。 除了上一关所讲的登录问题,在爬虫过程中,我们还可能会遇到各种各样棘手的问题—— 有的网站登录很复杂,验证码难以破解,比如大名

    2024年02月10日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包