Python爬虫如何应对Cloudflare邮箱加密


Posted in Python onJune 24, 2020

最近写一个小爬虫,需要拿到邮箱信息,发现拿不到,也不是ajax接口。最后查资料发现是被Cloudflare加密起来了,有加密肯定有解密。

通过大佬https://3water.com/article/189404.htm得到了加密算法。

参考大佬的原话搞起来就好:

柠之漠然:

这个解密方式就是从那段 js 代码转换过来的

其中最主要的一句话

for (e = ”, r = ‘0x' + a.substr(0, 2) | 0, n = 2; a.length ? n; n += 2) e += ‘%' + (‘0' + (‘0x' + a.substr(n, 2) ^ r).toString(16)).slice( ? 2);

前面的 2 位数字转化成 16 进制之后就是秘钥, 接下来的每两位字符跟秘钥异或操作之后转成16进制, 然后转换成字符

最后将所有解出来的字符拼成一起, 就得到邮箱 abc@abc.com 了

js 这边是用 urlencode 的方式

下面是复现的js解密代码:

function jiemi(val) {
 for (e = '', r = '0x' + val.substr(0, 2) | 0, n = 2; val.length - n; n += 2) e += '%' + ('0' + ('0x' + val.substr(n, 2) ^ r).toString(16)).slice(-2); return decodeURIComponent(e)
}

然后通过python调用js完美搞定:

import execjs

def get_js():
 # f = open("./../js/my.js", 'r', encoding='utf-8') # 打开JS文件
 f = open("./jiemi.js", 'r', encoding='utf-8') # 打开JS文件
 line = f.readline()
 htmlstr = ''
 while line:
  htmlstr = htmlstr+line
  line = f.readline()
 return htmlstr


def get_des_psswd(e):
 js_str = get_js()
 ctx = execjs.compile(js_str) #加载JS文件
 return (ctx.call('jiemi', e)) #调用js方法 第一个参数是JS的方法名,后面的data和key是js方法的参数


if __name__ == '__main__':
 print(get_des_psswd(e='30515253705152531e535f5d'))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中的各种函数的使用
May 24 Python
机器学习python实战之决策树
Nov 01 Python
python八大排序算法速度实例对比
Dec 06 Python
python timestamp和datetime之间转换详解
Dec 11 Python
如何利用python查找电脑文件
Apr 27 Python
利用python如何处理nc数据详解
May 23 Python
python3.6的venv模块使用详解
Aug 01 Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 Python
python、PyTorch图像读取与numpy转换实例
Jan 13 Python
Python pip配置国内源的方法
Feb 14 Python
基于python3生成标签云代码解析
Feb 18 Python
Django restful framework生成API文档过程详解
Nov 12 Python
python使用自定义钉钉机器人的示例代码
Jun 24 #Python
pytorch中的weight-initilzation用法
Jun 24 #Python
pytorch查看模型weight与grad方式
Jun 24 #Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 #Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 #Python
python3.x中安装web.py步骤方法
Jun 23 #Python
python如何删除文件、目录
Jun 23 #Python
You might like
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
javascript delete 使用示例代码
2010/03/29 Javascript
Javascript 类型转换方法
2010/10/24 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
12306 刷票脚本及稳固刷票脚本(防挂)
2017/01/04 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
和平主题的演讲稿
2014/01/12 职场文书
初婚未育证明
2014/01/15 职场文书
团日活动总结书
2014/05/08 职场文书
英文演讲稿
2014/05/15 职场文书
李培根演讲稿
2014/05/22 职场文书
中文专业求职信
2014/06/20 职场文书
业务内勤岗位职责
2015/04/13 职场文书
vue项目支付功能代码详解
2022/02/18 Vue.js