А также WindowsNT4/2000 на 80386 (если угодно)...
Инструментарий:
1)Hiew by SEN. (patching)
2)Heaventools PE Explorer 1.95 (для просмотра ресурсов сообщений во 2-ой части setupldr.bin/cmldr)
Почитав форум и порывся в инете, а также покопався в дистрибутиве ХП СП2 нашел где идет проверка на инструкции CPUID/CMPXCHG8B. Наличие оных требуется для установки данной винды. :idea:
Я копался в аглицкой версии XPюши с SP2.
Файл называется SETUPLDR.BIN (он переименовывается в cmldr при использовании WindowsPE).
Для справки: setupldr.bin (260272) состоит из двух частей:
1-ая: бинарный кусок. (19632) до сигнатуры MZ. (REALMODE загрузчик?)
2-ая: обычный PE-файл. (240640)
Вот выдержка из него.
[list]
.0031F3A6: E847420000 call .0003235F2 --- (1)
.0031F3AB: E82868FFFF call .000315BD8 --- (2) (проверка на 80486 и более камень)
.0031F3B0: 84C0 test al,al
.0031F3B2: 740B je .00031F3BF --- (3) (если успешно)
.0031F3B4: 686D230000 push 00000236D --- (4) (номер сообщения в таблице)
.0031F3B9: E8B0480000 call .000323C6E --- (5)
.0031F3BE: 59 pop ecx
.0031F3BF: E85868FFFF call .000315C1C --- (6) (проверка на CPUID)
.0031F3C4: F6C401 test ah,001
.0031F3C7: 750B jne .00031F3D4 --- (7) (если успешно)
.0031F3C9: 688C230000 push 00000238C --- (номер сообщения в таблице)
.0031F3CE: E89B480000 call .000323C6E --- (9)
.0031F3D3: 59 pop ecx
.0031F3D4: 381DA1E53300 cmp [0033E5A1],bl
.0031F3DA: BE50E03300 mov esi,00033E050
.0031F3DF: 0F858C040000 jne .00031F871 --- (A)
.0031F3E5: 8BBD1CFEFFFF mov edi,[ebp][-000001E4]
.0031F3EB: 6872E33100 push 00031E372 ;'osloadoptions'
.0031F3F0: 57 push edi
.0031F3F1: FF7508 push d,[ebp][08]
.0031F3F4: E8E3D0FEFF call .00030C4DC --- (C)
.0031F3F9: 3BC3 cmp eax,ebx
.0031F3FB: 0F84C5000000 je .00031F4C6 --- (D)
[/list:u]
Как патчить - можно догадаться. Отключить эти проверки.
НО! Этого недостаточно. Нужно еще пересчитать контрольную сумму в PE-заголовке, а потом "склеить" 1 и 2-ую части файла. Вуаля!
Дополнительно проверка на CPUID и CMPXCHG8B осуществляется в файле SETUPLDR.EXE (SETUPLDR.EX_) - это обычный PE-файл.
P.S. По аналогии можно сделать и с Windows 2003 Server и с Windows XP c SP1, c русскими версиями наверное тоже можно разобраться.
P.S.P.S. Для ленивых: Патченый файл могу выложить или выслать по почте.
Windows SSE Driver for Transmeta Crusoe CPU.
http://www.geocities.com/dalex_257/
Дело "за малым" - переписать его для перехвата СPUID, CMPXCHG8B.
А, кстати, каким куcком кода можно заменить инструкцию CMPXCHG8B?
Emul: pushfd cmp EAX,[m64] jnz Load_m cmp EDX,[m64+4] jnz Load_m mov [m64],EAX pop EAX or EAX,40h push EAX popfd mov EAX,[m64] mov [m64],EBX mov [m64+4],ECX jmp End_emul Load_m: pop EAX and EAX,FFFFFFBFh push EAX popfd mov EAX,[m64] mov EDX,[m64+4] End_emul: