精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何讓別人看不懂你的 JS 代碼?

開發(fā) 前端
JavaScript的編碼風(fēng)格有時候可以讓們的代碼更難閱讀和逆向,同時也能租網(wǎng)一些惡意爬蟲和自動化分析。天我就帶大家來看看還有哪些其他能讓 JavaScript 代碼變得難以分析的代碼混淆技術(shù)。Web安全

大家好,我是 ConardLi。

我們在上周的文章中一種奇特的 JavaScript 編碼風(fēng)格:Get 一種可以用來裝逼的 JavaScript 編碼風(fēng)格,引起了廣大網(wǎng)友的熱議。

這是實際上屬于一種代碼混淆技術(shù),可以讓們的代碼更難閱讀和逆向,同時也能租網(wǎng)一些惡意爬蟲和自動化分析。天我就帶大家來看看還有哪些其他能讓 JavaScript 代碼變得難以分析的代碼混淆技術(shù)。

我們以下面這段代碼為例:

console.log("ConardLi",666);

通過一些轉(zhuǎn)換,它可以變成下面這個樣子:

圖片

怎么做到的呢?我們一起來看一下~

十六進(jìn)制字符串編碼

我們嘗試去 Javascript Obfuscator? 這個網(wǎng)站,選中 Encode Strings 復(fù)選框,將得到下面的代碼:

console["\x6C\x6F\x67"]("\x43\x6F\x6E\x61\x72\x64\x4C\x69\x20"+ 666)

它的原理很簡單,就是將字符串的每個 ASCII? 字符轉(zhuǎn)換為十六進(jìn)制形式(將函數(shù)調(diào)用改為用括號的形式,例如 console.log? -> console['log'] 在代碼混淆中也是相當(dāng)常見的做法),這就是最簡單的混淆了,但是只能騙騙小白,我們可以輕易的反解:

這種技術(shù)還有一些其他變體,比如用 unicode 編碼替換字符。

https://javascriptobfuscator.com/Javascript-Obfuscator.aspx

字符串?dāng)?shù)組映射

還是在上面的網(wǎng)站,我們選中 Move Strings 這個選項,得到的代碼是下面這樣的:

var _0x8925=["\x43\x6F\x6E\x61\x72\x64\x4C\x69\x20","\x6C\x6F\x67"];
console[_0x8925[1]](_0x8925[0]+ 666)

多了個字符串?dāng)?shù)組,通過在不同索引處引入數(shù)組來間接使用這些字符串。

死代碼注入

死代碼其實指的就是一些無法訪問的代碼,我們可以在原本的代碼上額外注入一些永遠(yuǎn)無法訪問的代碼來讓代碼難以閱讀,但是同時也會讓代碼變得更大。這次我們嘗試一下 defendjs:

安裝:

$ npm install -g https://github.com/alexhorn/defendjs.git

我們嘗試創(chuàng)建一個 conardli.js 并且將上面的代碼放入這個文件,執(zhí)行下面的命令:

$ defendjs --input conardli.js --features dead_code --output .

得到了下面這一大坨代碼:

(function () {
function a(a, d) {
var b = new Array(0);;
var c = arguments;
while (true)
try {
switch (a) {
case 21309:
return;
case 792:
function e(a, b) {
return Array.prototype.slice.call(a).concat(Array.prototype.slice.call(b));
}
function f() {
var a = arguments[0], c = Array.prototype.slice.call(arguments, 1);
var b = function () {
return a.apply(this, c.concat(Array.prototype.slice.call(arguments)));
};
b.prototype = a.prototype;
return b;
}
function g(a, b) {
return Array.prototype.slice.call(a, b);
}
function h(b) {
var c = {};
for (var a = 0; a < b.length; a += 2) {
c[b[a]] = b[a + 1];
}
return c;
}
function i(a) {
return a.map(function (a) {
return String.fromCharCode(a & ~0 >>> 16) + String.fromCharCode(a >> 16);
}).join('');
}
function j() {
return String.fromCharCode.apply(null, arguments);
}
console.log('ConardLi', 666);
a = 21309;
break;
}
} catch (b) {
$$defendjs$tobethrown = null;
switch (a) {
default:
throw b;
}
}
}
a(792, {});
}())

代碼很大,其實仔細(xì)分析就會發(fā)現(xiàn)其余插入的代碼都是無法運(yùn)行的:

最頂層包了一個 IIFE?,然后有一個 a? 函數(shù),a、b? 兩個參數(shù)。調(diào)用 a? 函數(shù)時只傳入了第一個參數(shù) 792,然后就會發(fā)現(xiàn) a 函數(shù)里有個 switch? 語句,只會執(zhí)行到第二個 case,里面是這樣的語句:

e、f、g、h、j、i 這幾個函數(shù)都是沒有調(diào)用的,所以只會執(zhí)行最后的 console.log('ConardLi', 666); 語句...

https://github.com/alexhorn/defendjs

作用域混淆

我們將代碼還原回去,重新執(zhí)行 defendjs? 的 scope 能力:

$ defendjs --input conardli.js --features scope --output .
(function () {
{
{
function b(a, b) {
return Array.prototype.slice.call(a).concat(Array.prototype.slice.call(b));
}
function c() {
var a = arguments[0], c = Array.prototype.slice.call(arguments, 1);
var b = function () {
return a.apply(this, c.concat(Array.prototype.slice.call(arguments)));
};
b.prototype = a.prototype;
return b;
}
function d(a, b) {
return Array.prototype.slice.call(a, b);
}
function e(b) {
var c = {};
for (var a = 0; a < b.length; a += 2) {
c[b[a]] = b[a + 1];
}
return c;
}
function f(a) {
return a.map(function (a) {
return String.fromCharCode(a & ~0 >>> 16) + String.fromCharCode(a >> 16);
}).join('');
}
function g() {
return String.fromCharCode.apply(null, arguments);
}
}
var a = [];
console.log('ConardLi', 666);
}
}())

這個可能看起來像是前面的一個簡單版本,但是有一個關(guān)鍵的區(qū)別:它引入了多個具有重復(fù)標(biāo)識符的詞法作用域。例如,a? 可能是最內(nèi)層作用域中第一個函數(shù)的參數(shù),也可以是第二個函數(shù)中的變量,甚至可以是與我們的 conaole.log 語句相同作用域中的變量。在這個簡單的示例中,很容易看穿,因為最內(nèi)層范圍內(nèi)的任何函數(shù)都不會在任何地方被調(diào)用,但是,現(xiàn)實的業(yè)務(wù)代碼往往是很復(fù)雜的,混淆后就不那么容易看穿了。

字符編碼

還是使用 defendjs ,對我們的代碼執(zhí)行下面的命令:

$ defendjs --input conardli.js --features literals --output .

得到下面的代碼:

(function () {
function c() {
var c = arguments;
var b = [];
b[1] = '';
b[1] += a(67, 111, 110);
b[1] += a(97);
b[1] += a(114, 100);
b[1] += a(76, 105);
return b[1];
}
{
{
function e(a, b) {
return Array.prototype.slice.call(a).concat(Array.prototype.slice.call(b));
}
function d() {
var a = arguments[0], c = Array.prototype.slice.call(arguments, 1);
var b = function () {
return a.apply(this, c.concat(Array.prototype.slice.call(arguments)));
};
b.prototype = a.prototype;
return b;
}
function f(a, b) {
return Array.prototype.slice.call(a, b);
}
function g(b) {
var c = {};
for (var a = 0; a < b.length; a += 2) {
c[b[a]] = b[a + 1];
}
return c;
}
function h(a) {
return a.map(function (a) {
return String.fromCharCode(a & ~0 >>> 16) + String.fromCharCode(a >> 16);
}).join('');
}
function a() {
return String.fromCharCode.apply(null, arguments);
}
}
var b = [];
console.log(d(c, b)(), 666);
}
}())

在這種情況下,硬編碼會被轉(zhuǎn)換成 Unicode 然后重新計算,這樣直接閱讀代碼就很難再直接看穿硬編碼的字符串了。

變量縮短

Mangling 是一種為了優(yōu)化和混淆目的而縮短變量和屬性名稱的轉(zhuǎn)換。比如下面的代碼:

let sixSixSix = 666;
let name = "ConardLi ";
console.log(name + sixSixSix);

我們使用 DefendJS? 的 mangling 功能:

$ defendjs --input conardli.js --features mangle --output .

得到的代碼是:

(function () {
var a = 666;
var b = 'ConardLi! ';
console.log(b + a);
}())

兩個變量都被重新命名了,在這個簡單的例子下還是很好分析的。但是如果是龐大的業(yè)務(wù)代碼,這會讓我們的代碼變得非常難以閱讀。

代碼壓縮

下面,綜合利用一下幾種技術(shù),執(zhí)行:

defendjs --input conardli.js --output . --features=control_flow,literals,mangle,compress

得到下面的代碼:

(function(){function a(d,g){var b=new Array(1);;var e=arguments;while(true)t


責(zé)任編輯:華軒 來源: code秘密花園
相關(guān)推薦

2020-03-30 16:45:06

代碼看不懂

2022-06-16 14:07:26

Java代碼代碼review

2021-12-09 11:59:49

JavaScript前端提案

2017-06-16 09:22:22

數(shù)據(jù)結(jié)構(gòu)算法鏈表

2022-12-27 10:02:38

MVCC機(jī)制Innodb

2019-12-09 08:29:26

Netty架構(gòu)系統(tǒng)

2022-02-07 09:05:00

GitHub功能AI

2020-03-06 11:30:08

JavaGitHub編程

2013-07-08 10:49:03

程序員代碼看懂代碼

2022-12-12 07:40:36

服務(wù)器項目Serverless

2024-10-14 12:56:28

2023-06-30 08:01:04

Reactuse關(guān)鍵詞

2019-10-24 08:56:38

語言代碼Java

2025-04-27 09:19:20

代碼GitHubAI

2024-12-09 08:00:00

C++代碼

2014-03-12 09:25:33

產(chǎn)品經(jīng)理Startup

2017-09-19 15:45:39

2019-11-18 14:45:13

代碼開發(fā)工具

2021-02-23 10:36:09

Linux命令kmdr

2020-11-06 08:36:04

UI設(shè)計規(guī)范iOS
點贊
收藏

51CTO技術(shù)棧公眾號

日韩欧美二区| 亚洲精品第一区二区三区| 性欧美精品男男| 亚洲国产精选| 午夜久久久久久| 日韩区国产区| www.我爱av| 日韩和的一区二区| 久久99精品国产99久久6尤物| av无码一区二区三区| 日本一区免费网站| 香港成人在线视频| 视频一区二区视频| 精品福利视频导航大全| 国产成人综合在线| 国产精品久久久久久搜索| 久久久久久久久久一区二区三区| 日韩免费电影在线观看| 51久久夜色精品国产麻豆| 波多野结衣家庭教师在线| 婷婷成人激情| 国产欧美日韩不卡免费| 国产精品一区二| 国产精品污视频| 老牛嫩草一区二区三区日本 | 国产手机免费视频| 国产午夜福利精品| 99久久99久久精品国产片果冰| 亚洲成人网av| 国产福利精品一区二区三区| 视频二区不卡| 亚洲成人久久影院| 九九久久九九久久| 免费黄网站在线播放| 国产亚洲欧美一区在线观看| 国产日韩欧美亚洲一区| 精品国产黄色片| 精品在线你懂的| 国产精品久久久久不卡| 视频一区二区三区四区五区| 亚洲伦理精品| 久久久久久久999| 国产精品久久久久久久精| 欧美韩日高清| 日韩午夜在线视频| 中文字幕在线观看二区| 国产免费久久| 亚洲性xxxx| 日韩女同一区二区三区 | 男人最爱成人网| 欧美日韩国产一中文字不卡| 成人免费看片'免费看| 丝袜国产在线| 黄色av电影在线观看| 日韩 欧美一区二区三区| 97av在线影院| 草久久免费视频| 亚洲一区二区毛片| 国产精品成人一区二区三区吃奶| www.色国产| 日韩av中文字幕一区二区| 国产精品激情av电影在线观看| 天天天天天天天干| 久久av资源网| 亚洲一区二区中文字幕| 性欧美18一19性猛交| 国产ts人妖一区二区| 国产青春久久久国产毛片| 视频污在线观看| 91在线观看视频| 日本电影一区二区三区| 国产高清在线看| 国产精品无圣光一区二区| 亚洲一区3d动漫同人无遮挡| 高h视频在线观看| 一区二区三区色| 日本欧美黄色片| 亚洲天堂av影院| 欧美天堂一区二区三区| 久久精品一卡二卡| 国产精品极品| 亚洲午夜av电影| 一区二区三区四区五区| 国产在线不卡| 国产精品久久久久久久久久小说| 亚洲图片在线播放| 国产91精品一区二区麻豆网站 | 夜夜春成人影院| 中文字幕亚洲无线码在线一区| 亚洲色偷偷综合亚洲av伊人| 国内久久视频| 国产精品9999| 亚洲国产精彩视频| 久久精品日产第一区二区三区高清版| 亚洲在线欧美| 国产福利电影在线播放| 欧美日精品一区视频| 91精品国产高清91久久久久久| 香蕉视频一区| 超在线视频97| 波多野结衣电影在线播放| 国产尤物一区二区| 欧美一区二区三区四区五区六区| av在线下载| 91精品办公室少妇高潮对白| 波多野结衣三级视频| 国产一区二区三区日韩精品 | 国产成人自拍网| 欧美日韩一区二区三区在线视频| 黄色网页在线免费看| 欧美性猛交xxxx免费看久久久| 国产毛片久久久久久| 精品精品99| 欧美孕妇性xx| 亚洲精品成av人片天堂无码| 国产精品三级视频| 国产免费成人在线| 成人av婷婷| 九九精品在线视频| 夜夜躁狠狠躁日日躁av| 国产网站一区二区三区| 欧美日韩在线一| 亚洲1区在线| 不卡av日日日| 国产又粗又黄视频| 欧美激情一区在线| 久久精品视频91| 欧美挤奶吃奶水xxxxx| 欧美国产日韩免费| av片免费播放| 亚洲欧洲日韩av| 午夜在线观看av| 黑人操亚洲人| 国产99在线|中文| 男女视频在线观看免费| 欧美日韩国产限制| 在线免费观看a级片| 国产精品扒开腿做爽爽爽软件| 亚洲free嫩bbb| 黄网页免费在线观看| 欧美日韩一本到| 国产在线免费av| 麻豆精品视频在线| 亚洲精品日韩精品| 成人国产精品入口免费视频| 国产小视频国产精品| 亚洲欧美综合另类| 久久丝袜美腿综合| 亚洲人成色77777| 欧美偷拍自拍| 国产日韩欧美日韩| a免费在线观看| 精品国产百合女同互慰| 日韩av综合在线| 97久久久精品综合88久久| 黄色一级视频片| 台湾佬综合网| 国产精品久久久久久久久久小说| www.av在线| 在线成人av影院| 国产探花在线播放| 不卡的电视剧免费网站有什么| 黄色国产一级视频| 亚洲欧美成人vr| 国产精品久久久久久久久影视 | 天天综合天天添夜夜添狠狠添| 久久久久久久久99精品大| 97伦理在线四区| 自拍一区在线观看| 中文字幕欧美精品在线| 国产又粗又猛视频| 亚洲大片免费看| 中国毛片在线观看| 精品亚洲免费视频| 日韩视频免费播放| 精品高清久久| 99国产在线| 成人午夜视屏| 欧美猛少妇色xxxxx| 偷拍25位美女撒尿视频在线观看| 91黄色免费观看| 欧美成人国产精品高潮| 91丨九色丨尤物| 久热精品在线播放| 雨宫琴音一区二区在线| 日韩理论片在线观看| 国产精品高清一区二区| 91成人在线视频| 蜜桃传媒一区二区三区| 色婷婷激情五月| 在线国产电影不卡| caoporn91| 久久久久久久综合色一本| 亚洲精品成人在线播放| 国产一区二区三区久久| 欧美日韩视频免费在线观看| 久久97久久97精品免视看秋霞| 国产精品亚洲美女av网站| 婷婷av在线| 中文字幕不卡av| 日批视频免费播放| 在线不卡的av| 少妇高潮av久久久久久| 亚洲人成网站精品片在线观看| 182在线视频| 国产一区三区三区| 精品久久久久av| 影音先锋国产精品| 国产又粗又爽又黄的视频| 国产一级成人av| 亚洲qvod图片区电影| 成人手机视频在线| 成人免费在线观看视频| 久久久免费精品视频| 欧美96在线| 国产婷婷色综合av蜜臀av| 性欧美videos另类hd| 欧美日韩精品高清| 伦av综合一区| 亚洲国产精品一区二区久久恐怖片| 91资源在线播放| www欧美成人18+| 中文字幕在线视频播放| 国产精品18久久久| 天堂av手机在线| 美国三级日本三级久久99| 女人另类性混交zo| 亚洲综合电影一区二区三区| 欧美大黑帍在线播放| 99九九热只有国产精品| 亚洲韩国在线| 欧美日韩国产免费观看视频| 蜜桃狠狠色伊人亚洲综合网站| 中文字幕日韩在线| 91麻豆蜜桃| 99精品中文字幕在线不卡| 亚洲一区二区免费| 懂色av色香蕉一区二区蜜桃| 国产在线观看一区二区三区| 香蕉成人影院| 国产精品自拍网| 欧美xxxx性| 91精品久久久久久久久不口人| 欧美日韩尤物久久| 国产精品日韩欧美| 欧美综合影院| 成人免费视频97| 日韩亚洲国产免费| 91香蕉亚洲精品| 日韩中文字幕| 国产精品国模大尺度私拍| 91亚洲无吗| 国产精品 日韩| 久久中文资源| 欧美精品一区二区视频 | 亚洲mv在线看| 91亚洲国产成人久久精品| 视频一区二区三区在线观看| 日韩欧美大片| 一级黄色片播放| 在线观看的日韩av| 无码专区aaaaaa免费视频| 久久久久久久波多野高潮日日| 欧美日韩亚洲一二三| 日韩影院免费视频| 中文字幕免费高清在线| 国产精品一区二区三区99| 亚洲美女在线播放| 久久婷婷成人综合色| 亚洲色图日韩精品| 亚洲免费视频成人| 三级黄色在线视频| 在线国产电影不卡| www.久久成人| 国产手机视频精品| 秋霞午夜理伦电影在线观看| 久久久久久久久国产精品| 成人免费短视频| 91社区国产高清| 欧美久久精品| 一个色的综合| 伊人久久大香线蕉综合热线| 日韩欧美黄色大片| 国产老肥熟一区二区三区| 欧美日韩久久一区二区| 久久国产精品系列| 欧美日韩中字一区| 韩国av电影在线观看| 亚洲人成电影网站色| 成人av黄色| 秋霞午夜一区二区| 精品中文字幕一区二区三区| 精品综合久久| 羞羞答答成人影院www| 成人av一级片| 国产精品一区二区在线观看网站| 色噜噜在线观看| 亚洲精品视频一区| 五月婷婷激情视频| 精品国产一区二区国模嫣然| 99re热久久这里只有精品34| 91精品国产高清久久久久久| 24小时成人在线视频| 久久精品二区| 国产精品久久| 中文字幕线观看| 久久九九影视网| 久久久久久久久久久97| 欧美日韩色一区| 你懂的在线播放| 久久久久国产精品www| 国产成人免费av一区二区午夜| 你懂的网址一区二区三区| 欧美视频亚洲视频| 中文字幕色网站| 国产丝袜欧美中文另类| 欧美不卡视频在线观看| 日韩午夜精品视频| 免费在线观看av网站| 国产成人极品视频| 日本亚洲不卡| h无码动漫在线观看| 国产精品乡下勾搭老头1| 久久精品色妇熟妇丰满人妻| 一本大道久久a久久综合婷婷| 欧美一级视频免费| 色综合色综合网色综合| 成人在线视频国产| 在线免费观看成人网| 强制捆绑调教一区二区| www.黄色在线| 欧洲一区二区三区在线| 黄色av网站在线免费观看| 奇米成人av国产一区二区三区| 91在线你懂的| 国产精品乡下勾搭老头1| 国产白嫩美女无套久久| 午夜精品123| 天天干,夜夜爽| 国产69精品久久久| 久久精品国产亚洲blacked| 欧美一级免费播放| 成人午夜精品一区二区三区| 九九九国产视频| 亚洲精品国产精品国自产在线| 136福利第一导航国产在线| 国产亚洲二区| 国产日韩欧美一区在线| 9.1成人看片免费版| 色999日韩国产欧美一区二区| 国产高清在线观看| 国产欧美亚洲精品| 91精品成人| 女性生殖扒开酷刑vk| 亚洲国产aⅴ天堂久久| 黄色小视频免费在线观看| 国内外成人免费激情在线视频网站| 哺乳一区二区三区中文视频| 青青草成人免费在线视频| 91老师片黄在线观看| 中文字幕+乱码+中文| 久久久成人精品视频| 日韩一区二区三区高清在线观看| 免费拍拍拍网站| 国产日韩亚洲欧美综合| 91在线公开视频| 国内精品久久久久久中文字幕| 午夜欧洲一区| 中文字幕亚洲乱码| 亚洲精品欧美在线| 手机看片国产1024| 国产精品成av人在线视午夜片| 欧美激情偷拍自拍| 国产一级二级av| 欧美性猛交xxxx富婆| 亚洲成a人v欧美综合天堂麻豆| 91观看网站| 每日更新成人在线视频| 国产精品免费在线视频| 精品国产亚洲在线| 成人黄色在线| 成年人深夜视频| 久久久久国色av免费看影院| 91超薄丝袜肉丝一区二区| 欧美大片免费看| 欧美精品一区二区三区精品| 中文字幕无码毛片免费看| 色综合一个色综合| 成人黄色网址| 久久精品国产精品青草色艺| 麻豆精品一区二区综合av| 日韩伦理在线视频| 久久精品91久久香蕉加勒比| 欧美午夜寂寞| 国产xxxxhd| 欧美视频一区二区三区四区| gogo高清午夜人体在线| 在线视频精品一区| 91麻豆国产自产在线观看| www.欧美国产|