<на главную

Visual Poganka (программа)

      Небольшая простенькая программка, предназначенная для поиска в файле неявных данных методом частичного контролируемого изменения части кода с целью его последующей проверки на предмет искажения выводимой информации. Говоря проще, бессовестно поганим участок файла и смотрим, изменились ли искомые данные.
      Написана на VB 2005. К сожалению, обладает серьёзным недостатком. А именно, нуждается в соответствующей среде. Как я поняла, в .NET Framework 2.0. Простите, ничего придумать не получается.

      Принципы действия программы и назначение переключателей я постаралась сделать интуитивно понятными. Но если Вам что-то покажется непонятным или просто интересен механизм работы программы, то прочтите нижерасположенные комментарии к командам. Стиль повествования рассчитан на людей, не имеющих опыта работы с классической поганкой и слабо разбирающихся в программировании. Надеюсь, что подобная простота и разжёвывание и так понятных вещей никого не оскорбит. Тем более, что данную статью пишет, мягко говоря, далеко не профессионал.
 
      Сначала в общих чертах о механизме программы. В момент загрузки файла в программу в оперативной памяти создаётся его копия. Эта копия никогда не изменяется, информация с неё может только считываться. По команде "Запоганить участок" сперва создаётся копия этого участка. В зависимости от настроек эта копия может быть снята либо с оригинального файла, хранящегося в ОЗУ (по умолчанию), либо с жёсткого диска (во втором случае изменения могут быть наложены на изменения).
      Затем эта копия обрабатывается в соответствии с выбранными настройками и накладывается поверх соответствующего участка файла на винчестере. Программа просит проинформировать её о поведении изменённого файла. После получения ответа программа делает соответствующие изменения в диаграммах. Левая диаграмма схематическая, правая относительная. Маленькие участки большого файла на последней могут вообще не отображаться, в этом случае об их существовании можно догадаться по цифрам адреса. Не стоит рассматривать относительную диаграмму под лупой, вследствие особенностей округления и наложения друг на друга краёв рисуемых прямоугольников периодически возникают нюансы длиной один пиксель.
      Затем (если не будет снята соответствующая галочка) программа повторно снимает копию изменённого участка с оригинального файла в ОЗУ (других вариантов нет) и накладывает её на соответствующее место файла на винчестере. Файл восстановлен, изменяемый участок - до состояния соответствующего таковому оригинального файла, байты за пределами участка никак не обрабатываются. Многократно протестировано.
 
      Хотелось бы сделать маленькое предостережение. В качестве полей ввода я использовала стандартные элементы управления NumericUpDown языка VB 2005. Это очень удобные штуки, но к сожалению, когда дело касается ввода информации вручную, не до конца продуманы нюансы. Полю в некоторых случаях нужен щелчок мышью за его пределами, чтобы оно показало Вам, какое именно значение в нём сейчас находится. Если обратите внимание на подобный нюанс, то ругать нужно не меня, а моего па... я хотела сказать, этого ужасного Билла Гейтса. Но это касается именно скорости отображения информации, а не её внутреннего представления - надеюсь, я случайно не сделала из мухи слона.
 
      Главная рабочая область программы (во всех других местах значения достаточно выставить всего один раз). Здесь задаётся с какого и по какой по счёту байт производить запоганивание. Начиная с нуля, включая концы участка. Также можно приказать программе анализировать и обрабатывать один байт через несколько. Эта возможность в совокупности с возможностью выводить за границы обработки байты с крайними значениями (см. ниже) по идее должны позволить просматривать за раз крупные участки с малой вероятностью зависания файла. Значения в полях очень удобно увеличивать/уменьшать через стрелки клавиатуры "вверх" и "вниз". Также можно оперировать клавишами Home, End, а также Ctrl+стрелки. Затем для запуска программы необходимо либо щёлкнуть на кнопке "Запоганить участок", либо на клавише Enter (но убедитесь, что активным является одно из пяти данных полей).
 
      Мой небольшой опыт перевода ROM-ов подсказывает, что в качестве своеобразных внутренних разделителей обычно используются байты с крайними значениями, чаще всего [00], [FF] и [FE]. С помощью задания диапазона можно приказать программе не обрабатывать подобные байты. Особо прошу заметить, что при операциях увеличения/уменьшения значений происходит не просто пропускание соответствующих байт, но и результат преобразований также всегда находится внутри указанного диапазона (подробности - ниже, в описании дополнительных настроек). Т.е. программа не только не убирает старые разделители, но и не создаёт новые. Эту маленькую деталь я считаю одним из главных фундаментальных отличий Visual Pogank-и от классической Поганки (по крайней мере версии 1.03). Могу порекомендовать не ограничиваться тремя указанными выше значениями, а действовать несколько более смело. В случае надобности Вы всегда можете перепроверить участок ещё раз. Кстати, из-за этой особенности операции увеличения/уменьшения не могут быть применены к строго определённым значениям, к ним может быть применена только операция замены на другое строго определённое значение (const).
 
      Выбор действия, которое будет произведено с байтами, подпадающими под обработку.

 
      Поясню некоторые моменты.
 
Сохранение/загрузка диаграмм.
      Результаты ответов пользователя на запрос программы о поведении пропаганенного файла выводятся на экран в виде двух диаграмм. При желании результаты работы можно сохранить, а затем вернуться к ним. Вместе с диаграммой также сохраняются и значения всех переключателей, флажков и текстовых полей. Здесь без вариантов. Вы можете лишь выбрать, загружать эти настройки или проигнорировать их. Диаграмму можно загрузить в программу и без загрузки соответствующего ей файла, но только для просмотра.
Сделать текущие настройки загружаемыми
      Эта функция позволяет сделать так, чтобы при загрузке программа поставила все переключатели и флажки в определённые положения, в поля ввода - наиболее удобные Вам значения, а само окно программы - в соответствующем месте дисплея. Говоря точнее, эта функция перезаписывает прилагающийся к программе файл FirstValues.vp, откуда та при загрузке берёт начальные состояния настраиваемых компонентов. В принципе, программа нормально загрузится и без этого файла, но переключатели будут находиться в положении по умолчанию, а в текстовых полях будут нули. Данный файл можно просмотреть через блокнот, но вот что-то изменять вручную не рекомендую.
Значения байт в виде hex
      Команда определяет, в какой системе счисления (десятеричной или шестнадцатеричной) пользователь увидит значения байт. Команда влияет на внешний вид только главного окна
 
      Два верхних дополнительных параметра имеют низкую практическую ценность. Можете просто держать оба переключателя в верхнем положении и не вникать в их смысл. Для тех, кому интересно, но немного непонятно, уточню.
Циклический метод преобразования значений
      Приведу пример. Если границы диапазона обрабатываемых значений поставлены на [05] и [250] и происходит увеличение значений байт на 10 (везде десятичная система), то байт со значением [239] заменяется на [249], [240] на [250], [241] -> [05], [242] -> [06] и т.д. Т.е. пользователь может быть уверен, что все байты, отвечающие входным условиям, поменяли свои значения. За исключением, конечно, того экзотического случая, когда значения, сделав круг, в результате снова окажутся равными самим себе. Как говорится, не нужно ругать калькулятор, если пальцы не оттуда растут.
Замораживание значений на концах
      Если использовать значения из предыдущего примера, то [239] -> [249], [240] -> [250], [241] -> [250], [242] -> [250] и т.д. Данная функция может, к примеру, использоваться при поиске карт тайлов, когда цепочка из одинаковых значений хорошо видна.
Источник исходных данных
      Определяет, откуда будет взят исходный участок файла для обработки. Настоятельно рекомендую использовать копию файла в ОЗУ, потому что в противном случае легко не уследить за множеством сопутствующих нюансов. Создала эту настройку лишь потому, что её очень легко было реализовать.
Шаг увеличения/уменьшения значений адресов
      Появился в версии 1.1. Определяет, насколько изменится значение в поле задания адресов при нажатии кнопок "вверх"/"вниз" на клавиатуре или справа от полей ввода мышью.
 
      Копия файла из ОЗУ целиком переписывается на диск.

      Самая главная команда, вокруг которой всё и вертится. После её нажатия в файле происходят соответствующие изменения, и появляется представленное окно, предлагающее внести в диаграмму информацию о поведении искомых данных.
      Поясню компоненты данного окна
 
      Нажатие на ту или иную кнопку определяет, каким цветом будет отображён указанный участок на диаграмме. Никаких побочных последствии выбор кнопки не имеет. Разве что стоит не забывать о том, что при соприкосновении на диаграммах двух одноцветных диапазонов происходит их слияние. Предполагается, что пользователь в основном будет пользоваться лишь тремя верхними кнопками. Но мой небольшой опыт общения с классической Поганкой показал, что не всегда возможно чётко и однозначно отнести участок к одному из этих случаев. Подумав, я решила добавить ещё два цвета. Естественно, их трактовки могут отличаться от предложенных мною. Самая нижняя кнопка отдаёт программе распоряжение закрыть окно без внесения каких-либо изменений в диаграммы, но остальные настройки данного окна выполняются в любом случае.

      Visual Poganka для ускорения работы способна сама менять границы участка запоганивания. Если данная вещь покажется Вам неудобной, просто поставьте точечку напротив пункта "Не трогать". Или "Обнулить". Что касается пунктов "Шаг вперёд на..." и "Шаг назад на...", то здесь немного сложнее, чем просто прибавление/вычитание данных цифр и уже имеющихся в полях адресов. При использовании первого пункта новый запоганиваемый участок будет начинаться там, где закончился предыдущий. Вернее, со следующего байта. А вводимое на данном окне число определяет длину участка. Благодаря подобной функции можно перепоганить файл всего двумя щелчками мышки. Буквально: один щелчок на одной из цветных кнопок и один - на кнопке "Запоганить участок" главного окна.
      Если вы вдруг увидите, что значение в одном из данных полей ввода неожиданно уменьшилось, значит, участок запоганивания вплотную приблизился к границе файла. Ни в одно из окон программа не позволит Вам ввести такое значение, которое привело бы к ошибке.
 
      Если на этом пункте установлена галочка, то сразу после закрытия данного вспомогательного окна последний изменённый участок будет автоматически восстановлен.
 
скачать программу (v1,1) - 22 Кб
 

      Если кому-либо интересно, то может посмотреть на исходный код (62 кб). Только учтите, что программа написана человеком, знающим лишь основы программирования. Я не возражаю против использования созданных мною приёмов решений в других программах. Если у Вас появились какие-либо идеи по поводу дальнейшего развития данной программы, то прошу связаться со мной по e-mail. Любые соображения, пожелания и вопросы относительно данной программы Вы также можете написать в соответствующей теме на форуме ШЕДЕВРа. Я буду рада.
 

Нововведения в версии 1.1:
-При изменении адресов можно регулировать длину шага увеличения/уменьшения (спасибо Otter-у за идею);
-Конструкции типа "-ым/-им" заменены на простенькие алгоритмы вычисления окончаний;
-Можно увеличить высоту окна, что приводит к увеличению места под диаграммы;
-Нельзя сохранить диаграмму при не загруженном файле, что-то я в v1.0 с этим местом откровенно перемудрила.
 
<на главную