python爬虫:小程序逆向实战教程

news2025/4/6 10:32:34

根据我之前发表的文章,我们进行延伸实战https://blog.csdn.net/weixin_64809364/article/details/146981598?spm=1001.2014.3001.5501

1. 想要爬取什么小程序,我们进行搜索

 2. 找到我们vx小程序的文件地址,我们就可以进行破解

  • 破解步骤强看一下上一篇文章:开头的网址
  • 下面图片就是我们破解成功的图片

3.  使用微信开发者工具打开我们的破解之后的小程序(根据下面的图片勾选配置,不然会影响你的账号)

 

 4. 如果控制台没有报错或者左侧直接可以加载出来,我们小程序的界面,这时候我们的前期工作就已经完毕,接下来就是js请求加密、解密,获取批量数据(注意:不要干扰小程序的正常运行,违法行为)

 5. 我们先进行响应解密

  •  通过输出,我们可以看出来需要响应解密(我们先进行入口定位):这里我们采用关键字搜索decrypt(

  •  通过关键字搜索,我们找到了,响应解密入口,看到iv,我们就可以猜到它使用了AES加密算法,我们就可以使用AES进行解密
  • 将图片中的代码复制粘贴,放到pycahrm中进行调试,并且再python中获得加密值,我们进行测试,最终效果如下:

const CryptoJS = require("crypto-js")

function i(e, n) {
    var r = "WAG0JIUGYALACVJF"
        , i = CryptoJS.enc.Utf8.parse(r) // key
        , t = CryptoJS.enc.Utf8.parse(n); // iv
    return CryptoJS.AES.decrypt(e, i, {
        iv: t,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8)
}

// 响应解密测试
e = "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"
n = "HVK6TCJKWBLYFT2T"

  •  然后我们使用python的第三方模块,使用python调用js代码
  • 安装第三方模块:pip install execjs
  • 我们在使用前要导入以下代码(在windows电脑下,mac不需要):
import subprocess
from functools import partial

subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")

import execjs
# -*- coding: utf-8 -*-
# coding=utf-8
import base64

import requests
import time
import subprocess
from functools import partial

subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")

import execjs

headers = {
    'authority': 'min-api.xliii.cn',
    'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1 wechatdevtools/1.06.2407110 MicroMessenger/8.0.5 Language/zh_CN webview/',
    'content-type': 'application/json',
    'accept': '*/*',
    'sec-fetch-site': 'cross-site',
    'sec-fetch-mode': 'cors',
    'sec-fetch-dest': 'empty',
    'referer': '',
}

params = {
    'requestData': '3x5T5fobv/lgYOMehTSyKGQD547tWeTGXItoZhgPp0fdGFU9fLYHyxyriTtogilHi2THpYQGaGYne7kTTUQ/vAcuyg03cf2ijUKRdbV9DNcxl17qsxy3PXtIHU2jYIBNv7g7bywLOSKdhrOlSIpDEM2PVCfOGbirswA0LP1wlTM=',
    'iv': 'zbdozs4sjdtIxKmY',
}

response = requests.get('', params=params, headers=headers)
ret = response.json().get('data')
b64 = ret.get('data')
# print(b64)

# 响应解密
with open("APP_decrypt.js", encoding="utf8") as f:
    jsCode = f.read()
js_compile = execjs.compile(jsCode)
n = "HVK6TCJKWBLYFT2T"
ret = js_compile.call("i", str(b64), n)
print(ret)
  • 展示效果如下,我们可以获取到数据了:

6. 我们在进行请求加密

  • 我们在network中发现,要使用请求加密,所以我们直接使用关键字搜索

  •  我们把所需要的代码复制到pycharm中进行分析调试
  • 最终效果如下:
// 请求加密
const CryptoJS = require("crypto-js")

let c = '{"res_id": 88038, "appid": "wx41cd4f32cf8164b3", "ver": "7.0.0", "min_push": 0, "scene": 1001}'


function t(e, n) {
    var r = "WAG0JIUGYALACVJF"
        , i = CryptoJS.enc.Utf8.parse(r)
        , t = CryptoJS.enc.Utf8.parse(n);
    return CryptoJS.AES.encrypt(e, i, {
        iv: t,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    }).toString()
}

function d() {
    for (var e = "", a = ["1", "2", "4", "5", "3", "8", "0", "7", "9", "6", "A", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "S", "D", "F", "G", "H", "J", "K", "L", "q", "w", "S", "e", "a", "s", "d", "z", "x", "c", "v", "f", "r", "t", "g", "b", "y", "h", "n", "m", "j", "u", "i", "o", "k", "l", "p"], n = 0; n < 16; n++)
        e += a[(Math.random() * (a.length - 1)).toFixed(0)];
    return e
}

let u = d()
// console.log(ret)
function s(){
    return {
        'requestData':t(c,u,undefined),
        'iv':u
    }
}

console.log(s())




  •  然后我们也搬到python中,使用python进行调试:

7.完整代码如下:

# -*- coding: utf-8 -*-
# coding=utf-8
import base64

import requests
import time
import subprocess
from functools import partial

subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")

import execjs

headers = {
    'authority': 'min-api.xliii.cn',
    'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1 wechatdevtools/1.06.2407110 MicroMessenger/8.0.5 Language/zh_CN webview/',
    'content-type': 'application/json',
    'accept': '*/*',
    'sec-fetch-site': 'cross-site',
    'sec-fetch-mode': 'cors',
    'sec-fetch-dest': 'empty',
    'referer': '',
}

params = {
    'requestData': '3x5T5fobv/lgYOMehTSyKGQD547tWeTGXItoZhgPp0fdGFU9fLYHyxyriTtogilHi2THpYQGaGYne7kTTUQ/vAcuyg03cf2ijUKRdbV9DNcxl17qsxy3PXtIHU2jYIBNv7g7bywLOSKdhrOlSIpDEM2PVCfOGbirswA0LP1wlTM=',
    'iv': 'zbdozs4sjdtIxKmY',
}

response = requests.get('', params=params, headers=headers)
ret = response.json().get('data')
b64 = ret.get('data')
# print(b64)

# 响应解密
with open("APP_decrypt.js", encoding="utf8") as f:
    jsCode = f.read()
js_compile = execjs.compile(jsCode)
n = "HVK6TCJKWBLYFT2T"
ret = js_compile.call("i", str(b64), n)
print(ret)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day 8 TIM定时器

一、STM32 定时器概述 1. 定时器的概述定时器的基本功能&#xff0c;但是 STM32 的定时器除了具有定时功能之外&#xff0c;也具有定时器中断功能&#xff0c;还具有输入捕获&#xff08;检测外部信号&#xff09;以及输出比较功能&#xff08;输出不同的脉冲&#xff09;&…

全星 研发项目管理APQP 软件:驱动汽车及制造业研发升级的数字化引擎

全星 APQP 软件&#xff1a;驱动汽车及制造业研发升级的数字化引擎 在汽车及制造业竞争白热化的当下&#xff0c;如何高效推进研发项目&#xff0c;同时确保严格合规&#xff0c;成为企业亟待解决的难题。 全星研发项目管理 APQP 软件系统&#xff0c;凭借卓越的功能与显著优势…

【VUE】RuoYi-Vue3项目结构的分析

【VUE】RuoYi-Vue3项目结构的分析 1. 项目地址2. RuoYi-Vue3项目结构2.1 整体结构2.2 package.json2.2.1 &#x1f9fe; 基本信息2.2.2 &#x1f527; 脚本命令&#xff08;scripts&#xff09;2.2.3 &#x1f30d; 仓库信息2.2.4 &#x1f4e6; 项目依赖&#xff08;dependenc…

智能体和RPA都需要程序思维,如何使用影刀的变量?

欢迎来到涛涛聊AI&#xff0c; 不管AI还是RPA&#xff0c;都需要用到编程思想才能完成批量工作。今天研究了下影刀的变量。 变量类型 根据变量值选择相应的类型&#xff0c;可选择任意一种影刀所支持的数据类型 变量值 指定变量中保存的值&#xff0c;会根据不同的类型设置…

论文笔记(七十五)Auto-Encoding Variational Bayes

Auto-Encoding Variational Bayes 文章概括摘要1 引言2 方法2.1 问题场景2.2 变分下界2.3 SGVB估计器与AEVB算法2.4 重参数化技巧 3 示例&#xff1a;变分自编码器&#xff08;Variational Auto-Encoder&#xff09;4 相关工作5 实验6 结论7 未来工作 文章概括 引用&#xff1…

Sentinel[超详细讲解]-7 -之 -熔断降级[异常比例阈值]

&#x1f4d6; 主要讲解熔断降级之 --- 异常比例阈值 &#x1f680; 1️⃣ 背景 Sentinel 以流量作为切入点&#xff0c;提供了很多的丰富的功能&#xff0c;例如&#x1f917;&#xff1a; 流量控制&#xff0c;熔断降级等&#xff0c;它能够有效的适用各个复杂的业务场景&am…

C++11观察者模式示例

该示例代码采用C11标准&#xff0c;解决以下问题&#xff1a; 消除了类继承的强耦合方式&#xff1b;通知接口使用可变参数模板&#xff0c;支持任意参数&#xff1b; 示例代码 .h文件如下&#xff1a; #include <functional> #include <string> #include <…

win10 笔记本电脑安装 pytorch+cuda+gpu 大模型开发环境过程记录

win10 笔记本电脑安装 pytorchcudagpu 大模型开发环境过程记录 文章部分内容参考 deepseek。 以下使用命令行工具 mingw64。 安装 Anaconda 安装位置&#xff1a; /c/DEVPACK/Anaconda3 然后安装 Python 3.10.16 &#xff08;略&#xff09; $ conda create -n pytorch_…

Layout Inspector平替跨平台布局分析器のAppium Inspector

引言 因为我有一个api为26的设备&#xff0c;因为 Layout Inspector 无法在 API 26 以下设备上使用&#xff0c;并且现在AS的 Hierarchy Viewer 和Android Device Monitor 均已经在SDK中剔除&#xff0c;故想再搜一个pc版的布局查看器&#xff0c;发现Appium Inspector学习成本…

常见NLP指标PPL,F1,Rouge-L,Accuracy (CLS),Accuracy (EM)总结

常见NLP指标PPL&#xff0c;F1&#xff0c;Rouge-L总结 1.PPL 2.F1 3.Rouge-L 4.Accuracy (CLS) 5.Accuracy (EM)

Redis数据结构之ZSet

目录 1.概述2.常见操作2.1 ZADD2.2 ZRANGE2.3 ZREVRANGE2.4 ZRANGEBYSCORE2.5 ZSCORE2.6 ZCARD2.6 ZREM2.7 ZINCRBY2.8 ZCOUNT2.9 ZMPOP2.10 ZRANK2.11 ZREVRANK 3.总结 1.概述 ZSet和Set一样也是String类型元素的集合&#xff0c;且不允许重复的成员&#xff0c;不同的是ZSet…

磁盘分析工具合集:告别C盘焦虑!

今天李师傅带大家盘点五款硬盘空间分析利器&#xff0c;帮你精准定位那些"吃空间"的元凶&#xff0c;让C盘告别臃肿烦恼&#xff01; 一、WizTree 这款NTFS磁盘的"透视眼"堪称效率典范。它通过直接读取硬盘主文件表(MFT)实现秒级扫描&#xff0c;1TB机械…

20250405在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统来适配gmac1

【暂时还没有解决让PRO-RK3566的eth0/gmac1开机就启动】 PRO-RK3566作为iperf服务器&#xff1a; rootrk3566-buildroot:/# ifconfig rootrk3566-buildroot:/# ifconfig -a rootrk3566-buildroot:/# ifconfig eth0 up rootrk3566-buildroot:/# ifconfig rootrk3566-buildroot:/…

每日一题(小白)模拟娱乐篇14

直接理解题意&#xff0c;一分钟扩散一次&#xff0c;那么2020分钟也就是需要循环2020次&#xff0c;然后加入扩散后的条件&#xff0c;每一个次扩散使方格子的总量1&#xff08;只要有一个点扩散就无需看其他的点&#xff09;&#xff0c;若干次循环过后总数之和即所有黑色格子…

使用 Python 爬取并打印双色球近期 5 场开奖数据

使用 Python 爬取并打印双色球近期 5 场开奖数据 前期准备安装所需库 完整代码代码解析 1. 导入必要的库2. 定义函数 get_recent_five_ssq 3. 设置请求的 URL 和 Headers 4. 发送请求并处理响应5. 解析 HTML 内容6. 提取并打印数据7. 错误处理 首先看下运行的效果图&#xff1a…

再见VS Code!Google IDE 正颠覆传统开发体验

云端开发的革命&#xff1a;Google Project IDX 如何颠覆传统开发体验 在软件开发领域&#xff0c;Google 最新推出的 Project IDX 绝非仅仅是另一个“基于浏览器的 VS Code”——它是一次真正的范式转变。与 VS Code、Cursor 等传统工具不同&#xff0c;IDX 是一个完全云原生的…

AI+自动化测试:如何让测试编写效率提升10倍?

文章目录 摘要传统自动化测试的痛点编写测试用例太费时间测试覆盖率难以保证UI 测试维护成本高 AI 如何优化自动化测试&#xff1f;AI 生成单元测试&#xff1a;减少重复工作&#xff0c;提高覆盖率传统方法 VS AI 方法 使用 AI 生成 Python 单元测试自动补全边界情况传统方法 …

01-STM32(介绍、工具准备、新建工程)p1-4

文章目录 工具准备和介绍硬件设备stm32简介和arm简介stm32简介STM32命名规则STM32选型STM32F103C8T6最小系统板引脚定义STM32启动配置STM32最小系统电路ARM简介 软件安装注册器件支持包安装ST-LINK驱动安装USB转串口驱动 新建工程创建stm32工程STM32工程编译和下载型号分类及缩…

Win10定时任务计划无法显示要执行的EXE任务程序界面,问题解决办法

用C#开发的一款WINFORM程序&#xff0c;在电脑测试一切顺利&#xff0c;运行结果正确。但用电脑的定时任务执行时&#xff0c;程序界面不显示&#xff0c;重启电脑、各种试都不行&#xff0c;最终问题解决。 解决办法&#xff1a; 要选“只在用户登陆时运行”&#xff0c;才能执…

STM32CubeMX-H7-12-IIC读写MPU6050模块(中)-MPU6050模块详解以及软件IIC驱动

前言 上一篇我们已经完成对IIC代码基本框架的编写&#xff0c;以及获取MPU6050的ID&#xff0c;接下来我们逐一分析这个模块的功能&#xff0c;并用IIC驱动 建议看完上一篇再来看这篇 MPU6050寄存器介绍 1.电源管理寄存器&#xff08;PWR_MGMT_1&#xff0c;地址&#xff1a;0…