はじめに:再び突きつけられたライセンスエラー

Autodesk製品(MayaやAutoCADなど)を使用していると、突然「ライセンスが見つかりません」といったエラーに悩まされることがあります。特に、過去にネットワークライセンスの検証を回避する対策(いわゆる「薬」や「プロキシDLL」)を導入していた環境において、ある日を境に再びエラーが復活するケースが多発しています。

このような「ユーザーの意図しないタイミングでの機能停止」の背景には、The Pirate Bay(PB)などに代表されるクラックシーンとAutodeskとの長年にわたるイタチごっこがあります。過去には単にファイルを置き換えるだけで済んでいた対策も、近年では「AdskLicensingAgent」や「Autodesk Access」といったバックグラウンドサービスが常に監視・自己修復を行うようになり、ユーザーとベンダーの間でPCの主権を巡る争いが激化しています。

Autodeskのネットワークライセンス認証の仕組み

まずは、現在のAutodesk製品がどのようにライセンスを認証しているのか、その仕組みを簡単に解説します。

最近のAutodeskソフトウェアは、単体でライセンスを確認するのではなく、PC内で常駐している「Autodesk Desktop Licensing Service」というバックグラウンドサービスと通信を行います。このサービスの中核を担うのが AdskLicensingAgent と呼ばれるプログラム群です。

通常、非正規の利用やネットワークライセンスの迂回(バイパス)を行う際には、このAgentが存在するディレクトリに改造された version.dll などのプロキシDLL(薬)を配置します。WindowsのDLL読み込み順序の仕様を利用し、公式のファイルの代わりにこの改造DLLを読み込ませることで、ライセンス検証を常に「パス」した状態に偽装する仕組みです。

Autodeskの「サイレントアップデート」の仕組み

「一度対策したはずなのに、なぜまたエラーが出るのか?」
その答えは、Autodeskによる強引なサイレントアップデートにあります。

Autodeskは、ユーザーのPC上で Autodesk Access Service HostAdskLicensingUpdateSupport.exe などのサービスをこっそり走らせています。これらはバックグラウンドでAutodeskのサーバーと通信し、新しいライセンスコンポーネントが見つかると、ユーザーに一切の許可や通知なく勝手にアップデートを実行します。

ここがポイント:
Autodeskは単にファイルを上書きするのではなく、C:\Program Files (x86)\Common Files\Autodesk Shared\AdskLicensing\15.3.x のように新しいバージョンのフォルダを丸ごと新規作成し、そこに公式のクリーンなファイル群をダウンロードします。
これにより、古いフォルダ(例:15.1.x)に苦労して配置した version.dll は完全に無視されるようになり、最新の公式ファイルだけが読み込まれるため、突如としてライセンスエラーが復活するのです。

自分のPCでありながら、ソフトウェアの挙動や通信をコントロールできず、知らない間にシステムの中枢が書き換えられてしまう。これはユーザーに対する重大な主権侵害と言わざるを得ません。

トラブルシューティングと恒久的な対策

この面倒なイタチごっこに終止符を打つためには、単にDLLを再配置するだけでなく、Autodeskのバックグラウンド通信とアップデートの仕組みそのものを「停止」する必要があります。

以下に、それを実現する自動化バッチスクリプト(apply_fix.bat)のコードレベルでの詳細な解説を行います。このスクリプトは、最新のディレクトリを特定してDLLを配置しつつ、ファイル権限のロックダウンとファイアウォールによる通信遮断、さらにはIFEOによるプロセスの強制無力化をすべて自動で行います。

1. 最新ディレクトリの特定とDLLの再配置

:: Stop Licensing Service & Download Manager
net stop AdskLicensingService >nul 2>&1
taskkill /f /im downloadmanager.exe >nul 2>&1

:: Find the Current version directory
for /f "delims=" %%I in ('dir /b /ad /o-n "%LIC_BASE_DIR%\1*" 2^>nul') do (
    set "LATEST_DIR=%%I"
    goto :found_dir
)

まず、起動中のライセンスサービスと、裏でダウンロードを妨害する downloadmanager.exe を強制停止します。その後、ディレクトリを逆順にソートして検索することで、勝手に作られた最新バージョンのフォルダ(例:15.3.0.12981)を自動的に特定し、そこに version.dll を上書きコピーします。

2. システム権限のロックダウン(icacls)

:: Reset Target DLL permissions if it already exists from a previous run
if exist "%TARGET_DLL%" (
    icacls "%TARGET_DLL%" /remove:d "SYSTEM" >nul 2>&1
    icacls "%TARGET_DLL%" /remove:d "LOCAL SERVICE" >nul 2>&1
)
:: Copy the modified version.dll
copy /Y "%SRC_DLL%" "%TARGET_DLL%" >nul

:: Locking down version.dll permissions
icacls "%TARGET_DLL%" /deny "SYSTEM":(W,D,WDAC) >nul 2>&1
icacls "%TARGET_DLL%" /deny "LOCAL SERVICE":(W,D,WDAC) >nul 2>&1

DLLを配置した直後に、Windowsのアクセス制御コマンド icacls を使用して、OS自身(SYSTEMアカウントなど)からの「書き込み(W)」「削除(D)」権限を完全に剥奪(Deny)します。これにより、今後万が一Autodeskのアップデーターが動いたとしても、薬のファイルを上書きしたり消したりすることが物理的に不可能になります。

【実録トラブルシューティング】自分自身が施した「壁」に弾かれるという皮肉
このスクリプトの開発・適用プロセスにおいて、非常に興味深い現象に遭遇しました。スクリプトを実行した際、画面に Failed to copy version.dll. Check file paths and permissions. というエラーが表示されたのです。
当初は「セキュリティソフトによる誤検知と隔離」を疑いましたが、実際は全く異なりました。すでに前回の実行時に icacls による強力なロックダウンが適用されていたため、システム権限(SYSTEM)ですらそのファイルを上書き・削除することができなくなっていたのです。もちろん、ソフトウェア本体は古い薬(version.dll)が強固に守られた状態で何の問題もなく通常起動しました。
自分の作ったバッチファイルですら上書きできないというこの挙動こそ、この「ファイル権限の剥奪」がいかに強力な防衛手段であるかを証明する生々しいトラブルシューティング事例と言えます。

3. ファイアウォールによる通信の完全遮断

set "BANNED_EXES=AdskLicensingAnalyticsClient.exe AdskLicensingUpdateSupport.exe genuine-software.exe"
for %%E in (%BANNED_EXES%) do (
    for /f "delims=" %%P in ('dir /b /s "%LIC_BASE_DIR%\%%E" 2^>nul') do (
        netsh advfirewall firewall add rule name="Block %%E" dir=out action=block program="%%P" >nul 2>&1
    )
)

テレメトリ(利用状況送信)やアップデートを司る実行ファイル群を探し出し、netsh advfirewall コマンドでWindowsファイアウォールのアウトバウンド(送信)ルールに追加します。これにより、Autodeskのサーバーへの通信を遮断します。

4. IFEOを使った DownloadManager の恒久的な起動ブロック

今回の対策の「キモ」とも言えるのが、Image File Execution Options (IFEO) を用いたOSレベルでのプロセス無力化です。

:: Prevent downloadmanager.exe from ever launching via IFEO
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\downloadmanager.exe" /v Debugger /t REG_SZ /d "rundll32.exe" /f >nul 2>&1

Autodeskは、あの手この手で downloadmanager.exe を呼び出してアップデートを降らそうとします。IFEOの「Debugger」キーに rundll32.exe のようなダミーのプログラムを指定すると、OSは downloadmanager.exe が起動要求された瞬間に、それを強制的に rundll32.exe(何もせずに終了するプロセス)にすり替えます。
これにより、プログラムがPCのどこに隠れていようが、パスが変わろうが、**恒久的に起動そのものを阻止**することができます。

おわりに:PCの主権を取り戻すために

ソフトウェアベンダーが利便性やセキュリティを盾に、ユーザーの同意なしにシステムを書き換える「サイレントアップデート」は、現代のソフトウェア業界全体で問題視されつつあります。今回紹介したトラブルシューティングとスクリプトは、単にライセンスエラーを回避するだけでなく、自分の環境に対するコントロール(主権)を取り戻すための有効な防衛手段です。

技術的なイタチごっこは今後も続くと思われますが、ファイル権限のロックダウンやIFEOといったOSの根幹に関わる技術を駆使することで、ユーザーは強固な防御壁を築くことができるのです。