Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Реализация контрольной суммы
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Holden Holden вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.07.2006
По умолчанию 31.07.2006, 17:41

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

Кроме того, при написании отдельного приложения (которое могло бы, к примеру, считывать имеющуюся контрольную сумму или обновлять её) опять же встаёт вопрос: стабильности места размещения этой суммы и алгоритма считывания этой суммы (очевидно, что то место, где хранится она сама обсчитываться не должно, а может быть какие-то ещё места).
Ответить с цитированием
  (#2 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 31.07.2006, 21:43

В заголовке PE-файла есть поле контрольной суммы. Однако.... как ни забавно, но PE-загрузчик его никак не использует! В подавляющем большинстве файлов это поле просто равно 0. По-видимому, это атавизм, оставшийся от каких-то ранних версий Windows.
Или же смысл снятия контрольной суммы в чем-то ином? Конкретизируй задачу - для чего это надо?


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
  (#3 (permalink)) Старый
Holden Holden вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.07.2006
По умолчанию 01.08.2006, 11:12

Цитата:
В заголовке PE-файла есть поле контрольной суммы. Однако.... как ни забавно, но PE-загрузчик его никак не использует! В подавляющем большинстве файлов это поле просто равно 0. По-видимому, это атавизм, оставшийся от каких-то ранних версий Windows.
Или же смысл снятия контрольной суммы в чем-то ином? Конкретизируй задачу - для чего это надо?
Речь немного не о том. Есть модуль, умеющий снимать контрольную сумму с входного текста и писать её. куда скажут. Но не ясно, как этот модуль разместить в программе.
С одной стороны, если разместить его при компиляции и хранить КС в самом экзешнике, то при просчитывании КС он будет считать и то место, где КС хранится, и саму запись КС, что недопустимо. В принципе, можно организовать затем поиск места в файле, где будет записана КС и автоматически научиться пропускать это место при дальнейших подсчетах КС. Но выглядит это уж больно страшно
Можно разместить рассчет КС отдельно и писать КС куда-нибудь рядом, но как это делают обычно?
Как вообще это всё реализуется?
Ответить с цитированием
  (#4 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 01.08.2006, 11:41

Я имел в виду - зачем вообще снимать контрольную сумму с экзешника? Какова конечная цель этих сложных телодвижений? Предположим, что мы каким-то таинственным образом научились это делать... И что же дальше?


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
  (#5 (permalink)) Старый
Holden Holden вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.07.2006
По умолчанию 01.08.2006, 13:33

Цитата:
Я имел в виду - зачем вообще снимать контрольную сумму с экзешника? Какова конечная цель этих сложных телодвижений? Предположим, что мы каким-то таинственным образом научились это делать... И что же дальше?
Планируется, что КС будет сниматься не только по самому экзешнику, но и по набору хранящих в себе конфигурационные и другие настройки файлов, что позволит защитить программу от изменения её параметров, конфигураций и просто от внесения изменений без прав доступа (т.е. извне программы). Однако сейчас вопрос стоит по самому экзешнику, т.к. как это сделать с остальными файлами примерно ясно, а вот как _красиво_ это реализуют с подсчетом "самого себя" - не понятно. Наверняка ведь есть стандарты, обычные методы.
Вообще какие есть обычные методы?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 01.08.2006, 17:56

Тогда задача упрощается до безобразия:
1. за час пишешь утилиту командной строки, которая рассчитывает контрольную сумму CRC32 файла (имя передается ей в комстроке) и дописывает эту КС к файлу (+ 4 байта). Алгоритм расчета CRC32 был здесь на Форуме - воспользуйся поиском, Copy & Paste.
2. подключаешь эту утилиту в процесс сборки - напускаешь ее на exe после построения. Не знаю, как это делается в Билдере, а в MSVC есть такой Post Build Event, наверняка есть что-то подобное в BCB.
3. а сама программа для контроля своей целостности должна считать КС исполняемого файла без последнего DWORD'а (4 байта), и сравнивать полученное значение с этим самым последним DWORD'ом. Вуаля!


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите плиз с контрольной работой!!!завтра сдать нужно, а решить не получается( Олеся07 Assembler 1 10.06.2011 17:38
Помощь в решении контрольной работы по Пролог pavelv Prolog 1 27.01.2011 00:49
Вычисление значения суммы Dezertirov Pascal 0 21.12.2010 21:03
Нужен исходник алгоритма контрольной суммы который использует WinRAR yarus .NET 3 07.05.2009 20:11
Требуется помочь в решении контрольной работы Mr Pechkin Delphi 2 04.05.2009 04:30
Рабочие образы, переписанные на винчестер, оказываются с ошибкой контрольной суммы Проводник :) Накопители 1 18.07.2008 17:33
Ошибка контрольной суммы, CRC error и т.д. ONIXman Софт и программы 9 11.06.2008 10:39
При установке игр выдается ошибка контрольной суммы. Vend Техническая поддержка 2 08.03.2008 02:37
Вычисление контрольной суммы CRC16 Voldyr Visual Basic 1 31.01.2008 23:35
Алгоритм вычисления контрольной суммы файла alexu Алгоритмы 2 04.07.2007 02:48
Есть ли фции для проверки контрольной суммы vain Visual C++ 7 07.06.2006 12:31



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов