爬虫之矛---JavaScript基石篇5<JS混淆问题(2)>

news2025/1/9 1:30:35

前言:

继续上一篇:https://blog.csdn.net/m0_56758840/article/details/136633897

正文:

在这一篇讲混淆的时候,需要先清除一个概念!! 什么是Unicode~

Unicode编码

定义

Unicode是一种字符编码标准,用于表示世界上几乎所有的字符集。它为每个字符分配了一个唯一的标识符,称为码点(code point),可以用十六进制数表示。Unicode标准定义了不同字符的编码,并为字符赋予了唯一的编号,包括各种语言的字符、符号、标点符号等。

JavaScript(JS)支持Unicode主要出于以下几个原因:

  1. 多语言支持Unicode标准支持全球范围内的各种语言字符集,包括非欧洲语言字符集。由于JS是一种广泛应用于全球范围的编程语言,支持Unicode使得JS可以轻松处理多语言环境下的字符串,使其能够正确地解析、处理和显示各种字符。

  2. 一致性和互操作性Unicode作为全球公认的字符编码标准,各种编程语言和应用程序在处理和传递文本数据时都应该支持Unicode。通过JS支持Unicode,可以确保与其他编程语言和平台之间的数据交换和互操作性。

  3. 处理复杂文本内容:随着互联网和移动设备的发展,文本内容变得越来越丰富多样。支持Unicode使JS能够处理包含表情符号、特殊符号、复杂排版等复杂文本内容的字符串,提供更好的用户体验。

  4. 国际化和本地化:Unicode的支持也使得JS可以方便地进行国际化和本地化处理,例如根据用户的语言环境显示特定的文本、日期、货币等。

总之,JS支持Unicode是为了适应全球化的需求,保证JS可以正确处理各种语言和复杂文本内容。通过支持Unicode,JS可以更好地与其他编程语言进行协作,提供更强大和全面的字符处理能力。

Unicode的JS混淆

当涉及到Unicode的案例时,一个常见的例子是使用Unicode字符表示特殊符号或表情符号

假设我们想在字符串中使用一个笑脸表情符号,可以通过Unicode码点来表示。

例如,笑脸表情符号的Unicode码点是U+1F600。在JavaScript中,可以使用\u加上码点的十六进制形式来表示该字符。下面是一个使用Unicode表示笑脸表情符号的示例:

var smiley = "\u1F600";
console.log(smiley);

在这个示例中,我们使用"\u1F600"来表示笑脸表情符号,然后将其打印到控制台。当运行代码时,将会显示笑脸表情符号。

关于JavaScript混淆中的Unicode案例,常见的一种情况是使用Unicode转义序列来混淆代码。通过将源代码中的字符替换为Unicode转义序列表示的字符,可以增加代码的可读性和理解难度。

例如,假设原始代码中有一个变量名为"myVariable",我们可以将字母替换为相应的Unicode转义序列来混淆代码。下面是一个简单示例:

var \u006D\u0079\u0056\u0061\u0072\u0069\u0061\u0062\u006C\u0065 = 10;
console.log(\u006D\u0079\u0056\u0061\u0072\u0069\u0061\u0062\u006C\u0065);

在这个示例中,我们使用Unicode转义序列来表示"myVariable"变量名中的每个字符。尽管代码看起来很混乱,但依然可以正常工作并打印变量的值。

仅使用Unicode字符和转义序列进行混淆不足以提供真正的安全性,因为源代码仍然可以通过逆向操作进行还原。在实际情况中,需要使用更强大的混淆技术和工具来保护代码的安全性和保密性。

混淆AA

用到Unicode的特性,就会对js代码进行各种加密了! 例如

JS加密,JS 安全加密, AAencode 加密 —在线加密

在这个在线加密里面,我们随便测试一个js代码:

得到结果:

゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`sojson.com*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚) .゚ω゚ノ+ (c^_^o)+ (゚Д゚)[゚ε゚]+(o゚ー゚o)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚) .゚Θ゚ノ+ (゚Д゚) ['c']+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚o゚])(゚Θ゚))((゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚)+(゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚o゚]);

说明:

1.加密后基本不像是 JavaScript 代码,或者说根本就不是代码,甚至有点卡哇伊,缺点是压栈严重,不适合较大脚本加密。

2.如果加密之后用不了,有几种原因如下:,先加密再混淆效果最佳。再混淆效果如下:

  • JavaScript 代码不规范,如 if、for 循环没有花括号“{}”,代码没有以“;”结束,如 var a=0;var b=1;如果没有“;”那就是var a=0var b=1,明白了吗?
  • JavaScript 代码中有大量或者复杂的正则表达式,导致加密的过程中失效。
  • 变量,方法,JavaScript 脚本的顺序导致依赖关系的混乱,导致整个 JavaScript 运行失效。

混淆JJ

结果:

sojson=~[];/*sojson.com*/sojson={___:++sojson,/*sojson.com*/$$$$:(![]+"")[sojson],__$:++sojson,$_$_:(![]+"")[sojson],_$_:++sojson,$_$$:({}+"")[sojson],$$_$:(sojson[sojson]+"")[sojson],_$$:++sojson,$$$_:(!""+"")[sojson],$__:++sojson,$_$:++sojson,$$__:({}+"")[sojson],$$_:++sojson,$$$:++sojson,$___:++sojson,$__$:++sojson};sojson.$_=(sojson.$_=sojson+"")[sojson.$_$]+(sojson._$=sojson.$_[sojson.__$])+(sojson.$$/*sojson.com*/=(sojson.$+"")[sojson.__$])+((!sojson)+"")[sojson._$$]+(sojson.__=sojson.$_[sojson.$$_])+(sojson.$=(!""+"")[sojson.__$])+(sojson._=(!""+"")[sojson._$_])+sojson.$_[sojson.$_$]+sojson.__+sojson._$+sojson.$;/*sojson.com*/sojson.$$=sojson.$+(!""+"")[sojson._$$]+sojson.__+sojson._+sojson.$+sojson.$$/*sojson.com*/;sojson.$=(sojson.___)[sojson.$_][sojson.$_];sojson.$(sojson.$(sojson.$$+"\""+"\\"+sojson.__$+sojson.$$_+sojson.$$_+sojson.$_$_+"\\"+sojson.__$+sojson.$$_+sojson._$_+" "+sojson.$$__+sojson.$$$_+"\\"+sojson.__$+sojson.$$_+sojson._$$+"\\"+sojson.__$+sojson.$_$+sojson.___+"\\"+sojson.__$+sojson.$_$+sojson.__$+" \\"+sojson.$$$+sojson.$_$+" \\\"\\"+sojson._+sojson.$_$+sojson._$_+sojson.$_$_+sojson.___+"\\"+sojson._+sojson.$_$+sojson.$_$$+sojson.$$__+sojson.$$_+"\\"+sojson.__$+sojson.__$+sojson._$_+"\\"+sojson.__$+sojson.__$+sojson._$_+"\\\"\\"+sojson.$$$+sojson._$$+"\"")())(sojson={___:++sojson,$$$$:(![]+"")[sojson]});

说明:

1.加密后基本不像是 JavaScript 代码,或者说根本就不是代码,缺点是压栈很严重,js 很大去做加密可能内存溢出,所以适合核心功能加密

2.如果加密之后用不了,有几种原因如下:,先加密再混淆效果最佳。再混淆效果如下:

  • JavaScript 代码不规范,如 if、for 循环没有花括号“{}”,代码没有以“;”结束,如 var a=0;var b=1;如果没有“;”那就是var a=0var b=1,明白了吗?
  • JavaScript 代码中有大量或者复杂的正则表达式,导致加密的过程中失效。
  • 变量,方法,JavaScript 脚本的顺序导致依赖关系的混乱,导致整个 JavaScript 运行失效。

总结:

我们通过上面两个大概可以清除; 对于混淆JS,如果他是乱码,至少我们能够知道他是用什么方式进行混淆的 

  • 1.长得比较卡哇伊,有很多表情符号,那就是AA混淆
  • 2.有很多`$$` 符号的,大概率就是JJ混淆

当然,还有很多种不同的混淆方式~大家可以自己去试试看!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1512189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手机备忘录可以设置密码吗 能锁屏加密的备忘录

在繁忙的生活中,手机备忘录成了我随身携带的“小秘书”。那些关于工作的灵感、生活的琐事,甚至深藏心底的小秘密,都被我一一记录在里面。然而,每次当手机离开我的视线,或者需要借给他人使用时,我总会心生担…

使用Anaconda创建Python指定版本的虚拟环境

由于工作的需要和学习的需要,需要创建不同Python版本的虚拟环境。 比如zdppy的框架,主要支持的是Python3.8的版本,但是工作中FastAPI主要使用的是3.11的版本,所以本地需要两套Python环境。 决定使用Anaconda虚拟环境管理的能力&…

【Web世界探险家】打开Web世界的大门

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ &…

2024 年 2 月 NFT 行业动态:加密货币飙升,NFT 市场调整

作者:stellafootprint.network 数据来源:NFT 研究页面 - Footprint Analytics 2024 年 2 月,加密货币与 NFT 市场显现出了复杂性。该月,NFT 领域的交易量达到 12 亿美元,环比下降了 3.7%。值得关注的是,包…

鸿蒙原生应用元服务开发-WebGL网页图形库开发无着色器绘制2D图形

无着色器绘制2D图形 使用WebGL开发时&#xff0c;为保证界面图形显示效果&#xff0c;请使用真机运行。 此场景为未使用WebGL绘制的2D图形&#xff08;CPU绘制非GPU绘制&#xff09;。开发示例如下&#xff1a; 1.创建页面布局。index.hml示例如下&#xff1a; <div class…

【Spring】学习Spring框架那点小事儿

Spring作者&#xff1a;Rod Johnson Rod Johnson 是一位软件开发人员和作家&#xff0c;他在软件开发领域有着广泛的影响力。他出生于澳大利亚&#xff0c;拥有计算机科学和音乐双学位&#xff08;能写出有优雅的代码一定有艺术细胞&#xff09;。 Rod Johnson 在 2002 年出版…

【Vuforia+Unity】一个简单AR识别图像弹出按钮播放暂停视频

场景搭建 2.按钮播放视频这部分写一个按钮回调函数即可 3.控制视频的代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Video;public class videomanager : MonoBehaviour {// 这个脚本实现按钮控制VIDEO播放GameO…

机试:最大子序列的和

问题描述: 算法思想: 若第(i-1)个序列的小于0,则第i个序列的最大值为nums[i]; 若第(i-1)个序列的小于0,则第i个序列的最大值为max(i-1) nums[i]; 如果max(i-1)>0,max(i)max(i-1)Nums(i) 如果max(i-1)<0,max(i)Nums(i)代码示例: #include <bits/stdc.h> //该算法…

Scrapy 爬虫框架

网络爬虫框架scrapy &#xff08;配置型爬虫&#xff09; 什么是爬虫框架&#xff1f; 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合爬虫框架是个半成品&#xff0c;帮助用户实现专业网络爬虫 scrapy框架结构("52"结构) spider: 解析downloader返回的响…

unity3d Animal Controller的动物组件使用明天继续

控制器介绍 动物脚本负责控制动物的所有运动逻辑.它管理所有的动画师和刚体参数,以及所有的状态和模式,动物可以做。 动物控制器 是一个动画框架控制器,根动或到位,为任何生物或人形。它利用刚体与物理世界的互动和动画师的玩动画。 States States 是不互相重叠的动画。例如…

算法刷题Day7 | 454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和

目录 0 引言1 四数相加II1.1 使用map解题1.2 总结 2 赎金信2.1 我的解题 3 三数之和3.1 双指针法 4 四数之和4.1 双指针题解 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;算法刷题Day7 | 454.四数相加II…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-4、线条平滑曲面(修改颜色)去除无效点

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

redis 中的八大问题

前言 在分布式系统中&#xff0c;由于redis分布式锁相对于更简单和高效&#xff0c;成为了分布式锁的首先&#xff0c;被我们用到了很多实际业务场景当中。 但不是说用了redis分布式锁&#xff0c;就可以高枕无忧了&#xff0c;如果没有用好或者用对&#xff0c;也会引来一些意…

查找和最小的 K 对数字

优质博文IT-BLOG-CN 一、题目 给定两个以 非递减顺序排列 的整数数组nums1和nums2, 以及一个整数k。 定义一对值(u,v)&#xff0c;其中第一个元素来自nums1&#xff0c;第二个元素来自nums2。 请找到和最小的k个数对(u1,v1), (u2,v2) ... (uk,vk)。 示例 1: 输入: nums1 […

PTA L2-007 家庭房产

给定每个人的家庭成员和其自己名下的房产&#xff0c;请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤1000&#xff09;&#xff0c;随后N行&#xff0c;每行按下列格式给出一个人的房产&#xff1a; …

k8s中calico网络组件部署时一个节点一直处于Pending状态

k8s中calico网络组件部署时一个节点一直处于Pending状态 故障截图 故障排查思路&#xff0c;通过describe查看具体原因 ~]# kubectl describe pod calico-node-pzlfv -n kube-system通过describe查看得知报错 Warning FailedScheduling 58s (x23 over 23m) default-sche…

pytest生成allure的报告

首先要下载安装配置allure allure serve ./outputs/allure_report 可以生成html的文件自动在默认浏览器中打开

【NR 定位】3GPP NR Positioning 5G定位标准解读(十六)-UL-AoA 定位

前言 3GPP NR Positioning 5G定位标准&#xff1a;3GPP TS 38.305 V18 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;…

Java输出流之BufferWriter类

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

<AI大模型学习>——《人工智能AI》

&#xff1c;AI大模型学习&#xff1e;——《人工智能AI》 一、AI大模型通识 1.AI介绍 人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;英文缩写为AI。 是新一轮科技革命和产业变革的重要驱动力量&#xff0c; 是研究、开发用于模拟、延伸和扩展人的智…