Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Изменение ячейки в *.exe файле


Автор: andrew_121 4.3.2008, 15:51
Есть задумка кинуть в программу счетчик запусков. Но хочется чтоб этот счетчик был в *.exe файле этой самой программы.
Т.е. В коде программы переменная:
Код

const int count = 0;
int main() {
   if ( count == 30 ) {
      printf( "Eval. period и т.д." );
      return -1;
   }
}

Как узнать где в файле находиться этот счетчик, и как его можно инкрементировать при каждом запуске ???

Автор: JackYF 4.3.2008, 16:03
Цитата(andrew_121 @  4.3.2008,  14:51 Найти цитируемый пост)
Как узнать где в файле находиться этот счетчик, и как его можно инкрементировать при каждом запуске ??? 

стандартными средствами - никак. Для этого тебе нужно знать структуру PE - файла.

Автор: andrew_121 4.3.2008, 17:19
Но ведь переменная count - константа, и в ассемблерном коде ее значение необходимо переслать в регистр.
А для того чтоб переслать, это значение должно быть сохранено в явном виде.

Автор: JackYF 4.3.2008, 19:39
Цитата(andrew_121 @  4.3.2008,  16:19 Найти цитируемый пост)
это значение должно быть сохранено в явном виде. 

правильно, оно хранится в файле. Но его, это значение, нужно ещё найти smile

Автор: andrew_121 4.3.2008, 19:48
Да, нужно, буду искать, с Вашей помощью или без...

Автор: MAKCim 4.3.2008, 22:10
Цитата(andrew_121 @  4.3.2008,  15:51 Найти цитируемый пост)
Как узнать где в файле находиться этот счетчик, и как его можно инкрементировать при каждом запуске ???

обычно отображенный на линейное адресное пространство исполняемый файл нельзя открыть на запись
возможно, придется внедрять код, инкрементирующий значение счетчика, в другой процесс
что касается нахождения смещения в файле, по которому находятся нужные данные, то тут поможет спецификация на формат PE и ABI, которому следует ОС 
да, вот еще
в вашем случае переменная может вообще не находится в файле, а любое ее использование выраждаться в подстановку константы
и самое последнее
такой способ защиты программы - это детский сад
и палится на раз-два-три

Автор: andrew_121 4.3.2008, 22:19
MAKCim
Огромное спасибо за дельный совет. Возможно Вы сможете мне подсказать как я могу защитить прогу, или
где можно прочесть на эту тему.


Заранее Спасибо.

Автор: MAKCim 4.3.2008, 22:24
andrew_121, 
могу порекомендовать зайти на wasm.ru

Автор: vinter 4.3.2008, 22:49
Цитата(andrew_121 @  4.3.2008,  23:19 Найти цитируемый пост)
Огромное спасибо за дельный совет. Возможно Вы сможете мне подсказать как я могу защитить прогу, илигде можно прочесть на эту тему.

и ее все равно сломают smile сорри за флуд

Автор: MAKCim 4.3.2008, 23:21
Цитата(vinter @  4.3.2008,  22:49 Найти цитируемый пост)
и ее все равно сломают smile сорри за флуд 

так и есть (в смысле, что сломают  smile )
но только в 2-ух случаях
1. интерес
2. результат взлома окупает затраты на него
с первым вариантом ничего не сделаешь
а со вторым вполне можно повозиться

Автор: jonie 4.3.2008, 23:24
нек программы не стоят таких затрат на защиту. некоторые ломать бесполезно (в силу обновлений только зарегиным юзерам)....когда-то я писал небольшую прогу и встроил туда проверку файла (банально по таймеру, время было рандомно выбираемо)....ну и если не совпадали контр суммы, то внедрял в ОСь драйвер, который при след перезагрузке системы начинал играть с жеским диском))... веселая и жестокая защита)) ушиб мне оторвать....

многие стали внедрять удаленный шелл в свои проги и проверять их память.... что ятоже не считаю хорошей идеей... некоторые стали урезать часть функий или писать при нек событиях что воровоное по (xchat, например).....

методик защиты море... лучшая методика -  никому не давать ПО )

MAKCim уже грил - такая защита палится очень даже просто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)