1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

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

Кодерский уголок

Тема в разделе "Мастерская", создана пользователем Dimouse, 10 сен 2006.

  1. Dimouse King of Mice

    Dimouse

    Администратор Переводчик

    Регистрация:
    18 апр 2003
    Сообщения:
    35.044
    В соответствии с назначением раздела, в этой теме предполагается обсуждать конкретные вопросы, которые у вас возникают при создании своих программ (в частности - игр), помогать другим, размещать полезные ссылки на статьи и материалы, которые могут пригодиться другим.

    Что здесь не допускается:
    - беспорядочный флуд на всевозможные темы, в том числе общие обсуждения языков программирования без конкретики (карается по статье "флуд и оффтопик" *),
    - разжигания на темы "что лучше, Си или Си++ и чем они отличаются?", "какой язык программирования лучше X или Y?" и т.п. (карается по статье "флейм и участие в холиварах" *),
    - мерение пиписьками в стиле "я лучше программирую" или "ты не умеешь программировать" (карается по статье "оскорбление участников и их взглядов" *).

    Всё это допускается в специально созданной теме "Беседка для программистов или «Бутерброд с кодом».

    * по усмотрению модератора также возможно применение блокировки в данной теме.

    Оригинальное сообщение
     
    Последнее редактирование модератором: 24 ноя 2014
    CY8R4Y нравится это.
  2.  
  3. Scampada

    Scampada

    Регистрация:
    26 окт 2011
    Сообщения:
    52
    Привет. Помогите нубу в RE.

    Значит реверсю Prehistorik 2. Захотелось своими ручками сделать кейген кодов уровней. Начал лопатить, там все запаковано-перепаковано, пришлось погуглить, нашел вот эту вещь:

    http://habrahabr.ru/post/187072/

    Но читать не стал, п.ч. хочу сделать сам. Прочел только самое начало, которое все обьяснило и на котором я и заткнулся:

    Мой практический опыт в дизассемблировании пока заключался только в
    1. распаковать
    2. засунуть в Ida Pro
    3. поставить бп, запустить отладчик
    4. найти алгоритм генерации ключа и долго в него втыкать

    Что подразумевается под этими так просто звучащими словами? То есть я понимаю даже что, но Куда мне смотреть? Где этот чертов заголовок?

    В hex-отображении пытался искать заголовок по сигнатуре MZ, но не нашел или плохо искал
     
    Последнее редактирование: 23 мар 2014
  4. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Scampada нравится это.
  5. Scampada

    Scampada

    Регистрация:
    26 окт 2011
    Сообщения:
    52
    О, спасибо! Так и знал, что не все в Ida делается. Тогда пользуясь привлеченным вниманием, задам еще один уточняющий вопрос. Вот мне, как в цитате сказано, нужно обрезать последние 5E90 байт, отредактировав поля размера и дополнительной памяти.

    http://cs607526.vk.me/v607526788/3a78/WtOz56qSMOs.jpg

    Итак. Как я понимаю, размер - это pages in file. 124*512 = 63488, это размер файла, выглядит логично. Bytes on last page - это хвост на последней неполной странице. Следовательно, чтобы обрезать файл на 5E90 байт, мне нужно:
    1) Вычислить остаток от деления 5E90h на 512 (равен 144).
    2) Отнять от значения Bytes on last page этот остаток. В моем случае от 272 нужно отнять 144.
    3) Изменить значение этого поля на полученный результат.
    4) Отнять от поля pages in file 5E00h / 512 (5E90h - 144)

    Так?

    Если с этим я не перепутал ничего, то с памятью должно быть проще? Отнять от Maximum memory (FD10h) 5E90h?

    ---------- Сообщение добавлено в 12:02 ---------- Предыдущее сообщение размещено в 11:58 ----------

    Только вот значения первых двух полей мне менять почему-то не позволяет.

    ---------- Сообщение добавлено в 12:04 ---------- Предыдущее сообщение размещено в 12:02 ----------

    Все, разобрался, для изменения этих полей почему-то нужна другая комбинация клавиш

    ---------- Сообщение добавлено в 12:09 ---------- Предыдущее сообщение размещено в 12:04 ----------

    Сам спрашиваю, сам отвечаю. Сделав то, что я описал, я получил отсутствие интро от Гибридов, тут как бы подтверждение верности действий. Но!
    В статье товарища Гречникова, указанной в предыдущем посте, сказано, что на выходе после изменения размера файла и т.п. получим файл размером не 63К, а "39520 байт". У меня же размер остался тот же, по крайней мере в Свойствах проводника.
     
  6. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Scampada, размер, потому что ты физически не отрезал лишнее. ты в заголовке поменял.

    MaxMem/MinMem меряются в параграфах. Один параграф - это 16 байт. Подели значение 5Е90h на 10h, а потом уже вычитай 5Е9 из нужного.
     
    Scampada нравится это.
  7. Scampada

    Scampada

    Регистрация:
    26 окт 2011
    Сообщения:
    52
    Ясно, все получилось. Может ли быть расхождение в размерах файлов, распаковываемых разными декодерами? Мой резултирующий файл меньше файла из прмера байт на 400. Но распаковывались разными утилитами
     
  8. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Scampada, может. распаковщики могут и выдавать файл в том же виде в каком паковали, а могут и урезать его до последнего ненулевого байта или наоборот - пришивать к нему лишние "выравнивающие" по границе сектора диска байты. В любом случае - перед модификациями, полезно привести файл в согласие с его хедером.
     
    Scampada нравится это.
  9. Scampada

    Scampada

    Регистрация:
    26 окт 2011
    Сообщения:
    52
    Черт... вот затык... WinXP 64-битная. SoftIce'овый dldr в ней не запускается. Связка Ida Pro + DOSBox работает очень криво, если точнее совсем ничего не дает... К примеру часть брейкпоинтов, 3 из 4 эта костыльная система игнорирует, а также когда на экране Коробки ожидается нажатие клавиши (типа интро) то когда я возвращаюсь в Ida, то уже не могу влиять на пошаговую отладку... Ее просто нет. Пункты "Шагов" в Дебаггере не подсвечены, хотя показывает Running. А программа меж тем в Коробке выполняется дальше сама по себе, без всякой походовщины... При этом брейкпоинты расставить позже того момента, когда нужно пропустить интро, нельзя, ведь на них ноль реакции.

    А SoftIce поставил - в системе загрузчик не работает, а попробовал его запустить под тем же DOSBox'ом - так он потребовал запустить сайс там, а в ответ на поопытку запуска - ответил, что не понимает, что такое net start. В общем затык со всех сторон:hmmm:

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

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



    :unknw: вот так вот! И между тем эта же самая программа, запущенная в каком угодно режиме, кроме отладочного с брейкпоинтом на старте, работает (и проходит этот участок, который где-то после конца интро и перед отрисовкой второго лого) нормально!
     
  10. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Scampada, ну так, а зачем ты используешь то виндовый SICE для программ MS-DOS да ещё реального режима ? Используй TurboDebugger борландовский, Deglucker, Insight ну и досовский SICE.

    Конкретно для отладки в DosBox есть версия 0.74 со встроенным отладчиком типа Sice, а на форуме есть тема посвящённая оболочке для него, там же его можно и скачать.
     
    Последнее редактирование: 23 мар 2014
    Scampada нравится это.
  11. Scampada

    Scampada

    Регистрация:
    26 окт 2011
    Сообщения:
    52
    TurboDebugger как-то законфликтовал с размерами памяти, я так сразу не нашел, где в нем настраивается это, и из-за этого он, видимо, глюкаво рисовал и вис.
    Дос-коробка у меня как раз 0.74 и была. Все работает, причем действительно более стабильно, чем та навороченная система с Ida.

    И опять же. Честно говоря, не знаю, чем мне тут помогут, да и нужно ли это кому-то. Но, может, в этом есть какой-то хитрый сакральный смысл, какой-то комбо-ассемблерный трюк, о котором я не знаю.

    http://cs608017.vk.me/v608017788/450b/e7BaKQZZfO4.jpg

    Все то же самое. Отрисовываем первое интро. Ждем. Я нажимаю кнопку, едем дальше и через продолжительное время с зажатой F11 упираемся в метку с переходом на саму себя. На скриншоте все видно.
    Суть в чем, зачем я снова спрашиваю. Там вверху, справа, есть число, 83466, так? При каждом шаге оно увеличивается. Вот я и думаю: может, если оно так и будет зацикливаться на этой метке, то это число переполнится, или еще что-то, черт его знает! И пойдет дальше? Ну как-то же оно ухитряется работать и не зацикливаться вне дебаггера!! Причем первое и второе интро в режиме realtime разделяет ну, максимум полторы-две секунды.
    В чем соль? Как это можно обьяснить?:shok:
     
  12. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Scampada, тебе Sti перед JMP ни о чём не напоминает ? :) Не буду подсказывать. Ибо разгадка тривиальна. Сакральный смысл кроется в механизме прерываний.
     
    Scampada нравится это.
  13. Scampada

    Scampada

    Регистрация:
    26 окт 2011
    Сообщения:
    52
    То ли там какая хитрая защита недоснятая гибридами осталась, то ли я совсем нуб в основах ассемблера и отладке...
    Поставил брейкпоинт сразу после 022Е:104А. После запуска в надежде, что проиграет первое интро и застопорится на бряке, как и в Ida... игра стала жить своей независимой жизнью и загрузила меню, а отладчик перестал на меня реагировать! И даже обновляться.

    ---------- Сообщение добавлено в 21:57 ---------- Предыдущее сообщение размещено в 21:56 ----------

    Ясно, то есть - ушел читать...

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

    Судя по всему, то число, в моем примере 83466 - это количество тактов эмулятора... Так вот, когда я все же заставил его, спасибо за подсказку, заставившую думать в нужном направлении, "выехать из выбоины", то число это равнялось 70411977. Долго бы мне пришлось F11 жать!
     
    Bato-San нравится это.
  14. Scampada

    Scampada

    Регистрация:
    26 окт 2011
    Сообщения:
    52
    Готово!
    Два дня в Ida Pro и Hiew, ABBA, руки, по крайней мере проекция которых на плоскость представляет собой прямые и ценная помощь Bato-San помогли мне выполнить задуманное: хирургическую операцию над Prehistorik 2, позволяющую олдгеймерам вроде меня пройти тот или иной уровень, не тратя времени на прохождение и записывание кодов (тем более что в Dosbox они каждый раз генерируются новые, т.к. для генерации используется BIOS и еще черт знает что; может, это и можно как-то решить, но не суть) или написание кейгена. Изменены 7 байт исполняемого кода, это позволяет вместо кода уровня ввести его номер.

    Было:
    Offtop
    cc228d7a88077e0b368286b6dfa4ffdc.jpg


    Стало:
    Offtop
    95a6a26865fbbdd05d4dffa72a8b865e.jpg


    Вводить, соответственно, в старо формате. 4 разряда. 0007 для 7 уровня и т.п. Изменены 7 байт исполняемого кода, думаю, можно было и в сторону минимализма еще поизощряться, но мне сейчас было некогда и поэтому лень.
    PS с секретными уровнями вышла накладка: они при загрузке через это меню загружаются не очень корректно, точнее, сами-то уровни вроде в порядке, но не в порядке отображение. Но, впрочем, это не так уж плохо: вот уж секретные уровни на то и секретные, чтобы их надо было искать! В этом половина удовольствия от Прехи.:cool2:
     

    Вложения:

    • pre2_level.rar
      Размер файла:
      34,5 КБ
      Просмотров:
      29
    Ulysses, SAS и Bato-San нравится это.
  15. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    В inno setup есть переменная userappdata которая выдаёт путь к папке для хранения данных приложения. Проблема в том, что если у пользователя включен пользователь Administrator, а у него самого прав админа нет - редкий случай в Windows, но бывает - инсталятор пишет данные в папку админа. А программа потом пытается их прочитать в папке пользователя. Вот как выяснить инсталятору папку данных пользователя до поднятия прав?
     
  16. AxXxB неадекват

    AxXxB

    Хелпер Переводчик

    Регистрация:
    13 ноя 2006
    Сообщения:
    1.663
    Steel Rat, гипотетически - узнать его имя и прочитать соответствующий ключ в реестре. Только не знаю, позволяет ли такое делать скрипт InnoSetup'a)
     
  17. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    AxXxB, подозреваю, что переменная отвечающая за имя вернёт Administrator. Тут должен быть какой-то способ встроенный.
     
  18. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.667
  19. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    A.P.$lasH, угу, жаль. Хотелось без дополнительного гемора. А {username}, ожидаемо, возвращает Administrator.
    В общем, просто установить данные в папку всех пользователей. Один фиг личных данных не обрабатываем.
     
    Последнее редактирование: 9 апр 2014
  20. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.667
    Steel Rat, у тебя ведь крокодил создаёт совсем уж махонькие два файла. Создавай их при старте, если отсутствуют, делов-то...
     
  21. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    A.P.$lasH, туда же будут записываться сохранёнки. Общий механизм, он работает, чего менять его... Да и я уже сделал, поменял на AllUsers.
     
  22. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    Наткнулся на лицензию http://www.wtfpl.net/
    Отличная, должен сказать, лицензия.
     
    Val07og, SAS и A.P.$lasH нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление