改造した、暗号化ライブラリを使う方法を解析
rsaenh.dllや dssenh.dllなどは advapi32.dllの暗号化ライブラリ関数によって管理されています。
たとえば、改竄した、rsaenh.dllを動作させた場合、
ファイル windows6.0-kb2028453-x86.cab の解凍は完了していません。 エラー コード =0x80090006 エラーの説明: 署名が無効です。 |
の様になります。
ADVAPI32のエラー箇所を確認すると
lea eax,[ebp-40h] push eax push edi lea eax,[ebp-24h] push eax push edi mov esi,SSZ79481E0C_Signature push esi push [ebp-00000090h] call RegQueryValueExA mov [ebp-20h],eax cmp eax,edi jnz L79493E3C ; <- レジストリが存在しない場合署名無効 push [ebp-40h] push 00000040h call ebx mov [ebp-4Ch],eax cmp eax,edi jz L79493E75 lea eax,[ebp-40h] push eax push [ebp-4Ch] lea eax,[ebp-24h] push eax push edi push esi push [ebp-00000090h] call RegQueryValueExA mov [ebp-20h],eax cmp eax,edi jnz L79493E3C |
まず、HKEY_LOCAL_MACHINE の SOFTWARE\Microsoft\Cryptography\Defaults\Provider\暗号化プロバイダ名 にある signature 値 を確認しロードできなければ署名無効に設定されてしまう訳です。
push edi ; <- 0 push [ebp-40h] ; <- Signature Size push [ebp-4Ch] ; <- Signature Value push [ebp-50h] call SUB_L794974A6 test eax,eax jnz L79493E46 L79493E3C: push 80090006h ; <- 署名が無効 jmp L79493F79 |
更に、その先でSignatureの値を照合して、無効だった場合もエラーが返ります。
変更時のレジストリアクセスです
HKLM\\SOFTWARE\\Microsoft\\Cryptography\\Defaults=[HKCrtptDef] OpenKey:[HKCrtptDef]\Provider Types\Type 024 QueryValue:[HKCrtptDef]\Provider Types\Type 024\Name QueryValue:[HKCrtptDef]\Provider Types\Type 024\Name QueryValue:[HKCrtptDef]\Provider Types\Type 024\Name QueryValue:[HKCrtptDef]\Provider Types\Type 024\Name CloseKey:[HKCrtptDef]\Provider Types\Type 024 OpenKey:[HKCrtptDef]\Provider\Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype) QueryValue:[HKCrtptDef]\Provider\Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)\Type QueryValue:[HKCrtptDef]\Provider\Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)\Image Path QueryValue:[HKCrtptDef]\Provider\Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)\Signature QueryValue:[HKCrtptDef]\Provider\Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype) |
試しに、この処理をSkipさせてみます。
ファイルを解凍しています... 進行状況: ファイル - 7 / 36 ファイルの解凍が完了しました... 合計 36 ファイル |
Windows 2000でMicrosoft Enhanced RSA and AES Cryptographic Provider が使えた?
ちなみに、rsaenh.dllや dssenh.dll の中でもリソース情報との照合(RCData\666や667) や signature チェックを行っているので、処理を無効にする必要があります。
Comments