JavaScriptコードで注意を払っていない場合は、それを複製したい人にとって、人生を簡単にしています。しかし、プログラミングプロセスが複数のクリック距離を超えている場合、攻撃者は競合他社のソフトウェアを複製することを好みます。 AWSまたはAzureの資格情報のためのインターネットをとるボットやその他の不正確さは通常難読化コードでは気にしません - 次のウェブサイトのログイン情報はビットコインを採掘するために使用することができ、より少ない労力で収穫することができます。
難読化JavaScriptは複雑であるために使用されます。しかし、このプロセスはここ数年の間に著しく簡単になりました。今日、中小企業でさえも、目的の目から彼らのコードを保護することができます。場合によっては、安全になることはNode.jsパッケージの呼び出しだけです。
次の手順では、一般的に使用されるJavaScript Obfuscatorを紹介し、その問題に関連する他のいくつかのトピックを調べます。
JavaScript obfuscatorはノードランタイム環境に住んでいます。使用されているバージョンを確認することから、起動しましょう。以下の出力は、以下のステップで使用されている本当に使用されるワークステーションで見つかったバージョンの状態を提供します。
Tamhan @ Tamhan-ThinkPad:〜$ node --version
v8.12.0
Tamhan @ Tamhan-ThinkPad:$ NPM - Version
6.4.1
JavaScript-obfuscatorは、ワークステーションのグローバルアセンブリキャッシュにインストールする必要があります。でNPMを起動します - パラメータでスーパーユーザー権利を提供することを忘れないでください - 実際の展開プロセスは数秒で行われるべきです。
Tamhan @ Tamhan-ThinkPad:〜$ sudo npm install -g
JavaScript-obfuscator.
[sudo] Tamhanのパスワード:
。 。 。
+ javascript-obfuscator @ 0.18.1
162の寄稿者から103パッケージを追加しました
4.4歳で
難読化をテストすると、「本当」のコードがある場合は最適です。そのため、小さなHTML Webページで始めましょう。それはworker.jsというJavaScriptファイルをロードし、ボタンを宣言し、小さなインラインスクリプトを含みます。ブラウザにロードされているときは、ボタンをクリックしてテキストボックスを表示します。
< html&gt。
< body>
< script src = "worker.js">&script>
<スクリプト>
関数worker(){
警告(Dothetrick())。
}
<&script&gt。
<ボタンタイプ= "ボタン" onclick = "ワーカー(
)」「>私をクリック!< / button>
< / body>
< / html>
Worker.jsは文字列変数で起動します。それらは古典的な攻撃対象です - ROMをデコードする場合、アセンブラは通常、文字列シーケンスを含むテーブルを探すことによって起動します。さらに、暗号化は、非常に「話す」という名前の変数のセットを使用して実行されます。
varsystring = "将来のPLCからこんにちは"
関数dothetrick(){
var chiffrat;
Chiffrat = ROT13(MYSTRING)。
戻るChiffrat。
これは暗号化101として意図されていないので、比較的単純な代替暗号を解決する必要がある。 ROT13は難しくありませんが、それは非常に冗談を言うことができます。 DSOARESの実装 「話す」変数のセットが付属しており、私たちの難読会器のためにたくさんの食べ物を提供しています。
関数ROT13(str){
var re =新しい正規表現( "[a-z]"、 "i");
var min = 'a'.ccharcodeat(0);
var max = 'z'.charcodeat(0);
var factor = 13;
var result = "";
str = str.touppercase();
(var i = 0; i
コードの難読化を実行することは単純です。 inv JavaScript-obfuscator. そして、現在の作業ディレクトリにあるすべてのファイルで機能するようにプログラムにドットを渡します。これは、著者のIBMワークステーションの結果を示しています。
Tamhan @ Tamhan-ThinkPad:〜/ futureobuscate /
コード$ javascript-obfuscator
ファイルをコンテナフォルダに直接Figeing Figing Fixingは非効率的です。名前を使用する前に名前を変更する必要があります。より良い方法での使用を含みます 出力 パラメータ。もしの場合 JavaScript-obfuscator. それを見つけると、プログラムは現在の作業ディレクトリにサブフォルダを生成し、そこでそのラバの結果をダンプします。
Tamhan @ Tamhan-ThinkPad:〜/ FutureoBuscate / Code $
JavaScript-obfuscator --output ./OBFUSCA
「Obfusca」フォルダに飛び込んで、このステップに付随する廃棄にあなたの目をごちそうに最新バージョンのworker.jsを開きます。コードのフォーマットはひどく乱づされました。ただし、外部呼び出しに必要なので、メソッド名は同じままでした。さらに、文字列は攻撃者がそれらを便利に収穫できるアレイに座っています。
var a0_0xb9e2 = ['こんにちは\ x20from \ x20future
\ x20plc '、' [a-z] '、' test '、' charcodeat ']。
JavaScript-obfuscatorには、String-Manglingアルゴリズムの選択が付属しています。 - ストリングアレイエンコーディング 。忘却を忘れないように、出力ファイルの難読化を忘れないようにするため、出力ディレクトリを各呼び出しの前に空にする必要があります。
Tamhan @ Tamhan-ThinkPad:〜/ FutureoBuscate / Code $
JavaScript-obfuscator - output ./OBFUSCA
- ストリングアレイエンコーディングbase64
この時点で、Obfuscatorの出力は異なります - ファイルの上部の配列は読みやすいです。しかし、これはすべての問題を解決しません。いくつかの難読化サイクルを実行すると、最終的にこのステップに付随するものと同様のマークアップになります。
VAR A0_0X31E5 = ['BGVUZ3RO'、 'DGVZDA =='、 '
znjvbunoyxjdb2rl '、' y2hcknvzgvbda == '、'
DG9VCHBLCKNHC2U = ']。
。 。 。
。 。 。
varsystring = 'hello \ x20from \ x20future \ x20plc'
Obfuscatorsは、高性能とコード保護の間の圧力場で機能します。問題に対処する1つの方法は、「ランダム化」要素を含みます。ランタイム高価な難読化はすべてのノードに追加されませんが、サブセットにのみ追加されます。ノードが影響を受けるかどうかを検出するかどうか、通常は乱数発生器を介して行われます。その感度を調整できます。
上記乱数発生器は、ゼロから1までの数字を出射する。数がしきい値より大きい場合、変更は行われません。設定 StringArraythreshold. 1つの値には、すべての数値がしきい値より小さいことを意味し、各文字列がマングルされるようにします。
Tamhan @ Tamhan-ThinkPad:〜/ FutureoBuscate / Code $
JavaScript-obfuscator - output ./OBFUSCA
- ストリングアレイエンコーディングBase64
- StringArraythreshold 1
JSNICEの利益などの分析ツールが小さいコードベースを持つこと。 JavaScript-obfuscatorがとにかくコードをASTに分割することを考えると、その場で「ゴミコード」を挿入することに対して何も話しません。この機能が重要な肥大を追加すると、開発者は次の横に表示されている2つのパラメータを介して手動でそれをアクティブにする必要があります。
【44】 - 拡大符号注入<登録商標) - 拡大符号噴射しきい値<数値&gt;両方のobfuscatorを実行しています - 拡張コード注入TRIM. そして - 拡大符号 - 射出閾値1 セットは約2.5KBのファイルサイズにリードします。コードを無くことを試みることは、ほとんどのTeutrosological JavaScriptのほとんど新しい壁につながります。
ASTにコードを破ることは、深い変換を可能にします。の設定を設定します ControlFlowFlattening TRUEの属性は、機能呼び出しを除去できることをプログラムに指示します。これにより、生成されたコードの拡張が大幅に拡大されます。結果は150%のパフォーマンスのヒットを受けることができます。
デバッグからのアーティファクトは、ハッカーへの世界最大の贈り物です。 console.log()とその友人への数が多くの呼び出しが、プログラムの内部に何が起こるかについての攻撃者の貴重な情報を与えることができます - 良い例が示されているスニペットになるでしょう:
関数dothetrick()
{
var chiffrat;
console.log( "暗号化の準備
chiffrat」);
Chiffrat = ROT13(MYSTRING)。
console.log( "Chiffrat"を返す);
戻るChiffrat。
以下のコマンドでプログラムを再難読化しようとすることができます。文字列キャッシング機能を無効にし、リダイレクトを介してコンソールロギングを無効にする必要があります。
Tamhan @ Tamhan-ThinkPad:〜/デスクトップ/
デッドスティッフ/ 2018nov / FutureoBuscate / Code $
JavaScript-obfuscator - output ./OBFUSCA
- ストリングアレイエンコーディングFALSE
--disableConsoleOutput true
obfuscatorおよびブラウザのベンダーは、デバッガ機能について長くそして苦い戦いを戦います。これにより、このステップに付随するプログラムフローの中断のコンソールのリダイレクトなど、「積極的な」メジャーが通常、長い間働きません。
DebugProtection:false、
DebugProtectionInterval:false
1つまたは2つのファイルを難読化するためのnode.jsパッケージ全体のインストールは無意味です。訪問 obfuscator.io. ブラウザに住んでいるプログラムのオンライン版にアクセスするには。メイン入力の下のチェックとコンボボックスを使用すると、上記の手順で概説したプログラムの動作を変更できます。
開発者チームは、さまざまなコマンドラインパラメータが互いに対話する方法を説明する比較的詳細な文書を維持しています。単に訪問してください ここに頭 上記の「短いヘルプ」出力があなたの目標を達成するのに役立ちません。
ETHチューリッヒは、でホストされている除肥度サービスを提供しています。 jsnice.org. 。それは、既存のコードで構成されたニューラルネットワークと知識データベースを使用して変数名を決定します。フォーマットを停電しながら、通常はかなりよく機能します。 PixelSizeTargetMax このステップに付随する暗号化ルーチンでは、かなり面白いとすることができます。
関数ROT13(PL $ 120){
/ ** @type {!regexp} * /
VAR INSUFFIURTREGEXP =新しい正規表現
(A0_0X395D( "0x1")、 "i"); var
PIXELSIZETARGETMAX = "A" ["CHARCODEAT"(0);
VAR ZEROSIZEMAX = "z" ["charcodeat"](0);
/ ** @type {number} * /
var minh = 13;
/ ** @type {string} * /
ar out = "";
この記事はもともとCreative Web Design Magazineの第283号に掲載されました ウェブデザイナー 。 ここで問題283を購入してください または ここでWeb Designerを購読してください 。
関連記事:
芸術は作成するだけではありません、それは共有についてもあります。あなたが誇りに思っている美しい仕事をしたら、他の人にも会うこと�..