Форум: "Начинающим";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];
ВнизВключение в исполняемый файл других файлов. Найти похожие ветки
← →
AlexanderMS © (2007-01-12 17:56) [0]Возникла необходимость в целях защиты включить файл (для регулярной работы программы с ним) в исполняемый файл, исключив возможность внесения изменений. Моя программа универсальна, и, по сути, может работать с файлом через команду вроде "Открыть". Но потребовалось сделать "личную" программу только для данного файла, и лишний файл на диске будет ни к чему. Поэтому нужно включить этот файл в exe-файл программы.
Как это сделать? И как потом обращаться ко включённому файлу?
← →
Array © (2007-01-12 18:01) [1]ресурсы, ищите информацию про ресурсы и работу с ними
← →
kaZaNoVa © (2007-01-12 18:13) [2]AlexanderMS © (12.01.07 17:56)
тебе его запускать надо будет?
← →
kaZaNoVa © (2007-01-12 18:13) [3]или скрывать?
← →
AlexanderMS © (2007-01-12 18:15) [4]
> kaZaNoVa © (12.01.07 18:13) [2]-[3]
Да, скрывать. И читать из него. Но не записывать.
← →
kaZaNoVa © (2007-01-12 18:20) [5]AlexanderMS © (12.01.07 18:15) [4]
а зачем тебе файл? можешь просто сделать массив (of char) и будет тебе файл в константе .....
(некоторые "недальновидные" антивирусы могут посчитать такое за вирус ..( )
← →
kaZaNoVa © (2007-01-12 18:21) [6]Пример:
const
DumpData : array[1..Delta] of Byte = (
77, 90, 80, 0, 2, 0, 0, 0, 4, 0, 15, 0, 255, 255, 0, 0 );
← →
AlexanderMS © (2007-01-12 18:24) [7]
> а зачем тебе файл? можешь просто сделать массив (of char)
> и будет тебе файл в константе .....
Ага, и пять килобайт прописывать. А потом ещё с чтением мучиться...
См. [0].
> Моя программа универсальна, и, по сути, может работать с
> файлом через команду вроде "Открыть". Но потребовалось сделать
> "личную" программу только для данного файла, и лишний файл
> на диске будет ни к чему. Поэтому нужно включить этот файл
> в exe-файл программы.
← →
Anatoly Podgoretsky © (2007-01-12 19:25) [8]> AlexanderMS (12.01.2007 18:24:07) [7]
С чтением мучаться, если ресурсы, а если контантный массив, то откуда возьмется мучение.
← →
kaZaNoVa © (2007-01-12 21:41) [9]AlexanderMS © (12.01.07 18:24) [7]
Ага, и пять килобайт прописывать. А потом ещё с чтением мучиться...
неприпишется .) да и всегда UPX пожать можно ..
пример:{ ################################################ }
{ # # }
{ # Simple File_to_Array dumper by Dr.Golova # }
{ # mailto: dr.golova@reversing.net # }
{ # # }
{ ################################################ }
{$WARNINGS OFF}
program dll_dump;
{$APPTYPE CONSOLE}
var
F1 : File;
F2 : Text;
I : Integer;
S : String;
Data : PChar;
begin
UseInputOutput;
Writeln(#13#10"Simple File_to_Array dumper by Dr.Golova...");
if ParamCount < 1 then begin
Writeln("Usage : dll_dump.exe <source_file.dll> <destination_file>");
Writeln("Example : dll_dump.exe test_dll.dll dumpdata.inc");
Readln;
Halt(1);
end;
try
Assign(F1, ParamStr(1));
if ParamCount = 1 then
Assign(F2,ParamStr(1)+".inc")
else
Assign(F2, ParamStr(2));
Reset(F1, 1);
Rewrite(F2);
GetMem(Data, FileSize(F1));
BlockRead(F1, Data^, FileSize(F1));
Str(FileSize(F1), S);
WriteLn(F2, "const"#13#10"Delta="+s+";"#13#10" DumpData : array[1..Delta] of Byte = ("#13#10);
Write(F2, " ");
if FileSize(F1) > 0 then
for I := 1 to FileSize(F1) do begin
Write(F2, Byte(Data[I-1]):3);
if I < FileSize(F1) then Write(F2, ", ");
if I mod 15 = 0 then Write(F2, #13#10" ");
end;
Write(F2, " );");
FreeMem(Data, FileSize(F1));
Close(F1);
Close(F2);
except
Writeln("Some Fatal Error... Sorry...");
Halt(2);
end;
Writeln("All Done..."#13#10);
end.
← →
GrayFace © (2007-01-13 02:50) [10]С ресурсами тоже все просто. Только любой желающий сможет достать твой файл из ресурсов.
← →
vain © (2007-01-13 12:36) [11]
> GrayFace © (13.01.07 02:50) [10]
>
> С ресурсами тоже все просто. Только любой желающий сможет
> достать твой файл из ресурсов.
Ресурсы, ASPack.
← →
AlexanderMS © (2007-01-13 15:37) [12]
> kaZaNoVa © (12.01.07 21:41) [9]
Спасибо.
Хорошо, допустим, у меня файл в константном массиве (решил, что так лучше). "Внешний" файл программа читает с помощью TFileStream. А как читать из массива? Ведь не переписывать же функцию чтения? Может, как-нибудь можно связать массив с TFileStream или TMemoryStream.
← →
Anatoly Podgoretsky © (2007-01-13 16:41) [13]> AlexanderMS (13.01.2007 15:37:12) [12]
Зачем читать, оно уже прочитано, просто используй.
← →
AlexanderMS © (2007-01-13 17:30) [14]
> Зачем читать, оно уже прочитано, просто используй.
Как прочитано? Не так, как мне нужно. И использовать я так не могу. Нужно прочитать, к примеру, длину i-ой строки, потом саму строку, потом ещё много всего.
← →
koha © (2007-01-13 19:33) [15]Вот ранне обсуждавшееся ветка на тему Модуль Compress.pas
http://delphimaster.net/view/2-1168212195/
- здесь функции по извлечению запокованных и присоедененных ресурсов.
- Ппроцесс такой: файл пакуешь функцией FunctionCompressFile(InpFile: String; OutFile: String; N: Integer): boolean;
затем запакованный файл сомпилишь через brcc32.exe ( вкомплекте с делфи идет) присоеденяешь ресурс к проекту и присоеденяешь мой модуль Compress.pas затем в коде программы используешь проседуру для извлеченияFunction DecompressResToFile(ResName: String; ResType: PChar; OutFile: String): Boolean;
- если необходимо могу заново поместить модуль на форуме или выслать по мылу. тот что обсуждался не доработан, но там и все написано, что нужно.
← →
Anatoly Podgoretsky © (2007-01-13 19:33) [16]> AlexanderMS (13.01.2007 17:30:14) [14]
Ознакомься, что такое массивы и в части как они реализованы в Дельфи.
← →
GrayFace © (2007-01-27 08:29) [17]AlexanderMS © (13.01.07 15:37) [12]
Может, как-нибудь можно связать массив с TFileStream или TMemoryStream.
Можно.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.034 c