Windows 2000のIE6SP1で TLS 1.2 が本当に使えないのか調べてみた

Windows 2000で TLS 1.2 が本当に使えないのか調べてみた
Windowsには、WinInetとWinHttpの2つのHTTPスタックがあります

前の記事でWINHTTPを使ったプログラムではWin2000でもTLS 1.2 に接続できたのに IE6では接続できなかったのは、WININET を使っているからです。

IE6SP1のWININETでは、

 push L6307919C
 push SSZ63001F3C_SecureProtocols
 call SUB_L630218C3

Software\Microsoft\Windows\CurrentVersion\Internet Settings
のSecureProtocols の値を読み込んで L6307919C に一時格納しています。

L6302AA32:
  mov eax,[esi+78h]
  mov [eax],ebx
  lea eax,[esi+00000088h]
  mov dword ptr [esi+00000080h],00000001h
  mov [esi+00000084h],eax
  mov [esi+7Ch],ebx
  mov eax,[L6307919C]
 
cmp eax,[L6307965C]

 
jz L6302AA9D
 
push L6307DBD4
 
call [KERNEL32.dll!EnterCriticalSection]
 
push ebx
 
call SUB_L6302924A
 
push L6307DBD4
 
call [KERNEL32.dll!LeaveCriticalSection]
 
jmp L6302AA9D
L6302AA7B:
 
mov ecx,[edi+3Ch]
 
mov eax,ecx
 
imul eax,1Ch
 
cmp [eax+L63079618],ebx
 
jz L6302AA99
 
mov edx,[L6307919C]
 
test [eax+L6307961C],edx
 
jnz L6302AAAB

この値を L6307965C と比較して更新があるかチェックします。
更新があれば、 L6307961C またはL63079638と ANDを取って処理します。

この L6307961C はSecureProtocols の有効なフラグの乗数で
IE6SP1では 0x800000AA 固定です。

PCT 1.0 を使用する:0x0002
SSL 2.0 を使用する:0x0008
SSL 3.0 を使用する:0x0020
TLS 1.0 を使用する:0x0080

TLS 1.1 を使用する:0x0200
TLS 1.2 を使用する:0x0800

つまり、L6307961C を 0x80000AAA に書き換えれば TLS 1.2 のページがIE6SP1で表示できるのでは?
試してみた

 :

winhttp2

…表示できた… (・ω・) ええんかいw

#IE6で接続するのは危険なのでよいこのみんなは真似をしないでね!

おすすめ

コメントを残す

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