【爬虫】python复原网站前端密码加密

2023-11-13

【爬虫】python复原网站前端密码加密

前言

前几天学完了尚硅谷的爬虫课程,这几天刚好有一门课出成绩了。我们学校的教务处的查分系统手机无法正常打开(好像只有ios设备用不了)。学校的一些学长弄了一个公众号,在公众号里面手机可以很方便的查到分数。这个公众号应该也是使用了爬虫技术查分,感觉非常方便。这次查完分数之后我就想着为什么不直接弄一个网络爬虫,然后搭建一个个人服务器,直接访问我自己的网站查分呢。想想就爽 !

发现问题-定位加密代码和加密的技术

之前在学习爬虫的时候没有见到过密码加密的情况,虽然知道一般前端的密码都会加密,但是当自己做爬虫遇到了还是有点不知所措的。

当我发现密码加密后,我就去网上搜了一通前端密码加密的方法。但是大都是理论,对于爬虫用处不大。后来我就去看了一下网站的源码,希望在网站源码中找到一些破解的方法。

我使用了Chrome浏览器,使用检查(快捷键:F12)功能,在source栏中查看网站的js文件,我找到了一个名字中有login的js文件,通过打断点调试,我找到了密码加密的函数。密码加密调用了另一个js文件中的函数,其代码如下(个人觉得找到前端加密代码很关键。下面的部分也都是以下面的网站前端JS加密代码为基础的):

function getCryptoPwd(pwd) {
  var key = CryptoJS.enc.Utf8.parse(cryptoKey);
  var password = CryptoJS.enc.Utf8.parse(pwd);
  var encrypted = CryptoJS.AES.encrypt(password, key, {
    mode: CryptoJS.mode.ECB, 
    padding: CryptoJS.pad.Pkcs7
  });
  return encrypted.toString();
}

观察代码,发现问题的关键。好像使用了CryptoJS网上搜一波。果然,这就是一个专门的前端加密的库。

现在的问题就是怎么样用Python实现CryptoJS的功能了。

寻找解决方法

通过搜索发现,python确实有一个功能和CryptoJS类似的库Crypto也支持多种加密方式。

解决方案-使用Python实现同样的加密

CryptoJS的AES加密简单来说就是应用 明文密钥 在字节上的多次 位移字节 间的 去加密数据的算法。AES加密有好几种模式,而这次网站中的加密模式是其中最简单的ECB模式(通过网站源码中的: mode: CryptoJS.mode.ECB)。

还需要注意的是encrypt函数中padding: CryptoJS.pad.Pkcs7参数。其为设置明文和密钥的填充方式。在加密前,需要将明文填充到16个字符长,Pkcs7填充模式就是在明文字符串末尾添加 (16 - 明文长度)的值直至明文到16位。

(这里真的不太讲的清,想了解还是再搜搜吧。。下面直接贴上代码吧)

import base64
from Crypto.Cipher import AES

 # 获取密文的函数,参数位未加密的明文
def get_encrypted_password(password):
    ########## 秘钥 ##########
    key = ''		# 密钥因该可以在网站源码中找到,我要爬取的网站的密钥为16位,不需要再填充至16位了,这里就不展示具体的内容了
    #########################
 
	# 调用下面定义的 encrypt_password 函数,传递明文和密钥,返回密文
    encrypted_password = encrypt_password(text=password,key=key)
    return encrypted_password


# 输入明文和密钥,返回加密后的密文
def encrypt_password(text,key):
    aes = AES.new(add_to_16(key), AES.MODE_ECB)
    #先进行aes加密
    encrypt_aes = aes.encrypt(add_to_16(text))
    #用base64转成字符串形式
    encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8')  # 执行加密并转码返回bytes
    return encrypted_text

# 使用Pkcs7方案填充明文置16字节
def add_to_16(value):
    addNum = 16-len(value)					# 填充的值就是明文于填充的目标长度16的差值
    addStr = chr(int(str(addNum),10))       # 使用chr 返回编码,具体为啥要这样我还数不清
    while len(value) % 16 != 0:
        value += addStr
    return str.encode(value)  # 返回bytes

总结

这次爬虫密码加密感觉还是比较成功的,虽然一些东西还没搞明白。但是总结下来这个工程让我对Python爬虫逆向工程复原前端加密过程的方法有了一些自己的方法论。

  • 通过浏览器查看网页js源码,定位加密密码的前端代码,找到对应的加密算法
  • 查找python是否有相关的库实现类似的加密算法
  • 通过第三方库进行加密,必要时自己编程实现部分或全部功能

这次逆向工程用python加密密码下来感觉自己的pyhton基础还是不太行,而且有必要补一下。

emm如果有时间的话…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【爬虫】python复原网站前端密码加密 的相关文章

随机推荐

  • 关于蓝桥杯的乱七八糟的话(经验、心得、建议、技巧)

    参赛经验 心得 先介绍一下自身情况 我参加的是C C B组 所在的赛区是江苏赛区 参加过三次蓝桥杯 最好的成绩是国三 没错我就是个小辣鸡 蓝桥杯省赛题目一般有结果填空 代码填空和程序题三种题型 但是第十届已经没有了代码填空 填空题只要结果
  • leaftlet 中Polygon的使用属性

    绘制一个面 var latlngs 37 109 05 41 109 03 41 102 05 37 102 04 var polygon L polygon latlngs color red addTo map map fitBound
  • videopose3d制作自己的视频转换

    videopose3d制作自己的视频转换 最近学了深度学习 对其中的人体姿态检测和识别感兴趣 但是网上包括官方网站的都是对源码的解读 没有一个是利用自己的视频进行姿态检测和渲染的 因此自己试着按照官方的in the wild教程试了一下 很
  • Python开发图形可视化界面程序(一)

    前言 近来使用Python开发了一些简单的辅助脚本 发现这真的是一门很有趣的语言 于是乎 便想着使用python来开发一些具有图形可视化界面 GUI 的程序 对于python来说 支持其开发GUI可视化程序的框架非常之多 简直让人眼花燎原
  • bugfree pdo mysql扩展模块_windows平台bugfree3.0.3搭建心得(nginx+php+mysql+bugfree+RunHiddenConsole)...

    之前没做过windows服务器管理 我的认识还停在个人用户操作系统的认知上 这次搭建bugfree环境 挺多麻烦的 在安装之前 我百度的bugfree搭建大多是使用xampp集成环境的安装方法 然后我就照做 下载xampp 然后安装到系统c
  • C语言实现两数相加的三种方法

    笔试题里面看到的 总结一下 分享给需要的小伙伴 一 原始办法 这种方法最直观明了 int add int x int y return x y 二 利用printf的返回值 这个操作鲜为人知 include
  • linux域名解析

    linux域名解析 首先确保你的电脑可以连上网 服务端和客户端能够连通 1 本地解析 优先级高 在服务端中 ping www baidu com 找出ip 在客户端中的浏览器中搜索ip地址就可以上网 但是ip地址记起来非常不方便 所以这里用
  • 网贷风控体系之-风控模型

    网贷风控体系之 风控模型 大数据风控模型主要分为两类 反欺诈模型 交叉验证 聚类分析 黑灰名单 二元好坏模型 准入阶段 授信额度期限利率模型 评分卡模型 LR XGBoost 贷中阶段 风险变化评估 风险预警 贷后阶段 催收时机 催收方法
  • TVM:源码编译安装

    TVM Linux源码编译安装 笔者环境 OS Ubuntu 18 04 CMake 3 10 2 gcc 7 5 0 cuda 11 1 编译安装过程总览 本文将简介 tvm 的编译安装过程 包含两个步骤 通过C 代码构建共享库 设置相关
  • Android - BlueTooth BLE 之 Central 与 Peripheral

    一 前言 Andorid 5 0 之前是无法进行 外围设备开发的 在Android 5 0 API 21 android bluetooth le包下 新增加 Scaner相关类和 Advertiser 相关类 目前最后使用Scanner相
  • 49天精通Java,第5天,Java控制台输入输出语句

    目录 一 控制台输出 二 读取输入 三 格式化输出 1 类型转换字符 2 代码实例
  • 搭建github服务器_【教程篇】使用GitHub+Hexo搭建个人静态博客

    嗨 大家好 你们的万金油管家小e又来了 这次就教大家一些利用GitHub和Hexo本地服务器搭建个人博客的教程 可能教程要好几期 那么这期就先从最最基础的GitHub的注册 以及本地环境的搭建 GitHub仓库的建立等等开始 近年来很多人都
  • 十大应用安全威胁

    常见应用安全威胁 OWASP TOP 10 2013 注入 失效的身份认证和会话管理 跨站脚本攻击 XSS 不安全的直接对象引用 安全配置错误 敏感信息泄露 功能级访问控制缺失 跨站请求伪造 CSRF 使用含有已知漏洞的组件 未验证的重定向
  • 【MyBatis】MyBatis 二级缓存全详解

    1 概述 转载 MyBatis 二级缓存全详解 上一篇文章中我们介绍到了 MyBatis 一级缓存其实就是 SqlSession 级别的缓存 什么是 SqlSession 级别的缓存呢 一级缓存的本质是什么呢 以及一级缓存失效的原因 我希望
  • Ubuntu扩展存储合理分配swap分区

    文章目录 前言 1 为Ubuntu扩存 外部存储 1 1修改存储 1 2 初始化分配的磁盘 2 为Ubuntu调整swap分区大小 总结 前言 我们在Ubuntu上运行某些大型游戏或者编译一些工程代码的时候 往往会遇到内存或外部存储不够导致
  • mac 本地运行 http-proxy-middleware ,请求超时

    const http require http customer target http 10 10 111 192 8080 target http user jinfu baohan com changeOrigin true 是否启用
  • JS如何将变量作为一个对象的Key

    JS如何将变量作为一个对象的Key var lastWord last word var a first word hello lastWord world a first word hello a lastWord world a las
  • Mysql进阶优化篇06——分组查询优化、分页查询优化、覆盖索引

    前 言 作者简介 半旧518 长跑型选手 立志坚持写10年博客 专注于java后端 专栏简介 mysql基础 进阶 主要讲解mysql数据库sql刷题 进阶知识 包括索引 数据库调优 分库分表等 文章简介 本文将介绍JOIN语句的底层原理
  • Java中通过反射+自定义注解判断对象中部分属性是否为空,返回为空字段的名称或自定义含义

    场景 若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出 若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出 霸道流氓气质的博客 CSDN博客 在上
  • 【爬虫】python复原网站前端密码加密

    爬虫 python复原网站前端密码加密 前言 前几天学完了尚硅谷的爬虫课程 这几天刚好有一门课出成绩了 我们学校的教务处的查分系统手机无法正常打开 好像只有ios设备用不了 学校的一些学长弄了一个公众号 在公众号里面手机可以很方便的查到分数