PDA

Просмотр полной версии : *.exe в hex и обратно?[need help]


cheater_man
12.02.2010, 19:29
Имеется *.exe. Его нужно запихнуть в исходник проги (я использую C#).И потом его создать, тоесть тело этого exe должно лежать в компилируемом exe'шнике.
Делаю я это так:
1. Открываю собственно этот *.exe в WinHex.
2. Сохраняю в hex.
Получается что-то вроде

\x4D\x5A\x99\x01\... бла.. бла... бла...

3.Пихаю эту штуку в исходник проги, как string

public string hex = " \x4D\x5A\x99\x01\... бла.. бла... бла... ";

4. Записываю в файл с помощью StreamWriter

....
path = @"D:\hex_to_exe.exe";
StreamWriter sw = new StreamWriter(path);
sw.WriteLine(hex);
sw.Close();
....

Все отлично. Файл создан, но сам exe не работает, в cmd пишет что ошибка EXE файла.
Открываем exe созданный нами hex_to_exe.exe с помощью WinHex и видим

\x4D\x5A\xC2\x99\x01\xC3\x8F\x00\xC2\x89\x01\.....
size = 143 665 byte

смотрим оригинал

\x4D\x5A\x99\x01\xCF\x00\x89\x01\x80\x00\x40\.....
size = 105 881 byte

В чем проблема????? Никак разобраться немогу :( Помогите please!
Если есть возможность приведите исходники :)

mr.The
12.02.2010, 19:38
Ага, было подобное. Решил как-то так:
string str = System.Text.Encoding.GetEncoding("iso-8859-5").GetString(...)

cheater_man
13.02.2010, 02:27
Ага, было подобное. Решил как-то так:
Программа неумещается в памяти??? Что за фигня???
делаю так:

public byte[] byt = {
0x4D, 0x5A, 0x99, 0x01............
};
path = @"D:\hex_to_exe.exe";
string str = Encoding.GetEncoding("iso-8859-5").GetString(byt);
System.IO.StreamWriter sw = new System.IO.StreamWriter(path);
sw.WriteLine(str);
sw.Close();

как бэ тоже самое

\x4D\x5A\xC2\x99\x01\xD0\xAF\x00\xC2\x89.......
вот откуда он берется... я в непонятках...

sn0w
13.02.2010, 14:13
используйте CreateFile/WriteFile из винапи

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

patcher
13.02.2010, 15:36
2cheater_man:
Я бы решил твою проблему по-другому. Если тебе нужно из своей программы создатьдругую, то можно просто создаваемый файл запихнуть в ресурсы главного софта, а по нажатию кнопки (или как там тебе нужно) извлечь его оттудова!

cheater_man
13.02.2010, 15:47
используйте CreateFile/WriteFile из винапи

кста вспомнил, кадата делал
в аттаче подобная тулза для генерации с хидера из файла
WinApi в C# гоморно :( Так что твоё предложение некатит, есть другой способ???

Я бы решил твою проблему по-другому. Если тебе нужно из своей программы создатьдругую, то можно просто создаваемый файл запихнуть в ресурсы главного софта, а по нажатию кнопки (или как там тебе нужно) извлечь его оттудова!

А я что по твоему делаю? Я тоже пихаю hex файла в исходник потом его сохраняю в файл! Тут пходу все дело в кодеровке?

patcher
13.02.2010, 16:30
Возможно мы не поняли друг друга так как хотелось бы, потому просто приведу пример на Delphi: http://www.188.ru/195062 .
А вот статья, как все это сделать на Делфи, думаю в С такое возможно тоже: http://articles.org.ru/cfaq/index.php?qid=186

patcher
13.02.2010, 16:32
Вот пример выдергивания файла изи ресурсов компиленой проги на С :
http://forum.sources.ru/index.php?showtopic=228575&hl=
а именно тот пост поможет создать ресурсы:
http://forum.sources.ru/index.php?showtopic=228575&view=findpost&p=1904033

Kaimi
13.02.2010, 16:41
Попробуй типа

byte[] byt = {0x4D, 0x5A, ....};
FileStream stream = new FileStream("C:\\file.exe", FileMode.Create);
BinaryWriter w = new BinaryWriter(stream);
w.Write(byt);
w.Close();

cheater_man
13.02.2010, 19:53
Попробуй типа

byte[] byt = {0x4D, 0x5A, ....};
FileStream stream = new FileStream("C:\\file.exe", FileMode.Create);
BinaryWriter w = new BinaryWriter(stream);
w.Write(byt);
w.Close();

Кaimi ты гений!11адын адын!!!11!! :)
CLOSED :)