Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Добавить данные в EXE файл и получить их

Delphi , Программа и Интерфейс , EXE файл

Добавить данные в EXE файл и получить их

Решил хакер блины печь. Первый блин у него вышел, как водится, комом. А второй - экзешником.


function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var 
  aStream: TFileStream; 
  iSize: Integer; 
begin 
  Result := False; 
  if not FileExists(AFileName) then 
    Exit; 
  try 
    aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite); 
    MemoryStream.Seek(0, soFromBeginning); 
    // seek to end of File 
    // ans Ende der Datei Seeken 
    aStream.Seek(0, soFromEnd); 
    // copy data from MemoryStream 
    // Daten vom MemoryStream kopieren 
    aStream.CopyFrom(MemoryStream, 0); 
    // save Stream-Size 
    // die Streamgro?e speichern 
    iSize := MemoryStream.Size + SizeOf(Integer); 
    aStream.Write(iSize, SizeOf(iSize)); 
  finally 
    aStream.Free; 
  end; 
  Result := True; 
end; 

function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean; 
var 
  aStream: TFileStream; 
  iSize: Integer; 
begin
  Result := False; 
  if not FileExists(AFileName) then 
    Exit; 

  try 
    aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); 
    // seek to position where Stream-Size is saved 
    // zur Position seeken wo Streamgro?e gespeichert 
    aStream.Seek(-SizeOf(Integer), soFromEnd); 
    aStream.Read(iSize, SizeOf(iSize)); 
    if iSize > aStream.Size then 
    begin 
      aStream.Free; 
      Exit; 
    end; 
    // seek to position where data is saved 
    // zur Position seeken an der die Daten abgelegt sind 
    aStream.Seek(-iSize, soFromEnd); 
    MemoryStream.SetSize(iSize - SizeOf(Integer)); 
    MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize)); 
    MemoryStream.Seek(0, soFromBeginning); 
  finally 
    aStream.Free; 
  end; 
  Result := True; 
end; 

procedure TForm1.SaveClick(Sender: TObject); 
var 
  aStream: TMemoryStream; 
begin
  aStream := TMemoryStream.Create; 
  Memo1.Lines.SaveToStream(aStream); 
  AttachToFile('Test.exe', aStream); 
  aStream.Free; 
end; 

procedure TForm1.LoadClick(Sender: TObject); 
var 
  aStream: TMemoryStream; 
begin 
  aStream := TMemoryStream.Create; 
  LoadFromFile('Test.exe', aStream); 
  Memo1.Lines.LoadFromStream(aStream); 
  aStream.Free; 
end; 

{ 

Note: 

You can't proof whether additional data is attached or not. 
To reach this, you would have to create a checksumm of the 
MemoryStream and attach it.

}

Программный код на языке Delphi, который предназначен для прикрепления данных к исполняемому файлу (EXE) и загрузки этих данных из EXE-файла.

Функция AttachToFile принимает два параметра: AFileName, имя EXE-файла, и MemoryStream, содержащий данные для прикрепления. Функция проверяет, существует ли указанный файл. Если файл существует, она открывает его в режиме записи (fmOpenWrite or fmShareDenyWrite) с помощью объекта TFileStream, перемещается к концу файла, копирует данные из MemoryStream в файловый поток и записывает размер MemoryStream в конец файла.

Функция LoadFromFile принимает два параметра: AFileName, имя EXE-файла, и MemoryStream, который будет содержать загруженные данные. Функция проверяет, существует ли указанный файл. Если файл существует, она открывает его в режиме чтения (fmOpenRead or fmShareDenyWrite) с помощью объекта TFileStream, перемещается к позиции, где хранится размер прикрепленных данных (в конце файла), читает размер и затем перемещается к началу прикрепленных данных. Затем она устанавливает размер MemoryStream в прочитанный размер минус размер целого числа (которое было записано ранее) и копирует данные из файлового потока в MemoryStream.

Процедуры SaveClick и LoadClick демонстрируют, как использовать эти функции. Процедура SaveClick сохраняет текст в мемо-окне (Memo1) в память, прикрепляет эти данные к EXE-файлу с именем 'Test.exe' и затем освобождает память. Процедура LoadClick загружает прикрепленные данные из EXE-файла 'Test.exe' в новый памятный поток, загружает эти данные в мемо-окно (Memo1) и затем освобождает память.

Обратите внимание, что нельзя доказать, прикреплены ли данные к файлу без использования внешнего инструмента или другого программного обеспечения. Для проверки прикрепления данных необходимо создать контрольную сумму MemoryStream и прикрепить ее вместе с фактическими данными.

В улучшенной версии кода добавлены комментарии, чтобы объяснить цель каждой функции. Также были изменены имена переменных для лучшей читаемости, а объект TFileStream был заключен в блок try-finally, чтобы обеспечить его правильное освобождение, независимо от возникновения исключения. Были удалены ненужные скобки вокруг условия в операторе if. Код был реформатирован для соответствия конвенциям кодирования Delphi.

Добавить данные в EXE-файл и получить их с помощью функций AttachToFile и LoadFromFile.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: EXE файл ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-02 00:13:27/0.0032389163970947/0