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

图灵码上爬第5题:屠龙刀--爬虫逆向

 别问我,问我就是小菜鸡记录下学习成果,哈哈哈哈

第五题其实跟第四题的逻辑差不多,只不过加了点简单混淆的代码

题目:

请求参数经过特殊处理,适合JavaScript逆向入门练习

思路:

首先打开开发者工具,抓包查看请求

可以看到有一个xl加密参数,使用搜索大法

搜到了一个,那说明就是这个了,断点断住,直接进去看加密函数,然后你就会发现一坨xx

明显可以看出来这是被混淆过后的代码,我们解混淆看看。

就是一个标准的AES算法+CBC模式+Pkcs7填充

js代码

const CryptoJS=require('crypto-js');
const _0x38addf = _0x66a7;function _0x66a7(_0x7461a9, _0x14ffcc) {const _0x4f0d09 = _0x4f0d();return _0x66a7 = function (_0x66a780, _0x2abc15) {_0x66a780 = _0x66a780 - 0xc5;let _0x477d8f = _0x4f0d09[_0x66a780];return _0x477d8f;}, _0x66a7(_0x7461a9, _0x14ffcc);
}(function (_0x59b24b, _0x16d38a) {const _0x3e5f1c = _0x66a7, _0x14ae46 = _0x59b24b();while (!![]) {try {const _0x5e1110 = parseInt(_0x3e5f1c(0xca)) / 0x1 + -parseInt(_0x3e5f1c(0xd4)) / 0x2 * (-parseInt(_0x3e5f1c(0xd5)) / 0x3) + parseInt(_0x3e5f1c(0xc8)) / 0x4 + -parseInt(_0x3e5f1c(0xcc)) / 0x5 * (-parseInt(_0x3e5f1c(0xd0)) / 0x6) + -parseInt(_0x3e5f1c(0xd3)) / 0x7 + -parseInt(_0x3e5f1c(0xcd)) / 0x8 + -parseInt(_0x3e5f1c(0xcf)) / 0x9;if (_0x5e1110 === _0x16d38a) break; else _0x14ae46['push'](_0x14ae46['shift']());} catch (_0x4fbd75) {_0x14ae46['push'](_0x14ae46['shift']());}}
}(_0x4f0d, 0x897b4), dd = {'a': CryptoJS});
let key = dd['a'][_0x38addf(0xd6)][_0x38addf(0xc7)][_0x38addf(0xc9)](_0x38addf(0xce)),iv = dd['a'][_0x38addf(0xd6)]['Utf8'][_0x38addf(0xc9)]('0123456789ABCDEF');function _0x4f0d() {const _0x341c37 = ['2440720SaQcQw', 'jo8j9wGw%6HbxfFn', '9735516pjwmiO', '68862pbatqQ', 'mode', 'AES', '1923264HnviQd', '36906bPsIrd', '12hEJHOd', 'enc', 'pad', 'encrypt', 'Hex', 'Utf8', '689460JbShaf', 'parse', '957060HmuxSn', 'toString', '445UZKyxv'];_0x4f0d = function () {return _0x341c37;};return _0x4f0d();
}function encrypt(_0x277028) {const _0x4d843e = _0x38addf;let _0x2703a2 = dd['a'][_0x4d843e(0xd6)]['Utf8']['parse'](_0x277028),_0x50fcf0 = dd['a'][_0x4d843e(0xd2)][_0x4d843e(0xc5)](_0x2703a2, key, {'mode': dd['a'][_0x4d843e(0xd1)]['CBC'],'padding': dd['a'][_0x4d843e(0xd7)]['Pkcs7'],'iv': iv});return _0x50fcf0['ciphertext'][_0x4d843e(0xcb)](CryptoJS[_0x4d843e(0xd6)][_0x4d843e(0xc6)]);
}function loadPage(pageNumber) {const timestamp = new Date().getTime();const params = {page: pageNumber,_ts: timestamp,};const jsonString = JSON.stringify(params);let encryptedQuery = encrypt(jsonString);return encryptedQuery}console.log(loadPage(1))

python代码

import requests
import execjs
cookies = {自己cookie
}headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
}num=0
for li in range(1,21):with open('5.js','r',encoding='utf-8')as f:js_code=f.read()xl=execjs.compile(js_code).call('loadPage',li)json_data = {'xl': xl,}response = requests.post('https://www.mashangpa.com/api/problem-detail/5/data/', cookies=cookies, headers=headers, json=json_data)print(response.json()['current_array'])num+=sum(response.json()['current_array'])
print(num)

http://www.xdnf.cn/news/336079.html

相关文章:

  • 7系列 之 OSERDESE2
  • Pandas比MySQL快?
  • CentOS的防火墙工具(firewalld和iptables)的使用
  • Linux云计算训练营笔记day04(Rocky Linux中的命令)
  • 微信小程序备案的一些记录
  • Logback官方文档翻译章节目录
  • 【漫话机器学习系列】247.当 N=整个母体(WHEN N=POPULATION)
  • 【wpf】11 在WPF中实现父窗口蒙版效果:原理详解与进阶优化
  • 新能源汽车CAN通信深度解析:MCU、VCU、ECU协同工作原理
  • 云计算的基础概论
  • 深入解析建造者模式(Builder Pattern)——以Java实现复杂对象构建的艺术
  • Django之账号登录及权限管理
  • LeetCode算法题(Go语言实现)_61
  • MYSQL之索引结构,为何要用B+树
  • 浅谈 Shell 脚本编程中引号的妙用
  • C++复习类与对象基础
  • 软件逆向工程核心技术:脱壳原理与实战分析
  • 《企业级前端部署方案:Jenkins+MinIO+SSH+Gitee+Jenkinsfile自动化实践》
  • 通过混合机器学习和 TOPSIS 实现智能手机身份验证的稳健行为生物识别框架
  • 【FAQ】HarmonyOS SDK 闭源开放能力 — PDF Kit
  • springboot使用mybatisPlus进行数据库增删改查
  • 华为首款鸿蒙电脑正式亮相
  • 超详细!RxSwift 中的 BehaviorRelay 使用教程(含原理 + 示例 + 实战)
  • 《供应链网络攻击的风险与防范》
  • OpenHarmony 5.0 切换已连接过的wifi切换失败
  • 普通IT的股票交易成长史--20250508晚复盘
  • python学生作业提交管理系统-在线作业提交系统
  • 搭建电商独立站跨境电商反向海淘系统的过程中网站健康运营的指标
  • 前端开发中移动端调试的日常工具整理
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】8.4 数据故事化呈现(报告结构设计/业务价值提炼)