Amazonで商品を見るセール会場へ

ExtendScript|JSXコードの一部を難読化する方法と限界|JSXBIN

Adobeのスクリプトファイル(.jsx)を配布する際に、コード全体ではなく重要なロジックなど一部だけを非公開にしたい場面があります。

本記事では、ExtendScriptで記述したJSXファイルの一部だけを難読化(バイナリ化)する手順を解説します。

難読化は暗号化やアクセス制御ではなく、解析を防げる保証はありません。

目次

JSXの一部を難読化する手順

手順1:難読化したいコードを別ファイルに切り出す

スクリプトの中で非公開にしたい処理だけを抜き出し、別のJSXファイルとして保存します。

(例:secret.jsx)

手順2:JSXBIN形式へ書き出す

  1. 旧ExtendScript Toolkitを使える環境では、secret.jsxを開きます。
  2. メニューから「ファイル → バイナリ形式で書き出し」を選択します。
  3. .jsxbin ファイルとして書き出すか、生成された文字列をコピーします。

※ 書き出されたデータは、文字列として @JSXBIN@〜 から始まる形式になります。

手順3:元のJSXに eval() で埋め込む

以下のように eval() 関数へバイナリ文字列を渡すことで、難読化したコードを実行します。

#target photoshop

function test(){
    eval("@JSXBIN@ES@2.0@MyBbyBn0ABJAnAEjzFjBjMjFjSjUBfRBFeD2lIhQ2nJhQ2nchQff0DzACByB")    
}
 test();

スクリプト全体をjsxbinにしない理由

.jsxbin 形式でスクリプト全体を書き出すことも可能ですが、以下のデメリットがあります。

  • 実行環境や呼び出し元によって直接実行しにくい場合がある
  • 拡張子が .jsxbin に固定される
  • 他の開発者が設定値や共通処理を編集・カスタマイズしにくくなる

といった点が挙げられます。

設定値など読める状態で残したい部分と、難読化する処理を分けるための構成です。

APIキー、パスワードなどの秘密情報を配布スクリプトに含めてはいけません。

Photoshopに関する他の操作手順は、関連記事一覧から確認できます。

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。

ExtendScriptの開発環境は、ほかにも書いています。

まとめ

  • ExtendScript Toolkitを使えば、JSXの一部だけをバイナリ形式に変換して難読化できます。
  • eval() を使えば、難読化したバイナリ文字列を元のスクリプトへ直接組み込めます。
  • 全体を .jsxbin 化する構成に比べ、可読性が必要な設定部分を残せるため運用の柔軟性が高まります。

JSXBINへの変換だけで利用者の認証やライセンス管理が実現するわけではありません。

配布前に対象のAdobeアプリで実行を確認し、編集用の元コードは別に保管してください。

現在の作業環境を用意する場合は、AdobeのVisual Studio Code用ExtendScript Debuggerも選択肢です。

拡張機能の「Export to JSXBin」で変換できます。

この記事のサンプルは今回Adobeアプリ上では実行していません。

よくある質問:JSXの一部を難読化する方法

JSXの一部だけを、難読化できますか?

できます。記事では、Adobeのスクリプトファイル(.jsx)を配布する際に、コード全体ではなく重要なロジックなど一部だけを非公開にしたい場面を想定し、ExtendScriptで記述したJSXファイルの一部だけを難読化(バイナリ化)する手順を紹介しています。

難読化すれば、コードは守られますか?

難読化は暗号化やアクセス制御ではなく、解析を防げる保証はないと明記しています。JSXBINへの変換だけで、利用者の認証やライセンス管理が実現するわけではありません。APIキー、パスワードなどの秘密情報は、配布スクリプトに含めてはいけません。

手順を教えてください。

手順1は、スクリプトの中で非公開にしたい処理だけを抜き出し、別のJSXファイル(例:secret.jsx)として保存します。手順2は、旧ExtendScript Toolkitを使える環境で、メニューから「ファイル → バイナリ形式で書き出し」を選び、ファイルとして書き出すか、生成された文字列をコピーします。書き出されたデータは、文字列として「@JSXBIN@」から始まる形式になります。手順3は、元のJSXに、eval()関数でバイナリ文字列を渡して、難読化したコードを実行します。

ExtendScript Toolkitが使えない環境では、どうしますか?

現在の作業環境を用意する場合は、AdobeのVisual Studio Code用ExtendScript Debuggerも選択肢としています。拡張機能の「Export to JSXBin」で変換できます。

スクリプト全体を、.jsxbinにしないのは、なぜですか?

.jsxbin形式でスクリプト全体を書き出すことも可能ですが、実行環境や呼び出し元によって直接実行しにくい場合がある、拡張子が.jsxbinに固定される、他の開発者が設定値や共通処理を編集・カスタマイズしにくくなる、といったデメリットがあります。設定値など読める状態で残したい部分と、難読化する処理を分けるための構成です。全体をjsxbin化する構成に比べ、可読性が必要な設定部分を残せるため、運用の柔軟性が高まります。

配布する前に、何を確認しますか?

配布前に、対象のAdobeアプリで実行を確認し、編集用の元コードは別に保管してください。

記事のサンプルは、実際に動かして確認されていますか? コードはどこにありますか?

いいえ。この記事のサンプルは、今回Adobeアプリ上では実行していません。この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめられています。ExtendScript ToolkitやExtendScript Debuggerの仕様は変わることがあるため、最新はAdobeの公式情報で確認してください。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

Photoshopのおすすめ書籍

動作要件とPCの確認項目

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次