gojs去除水印的方法(新版和旧版)

旧版去水印

        之前的版本中gojs去除水印很简单,在release/go.js文件中搜索带7eba17a4ca3b1a8346的函数,让其返回true就可。可是最近发现我写的脚本不管用了,仔细查了下发现没搜到该字符串。看来又要为了去水印的需求秃头了。
旧版去水印代码:

const fs = require('fs')
const path = require('path')
const file = path.join(__dirname, './node_modules/gojs/release/go.js')
//去除gojs水印
fs.readFile(file, 'utf8', function (err, data) {
  if (err) throw err;
  let content = data.replace(/[\w\W]{8}7eba17a4ca3b1a8346[\w\W]{31}/gi, function (match) {
    return 'function(){return true;}'
  });//旧版去水印
  fs.writeFile(file, content, 'utf8', (err) => {
      if (err) throw err;
      // console.log('success done');
  });
});

新版分析以及去水印

        首先gojs初始化会创建canvas,定位到canvas创建的地方打印一番,现在你们可以在文件中搜索5da73c80a36455d5038e4972187c3cae51fd22去定位,发现了打印出了canvas的filleText方法,接着打印出了四行水印,去掉之后发现还显示水印,再接着往下打印。结果发现绘制了两次,好家伙真狗,看看这几行代码,你们的变量名可能不一样但值是一样的:

var a=x.document.createElement("canvas"),b=a.getContext("2d"),c=Sa("7ca11abfd022028846");
b[c]=Sa("398c3597c01238");//c是fillstyle属性
for(var d=["5da73c80a36455d5038e4972187c3cae51fd22",ra.Dx+"4ae6247590da4bb21c324ba3a84e385776",rd.xF+"fb236cdfda5de14c134ba1a95a2d4c7cc6f93c1387",L.za],e=1;5>e;e++){
    //b[Sa("7ca11abfd7330390")](Sa(d[e-1]),10,15*e);//第一次绘制
    console.log(Sa(d[e-1]));//上面的一行换成Sa(d[e-1])
}
b[c]=Sa("39f046ebb36e4b");
for(c=1;5>c;c++){//Sa("7ca11abfd7330390")是fillText方法
    //b[Sa("7ca11abfd7330390")](Sa(d[c-1]),10,15*c);//第二次绘制
    console.log(Sa(d[c-1]));//上面的一行换成Sa(d[c-1])
}

在这里插入图片描述
关键是你注释了它的绘制函数,虽然水印没了但是功能也不能用了。手段比之前高明了许多,后来发现只要调用获取水印的函数就没问题,把绘制的函数替换为获取水印的函数即可。当然知道了原理我们也可以让填充样式透明也可解决。新旧组合脚本:

const fs = require('fs')
const path = require('path')
const file = path.join(__dirname, './node_modules/gojs/release/go.js');
//注意该文件如果是模块化引入,文件路径应该是./node_modules/gojs/release/go-module.js 如果没有生效可以试试这个文件路径
//去除gojs水印
fs.readFile(file, 'utf8', function (err, data) {
  if (err) throw err;
  let hasMatch = false;
  let content = data.replace(/[\w\W]{8}7eba17a4ca3b1a8346[\w\W]{31}/gi, function (match) {
    if(match) hasMatch = true;
    return 'function(){return true;}'
  });//旧版去水印
  if(!hasMatch){//新版去水印
    content = data.replace(/[^\)^\{}]*7ca11abfd7330390[^;]*/gi, function (match) {//查找绘制文本的语句
        let arr=/\]\(([^\,]+)/.exec(match);//查找语句中的获取水印文本函数
        //console.log(arr);
        return arr && arr.length>=1 && arr[1];//用该函数整个替换绘制函数
    });
  } 
  fs.writeFile(file, content, 'utf8', (err) => {
      if (err) throw err;
      // console.log('success done');
  });
});

然后这个脚本在package.json打包或者运行时插入命令调用,不管是不是新安装的都会起效果。注:beforebuild就是脚本文件。

"scripts": {
    "init": "webpack --progress --config webpack.dev.config.js  ",
    "dev": "node beforebuild && webpack-dev-server    --content-base ./ --open --inline --hot --compress --history-api-fallback --config webpack.dev.config.js",
    "build": "node beforebuild && webpack --progress --hide-modules --config webpack.prod.config.js",
  }
  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值