精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

波多野结衣乳巨码无在线观看| 伊人精品在线视频| 丝袜久久网站| 欧美日韩一级大片网址| 久久亚洲a v| 日韩成人黄色| 国产老妇另类xxxxx| 九九视频这里只有精品| 少妇饥渴放荡91麻豆| 国产亚洲欧美日韩精品一区二区三区| 亚洲欧美色综合| 欧美另类一区| 精品人妻一区二区三区蜜桃 | 久久天堂av综合合色| 国模私拍在线观看| 日韩精品免费观看视频| 亚洲高清视频中文字幕| 中文字幕日韩一区二区三区不卡 | 亚洲精品一区二区网址| 91欧美一区二区三区| 奇米777日韩| 亚洲国产视频直播| 亚洲视频小说| 久蕉在线视频| 99视频热这里只有精品免费| 国产日韩中文字幕| aaa在线视频| 一本色道久久综合| 欧美俄罗斯乱妇| 最新日韩免费视频| 一区二区三区四区在线看| 欧美成人在线直播| 免费在线观看污网站| 欧美色网一区| 精品人伦一区二区三区蜜桃免费| avove在线观看| 欧美尤物美女在线| 国产免费观看久久| 欧洲一区二区在线 | 国产香蕉久久| 欧美性xxxxxxxxx| 久久在线中文字幕| 中文字幕伦理免费在线视频 | 国产精品变态另类虐交| 欧美久久影院| 九九视频这里只有精品| 国产67194| 亚洲区综合中文字幕日日| 中文字幕亚洲综合久久筱田步美| 久久久久亚洲av无码a片| 亚洲高清极品| 精品网站999www| 免费的av网站| 日韩精品免费一区二区夜夜嗨 | 国产精品手机在线观看| 动漫视频在线一区| 亚洲国产精品va在线看黑人动漫| 动漫av在线免费观看| 成人av综合网| 亚洲精品v天堂中文字幕| 人妖粗暴刺激videos呻吟| 国产精品久久久久av蜜臀| 亚洲爱爱爱爱爱| 538国产视频| 九九久久婷婷| 中文字幕久精品免费视频| 很污很黄的网站| 亚洲精品中文字幕乱码| 欧美日韩国产999| 国产午夜精品无码| 亚洲免费一区二区| 国产精品成人av在线| 中文字幕人妻色偷偷久久| 国产在线视频精品一区| 99久久久精品免费观看国产| 国产91久久久| 久久综合久久综合久久| 亚洲一区3d动漫同人无遮挡| www在线免费观看视频| 亚洲一级在线观看| 六月丁香婷婷在线| gogo大尺度成人免费视频| 精品国产91九色蝌蚪| 深爱五月激情网| 91精品国产91久久久久久黑人| 欧美黑人性生活视频| 久久国产视频一区| 精品在线播放免费| 精品国产一区二区三区麻豆小说 | 国产精品毛片一区二区在线看舒淇| 国产激情91久久精品导航| 久久99九九| 日本三级视频在线播放| 五月婷婷欧美视频| 一级黄色特级片| 久久国产精品色av免费看| 中文字幕精品在线视频| 精品一区免费观看| 蜜乳av一区二区| 国产乱人伦精品一区二区| 国产裸舞福利在线视频合集| 一区二区三区四区不卡在线| 日韩av在线综合| 欧洲精品99毛片免费高清观看| 日韩风俗一区 二区| 国产免费美女视频| 奶水喷射视频一区| 成人av资源网| 一级日本在线| 欧美日韩中文字幕在线| 免费高清视频在线观看| 精品国产乱码久久久久久果冻传媒 | 国产一区日韩一区| 国产精品劲爆视频| 少妇喷水在线观看| 亚洲狠狠丁香婷婷综合久久久| 国产淫片av片久久久久久| 深夜激情久久| 日韩在线国产精品| 五月天婷婷导航| 成人午夜免费电影| 麻豆映画在线观看| 久久久久伊人| 国产亚洲精品高潮| 六月丁香婷婷综合| jiyouzz国产精品久久| 天天想你在线观看完整版电影免费| 日韩欧美精品电影| 亚洲美女视频网站| 国产成人一区二区三区影院在线| 国产一区在线精品| 亚洲精品第一区二区三区| 欧美自拍电影| 亚洲欧美日本精品| 在线精品免费视| 久久先锋影音av| 99爱视频在线| 日韩丝袜视频| 欧美亚洲国产另类| 少妇一级淫片免费看| 午夜久久久影院| 丰满岳乱妇一区二区| 一区福利视频| 好吊妞www.84com只有这里才有精品| 1024在线播放| 日韩欧美123| 日本三级中文字幕| jlzzjlzz国产精品久久| 北条麻妃在线视频观看| 欧美大片网址| 国产91色在线免费| 国产香蕉视频在线看| 欧美性猛交一区二区三区精品| 久久成人激情视频| 免费xxxx性欧美18vr| 亚洲欧美日韩精品久久久| 欧美亚洲黄色| 欧美精品在线免费| 全部免费毛片在线播放一个| 精品成人乱色一区二区| 亚洲区免费视频| 日本欧美一区二区在线观看| 亚洲欧美99| 精品欧美视频| 国模吧一区二区| 日韩av成人| 欧美在线制服丝袜| 日本少妇高清视频| 成人成人成人在线视频| 欧美日韩亚洲第一| 久久在线电影| 国产精品久久久久久久久久久久午夜片 | 国产色a在线| 欧美日韩精品高清| 欧美人妻一区二区| 91偷拍与自偷拍精品| 欧美精品成人网| 亚洲国产老妈| 国产一区二区视频在线免费观看| 在线男人天堂| 精品国产一区二区三区久久久狼| 超碰在线观看99| 精品国产91久久久久久老师| 91视频免费在观看| 国产精品99久久不卡二区| 久久国产成人精品国产成人亚洲| 成人高清av| 肥熟一91porny丨九色丨| 欧美日韩视频网站| 欧美激情国内偷拍| 久香视频在线观看| 欧美一区二区啪啪| 成人午夜视频在线播放| 亚洲欧洲精品一区二区三区 | www.com欧美| 日韩欧美在线视频| 欧美日韩免费做爰视频| 国产欧美日韩麻豆91| www.啪啪.com| 精品一二线国产| 欧美 日韩精品| 国产精品99免费看| 一区二区三区国| 九九久久电影| 国产自产精品| 成人乱码手机视频| 日产精品久久久一区二区福利| www久久日com| 日韩在线观看网站| 国产中文字幕在线| 亚洲级视频在线观看免费1级| 在线观看国产小视频| 欧美午夜精品久久久久久人妖 | 欧美精选一区| 亚洲综合第一| 中文字幕伦av一区二区邻居| 成人看片视频| av一级久久| 国产情人节一区| 日韩制服一区| 欧美在线性视频| www视频在线观看| 久久伊人免费视频| 日本免费视频在线观看| 在线观看国产成人av片| 日本人妖在线| 日韩精品福利网站| 蜜臀久久久久久999| 日韩一区二区三区av| 国产精品久久久久毛片| 欧美色图12p| 国产成人av免费| 色香蕉久久蜜桃| 九九精品免费视频| 欧美视频一二三| 在线观看亚洲天堂| 天天综合色天天综合| 日韩三级免费看| 亚洲成人动漫精品| 国产精品自拍视频一区| 亚洲一区二区视频在线观看| 男人操女人的视频网站| 亚洲女子a中天字幕| 加勒比婷婷色综合久久| 又紧又大又爽精品一区二区| 精品爆乳一区二区三区无码av| 亚洲日韩欧美一区二区在线| 紧身裙女教师波多野结衣| 亚洲另类在线制服丝袜| 九九九在线视频| 亚洲成人动漫av| av黄色在线播放| 在线影院国内精品| 在线免费av片| 欧美一区二区三区免费| 亚洲av永久纯肉无码精品动漫| 精品福利av导航| 日本一区视频| 在线观看国产欧美| 精品51国产黑色丝袜高跟鞋| 久久综合久久88| 超碰在线最新网址| 69视频在线播放| 日韩毛片一区| 91啪国产在线| 精品五月天堂| 日日噜噜噜噜夜夜爽亚洲精品| 欧美成人激情| 波多野结衣av一区二区全免费观看| 亚洲成人原创| 五月婷婷深爱五月| 国产美女精品人人做人人爽| 国产精品日日摸夜夜爽| 久久一区二区视频| 神马久久精品综合| 午夜亚洲福利老司机| 夜夜爽妓女8888视频免费观看 | 亚洲欧美丝袜中文综合| 在线观看91久久久久久| 日韩伦理电影网站| 欧美最近摘花xxxx摘花| 欧美一级网址| 久久波多野结衣| 久久久影院免费| 国产真人做爰毛片视频直播| 日本在线观看不卡视频| 久久久久久久久久久影视| 2020国产精品久久精品美国| 少妇高潮在线观看| 疯狂欧美牲乱大交777| 怡春院在线视频| 亚洲国产精品推荐| 午夜激情视频在线观看| 97av在线视频| 国产激情一区| 欧美一区二区视频17c| 欧美日本一区二区高清播放视频| 黑森林福利视频导航| 国产福利精品一区二区| ass极品国模人体欣赏| 亚洲高清一区二区三区| 国产精品呻吟久久| 亚洲午夜久久久影院| 国内在线视频| 91久久国产综合久久91精品网站 | 国产一区一区三区| 性欧美暴力猛交另类hd| 激情久久综合网| 国产午夜精品一区二区三区四区| 不卡的免费av| 日韩欧美卡一卡二| 97在线观看免费观看高清| 91爱爱小视频k| 9l亚洲国产成人精品一区二三| 一区一区视频| 三级不卡在线观看| 精品熟女一区二区三区| 亚洲精品一二三| 夜夜狠狠擅视频| 国产亚洲欧洲黄色| 欧美xxx网站| 久久精品国产一区二区三区日韩| 亚洲手机在线| 日本女人黄色片| 亚洲欧美在线观看| 亚洲天堂网在线观看视频| 亚洲毛茸茸少妇高潮呻吟| av在线最新| 国产精品一区二区三区在线| 欧美天天在线| 国产吃瓜黑料一区二区| 亚洲色图视频网站| 国产又大又黄又爽| 日韩视频免费在线观看| 日韩色性视频| 久久久国产精华液999999| 美腿丝袜一区二区三区| 夜夜春很很躁夜夜躁| 欧美在线观看你懂的| 大乳在线免费观看| 国产精品久久久久av| 精品日韩免费| 九九热在线免费| 26uuu久久天堂性欧美| 天堂网中文字幕| 国产香蕉一区二区三区在线视频| 自拍偷拍欧美视频| 日韩av电影免费在线观看| 日本不卡123| 777777国产7777777| 7777精品久久久大香线蕉 | 欧美一区深夜视频| 中国av一区| 国产精品久久久毛片| 最新日韩av在线| av无码精品一区二区三区宅噜噜| 久久6精品影院| 日韩高清电影免费| 簧片在线免费看| 亚洲男人都懂的| 欧美性猛交 xxxx| 欧美一级在线播放| 欧美日韩在线播放视频| 中文字幕1234区| 亚洲一区二区av在线| 日韩精品视频无播放器在线看| 国产精品成人v| 欧美成人久久| 精品黑人一区二区三区观看时间| 色婷婷av一区二区三区软件 | 伊人色在线观看| 亚洲精品乱码久久久久久久久| 黑人精品一区二区| 欧美专区第一页| 国产精品久久久久久麻豆一区软件| 国产又粗又猛又爽又黄| 婷婷综合在线观看| av网在线观看| 不卡视频一区二区| 久久久亚洲人| 全程偷拍露脸中年夫妇| 亚洲精品久久久久久久久久久久 | 免费在线视频一区| 免费看一级一片| 亚洲欧美国产精品专区久久| 高清久久精品| 日韩欧美精品在线观看视频| 国产精品久久久久久久蜜臀 | 成人午夜免费在线视频| 久久婷婷国产综合国色天香| 国产又粗又长又大视频| 97视频在线免费观看| 国产精品99一区二区三| 黄色录像a级片| 91精品在线免费| 欧美日韩成人影院| 欧美成人精品免费| 中文字幕一区免费在线观看| 日韩av地址| 国产精品夜夜夜一区二区三区尤|