javascript-obfuscator / javascript-obfuscator/gulp-javascript-obfuscator

Bad regex causes code to fail

オープン
#27 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
JavaScript
スター
103
フォーク
37
PR マージ指標
30日以内にマージされた PR はありません

説明

When using these options:
`{
compact: false,
identifierNamesGenerator: 'mangled',
stringArray: true,
stringArrayEncoding: 'base64'
}`

This code:

`main();
function main() {
alert("Hello world!")
}`

Obfuscates as the following code, which fails due to the regex /=+$/:

`var a = ['SGVsbG8gd29ybGQh'];
(function (c, d) {
var e = function (f) {
while (--f) {
c['push'](c['shift']());
}
};
e(++d);
}(a, 0x6f));
var b = function (c, d) {
c = c - 0x0;
var e = a[c];
if (b['yZthrT'] === undefined) {
(function () {
var f = function () {
var g;
try {
g = Function('return\x20(function()\x20' + '{}.constructor(\x22return\x20this\x22)(\x20)' + ');')();
} catch (h) {
g = window;
}
return g;
};
var i = f();
var j = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
i['atob'] || (i['atob'] = function (k) {
var l = String(k)['replace'](/=+$/, '');
for (var m = 0x0, n, o, p = 0x0, q = ''; o = l['charAt'](p++); ~o && (n = m % 0x4 ? n * 0x40 + o : o, m++ % 0x4) ? q += String['fromCharCode'](0xff & n >> (-0x2 * m & 0x6)) : 0x0) {
o = j['indexOf'](o);
}
return q;
});
}());
b['aypUXW'] = function (r) {
var s = atob(r);
var t = [];
for (var u = 0x0, v = s['length']; u < v; u++) {
t += '%' + ('00' + s['charCodeAt'](u)['toString'](0x10))['slice'](-0x2);
}
return decodeURIComponent(t);
};
b['EhRyAC'] = {};
b['yZthrT'] = !![];
}
var w = b['EhRyAC'][c];
if (w === undefined) {
e = b['aypUXW'](e);
b['EhRyAC'][c] = e;
} else {
e = w;
}
return e;
};
main();
function main() {
alert(b('0x0'));
}`

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

記載された難読化オプションとサンプル JavaScript で失敗を再現し、その後、式 ` /=+$/ ` の周辺にある生成された base64 デコーダーを調べます。正規表現の問題に対処した後に生成された出力が正常に実行されることを、提供された例を完了確認として使用して確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
javascript
領域
tooling
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
42/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。