03.调用js执行代码

  简单的js破解:通过python代码轻松实现

  复杂的js破解:代码不容易重写,使用程序直接调用js运行获取结果

1. 两种常见js重写

  • base64
    • 特征:如果数据以==结尾,应该最先想到base64 
    • 对应python中的库:Base64 
  • md5
    • 特征:如果数据是32位数字字母,应该想到md5  
    • 对应python库:hashlib

2. 复杂的js运行

  • 使用python调用js方式
    • PyV8
      • 给予谷歌v8引擎, 最新版本是2010年的,不推荐使用  
    • Js2Py
      • 纯python实现的解释器
      • 性能不高,存在bug
      • 对于大型高度混淆js会发生转化失败  
    • PyExecJs
      • 用的比较多,多个引擎可选,推荐node.js,效率高
      • # 安装
        # pip install pyexecjs
        
        # 测验使用
        import execjs
        # print(execjs.get().name)
        
        # 简单示例
        # jstext = """
        # function add(a, b){return a+b;}
        # """
        #
        # ctx = execjs.compile(jstext)
        # sum = ctx.call('add',1,2)
        # print(sum)
          
    • PyminiRacer
    • Selenium
    • Pyppeteer
      • 原生支持协程
      • 性能比selenium更高
      • 需要用到asyncio语法
  • 一种性能更高的调用方式
    • nodejs + express 搭建api服务
      • nodejs安装 https://www.jianshu.com/p/d68e461f585c  
      • npm命令
        • npm install express@3.21.2 -g : npm安装指定版本的包 -g: 全局安装
        • cnpm install express@4.16.1 --save  : 用淘宝npm安装包
        • npm list -g --depth 0  : npm查看已安装的包
        • npm list 当前项目需要的包
      • express 安装 https://www.cnblogs.com/lpxj-blog/p/10651728.html
        • express 找不到该命令的问题: npm install -g express-generator  安装这个工具
        • npm install  nodemon -g  :  更改代码不用重启项目
        • 创建一个项目文件夹, 在文件夹中输入 express -e projectname 创建项目, 将package.json文件中启动命令的 node替换成nodemon
        • npm start 运行项目
        • 在浏览器中访问127.0.0.1:3000
        • 在入口文件 www文件中 可以通过 var port 变量修改端口号
      • 用nodejs执行我们扣下来的js代码容易遇到的问题和解决方案:
        • window对象:
          • nodejs中没有window对象,如果要使用window对象要创建一个window对象指向global
          • 利用jsdom之类的库
        • Base64:
          • window.btoa在nodejs中不存在
          • 用 Buffer.from('aoying').toString('base64')
  • 到底选择那种调用方式比较好
  • 使用非浏览器存在的问题,解决办法

    

原文地址:https://www.cnblogs.com/zhangjian0092/p/12243812.html