Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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/
- здесь функции по извлечению запокованных и присоедененных ресурсов.
- Ппроцесс такой: файл пакуешь функцией Function
CompressFile(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.048 c
2-1169555705
Light-blr
2007-01-23 15:35
2007.02.11
Как удалить картинку из Image?


2-1169561451
FIL-23
2007-01-23 17:10
2007.02.11
перевод из двоичного в десятичный?


15-1168916009
Юнит
2007-01-16 05:53
2007.02.11
Как прописать {$DEFINE UseBox}, чтобы она была видна во всех юнит


2-1169823584
loword2
2007-01-26 17:59
2007.02.11
Запись в textfile


4-1159303917
Dmitry_177
2006-09-27 00:51
2007.02.11
Борландовские сообщения CM_MOUSEENTER и CM_MOUSELEAVE в API





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский