IE9でインストールされたChakraJavascriptエンジンのCLSIDはです
{16d51579-a30b-4c8b-a276-0ff4dc41e755}
。
InProcServer32は%windir%\System32\jscript9.dll
です。
私が見つけたProgIdはありません。それは少し奇妙です。通常、ペアになっているProgIdエントリとCLSIDエントリは相互に参照します。特定のCOMオブジェクトについて、レジストリのProgIdキーにはCLSIDと呼ばれるサブキーがあり、CLSIDレジストリキーにはProgIdと呼ばれるサブキーがあり、それらは相互に参照します。ただし、IE9 CLSIDのProgIdサブキーは「JScript」です。これはもちろん、v5.8JscriptCLSIDを参照します。これがMicrosoftによる間違いなのか、それとも意図的な難読化なのかはわかりません。IE9以外でChakraエンジンを使用することを望んでいないからです。私には目的があるように見えます。
レジストリでjscript9.dllを検索するだけで、CLSIDについて知りました。
スクリプトエンジンをホストする.NETコードがある場合は、CLSIDを直接使用して、IE9 JavaScriptエンジン(「Chakra」)のIActiveScriptオブジェクトをインスタンス化できます。コードは次のようにする必要があります。
private const string clsIdPattern =
@"^(?<curly>\{)?[a-zA-Z0-9]{8}(?:-[a-zA-Z0-9]{4}){3}-[a-zA-Z0-9]{12}(?(curly)\})$";
public ScriptEngine(string language)
{
if (language == null)
throw new ArgumentNullException("language");
Type engineType = null;
if (Regex.IsMatch(language, clsIdPattern))
{
// it's a CLSID
var guid = new System.Guid(language);
engineType = Type.GetTypeFromCLSID(guid, true);
}
else
{
// assume vanilla progId
engineType = Type.GetTypeFromProgID(language, true);
}
var engine = Activator.CreateInstance(engineType) as IActiveScript;
上記でclsIdPattern
は、は、周囲のカーリーの有無にかかわらず、おなじみのGUID形式に一致する正規表現です。
上記のコードを前提として、「jscript」、「Javascript」、または「ECMAScript」を渡して、v5.8JScriptエンジンを取得できます。または、「{16d51579-a30b-4c8b-a276-0ff4dc41e755}」を渡して、IE9Javascriptエンジンを取得することもできます。明らかに、これを機能させるにはIE9をインストールする必要があります。
私はこれを試したところ、単純なケースで機能します。もう少し、本物で遊んでみます。
cscript.exeのようにWSHからChakraを実行する場合は、ProgIdが必要になると思います。
レジストリにProgidとして「Chakra」を作成し、正しいCLSIDを参照すると、次のようにIE9のエンジンを介してJSファイルを実行できます。
cscript.exe module.js //E:Chakra
たとえば、新しい「Chakra」ProgIdを挿入した後、次のようなスクリプトを指定します。
WScript.Echo( ScriptEngineMajorVersion() + "." +
ScriptEngineMinorVersion() + "." +
ScriptEngineBuildVersion());
...出力は次のようになります。
C:\dev\js>Version.js
5.8.16982
C:\dev\js>cscript.exe Version.js //E:Chakra
9.0.16434
そして、これがJavascriptでのAES暗号化のテストの結果であり、ChakraをJScript5.8と比較しています。
C:\dev\js\SlowAES>cscript.exe test.aes.js
AES encryption in Javascript.
password : Albatros1
salt : saltines (73616c74696e6573)
iterations: 1000
key : 172,52,20,51,98,71,49,195,14,31,141,51,129,8,94,66
iv : 212,27,28,156,83,245,0,35,176,157,45,141,209,143,158,248
plaintext : Hello, /r/javascript.
ciphertext: fdebac9f1ed1a13bac58f3cc6558e8b0367a94245dbbfe53cacc4979799fc182
decrypted : Hello, /r/javascript.
elapsed : 5011ms
C:\dev\js\SlowAES>cscript.exe test.aes.js //E:Chakra
AES encryption in Javascript.
password : Albatros1
salt : saltines (73616c74696e6573)
iterations: 1000
key : 172,52,20,51,98,71,49,195,14,31,141,51,129,8,94,66
iv : 212,27,28,156,83,245,0,35,176,157,45,141,209,143,158,248
plaintext : Hello, /r/javascript.
ciphertext: fdebac9f1ed1a13bac58f3cc6558e8b0367a94245dbbfe53cacc4979799fc182
decrypted : Hello, /r/javascript.
elapsed : 2593ms
レジストリにProgIdを設定するために、これを使用しました。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="Chakra"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="Chakra"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra]
@="JScript Language"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra\CLSID]
@="{16d51579-a30b-4c8b-a276-0ff4dc41e755}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra\OLEScript]
チャクラの露出を解除するか、レジストリを元に戻すために、私はこれを行いました:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="JScript"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{16d51579-a30b-4c8b-a276-0ff4dc41e755}\ProgID]
@="JScript"
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Chakra]
このレジストリスクリプトはx64Windowsで機能しました。x64がない場合は、WOW6432Node行を削除する必要があります。