Есть код самораспространяющегося вируса. Т.е. вирь сканит диск на исполняемые фалы, и джойнит к ним свой код, но есть проблема, после склеивания пропадают значки зараженных файлов. можно как-то этого избежать? или вернуть их обратно?
Как я понял - эта зараза не заражает файлы, а просто крепит копирует себя с именем другой проги, а потом присоединяет её к себе? Если так, то выход примерно такой - Динамически изменять ресурсы. Скорее всего просто прога не имеет значка вообще, а то что конектится за ним, - это уже не берется во внимание. Исправить проблему можно так: В прогу вмантируешь пустую иконку. И при заражении просто нужно у заражаемой проги выдрать иконку и вмантировать её к себе. С виду всё тяжко получается, но на деле всё нет так уж и страшно. т.к. Выдрать иконку из чужой проги, проще простого. Code: uses ShellApi; procedure TForm1.Button1Click(Sender: TObject); var IconIndex: word; h: hIcon; begin IconIndex := 0; h:= ExtractIcon(hinstance,'c:\1.exe',IconIndex); DrawIcon(Form1.Canvas.Handle, 10, 10, h); end; Выдирет иконку и нарисует её на экране. Для того чтобы засунуть иконку в файл есть парочку сособов: 1) - Разбираем PE заголовок Выдергиваем от туда адрес ресурсов - Разбираем талицу ресурсов. - Находим ресурс иконки и заменяем его на свой 2) Я слыхал про проект madshi. ТАм есть модуль - MadRes. Он умеет заменять, удалять и добавлять ресурсы
Вот пример, который возможно также как-то поможет: Скачать, 164 Кб. Там реализовано использование следующей процедуры: procedure SetAppIcon(FileName,IconFile,ResName:string); где FileName - имя файла программы, иконку которого меняем; IconFile - файл иконки *.ico, на которую меняем; ResName - имя ресурса иконки в приложении, например у прог на Делфи обычно 'MAINICON'.
спасибо за помощь, только есть вопрос: содержимое иконки можно брать не из файла, а из переменной из кода выше?
Иконку можно брать только из файла. Другого способа смены иконки я пока не встречал. Конечно нам необязательно сначала сохранять иконку в файл а потом читать и менять. В предложенный мной код нужно добавить часть для считывания иконки из файла, т.е. получить не HICON, как в коде от slesh, а именно саму иконку. Но готового кода пока нет (мне бы тож не помешал для джоинера) - сам пробую, ищу...
Как тогда не выводить на экран, а сохранять в файл? С madshi разобрался, но это ещё 20 кило прироста к файлу... Одно радует... при работес madshi не надо предварительно запихивать иконку в файл. Чисто вставить иконку, а он сам делает что надо.
Например так: Code: procedure TForm1.Button1Click(Sender: TObject); var IconIndex: word; Icon: Ticon; begin IconIndex := 0; Icon := Ticon.Create; Icon.Handle := ExtractIcon(hinstance,'C:\1.exe',IconIndex); Icon.SaveToFile('C:\1.ico'); Icon.Free; end; Ток нафига тебе в файл? Вроде договорились к себе в ресурс пихать...
сохранять всё равно приходится в файл. мэдши не может выдрать иконку... А с Ticon это надо ещё модуль icon (или типа того или graph ли, не важно) цеплять... он ещё 100 кило придаёт объему