python-js反编译初试

python-js反编译初试

预备知识

  1. 扫盲 - 爬虫必备:Python 执行 JS 代码 —— PyExecJS、PyV8、Js2Py
  2. 初试 PyExecJS
  3. 不过看说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,{}))

反混淆方法
  1. 新建一个网页xxx.html
  2. 加入一个div容器id="divTest"
  3. 赋值执行(在上面混淆的代码中,将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>
  1. 打开xxx.html 显示结果:(反混淆后的代码已经被压缩了,去掉了换行等字符),接下来自己对js代码进行分析即可。
    在这里插入图片描述
发布了85 篇原创文章 · 获赞 27 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/qq_22038327/article/details/103615800