JSVMP分析
1.jsvmp**:JS虚拟机**就是将js源代码首先编译为字节码,得到的这种字节码就变成只有操作码(opcode)和操作数(Operands),这是其中一个前端代码的保护技术。
一、jsvmp技术的优点
跨平台兼容性:jsvmp技术可以在不同的操作系统和硬件平台上运行,因为它是基于软件的虚拟机。
性能优化:jsvmp技术可以对JS代码进行优化,提高执行效率。
安全性:jsvmp技术提供了一种隔离JS代码的方法,可以防止恶意代码的攻击。
提供丰富的API:jsvmp技术可以提供丰富的API,使得JS代码可以访问更多的系统资源。
二、jsvmp技术的缺点
性能损失:由于jsvmp技术需要将JS代码编译成二进制指令集,并模拟执行这些指令,因此会带来一定的性能损失。
资源消耗:jsvmp技术需要消耗大量的系统资源,如内存和CPU。
调试困难:由于jsvmp技术将JS代码编译成二进制指令集,因此调试起来更加困难。
三、案例研究
下面是一个使用jsvmp技术实现JS代码加密和解密的示例代码:
// 加密函数
function encrypt(code) {
var vm = new V8(); // 创建V8虚拟机
vm.set('x', code); // 将要加密的代码保存到变量x中
vm.set('y', 'x-s'); // 将要解密的密钥保存到变量y中
vm.run('while (y--) x = String.fromCharCode(x.charCodeAt(0) ^ y); return x;'); // 执行加密算法
return vm.get('x'); // 返回加密后的结果
}
// 解密函数
function decrypt(code) {
var vm = new V8(); // 创建V8虚拟机
vm.set('x', code); // 将要解密的代码保存到变量x中
vm.set('y', 'x-s'); // 将要加密的密钥保存到变量y中
vm.run('while (y--) x = String.fromCharCode((x.charCodeAt(0) ^ y) ^ -y); return x;'); // 执行解密算法
return vm.get('x'); // 返回解密后的结果
}
三.猿人学新春案例
https://match.yuanrenxue.cn/match/21
只到找到
右键选中该js文件,然后点击override content
增加入下内容,获取加密函数
_eval = eval;
eval = function(str) {
if (str.length > 1000){
console.log(str);
debugger;
}
return _eval
}
获取随机数
Math.random_ = Math.random;
randList = [];
Math.random = function() {
let ret = Math.random_();
randList.push(ret);
return randList;
}
生成固定时间的数组
datalist = [];
Date.prototype.valueOf = function () {
let ret = Date.now();
datalist.push(ret);
return ret;
}
将生成的数组复制到js代码中,在执行时原网站代码已经固定不变