Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Проблема с иконками(delphi) |

24.05.2007, 13:29
|
|
Познающий
Регистрация: 29.10.2006
Сообщений: 74
Провел на форуме: 1980313
Репутация:
65
|
|
Проблема с иконками(delphi)
Есть код самораспространяющегося вируса. Т.е. вирь сканит диск на исполняемые фалы, и джойнит к ним свой код, но есть проблема, после склеивания пропадают значки зараженных файлов. можно как-то этого избежать? или вернуть их обратно?
|
|
|

24.05.2007, 14:54
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Как я понял - эта зараза не заражает файлы, а просто крепит копирует себя с именем другой проги, а потом присоединяет её к себе?
Если так, то выход примерно такой - Динамически изменять ресурсы.
Скорее всего просто прога не имеет значка вообще, а то что конектится за ним, - это уже не берется во внимание. Исправить проблему можно так:
В прогу вмантируешь пустую иконку. И при заражении просто нужно у заражаемой проги выдрать иконку и вмантировать её к себе.
С виду всё тяжко получается, но на деле всё нет так уж и страшно.
т.к. Выдрать иконку из чужой проги, проще простого.
Код:
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. Он умеет заменять, удалять и добавлять ресурсы
|
|
|

24.05.2007, 15:42
|
|
Познающий
Регистрация: 29.10.2006
Сообщений: 74
Провел на форуме: 1980313
Репутация:
65
|
|
Ок, спасибо за помощь.
|
|
|

24.05.2007, 19:19
|
|
Members of Antichat - Level 5
Регистрация: 04.01.2007
Сообщений: 176
Провел на форуме: 17964969
Репутация:
1362
|
|
Вот пример, который возможно также как-то поможет:
Скачать, 164 Кб.
Там реализовано использование следующей процедуры:
procedure SetAppIcon(FileName,IconFile,ResName:string);
где FileName - имя файла программы, иконку которого меняем; IconFile - файл иконки *.ico, на которую меняем; ResName - имя ресурса иконки в приложении, например у прог на Делфи обычно 'MAINICON'.
Последний раз редактировалось begin end; 24.05.2007 в 19:27..
|
|
|

24.05.2007, 19:33
|
|
Познающий
Регистрация: 29.10.2006
Сообщений: 74
Провел на форуме: 1980313
Репутация:
65
|
|
спасибо за помощь, только есть вопрос: содержимое иконки можно брать не из файла, а из переменной из кода выше?
|
|
|

24.05.2007, 19:56
|
|
Members of Antichat - Level 5
Регистрация: 04.01.2007
Сообщений: 176
Провел на форуме: 17964969
Репутация:
1362
|
|
Иконку можно брать только из файла. Другого способа смены иконки я пока не встречал. Конечно нам необязательно сначала сохранять иконку в файл а потом читать и менять. В предложенный мной код нужно добавить часть для считывания иконки из файла, т.е. получить не HICON, как в коде от slesh, а именно саму иконку. Но готового кода пока нет (мне бы тож не помешал для джоинера) - сам пробую, ищу...
|
|
|

25.05.2007, 14:28
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Народ. А кто вам не дает сохранить эту иконку в файл?
|
|
|

29.05.2007, 08:12
|
|
Познающий
Регистрация: 17.03.2007
Сообщений: 98
Провел на форуме: 193152
Репутация:
45
|
|
Сообщение от slesh
Код:
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;
Как тогда не выводить на экран, а сохранять в файл?
С madshi разобрался, но это ещё 20 кило прироста к файлу... Одно радует... при работес madshi не надо предварительно запихивать иконку в файл. Чисто вставить иконку, а он сам делает что надо.
Последний раз редактировалось 2pick; 29.05.2007 в 08:15..
|
|
|

29.05.2007, 08:42
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Как тогда не выводить на экран, а сохранять в файл?
Например так:
Код:
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;
Ток нафига тебе в файл? Вроде договорились к себе в ресурс пихать...
|
|
|

23.06.2007, 13:12
|
|
Познающий
Регистрация: 17.03.2007
Сообщений: 98
Провел на форуме: 193152
Репутация:
45
|
|
сохранять всё равно приходится в файл. мэдши не может выдрать иконку...
А с Ticon это надо ещё модуль icon (или типа того или graph ли, не важно) цеплять... он ещё 100 кило придаёт объему
Последний раз редактировалось 2pick; 23.06.2007 в 13:14..
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|