首页 > 其他分享 >JS奇淫技巧:数值的七种写法

JS奇淫技巧:数值的七种写法

时间:2022-09-30 12:06:17浏览次数:50  
标签:node console log 七种 奇淫 JS u0072 var 写法

JS奇淫技巧:数值的七种写法

JS奇淫技巧:挑战前端黑科技,数值的七种写法,能全看懂的一定是高手

你知道吗?在JS编程中,数值可以有很多种写法。

第一种写法:

一般情况而言,数值就是数值。

比如:

var a = 1;

你可知,这个1可以有很多种变形的写法,甚至是变态的写法。

第二种写法:

var a= +!!{};

console.log(a);

JS奇淫技巧:数值的七种写法_异或运算

即:1变成了+!!{}。

数值1为什么能用+!!{}来表示呢?原因如下:

在JS语法中,!{}是布尔值false,强制转换成数字为0,!!{}则是true,用+号做强制转换,变成数值即为1。

以此类推:

2=(+!!{})+(!!{})

3=(+!!{})+(!!{})+(!!{})

111=+((+!!{})+[]+(+!!{})+(+!!{}))

第三种写法:

var a=266119^266118;

console.log(a);

JS奇淫技巧:数值的七种写法_异或运算_02

即:将异常运算的结果,等于我们使用的数值。

这也就意味着,同一个数,比如1,可以有多种异或写法,比如:

var a=596219^596218;

var a=115812^115813;

第四种写法:

var a = function (s, h) {

return s ^ h;

}(719028, 719029);

console.log(a);

JS奇淫技巧:数值的七种写法_构造函数_03

也就是把第三种写法中的异或运算变成函数,将异或的两个数以参数的形式传入,在函数中运算并返回数值结果。

第五种写法:

把第三种写法中的亦或运算转成AST(抽象语法树)。

var a = ast({"type":"File","program":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"BinaryExpression","left":{"type":"NumericLiteral","value":115812},"operator":"^","right":{"type":"NumericLiteral","value":115813}}}]}});

console.log(a);

JS奇淫技巧:数值的七种写法_异或运算_04

变成AST之后,还得带一段执行AST的代码,也就是AST的解释器。

当然,这里是简单的仅解析异或运算的解释器:(AST解释器的雏形)

function ast(node) {

if(node.type == "File"){

return ast_excute(node.program);

}

if(node.type == "Program"){

return ast_excute(node.body[0]);

}

if(node.type == "ExpressionStatement"){

return ast_excute(node.expression);

}

if(node.type == "BinaryExpression"){

var left_value = node.left.value;

var right_value = node.right.value;

var operator = node.operator;

if(operator == "^"){

return left_value ^ right_value;

}

}

}

此操作,等于将异或运算代码编译为AST,再带了一个AST解释器运行它。

第六种写法

Eval的使用。

直接的写法:

var a = eval(1);

console.log(a);

JS奇淫技巧:数值的七种写法_构造函数_05

Eval的变形写法:

var a = window[(14).toString(32)+(31).toString(32)+(10).toString(32)+(21).toString(32)](1); console.log(a);

JS奇淫技巧:数值的七种写法_异或运算_06

对方法四的代码做升级,也可加入eval(238, 238, 238); opacity: 0.6;">

var a = function (s, h) {

return eval(String.fromCharCode(115, 32, 94, 32, 104));

}(678405, 678404);

console.log(a);

JS奇淫技巧:数值的七种写法_构造函数_07

即:把return s ^ h用eval(238, 238, 238); opacity: 0.6;">

var a = [].constructor.constructor("return 1")();

console.log(a);

JS奇淫技巧:数值的七种写法_js代码_08

升级一下,对return语句进行编码以隐藏关键字:

var a = [].constructor.constructor("\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0031")();

console.log(a);

JS奇淫技巧:数值的七种写法_构造函数_09

再升级,将constructor字符也隐藏:

var a = []["\u0063\u006f\u006e\u0073\u0074\u0072\u0075\u0063\u0074\u006f\u0072"]["\u0063\u006f\u006e\u0073\u0074\u0072\u0075\u0063\u0074\u006f\u0072"]("\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0031")();

console.log(a);

JS奇淫技巧:数值的七种写法_js代码_10

还有更复杂的写法:

var $ = ["\u0061", "\u0062", "\u0063", "\u0064", "\u0065", "\u0066", "\u0067", "\u0068", "\u0069", "\u006a", "\u006b", "\u006c", "\u006d", "\u006e", "\u006f", "\u0070", "\u0071", "\u0072", "\u0073", "\u0074", "\u0075", "\u0076", "\u0077", "\u0078", "\u0079", "\u007a", "\u0028", "\u0029", "\u0027", "\u0022", "\u005b", "\u005d", "\u002e"];

var a = [][$[443650 ^ 443648] + $[169829 ^ 169835] + $[338738 ^ 338751] + $[745099 ^ 745113] + $[847761 ^ 847746] + $[986395 ^ 986378] + $[591407 ^ 591419] + $[989467 ^ 989465] + $[820242 ^ 820225] + $[848420 ^ 848426] + $[782593 ^ 782608]][$[972307 ^ 972305] + $[406834 ^ 406844] + $[838220 ^ 838209] + $[317151 ^ 317133] + $[799896 ^ 799883] + $[655841 ^ 655856] + $[333562 ^ 333550] + $[745730 ^ 745728] + $[843076 ^ 843095] + $[151776 ^ 151790] + $[832229 ^ 832244]]("\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0031")();

console.log(a);

JS奇淫技巧:数值的七种写法_构造函数_11

这个方法的原理,在之前的文章《JS奇淫技巧:alert有几种写法?》一文中有详细讲解,有兴趣的朋友可以去翻看那篇文章。

以上所述技术,由JShaman团队提供,JShaman是专业的JS代码混淆加密服务提供方,本文实现的功能大多数已在JShaman官网提供。

JS奇淫技巧:数值的七种写法_异或运算_12

到此时,还记的本文的标题吗?

请注意:

[][$[443650 ^ 443648] + $[169829 ^ 169835] + $[338738 ^ 338751] + $[745099 ^ 745113] + $[847761 ^ 847746] + $[986395 ^ 986378] + $[591407 ^ 591419] + $[989467 ^ 989465] + $[820242 ^ 820225] + $[848420 ^ 848426] + $[782593 ^ 782608]][$[972307 ^ 972305] + $[406834 ^ 406844] + $[838220 ^ 838209] + $[317151 ^ 317133] + $[799896 ^ 799883] + $[655841 ^ 655856] + $[333562 ^ 333550] + $[745730 ^ 745728] + $[843076 ^ 843095] + $[151776 ^ 151790] + $[832229 ^ 832244]]("\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0031")();

这是数值1。

这便是JS代码混淆加密的魅力,让别人无法看懂你的代码!让他人看到你的代码时,只能会发出“哇”的惊呼,而不敢轻易维护你的代码,无从下手啊。JS代码的安全性得到了大大的提升。

这些变态的写法,你能看懂几种呢?

或者你有什么新奇的手法?评论区交流一下吧。

标签:node,console,log,七种,奇淫,JS,u0072,var,写法
From: https://blog.51cto.com/jsjiami/5725713

相关文章

  • [JS]判断值为空
    constisEmpty=(val)=>{if(valinstanceofBlob)return!val.size//JSON.stringify(undefined)=>undefined//JSON.stringify(null)=>......
  • protobufjs 哪个版本最好用 : V6.7.0
    protobufjs哪个版本最好用:V6.7.0......
  • 【尚硅谷】Vue2.x组件化编码学习笔记--渐进式的JS框架
    Vue组件化编码​​一、使用Vue-cli创建项目​​​​1.1说明​​​​1.2创建Vue项目​​​​1.2.1如何修改端口以及自动运行​​​​1.3Vue-cli创建的项目的目录结构​​......
  • 在 asp.net core 中,更换使用 Newtonsoft.Json 并阻止驼峰化命名
    首先需要在引用nuget包:Microsoft.AspNetCore.Mvc.NewtonsoftJson然后在添加MVC的Service时,进行添加配置:builder.Services.AddControllersWithViews().A......
  • json字符串与json对象之间的转换
    一、认识json1.什么是json?JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式,用完全独立于编程语言的文本格式来存储和传输数据。(可以用......
  • '~'运算符在JS中的运用【代码简化】
    直接上代码:constarr=['a','b','c']constitem='a'我们想判断item在数组中是否存在,一般情况大家会这么写:if(arr.indexOf(item)>-1){   console.log('......
  • js中拼接字符串作为变量名后赋值
    js中有业务场景需要生成很多的变量,但是变量的名称是根据参数的不同而区分的。一般情况下我们会构建一个数组,然后通过数组下标的形式来操作。 意外发现一个方法可......
  • nodejs基础
    Node.js目的了解nodejs了解后端读取本地文件连接数据库的响应请求了解api接口文档检测是否有nodenode-v初始化项目切换到项目目录npminit-y使......
  • 富文本编辑器 quill.js 开发(一): 自定义工具栏
    前言在前端开发中,富文本是一种常见的业务场景,而本文要讲的就是富文本框架quill.js中的自定义工具栏的开发介绍Quill.js是一个具有跨平台和跨浏览器支持的富文本......
  • js中返回对象键名的方法
    一、通过forin循环方法letobj={a:1,b:2,c:3}letkey=null;for(keyinobj){console.log(key);//分别输出abc}二、通过Object.keysconstobj={a:1......