<на главную

Visual Sravnilka

      Довольно простенькая аналитическая программка, позволяющая быстро и наглядно сравнить два варианта какого-либо ROM-а или других файлов. К примеру, оригинальную игру и последствия её взлома каким-нибудь бразильским ромхакером. Также имеется возможность переставлять несовпадающие участки между файлами. Благодаря этому во многих случаях удаётся понять, какой именно вид ресурсов содержится в том или ином месте. Т.е., если рассматриваемая игра была уже кем-то когда-то взломана, то это позволяет нам быстро найти местоположение различных ресурсов.
 
      При запуске программы отображается краткая справка. Её прочтение отнимет у Вас не более пары минут, но почти всё объяснит. Копирую её на сайт.
 

      Эта программа позволяет сравнить две версии файла, а также перестаставлять между ними несовпадающие участки. Для начала работы через меню "Управление" -> "Загрузить и сравнить файлы" укажите сравниваемые файлы. Результат будет представлен в виде двух диаграмм. Большим зелёным столбцом обозначен файл, выбранный Вами первым. Он считается главным и все манипуляции происходят именно с ним. Красными прямоугольничками обозначены участки второго файла, которые не совпадают с соответствующими участками первого.
 
      Правая (абсолютная) диаграмма позволяет визуально определить величину участков несовпадения и их места расположения в файле.
      На левую (схематичную) диаграмму будут выведены несколько наиболее важных точных цифр по каждому участку, а именно индексы первого и последнего байтов интервала (без фона) и длина участка (на розовом фоне). Цифры на зеленоватом фоне означают количество байт между двумя соседними участками. Все участки на обоих диаграммах пронумерованы.
      В левой части программы выводится общая информация по загруженным файлам в целом и по рассматриваемому в данный момент участку. Вся эта информация доступна только для чтения.
 
      Для того чтобы просмотреть информацию по какому-либо участку, необходимо щёлкнуть любой кнопкой мыши на любой диаграмме на высоте этого участка. При этом слева от этого участка появится тёмно-синяя полоска. Повторный щелчок по данному участку приведёт к изменению главного файла: либо на соответствующее место первого файла будет наложет участок из второго файла, либо наоборот - данный интервал будет восстановлен до первоначального состояния. Данные процессы будут отображены на диаграммах в виде перемещения красных прямоугольников (символизирующих участки кода второго файла).
 
      Visual Sravnilka позволяет одним щелчком мыши запустить первый из сравниваемых файлов через внешнюю программу для отслеживания результатов замены участков. Для этого внешняя программа должна быть предварительно выбрана через пункт меню "Управление" -> "Определить внешнюю программу".
      Остальные пункты меню позволяют осуществлять массовые перемещения участков и автоматически сохранять основные цифры в виде текстового файла.

 
      Думаю, что вышенаписанного полностью долтаточно для полноценного использования данной программы. Но если Вас интересуют подробности и нюансы, то я могу предоставить ещё немного информации. Начну с описания небольших нюансов:
Во-первых, если Вы захотите более подробно рассмотреть диаграммы, просто увеличьте высоту окна, диаграммы автоматически перерисуются.
Во-вторых, если на абсолютной диаграмме (правой) Вы щёлкните на участке, который в данный момент не виден на схематичной (левой) диаграмме, то та автоматически перемотается на соответствующее место. Так легко перемещаться по схематичной диаграмме, когда та содержит десятки и сотни отрезков.
В-третьих, прежде чем нарисовать номер участка на абсолютной диаграмме, программа очищает под это дело небольшой прямоугольник, чтоб цифра была хорошо видна. Побочным последствием этого является периодическое наложение цифр друг на друга, вследствие которого более высокорасположенная цифра может быть частично или даже полностью стёрта. Надеюсь, это никого не запутает.
 
      А теперь немного технических подробностей о внутрипрограммных процессах. Сами решайте, читать Вам далее или нет. Я бы не стала. Но вдруг кто-нибудь захочет эту программу улучшить!
 
      Работа программы начинается с загрузки в неё сравниваемых файлов. При этом должен быть указан так называемый уровень случайного совпадения. Если непонятно, кратко объясню. Байт может принимать одно из 256 значений: от 0 до 255. Когда количество сравниваемых байт исчисляется сотнями тысяч, количество случайных совпадений просто зашкаливает. Поэтому если количество подряд идущих совпадающих байт не превышает введённую Вами цифру, то программа относится к ним как к несовпадающим. Рекомендую особенно не мелочиться с этой цифрой. Можете быть уверены, что на вторую (нижнюю) границу участка она не влияет.
 
      После загрузки файлов программа их анализирует и заводит на каждый обнаруженный участок несовпадения маленькое досье. В том числе программа запоминает из каждого отрезка каждого файла 16 первых байт этого участка и 2 байта, предшествующих ему. Их вы можете увидеть в левом нижнем углу программы, когда данный участок станет активным (т.е. когда на диаграммах слева от него появится тёмно-синяя полоска). Эти 18 байт в процессе работы программы никак не изменяются, поэтому через них нельзя отследить текущие вмешательства в файлы.
 
      Вся полезная информация предоставляется пользователю через диаграммы. Вы можете вообще не обращать внимание на те цифры, которые выводятся на левой половинке приложения - там нет ничего ценного, скорее ради любопытства. Всё управление также сводится к щелчкам мышью на диаграммах. Щелчок на любой из них на высоте красного отрезка приводит к тому, что данный отрезок становится активным: слева появляется синяя полоска (на обоих диаграммах), а нижнем левом углу программы появляется краткая справка по программе.
 
      Повторный щелчок по уже активному участку приводит к его перезаписи на файле, указанном Вами первым. Т.е. на первый файл накладывается кусок кода из второго файла. Или наоборот, данный участок восстанавливается в его исходном варианте. Данные изменения сразу же приводят к соответствующей перерисовке диаграмм. Откуда именно берётся информация для наложения? Информацию об участках из первого файла программа хранит в оперативной памяти компьютера в виде оптимизированного файла. Я хотела сказать, что для экономии памяти хранятся только сами несовпадающие участки. В самом деле, если в многомегабайтном файле несовпадающие участки занимают лишь несколько процентов, то зачем хранить весь файл. Информация по участкам из второго файла берётся непосредственно из этого файла на жёстком диске.
 
      После перемещения одного или нескольких участков Вы сразу можете посмотреть через эммулятор эффект данной подмены. Достаточно щёлкнуть на соответствующей кнопке (на главной форме она, собственно, и единственная). Только сначала в меню "Управление" необходимо указать путь к запускающему файлу этого эмулятора.
 
      Особенностью программы является то, что она не способна непосредственно сравнивать файлы разной длины. Вместо этого программа предлагает увеличить меньший файл до размеров большего путём дописывания в его конец нулей. При закрытии программы, а также при смене сравниваемых файлов программа проверяет, были ли файлы изменены. Вы можете или сохранить эти изменения, или поручить программе исправить их.
 
      Надеюсь, что назначение пунктов меню специально комментировать необходимости нет. Разве что на всякий случай упомяну, что для загрузки файлов в программу можно просто сделать двойной щелчок на кнопке "Управление", а для изменения системы счисления между десятичной и шестнадцатеричной - двойной щелчок на кнопке "с.с.: hex" ("с.с.: dec"). Эти изменения касаются только адресов и длин на относительной диаграмме.
 
      В заключении добавлю, что программы должна работать абсолютно корректно и без глюков при любых действиях в своём интерфейсе. Если Вы всё же наткнулись на моё упущение, или просто появились идеи по дальнейшему развитию программы, большая просьба сообщить мне по e-mail или в соответствующей теме на форуме ШЕДЕВРа.
 
скачать программу (v1.1.1) - 179 Кб
 

      Если кому-либо интересно, то может посмотреть на исходный код (25 кб) (язык Borland Delphi 7). Также добавлю, что я не возражаю против переноса созданных мною идей и обрывков кода в другие программы.
 

Новое в версии 1,1: <на главную