Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

замена иконки в ехе файле

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> замена иконки в ехе файле
Имя
Сообщение << Старые топики   Новые топики >>
замена иконки в ехе файле - 2010-02-23 16:39:47.380000   
ZnakVoprosa

Сообщений: 37
Оценки: 0
Присоединился: 2010-01-31 19:36:50.236666
Автор: CAT или на форуме ZnakVoprosa

Прога для замены ехе-шникам иконок она заменяет все ехе сделанные делфи но не все простые ехе исли кто поможет то спасибо и еще она некоторые иконки с ехе вытягивает в плохом качестве и поетому не всегда (скорее всего никогда) не заменяет

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,shellapi, ExtCtrls, ComCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label2: TLabel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
OpenDialog1: TOpenDialog;
Label3: TLabel;
Label4: TLabel;
Image1: TImage;
Image2: TImage;
Edit3: TEdit;
Label5: TLabel;
procedure saveico(s:string);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
f1:tfilestream; //поток для ехе
f2:tfilestream; //поток для новой иконки
f3:tfilestream; //поток для старой иконки
i:integer;
ind:integer; //индекс иконки в ехе
size:cardinal; //размер ехе в байтах
a:byte; //ну ето просто байт :)
k:integer; //для подщета байт
j:integer;
first:array [0..511] of byte; //масив байт для поиска
index:integer;
startin:integer;
koef:integer; //коефициент

implementation

uses Unit2;

{$R *.dfm}
procedure tform1.saveico(s:string); //заберём иконку у ехе-шника
var
large:hicon;
smal:hicon;
icon:ticon;
begin
shellapi.ExtractIconEx(pchar(s),ind,large,smal,1);
icon:=ticon.Create;
icon.Handle:=large;
icon.SaveToFile('OldIcon.ico'); //сохраним иконку как файл
f3:=tfilestream.Create('OldIcon.ico',fmopenreadwrite);
f3.Seek(126,sofrombeginning);
for i:=0 to 511 do begin
f3.Read(first,sizeof(byte)); //запишем иконку в мосив
end; // от 126 до 511 потомучто байты
f3.Destroy; //от 0 до 125 и от 511 до конца(766)
end; //у всех иконок почти одинаковы

procedure TForm1.Button1Click(Sender: TObject);
begin
koef:=strtoint(edit3.Text); //коефицыент схожости
saveico(edit1.Text);

f1:=tfilestream.Create(edit1.Text,fmopenreadwrite);//откроем ехе
size:=getfilesize(f1.Handle,nil); //узнаем его размер

if radiobutton1.Checked=true then //ето надо для того чтобы знать откудо начинать
startin:=size-round(size/8); //с последней 8-й части
if radiobutton2.Checked=true then
startin:=0; //с нуля

f1.Seek(startin,sofrombeginning); //ну и отматываем куда надо

f2:=tfilestream.Create(edit2.Text,fmopenreadwrite); //открываем иконку которую
f2.Seek(0,sofrombeginning); //надо вставить в ехе

k:=0;

i:=startin;
while i&lt; size-511 do begin //начало цыкла
f1.Read(a,sizeof(a));

label1.Caption:='поиск иконки в exe файле '+inttostr(round(i/(size-511)*100))+'%';
application.ProcessMessages;

if a=first[0] then begin //если байт равен первому значению масива
for j:=1 to 511 do begin //тогда проверить не равен ли следуюший байт
f1.Read(a,sizeof(a)); // второму значению масива и т.д
if a=first[j] then
k:=k+1; //для подщёта скоко байт подошло
end;
f1.Seek(i,sofrombeginning);
end;

if k&gt;=round((511/100)*koef) then begin //если данное количество похожих байт
index:=i-126-1; // удолитворяет запрсу то нашли чо искали
i:=size;
end
else
k:=0;


i:=i+1;
end;

if index&gt;0 then begin //ну а если чото нашло то новой
f1.Seek(index,sofrombeginning); //надо старую иконку заменить
f2.Seek(0,sofrombeginning);
for i:=0 to 765 do begin
f2.Read(a,sizeof(a));
f1.Write(a,sizeof(a));
label1.Caption:='Замена иконки';
application.ProcessMessages;
end;
end;

if index&lt;&gt;0 then begin
label1.Caption:='Иконка заменена (Hacked By CAT) :) ';
end;
if index=0 then
label1.Caption:='Не нашол иконку';

f1.Destroy;
f2.Destroy;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
l,s:hicon;
ic:ticon;
begin
form2.ShowModal; //открывается модальная форма для указания индекса иконки которую надо искать
ind:=strtoint(form2.edit3.text); //тут открывается ехе
if opendialog1.Execute=true then
begin
edit1.Text:=opendialog1.FileName;
shellapi.ExtractIconEx(pchar(opendialog1.FileName),ind,l,s,1);
if l=0 then
showmessage('Иконки с таким индексом не сушествует');
ic:=ticon.create();
ic.Handle:=l;
image1.Picture.Icon:=ic;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var ic:ticon;
begin
if opendialog1.Execute=true then //тут открывается новая иконка
begin
edit2.Text:=opendialog1.FileName;
ic:=ticon.create();
ic.LoadFromFile(opendialog1.FileName);
image2.Picture.Icon:=ic;
end;
end;

end.







ну надеюсь как работает понятно.
Если не понятно то объясню

А если чо то могу дать исходник :)
Post #: 1
RE: замена иконки в ехе файле - 2010-02-23 16:43:39.260000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Лучше бы ты пользовался тэгами code при оформлении сообщений.

P.S. какая практическая польза? Научился с ресурсами работать?
Post #: 2
RE: замена иконки в ехе файле - 2010-02-24 15:29:44.240000   
VAN32

Сообщений: 20
Оценки: 0
Присоединился: 2009-11-06 20:37:37.856666
Выложи исходник
Post #: 3
RE: замена иконки в ехе файле - 2010-02-24 15:39:06.933333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
ТС выложил исходник в первом сообщении.
Post #: 4
RE: замена иконки в ехе файле - 2010-02-24 16:26:24.253333   
ZnakVoprosa

Сообщений: 37
Оценки: 0
Присоединился: 2010-01-31 19:36:50.236666
вот ссылка на исходник
http://narod.ru/disk/18208607000/ish.rar.html

Post #: 5
RE: замена иконки в ехе файле - 2010-02-28 01:28:48.410000   
MyPaBeuHuk

Сообщений: 3
Оценки: 0
Присоединился: 2010-02-28 00:06:50.913333
юзани этот юнит.
залезешь внутрь, сам все поймешь.
http://slil.ru/28717652 (rar 1.4 кб)
Post #: 6
RE: замена иконки в ехе файле - 2010-03-01 16:35:16.480000   
ZnakVoprosa

Сообщений: 37
Оценки: 0
Присоединился: 2010-01-31 19:36:50.236666

quote:

ORIGINAL: MyPaBeuHuk

юзани этот юнит.
залезешь внутрь, сам все поймешь.
http://slil.ru/28717652 (rar 1.4 кб)


а ето твой код?

и чо сложно написать коментарии, а то в чужом коде долго разбиратся
Post #: 7
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> замена иконки в ехе файле







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.