minify と難読化の違いについて
昨今のフロントエンド開発環境では、実行用の JavaScript に変換してから公開するのが主流になっています。この変換処理をビルドと呼んでいます。
JavaScript のビルド工程は、bundle、transpile、minify の 3 種類に分かれています。最近、ビルド工程の 1 つの minify と、難読化との違いを聞かれることがありました。確かに minify がソースコードの可読性を下げていることから、難読化としての役目を果たしているように見えますが、実際のところはどうなのでしょうか。
このブログ記事では、minify と難読化の違いについて説明します。
■minify の目的
minify の目的は、パフォーマンスを向上させることです。ファイル内の不要な文字をすべて削除したり、変数名を短い名前に置換したりすることにより、(文字数が少なくなったため)ファイルが「軽量」になり、ブラウザがファイルをダウンロードして処理する速度が大幅に向上します。
変数名を短い名前に置換することによりソースコードの可読性が下がることから、副次的にソースコードの解析を防ぐことにもつながります。
■難読化の目的
難読化の目的は、元のソースコードを他の人から隠すことです。他の人がコードを理解するのを妨げるために、コードをできるだけ読みにくくするように変換を行います。
実際のメソッド命令またはメタデータを変更する可能性がありますが、プログラムの機能 を変更することはありません。代表的な難読化手法には、制御フローの変更、文字列リテ ラルの変換、ローカル宣言の変更が含まれます。
■minify 処理と難読化の比較
以下のソースコードに対して、変換処理を行います。
let company_name = ‘エージーテック’; console.log(`こんにちは, ${company_name}!`); |
1. minify処理によって変換した場合
minify 処理によって変換をした結果になります。
let n=’エージーテック’;console.log(`こんにちは, this is ${n}!`); |
すべてのスペース、余分な行、または短い変数名に変換されています。これによってサーバーからの転送量が小さくなり、メモリに読み込んで実行する時間が短くなります。また、変数名が置換されたことにより機能が予測できなくなりましたが、文字列リテラルはそのままです。
2. JSDefenderによって変換した場合
続いて JSDefender を使用した変換結果になります。
let U2y9;!function(){const MpcN=Array.prototype.slice.call(arguments);return eval("(function g1Lj(PgTb){const rOVb=z0Cc(PgTb,Piqc(g1Lj.toString()));try{let LbOb=eval(rOVb);return LbOb.apply(null,MpcN);}catch(nJQb){var nLnc=(0x21786%3);while(nLnc<(80176-0o234266))switch(nLnc){case (0o1000131%0x10013):nLnc=(0o204610-67854);{console.log(\'Error: the code has been tampered!\');return}break;case (0x75bcd15-0O726746425):nLnc=nJQb instanceof SyntaxError?(0o400065%65556):(0x40236%0o200157);break;}throw nJQb;}function Piqc(jGic){let Ldlc=1929918954;var fBdc=(0x40137%0o200101);{let H8fc;while(fBdc<(0o227720-77640)){switch(fBdc){case (0o1000467%65601):fBdc=(0o400342%0x10048);H8fc=(0x21786%3);break;case (0o600502%65616):fBdc=H8fc<jGic.length?(0O334664274-0x37368B9):(0o222460-0x124A8);break;case (0O334664274-0x37368B9):fBdc=(1011010-0O3666474);{Ldlc^=(jGic.charCodeAt(H8fc)*(15658734^0O73567354)+jGic.charCodeAt(H8fc>>>(0O73567354%6)))^554872396;}break;case (72559687&0O312111266):fBdc=(0o213154-0x1161A);H8fc++;break;}}}let bw8b=\"\";var D3ac=(0o600475%65611);{let D5Hc;while(D3ac<(0x20171%0o200152)){switch(D3ac){case (0O3153050563-0x19AC516B):D3ac=(0o203150-0x10616);D5Hc++;break;case (0x10BF4-0o205701):D3ac=(0O3153050563-0x19AC516B);{const fDKc=Ldlc%(0o400076%0x10012);Ldlc=Math.floor(Ldlc/(131146%0o200030));bw8b+=fDKc>=(0o203030-0x105FE)?String.fromCharCode((0o212120-70671)+(fDKc-(0x3006E%0o200034))):String.fromCharCode((131261%0o200056)+fDKc);}break;case (0o214450-0x118CC):D3ac=(0o400336%0x10046);D5Hc=(0x21786%3);break;case (72916-0o216202):D3ac=D5Hc<(0O3153050563-0x19AC516B)?(0o206762-0x10DBF):(0o203042-66949);break;}}}return bw8b;}function z0Cc(byFc,vVxc){byFc=decodeURI(byFc);let XsAc=(0x75bcd15-0O726746425);let rQsc=\"\";var Tnvc=(0o210100-0x11020);{let vNp;while(Tnvc<(0x13ED0-0o237112)){switch(Tnvc){case (0o201356-0x102A3):Tnvc=(0o203650-67398);{rQsc+=String.fromCharCode(byFc.charCodeAt(vNp)^vVxc.charCodeAt(XsAc));XsAc++;var Xks=(0o210376-0x110A7);while(Xks<(0x302A4%0o200253))switch(Xks){case (0o400120%65563):Xks=(76946-0o225757);{XsAc=(0x21786%3);}break;case (262523%0o200111):Xks=XsAc>=vVxc.length?(68396-0o205422):(0o1001517%65707);break;}}break;case (69876-0o210266):Tnvc=vNp<byFc.length?(70036-0o210511):(0o1001242%65671);break;case (262240%0o200020):Tnvc=(72976-0o216322);vNp=(0x75bcd15-0O726746425);break;case (0o223110-0x125E6):Tnvc=(0o400322%65610);vNp++;break;}}}return rQsc;}})(\"E%05%13%09%0F%13%0E%0E%03KO%1C%0A%12%09%02%19%0A%09%09L.%1E-%03KO%1C%1E%02%13%14%1F%0DF@0%12WQZSA%1A%0A%12%09%02%19%0A%09%09L%04%12%22%03KO%1C%1E%02%13%14%1F%0DF2%167%0BIDH%11-%0B%08OHF%105%1D%01ONJ%0A)%0E%0ADN%1A%07%18%0D%05%13%05%08%09A(%15%20%09DN%1C%13%08%17%13%15%02GOJ68M%3C7L%3C%3C0H=L7::%3CF8;:7L%3C%3C08MFG%3C:%3C0JMODL%3C%3CFBM%3C1LOJF8M%3C1:%3CJ6%3EM%3C1:NHGK%05%20%0E%0AOHDJ%1B%01%19%09%04%15%04%0C%08G)7%14%0EEJ%1D%15%09%13%12%13%03C\'%3E%20%0AOHF%0C%3E/%03ONJ%1A%17#%0DDNL%20%3C%1B%0DOE%1A%01%14%03%00%12%0E%03%09G%06?%15%09OE%1C%15%04%19%16%14%09L%10-%06%02KOL%0B%17%12%0DEJM2%167%0BIDH/,%07%0AOH%10%05%13%09%0F%13%0E%0E%03C\'*%01%08OH%16%11%03%13%19%15%09AJ?%13W%5CRRF%10%05%13%09%0F%13%0E%0E%03C%05(%1C%08OH%16%11%03%13%19%15%09AE%17%1F%17%09%08%01AL8;N7LFJ6%3E;%1A9U%1EXP%18%1B%5C%0A%12%09%02%19%0A%09%09L%10-%06%02KO%1C%1E%02%13%14%1F%0DFOM%3C:J6%3EO%3CGFL:0HGL7:L@F8;:%11%01%12%0F%0E%17%0F%08%02G%3E*%07%0CNN%17%15%02%15%18%11%08GDO%10%058%0CNNEMOJLH=:GOLJ6H=:1%3CL:0%3EONELOJ68M%3C7FL:0HGL7::J6H=:1:L:0%3E=L7:::FBM%3C1::H%10%05%13%09%0F%13%0E%0E%03C%15%20%0D%08OH%16%11%03%13%19%15%09AEK%11%039%08OHDIN%10%082%08IDJOLDL%3C%3CFBM%3C1N%1A%07%18%0D%05%13%05%08%09A8+%02%08DN%1C%13%08%17%13%15%02GO%0E%03%10%0COEN%3C%06%095%0BOE:O8.5%0AOEN%1A%07%18%0D%05%13%05%08%09A8%014%08DN%1C%13%08%17%13%15%02GOIFBM%3C1LOJF8M%3C1:%3CJ6%3E;NEMO%12%1C%1A%0COENNJEH=%3CG%3C%3CJLH=:1L%3CJ6%3E;:G%3C:%3C6H=:1%3CL@F8;:1N%1A%07%18%0D%05%13%05%08%09A%1A%073%08DN%1C%13%08%17%13%15%02GOJ6%3EMFG%3C:JEHM%3CG%3C:%3C6H=:G%3C:%3CDJMOG%3C:JLH=:E%1A%01%14%03%00%12%0E%03%09G04(%09OE%1C%15%04%19%16%14%09L%144%1B%00KOL%0F(%17%0EEJM&!%0A%08IDH/%1E%20%09OHF*%1F+%02ONJ%1E%02)%08DNL%0E=%17%0BOEL&%0A%01%0FNNG.4%18%02KOL%1B-%00%0EEJM%14%0D(%08ID%1E%00%12%02%04%13%08%02%0DF%14%0D(%08ID%18%14%02%18%12%15%0FMKGF7:L:0J=LML%3C%3CFBM%3C1LFJ6%3E;%1A%0A%12%09%02%19%0A%09%09L*1$%02KO%1C%1E%02%13%14%1F%0DFOGFL:0HNLG%3CL:0%3E=L7::HDINLG%3CL:0%3E=L7::HFKMO7L%3C:LH=:GFL:0%3EM%3CG%3C:%3C0%3EM%3C1N%3CJ68M%3C7L%3C%3C0H=L7::%3CF8;:7L%3C%3C08MFG%3C:%3C0%3EO%1A%0A%12%09%02%19%0A%09%09L%08?)%02KO%1C%1E%02%13%14%1F%0DFO%18%1E%17%04%02%05FO7:L:0JO%3CGFL:0HGL7:L@F8;:%11%01%12%0F%0E%17%0F%08%02G.2%14%0CNN%17%15%02%15%18%11%08GDOL:L8;:EL%3C%3CD8MFG%3C:%3C%10%05%13%09%0F%13%0E%0E%03C%0D2.%08OH%16%11%03%13%19%15%09AEH=:ELOI%1A%073%08DNNKE.0%22%03ONHD%1E%00%12%02%04%13%08%02%0DF*%18#%0BID%18%14%02%18%12%15%0FMK%11-%0B%08OHD87%3E\'%08OH0KO%1A9U%1EXC%1A%5BO%02%12%0B%0DP%5E%13%09%08%02%01%08%03%06%02NW%01%12%0F%0E%17%0F%08%02G%08%17*%0FNN%17%15%02%15%18%11%08G%0A%12%09%02%19%0A%09%09DN%1C%1CV%1E%00%12%02%04%13%08%02%0DF.%1D%1F%0BID%18%14%02%18%12%15%0FMKM%3C7L%3C:LH=:GFL:0%3EM%3CG%3C:%3C0H=:1%3CL:0%3E=LML%3C%3C0%3EOLDO6(%04%08NNEMO0$%0A%0DOENN%1C%0B%16%08%04%18%0E%08%0FM%08%15&%00ON%1A%1F%06%12%12%1E%09GI%19%1A%16%02%03%01GI6%3EM%3C1NN:FBM%3C1LFJ6%3EMFG%3C:JLH=:GFL:0%3E%1B%01%19%09%04%15%04%0C%08G)%09%15%0DEJ%1D%15%09%13%12%13%03CNOGO%3CJ68GL7:L@F8;:G%3CL:0%3E;:G%3C:H6H=:1NMI44/%0ADNNHFKML7L%3C%3C08M%3C1:JJLH=:E%1A%01%14%03%00%12%0E%03%09G%06%1D%16%0AOE%1C%15%04%19%16%14%09LO%10/%1F%08NNE%3C%00%05;%0ENN1O%22%17+%0DNNE%1A%01%14%03%00%12%0E%03%09G%20%06%0F%0AOE%1C%15%04%19%16%14%09L@;%14%5DSRTK%1A%01%14%03%00%12%0E%03%09G%02%00%0C%0AOE%1C%15%04%19%16%14%09LOF:0H=:E%3CL@F8;LML%3C%3C0%1E%00%12%02%04%13%08%02%0DF%04+%05%0AID%18%14%02%18%12%15%0FMKM%3C7L%3C:LH=:GFL:0%3EM%3CG%3C:%3C0H=:1%3CL:0%3E=LML%3C%3C0%3EOLDO6(%04%08NNEMO8&%09%09OENN%1C%0B%16%08%04%18%0E%08%0FM&.%02%01ON%1A%1F%06%12%12%1E%09G$%0F0%0BOEL*\'%0E%08NNG%04%0A%0E%01KOL%0B-%0F%0CEJ%1B%01%19%09%04%15%04%0C%08G5$1%0DEJ%1D%15%09%13%12%13%03CNL7%3CL:6HGL7::J6H=:1:L:0%3E=L7:::F8;:1NLIE2%09%11%06ONHGK?0%25%0AOHDJ%1B%01%19%09%04%15%04%0C%08G-%22%3E%0DEJ%1D%15%09%13%12%13%03C+)%1D%0AOHF%14$4%00ONJ%06%10\'%0BDNL%06\'%0B%0BOE%1A%01%14%03%00%12%0E%03%09G4%173%0AOE%1C%15%04%19%16%14%09LO2%03?%0CNNE%3C%00%05;%0ENN1O%107+%0ENNE%1A%01%14%03%00%12%0E%03%09G%16/0%0AOE%1C%15%04%19%16%14%09LO2)%09%0CNNE%3C68&%0CNN1ON%1C%1B%02%14G=%10-%0DP8NW%03VWQ%5DWVRIW%1FP%5DSUUEKOQ%02QVPZQSL%5BZR_UNKI%5D%0CPW%5CRWWHUSQ%5EVN%3CV%05%13%09%0F%13%0E%0E%03C%15%1E!%0BOH%16%11%03%13%19%15%09AEHM%3CG%3C:%3C6H=:1LOJF8M%3C1:%3CJ6%3E;NALFJ6%3EOLDLL:F8;:7L%3C%3C0HNLG%3CL:0%3E=L7::HDHNLD%3CL:6BM%3C1LFJ6%3E;L7L%3C%3C0%3E;L7:N:F8;:E%1A%01%14%03%00%12%0E%03%09G%12%3E%19%0BOE%1C%15%04%19%16%14%09LO%13%18%1D%06%09%01LO%3C%3CF8;NE%3CL@F8;:%11%01%12%0F%0E%17%0F%08%02G25.%0ENN%17%15%02%15%18%11%08GDL%3C%3CDHNOGFL:0HNLG%3CL:0%3E=L7::HDIN%0C9%25%08IDJO%1A%0A%12%09%02%19%0A%09%09L%087%15%00KO%1C%1E%02%13%14%1F%0DFOMF%3C%3CF8;N7LFJ6%3E;%1A%0A%12%09%02%19%0A%09%09L66%16%00KO%1C%1E%02%13%14%1F%0DFOGL%3CJ6%3E;%3CG%3C:%3C@HGL7:NJEKMFG%3C:JEHM%3CG%3C:%3C6H=:1NNKE6%14%25%06ONHD%1E%00%12%02%04%13%08%02%0DF%0C!%09%0AID%18%14%02%18%12%15%0FMKM%3C7L%3C:LH=:GFL:0%3EM%3CG%3C:%3C0H=:1%3CL:0%3E=LML%3C%3C0%3EOLDOLJ6H=:1%3CL:0%3EMOGL%3CJ6%3E;%3CG%3C:%3CDJLO=6%10%0CEJON%11%01%12%0F%0E%17%0F%08%02G*/%1C%0ENN%17%15%02%15%18%11%08GD%3E%12)%07KON76%3E*%02KO:DN%1A%07%18%0D%05%13%05%08%09A%0A)%0E%0ADN%1C%13%08%17%13%15%02GO4%1F!%0COENL:0%1E%00%12%02%04%13%08%02%0DF.\'%0C%0AID%18%14%02%18%12%15%0FMK/%16%14%0BOHDH=:%11%01%12%0F%0E%17%0F%08%02G.%044%0ENN%17%15%02%15%18%11%08G%1B-%00%0EEJM%00%1C%12%0BIDH3%1D%3C%0BOHF*-%0C%01ONJ,.%0B%08DNL%20%20%0E%09OEL%14%047%08NNG%00-%09%00KO%1A%0A%12%09%02%19%0A%09%09L%0C%00%03%03KO%1C%1E%02%13%14%1F%0DF&!%0A%08IDH\'*%01%08OHF%10%03=%07ONJ%0A)%0E%0ADN%1A%07%18%0D%05%13%05%08%09A(%015%0ADN%1C%13%08%17%13%15%02GO%12%089%0DOEN%3C04(%09OE:OH%10%05%13%09%0F%13%0E%0E%03C%01%03:%0AOH%16%11%03%13%19%15%09A%1E0%1C%0ADNL%02%22%13%09OEL*%15)%0FNNG%144%1B%00KOL%037%13%0CEJM%084/%08IDH%11%13)%0DOHF%08%15&%00ON%1C%0B%16%08%04%18%0E%08%0FM%22?+%01ON%1A%1F%06%12%12%1E%09GI%19%1A%16%02%03%01G@6%3EO%3CG%3C:%3C%10%15%07%15L%04%061%00%5E=O%5C%08VQ%5DRVP_BW%19%5CSVQYNKI_UTSUPBQ%02QVW%5CRRHAKV%1F_WU%22%5DFV%08%5EWWSXTOKDW%08U%5DRVU_BW%19%5CSV&*NKI%5D%0CTTYQQQ@S%1EV_&!PD%3E%5D%01%19%09%04%15%04%0C%08G%1B1!%0CEJ%1D%15%09%13%12%13%03CNLG%3CL:0%3E=L7::JEHM%3CG%3C:%3C6H=:1NJJLH=:ELOI(%0D%14%0BDNNKE.0%22%03ONHD%1E%00%12%02%04%13%08%02%0DF%3E;.%0AID%18%14%02%18%12%15%0FMKMO7L%3C:LH=:GFL:0%3EM%3CG%3C:%3C0%3EM%3C1N%3CJ68M%3C7L%3C%3C0H=L7::%3CF8;:7L%3C%3C08MFG%3C:%3C0%3EOMDL%3C%3CFBM%3C1NLIFBM%3C1LOJF8M%3C1:%3CJ6%3E;NE%1A%01%14%03%00%12%0E%03%09G%20%1A(%0COE%1C%15%04%19%16%14%09L2%1D1%01KOL%1B-%00%0EEJM%14?%1D%0AIDH%01-%04%0AOHF&%044%01ONJ%20%25%05%0CDNL%02%00%0C%0AOEL%00+%05%0ENN%11%01%12%0F%0E%17%0F%08%02G%04%18#%09NN%17%15%02%15%18%11%08GDO*7(%0CNNEMO4%1F!%0COENNJEHGL7:N%1C%0B%16%08%04%18%0E%08%0FM%14%12%22%06ON%1A%1F%06%12%12%1E%09GI6%3E=%3C1:L:0J=L7:L@F8;:%11%01%12%0F%0E%17%0F%08%02G%3E%14%25%09NN%17%15%02%15%18%11%08GD%3E(%14%06KON7%00%037%00KO:D%22%11\'%03KON%11%01%12%0F%0E%17%0F%08%02G%14%10%14%09NN%17%15%02%15%18%11%08GDLFJ6%3EOLDO%14%18%20%0FNNEMO0$%0A%0DOENN%1C%0B%16%08%04%18%0E%08%0FM6%14%25%06ON%1A%1F%06%12%12%1E%09GIFBM%3C1NLIE%14%022%03ONHGKMFG%3C:JEHM%3CG%3C:%3C6H=:1NNH%10%05%13%09%0F%13%0E%0E%03C%09%09%1F%0DOH%16%11%03%13%19%15%09AEH=%3CG%3C%3CJLH=:1L%3CJ6%3E;:G%3C:%3C6H=:1%3CL@F8;:1NLIE%10!%06%03ONHGKML7L%3C%3C08M%3C1:LIFH=L7:::F8;:ENN%1C%0B%16%08%04%18%0E%08%0FM2%09%11%06ON%1A%1F%06%12%12%1E%09GIF8=L7%3CL@6%3EMFG%3C:%3CF8M%3C1::J6%3E;%3CG%3C:%3C6H=:1:NJEHGL7:LIFH=L7:::F8;:ENLIFK=L7%3CFJ6%3EMFG%3C:%3CF8M%3C1::%3CF8;N7L%3C:F8=L7::J6H=:1:L:0%3E=L7:::FBM%3C1::%3CD%1E%00%12%02%04%13%08%02%0DF6%25%0E%0CID%18%14%02%18%12%15%0FMKMO7L%3C:LH=:GFL:0%3EM%3CG%3C:%3C0%3EM%3C1N%3CJ6%3E;NGOL:6H=%3CGFL:0%3EM%3CG%3C:%3C0H=:1%3CL:0%3E=L7::%3CD%1E%00%12%02%04%13%08%02%0DF%14\'%0B%0CID%187%10&%0B%3C(%08:%0BOE:Z4_%1A_%5C=%10-%0D6%22%11,%06ON%3CP:%0F%0E%00%3C%221%1E%0CNN1O6%16\'%0FO%5C%0F%067%0CP2%11-%00%3CO%02%18%20%08OENLI(+%03%0ADNN%3CEJ%5D%04%0D7%0A:E%14%0E%01%00ONHFK\'%225%0BOHD%3E%5B%3C1%5C%1A%07%18%0D%05%13%05%08%09A%20%25%05%0CDN%1C%13%08%17%13%15%02GO(%14/%08OEN%3C04(%09OE:OH%106T%1EUI%1D%5CE%05%13%09%0F%13%0E%0E%03K%09/%0A%0CN%1A%01%06%12G%25$0%0BPAD%5C%0F%08%09%12%19C%0D%226%0DZ,%0C%17%0EI%0A%0B%08%0E%1FK%09/%0A%0CI%0D%08%0D%01%13%04HOQ%15Q_TYS%5EU%0CFQNE%5C%04%0E%03%10%12G)%1D6%0BP%0C.%01%07I%0B%04%03%04%12%0FA%0C%22;%07X%05%08%02%14%13A%0A!2%0DQ2U%18TM%1FXDW%1FS%5CT%5EQITN%5BES)R%5BWQQXRPJ%5C%1F%05%02%5BRR%03E%5C%11%00%1FC%011+%0CZI%5D%0CRW%5CVUWHS%1EV%5CWW%20DX%1D%0B%09%13G(:)%0D%5C%1B%0F%0E%0D%08K%011+%0C%5BI%5CZQT%5CTBQ%02QVW%5ERTHD%18%15%10%05%13%04%09E%040%20%07N%1C%02%0C%10%03GDW%1FR%5DSP!IW%08S%5DSVT_N%5D%06;$%0DZDQPV%5EUKW%03UWU_SRNW.0+%06HM%5C%0E%15%02%00%06X%05%06%1F%02GI%5D%0CPW%5CVUQHS%1EV%5CWVUDY%011+%0CZ(:)%0D%5B%07%22=%0BRKV%1F%5EWW#YFV%08%5EWWQXRO%5DDW%1FP%5C%20QWAW%08S%5CVPP%5EN%5C%03%1F%06%07%0CW%04%06%12%08CNW%14VVR_WKW%03UVP%5ESTNV%001&%06%5ENW%03UWU%5DURJZPQQ%5BJ%5D%1C%25$0%0BF%5E5%13%1E%0E%09%06C%05%14%08%01$%0F%00%1F%20%09%03%09O%08)%0B%08H%04%04%06%15%22%02%07%03&%18O.6\'%08O9DOW.%5ESVU_RSRYNSWXVUR%5CROL%0B%253%0BDJ%5D%1A%0E%15%02%00%06X%05%06%1F%02GI%5D%0CTW%5BRPQ@S%1EV%5C!TWDY%011+%0CZI%5BUWTZJW%0E_SWV%5CSNZ$4,%0CQOW%19ZV%04%04%08VRL%5D,QUZPSWYQSNW%05%15%04%0C%08%5D%1A%11%1A%11%00%1FC%054-%0CZI%5D%0CTV%5CVUU@U_Q%5B_NZ%16%0F%03%13L%223%25%06X%11%0F%05%0B%02I%0E0\'%0CPOW%0E_QQQYWJQ%15RT!%5E%22NH%16%10%11%0E%18%04%0FI%0E0\'%0CE%1C%04%00%1E%06FO%5C%08SQ%5DQVPIQRTUQO%5D%0F4&%0APKV%08%5EWUQ%5EQKW%14VWR+TO%5C%17.$6%07H%5B4%18%15%0E%0F%0AM%00%15%03%0A$%09%0C%11%25%08%08%02O%0E%25%05%0DI%0F%0F%06%13.%0C%02%02-%13O$9\'%0DL%07%22=%0BD=NW#VUP%5ESTR%5DBTHDX%1B%05%1E%02%06%0AV%00%07%14%09GOQ%02WVW%5EQRD%5D%1BWW%5CSVHW%005&%07Z%225)%08Z%22%166%0D%5EES%09U%5CPSR%5BNP%5E_QTHWKV%08%5ETSU%5BSK_%5CWRUDX%04%15%09%06%0CZ%0E%02%15%02LOQYTVPJ%5C%08UQ%5BWPQE%5D%042,%08%5BO%5EQUUXRCW%03UWQ%5CSVNW%223%25%06%5ENW%14UVVUUCTE%5C%05%13%08%02%0D%5C%0F%06%14%04MKV%1F%5EWWT)FV%08%5EWWQ%5EVO%5D%0F4&%0APKQVZRQL%5D%0CTV_QQTDX#3(%0CLJV%01%14%02%0D%0C%5C%1C%10%1E%14%02%18%12%15%0FM*%250%06%5C%1AHV%05%13%09%0F%13%0E%0E%03C?(%19%0COH%16%11%03%13%19%15%09AEK3%15.%0DOHDIN6%25%0E%0CIDJOLDLL:F8;:7L%3C%3C0J%1B%01%19%09%04%15%04%0C%08G-6%1F%0AEJ%1D%15%09%13%12%13%03CN%3C1%3C%3C%3C0H=:E%3CLJ6HM%3C7:::F8;:1%3CL:0%3E;%1A%0A%12%09%02%19%0A%09%09L2+%0E%06KO%1C%1E%02%13%14%1F%0DFOGFL:0HNLG%3CL:0%3E=L7::HDHN28$%0AIDJ%1B%01%19%09%04%15%04%0C%08G%1B)%15%0AEJ%1D%15%09%13%12%13%03CNLML%3C%3CFBM%3C1NLI%0E%1A(%0DDNN%1C%0B%16%08%04%18%0E%08%0FM%14%0E%01%00ON%1A%1F%06%12%12%1E%09G%16\'%04%09OEL%10%15(%09NNG%04(%11%02KOL%0B-%0F%0CEJ%1B%01%19%09%04%15%04%0C%08G5%0E%0E%0DEJ%1D%15%09%13%12%13%03C%12%0F%05%14%3CI%0A1%10%08DNNJE%08%01%05%02ONH0X%1B%01%19%09%04%15%04%0C%08G%1F%02=%0AEJ%1D%15%09%13%12%13%03CN2%20%08%0CIDJ=%00%081%0AID%3EN%0C!%09%0AIDJ%1B%1AE\")")}();const Ufcl=U2y9.z('\u30AD\u30F9\u30BD\u30FD\u30C7\u30C2\u30AE');const obTk=U2y9.z("inf");const QcWk=U2y9.z("\u3056\u3096\u306E\u3060\u306E-!");const kYMk=U2y9.z(" ");let MZPk=Ufcl;!function(){if(U2y9.y)console[obTk](`${QcWk}${MZPk}${kYMk}`);}() |
たった 2 行のソースコードがここまで変換されました。何を行っているかの判断はつきません。しかし、これをコピーしてブラウザコンソールなどで実行すると、元のコードと同じ処理を行います。 カジュアルな攻撃者であれば、このソースコードを見た瞬間、解析を諦めることが予想されます。
■JSDefender の機能は難読化だけではない。
JSDefender では、保護されたアプリケーションの攻撃に対する耐性をさらに高めるため、難読化以外の保護技術も提供しています。
・自己防衛型の保護
攻撃者が JavaScript を変更した場合、保護された JavaScript は実行されません。
・開発者ツール(devtool)のブロック
開発者ツールパネルがブラウザで開かれているかどうかを検出し、デバッグできないようにします。
・ドメインロック
指定のドメイン以外から実行された場合、保護された JavaScript は実行されません。
■まとめ
minify ツールはパフォーマンス向上のための機能であり、コードを隠ぺいする役割としては物足りません。JavaScript のアプリの保護を検討されている方は、 以下のURLよりお問い合わせください。
https://www.agtech.co.jp/contact/
また、JSDefender の評価版のご利用を希望されるお客様は、以下の URL よりお申し込みください。
https://www.agtech.co.jp/preemptive/jsdefender/trial/