Сейчас на форуме: Rio, asfa, _MBK_, Adler (+8 невидимых)

 eXeL@B —› Вопросы новичков —› игра Gulf War не запускается под 2000/XP и выше
Посл.ответ Сообщение

Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 февраля 2013 09:07 · Поправил: robot666
· Личное сообщение · #1

Пытаюсь понять, почему игра Gulf War - operation desert hammer не запускается под 2000/ХР и выше.
Сама игра лежит на обменнике https://mega.co.nz/#!0VY1RDDR!XUa4dl8vYpC3TRB5mJB0kEs4hvZYfijum1qEDZSwelk

Использую VirtualPC2007 + Windows98SE из вот этой сборки
http://rutracker.org/forum/viewtopic.php?t=4291029

Игра запускается в софтвар режиме, под досбокс с эмулятором глайда валится с ошибками.

Копаю файл \exec\Software_r.exe, сам по себе он не запускается, его вызывает hammer.exe на каталог выше.

Под VirtualPC2007 и Windows98 функция kernel32.GetEnvironmentStrings возвращает в EAX ссылку на "TMP=c:\windows\temp"

а под Win7 x32 возвращает
EAX на строку ASCII "=::=::"
ECX на строку ASCII "ir=C:\Windows"

То есть явно кривой путь для временных переменных, это для начала.
Почему то не найду описание функции kernel32 openprofileusermapping.

Под Win7 почему-то вызывается CreateEventW
004E225C . FF15 28A14E00 CALL DWORD PTR DS:[<&KERNEL32.CreateEventW>] ; \CreateEventW

а под Win98 в этом же месте olly пишет thunk to и функция WritePrivateProfileStringW или похоже на SwitchToThread я до конца не понял.

часто используется thunk, под вин7 распознает код вообще не так ))




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 13 февраля 2013 10:08 · Поправил: OnLyOnE
· Личное сообщение · #2

Обычно разные имена функций в импорте могут быть по причине того, что импортируются они приложением не по именам а по ординалу. Т.е. в разных системах одному и тому-же ординалу в одной и той-же библиотеке могут соответствовать разные АПИ. Могу только предположить, что на игре был ранее какой-то прот (пакер), ее распаковали и восстановили криво импорт.

-----
aLL rIGHTS rEVERSED!


| Сообщение посчитали полезным: robot666

Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 февраля 2013 12:12 · Поправил: robot666
· Личное сообщение · #3

Да, точно. Изначально там было что-то вроде safe-disk. Есть диск с оригинальной защитой, погляжу как там защита сделана.
Оригинальный ехе пишет выгрузи дебаггер.

И что делать с мусором, возвращаемым kernel32.GetEnvironmentStrings под Win7 ?
Диск safe-disk, но копия снята неверно, демон-тулз не помог.



Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 февраля 2013 15:26 · Поправил: robot666
· Личное сообщение · #4

Пропатчил переход условный перед GetEnvironmentStrings. Игра запустилась.

для SOFTWARE_R.exe

Code:
  1. 004E0EE7   EB 0C         JMP SHORT 004E0EF5 (было JE )
  2. 004E0EE9   C705 30B45700>MOV DWORD PTR DS:[57B430],1
  3. 004E0EF3   EB 28         JMP SHORT 004E0F1D
  4. 004E0EF5   FF15 C0A04E00 CALL NEAR DWORD PTR DS:[<&KERNEL32.GetEn>; [GetEnvironmentStrings



 eXeL@B —› Вопросы новичков —› игра Gulf War не запускается под 2000/XP и выше
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати