0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AI時代に難読化コードは意味があるの?GAPIの難読化コードをAIに解除させてみた!

Posted at

こんにちは、@majoLibraryです。

最近はChatGPTなどのAIが話題になっていますが、コードの「難読化」は今後も有効なのでしょうか?そこで、Googleが提供するGAPIの難読化コードをAIに元に戻してもらいました。

難読化されたコード

GAPIの実際のコード例はこんな感じです。

(function(){var aa=typeof Object.defineProperties=="function"?Object.defineProperty:function(a,b,c)...()...}).call(this);

これでは簡単に読むことはできません。

AIで難読化解除(要点のみ抜粋)

AIに依頼すると、すぐに読みやすく再構成されました。

// グローバル環境を取得
const getGlobalObject = () => { ... };
const globalObj = getGlobalObject();

// Polyfillの設定
polyfill("String.prototype.endsWith", ...);
polyfill("Array.prototype.includes", ...);

// gapi.load関数の再定義
window.gapi.load = function(apiName, options) { ... };

// スクリプトの非同期読み込み
const injectScriptAsync = (src) => { ... };

文字列の暗号化・制御フローの難読化はどうか?

上記で示した難読化は主に名称変更(リネーム)だけでしたが、より高度な難読化手法として以下のようなものがあります。

文字列の暗号化(String Encryption)

文字列を実行時にしか復号できないようにすると、AIによる解析はかなり困難になります。

// 難読化前
const apiEndpoint = "https://api.example.com";

// 暗号化後
const apiEndpoint = decrypt("U2FsdGVkX1..."); // 実行時に復号

制御フローの難読化(Control Flow Obfuscation)

条件分岐やループを意図的に複雑化することで、コードの動きを把握するのが難しくなります。

// 元のコード
function add(a, b) { return a + b; }

// 制御フロー難読化後(例)
function confusing(a,b){
  let x=0;
  switch(true){
    case (!!a && !!b):
      x=(a|0)+(b|0); break;
    default: x=0;
  }
  return x;
}

これらが導入されると、AIでも意味を読み取るのは難しくなり、一定の保護効果が期待できます。

今後の対策

今後は、単純な難読化に頼るのではなく、より高度な難読化手法や、実行時暗号化、サーバーサイド処理の強化など、多層的な防御策を組み合わせることが重要です。ただし、過度な複雑化はパフォーマンスやメンテナンス性に悪影響を及ぼすため、適切なバランスを考える必要があります。

まとめ

AIの進化により「難読化」だけに頼るのは不十分です。

文字列の暗号化や制御フローの複雑化など、高度な難読化手法を組み合わせつつ、コード自体の価値を高めることが重要になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?