WOLF 2018 Ответов: 3

Как сделать самораспаковывающийся архив с помощью C#


Я пытаюсь получить байты из файла, затем поместить их в программу, а затем преобразовать ее

процесс

1. строка с кодом байта.
2. затем преобразуйте его в exe-файл.

Пожалуйста, помните, что файл должен быть самодостаточным без файла orgnal.

Что я уже пробовал:

System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
string str = enc.GetString(fileBytes);
streamWriter f2 = new StreamWriter("bytes.txt");
f2.Write(str);
f2.Close();
// I try to make it a txt file so that i could copy it in to a string
string bit = File.ReadAllText("bytes.txt");
byte[] array = Encoding.ASCII.GetBytes(bit);
File.WriteAllBytes("happy.exe", array);
// then i tried to make it a file again and that is where i falled.

Richard MacCutchan

Откуда берутся исходные байты? Если они не являются фактическим содержимым из исполняемого файла .NET, то ваша работа напрасна, как и все ваши преобразования в строки и ASCII-байты.

WOLF 2018

они исходят из exe файла

Patrice T

Вам нужно предоставить гораздо больше деталей.
Привести пример.

WOLF 2018

я использую C# exe и пытаюсь превратить его в строку, которую я могу использовать в других программах, которые я делаю. файл называется bit.exe ... у них не так уж много информации, что ли

3 Ответов

Рейтинг:
14

OriginalGriff

Не читать его как текст: прочитать его непосредственно байт:

byte[] data = File.ReadAllBytes(pathToFile);
File.WriteAllBytes(pathToExe, data);

Данные в ASCII могут быть всего 7 бит, и разные системы будут интерпретировать некоторые из них по-разному (например, \n и \r "конденсируются" при их чтении), поэтому вы можете потерять важную информацию, когда будете рассматривать ее как текст.


WOLF 2018

я попробую сделать это сейчас

WOLF 2018

я не могу потому что файл в котором находятся байты это текст и он не позволяет мне читать его как байты

OriginalGriff

Тот... гм ... оказывается, это не так.
Файлы-это файлы: все файлы представляют собой последовательность байтов и могут быть прочитаны как таковые, все остальное-это "интерпретация" байтов в определенном формате, поэтому чтение байтовых данных в виде текста - плохая идея-интерпретация приводит к изменению данных. Система не будет препятствовать вам вообще читать файл в байтах (при условии, что у вас есть соответствующие разрешения на чтение файла и папки вообще).

Используйте шестнадцатеричный редактор и посмотрите на "текстовый" файл и посмотрите, что именно он содержит.

OriginalGriff

И это не текст - это двоичные данные, байтовые данные. Прочтите это как текст, и вы потеряете большую часть информации - и он вообще не будет работать как EXE-файл.

Кстати: это не шестнадцатеричный редактор: это то, что дает вам шестнадцатеричный редактор:
https://i.stack.imgur.com/u9007.png
Видите, насколько, гораздо более читабельно это?

Рейтинг:
1

Gerry Schmitz

Я почти уверен, что ОС относится к вам как к "вирусу" (создавая мусорные exe-файлы).


WOLF 2018

мой антивирус отключен. так что это не тот случай

Рейтинг:
1

Patrice T

Цитата:
я использую C# exe и пытаюсь превратить его в строку, которую я могу использовать в других программах, которые я делаю. файл называется bit.exe ... у них не так уж много информации, что ли

Если я правильно понимаю, вы хотите встроить случайный exe-файл в свою программу и, вероятно, молча запустить его как свой собственный.
Даже если это законно и справедливо, это будет трудная задача, и вам понадобятся глубокие знания об ОС, потому что файл на жестком диске-это не то, что запускается в памяти, ОС вносит в него изменения, и вам придется внести эти изменения, чтобы запустить его.
Цитата:
byte[] array = Encoding.ASCII.GetBytes(bit);

В любом случае, считывайте байты, записывайте байты, никогда не делайте преобразования.


WOLF 2018

да, но я не хочу, чтобы он работал бесшумно. Я просто подумал, что если я могу получить байты в строку, то я просматриваю байты и помещаю их в другую программу, чтобы она могла использовать байты для создания файла снова. Я знаю, что это звучит как ум F***, но я думаю, что это можно сделать, или вы можете компилировать код C# из файла, чтобы сделать exe-файл без комплиера. (извините за мою орфографию.)

Patrice T

Вы пытаетесь сделать самораспаковывающийся архив ?

WOLF 2018

да. Я хочу, чтобы моя программа проверяла, есть ли файл esists, а если нет, то я хочу, чтобы он сделал их так, чтобы мне не нужно было их скачивать.

Patrice T

Это очень важно сказать.

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

WOLF 2018

хорошо, но как бы я это сделал?