Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 4
Регистрация: 04.10.2010
Сообщений: 115

Получить содержимое заголовка PE - файла

18.02.2013, 21:52. Показов 1728. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста при каком открытии файла заполняются структуры, описывающие заголовок исполняемого файла?

В общем как заполнить эти структуры, описанные в WinBase.h, чтобы можно было работать с ними: извлекать нужные значения?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2013, 21:52
Ответы с готовыми решениями:

Получить содержимое файла (картинки)
здравствуйте, я ламер в ас и флеше, возникла такая задача: создать swf объект, который бы мог скачивать рисунок с любого удаленного урл,...

Получить содержимое файла с удаленного сервера
Заранее извиняюсь если промазал с темой или тема повтор, однако поиском пользовался - ответа на свой вопрос не нашел. Уже второй день...

Получить содержимое файла из закрытой директории
Вот столкнулся с такой проблемой. На сервере в интернете етсь директория radmin, в которой расположен файл, скажем getdata.php. Директория...

11
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
18.02.2013, 22:06
как заполнить эти структуры
Сделать мэппинг в память, наложить структуру и получить нужные поля.

Вот здесь есть жуткая PE-библиотека в исходниках http://kaimi.ru/, и можете поискать что-либо более вменяемое просто по слову PELib
0
0 / 0 / 4
Регистрация: 04.10.2010
Сообщений: 115
18.02.2013, 22:09  [ТС]
Цитата Сообщение от gazlan Посмотреть сообщение
Сделать мэппинг в память, наложить структуру и получить нужные поля.

Вот здесь есть жуткая PE-библиотека в исходниках http://kaimi.ru/, и можете поискать что-либо более вменяемое просто по слову PELib
спасибо! значит структуры заполняет функция CreateFileMapping, и открывать файл нужно через CreateFile ?
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
18.02.2013, 23:02
У вас несколько преувеличенное представление о реальности.

Возьмите вот здесь http://gazlan.freetzi.com/limbo/shared/mmf.rar готовый класс для MemoryMappedFile (MMF).

Спроецировав файл в память, вы можете работать с ним, как с обычным массивом (OS возьмет на себя заботу о подкачке).

На этот массив байт вы накладываете собственную стуктуру (из WinBase.h, в данном случае) и используете готовые макросы от M$ для получения полей заголовка итд.

Например, через такой класс:

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
class PELib
{
   private:
 
      BYTE*                      _pMMF;
      bool                       _bValid;
      char                       _pszSectName[10];
      PIMAGE_DOS_HEADER          _pDosHeader;
      PIMAGE_NT_HEADERS          _pNTHeader;
 
   public:
 
               PELib();
      virtual ~PELib();
 
      bool                       Open(const BYTE* const pMMF);
      void                       Close();
      bool                       IsValid();
      int                        GetMaxSectionNum();
      DWORD                      GetDOSHeaderSize();
      DWORD                      GetGapSize();
      DWORD                      GetNTHeaderStart();
      DWORD                      GetImageBase();
      DWORD                      GetEntryPointVA();
      DWORD                      GetEntryPointOffset(int& riSectNum);
      DWORD                      OFS2VA(DWORD dwOfs);
      DWORD                      VA2OFS(DWORD dwVA);
      DWORD                      OFS2RVA(DWORD dwOfs);
      int                        GetEntryPointSectNum();
      const char* const          GetSectionName(int iSectNum);
      DWORD                      GetHeaderSize();
      PIMAGE_DOS_HEADER          GetDosHeader();
      PIMAGE_NT_HEADERS          GetNTHeader();
      PIMAGE_SECTION_HEADER      GetSection(int iSectNum);
      PIMAGE_SECTION_HEADER      GetFirstSection();
      PIMAGE_SECTION_HEADER      GetLastSection();  
      PIMAGE_SECTION_HEADER      GetSectionByVA(DWORD dwVA,int& iSectNum);
      PIMAGE_SECTION_HEADER      GetSectionByOffset(DWORD dwOfs,int& iSectNum);
      PIMAGE_SECTION_HEADER      GetSectStartVA(int iSectNum,DWORD& dwVA);
 
   private:
 
      void  Reset();         
};
И, для затравки - вам ведь интересно все сделать самому? - кусочек реализации:

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
bool PELib::Open(const BYTE* const pMMF)
{
   if (!pMMF)
   {
      return false;
   }
 
   _pMMF = (BYTE*)pMMF;
 
   _pDosHeader = (PIMAGE_DOS_HEADER)_pMMF;
 
   if (_pDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
   {
      return false;
   }
         
   _pNTHeader = MakePtr(PIMAGE_NT_HEADERS,_pDosHeader,_pDosHeader->e_lfanew);
 
   // First, verify that the e_lfanew field gave us a reasonable pointer, then verify the PE signature.
   if (IsBadReadPtr(_pNTHeader,sizeof(IMAGE_NT_HEADERS)) || _pNTHeader->Signature != IMAGE_NT_SIGNATURE)
   {
      return false;
   }
 
   // [url]http://msdn.microsoft.com/en-us/library/ms680313%28v=vs.85%29.aspx[/url]
   if ((_pNTHeader->FileHeader.Machine != IMAGE_FILE_MACHINE_I386)   &&    // 0x014C   // x86
       (_pNTHeader->FileHeader.Machine != IMAGE_FILE_MACHINE_IA64)   &&    // 0x0200   // Intel Itanium
       (_pNTHeader->FileHeader.Machine != IMAGE_FILE_MACHINE_AMD64))       // 0x8664   // x64
   {
      return false;
   }
 
   // [url]http://msdn.microsoft.com/en-us/library/ms680339%28v=vs.85%29.aspx[/url]
   if ((_pNTHeader->OptionalHeader.Magic != IMAGE_NT_OPTIONAL_HDR32_MAGIC) &&    // 0x010B   // The file is an executable image.
       (_pNTHeader->OptionalHeader.Magic != IMAGE_NT_OPTIONAL_HDR64_MAGIC) &&    // 0x020B   // The file is an executable image.
       (_pNTHeader->OptionalHeader.Magic != IMAGE_ROM_OPTIONAL_HDR_MAGIC))       // 0x0107   // The file is a ROM image.
   {
      return false;
   }
 
   _bValid = true;
 
    return true;
}
0
0 / 0 / 4
Регистрация: 04.10.2010
Сообщений: 115
18.02.2013, 23:12  [ТС]
без своего никак ... =)
я протектор, основанный на наномитах и обфускации, пытаюсь сделать, на дипломную работу
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
18.02.2013, 23:19
У kaimi по шагам в 10+ уроках расписано создание собственного пакера. Полюбопытствуйте :-)
0
0 / 0 / 4
Регистрация: 04.10.2010
Сообщений: 115
19.02.2013, 21:00  [ТС]
да я посмотрел, но пакер тут практически не при чем. так паковать ничего не надо=)
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
19.02.2013, 21:46
паковать ничего не надо
А какая разница паковать или шифровать или MessageBox выводить - весь механизм инфекции тот же самый и весь разбор формата точно такой же.
0
0 / 0 / 4
Регистрация: 04.10.2010
Сообщений: 115
19.02.2013, 21:49  [ТС]
разбор и инфекция - да

Добавлено через 45 секунд
что за ф-ция ASSERT(0) ?
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
19.02.2013, 22:15
http://msdn.microsoft.com/en-u... 80%29.aspx

ASSERT(0) - удобный прием (трюк), позволяющий немедленно "всплыть" в отладчике в заданной точке.

C++
1
2
3
4
5
if (ShitHappens)
{
   // Shit happens !
   ASSERT(0);
}
0
0 / 0 / 4
Регистрация: 04.10.2010
Сообщений: 115
19.02.2013, 22:22  [ТС]
Цитата Сообщение от gazlan Посмотреть сообщение
http://msdn.microsoft.com/en-u... 80%29.aspx

ASSERT(0) - удобный прием (трюк), позволяющий немедленно "всплыть" в отладчике в заданной точке.

C++
1
2
3
4
5
if (ShitHappens)
{
   // Shit happens !
   ASSERT(0);
}
я нашел инициализацию в своих библиотеках только C_ASSERT()
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
19.02.2013, 22:26
Смотрим ссылку выше. В MFC свои макросы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.02.2013, 22:26
Помогаю со студенческими работами здесь

Получить содержимое файла после выполнения
Добрый день, Есть файл 1.php с кодом. Нужно в другом файле получить результат выполнения 1.php и поместить его в переменную в виде...

Получить содержимое файла из директории выше сайта
Есть путь: /var/www/.../.../.../.../www/test.php Установлен астериск который производит запись по пути /etc/asterisk/records/... Как...

Получить содержимое файла в виде массива байт
Доброго времени) Мне нужно массив байт файла(любого,как txt , так и exe), но стал использовать вектор для начала. Написал вот такую...

Как получить содержимое файла, лежащего в интернете?
вот такая идея (ещё одна безумная) к примеру на каком-то веб сервере есть страничка http://lollll.lol/by.txt в by.txt хранится набор цифр...

Как получить содержимое html-файла через JS
Добрый день. Как получить содержимое <span class="c111"> html-файла через JS? <div id="d111"> <span...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru