python-js反编译初试
预备知识
- 扫盲 - 爬虫必备:Python 执行 JS 代码 —— PyExecJS、PyV8、Js2Py
- 初试
PyExecJS
- 不过看说
PyV8
不需要额外装 JS 环境,因为 V8 本身就是环境,但是py3,有些问题,有时间学学习一下。。。【这里占个坑,后面补链接】
目的是 python 可以调试 js
,ok,开搞。
1、PyExecJS 初试
pip install PyExecJS
# a.js
function add(x, y) { return x + y; }
# learning00.py
import execjs
def function():
print("in function...")
environ = execjs.get().name # 查看调用的环境
print(environ)
ctx = execjs.compile(""" function add(x, y) { return x + y; } """)
result = ctx.call("add", 3, 2)
print('execjs.all', result)
with open('./a.js', 'r') as f:
ctx = execjs.compile(f.read())
result = ctx.call("add", 1, 2)
print('openFile and call', result)result)
当js中包含windows、document时,使用jsdom
解决,学习自 python使用execjs执行含有document、window等对象的js代码,使用jsdom解决
其他技巧 【js混淆代码还原】
先贴一个混淆后的测试代码:
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('1("0-6");2 4(){1("0-5")}8 3=2(){1("0-7")};4();3()',9,9,'忧郁的匹格|alert|function|b|a|反混淆测试2|反混淆测试1|反混淆测试3|var'.split('|'),0,{}))
反混淆方法
- 新建一个网页
xxx.html
- 加入一个div容器
id="divTest"
- 赋值执行(在上面混淆的代码中,将eval()中的内容提取出来赋值(或直接打印))
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="divTest"></div>
</body>
</html>
<script>
// 将内容直接提取到页面中
document.getElementById('divTest').innerText = function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('1("0-6");2 4(){1("0-5")}8 3=2(){1("0-7")};4();3()',9,9,'忧郁的匹格|alert|function|b|a|反混淆测试2|反混淆测试1|反混淆测试3|var'.split('|'),0,{})
// 直接在控制台中打印出来
console.log(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('1("0-6");2 4(){1("0-5")}8 3=2(){1("0-7")};4();3()',9,9,'忧郁的匹格|alert|function|b|a|反混淆测试2|反混淆测试1|反混淆测试3|var'.split('|'),0,{}))
</script>
- 打开xxx.html 显示结果:(反混淆后的代码已经被压缩了,去掉了换行等字符),接下来自己对js代码进行分析即可。