python执行js代码的方法


Posted in Python onMay 13, 2021

什么是js代码混淆?

正常代码

我们现在看一段js代码,代码逻辑很简单,就是拼接时间返回。

function formatDate(now) {
    var now = new Date(1230999938);
    var year=now.getFullYear();
    var month=now.getMonth()+1;
    var date=now.getDate();
    var hour=now.getHours();
    var minute=now.getMinutes();
    var second=now.getSeconds();
    return year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
}

    运行一下这段代码,如下图所示。

python执行js代码的方法

混淆代码

我随便找了个在线的js代码混淆网站。

js代码

function formatDate(mz1){var KkkGDiH2=new window["\x44\x61\x74\x65"](1230999938);var tsk3=KkkGDiH2['\x67\x65\x74\x46\x75\x6c\x6c\x59\x65\x61\x72']();var YMreyP4=KkkGDiH2['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1;var Ozo5=KkkGDiH2['\x67\x65\x74\x44\x61\x74\x65']();var QMYEc$eD6=KkkGDiH2['\x67\x65\x74\x48\x6f\x75\x72\x73']();var JfXVV_Akq7=KkkGDiH2['\x67\x65\x74\x4d\x69\x6e\x75\x74\x65\x73']();var $mP8=KkkGDiH2['\x67\x65\x74\x53\x65\x63\x6f\x6e\x64\x73']();return tsk3+"\x2d"+YMreyP4+"\x2d"+Ozo5+" "+QMYEc$eD6+"\x3a"+JfXVV_Akq7+"\x3a"+$mP8

    上面这个真的不是我瞎写的,混淆之后就是这样子的,不信看图片。

python执行js代码的方法

可能我们会有个疑问,js代码都成这玩意了,还能执行吗? 答案是肯定的。即使js代码非常乱,但还是可以执行的,结果跟上面的是一样的。

这就造成了一个问题,我们在做爬虫时,如果需要,多多少少可能都要研究一下js代码,然后进行js解密一下,但是,但是,要是代码都混淆成了这了,还怎么解?

一点逻辑都看不通了,基本上不可用Python按照js逻辑重写出来了...

很巧,小编也是卡在这里...后来我就想,要是Python能执行js代码就好了,不用管函数里面的逻辑了,只拿函数返回值就好了。

Python第三方包Execjs

可能是吧,不止我一个人遇到了这种情况,所以大佬们就开发出来这种工具包,用于执行js代码。

安装

在安装之前,需要有node环境,这里就不举栗子了,下一步下一步就好了。

pip3 install PyExecJS

执行js

注:由于上述js代码会生成window对象,并不能直接执行成功,需要额外的其他辅助,这里简单的举一下其他例子。

正常js代码

function add(x, y) {
   return x + y;
}

Python执行js代码

import execjs

ctx = execjs.compile("""
function add(x, y) {
  return x + y;
}
""")
print(ctx.call("add", 1, 2))

执行结果如下图所示:

python执行js代码的方法

混淆js代码

function add(bi1,Pl$2){return bi1+Pl$2}

Python执行混淆js代码

import execjs

ctx = execjs.compile("""
function add(bi1,Pl$2){return bi1+Pl$2}
""")
print(ctx.call("add", 1, 2))

执行结果如下图所示:

python执行js代码的方法

可以看到,即使再混淆,只要执行的是js代码,都是没啥问题的。

上述拼接时间返回的js混淆代码也是可以执行的,但是它多了一个window对象,需要node安装jsdom才行,由于网络设置有问题,实在是下载不了举例子,实在是抱歉。

或者使用selenium打开游览器执行再返回也行,当然,速度更慢。

以上就是python执行js代码的方法的详细内容,更多关于python执行js代码的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
python下载图片实现方法(超简单)
Jul 21 Python
基于Python os模块常用命令介绍
Nov 03 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
详解安装mitmproxy以及遇到的坑和简单用法
Jan 21 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
如何通过python画loss曲线的方法
Jun 26 Python
python RC4加密操作示例【测试可用】
Sep 26 Python
python读取ini配置的类封装代码实例
Jan 08 Python
python不使用for计算两组、多个矩形两两间的iou方式
Jan 18 Python
Python单链表原理与实现方法详解
Feb 22 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 #Python
Python数据分析入门之教你怎么搭建环境
Pytorch 统计模型参数量的操作 param.numel()
May 13 #Python
Python机器学习算法之决策树算法的实现与优缺点
Python爬虫基础之爬虫的分类知识总结
pytorch中的numel函数用法说明
May 13 #Python
pytorch损失反向传播后梯度为none的问题
You might like
Mysql的常用命令
2006/10/09 PHP
php输出表格的实现代码(修正版)
2010/12/29 PHP
探讨如何把session存入数据库
2013/06/07 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
php封装的smarty类完整实例
2016/10/19 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
python删除不需要的python文件方法
2018/04/24 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
django orm模块中的 is_delete用法
2020/05/20 Python
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
新东网科技Java笔试题
2012/07/13 面试题
描述内存分配方式以及它们的区别
2016/10/15 面试题
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
幼儿园中班教学反思
2014/02/10 职场文书
精神文明单位申报材料
2014/05/02 职场文书
学校献爱心活动总结
2014/07/08 职场文书
DQL数据查询语句使用示例
2022/12/24 MySQL