Bad regex causes code to fail

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

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

評価

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

調査の方向性

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

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

説明

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')); }

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

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

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

javascript-obfuscator/gulp-javascript-obfuscator のほかの issue

javascript-obfuscator/gulp-javascript-obfuscator の issue をすべて見る

似ている issue

JavaScript の issue をもっと見る

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

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