1. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление
    1. Если вы сделали перевод или русификацию игры, то вы можете поделиться своим творением здесь.
    2. О правилах вступления в группу переводчиков можно прочитать здесь.
    3. Русификации следует искать там.
  2. Пожалуйста, внимательно прочитайте правила раздела.

Wing Commander IV: Цена свободы

Тема в разделе "Переводы своими руками", создана пользователем Рыжий Тигра, 8 янв 2007.

  1. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Процесс перевода игры "Wing Commander IV: Цена свободы"- в разгаре. Желающие опробовать то, что получилось, могут добраться сразу до описания перевода и ссылок на его скачивание, щёлкнув по этой ссылке.

    Желающим посоучаствовать в переводе - рекомендую: полезные для переводчика ссылки - словари, книги, статьи и прочие материалы. Пополнение копилки приветствуется!

    См. также:
    Самая свежая тестовая сборка и инструкции по её установке
    Бета-тестеры, wэлкам!
    31 дек 2016

    Upd 1:
    В связи с участившимися постами здесь "чисто для поржать" - вынужден объясниться.
    6 янв 2014

    Upd 2:
    Приглашаю желающих поучаствовать в переводе. Отозвавшиеся будут увековечены в финальных титрах. (Никаких более материальных благ, к сожалению, обещать не могу. :( )
    27 мая 2014

    Upd 3:
    Наконец удалось пробить барьер несовместимости моего перевода с версией игры от GOG!!! Желающим опробовать - wэлкам!
    2 окт 2014
     
    Последнее редактирование: 21 апр 2017
    kirik-82 нравится это.
  2.  
  3. iunnamed

    iunnamed

    Хелпер

    Регистрация:
    15 янв 2007
    Сообщения:
    1.194
    "Application Compatibility Layers" и "Режим совместимости" о чём-то говорит?

    Проблема с зависанием только в Windows XP x86?
    Тогда другие версии и их адреса никого не интересуют (для этого и сделаны все эти проверки перед CloseHandle()).
    Проверил на другом AcLayers.dll за 2008 год с другим размером - работает.

    Осталось от отладочного кода - убрал.

    См. в MSDN описание GetHandleInformation(), второй параметр является обязательным, функция используется для проверки валидности Event Handle. Т.е. если это другая версия библиотеки (не Windows XP), то с большей долей вероятности в этом месте памяти будет что попало, а не валидный Event Handle.

    Предлагаю сделать SetEvent() и поглядеть на результат - как надоест, то взглянуть на код AcLayers.dll в дизассемблере и увидеть, что перед WaitForSingleObject() стоит ResetEvent().
    Если приложение завершило работу и Windows выгружает dll-файлы (напомню, что данный хак нужно вызывать в dll, когда она полностью выгружается (DLL_PROCESS_DETACH) - т.е. вызвавший её процесс завершает работу), то на все возможные последствия (если таковые объявятся) будет уже Deep Purple.

    Если opengl32.dll есть в импорте каких-либо других библиотек или самого wc4dvd.exe, то логично, что LoadLibrary() только в какой-то одной библиотеке ничего не изменит.

    hackacls.c
     
  4. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Не-а! И MDSN2001/2005 на эту фразу отмалчивается. Колись, что/где читать подробнее.
    (мрачно) Если бы. :-( Поройся по http://www.wcnews.com/chatzone/forums/tech-support.7/ - с год-два назад чуть не каждый месяц что-то вылазило - то в семёрке, то в восьмёрке... не от хорошей жизни HCl вклеил TerminateProcess() в DllMain().
    Раньше ты этого не говорил.
    А перехват ExitProcess()'а не подойдёт?
    Ё-пс! Так LoadLibrary(), FreeLibrary, твой хак или какие два из трёх?
    Bato-San, перелогинься! :-)

    ---------- Сообщение добавлено в 22:49 ---------- Предыдущее сообщение размещено в 22:43 ----------

    Трюк с FreeLibrary( "opengl32.dll" ) не срабатывает: под удалённым отладчиком фурычит, без него фигушки. :-( Возможно, как то связано с reference count'ом, но как его получить - ХЗ. :-(
     
    Последнее редактирование: 4 окт 2014
    Genesis нравится это.
  5. iunnamed

    iunnamed

    Хелпер

    Регистрация:
    15 янв 2007
    Сообщения:
    1.194
    Оно просто расшифровывается так.

    Чей это текст?

    Ну, например:
    Можно и так.

    Можно ссылку на сообщение, где в этой теме писал про FreeLibrary()?.. Ещё раз прошу внимательно перечитать это сообщение, исходные коды и комментарии к ним, подумать, а уже потом писать. Иначе сейчас тоже начну просить перелогиниться.
    GetModuleHandle() возвращает адрес уже загруженного модуля (а модуль AcLayers.dll загружает сама система при включённом режиме совместимости перед тем как передать управление программе пользователя).

    Если не поможет, то поясняю:
    1) Либо в программе загружать opengl32.dll через LoadLibrary(), использовать и выгружать (что в данном случае, похоже, неприменимо, раз эта библиотека есть ещё где-то в импорте).
    2) Либо использовать хак.
    Если перечитать первое сообщение внимательно, то там ровно это и написано.
    Как ещё понятнее объяснить - ума не приложу.
     
  6. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    А-аа. Это не выход - в dwrap.dll (и в сырцах, которые я имплантировал к себе в dxmci) заюзан не один десяток opengl'ных функций, я ж вспотею их все GetProcAddress()'ами добывать. :-(
    А тут же не написано "...и ни в коем случае не win7/win8". :-) У лично меня под руками других ОСов нет - только две тачки, с XP и 2K.
    "Перед выходом" - понятие растяжимое; в том же DllMain()'е много чего делать нельзя вообще, в т.ч. играться с .dll'ами. Впрочем, согласен: тут я провтыкал. :-(
    (разочарованно) А-аа...
    Я, собственно, к чему. При наличии средств инъекции кода (мой хаковый движок) можно обойтись вообще без "совместимости"; единственное, зачем она на сейчас нужна (по крайней мере, мне), это задавить проблему с пропаданием музыки.
    И вот тут твоё знание aclayer'а как раз и пригодится. Знание логики работы механизма "совместимости" существенно сужает зону поиска в коде игры. Возьмёшься?
    Ну, или по крайности делись результатами дизассемблирования и каким-никаким описанием, как этот aclayer работает.

    ---------- Сообщение добавлено в 01:16 ---------- Предыдущее сообщение размещено в 01:08 ----------

    Это-то понятно. Интересно, как бы это его начисто выгрузить - именно прилинкованный, а не вручную загруженный. Даже не столько сейчас интересно, сколько вообще, на будущее.
    ОК. Тем более что он у меня давно пекрехвачен и сейчас стаскиваю туда кучу полезных вещей - деинициализацию всего наинициализированного игрой, сторонними доработками (того же HCl'овского opengl'а, чтобы по крайней мере выбраться из полноэкранки перед завершением) и моими довесками (например, работа с directshow graph'ом переехала в отдельный thread и деинициализировать его в DllMain()'е уже поздновато).
     
    Последнее редактирование: 5 окт 2014
  7. Sherhan007

    Sherhan007

    Регистрация:
    9 июл 2013
    Сообщения:
    214
    Хе-хе, как раз таки Лексингтон более похож на офиц К., а Интрепид на Д. и Л. Тактику у Лексингтона похоже как раз перенял К. - провокации, уничтожение мирных.
     
  8. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Sherhan007, типа того. :-) А в качестве М. то ли Ландсрейх, то ли вообще Wилфорд?
     
  9. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Пока сделал тупую, но кое-как работающую вещь - перехватчик ExitProcess()'а:
    Код:
    DECLSPEC_NORETURN VOID WINAPI wc4_exit_process( IN UINT uExitCode ) {
      full_stop(); // отдаю все буферы, удаляю объекты, закрываю потоки, деинициализирую и т.д.
      if ( GetModuleHandle( "aclayers.dll" ) == NULL )
        ExitProcess( uExitCode );
      else
        TerminateProcess( GetCurrentProcess(), uExitCode );
    }
    По крайней мере не под "совместимостью" всё пойдёт как у людей.
     
  10. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Есть идея насчёт поисследовать "режим совместимости": сделать дампы с запущенного процесса (по крайней мере с read-only сегментов - .text, .rdata, .idata) с "совместимостью" и без и сравнить. По крайней мере сразу будет видно, если "совместимость" патчит код или перехватывает API'шные вызовы.
     
  11. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Проверил. Код не изменялся, read-only данные не изменялись, ресурсы не изменялись, отличия только в таблице импорта - "режим совместимости" перехватывает на себя в общей сложности 37 функций:
    Код:
    offset    original aclayers
    ------    -------- --------
    004D43A8: 77DC7852 71692B88  ADVAPI32.dll!RegOpenKeyExA      -> aclayers.dll!L71692B88
    004D43AC: 77DC7ABB 71690DB7  ADVAPI32.dll!RegQueryValueExA   -> aclayers.dll!L71690DB7
    004D43B0: 77DC6C27 716909D8  ADVAPI32.dll!RegCloseKey        -> aclayers.dll!L716909D8
    004D43B8: 7374CCA3 7167DADD  DDRAW.dll!DirectDrawCreate      -> aclayers.dll!L7167DADD
    004D43C8: 77F1EA5B 716859A0  GDI32.dll!RealizePalette        -> aclayers.dll!L716859A0
    004D43D0: 77F15A71 716814C0  GDI32.dll!GetDeviceCaps         -> aclayers.dll!L716814C0
    004D43E8: 77F15D77 716852DF  GDI32.dll!SetTextColor          -> aclayers.dll!L716852DF
    004D43F0: 77F16BFA 7167FF8E  GDI32.dll!DeleteObject          -> aclayers.dll!L7167FF8E
    004D43FC: 7C801A28 7168BE75  KERNEL32.dll!CreateFileA        -> aclayers.dll!L7168BE75
    004D4400: 7C8302C5 716815B4  KERNEL32.dll!GetDiskFreeSpaceA  -> aclayers.dll!L716815B4
    004D4414: 7C831EAD 7167C0F7  KERNEL32.dll!DeleteFileA        -> aclayers.dll!L7167C0F7
    004D444C: 7C80B56F 71681301  KERNEL32.dll!GetModuleFileNameA -> aclayers.dll!L71681301
    004D4474: 7C81127A 71694CF8  KERNEL32.dll!GetVersion         -> aclayers.dll!L71694CF8
    004D4478: 7C812FBD 71681216  KERNEL32.dll!GetCommandLineA    -> aclayers.dll!L71681216
    004D4488: 7C801812 716872CE  KERNEL32.dll!ReadFile           -> aclayers.dll!L716872CE
    004D448C: 7C80AE40 5D077774  KERNEL32.dll!GetProcAddress     -> shimeng.dll
    004D4494: 7C801D7B 71689E59  KERNEL32.dll!LoadLibraryA       -> aclayers.dll!L71689E59
    004D4498: 7C80AC7E 71687651  KERNEL32.dll!FreeLibrary        -> aclayers.dll!L71687651
    004D44A0: 7C809BE7 7168BF05  KERNEL32.dll!CloseHandle        -> aclayers.dll!L7168BF05
    004D44A4: 7C8106D7 6FE2142A  KERNEL32.dll!CreateThread       -> acgenral.dll
    004D44AC: 7C80EE77 71680DDA  KERNEL32.dll!FindClose          -> aclayers.dll!SUB_L71680DDA
    004D44B0: 7C813879 71686F02  KERNEL32.dll!FindFirstFileA     -> aclayers.dll!L71686F02
    004D44B4: 7C834EB1 71680B5E  KERNEL32.dll!FindNextFileA      -> aclayers.dll!L71680B5E
    004D44B8: 7C82C348 7168A537  KERNEL32.dll!SetPriorityClass   -> aclayers.dll!L7168A537
    004D44C8: 7C82FA1E 71685064  KERNEL32.dll!QueryPerformanceFrequency -> aclayers.dll!L71685064
    004D44D0: 7C801AD4 716887DA  KERNEL32.dll!VirtualProtect     -> aclayers.dll!L716887DA
    004D44D4: 7C80A4C7 71685027  KERNEL32.dll!QueryPerformanceCounter -> aclayers.dll!L71685027
    004D4500: 7C8115DC 71688752  KERNEL32.dll!GetFileAttributesA -> aclayers.dll!L71688752
    004D4508: 7C810E27 71685E88  KERNEL32.dll!WriteFile          -> aclayers.dll!L71685E88
    004D452C: 7E37C29D 71685614  USER32.dll!SetWindowLongA       -> aclayers.dll!L71685614
    004D4530: 7E37AF56 716858C7  USER32.dll!ShowWindow           -> aclayers.dll!L716858C7
    004D453C: 7E38C702 716804E2  USER32.dll!DrawTextA            -> aclayers.dll!L716804E2
    004D454C: 7E37E4A9 71687F33  USER32.dll!CreateWindowExA      -> aclayers.dll!L71687F33
    004D4554: 7E37EA5E 71685649  USER32.dll!RegisterClassA       -> aclayers.dll!L71685649
    004D4574: 7E37772B 7168592C  USER32.dll!GetMessageA          -> aclayers.dll!L7168592C
    004D4590: 7E37A340 716858F8  USER32.dll!PeekMessageA         -> aclayers.dll!L716858F8
    004D45A4: 76B2F666 716828FD  WINMM.dll!joyGetDevCapsA        -> aclayers.dll!L716828FD
    Сижу, думаю - что с этим списком можно сделать полезного... :-

    Приложение - мой экземпляр aclayers.dll и дизассембл от него с подписанными точками входа в перехватчики функций:
     

    Вложения:

    • aclayers.7z
      Размер файла:
      779,3 КБ
      Просмотров:
      35
    Последнее редактирование: 7 окт 2014
    AxXxB нравится это.
  12. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    К восьмой бете - заменяю dxmci.dll: была пара мелких, но неприятных глюков, исправил. Глюки засёк olek2010.

    Продолжаю исследовать "режим совместимости с '95". Склоняюсь к идее, что в залётах звука под XP и выше виновата IDirectSound8::DuplicateSoundBuffer() с ейным отказом от расшаривания памяти буферов, но вещдоков на руках пока не имею, коплю логи.
     

    Вложения:

  13. iunnamed

    iunnamed

    Хелпер

    Регистрация:
    15 янв 2007
    Сообщения:
    1.194
    Именно. Оно перехватываект импорты некоторых функций (их, скорее всего, больше 37 - здесь оно просто перехватило только то, что нужно было).
    Если поставить вот эту штуку Application Compatibility Toolkit 5.6 и выбрать у какого-нибудь приложения режим совместимости с Windows 95, а потом посмотреть что в него входит - там будет очень много галочек с эмуляцией тех или иных вещей. Можно их по одной убирать и смотреть чего изменилось.
    Если присмотреться к тому что включилось, то можно увидеть там EmulateDirectDrawSync из-за которого, по всей видимости, всё и зависает (там два потока друг от друга ждут Event и впадают в бесконечное ожидание). Если эту штуку как-нибудь отключить, оставив эмуляцию остального, то, по идее, должно перестать зависать.
     
  14. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    А вот с этим у меня сложности. Под win2k оно не идёт, а на второй тачке, с XP, попытка установить какой-либо .msi (не только ACT) обламывается с громким треском:

    6cf416dc2c81018ddf28216e0e86eeaf.png

    Что за фигня - не пойму. И гугля тоже не знает. :-(
    Не зависает - перестаёт крутиться фоновая музыка, только и всего. Даже короткие музыкальные вставки типа "пусть сдохнут все мои враги" и "шеф, усьо пропало" выводятся как обычно. (Кстати, игра сама делает всю картинку, а роль directdraw'а сводится только к вывести готовую; я про это писал - последний раз где-то пару месяцев назад.)
    А со звуком я как раз разбираюсь. Додумался как перехватить и вывести в лог / под отладчик все directsound'ные операции, как раз делаю программную часть.
    Можешь нарисовать список в части касающейся directsound'а? На пока есть подозреваемый номер раз, но сдаётся мне, что он не единственный. :-(
     
  15. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Пока не оправдалось: "режим совместимости" перехватывает DirectSoundCreate() на себя, но все методы IDirectSound'а и его IDirectSoundBuffer'ов выполняются внутри dsound.dll. Странно. Продолжаю копать.
    Была идея, что гадят возможные гонки в выоводе звука несколькими потоками. Проверил, тоже не оправдалась. :-(
     
    Последнее редактирование: 10 окт 2014
  16. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Более того: у них те же самые адреса, независимо от "режима совместимости".
    Итак, задача в каком-то смысле упрощается - надо всего лишь :-) раскопать конструктор IDirectSound'а (технически: функцию DirectSoundCreate()) из aclayers.dll).
     
  17. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Раскопал. Ничего не делает. :-(
    Для очистки совести - из перехватчика вызываю "старый" обработчик, который в dsound.dll'е. Включил "совместимость" и с десяток раз прошёл вылет B1, где граблю с фоновой музыкой проще всего получить. Хоть бы фиг: нету грабли, хоть тресни. Для контроля отключил "совместимость" и снова прошёл - музыка пропадает.
    Вывод: DirectSoundCreate() не виноват, надо проверять остальные 36 перехватываемых "совместимостью" функций. :-((((((
     
  18. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Проверил. Прикольно: той самой функцией, от которой зависит грабля с музыкой, оказался CreateFile(). Сажусь колоть её обработчик в "режиме совместимости".

    ---------- Сообщение добавлено в 06:30 ---------- Предыдущее сообщение размещено в 05:31 ----------

    Заглянул. Уй@ля, оно такое навороченное и запутанное!.. :-(
     
  19. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.198
    ну и зачем ? Зайди в дебагер, кинь бряк на CreateFile() перед нужным куском игры и посмотри, когда упадёт, что именно произошло. Думаю, что результат тебе понравится.:spiteful:

    Во внутренностях самого CreateFile() копаться не надо. В принципе, достаточно почитать документацию, что бы понять, что именно происходит.
     
  20. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Спасибо Кэп! Ты настоящий половой гигант теоретической хакерной мысли! А то б я сам бы не догадался:
    Код:
    HANDLE WINAPI wc4_create_file( LPCTSTR lpFileName,
        DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
        DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ) {
      print_log_start(( "ACL_TRACE: CreateFileA( \"%s\" ) ", lpFileName ));
      return ( CreateFileA( // тут break, дальше управление на aclayers.dll: 0x7168BE75
        lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes,
        dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile ) );
    }
    И что, по-твоему, делает этот кусок?
    Код:
     7168BE75                           L7168BE75:                ; KERNEL32.dll!CreateFileA
     7168BE75  8B                       		db	8Bh;   '<'
     7168BE76  FF                       		db	FFh;   'я'
     7168BE77  55                       		db	55h;   'U'
     7168BE78  8B                       		db	8Bh;   '<'
     7168BE79  EC                       		db	ECh;   'м'
     7168BE7A  A1                       		db	A1h;   'Ў'
     7168BE7B  64DB6B71                 		dd	L716BDB64
     7168BE7F  56                        		push	esi
     7168BE80  FF7520                    		push	[ebp+20h]
     7168BE83  FF751C                    		push	[ebp+1Ch]
     7168BE86  FF7518                    		push	[ebp+18h]
     7168BE89  FF7514                    		push	[ebp+14h]
     7168BE8C  FF7510                    		push	[ebp+10h]
     7168BE8F  FF750C                    		push	[ebp+0Ch]
     7168BE92  FF7508                    		push	[ebp+08h]
     7168BE95  FF500C                    		call	[eax+0Ch]    ; 0x716870D2 - ещё один обработчик CreateFile()'а
     7168BE98  8BF0                      		mov	esi,eax
     7168BE9A  83FEFF                    		cmp	esi,FFFFFFFFh
     7168BE9D  7412                      		jz 	L7168BEB1
     7168BE9F  FF7508                    		push	[ebp+08h]
     7168BEA2  E8C1FBFFFF                		call	SUB_L7168BA68
     7168BEA7  85C0                      		test	eax,eax
     7168BEA9  7406                      		jz 	L7168BEB1
     7168BEAB  56                        		push	esi
     7168BEAC  E842FFFFFF                		call	SUB_L7168BDF3
     7168BEB1                           L7168BEB1:
     7168BEB1  8BC6                      		mov	eax,esi
     7168BEB3  5E                        		pop	esi
     7168BEB4  5D                        		pop	ebp
     7168BEB5  C21C00                    		retn	001Ch
    А этот?
    Код:
     716870D2                           L716870D2:            ; ещё один CreateFileA
     716870D2  8B                       		db	8Bh;   '<'
     716870D3  FF                       		db	FFh;   'я'
     716870D4  55                        		push	ebp
     716870D5  8BEC                      		mov	ebp,esp
     716870D7  A1C4DA6B71                		mov	eax,[L716BDAC4]
     716870DC  56                        		push	esi
     716870DD  8B7508                    		mov	esi,[ebp+08h]
     716870E0  57                        		push	edi
     716870E1  FF7520                    		push	[ebp+20h]
     716870E4  FF751C                    		push	[ebp+1Ch]
     716870E7  FF7518                    		push	[ebp+18h]
     716870EA  FF7514                    		push	[ebp+14h]
     716870ED  FF7510                    		push	[ebp+10h]
     716870F0  FF750C                    		push	[ebp+0Ch]
     716870F3  56                        		push	esi
     716870F4  FF506C                    		call	[eax+6Ch]  ; 7167E756 - снова обработчик CreateFile()'а
     716870F7  56                        		push	esi
     716870F8  8BF8                      		mov	edi,eax
     716870FA  E898FCFFFF                		call	SUB_L71686D97
     716870FF  83FFFF                    		cmp	edi,FFFFFFFFh
     71687102  754D                      		jnz	L71687151
     71687104  53                        		push	ebx
     71687105  8B1DA8106671              		mov	ebx,[KERNEL32.dll!GetLastError]
     7168710B  FFD3                      		call	ebx
     7168710D  3DAA000000                		cmp	eax,000000AAh
     71687112  753C                      		jnz	L71687150
     71687114  56                        		push	esi
     71687115  E873FDFFFF                		call	SUB_L71686E8D
     7168711A  FF7520                    		push	[ebp+20h]
     7168711D  A1C4DA6B71                		mov	eax,[L716BDAC4]
     71687122  FF751C                    		push	[ebp+1Ch]
     71687125  FF7518                    		push	[ebp+18h]
     71687128  FF7514                    		push	[ebp+14h]
     7168712B  FF7510                    		push	[ebp+10h]
     7168712E  FF750C                    		push	[ebp+0Ch]
     71687131  56                        		push	esi
     71687132  FF506C                    		call	[eax+6Ch]  ; 7167E756
     71687135  8BF8                      		mov	edi,eax
     71687137  83FFFF                    		cmp	edi,FFFFFFFFh
     7168713A  7504                      		jnz	L71687140
     7168713C  FFD3                      		call	ebx
     7168713E  EB10                      		jmp	L71687150
     71687140                           L71687140:
     71687140  56                        		push	esi
     71687141  6878616671                		push	SSZ71666178__CreateFileA__Success_after_CD_s
     71687146  6A03                      		push	00000003h
     71687148  E80FFCFFFF                		call	SUB_L71686D5C
     7168714D  83C40C                    		add	esp,0000000Ch
     71687150                           L71687150:
     71687150  5B                        		pop	ebx
     71687151                           L71687151:
     71687151  8BC7                      		mov	eax,edi
     71687153  5F                        		pop	edi
     71687154  5E                        		pop	esi
     71687155  5D                        		pop	ebp
     71687156  C21C00                    		retn	001Ch
    А этот?
    Код:
    7167E756                           L7167E756:
     7167E756  8B                       		db	8Bh;   '<'
     7167E757  FF                       		db	FFh;   'я'
     7167E758  55                        		push	ebp
     7167E759  8BEC                      		mov	ebp,esp
     7167E75B  837D1803                  		cmp	dword ptr [ebp+18h],00000003h
     7167E75F  56                        		push	esi
     7167E760  8B7508                    		mov	esi,[ebp+08h]
     7167E763  7406                      		jz 	L7167E76B
     7167E765  837D1804                  		cmp	dword ptr [ebp+18h],00000004h
     7167E769  7531                      		jnz	L7167E79C
     7167E76B                           L7167E76B:
     7167E76B  F6450F40                  		test	byte ptr [ebp+0Fh],40h
     7167E76F  7506                      		jnz	L7167E777
     7167E771  837D1001                  		cmp	dword ptr [ebp+10h],00000001h
     7167E775  7425                      		jz 	L7167E79C
     7167E777                           L7167E777:
     7167E777  56                        		push	esi
     7167E778  E80AFFFFFF                		call	SUB_L7167E687
     7167E77D  85C0                      		test	eax,eax
     7167E77F  741B                      		jz 	L7167E79C
     7167E781  80650FBF                  		and	byte ptr [ebp+0Fh],BFh
     7167E785  56                        		push	esi
     7167E786  6858336671                		push	SSZ71663358__CreateFileA____s___attributes_m
     7167E78B  6A03                      		push	00000003h
     7167E78D  C7451001000000            		mov	dword ptr [ebp+10h],00000001h
     7167E794  E895FEFFFF                		call	SUB_L7167E62E
     7167E799  83C40C                    		add	esp,0000000Ch
     7167E79C                           L7167E79C:
     7167E79C  F6451F20                  		test	byte ptr [ebp+1Fh],20h
     7167E7A0  7414                      		jz 	L7167E7B6
     7167E7A2  80651FDF                  		and	byte ptr [ebp+1Fh],DFh
     7167E7A6  56                        		push	esi
     7167E7A7  6828336671                		push	SSZ71663328__CreateFileA____s___removed_NO_B
     7167E7AC  6A03                      		push	00000003h
     7167E7AE  E87BFEFFFF                		call	SUB_L7167E62E
     7167E7B3  83C40C                    		add	esp,0000000Ch
     7167E7B6                           L7167E7B6:
     7167E7B6  FF7520                    		push	[ebp+20h]
     7167E7B9  A1D4D96B71                		mov	eax,[L716BD9D4]
     7167E7BE  FF751C                    		push	[ebp+1Ch]
     7167E7C1  FF7518                    		push	[ebp+18h]
     7167E7C4  FF7514                    		push	[ebp+14h]
     7167E7C7  FF7510                    		push	[ebp+10h]
     7167E7CA  FF750C                    		push	[ebp+0Ch]
     7167E7CD  56                        		push	esi
     7167E7CE  FF5024                    		call	[eax+24h]  ; 0x7167C0A5 - и опять обработчик CreateFile'а
     7167E7D1  5E                        		pop	esi
     7167E7D2  5D                        		pop	ebp
     7167E7D3  C21C00                    		retn	001Ch
    А этот?
    Код:
    7167C0A5 8B FF                mov         edi,edi
    7167C0A7 55                   push        ebp
    7167C0A8 8B EC                mov         ebp,esp
    7167C0AA 56                   push        esi
    7167C0AB 57                   push        edi
    7167C0AC FF 35 04 DC 6B 71    push        dword ptr ds:[716BDC04h]
    7167C0B2 68 C4 26 66 71       push        716626C4h
    7167C0B7 FF 75 08             push        dword ptr [ebp+8]
    7167C0BA E8 53 F0 FF FF       call        7167B112
    7167C0BF FF 75 20             push        dword ptr [ebp+20h]
    7167C0C2 8B F0                mov         esi,eax
    7167C0C4 FF 75 1C             push        dword ptr [ebp+1Ch]
    7167C0C7 A1 AC D9 6B 71       mov         eax,[716BD9AC]
    7167C0CC FF 75 18             push        dword ptr [ebp+18h]
    7167C0CF FF 75 14             push        dword ptr [ebp+14h]
    7167C0D2 FF 75 10             push        dword ptr [ebp+10h]
    7167C0D5 FF 75 0C             push        dword ptr [ebp+0Ch]
    7167C0D8 56                   push        esi
    7167C0D9 FF 90 24 03 00 00    call        dword ptr [eax+324h]  ; 0x71679702 - как задолбали эти вложенные обработчики CreateFile()'а! :-( 
    7167C0DF FF 75 08             push        dword ptr [ebp+8]
    7167C0E2 8B F8                mov         edi,eax
    7167C0E4 56                   push        esi
    7167C0E5 E8 B6 E3 FF FF       call        7167A4A0
    7167C0EA 8B C7                mov         eax,edi
    7167C0EC 5F                   pop         edi
    7167C0ED 5E                   pop         esi
    7167C0EE 5D                   pop         ebp
    7167C0EF C2 1C 00             ret         1Ch
    
    Ну, и так далее. То ли домкоторыйпостроилДжек, то ли сказка про белого бычка. :-(
    А самый цимес всего этого - вот в чём: стоит заменить вызов к aclayers.dll: 0x7168BE75 на вызов к kernel32.dll: 0x7C801A28 (первоначальный обработчик CreateFileA()), как грабля с фоновой музыкой опять вылазит во весь рост. Стопроцентно независимо от перехвата или неперехвата aclayers.dll'ом остальных 36 функций, задействованных в "режиме совместимости". :-(
    Полный дизассембл лежит тут, полный набор таблиц косвенных вызовов весит чуть больше мегабайта, если имеешь желание - сдамплю.
    А ничего интересного. Открывается файл, ясен перец, что же ещё. :-
     
    Последнее редактирование: 11 окт 2014
  21. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.198
    Рыжий Тигра, ага. Стало быть я не ошибся и результат тебе "понравился".:D Размышление в сторону: "Мне всегда было интересно,зачем люди лезут править "ошибки" внутрь виндовых библиотек, если ошибки содержатся в их собственных программах."
    Вопрос, а где дизасм того же самого от висты, семёрки, восьмёрки и десятки (и что бы ещё в 32 и 64 порознь) ? Ты подумал, как оно там будет работать ? Гигант практического кодоморфирования пмаешь ли... :D

    Объясняю: тебя должно интересовать не что у неё внутри, а что ты ей даёшь (ибо тут то собсно и лежит та волшебная грабля из-за которой понадобилась совместимость), когда, как, сколько раз и с какими танцами перед этим, во время и после. И, что она тебе возвращает в результате или не возвращает.

    ЗЫ. так скоро получится отдельная Windows Wing Commander AllVer. :D

    вот. Он открывается ! Чего дальше то с этим открытым файлом ? Он же не сам себя читает-играет !
     
    Последнее редактирование: 11 окт 2014
  22. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Если полагаешь это существенным - продизассембль. Я не. По крайней мере, пока они у меня на вооружении не стоят, то я и не парюсь.
    Это ты у микро$офта спроси, зачем появился aclayers.
    Ха, ну дык в эпоху win95, когда прога писалась, это ошибкой не было - даже знаменитая грабля с VirtualProtect()'ом (NULL в четвёртом параметре) была совершенно легальным делом. :-(
    Впрочем, если ткнёшь пальцем в кусок кода с ошибкой - "моя благодарность будет безграничной в пределах разумного" (L).
    Как обычно: кому read, кому write... Я полагаю, лучше самой программы тебе вряд ли кто-то расскажет о судьбе каждого из десятков используемых ею файлов:
     

    Вложения:

    • wc4dvd302.7z
      Размер файла:
      1,6 МБ
      Просмотров:
      19
    Последнее редактирование: 11 окт 2014
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление