.Net Framework 4.0 で TLS 1.2 が本当に使えないのか調べてみた その3
Windows 2000で TLS 1.2 が本当に使えないのか調べてみた
Windows XP + .Net Framework で TLS 1.2 を使ってみた
.Net Framework 4.0 で TLS 1.2 が本当に使えないのか調べてみた その1
.Net Framework 4.0 で TLS 1.2 が本当に使えないのか調べてみた その2
.method assembly hidebysig specialname instance valuetype System.Security.Authentication.SslProtocols get_SslProtocol() // CODE XREF: get_SslProtocol+6p // sub_D2B00+A1p ... { .maxstack 2 .locals init (class System.Net.SslConnectionInfo V0, valuetype System.Security.Authentication.SslProtocols V1) ldarg.0 ldc.i4.1 call instance void System.Net.Security.SslState::CheckThrow(bool authSucessCheck) ldarg.0 call instance class System.Net.Security.SecureChannel System.Net.Security.SslState::get_Context() callvirt instance class System.Net.SslConnectionInfo System.Net.Security.SecureChannel::get_ConnectionInfo() stloc.0 ldloc.0 brtrue.s loc_D2808 ldc.i4.0 ret loc_D2808: // CODE XREF: sub_D27F0+14j loc_D281A: // CODE XREF: sub_D27F0+23j loc_D2825: // CODE XREF: sub_D27F0+2Ej loc_D2836: // CODE XREF: sub_D27F0+3Cj |
上記の関数TLS1.1/1.2に対応してないので大幅変更が必要なのだが普通にコードを書くと倍の大きさになるので工夫する
どうやら、クライアントとサーバー機能のフラグがどちらかたっていたら両方立てるってことらしい。
.method assembly hidebysig specialname instance valuetype System.Security.Authentication.SslProtocols get_SslProtocol() // CODE XREF: get_SslProtocol+6p // sub_D2B00+A1p ... { .maxstack 4 .locals init (class System.Net.SslConnectionInfo V0, valuetype System.Security.Authentication.SslProtocols V1) ldarg.0 ldc.i4.1 call instance void System.Net.Security.SslState::CheckThrow(bool authSucessCheck) ldarg.0 call instance class System.Net.Security.SecureChannel System.Net.Security.SslState::get_Context() callvirt instance class System.Net.SslConnectionInfo System.Net.Security.SecureChannel::get_ConnectionInfo() stloc.0 ldloc.0 brtrue.s loc_D2808 ldc.i4.0 ret loc_D2808: // CODE XREF: sub_D27F0+14j |
簡略化成功
アルゴリズム的には、クライアント(0xaa2)とサーバー(0x551)のフラグを個別に取り出した後 シフトして or かけた後、3倍して同じことを実現している。
Common Language Runtime detected an invalid program. (スタック数オーバーらしい)
とか
JIT Compiler encountered an internal limitation
とか
Field token out of range.
出て困ったけど、maxstack増やして解決できた。
Comments