eXeLab
eXeL@B ВИДЕОКУРС !

ХАКЕР-ПРОГРАММИСТ
выпущен 3 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: hauflet, KingSise, cevile (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Софт, инструменты —› CmpDisasm - Утилита для сравнения PE файлов в дизассемблированном виде
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 12 . 13 . >>
Посл.ответ Сообщение
crc1

Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 30 января 2009 16:33 · Поправил: crc1 New!
· Личное сообщение · #1

В HEX виде много разных утилей для сравнения файлов. В дизассемблированном не встречал. Наваял свою.
Баг-репорты приветствуются
******************************************
Выравнивания на длину инструкции НЕ БУДЕТ
******************************************
History:
* 30 января 2009 г. v 0.1
* Собственно первый глючный вариант

* 29 марта 2009 г. v 0.35
* Добавлен пункт меню "Copy address to clipboard" в контекстном меню
* Добавлена примочка "stay on top", запоминается в реестре.
* Окно проги разворачивается на весь экран
* Добавлена цветовая схема, цвет запоминается в реестре
* Открывает занятые файлы + возможность работать с этими файлами в других приложениях
* Добавлено отображение адреса VA, либо Offset. Менять можно через меню, либо щелкнув по шапке столбца адреса
* Добавлена информация о секциях, различия выделяются цветом

* 16 октября 2009 г. v 0.5
* Добавлены HEX дампы файлов
* Добавлена возможность сравнивать диапазоны файлов

* 20 января 2010 г. v 0.6
* Поставил ScintillaGadget для вывода HEX дампов
* Исправил некоторые баги
* Добавил выбор двух последних файлов

* 3 февраля 2010 г. v 0.65
* Добавил выбор двух последних файлов, после драг-дропа
* Убирал дублирующиеся записи в логе

* 5 марта 2011 г. v. 0.7
* Заменил двиг на beaengine x86-64 Можно сравнивать 64 битные файлы
* Исправил крешь при запуске на win7

* 6 апреля 2011 г. v. 0.71
* Изменил фейс главного окна
* Сделал выделение цветом различий в File Info в главном окне
* Добавил пункт меню Исключить PE Header из анализа
* Добавил пункт меню "Save differences as"

* 16 октября 2011 v. 0.75
* Добавил просмотр заголовков файлов
* Автоматическое переключение disasm\hex вкладок, в зависимости от код\данные
* Исправил обнаруженные баги

*30 августа 2012 v. 0.76
* Пофиксил баги

*17 декабря 2012 v. 0.77
* Пофиксил баги
* Проверил на win xp sp3, win 7 x32/x64 win 8 x64

*4 апреля 2013 v 0.79
*Изменил интерфейс (кнопки переместил в тулбар)
*По дефолту, заголовок выключен из сканирования
*Исправил баги которые были отправлены в ПМ и которые нашел сам
*Исправил грамматическую ашыпку
--> Link <--

* 13 апреля 2013 v 0.81
* Исправил ошибку при перетаскивании нескольких файлов драг-дропом и некоторые другие
* Добавил сравнение файлов вперед и назад
--> Link <--

* 8 декабря 2013 v 0.83
* Убрал ошибки
* Добавил импорт\экспорт
--> Link <--

* 25 января 2014 v. 0.84
* Добавил командную строку ; использовать: CmpDisasm.exe file1 file2

{ Атач доступен только для участников форума } - CmpDisasm.rar
crc1

Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 5 февраля 2009 17:10 New!
· Личное сообщение · #2

Isaev пишет:
Если правится 2 байта, то и справа 2 байта должно быть (аналогично при выделении)


С раскраской пока не все ясно, дело в том, что при изменении кода, длина команд в некоторых случаях становиться разной, адресация сбивается и не понятно, какие команды выделять. Вернее визуально понятно, но как реализовать пока еще не вкурил.
theCollision

Ранг: 271.5 (наставник)
Статус: Участник
Packer Reseacher

Создано: 5 февраля 2009 17:23 · Поправил: theCollision New!
· Личное сообщение · #3

crc1
1. Добавить выбор не только exe, dll но и scr, sys, [*.*] All Files
2. Добавить горячие клавиши, к примеру Alt+F1 это открытие файла для левого окна, а Alt+F2 для правого
3. Если это PE-файлы, то имеет смысл добавить сравнение хидеров в одной вкладке, а сравнение кода в другой - имхо конечно
4. Если выбираешь одну строку в одном окне, то надо показывать также выбор и в другой, если оно различно, то показывать где оно в другом окне
5. если файлы сильно различны, то смысл ваще грузить, может сразу сказать об этом ?
6. Карту образов надо бы добавить, т.е. меж двумя панелями две картиночки с ползунками одна за левый другая за правый образ и пусть показывает ползунок где смотрим и цветами на них в местах различий
theCollision

Ранг: 271.5 (наставник)
Статус: Участник
Packer Reseacher

Создано: 5 февраля 2009 17:31 New!
· Личное сообщение · #4

>>но как реализовать пока еще не вкурил.
мне думается так:
1. берешь код левого, если различается то ищешь похожую команду в правом образе
2. при нахождении сразу же сравниваешь и след. команду левого со след. командой после найденого
3. Все что меж ними найдеными командами в правом условно считать "что не обходимо для того чтобы левый стал правым"
4. найденные это одинаковость и следовательно надо зеленым т.е. одинаковое а то что надо добавить к примеру светлофиалетовым

На заметку:
Иногда при анализе важно знать не только различие в структуре кода, но и изменении некоторых вычислений! К примеру есть команда в двух образах mov eax,[ebp+0x12312] , но если в них будет вычеслено разное значение дельта-смещения, то будут указывать на разные области !
Думаю это также следует показать ;)
theCollision

Ранг: 271.5 (наставник)
Статус: Участник
Packer Reseacher

Создано: 5 февраля 2009 17:33 · Поправил: theCollision New!
· Личное сообщение · #5

Баги:
1. если дергаешь ползунок левого образа, то правый тоже перемещается. А если дергаешь правого, то левый... ;)))
ИМХО: Ползунки вообще думается не имеют смысла если есть ролик мыши или стрелки на клаве , а если и делать, то один
crc1

Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 5 февраля 2009 17:59 · Поправил: crc1 New!
· Личное сообщение · #6

Спасибо за отзывы
theCollision пишет:
Добавить выбор не только exe, dll но и scr, sys, [*.*] All Files

Это можно, кроме All Files, т.к. в txt или ico кода нету
theCollision пишет:
Добавить горячие клавиши

Попробуем
theCollision пишет:
Если это PE-файлы, то имеет смысл добавить сравнение хидеров

А зачем хидеры сравнивать на отдельной вкладке, я их программно сравниваю, и если они отличаются,
то сравнения не будет
theCollision пишет:
то смысл ваще грузить, может сразу сказать об этом ?

Попробуй закинь разные файлы
Над остальным буду думать, но как бля не хватает времени
Про баг с прокруткой знаю, писал выше, что реализовано криво. Поэтому и просил исходники
crc1

Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 5 февраля 2009 18:02 New!
· Личное сообщение · #7

theCollision пишет:
Иногда при анализе важно знать не только различие в структуре кода, но и изменении некоторых вычислений! К примеру есть команда в двух образах mov eax,[ebp+0x12312] , но если в них будет вычеслено разное значение дельта-смещения, то будут указывать на разные области !

Это уже больше похоже на отладчик. Таких целей себе не ставил
theCollision

Ранг: 271.5 (наставник)
Статус: Участник
Packer Reseacher

Создано: 5 февраля 2009 18:11 New!
· Личное сообщение · #8

crc1
1. Завязываться на расширение файла не совсем корректно
2. файлы можно запаковать одним и тем же пакером, но ! разных размеров, значит и PE-хидеры будут различны.
Isaev


Ранг: 750.9 (! !)
Статус: Участник
Student

Создано: 5 февраля 2009 18:29 New!
· Личное сообщение · #9

crc1 пишет:
С раскраской пока не все ясно, дело в том, что при изменении кода, длина команд в некоторых случаях становиться разной, адресация сбивается и не понятно, какие команды выделять. Вернее визуально понятно, но как реализовать пока еще не вкурил.

А всё просто до безобразия... Считаешь сколько байт команда слева, берёшь из другого файла столько же байт начиная с того же адреса и дизассемблируешь... всё
crc1

Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 6 февраля 2009 10:31 · Поправил: crc1 New!
· Личное сообщение · #10

theCollision пишет:
Завязываться на расширение файла не совсем корректно

Блин, суть то в том что, сравниваются фалы в дизассемблированном виде, и какой смысл если мы сравним два txt(или другого не PE формата файла) в дизассемблированном виде. Поэтому и ограничение в выборе файлов. Согласен, нужно добавить .com, .scr, .ocx, .sys, .drv А остальные нах не нужны. Мое ИМХО.
Isaev пишет:
А всё просто до безобразия

Все просто, да не так просто. Просто нету времени. Помнишь, как у Розенбаума "Нету времени, пообщаться с друзьями евреями"
theCollision

Ранг: 271.5 (наставник)
Статус: Участник
Packer Reseacher

Создано: 6 февраля 2009 10:56 · Поправил: theCollision New!
· Личное сообщение · #11

crc1
А вот у меня туева хуча файлов, которые имеют и *.bin и *.dmp и пресловатый *.txt и еще туеву хучу других расширений и при этом файл подчиняются PE-формату !!!
crc1

Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 6 февраля 2009 11:28 · Поправил: crc1 New!
· Личное сообщение · #12

theCollision
так пох, можно все форматы открыть, только если в начале файла нет сигнатуры "MZ" такой файл не поддерживается.
Хорошо, сделаю All Files. По просьбам трудящихся
Ray

Ранг: 28.7 (посетитель)
Статус: Участник

Создано: 18 марта 2009 10:51 New!
· Личное сообщение · #13

crc1
All Files, по просьбам трудящихся планируешь делать?
crc1

Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 26 марта 2009 11:27 · Поправил: crc1 New!
· Личное сообщение · #14

Вот, выкроил время, кое-чего поправил
CmpDisasm 0.3
Add
Сделал раскраску всех отличающихся байт
Добавил All Files при выборе файлов (хотя и раньше это можно было обойти драг дропом)
Добавил горячие клавиши
В текстовый файл записываются все различия
Пофиксил несколько жучков
З.Ы. Прошу высказаться на счет раскраски
Ray

Ранг: 28.7 (посетитель)
Статус: Участник

Создано: 26 марта 2009 11:44 · Поправил: Ray New!
· Личное сообщение · #15

crc1
Вижу отличия черным по зеленому.
Т.е. всех отличающихся байт? Разные раскраски? Если да, то у меня все черным по зеленому.
Add
Сделай еще,пожалуйста, возможность изменения размеров окна.
BoRoV


Ранг: 534.6 (!)
Статус: Uploader
retired

Создано: 26 марта 2009 11:49 · Поправил: BoRoV New!
· Личное сообщение · #16

вобщем неплохо, но вот есть один баг
внимание на экран:


и так во всех подобных случаях
Ray

Ранг: 28.7 (посетитель)
Статус: Участник

Создано: 26 марта 2009 11:51 New!
· Личное сообщение · #17

BoRoV пишет:
внимание на экран:
и так во всех подобных случаях

Должна была появиться картинка? Не приаттачилась.
BoRoV


Ранг: 534.6 (!)
Статус: Uploader
retired

Создано: 26 марта 2009 11:54 New!
· Личное сообщение · #18

да все нормально было, пока я не увидел лишние на скрине
theCollision

Ранг: 271.5 (наставник)
Статус: Участник
Packer Reseacher

Создано: 26 марта 2009 12:07 · Поправил: theCollision New!
· Личное сообщение · #19

нашел время потестить )
пожал RLpack 1.20.1f два exe-файла , один LZMA другой APlib и решил сравнить, прога упала )))

Замечания:
1. Информацию принято выводить не вверху в топе, а как это не парадоксально, внизу
2. Завести схемы раскраски, задать стандартную. Ну а юзер сам себе настроит так как ему надо
3. Буквы под курсором тоже можно менять цветом, ну и в выделенных областях. А то сейчас сплошной черный, имхо не есть гуд.
4. Если мы стоим на конкретом куске, имеет смысл сделать его немного с более жирным цветом, чем другие команды
5. На весь экран и возможность изменения размеров
6. Возможность "поверх всех окон" также будет удобна
7. сделать выбор сравниваемых файлов не по отдельности, а в одном диалоге. Если вдруг один остается а второй заменяется, то на этой панели сделать правой кноккой мыши меню "открыть" или "заменить" файл и заново сравнить

Новой фичи:
1. Предлагаю сравнивать область памяти с содержимым указанного файла на диске
OKOB


Ранг: 512.7 (!)
Статус: Участник
Победитель турнира 2010

Создано: 26 марта 2009 12:44 New!
· Личное сообщение · #20

ИМХО явно не достает функционала. В таком виде подходит только для поиска пропатченых мест или с натяжкой для работы со сдампленными образами. Необходимо добавить возможность сравнивать файлы с разным смещением (возможность задавать RVA или FO). Да и длина сравнения или конечный адрес не помешают. Т.к. в файл сбрасывает долго и много безполезной информации. Кому нужно то для того сделать галку "Все" с блокировкой поля для задания длины. Аналогично и сполями смещения. Реализуется это легко, а пользы прибавится.
SVLab

Ранг: 133.4 (ветеран)
Статус: Участник

Создано: 26 марта 2009 13:43 New!
· Личное сообщение · #21

BoRoV пишет:
вобщем неплохо, но вот есть один баг

Не понял, а в чём баг?
crc1
Слелать возможность открывать файл, уже занятый другой программой или просто запущенный.
Сделать сравнение и других секций, но не дизассемблировать, а выводить в виде hex и symbol дампа (в идеале иметь возможность выбора - в каком виде отображать).
Возможность брать образ процесса из памяти.
BoRoV


Ранг: 534.6 (!)
Статус: Uploader
retired

Создано: 26 марта 2009 14:22 New!
· Личное сообщение · #22

SVLab пишет:
Не понял, а в чём баг?

а пустые строки - это разве нормально?
crc1

Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 26 марта 2009 14:53 New!
· Личное сообщение · #23

Ray пишет:
Разные раскраски?

Про разные я не говорил, имел ввиду будут выделены все разлиающиеся байты.
BoRoV пишет:
но вот есть один баг

Если ты имеешь в виду про "дырки" в коде, то это сделано чтобы адреса не разезжались. Если их не делать адреса сместятся и будет непонятно... Скорее это фича, а не баг
theCollision пишет: решил сравнить, прога упала )))
Закинь куда-нибудь эти файлы
theCollision пишет:
Информацию принято выводить не вверху в топе, а как это не парадоксально, внизу

Ну это спорный вопрос и не принципиальный.
По пункту 3 и 4 - я использую контрол, который не поддерживает работу отдельно с символами и словами. Только со всей строкой или столбцом.
Пункт 5 и 6 - это можно
theCollision пишет:
7. сделать выбор сравниваемых файлов не по отдельности, а в одном диалоге.

Как ты себе это представляешь? Я использую стандартный win диалог выбора файла. Что, свой диалог писать? А если файлы находятся в разных каталогах?
OKOB
Эта утиль ни коим образом не претендует на супер-пупер прогу. Писалась для себя, просто надоело в своих же патчах искать отличия в оле, когда прога обновляется часто. Если хочется много функционала, на первой странице SniperOK давал сцылку на крутую прогу подобного плана.
Начало и конец блока для сравнения прикрутить можно (может даже и нужно, чтобы секции с данными, ресурсами и пр. не сравнивать)
theCollision

Ранг: 271.5 (наставник)
Статус: Участник
Packer Reseacher

Создано: 26 марта 2009 15:02 New!
· Личное сообщение · #24

>>theCollision пишет:
>>7. сделать выбор сравниваемых файлов не по отдельности, а в одном диалоге.
>>Как ты себе это представляешь? Я использую стандартный win диалог выбора файла. Что, свой диалог >>писать? А если файлы находятся в разных каталогах?
Уже не однократно говорил, поставь себе WinMerge. Там когда жмешь на "Открыть" появляется отдельный диалог и там "Левый", "Правый", "Фильтр".

Не изобретай велосипед, если хошь сделать удобную тулзу, то следуй по принципу "Наименьшего удивления", если народ привык видеть некоторые вещи на конкретных местах в подобного рода тулзах, то он и будет искать их там, хоть пристрели ;)

>>Ну это спорный вопрос и не принципиальный.
Закон юзабилити однако! ;) Почитай книгу, очень даже интересная наука ;)
OKOB


Ранг: 512.7 (!)
Статус: Участник
Победитель турнира 2010

Создано: 26 марта 2009 15:51 · Поправил: OKOB New!
· Личное сообщение · #25

crc1 пишет:
на первой странице SniperOK давал сцылку на крутую прогу подобного плана

Да BinDiff'ом я пользовался и до появления топа. Отличие в том, что то плагин к ИДЕ и не всегда для того чтобы глянуть одну функу рационально ИДИть два файла. Каждой тулсе своя область применения и если ты свою позиционируешь таким образом, то и назови PatchRemember. Не прими за сарказм. Как уже написал реализуется легко, а проку много.
ManHunter


Ранг: 101.5 (ветеран)
Статус: Участник

Создано: 26 марта 2009 16:05 New!
· Личное сообщение · #26

Может "Compare in File" переименовать? А то это ближе к непонятному "Сравнить в файле", чем к "Записать различия в файл".
crc1

Ранг: 138.7 (ветеран)
Статус: Участник

Создано: 26 марта 2009 17:15 New!
· Личное сообщение · #27

>>Уже не однократно говорил, поставь себе WinMerge. Там когда жмешь на "Открыть" появляется отдельный диалог и там "Левый", "Правый", "Фильтр".
Вон ты про что. WinMerge давно стоит. Просто я тебя не понял. Думал из одного стандартного диалогового (тьфу блин, хрен выговоришь) окна файлы выбирать. Ну а в чем разница? Там две кнопки, тут две. Сделать это легко. Отдельную форму прикрутить. Только надо ли? Подумаю.
OKOB я написал выше, Начало и конец блока для сравнения сделаю. А про "возможность сравнивать файлы с разным смещением" тут я тебя не понял, поясни.
ManHunter пишет:
Может "Compare in File" переименовать?

Типа "Save differences in file" -больно длинно
SVLab пишет:
Слелать возможность открывать файл, уже занятый другой программой или просто запущенный.

Геморно все это, подскажи простой вариант Если только через копирование
SVLab пишет:
выводить в виде hex и symbol дампа

Я думал над этим, выводить в другой вкладке HEX дамп...
ManHunter


Ранг: 101.5 (ветеран)
Статус: Участник

Создано: 26 марта 2009 17:24 New!
· Личное сообщение · #28

crc1 пишет:
Типа "Save differences in file" -больно длинно


типа "Save to File"
SVLab

Ранг: 133.4 (ветеран)
Статус: Участник

Создано: 26 марта 2009 17:34 New!
· Личное сообщение · #29

BoRoV пишет:
а пустые строки - это разве нормально?

Ну а каким ещё образом синхронизировать последующие строки если команд получается разное количество?
crc1 пишет:
Геморно все это, подскажи простой вариант

Не рублю в программировании , но ведь для других прог это не проблема. Можно открыть файл в Оле и одновременно запустить его самостоятельно, посмотреть в Peid, die, PE Explorer и пр.
OKOB


Ранг: 512.7 (!)
Статус: Участник
Победитель турнира 2010

Создано: 26 марта 2009 17:40 · Поправил: OKOB New!
· Личное сообщение · #30

crc1 пишет:
А про "возможность сравнивать файлы с разным смещением" тут я тебя не понял, поясни.

Это и имелось в виду начало рассматриваемого блока, но возможность задавать разное для окон и с переключателем: в виде File Offset или RVA, т.к. ты адрес выводишь уже с учетом базы загрузки и размещения секций в памяти.
Или для окна отображения сделать переключатель File Offset или RVA (как в hiew).
Jupiter


Ранг: 544.9 (!)
Статус: Модератор
Research & Development

Создано: 26 марта 2009 19:26 New!
· Личное сообщение · #31

> Геморно все это, подскажи простой вариант Если только через копирование

для CreateFile: GENERIC_READ, FILE_SHARE_READ
для CreateFileMapping: PAGE_WRITECOPY
для MapViewOfFile: FILE_MAP_COPY (или FILE_MAP_READ)
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 12 . 13 . >>
 eXeL@B —› Софт, инструменты —› CmpDisasm - Утилита для сравнения PE файлов в дизассемблированном виде

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS