大家好,我是辣条。

这是我爬虫系列的第三十篇,爬虫之路永无止境。

采集目标

网址:

aHR0cHM6Ly93d3cud2VpZGlhbi5jb20vP3NvdXJjZT1ndWFud2FuZw==

工具准备

开发工具:pycharm 开发环境:python3.7, Windows10 使用工具包:requests, node.js,buff

项目解析思路

首先需要找到网页的登录页面的登录接口 登录页面:aHR0cHM6Ly9kLndlaWRpYW4uY29tL3dlaWRpYW4tcGMvbG9naW4vP3NwaWRlcl90b2tlbj04MDRjIy8=

在获取到登录接口,接口需要使用抓包工具获取到登录的请求接口,先输入错误的账户密码触发出登录接口

post请求大部分情况下意味着我们需要传递参数,查看需要传递的参数信息,当前网页有点奇怪,账户密码都是没有加密的,加密的是ua字段,那我们今天主要的就是搞定ua字段

今天还是照常使用搜索的方式查找字段,但是ua关键字想想就知道出现的频率会很高,今天来一个搜索的小诀窍,一般ua会作为一个关键字,我们可以更精确的搜索比方说搜索‘ua:’、‘ua=’,这种搜索出来的会比直接搜索关键字更加的准确,

剩下的文件就需要慢慢进行筛选排除了,找到和我们类似相似字段的时候可以断点调试,看看是不是我们需要的请求接口触发的, 最终我们将代码定格在index.js文件

ua字段是由encodeURIComponent加载过来的,encodeURIComponent是对字符串进行url编码的,该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 编码的数据是i,找到i的生成位置, i是由window.getUa加载过来的,搞的辣条一阵欢喜,还想着这个网页加密没有很严谨,到我打开之后发现是辣条的格局小了,打上断点我们进入window.getUa这个函数,看的我菊花一紧。

直接世界崩塌

代码是混淆加密的,在这里也辣条也想征集一个好用的反混淆的工具(还望各位大佬不吝赐教)。

我们来慢慢解一下试试 _0x7dfc34可以很直观看出来是获取时间戳,if的判断是没有进的可以暂时忽略,在下方的函数调用可以不用搭理

开始解析0x261229,0x261229是有3部分拼接得来先解决第一部分0x1722c3(0x2e98dd), 0x2e98dd可以看出数据是数组,我转换json来看看,先对数据有一定的概念, 在看看0x1722c3的函数

    var _0x1722c3 = function(_0x1da193) {var _0x3dca2f = new _0x4d6308();if (_0x1da193[_0x4651('0x43a')]) {var _0x180af0 = _0x3dca2f[_0x4651('0x43b')](_0x2e98dd);var _0x286380 = _0x3b911e(_0x180af0);return _0x286380;} else {var _0x180af0 = _0x3dca2f[_0x4651('0x43c')](_0x1da193);var _0x286380 = _0x3b911e(_0x180af0);return _0x286380;}};

调用的函数判断的数据有点多,辣条还是选择直接补环境 先把主要代码逻辑放过来

var _0x1722c3 = function(_0x1da193) {var _0x3dca2f = new _0x4d6308();if (_0x1da193[_0x4651('0x43a')]) {var _0x180af0 = _0x3dca2f[_0x4651('0x43b')](_0x2e98dd);var _0x286380 = _0x3b911e(_0x180af0);return _0x286380;} else {var _0x180af0 = _0x3dca2f[_0x4651('0x43c')](_0x1da193);var _0x286380 = _0x3b911e(_0x180af0);return _0x286380;}
};
​
​
window[_0x4651('0x710')] = function() {var _0x7dfc34 = new Date().getTime();// if (_0x4a9622) {//     _0x2644f4();// }// _0x55b608();var _0x261229 = _0x1722c3(_0x2e98dd) + '|' + _0x1722c3(_0x420004) + '|' + _0x7dfc34[_0x4651('0x8c')](0x10);_0x261229 = btoa(_0x570bef[_0x4651('0x90')](_0x261229, {'to': _0x4651('0x97')}));return _0x261229;
};

尝试运行看看缺少什么,缺什么就补什么,把刚刚控制台上的数据拿过来。

慢慢补的速度实在有点慢,直接拿整个文件吧,混淆的代码看这有点头疼,运行整个js文件时给我们报错。

这个使用特定的js代码搞定,其他脚本也适应,加上之后就没得问题了。

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window = dom.window;
document = window.document;
XMLHttpRequest = window.XMLHttpRequest;

这个我就不就不添加了,直接去源码里查找

两个为本地网址的域名和网络协议直接修改

没有报错了,尝试调用我们的主逻辑代码

当我们调用主函数时报错信息提示btoa的问题,这个是base64的加密方法,直接调用的话会出现一些问题,我们可以选择用buff方式进行加密,将原有代码替换,在尝试运行

var _0x261229 = new Buffer.from(_0x570bef[_0x4651('0x90')](_0x261229, {'to': _0x4651('0x97')}));

大功告成,js给位大佬可以之后自行尝试

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window = dom.window;
document = window.document;
XMLHttpRequest = window.XMLHttpRequest;
#代码实在太太太长了,严重影响了阅读,我全删减了,需要的话可以按照我上面的操作去获取或者不会的话私我获取

后续的工作就很简单了,把数据转换就好了,对网址发送请求带上请求头,在带上需要传递的参数。后面就很简单啦 。

Python爬虫高阶:微店混淆逆向解密相关推荐

  1. python list大小_4个python常用高阶函数的使用方法

    1.map Python内建了map()函数,map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回. 举 ...

  2. Python之高阶函数(abs、map、reduce、filter、lambda匿名函数)

    Python之高阶函数(abs.map.reduce.filter.lambda匿名函数) 什么是内置高阶函数 高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返 ...

  3. 【爬虫高阶】模拟登录Github

    模拟登录Github 1. 获取账号密码 2. 请求信息详解 3. 模拟登录 1. 获取账号密码 模拟登录的网址为Github,界面如下 ① 进入界面后,右键进入检查界面,选择菜单上面的Network ...

  4. 2019最新Python爬虫高频率面试题总结(一)

    今天给大家出一个关于Python爬虫面试题的总结,相对于来说出现频率比较高的一些! 1. 为什么 requests 请求需要带上 header? 原因是:模拟浏览器,欺骗服务器,获取和浏览器一致的内容 ...

  5. Python:高阶函数

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  6. python四大高阶函数_详谈Python高阶函数与函数装饰器(推荐)

    一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首 ...

  7. python四大高阶函数求导_4个python常用高阶函数的使用方法

    1.map Python内建了map()函数,map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回. 举 ...

  8. Python编程 高阶函数使用技巧

    在坚持的初期,坚持本身比坚持的事情更重要.也许,生活的意义并不在于实现了怎样伟大的梦想,而是在于自己全身心地投入,让每一天都成为梦想的一部分.只要是能确定带给自己价值感的事情,去做就好.时间在流逝,每 ...

  9. python学习-高阶函数(函数传参、返回函数(闭包)、匿名函数lambda)

    文章目录 高阶函数 函数传参 返回函数(闭包) 匿名函数lambda 高阶函数 定义: 至少满足下列一个条件: 接受一个或多个函数作为输入 输出一个函数 python里的高阶函数有 filter.ma ...

最新文章

  1. usaco ★Longest Prefix 最长前缀
  2. java jdbc效率_Java JDBC效率:连接需要多长时间?
  3. SQL改變字符串標識符
  4. STM32外部中断与各通道对应关系
  5. 二、制作最小linux系统
  6. ozf oracle,ORACLE EBS 简称大全
  7. linux启动时挂载rootfs的几种方式 .
  8. java synchronized 使用_Java中synchronized的使用实例
  9. clion远程调试linux内核,Clion + 树莓派/Ubuntu 远程调试
  10. 一个程序段两个小问题
  11. 关于参数的写法规则,参数引用几种写法
  12. ··· Socks Online - 在内部网也能使用QQ ···
  13. 阿里 Lindorm 数据库联手 Hightopo ,开启工业物联超融合存储模式
  14. 下载Django中文官方文档
  15. Android Studio gradle 统一版本管理
  16. 判断是否发生塑性变形的条件:von Mises屈服准则
  17. git 一个分支完全覆盖另一个分支
  18. python中反斜杠是什么意思_python中反斜杠是什么意思
  19. 苹果设备的微信数据收集
  20. [IPhone] 如何将制作图片放大缩小的动作

热门文章

  1. 虚拟机安装centos7后无法联网
  2. 数据工作-百度统计初体验
  3. NHibernate 3.x新功能实践(二) QueryOver(下)
  4. .net开发MIS系统的难处.
  5. STM32F0xx_FLASH编程(片内)配置详细过程
  6. 项目管理:CocoaPods建立私有仓库
  7. Handler: Service中使用Toast
  8. Google glass GDK - 通过MP3路径获取专辑图片
  9. 会计基础第八章内容2
  10. 1.窗体与界面设计-菜单应用实例