Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > [C++Builder 6] Размер моего екзешника


Автор: Palladin 22.5.2007, 20:36
Как узнать сколько весит екзешник моей программы, т.е. моя программа будет работать на машине на которой не стоит никакого антивируса, и меня попросили сделать какуюнить проверку, ну я смекнул что при "налипании" вируса на экзешник моей программы её вес изменится, и достаточно просто при запуске проверять вес на текущей момент и вес который должен быть, если я прав, то подскажите какими функциями сделать это, если нет подскажите альтернативу
Не кампе не стоит антивируса и т.п. прог из-за малого объема DDR(128 метров)

Автор: Anikmar 22.5.2007, 21:02
Цитата(Palladin @  22.5.2007,  20:36 Найти цитируемый пост)
ну я смекнул что при "налипании" вируса на экзешник моей программы её вес изменится, и достаточно просто при запуске проверять вес на текущей момент и вес который должен быть, если я прав, то подскажите какими функциями сделать это, если нет подскажите альтернативу

Хочу вас огорчить - многие вирусы скрывают увеличение размера exe. Так что этот способ врядли можно считать надежным.
Из программы узнать размер exe файла можно одной строкой:
long SizeFile = FileSizeByName(Application->ExeName);

А вот как вы при каждой сборке будете проверку менять?

Автор: Palladin 22.5.2007, 21:05
Да о новых зборках не подумал, ну буду надеятся что непридется заплатки делатьsmile сенкс 3 раз тебе, уже 3 раза помог, помоги если можеш ещё по 4 моему вопросу если знаеш, дал бы по репе да 100 постов ещё не нафлудилsmile

Автор: NightXXX 22.5.2007, 21:09
Цитата

FileSizeByName(Application->ExeName);

какую библиотеку надо подключать для этого, это де для Делфи написаная функция?

А как узнать тип файла и размер его?

Автор: Palladin 22.5.2007, 21:10
Модератор: Сообщение скрыто.

Автор: Anikmar 22.5.2007, 21:16
Цитата(NightXXX @  22.5.2007,  21:09 Найти цитируемый пост)
какую библиотеку надо подключать для этого, это де для Делфи написаная функция?

В хелп глянте, по-моему что-то вроде #include <idglobal.h>

Добавлено через 2 минуты и 18 секунд
Узнать размер файла
FileSizeByName
Узнать расширение файла
ExtractFileExt
Узнать путь к файлу
ExtractFilePath
Сменить расширение
ChangeFileExt

Если глянуть хелп и кликнуть на модуле - там будет куча интересных функций работы с файлами и директориями

Автор: NightXXX 22.5.2007, 21:36
Да хелп спирается на этот модуль  idglobal
Но прикол в чем в Си его нет, его надо устанавливать дополнительно?
А это проверено?

Автор: Anikmar 22.5.2007, 21:39
Цитата(NightXXX @  22.5.2007,  21:36 Найти цитируемый пост)
Да хелп спирается на этот модуль  idglobal
Но прикол в чем в Си его нет, его надо устанавливать дополнительно?
А это проверено?

У вас какой билдер? Я ничего дополнительно не ставил - у меня 6-й билдер
Что значит его нет в Си?

Добавлено через 22 секунды
Цитата(NightXXX @  22.5.2007,  21:36 Найти цитируемый пост)
А это проверено?

Использовал много раз - проверено

Автор: NightXXX 22.5.2007, 21:45
у меня C++ Builder 6, чего то там не находиться , ну покрайней мере у меня!

Автор: Palladin 22.5.2007, 22:18
Хм, у мя тоже нет этого файла, выложи плз его гденить и дай ссылку плз

Автор: Klin 22.5.2007, 22:18
NightXXX, его ИМХО подключать не надо.
Просто пишешь нужную функцию.

Добавлено через 2 минуты и 8 секунд
Palladin, все эти функции входят в SysUtils.hpp

Автор: Palladin 22.5.2007, 22:30
Ну слушай, я же не просто так написал, вот ошибку дает
пишу код в точности как Аникмар написал smile 

Код

[C++ Error] Unit7.cpp(28): E2268 Call to undefined function 'FileSizeByName'

Автор: Klin 22.5.2007, 22:39
А, енто я пропустил, но про него же Anikmar, сказал:
Код

 #include <idglobal.hpp>

Автор: Palladin 22.5.2007, 23:40
Писал я это, не катит, ладно я уже обошёл этот момент, всем сенкс

Автор: sp75 23.5.2007, 09:05
Цитата(Palladin @ 22.5.2007,  20:36)
Как узнать сколько весит екзешник моей программы, т.е. моя программа будет работать на машине на которой не стоит никакого антивируса, и меня попросили сделать какуюнить проверку, ну я смекнул что при "налипании" вируса на экзешник моей программы её вес изменится, и достаточно просто при запуске проверять вес на текущей момент и вес который должен быть, если я прав, то подскажите какими функциями сделать это, если нет подскажите альтернативу
Не кампе не стоит антивируса и т.п. прог из-за малого объема DDR(128 метров)

Хоть тему закрыл, все же напишу. В таком случае нужно перещитать контрольную суму екзешника CRC32, еси отличается значит чето сидит в твоем файле, а размер тебя не спасет smile. 

Автор: Anikmar 23.5.2007, 09:07
Цитата(sp75 @  23.5.2007,  09:05 Найти цитируемый пост)
Хоть тему закрыл, все же напишу. В таком случае нужно перещитать контрольную суму екзешника CRC32, еси отличается значит чето сидит в твоем файле, а размер тебя не спасет .  

Смею вас огорчить.
Изменение CRC вирусы научились маскировать даже раньше, чем изменение размера файла 

Автор: sp75 23.5.2007, 09:39
Цитата(Anikmar @ 23.5.2007,  09:07)
Цитата(sp75 @  23.5.2007,  09:05 Найти цитируемый пост)
Хоть тему закрыл, все же напишу. В таком случае нужно перещитать контрольную суму екзешника CRC32, еси отличается значит чето сидит в твоем файле, а размер тебя не спасет .  

Смею вас огорчить.
Изменение CRC вирусы научились маскировать даже раньше, чем изменение размера файла

Тоесть если в теле вирус и перещитать CRC32 екзешника с вирусом и без, то суммы будут одиноковы ?

Автор: Anikmar 23.5.2007, 09:46
Цитата(sp75 @  23.5.2007,  09:39 Найти цитируемый пост)
Тоесть если в теле вирус и перещитать CRC32 екзешника с вирусом и без, то суммы будут одиноковы ?

ага. При заражении файла многие вирусы делают так, что CRC остается прежней.
Правда не знаю на сколько это актуально для современных зверей - проще перехватить чтение файла и изъять тело вируса. Тогда можно сколько угодно смотреть файл стандартными средствами зверь там будет просто отсутствовать. Соответственно и контрольные суммы тоже будут неизменны.
Технологию виндовых зверей я не изучал, поэтому не силен в их средствах маскировки.

Автор: sp75 23.5.2007, 10:08
Цитата(Anikmar @ 23.5.2007,  09:46)
Цитата(sp75 @  23.5.2007,  09:39 Найти цитируемый пост)
Тоесть если в теле вирус и перещитать CRC32 екзешника с вирусом и без, то суммы будут одиноковы ?

ага. При заражении файла многие вирусы делают так, что CRC остается прежней.
Правда не знаю на сколько это актуально для современных зверей - проще перехватить чтение файла и изъять тело вируса. Тогда можно сколько угодно смотреть файл стандартными средствами зверь там будет просто отсутствовать. Соответственно и контрольные суммы тоже будут неизменны.
Технологию виндовых зверей я не изучал, поэтому не силен в их средствах маскировки.

Может оно уже и так, может я уже отстал от времени, спорить не буду. Вроде сравнивал раньше два файла зараженого и нет, CRC32 отличались.
Просто не понимаю как можно подобрать сумму побайтового вычисления зараженого фала что бы полином вида 1+x+x^2+x^4+x^5+x^7+x^8+x^10+x^11+x^12+x^16+x^22+x^23+x^26+x^32 для обеих был одинаков.



Автор: Anikmar 23.5.2007, 10:29
Цитата(sp75 @  23.5.2007,  10:08 Найти цитируемый пост)
Может оно уже и так, может я уже отстал от времени, спорить не буду. Вроде сравнивал раньше два файла зараженого и нет, CRC32 отличались.
Просто не понимаю как можно подобрать сумму побайтового вычисления зараженого фала что бы полином вида 1+x+x^2+x^4+x^5+x^7+x^8+x^10+x^11+x^12+x^16+x^22+x^23+x^26+x^32 для обеих был одинаков.


Вы не отстали от времени. Наоборот - технология подгона CRC зараженного файла времен 90-х годов прошлого века.
Если вы сомневаетесь, что можно подогнать - посмотрите на это с другой стороны: Рассчет CRC32 выливается в конечное количество результатов. А количество разных exe файлов гораздо большее. Следовательно очевидно, что у двух разных exe файлов возможна одинаковая CRC32

CRC32 рассчитывается сложнее, чем обычная CRC, но принцип там похожий, на сколько я помню. Так что метод подгона - по специальному алгоритму добавляется массив некоторых данных (не код - просто типа мусора), который заполняется необходимыми значениями. Код первоначального exe вместе с телом вируса + этот массив дают исходную CRC. Так что методы проверки по CRC современными антивирусами по-моему уже не применяются.

Автор: dumb 23.5.2007, 11:05
Цитата(Anikmar @  23.5.2007,  09:07 Найти цитируемый пост)
Изменение CRC вирусы научились маскировать даже раньше, чем изменение размера файла

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

Цитата(Anikmar @  23.5.2007,  09:46 Найти цитируемый пост)
При заражении файла многие вирусы делают так, что CRC остается прежней.

а можно пример "многих"? думаю, что если такие и есть, то их единицы...

ладно, завязываю, ибо тоже не в теме последних вирусных веяний...

ps. если вернуться на землю, к нашим варанам, то вот пример проверки crc32 своего .exe:

Автор: Anikmar 23.5.2007, 14:32
Цитата(dumb @  23.5.2007,  11:05 Найти цитируемый пост)
а можно пример "многих"? думаю, что если такие и есть, то их единицы...

Данная тема выходит за пределы топика. Я просто сказал, что данные методы не панацея.
Времена шифрования вируса методами подмена CRC и размера файла, были естетственно достаточно давно (о чем я и написал). Сейчас думается что проще перехватить обращение к файлу и подменить его незараженной копией - это проще, чем менять CRC.
Конкретно о типах вирусов - таких уйма описана у того же Касперского, суть не в этом.

Что проверять размер exe файла, что CRC - принцип одинаковый - последний более медленый. Меня больше интересовал механизм изменение проверки при каждой сборке проекта.

А вариантов шифрования вирусов на столько много, что конкретно здесь их обсуждать не вижу никакого смысла.

Автор: Palladin 23.5.2007, 18:34
Хм, да топ вышел за переделы, но мне тут было интересно читать ваши постыsmile У меня вопрос:
Можно ли как-то узнать какие процессы обращаются к вашей программе, я думаю, что если знаеш какие процессы должны обращатся, то можно сделать так чтобы к программе обращались лишь они, а остальным откат, если не прав, так и скажите, если прав функции в студию smile 

Автор: Palladin 26.5.2007, 00:29
Да, кстати, в моем случае проверять вес программы бессмыслено, т.к. ,помойму:
У меня файловая система NTFS на машине, а у заказчика FAT32, насколько я знаю, вес будет разный, плюс при запуски с CD-DVD и др носителей будет аткая же проблема:( такчто я забил на это дело

Автор: Klin 26.5.2007, 09:09
Palladin, а почему просто не следить за датой изменения? Насколько я знаю, этото параметр не меняется ни при копировании, ни при открытии, а только при изменении. Т.е программа (или что там у тебя smile) следит за датой изменения и если, что-то не совпадает включает необходимый обработчик.

Автор: Anikmar 26.5.2007, 09:31
Цитата(Klin @  26.5.2007,  09:09 Найти цитируемый пост)
Palladin, а почему просто не следить за датой изменения? Насколько я знаю, этото параметр не меняется ни при копировании, ни при открытии, а только при изменении. Т.е программа (или что там у тебя ) следит за датой изменения и если, что-то не совпадает включает необходимый обработчик. 

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

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

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

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


Автор: Klin 26.5.2007, 09:52
Все равно, они должны где-то сущетвовать (обычно system32 - иголка в стоге сена). Можно проводить поиск по "опасным" директория, проделывая ревизию и если обнаружен новый объект - проверять не использует ли он нашу программу (или какие ресурсы он использует). 


p.s. Надо бы почитать книжки по написанию вирусов. Чтобы точно знать какие уловки используют вирусы сейчас.

Автор: Palladin 26.5.2007, 10:33
Надо бы почитать, но фиг что норм найдеш, я вот уже 3 книги скачал, толку там мало, а спрашивать здесь как пишутся вирусы и т.п. вопросы вроде запрещено, мне RooR сказалsmile ему мол когда-то минус дали за такое.....
И что делать?

Автор: dumb 26.5.2007, 11:40
Palladin, дружище, ты определись: тебе надо сделать минимальную проверку, или ты собрался касперскому конкуренцию учинять? smile

Добавлено через 4 минуты и 35 секунд
размер файла не зависит от файловой системы, а то, сколько он фактически занимает места за счет кластеризации, тебя волновать не должно в рамках твоей задачи.
по поводу времени создания/изменения: который раз удивляюсь, но уже не первый раз при зачистке обращаю внимание на то, что совеременные трои/вири не уделяют этому должного внимания - последний раз km-руткит который спрятался от всех и вся сдал все свои "потроха"(после определенной "кастрации") именно по времени создания... smile

Автор: Palladin 26.5.2007, 13:14
Гы, вот собственно и заключение данной темы, отсюда последнйи вопрос, как это организовать, код всмысле надо
Цитата(Klin @  26.5.2007,  09:09 Найти цитируемый пост)
Palladin, а почему просто не следить за датой изменения? Насколько я знаю, этото параметр не меняется ни при копировании, ни при открытии, а только при изменении. Т.е программа (или что там у тебя ) следит за датой изменения и если, что-то не совпадает включает необходимый обработчик


Автор: Klin 27.5.2007, 11:53
Блин, интернет вообще не пашет, на главную попадаю, а дальше шиш smile Используйте функцию GetFileTime, пример:

Код

 FILETIME access;
 HANDLE hFile=CreateFile(Application->ExeName.c_str(),GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
 GetFileTime(hFile,0,&access,0);


Это функция записи, последнего изменения. В какой-то момент можно программа записывает в файл эту информацию. Можно кодировать, но если это защита от вируса, а не от пользователя, то миожно этого не делать Привести это время в человеческий вид можно  функцией  FileTimeToLocalFileTime или FileTimeToSystemTime, точно не помню. Но в хелпе все должно быть.


Но этого делать не обязательно, просто при запуске программа должна читать информацию из ранее записанного файла и проверять его текущее состояние. 


ps. намудрил smile будут вопросы задавай.

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