改造した、暗号化ライブラリを使う方法を解析

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 チェックを行っているので、処理を無効にする必要があります。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です