Chrome 系ブラウザを Vista 互換モードで起動するとクラッシュする理由 その2

Chrome 系ブラウザを Vista 互換モードで起動するとクラッシュする理由

Vista 互換モードで実行すると、

[0603/145047:FATAL:exception_handler_server.cc(75)] Check failed:
ConvertStringSecurityDescriptorToSecurityDescriptor( kSddl,
SDDL_REVISION_1, &sec_desc, nullptr).
ConvertStringSecurityDescriptorToSecurityDescriptor: 指定されたデータ型は無効です。
(0x70C)
Backtrace:
    GetHandleVerifier [0x00437577+47239]
    InjectDumpProcessWithoutCrash [0x00423541+22913]
    InjectDumpProcessWithoutCrash [0x004237CA+23562]
    IsSandboxedProcess [0x0049A771+363681]
    IsSandboxedProcess [0x0049AAB5+364517]
    IsSandboxedProcess [0x00464AFA+143402]
    SetCrashKeyValueImpl [0x0041BE52+1794]
    GetUploadedReportsImpl [0x00416129+633]
    IsSandboxedProcess [0x00474624+207700]
    ProcessIdToSessionId [0x77E789D5+381]

こんな感じのログが出て INT3 が発生して強制終了する

crashpad/exception_handler_server.cc at master ・ electron/crashpad

HANDLE CreateNamedPipeInstance(const std::wstring& pipe_name,
bool first_instance) {
SECURITY_ATTRIBUTES security_attributes;
SECURITY_ATTRIBUTES* security_attributes_pointer = nullptr;
ScopedLocalAlloc scoped_sec_desc;
if (first_instance) {
// Pre-Vista does not have integrity levels.
const DWORD version = GetVersion();
const DWORD major_version = LOBYTE(LOWORD(version));
const bool is_vista_or_later = major_version >= 6;
if (is_vista_or_later) {
// Mandatory Label, no ACE flags, no ObjectType, integrity level
// untrusted.
const wchar_t kSddl[] = L"S:(ML;;;;;S-1-16-0)";
PSECURITY_DESCRIPTOR sec_desc;
PCHECK(ConvertStringSecurityDescriptorToSecurityDescriptor(
kSddl, SDDL_REVISION_1, &sec_desc, nullptr))
<< "ConvertStringSecurityDescriptorToSecurityDescriptor";
// Take ownership of the allocated SECURITY_DESCRIPTOR.
scoped_sec_desc.reset(sec_desc);
memset(&security_attributes, 0, sizeof(security_attributes));
security_attributes.nLength = sizeof(SECURITY_ATTRIBUTES);
security_attributes.lpSecurityDescriptor = sec_desc;
security_attributes.bInheritHandle = FALSE;
security_attributes_pointer = &security_attributes;
}
}

どうやらこれっぽい。

ここスキップしてみたらどうなるんだろ・ω・?

 0049A6B0                           SUB_L0049A6B0:
 0049A6B0  55                                push    ebp
 0049A6B1  8BEC                              mov    ebp,esp
 0049A6B3  81ECF8000000                      sub    esp,000000F8h
 0049A6B9  A18CB24E00                        mov    eax,[L004EB28C]
 0049A6BE  33C5                              xor    eax,ebp
 0049A6C0  8945FC                            mov    [ebp-04h],eax
 0049A6C3  8A4D0C                            mov    cl,[ebp+0Ch]
 0049A6C6  33C0                              xor    eax,eax
 0049A6C8  53                                push    ebx
 0049A6C9  56                                push    esi
 0049A6CA  33DB                              xor    ebx,ebx
 0049A6CC  884DD3                            mov    [ebp-2Dh],cl
 0049A6CF  33F6                              xor    esi,esi
 0049A6D1  895DCC                            mov    [ebp-34h],ebx
 0049A6D4  57                                push    edi
 0049A6D5  8B7D08                            mov    edi,[ebp+08h]
 0049A6D8  84C9                              test    cl,cl
 0049A6DA  0F84BE000000                      jz     L0049A79E
 0049A6E0  FF1534134B00                      call    [KERNEL32.dll!GetVersion]
 0049A6E6  3C06                              cmp    al,06h
 0049A6E8  0F82AB000000                      jc     L0049A799 -> jmp  L0049A799
 0049A6EE  0F100554CF4D00                    movups    xmm0,[L004DCF54]            ; SSE
 0049A6F5  56                                push    esi
 0049A6F6  8D45CC                            lea    eax,[ebp-34h]
 0049A6F9  0F1145D4                          movups    [ebp-2Ch],xmm0            ; SSE
 0049A6FD  50                                push    eax
 0049A6FE  0F100564CF4D00                    movups    xmm0,[L004DCF64]            ; SSE
 0049A705  6A01                              push    00000001h
 0049A707  8D45D4                            lea    eax,[ebp-2Ch]
 0049A70A  0F1145E4                          movups    [ebp-1Ch],xmm0            ; SSE
 0049A70E  50                                push    eax
 0049A70F  F30F7E0574CF4D00                  movq    xmm0,[L004DCF74]            ; SSE2
 0049A717  660FD645F4                        movq    [ebp-0Ch],xmm0            ; SSE2
 0049A71C  E8377BFDFF                     &n
bsp;  call    jmp_ADVAPI32.dll!ConvertStringSecurityDescriptorToSecurityDescriptorW

→ 初動では落ちなくなりました・ω・;

おすすめ

コメントを残す

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