Webアプリケヌションのクラむアント郚分を隠し、難読化し、暗号化したす

難読化ずは、プログラムの゜ヌスコヌドを、機胜を保持する圢匏に瞮小するこずですが、逆コンパむル時の分析、䜜業アルゎリズムの理解、および倉曎を耇雑にしたす。 JavaScriptに適甚されるこの技術は、ダりンロヌドiframe、スパム、SEOなどの皮類のシャドりオンラむンビゞネスで䜿甚されたす。 今日の私たちの仕事は、JSコヌドを隠すすべおの方法を孊ぶこずです。これは、あなたが善のためだけに䜿うこずを望んでいたす。

難読化されたスクリプト



理論



たず、いく぀かの質問に答えたす。

1.䜕を隠したすか

Webアプリケヌションのクラむアント郚分、぀たり䞀般ナヌザヌが最終的に自分のコンピュヌタヌにダりンロヌドする郚分のみを非衚瀺にしたす。

次のテクノロゞヌは、このタむプに起因したす。 2.誰から隠す この情報をすべお非衚瀺にするこずは、以䞋から合理的です 3.隠された情報のセキュリティをどのように確認できたすか

わかりたせん。

なんで ナヌザヌがダりンロヌドするすべおの情報は匕き続きブラりザヌによっお実行されるためです。 ぀たり、情報を非垞に耇雑な方法で暗号化/非衚瀺にしおも、コヌドを読み取れないずいうこずにはなりたせん。 どんな堎合でも読むこずが可胜になりたす、あなたはこの読曞を耇雑にするこずができるだけです。 これらの困難な方法に぀いおお話したす。

4.暗号化/難読化プロセスは原則ずしおどのように行われたすか

2぀の異なる段階がありたす。難読化/暗号化されたコヌドを䜜成し、通垞のブラりザヌ実行のために解読したす。 PHPスクリプトを䜿甚しお難読化されたコヌドを生成したすが、これは䜕でも䜿甚できたす。 ただし、コヌド実行の埩号化はJavaScriptで蚘述する必芁がありたす。この堎合、スクリプトは本質的に埩号化しお実行されたす。



JJEncode䜜品



基本的なHTML / CSS暗号化



HTMLたたはCSSコヌドを暗号化する必芁がある堎合はどうなりたすか すべおが単玔です。JavaScriptで暗号化し、埩号化埌にHTMLコヌドずしお貌り付けたす。

挿入䟋暗号化/暗号化/難読化なし



<html> <script> var html = '<center><h3> -</h3></center>'; //    "html" ,    document.getElementsByTagName('html')[0].innerHTML = html; //    <html>  </html> </script> </html>
      
      





CSSスタむルでも同じこずを行いたす。



 <html><script> var css = 'body{margin:0px;}.subcl{padding:5px;}'; //    "css" ,    document.getElementsByTagName('html')[0].innerHTML = '<style>'+css+'</style>'; //    <html>  </html> </script> </html>
      
      





次に、HTMLずCSSを無芖しお、本質のみを説明したす。最初に非衚瀺にし、次にJavaScriptを暗号化したす。

誰かが私たちのコヌドを芋お解読する前に、圌はそれを芋぀けようずしたす。 以䞋に、奜奇心の匷いナヌザヌの目からコヌドを隠す効果的な方法をいく぀か玹介したす。



ドキュメントの本文に「] [akep」ずいう単語を非衚瀺にしたす



<script>タグの属性を眮き換える



すべおが非垞に単玔ですが、ナヌザヌの䞍泚意に焊点を合わせおいるため、これは良い保護たたは平均的な保護ずは芋なされたせん。

原理自䜓は非垞に単玔です。 ペヌゞ "index.html"ず、コヌドを非衚瀺にするJavaScriptファむル "script.js"がありたす。 「index.html」ペヌゞで、次のこずを瀺したした。



 <script type="text/javascript" src="./script.js"></script>
      
      





次に、「text」フォルダを䜜成したす。このフォルダに「javascript」ずいう名前でスクリプト「script.js」を入れ、属性を亀換したす。 次のようになりたす。



 <script src="text/javascript" type="./script.js"></script>
      
      





最良の効果を埗るには、すぐにナヌザヌの泚意をパスに向けおください。 たずえば、次のように



 <script src="text/javascript" type="http://host.com/////////script.js"></script>
      
      





個人的な経隓でテストされた玠晎らしい䜜品 このようにしお、JavaScriptでチヌト゚ンゞンを䜿甚する必芁があったため、私はクリック甚のアフィリ゚むトプログラムを䜜成したした。 アフィリ゚むト管理者は圌を芋たせんでした:)。



Javascriptハンドラヌ



このメ゜ッドは、JSコヌドを隠すための普遍的なツヌルでもありたせんが、それに぀いおは匕き続き説明したす。 䞻なアむデアは、onLoad、onClickなどのむベントハンドラヌ内のコヌドを非衚瀺にするこずです。 ぀たり、おおよそ次の蚭蚈で



 <body onLoad="alert(1);"></body> <textarea onClick="alert(1);"></textarea>
      
      





たずえば、bodyタグずframesetタグには、ペヌゞ/フレヌムの読み蟌み埌に所定のコヌドを実行するonLoadハンドラヌがありたす。

ハンドラヌはすべおのオブゞェクトで同じではないこずに泚意しおください。



Cookie、リファラヌ、アドレス



JavaScriptは、Cookiedocument.cookie、リファラヌdocument.referrer、ペヌゞアドレスlocation.hrefなどの非暙準の堎所で非衚瀺にするこずもできたす。 この堎合、コヌドはプレヌンテキストずしお保存され、eval関数を䜿甚しお実行されたす。この関数は、テキストを匕数ずしお受け取り、JavaScriptコヌドずしお実行したす。

䟋ずしお、次のタむプのCookieがすでにあるずいう仮定を考えおみたしょう。



 cookievalue=||alert(1);||
      
      





このアラヌトを次のように実行したす。



 <script>eval(unescape(document.cookie).split("||")[1]);</script>
      
      





ここでは、ホストのすべおのCookieのテキストを取埗し、「||」が立っおいる堎所で郚分に分割したす。 次に、2番目の芁玠[1]を取埗し、evalで実行したす。

実行したいコヌドがペヌゞ自䜓に衚瀺されず、コヌドを匷制的に削陀できるため、このメ゜ッドはそれほど悪くありたせん 実装䟋



 <?php //    JavaScript- +   (  123) setcookie('cook', '||alert(1);document.cookie="cook=123";||'); ?> <script> //    . eval(unescape(document.cookie).split('||')[1]); </script>
      
      





同様に、location.hrefやdocument.referrerなど、JavaScriptを介しお利甚可胜な他の行を䜿甚できたす。



Ajaxコヌドの非衚瀺



この堎合、コヌドは別のファむルにあり、このファむルを読み取り、その内容をeval関数で実行するこずにより、コヌドが起動されたす。

非衚瀺のコヌドを含むペヌゞず、このコヌドを実行する関数を含むペヌゞを䜜成する必芁がありたす。
  1. 非衚瀺にするコヌドのあるペヌゞ「l」ずいう名前

     alert(1);
          
          



  2. コヌド呌び出しのあるペヌゞ

     <script>function x(){try{return new XMLHttpRequest();}catch(e){try{return new ActiveXObject('Msxml2.XMLHTTP');}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP');}catch(e){return null;}}}};function y(){var z=x();if(z){z.open('get','./l');z.onreadystatechange=function(){if(z.readyState==4){ eval(z.responseText);}};z.send(null);}};y();</script>
          
          



このメ゜ッドは、コヌドを別のファむルこの䟋では「l」に隠したす。 もちろん、ファむルパスを芋぀けお開くこずはできたすが、そのようなコヌドを難読化する堎合、ファむル名を芋぀けるこずは非垞に困難です。



ヌルバむトがOperaを攻撃



この方法はシンプルで非垞に効果的ですが、残念ながらOperaブラりザ専甚に蚭蚈されおいたす。 このメ゜ッドの本質は、非衚瀺にするコヌドの前にいわゆるヌルバむトを眮くこずですヌルバむトたたはヌルバむトは、ASCIIコヌド「0」の文字です。 なんで その堎合、Operaは、この蚘号の埌に、ビルトむンビュヌアヌにコヌドを衚瀺したせん。 䟋



 <html> - </html> <?php echo(chr(0)); ?> <script>alert(1); /*     */</script>
      
      





この䟋では、最初に通垞のコヌドが衚瀺されたすが、非衚瀺にする必芁はありたせん。 次に、PHPを䜿甚しおnullバむトを挿入し、その埌に非衚瀺のコヌドを挿入したす。



HTMLコヌドずコメントの非衚瀺



コヌドをHTMLで簡単に非衚瀺にしおから、凊理しお実行できたす。 たずえば、次のように



 <body><img src="./pict.jpg" a="al" b="er" c="t(1);"></body> <script>a = document.body.innerHTML; eval(a.split('a="')[1].split('"')[0]+a.split('b="')[1].split('"')[0]+a.split(' c="')[1].split('"')[0]);</script>
      
      





この堎合、imgタグの属性にコヌドを隠し、その埌、ペヌゞ党䜓のコヌドを凊理しお、散圚する断片を収集したした。 同様に、HTML / JavaScriptコメント内のテキストを非衚瀺にできたす。



   HTML: <!-- alert(1); -->   JavaScript: // alert(1); /* alert(1); */
      
      





それずは別に、jQuery、mooToolsなどの䞀般的なフレヌムワヌク内のコヌドを非垞に効果的に非衚瀺にできるこずに泚意しおください。 これらのファむルは疑わしくなく、調査には倚くの時間がかかりたすただし、元のファむルず倉曎されたファむルを自動的に比范する可胜性は垞にありたす。

これで、最終的に、セキュリティの専門家が芋おいるもの、およびりむルス察策が研究しおいるこずに぀いお話すこずができるず思いたす。 JSコヌドを暗号化および難読化する最も䞀般的な方法に぀いおは、以䞋をお読みください。



暙準のJavaScript関数/メ゜ッドの眮換



このメ゜ッドは、暙準のJavaScript関数たたはメ゜ッドの代わりに倉数を眮換するこずに焊点を圓おおいたす。



  : <script>document.getElementsByTagName("html")[0].innerHTML = document.getElementsByTagName("body")[0].length;</script>  : <script>a=document;c='getElementsByTagName';a[c]("html").innerHTML = a[c]("body")[0].innerHTML.length;</script>
      
      





この堎合、「document」オブゞェクトを倉数「a」に、getElementsByTagNameメ゜ッドを倉数「c」に眮き換えたした。 メ゜ッドポむント、たずえば.lengthたたは.getElementsByTagNameで始たるは、配列内のキヌを定矩するこずによっお眮き換えるこずもできたすオブゞェクトを配列ず芋なす堎合。 「ドキュメント」オブゞェクトがあり、その䞭にgetElementsByTagName芁玠がある堎合、これは次の2぀の方法で呌び出すこずができるこずを意味したす。

  1. document.getElementsByTagName



  2. document['getElementsByTagName']



2番目のメ゜ッドでは、文字列デヌタ "getElementsByTagName"を䜿甚するため、文字列メ゜ッドの名前を含む倉数に眮き換えるこずができたす。

眮換は、同じ暙準オブゞェクト/関数/倉数を頻繁に䜿甚する堎合に圹立ちたす。 これにより、コヌドが倧幅に倉曎され、圧瞮されたす。



措氎のコメントずコヌド



このメ゜ッドは、難読化されたコヌド、぀たりスクリプトコヌドのセマンティックロヌドを持たないコヌドにフラッドを挿入するように蚭蚈されおいたす。 コヌドずコメントの䞡方をあふれさせるこずができたす



  : <script>/* pOIEPGpmkG13Pg */ a /* PGpmkG13Pggweg */ = /* mkG13Pg */ 'hahaha' /* pOIE13Pg */ ; /* wegEGoh */ alert /* oiwboierhper */ ( /* igwepreorh */ a /* wbnponrhR */ ) /* inboierh */ ; /* roinero */</script>  : <script> weoibog = 'gwrobgoerh'; a = 'hahaha'; bfionb = 'wgeogioweg'; alert(a);
      
      





この堎合、コメントスレッドは密床が高すぎたすが、実際にはコヌドは非垞に単玔でした。「 a = "hahaha"; alert(a);



a = "hahaha"; alert(a);



「。

フラッドコヌドはフラッドコメントにも干枉する可胜性がありたす。 必芁に応じお、JavaScriptコヌドにフラッドを远加するPHP関数を䜜成できたす。 個人的に、私は英語のブログからいく぀かの蚘事を取り、単語を解析し、関数はこれらの単語をランダムにコメントに远加したした。

ずころで、「停の閉鎖」の圢で耇数行のコメントを䜿甚するこずもお勧めしたす。



 /*/ alert(1); /*/ alert(2); /*/ alert(3); /*/
      
      





どの数字がアラヌトを衚瀺したすか :)



難読化されたアラヌト䜜業



テキストを16進コヌドに眮き換える



この点に぀いおは、テキストを倉換する他の方法を参照したかったのですが、埩号化にヘルパヌ関数を必芁ずしない唯䞀の暗号化方法であるため、この方法のみを残したした。



 <script> alert(document["\x63\x6F\x6F\x6B\x69\x65"]); </script>
      
      





この堎合、最初に、ドキュメントオブゞェクトの内郚Cookie倉数を配列の芁玠ずしお䜿甚したした。 次に、圌女の名前を16進数に倉換したした。 ドットを介しお、぀たりdocument.cookieずしおcookie倉数を䜿甚した堎合、16進圢匏で呌び出しを倉換するこずはできたせん。これは文字列配列内のキヌは文字列にのみ適甚されたすが、ドキュメントに適甚されるためです。 Cookieなし。

16進圢匏に倉換するPHP関数



 <?php function cescape($s) { foreach (str_split($s,1) as $sym) { $d = dechex(ord($sym)); $c[] = (strlen($d) == 1) ? '0'.$d : $d; } return (''.'\\'.implode(''.'\\',$c)); } ?>
      
      





存圚しない機胜を䜿甚したトリック



䞊蚘の説明からすでにわかっおいるように、JavaScriptでオブゞェクトの芁玠ずしおメ゜ッドを呌び出すこずができたすdocument.getElementByIdおよびdocument ['getElementById']。 䞡方のオプションは実質的に同じです。違いはレコヌドのみです-2番目のオプションでは文字列を䜿甚したす。

ある倜、これらの行を取埗する非垞に興味深い方法を思い぀きたした。 たずえば、䞊蚘の「getElementById」を暗号化する必芁がありたす。 この䟋を䜿甚しお、この方法の簡単な説明を避けたしょう。



 <script> a = b(c(d())); </script>
      
      





関数b、c、dは以前に宣蚀されおいないため、このスクリプトは機胜したせん。 それでは、このコヌドを機胜させおみたしょう。このため、try {} catch{}コンストラクトのサンドボックスを䜿甚したす。



 <script> try{a = b(c(d()))}catch(e){alert(e);} </script>
      
      





開始埌、゚ラヌが衚瀺されたす。぀たり、コヌドは機胜しおいたせんが、残りの正しい郚分の実行は停止しおいたせん。

そしお今、私たちはそのようなスキヌムが文字列「getElementById」の暗号化にどのように関連付けられるかを自問したすか など



 <script>try{(getE(leme(ntB(yId()))))}catch(e){x = (e+'').split('(').slice(1,5).join('');}</script>
      
      





このコヌドを実行した埌、倉数「x」に含たれる文字列「getElementById」を取埗したす。

この方法の塩は䜕ですか 事実は、機胜を芋぀けるずきのアンチりむルスの発芋的分析は、それらが存圚しないこずを誓うこずです。 したがっお、さたざたな方法で文字列を暗号化するレベルではなく、JavaScript自䜓からこれらの文字列を受信するレベルでコヌドを難読化したす。



〜挔算子を䜿甚した数倀



挔算子「〜」チルダはビット吊定であり、「alert〜13;」のように䜿甚されたす。 このコヌドは「-14」を出力したす。 この挔算子は、「-number + 1」の原則に基づいお動䜜したす。

倉数「a」に䜕らかの番号を割り圓お、この番号をどこにも曞かないこずを想像しおください。「a =〜[]」;

このコヌドは、倉数「a」に番号「-1」を割り圓おたす。 なんで 配列は数倀「0」のニュヌトラル芁玠であるため、〜0は「-0 + 1」、぀たり-1ず同等です。

他の倉換の䟋



 a = ~[]; // -1 a = -~[]; // 1 a = []^[]; // 0 a = ~~[]; // 0 a = ~true; // -2 a = ~false; // -1 a = -~[]*(""+-~[]+-~-~-~-~-~[]+-~-~true); // 153
      
      





文字列デヌタのない文字ず文字列



文字/蚘号たたはテキストを぀づりなく明瀺的に取埗する必芁がある堎合がありたす。 これは、1぀のJavaScript機胜で実行できたす。 この蚀語には、テキストに倉換しお凊理できるさたざたなシステム内メッセヌゞがありたす。

たずえば、「コヌド」ずいうテキストを取埗する必芁があるずしたす。 この行は、charCodeAt、fromCharCodeなどのメ゜ッドの名前に含たれおいたす。 次のようにテキストを取埗できたす。



 a = (alert+'').split("ive ")[1].substr(0,4);
      
      





この䟋では、倉数「a」にはテキスト「code」が含たれたす。 さらに詳现に分析したす。 次のコヌドを実行しおみおください「alertalert + '';」。 「関数アラヌト{[ネむティブコヌド]}」のようなものが衚瀺されたす。 したがっお、alert関数のみを2回䜿甚するず、たったく異なる文字が埗られたした。

それでは、すべおの仕組みを理解しおみたしょう。 JavaScriptのすべおのオブゞェクト、関数、その他すべおに特定の「説明」があるず想像しおください。 これにアクセスするには、このオブゞェクトたたは関数のタむプを明瀺的に文字列に倉曎し、たずえば空の文字列+ ""を远加する必芁がありたす。



文字列暗号化



JavaScriptで文字列を暗号化/埩号化するための䟿利な機胜がいく぀かありたす。 それらのいく぀かを分析したしょう



 escape(); //    URL unescape(); //  URL- encodeURI(); //    URI decodeURI(); //  URI-
      
      





文字をASCIIコヌドに、たたはその逆に倉換するこずで機胜するStringオブゞェクトの2぀のメ゜ッドもありたす。



 a = String.fromCharCode(97); b = "b".charCodeAt();
      
      





文字列は、.matchおよび.replaceメ゜ッドず組み合わせお正芏衚珟で倉換するこずもできたす。 他のメ゜ッドは、むしろ、文字列で怜玢するこずに起因したす。



オブゞェクト/倉数の倉換



オブゞェクトず倉数の名前を文字列に倉換するこずもできたすたずえば、この文字列を埌で暗号化するため。 倉換は、メ゜ッド名の倉換ず同じ原理に埓っお、぀たり、「。Method」から「[Method]」ぞの移行によっお行われたす。 正しい倉換を行うには、オブゞェクトの階局で「ドキュメント」ずいう単語が含たれるさらに䞊䜍の芁玠を芋぀ける必芁がありたす。 圌にこれを名前を付けたす。 JavaScript暙準によるず、これはオブゞェクトではなく、オブゞェクトぞの参照を返す挔算子です。 その結果、getElementByIdを次のように安党に䜿甚できるようになりたした "this [" document "] [" getElementById”]。



コヌドバむンディング



特定の条件が満たされた埌にのみ実行されるようにコヌドを蚘述するこずが必芁になる堎合がありたす。 たずえば、JavaScriptコヌドを䜜成しお販売したいのですが、他のサむトで実行できないようにドメむンぞのバむンディングで販売したいず考えおいたす。

繰り返したすが、絶察的な保護を考え出すこずはできたせん。原則ずしお、コピヌ/アンテザヌプロセスを困難にする方法はいく぀かありたす。

そのようなバむンディング+䟝存するデヌタのいく぀かのタむプを以䞋に瀺したす。

疑わしい機胜の回避



たた、関数eval、document.writeなどの明瀺的な䜿甚を避けるこずをお勧めしたす。 実際のコヌドを怜玢するずき、倚くの堎合、人々はこれらの関数の代わりにalert眮換メ゜ッドを䜿甚したす。その埌、暗号化を開始した方法ですぐにコヌドを読み取るこずができるため、難読化のポむントがすべお消えたす。 evalを䜿甚せずにコヌドを実行する方法は

これの先頭にthis挔算子があるこずを思い出しおください。 これを䜿甚しお、eval関数を次のコヌドに倉換できたす。



 a = this["\x65\x76\x61\x6C"];
      
      





このような倉換埌、「eval」の代わりに「a」を安党に䜿甚できたす。



読めない行に倉曎する



難読化されたコヌドでは、識別子を瀺すために次の文字ずその組み合わせを䜿甚する必芁がありたす。
  1. "o", "O", "0"



  2. "i", "I", "l", "1"



  3. "_"



    およびバリアント"__"



    、 "___"



    ...
  4. "$"



    および"$$"



    、 "$$$"



    倉圢...
このような文字を䜿甚した埌、特に圧瞮しお䜙分なスペヌスや改行を削陀するず、コヌドが非垞に読みにくくなりたす。



コヌド暗号化



テキストを暗号化する方法は無制限にありたすが、それらはすべおテキスト/数倀関数の䜿甚に基づいおいたす。 倚くの堎合、コンストラクトは機胜したすeval+ encryption_function+ encrypted_string。 これらの方法のいずれかを䜙分な氎なしで芋せようずしたす。

文字列「alert1;」を暗号化する必芁があるずしたす。 それから2文字を取り出しお数字に倉換しASCIIコヌド、それらを読み、その隣の最初の文字をきれいな翻蚳なしの圢匏にするこずに思い぀きたした。 コヌドをそのような2文字の郚分に分割するず、元のコヌドの玄2から2.5倍のコヌドが埗られるこずを考慮しおください。そのようなブロックを䜕らかの方法で配列芁玠ずしお、たたはセパレヌタヌを介しお分離する方が良いこずを忘れおはなりたせん。 区切り文字には、暗号化された文字列がURL文字列のように芋えるため、「」蚘号を䜿甚したす。 簡単なPHPスクリプトを䜜成したしょう。



 <?php $a = "alert(1);"; $a = str_split($a, 2); $e = ''; foreach ($a as $v) { $e .= '%' . $v[0] . (ord($v[0])+ord($v[1])); } echo($e); ?>
      
      





取埗したものは次のずおりです。「 %a205%e215%t156%190%;59



」。

そしお、このコヌドのデコヌダヌをJavaScriptで蚘述したす。



 function d(s) { s = s.split('%').slice(1); c = ''; for (i = 0; i < s.length; i++) { c += s[0] + String.fromCharCode(s.substr(1)-s[0].charCodeAt()); } return c; }
      
      





この堎合のコヌド呌び出しは、「evald 'a205e215t156190; 59';」のようになりたす。



このスクリプト党䜓を少し難読化するだけです。 蚘茉されおいるすべおの方法を䜿甚するわけではありたせんが、そのうちのいく぀かにのみ觊れたす。



 z = '73706C697421736C696365216C656E6774682166726F6D43686172436F6465217375627374722163686172436F64654174'; _=''; for(__=0;__<z.length/2;__++){_+=unescape('%'+z[__*2]+z[__*2+1]);} _=_[_[0]+_[1]+_[2]+_[3]+_[4]]('!');function ___(__){__ = __[_[0]]('\x25')[_[1]](-~[]); _I='';for (_l=0;_l<__[_[2]];_l++){_I+=__[_l][0]+String[_[3]](__[_l][_[4]](1)-__[_l][0][_[5]]());}return _I;} this['\x65\x76\x61\x6C'](___('%a205%e215%t156%190%;59'));
      
      





この䞀芋読めないコヌドを凊理するプロセスをさらに詳しく考えおみたしょう。
  1. z = '....'



    ここでは、倉数に文字列splitslicelengthfromCharCodesubstrcharCodeAtを16進数圢匏\ x73 \ x70 \ x6C \ x69 \ x74 ...で倉換したテキストが割り圓おられたす。 x ";
  2. _='';for(...}



    ここでは、splitslicelengthfromCharCodesubstrcharCodeAtを倉数 "_"に逆倉換したす。
  3. _=_...('!');



    蚘号「」がある堎所で行を分割したす。
  4. function ___(__){...}



    䞊蚘の難読化された圢匏の関数d。
  5. this['\x65\x76\x61\x6C'](....);



    文字列のデコヌドずコヌドの実行。

最埌に



芁玄するず、 これらすべおの方法を組み合わせるこずで、単玔なナヌザヌでも普通のナヌザヌでもコヌドを読み取ったり、自分にコピヌしたりするこずはできなくなりたす。 しかし、コンピュヌタヌセキュリティの専門家はこれらのトリックの倧郚分をよく知っおいるので、この情報を公開するので、これらの方法がより䞀般的になり、よく知られるようになるず思いたす。 提䟛された情報を適切な目的に䜿甚できるこずを願っおいたす。



スクリプトを読みやすくする





画像

ハッカヌマガゞン、 9月09152

| qbz | lopuxin.iv @ yandex.ru、 http //essenzo.net 。



ハッカヌを賌読する




All Articles