Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
HemmigoR
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 1
#1

Считывание/запись машинного кода C++ - C++

05.06.2016, 21:54. Просмотров 264. Ответов 0

Итак, задача состоит в следующем:
Необходимо считать код из бинарного (.bin) и(или) исполняемого файла (.exe). Преимущественно из исполняемого, но если будет найдено решение для бинарного - уже хорошо, так как суть уже одна и та же. Насколько я понимаю, .exe - тот же самый бинарный файл, только с дописанным заголовком.
За основу моей программы был взят код с данного форума, кстати, из темы с похожей проблемой. Но решения там так и не привели, поэтому я создал новую тему. Кусок кода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
private: System::Void btnOpen_Click(System::Object^  sender, System::EventArgs^  e) {
                 if(this->openFileDialog->ShowDialog()==
                     System::Windows::Forms::DialogResult::OK) {
                         char fileName[1024];
                         for(int i = 0; i < openFileDialog->FileName->Length; i++)
                             fileName[i] = openFileDialog->FileName[i];
                         fileName[openFileDialog->FileName->Length]='\0';
                         int buffer; 
                         int cnt = 0; 
                         FILE *f;
                         FILE *f1;
                         f = fopen (fileName,"rb");  
                         if (!f) 
                         {
                             printf ("Cannot open this file\n");
                         }
                         else 
                         {
                             f1 = fopen ("tmp.bin","w"); // возможно изменить на tmp.exe?
                             if (!f1) 
                             {
                                 printf ("File-result hasn't created \n");
                             }  
                             else 
                             {
                                 do 
                                 {
                                     buffer = fgetc (f);
                                     if (buffer!=EOF) 
                                     {
                                         fprintf (f1, "%-0.2x%c", buffer, ' ');
                                     }
                                     cnt++;
                                     if (!(cnt%16)) 
                                         fputc (10, f1);
                                 }
                                 while (buffer!= EOF);
                                 fseek (f1, 1, SEEK_CUR);
                                 fscanf (f1, "%x", &buffer);
                                 fclose (f1);
                             }
                         }
                         if (f) 
                         {
                             fclose (f);
                         }
                         this->Refresh();
                 }
             }
Итак, в чем проблема. Проблема состоит в том, что при записи в новый файл, считанные байты программа записывает в виде текста. Соответственно, если открыть полученный файл в Hex-редакторе, можно увидеть код, совершенно различающийся с исходным бинарным файлом.
пример
Есть бинарный файл: 4a 00 ff. Данная программа считывает этот код и пишет его в новый бинарник в качестве текста. Открываем бинарник: 55 0a 1E. Нужно было получить в новом бинарном файле: 4a 00 ff.

Зачем всё это нужно (для общего понимания проблемы).
Программа должна содержать функцию "копирования" исполняемого файла, при чём этот процесс надо сделать "вручную", то есть побитово/побайтово занести код в буфер. Это нужно для дальнейшего изменения кода (например, шифрования), но так же должна быть функция дешифровки и последующего запуска. Поэтому важно чтобы буфер содержал идентичный начальному файлу машинный код. Вопрос, как это сделать.

PS. Приведенный мной код работает. Он считывает из любого файла (bin или exe) и пишет весь код как ТЕКСТ в новый файл.
P.S.S Искренне прошу прощения, если что-то написал/оформил не так. Это моё первое обращение на форум, никогда не был участником форумов. Лишь изредка во время поиска информации пробегал по темам.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2016, 21:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание/запись машинного кода C++ (C++):

Чтение машинного кода exe файла - C++
Я пытаюсь прочитать машинный код своего консольного Win32 приложения, написанного в MS Visual Studio: ifstream exeFile(filename,...

Запись и считывание в/из ФАЙЛА - C++
Есть программа По вычислению СЛАУ методом Гаусса. Помогите сделать так, что бы можно было считывать и записывать в ФАЙЛ: СЛАУ и его...

Считывание и запись в файл - C++
В Си. В файле data.txt даны квадратная матрица A и вектор X, соответствующих размерностей. Написать и протестировать функцию: а)...

Запись и считывание операторами << >> - C++
Ребят, прошу помочь. Нужно создать класс с 3мя полями. Имя, фамилия и номер работника. С помощью методов нужно обеспечить запись в файл и...

Считывание и запись в файл - C++
Короче пытаюсь считать из одного файла цифру и записать ее в другой файл На то что после // не обращайте внимания эт я для себя писал))) ...

считывание и запись в файл - C++
вот написал программу на C++ builder в консоли, считывающую два числа и записывающую в файл их сумму. но она не работает, помогите советом....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2016, 21:54
Привет! Вот еще темы с ответами:

Запись и считывание из файла - C++
Написал 2 метода, один из них запись в файл, а другой соответственно считывание из него. Как модифицировать код записи так, чтобы он в...

Считывание и запись в файл - C++
решил задачу на с, го её нужно перевести на с++. у меня возникли проблемы с считыванием и записью в файл. помогите пожалуйста! Вот код на...

Запись и считывание из файла - C++
Помогите пожалуйста с лабой. Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные...

Построчная запись и считывание из файла - C++
Пытаюсь разобраться - как работать с файлами в C++, элементарные вещи получаются, а вот чуть посложнее и всё.. ничего не выходит... Работал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru