Windows XP/2003 на 80486

А также 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)
Вот выдержка из него.

    .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)

Как патчить - можно догадаться. Отключить эти проверки.

НО! Этого недостаточно. Нужно еще пересчитать контрольную сумму в PE-заголовке, а потом "склеить" 1 и 2-ую части файла. Вуаля!

Дополнительно проверка на CPUID и CMPXCHG8B осуществляется в файле SETUPLDR.EXE (SETUPLDR.EX_) - это обычный PE-файл.

P.S. По аналогии можно сделать и с Windows 2003 Server и с Windows XP c SP1, c русскими версиями наверное тоже можно разобраться.

P.S.P.S. Для ленивых: Патченый файл могу выложить или выслать по почте.

[/]
Аватар пользователя sarinn

У темы появилось продолжение. Был найден драйвер, эмулирующий некоторые инструкции процессора.

Windows SSE Driver for Transmeta Crusoe CPU.
geocities.com/dalex_257/

Дело "за малым" - переписать его для перехвата СPUID, CMPXCHG8B.

А, кстати, каким куcком кода можно заменить инструкцию CMPXCHG8B?

DOOMED TO WALK THE EARTH AS SLAVES OF THE LIVING DEAD.

Увы, драйвер скорее всего не поможет - т.к. ядро грузится/инициализируется до драйвера.

Уважаемые коллеги, в переписке с нашими англоязычными партнерами помните: whether - который, weather - погода, wether - кастрированый баран!
У некоторых людей торс - это просто разветвитель, позволяющий подключить руки и голову к заднице.

sarinn писал(-а):
каким ку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:

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей