firefox をVista互換モードで起動するとクラッシュする理由
FirefoxをVista互換モードで動かすとクラッシュする理由を調べてみた
sandboxbroker.dll
call [KERNEL32.dll!GetNativeSystemInfo] mov ecx,[esp+14h] movzx eax,cx push 00000009h pop edx test eax,eax jz L10006595 cmp eax,00000006h jz L1000658C cmp eax,edx jnz L10006599 mov dword ptr [esi+1Ch],00000001h jmp L10006599 L1000658C: mov dword ptr [esi+1Ch],00000002h jmp L10006599 L10006595: and dword ptr [esi+1Ch],00000000h L10006599: cmp dword ptr [esp+3Ch],00000006h // NT 6.x mov eax,[esp+28h] mov [esi+20h],eax mov eax,[esp+30h] mov [esi+24h],eax jnz L10006640 push SSZ1002BB7C_GetProductInfo push SWC1002BB00_kernel32_dll call [KERNEL32.dll!GetModuleHandleW] push eax call [KERNEL32.dll!GetProcAddress] lea ecx,[esp+0Ch] push ecx push 00000000h push 00000000h push [esp+4Ch] push [esp+4Ch] call eax // GetProductInfo 強制コール mov eax,[esp+0Ch] cmp eax,0000000Fh ja L1000661A cmp eax,0000000Ch jnc L10006637 //PRODUCT_STANDARD_SERVER_CORE (d) //PRODUCT_ENTERPRISE_SERVER_CORE(e) //PRODUCT_ENTERPRISE_SERVER_IA64(f) cmp eax,00000001h jz L1000662E // PRODUCT_ULTIMATE(1) cmp eax,00000004h jz L1000662E // PRODUCT_ENTERPRISE(4) cmp eax,00000006h jz L1000662E // PRODUCT_BUSINESS(6) jbe L10006600 // PRODUCT_HOME_BASIC_N(5) // PRODUCT_HOME_BASIC(2) // PRODUCT_HOME_PREMIUM (3) cmp eax,0000000Ah jbe L10006637 // PRODUCT_ENTERPRISE_SERVER(a) // PRODUCT_SMALLBUSINESS_SERVER (9) // PRODUCT_DATACENTER_SERVER(8) // PRODUCT_STANDARD_SERVER(7) L10006600: // PRODUCT_STARTER(b) and dword ptr [esi+10h],00000000h |
GetProductInfo function (Windows)
Vista専用の関数が遅延ロードなのに、NULLチェックされずにコールされてる
この処理回避すると動くようになった・ω・ 実装すべきかね?
また再発するんじゃねーの
msgbox(“GetProductInfo() unimplemented”); __debugbreak();
ttp://hg.mozilla.org/releases/mozilla-release/file/tip/security/sandbox/chromium/base/win/windows_version.cc
そういわれてみたら、cmp dword ptr [esp+3Ch],6 してるんすね
そうかーそしたら最小実装かのう