JSDefender メニュー

AG-TECH CORPAG-TECH CORP

ENGLISH

JSDefender for JavaScript

主要なJavaScriptフレームワーク、ランタイム、およびバンドルをフルサポート
Angular, NodeJS, React, React Native, Webpackなどに対応したJavaScript開発向け難読化ツール

アプリケーション保護と難読化 ~ JavaScript への適用

中間言語のバイナリ形式で配布される .NET や Java などの言語とは異なり、JavaScript アプリは通常ソース形式で配布されます。これは、実行環境にアクセスできるユーザー(ブラウザなど)にコードが直接見えることを意味します。そのため、攻撃者はブラウザーに組み込まれたデバッガーを使用して簡単にコードのステップ実行をしたり、他のツールを使用し、コードの脆弱性を静的解析することが可能になります。

JavaScript のリスク

  • JavaScript には、競合他社にコピーされたくないコードが含まれていますか?
  • ハッカーが認証の一部を回避したり、脆弱性を積極的に探したりする理由はありますか?
  • コードが不正な方法で改ざんされた場合、危害や評判が損なわれるリスクはありますか?
    (例:マルウェアの提供、フィッシングの有効化など)

JavaScript アプリを難読化して保護する必要

  • コードサイズを小さくするには(難読化の縮小の側面)
  • ハッカーがコードをリバースエンジニアリングすることをより困難にするため
  • ビジネスロジックと独自のアルゴリズムを隠すには
  • ハッカーがアプリケーションをデバッグして脆弱性を探すのをより困難にするため
  • 攻撃者がこれらの脆弱性を悪用するのをより困難にするため
  • 攻撃者がコードを変更または盗むことをより困難にするため

JavaScript に対し、保護および難読化の実例

<難読化-実行前>
BankABC.fundingSources.create('1xM821zkPUob1dmeNfhJedI1h5JkFRoC3Ja9Y8SLXp0EStArMT', {
routingNumber: getVal('routingNumber'), accountNumber: getVal('accountNumber'), type: 
getVal('type'), name: getVal('name')
}, function(err, res) {
console.log('Error: ' + JSON.stringify(err) + ' -- Response: ' + JSON.stringify(res));
});
customer_url = 'https://api-sandbox. BankABC.com/customers/AB993D36-3757-69C1-C3B4-
29727FB3111C'
customer = app_token.post("#{customer_url}/funding-sources-token")
$('form').on('submit', function() {
BankABC.configure('sandbox');
var token = ’X9Bv3NuSrML7Ke1mcGmCT0EpwW34GSmDaYP09UfCpeWde46Jug’;
var bankInfo = { routingNumber: $('routingNumber').val(), accountNumber: $('accountNumber').
val(), type: $('type').val(), name: $('name').val()  }
BankABC.fundingSources.create(token, bankInfo, callback);
return false;
});
function callback(err, res) {
var $div = $('
');
var logValue = { error: err, response: res };
$div.text(JSON.stringify(logValue));
console.log(logValue);
$('#logs').append($div);
}
<難読化-実行後>
var Acjgb$1=Ezchb("uf}wz}t@|fapv");var cemgb$1=Ezchb("pavrgv");var wZcgb$1=Ezchb('\x22k^+!\
x22ixCF|q\x22w~v]u{YvwZ\x22{&YxUA|P Yr*J+@_Kc#V@gRa^G');var Yaggb$1=Ezchb('a|fgz}t]f~qva');
var sWWfb=Ezchb('rpp|f}g]f~qva');var UXZfb=Ezchb('gjcv');var oTQfb=Ezchb('}r~v');var QUTfb=
Ezchb("\x7F|t");var QoHgb=Ezchb('Vaa|a)3');var sqKgb=Ezchb("`gaz}tzuj");var MlBgb=Ezchb('3>>
3Av`c|}`v)3');var onEgb=Ezchb("`gaz}tzuj");var Iivgb=Ezchb('{ggc`)<`r}wq|k=3Qr}xRQP=p|~ $&$>
%*P\x22>P Q\x27>!*$!$UQ \x22\x22\x22P');var kkygb=Ezchb("c|`g");var Efpgb=Ezchb("0hpf`g|
~vaLfa\x7Fn`|fapv`>g|xv}");var ghsgb=Ezchb('u|a~');var gBfhb=Ezchb("|}");var ICihb=Ezchb
('fq~zg');var cyZgb=Ezchb("p|}uztfav");function Ezchb(cWXdb){var EXaeb="";for(var ErOeb=0;
ErOebcWXdb.length;ErOeb++){EXaeb+=String.fromCharCode(cWXdb.charCodeAt(ErOeb)^0x13);}return 
EXaeb;}var YuTgb=Ezchb('`r}wq|k');var AwWgb=Ezchb('a|fgz}t]f~qva');var UrNgb=Ezchb("er\x7F");
var wtQgb=Ezchb('rpp|f}g]f~qva');var wNDhb=Ezchb("er\x7F");var YOGhb=Ezchb('gjcv');var sKxhb=
Ezchb("er\x7F");var ULAhb=Ezchb('}r~v');var oHrhb=Ezchb("er\x7F");var QIuhb=Ezchb("uf}wz}t@|
fapv`");var kElhb=Ezchb("pavrgv");var MFohb=Ezchb('wze3<-');var ofqeb=Ezchb("gvkg");var Qgteb
=Ezchb("`gaz}tzuj");var kckeb=Ezchb("\x7F|t");var Mdneb=Ezchb('0\x7F|t`');var gZdeb=Ezchb
("rccv}w");BankABC[Acjgb$1][cemgb$1](wZcgb$1,{routingNumber:getVal(Yaggb$1),accountNumber:
getVal(sWWfb),type:getVal(UXZfb),name:getVal(oTQfb)},function(gtReb,AoIeb){console[QUTfb]
(QoHgb+JSON[sqKgb](gtReb)+MlBgb+JSON[onEgb](AoIeb));});customer_url=Iivgb;customer=app_token
[kkygb](Efpgb);$(ghsgb)[gBfhb](ICihb,function(){BankABC[cyZgb](YuTgb);var cqLeb=X9Bv3NuSrML
7Ke1mcGmCT0EpwW34GSmDaYP09UfCpeWde46Jug;var wlCeb={routingNumber:$(AwWgb)[UrNgb](),account
Number:$(wtQgb)[wNDhb](),type:$(YOGhb)[sKxhb](),name:$(ULAhb)[oHrhb]()};BankABC[QIuhb][kElhb]
(cqLeb,wlCeb,Iaheb);return (NaN===NaN);});function Iaheb(YmFeb,siweb){var Ujzeb=$(MFohb);var 
UDmfb={error:YmFeb,response:siweb};Ujzeb[ofqeb](JSON[Qgteb](UDmfb));console[kckeb](UDmfb);
$(Mdneb)[gZdeb](Ujzeb);}

JSDefender for JavaScript は、高度な難読化と保護技術を使用して、アプリの改ざん、悪用、データの盗難から保護します。

主な機能

  • 名前の変更
    ・ローカル変数の名前を複雑な記号に置き換えるなどわかりづらく変更する。
    ・False と True リテラルを別の式に変換。
    ・整数リテラル(定数)をわかりづらい式に変換。
    ・すべての整数リテラルを特定の基数(2進法、10進法、16進法、または 8進法)に変換。
    ・直接的なプロパティアクセスを間接的なプロパティアクセスに変換。
  • 文字列の暗号化
    ・文字列を変数に置き換えるなど暗号化する。
  • 制御フローの難読化
    ・不要コードの挿入やロジックの複雑化。
  • ドメインのバインド
    ・JavaScript コードを特定のドメインにバインド。これにより、コードが特定のドメインと一致しない場合、動作を中断させる。

他のソリューションと比較した優位点

  • 難読化のために、保護されていないコードを提出する必要がないこと。
  • オープンソースツールとは異なり、高レベルの品質と一流のサポートを提供。

製品について

評価版をご用意しておりますので、ぜひお試しください。
また、本製品について、デモンストレーションの希望や質問等ありましたら製品担当までお気軽にお問合せください。

Contactお問い合わせ

お気軽にお問い合わせください。

お問い合わせ
必須会社名

個人のお客様は「個人」と入力してください。

必須お名前
必須メールアドレス
必須メールアドレス(確認)
必須ライセンス ありなし
ダウンロード目的