| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > [C++Builder 6] Размер моего екзешника |
| Автор: Palladin 22.5.2007, 20:36 |
| Как узнать сколько весит екзешник моей программы, т.е. моя программа будет работать на машине на которой не стоит никакого антивируса, и меня попросили сделать какуюнить проверку, ну я смекнул что при "налипании" вируса на экзешник моей программы её вес изменится, и достаточно просто при запуске проверять вес на текущей момент и вес который должен быть, если я прав, то подскажите какими функциями сделать это, если нет подскажите альтернативу Не кампе не стоит антивируса и т.п. прог из-за малого объема DDR(128 метров) |
| Автор: Palladin 22.5.2007, 21:05 |
| Да о новых зборках не подумал, ну буду надеятся что непридется заплатки делать |
| Автор: NightXXX 22.5.2007, 21:09 | ||
какую библиотеку надо подключать для этого, это де для Делфи написаная функция? А как узнать тип файла и размер его? |
| Автор: Palladin 22.5.2007, 21:10 |
Модератор: Сообщение скрыто. |
| Автор: Anikmar 22.5.2007, 21:16 | ||
В хелп глянте, по-моему что-то вроде #include <idglobal.h> Добавлено через 2 минуты и 18 секунд Узнать размер файла FileSizeByName Узнать расширение файла ExtractFileExt Узнать путь к файлу ExtractFilePath Сменить расширение ChangeFileExt Если глянуть хелп и кликнуть на модуле - там будет куча интересных функций работы с файлами и директориями |
| Автор: NightXXX 22.5.2007, 21:36 |
| Да хелп спирается на этот модуль idglobal Но прикол в чем в Си его нет, его надо устанавливать дополнительно? А это проверено? |
| Автор: Anikmar 22.5.2007, 21:39 | ||
У вас какой билдер? Я ничего дополнительно не ставил - у меня 6-й билдер Что значит его нет в Си? Добавлено через 22 секунды Использовал много раз - проверено |
| Автор: 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 | ||
| Ну слушай, я же не просто так написал, вот ошибку дает пишу код в точности как Аникмар написал
|
| Автор: Klin 22.5.2007, 22:39 | ||
А, енто я пропустил, но про него же Anikmar, сказал:
|
| Автор: Palladin 22.5.2007, 23:40 |
| Писал я это, не катит, ладно я уже обошёл этот момент, всем сенкс |
| Автор: sp75 23.5.2007, 09:05 | ||
Хоть тему закрыл, все же напишу. В таком случае нужно перещитать контрольную суму екзешника CRC32, еси отличается значит чето сидит в твоем файле, а размер тебя не спасет |
| Автор: Anikmar 23.5.2007, 09:07 | ||
Смею вас огорчить. Изменение CRC вирусы научились маскировать даже раньше, чем изменение размера файла |
| Автор: sp75 23.5.2007, 09:39 | ||||
Тоесть если в теле вирус и перещитать CRC32 екзешника с вирусом и без, то суммы будут одиноковы ? |
| Автор: Anikmar 23.5.2007, 09:46 | ||
ага. При заражении файла многие вирусы делают так, что CRC остается прежней. Правда не знаю на сколько это актуально для современных зверей - проще перехватить чтение файла и изъять тело вируса. Тогда можно сколько угодно смотреть файл стандартными средствами зверь там будет просто отсутствовать. Соответственно и контрольные суммы тоже будут неизменны. Технологию виндовых зверей я не изучал, поэтому не силен в их средствах маскировки. |
| Автор: 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 для обеих был одинаков. |
| Автор: Anikmar 23.5.2007, 10:29 | ||
Вы не отстали от времени. Наоборот - технология подгона CRC зараженного файла времен 90-х годов прошлого века. Если вы сомневаетесь, что можно подогнать - посмотрите на это с другой стороны: Рассчет CRC32 выливается в конечное количество результатов. А количество разных exe файлов гораздо большее. Следовательно очевидно, что у двух разных exe файлов возможна одинаковая CRC32 CRC32 рассчитывается сложнее, чем обычная CRC, но принцип там похожий, на сколько я помню. Так что метод подгона - по специальному алгоритму добавляется массив некоторых данных (не код - просто типа мусора), который заполняется необходимыми значениями. Код первоначального exe вместе с телом вируса + этот массив дают исходную CRC. Так что методы проверки по CRC современными антивирусами по-моему уже не применяются. |
| Автор: dumb 23.5.2007, 11:05 | ||||
не исключаю такого варианта, но не слышал о таком. на мой взгляд, встраивать в вирус такие механизмы - только излишнее утяжеление кода, оправданное лишь в случае противодействия каким-то определенным продуктам. оно может и имело смысл во времена adinf'а, но сейчас...
а можно пример "многих"? думаю, что если такие и есть, то их единицы... ладно, завязываю, ибо тоже не в теме последних вирусных веяний... ps. если вернуться на землю, к нашим варанам, то вот пример проверки crc32 своего .exe: |
| Автор: Anikmar 23.5.2007, 14:32 | ||
Данная тема выходит за пределы топика. Я просто сказал, что данные методы не панацея. Времена шифрования вируса методами подмена CRC и размера файла, были естетственно достаточно давно (о чем я и написал). Сейчас думается что проще перехватить обращение к файлу и подменить его незараженной копией - это проще, чем менять CRC. Конкретно о типах вирусов - таких уйма описана у того же Касперского, суть не в этом. Что проверять размер exe файла, что CRC - принцип одинаковый - последний более медленый. Меня больше интересовал механизм изменение проверки при каждой сборке проекта. А вариантов шифрования вирусов на столько много, что конкретно здесь их обсуждать не вижу никакого смысла. |
| Автор: Palladin 23.5.2007, 18:34 |
| Хм, да топ вышел за переделы, но мне тут было интересно читать ваши посты Можно ли как-то узнать какие процессы обращаются к вашей программе, я думаю, что если знаеш какие процессы должны обращатся, то можно сделать так чтобы к программе обращались лишь они, а остальным откат, если не прав, так и скажите, если прав функции в студию |
| Автор: Palladin 26.5.2007, 00:29 |
| Да, кстати, в моем случае проверять вес программы бессмыслено, т.к. ,помойму: У меня файловая система NTFS на машине, а у заказчика FAT32, насколько я знаю, вес будет разный, плюс при запуски с CD-DVD и др носителей будет аткая же проблема:( такчто я забил на это дело |
| Автор: Klin 26.5.2007, 09:09 |
| Palladin, а почему просто не следить за датой изменения? Насколько я знаю, этото параметр не меняется ни при копировании, ни при открытии, а только при изменении. Т.е программа (или что там у тебя |
| Автор: Anikmar 26.5.2007, 09:31 | ||
Наверное выгляжу занудой, но если вирусы шифрующие CRC и размер exe действительно составляют не самую большую часть вирусов, то тех, которые не трогают дату изменения файлов - действительно большинство, т.к. это слишком бросающийся в глаза признак заражения. Думаю надо проверять точку входа. Есть специальные приемы, позволяющие определить произршел ли запуск от загрузчика ОС или из процедуры внутри exe. По-моему впервые метод проверки как раз был применен в aidstest, можно полазить по антивирусным сайтам - там должна быть информация, как это сделать. Когда вирус цепляется к файлу - ему нужно получить управление до запуска приложения. Соответственно он дописывает себя к файлу (причем и в конец и в середину и в начало - не принципиально), а после инсталяции своей резидентной части вызывает собственно программу - чтобы все было шито-крыто. Надо искать способы определения откуда произошел запуск. Например, можно проверять какую-либо сигнатуру в районе точки входа. Если сигнатура не та - значит точка входа была изменена и можно ругнуться. Правда точку входа меняют вполне легальные упаковщики, но это уже издержки метода. Если программа заказчику действительно нужна, то защищать ее надо от современных зверей - досовские практически вымерли сами собой. Значит надо почитать по современным зверям того же Касперского - у него достаточно большое описание различных вирусов. Посмотреть их способы маскировки и технологию обнаружения. |
| Автор: Klin 26.5.2007, 09:52 |
| Все равно, они должны где-то сущетвовать (обычно system32 - иголка в стоге сена). Можно проводить поиск по "опасным" директория, проделывая ревизию и если обнаружен новый объект - проверять не использует ли он нашу программу (или какие ресурсы он использует). p.s. Надо бы почитать книжки по написанию вирусов. Чтобы точно знать какие уловки используют вирусы сейчас. |
| Автор: Palladin 26.5.2007, 10:33 |
| Надо бы почитать, но фиг что норм найдеш, я вот уже 3 книги скачал, толку там мало, а спрашивать здесь как пишутся вирусы и т.п. вопросы вроде запрещено, мне RooR сказал И что делать? |
| Автор: dumb 26.5.2007, 11:40 |
| Palladin, дружище, ты определись: тебе надо сделать минимальную проверку, или ты собрался касперскому конкуренцию учинять? Добавлено через 4 минуты и 35 секунд размер файла не зависит от файловой системы, а то, сколько он фактически занимает места за счет кластеризации, тебя волновать не должно в рамках твоей задачи. по поводу времени создания/изменения: который раз удивляюсь, но уже не первый раз при зачистке обращаю внимание на то, что совеременные трои/вири не уделяют этому должного внимания - последний раз km-руткит который спрятался от всех и вся сдал все свои "потроха"(после определенной "кастрации") именно по времени создания... |
| Автор: Palladin 26.5.2007, 13:14 | ||
Гы, вот собственно и заключение данной темы, отсюда последнйи вопрос, как это организовать, код всмысле надо
|
| Автор: Klin 27.5.2007, 11:53 | ||
Блин, интернет вообще не пашет, на главную попадаю, а дальше шиш
Это функция записи, последнего изменения. В какой-то момент можно программа записывает в файл эту информацию. Можно кодировать, но если это защита от вируса, а не от пользователя, то миожно этого не делать Привести это время в человеческий вид можно функцией FileTimeToLocalFileTime или FileTimeToSystemTime, точно не помню. Но в хелпе все должно быть. Но этого делать не обязательно, просто при запуске программа должна читать информацию из ранее записанного файла и проверять его текущее состояние. ps. намудрил |