当前位置: 首页 > news >正文

【爬虫实战】使用Python和JS逆向基于webpack的游戏平台

使用Python和JS逆向基于webpack的游戏平台

  • 网站分析
    • JS代码分析
      • 开始进行F12之路
      • 用Python Pyexejs库来动态加载js

网站分析

最近在找游戏,发现一个不错的分享平台,资源下载需要点击下载后扫二维码,进行网盘转存,如果想要20个游戏要扫20次,身为程序员怎么可能这样机械式呢.
在这里插入图片描述在这里插入图片描述

JS代码分析

开始进行F12之路

先找到button [下载] 触发的函数,全局search 下载
在这里插入图片描述
不出意外在这个js文件里面搜索到了
page-4782b9a12c0c8e4a.js
然后开始调试打断点, F5 刷新断住进行跟栈

这里可以看出这地址是加密的
Kcv3H5Y+q+P7BNEPFwrcSlRuRvA1BMnTTTlvTtsCD/7h6HUeY+VtdffUiumxo5MX
在这里插入图片描述

这是解密后的
在这里插入图片描述
来看下w.p(xx)这个是什么东西,点击看下
在这里插入图片描述
毫不意外的可以看出这里就是解密的方法了… 那就开始扣了…
在这里插入图片描述
先把加载器给扣下,然后跟栈,报缺什么方法就补什么方法,这种方式有个缺点…
你永远不知道需要补多少个函数…
我的做法是居然这个函数只有引用到,那我就整个js给扣下来
在这里插入图片描述
然后关注被调用的函数,然后随机删几个,看会不会被依赖到,如果随便删几个跑不动,就保留整个js吧,不要费时间去调了…

然后开始补环境变量

运行后会提示ReferenceError: self is not defined,这里的self只出现了这一行,只是全局性的变量。添加window = global;,并用window替换self。然后再运行,就不会有报错了。但是要记得待会再补代码的时候如果有self也要同样使用window

接下来提示TypeError: Cannot read property ‘call’ of undefined
其实也有两种方式找函数,一个是全选o()然后点击,或者全选n(xx)然后点击,两种方式都可以找到
这里我是全扣…不想去看上下文了…

在这里插入图片描述

在这里插入图片描述
ok 到这里就解密完成了 …

用Python Pyexejs库来动态加载js

import requests
import execjswith open('game.js', encoding='utf8') as f:js_code = f.read()js_compile = execjs.compile(js_code)
code = js_compile.call("decrypt", panUrl)
print(code) # https://pan.quark.cn/s/34d6802ab604

把逻辑完善就是以下的效果了
搜索3A大作的游戏都抓下来, 在用夸克网盘批量转存的工具,保存到自己的云盘就okok
结束撒花~~~~~~~~~
在这里插入图片描述

本文主要介绍了对于使用webpack打包技术的这一类网站的逆向方法和思路。当然对于逆向JS有很多种方式,根据webpack的规则来定位函数只是其中一条路,也不是非走不可。

免责声明

教育和研究用途:本文章提供的信息和示例代码仅供教育和研究用途。它们的目的是帮助读者了解爬虫技术的原理和应用。
合法合规性:请注意,网络爬虫可能会侵犯网站的服务条款或法律法规。在实际应用中,你必须确保你的爬虫活动合法、合规,并遵守所有相关法律。
责任限制:作者对于读者使用文章中提供的信息和代码所导致的任何问题或法律纠纷概不负责。读者应自行承担风险并谨慎操作。
合理使用:请在使用网络爬虫时保持谨慎和礼貌。不要对目标网站造成不必要的干扰或侵害他人利益。请在遵守法律的前提下使用爬虫技术。
变动和更新:作者保留随时更改文章内容的权利,以反映新的法规、技术和最佳实践。
资源和参考文献:本文章中的示例代码和信息可能依赖于第三方资源,作者会尽力提供相关参考文献和资源链接。作者不对这些资源的可用性或准确性负责。
协商:如果您有任何关于本文内容或责任声明的疑虑或疑问,请在使用之前与专业法律顾问协商。

http://www.lryc.cn/news/605952.html

相关文章:

  • Rust × WebAssembly 项目脚手架详解
  • Kubernetes 应用部署实战:为什么需要 Kubernetes?
  • 本土发货模式兴起,如何选择合适的海外仓系统?
  • 单张卡牌类
  • 星云能量传送特效技术详解
  • Servlet修改新增思路
  • C语言---结构体(格式、用法、嵌套、初始化)、共用体、枚举类型、typedef类型
  • 舱驾操作系统架构规划
  • 使用的IDE没有内置MCP客户端怎么办?
  • AI 类型的 IDE
  • AI IDE+AI 辅助编程-生成的大纲-一般般
  • 掩码语言模型(MLM)技术解析:理论基础、演进脉络与应用创新
  • 从循环依赖谈 Chromium 模块化设计:编译结构与最佳实践
  • 基于 Amazon Nova Sonic 和 MCP 构建语音交互 Agent
  • 开发避坑短篇(11):Oracle DATE(7)到MySQL时间类型精度冲突解决方案
  • USRP捕获手机/路由器数据传输信号波形(下)
  • 6.苹果ios逆向-过ssl证书检测-安装SSL Kill Switch 3
  • JVM字节码文件结构剖析
  • uniapp Vue3版本使用pinia存储持久化插件pinia-plugin-persistedstate对微信小程序的配置
  • 【生活篇】Ubuntu22.04安装网易云客户端
  • 计数组合学7.9( 标量积)
  • 如何使用 JavaScript 接入实时行情 API
  • esim系统科普
  • ES 工业网关:比德国更适配,比美国更易用
  • 是德科技的BenchVue和纳米软件的ATECLOUD有哪些区别?
  • node.js之Koa框架
  • 25-vue-photo-preview的使用及使用过程中的问题解决方案
  • Hive课后练习题
  • 【Leetcode】2683. 相邻值的按位异或
  • 《Java 程序设计》第 16 章 - JDBC 数据库编程