Сейчас на форуме: tyns777, cppasm, dutyfree (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Проблема с добавлением секции
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 3.3 (гость), 1thx
Активность: 0.020
Статус: Участник

Создано: 31 августа 2017 16:14 · Поправил: alex-rudenkiy
· Личное сообщение · #1

Здравствуйте, я хочу добавить CODE секцию в программу вручную, ну в общем, я добавляю в Section Header описание своей секции lol, затем меняю в заголовке число секций с 3 на 4, ну вот, потом добавляю байт-код (он не рабочий, чиста для примера) и потом пытаюсь его запустить в ollydbg, вроде-бы схема должна быть рабочей, но он даже не открывается, error вылетает, что делать, подскажите пожалуйста :

Name VirtSize VirtAddr SizeRaw PtrRaw Flags Pointing Directories
-------------------------------------------------------------------------------------------
.text 00003A56h 01001000h 00003C00h 00000400h 60000020h Import Table
.lol 00000050h 0100A200h 00000050h 0001D430h E0000020h
.data 00000B98h 01005000h 00000200h 00004000h C0000040h
.rsrc 00019160h 01006000h 00019200h 00004200h 40000040h Resource Table


54c7_31.08.2017_EXELAB.rU.tgz - Winmine__XP - с секцией.rar



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 31 августа 2017 16:44
· Личное сообщение · #2

Почему бы не использовать инструментарий и не мучаться, если PE формат не ваша сильная сторона?



Ранг: 3.3 (гость), 1thx
Активность: 0.020
Статус: Участник

Создано: 31 августа 2017 16:48 · Поправил: alex-rudenkiy
· Личное сообщение · #3

VOLKOFF пишет:
Почему бы не использовать инструментарий и не мучаться, если PE формат не ваша сильная сторона?

Потому-что хотелось как раз поближе и познакомится с PE, я вкурсе что есть такая возможность в ida, не всю же жизнь пользоваться крэкерскими приблудами




Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 31 августа 2017 17:32 · Поправил: hors
· Личное сообщение · #4

alex-rudenkiy пишет:
Здравствуйте, я хочу добавить CODE секцию в программу вручную, ну в общем, я добавляю в Section Header описание своей секции lol, затем меняю в заголовке число секций с 3 на 4, ну вот, потом добавляю байт-код (он не рабочий, чиста для примера) и потом пытаюсь его запустить в ollydbg, вроде-бы схема должна быть рабочей, но он даже не открывается, error вылетает, что делать, подскажите пожалуйста :


Описание новой секции нужно добавлять в конец таблицы секций, а не вставлять в середину, как у Вас.

-----
http://ntinfo.biz




Ранг: 3.3 (гость), 1thx
Активность: 0.020
Статус: Участник

Создано: 31 августа 2017 17:47 · Поправил: alex-rudenkiy
· Личное сообщение · #5

hors пишет:
Описание новой секции нужно добавлять в конец таблицы секций, а не вставлять в середину, как у Вас.

Не помогает





Ранг: 19.5 (новичок), 8thx
Активность: 0.050.08
Статус: Участник

Создано: 31 августа 2017 23:56 · Поправил: dezmand07
· Личное сообщение · #6

можно кодом добавить
Code:
  1. DWORD align(DWORD size, DWORD align, DWORD addr){
  2.     if (!(size % align)) return addr + size;
  3.     return addr + (size / align + 1) * align;
  4. }
  5.  
  6. bool AddSection(char *filepath, char *sectionName, DWORD sizeOfSection){
  7.     HANDLE file = CreateFile(filepath, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  8.     if (file == INVALID_HANDLE_VALUE)  return false;
  9.  
  10.     DWORD fileSize = GetFileSize(file, NULL);
  11.  
  12.     BYTE *pByte = new BYTE[fileSize];
  13.     DWORD dw;
  14.  
  15.     ReadFile(file, pByte, fileSize, &dw, NULL);
  16.  
  17.     PIMAGE_DOS_HEADER dos = (PIMAGE_DOS_HEADER)pByte;
  18.     if (dos->e_magic != IMAGE_DOS_SIGNATURE) return false;
  19.  
  20.     PIMAGE_FILE_HEADER FH = (PIMAGE_FILE_HEADER)(pByte + dos->e_lfanew + sizeof(DWORD));
  21.     PIMAGE_OPTIONAL_HEADER OH = (PIMAGE_OPTIONAL_HEADER)(pByte + dos->e_lfanew + sizeof(DWORD)+sizeof(IMAGE_FILE_HEADER));
  22.     PIMAGE_SECTION_HEADER SH = (PIMAGE_SECTION_HEADER)(pByte + dos->e_lfanew + sizeof(IMAGE_NT_HEADERS));
  23.  
  24.     ZeroMemory(&SH[FH->NumberOfSections], sizeof(IMAGE_SECTION_HEADER));
  25.     CopyMemory(&SH[FH->NumberOfSections].Name, sectionName, IMAGE_SIZEOF_SHORT_NAME);
  26.  
  27.     SH[FH->NumberOfSections].Misc.VirtualSize = align(sizeOfSection, OH->SectionAlignment, 0);
  28.     SH[FH->NumberOfSections].VirtualAddress = align(SH[FH->NumberOfSections - 1].Misc.VirtualSize, OH->SectionAlignment, SH[FH->NumberOfSections - 1].VirtualAddress);
  29.     SH[FH->NumberOfSections].SizeOfRawData = align(sizeOfSection, OH->FileAlignment, 0);
  30.     SH[FH->NumberOfSections].PointerToRawData = align(SH[FH->NumberOfSections - 1].SizeOfRawData, OH->FileAlignment, SH[FH->NumberOfSections - 1].PointerToRawData);
  31.     SH[FH->NumberOfSections].Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE;
  32.  
  33.     SetFilePointer(file, SH[FH->NumberOfSections].PointerToRawData + SH[FH->NumberOfSections].SizeOfRawData, NULL, FILE_BEGIN);
  34.     SetEndOfFile(file);
  35.     OH->SizeOfImage = SH[FH->NumberOfSections].VirtualAddress + SH[FH->NumberOfSections].Misc.VirtualSize;
  36.     FH->NumberOfSections += 1;
  37.     SetFilePointer(file, 0, NULL, FILE_BEGIN);
  38.     WriteFile(file, pByte, fileSize, &dw, NULL);
  39.     CloseHandle(file);
  40.     return true;
  41. }


| Сообщение посчитали полезным: alex-rudenkiy


Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 01 сентября 2017 01:08
· Личное сообщение · #7

alex-rudenkiy пишет:
Не помогает

1 Берём калькулятор программиста
2. Высчитываем начало виртуальной секции и RAW данные, берём начало предыдущей секции и прибавляем её размер 01006000 + 1А000(округляем) = 1020000 и 4200 + 19200 = 1D400 а у вас другие значения
3. прежде чем писать секцию надо убедится что у файла нет оверлея
4. после внесённых изменения правим кол во секций и меняем Image size

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.


| Сообщение посчитали полезным: alex-rudenkiy


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 сентября 2017 01:23 · Поправил: difexacaw
· Личное сообщение · #8

alex-rudenkiy

> error вылетает, что делать, подскажите пожалуйста :

Правильный ход мыслей - разобрать непосредственно что за ошибка и в чём её причина, те отладить загрузчик. Иначе можно рандомом изменять биты в хидере пе и вновь и вновь просить помощи.

FLG_SHOW_LDR_SNAPS и смотрим суть поломки.

-----
vx





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 01 сентября 2017 02:28
· Личное сообщение · #9

difexacaw пишет:
FLG_SHOW_LDR_SNAPS и смотрим суть поломки.

Посоветовал хирург сантехнику как операцию на сердце сделать

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.


| Сообщение посчитали полезным: ajax

Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 01 сентября 2017 02:45 · Поправил: VOLKOFF
· Личное сообщение · #10

Это же его "фишка" - дать вполне корректный "умный" ответ который хотя бы частично попадает в зону тематики, но абсолютно никак не решающий изначальную проблему, или решающий но сопровождающийся обязательным наличием боли и мучений спросившего смертного Так и живем.

alex-rudenkiy пишет:
Не помогает

Возьми же наконец CFFE кликни 2 раза мышкой чтобы добавить твою многострадальную секцию правильно и сравни с тем, что делаешь ты. Плюс сразу увидишь много подсвеченных ошибок PE полей (понимая что ошибки не в них непосредственно а из-за поломки структуры хидера твоими изящными вставками)

P.S.
Professional PE Explorer (для большей иронии название полное ) на вашем сэмпле просто крашится в нирвану. Черканул аффтару про этот и еще старый баг, в прошлый раз он быстро пофиксил.

| Сообщение посчитали полезным: ajax, alex-rudenkiy, difexacaw, sefkrd


Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 01 сентября 2017 11:11 · Поправил: ajax
· Личное сообщение · #11

тему об улучшениях форума снесли, так понимаю? в пи хомячка, посты после нескольких дней. clerk, это для того, чтоб народ гуглил и т.п. каждый 2 ньюб регается для хелпа "прям щас", не втыкая в мануалы
hors
вау, ты еще тут появляешься где апдейды die?

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 3.3 (гость), 1thx
Активность: 0.020
Статус: Участник

Создано: 01 сентября 2017 14:50
· Личное сообщение · #12

VOLKOFF пишет:
CFFE

А что это за инструмент такой, полное название можно?

Добавлено спустя 18 минут
ClockMan пишет:
прежде чем писать секцию надо убедится что у файла нет оверлея

Наверное не стоило бы мне это спрашивать, но а причём здесь оверлей, если он в память не грузится и нам по идее всё-равно должно быть на overlay?

Overlay - это всё то, что находится за последней секцией как я помню.



Ранг: 18.3 (новичок), 6thx
Активность: 0.030.02
Статус: Участник

Создано: 01 сентября 2017 15:11
· Личное сообщение · #13

alex-rudenkiy пишет:
А что это за инструмент такой, полное название можно?


CFF Explorer



Ранг: 3.3 (гость), 1thx
Активность: 0.020
Статус: Участник

Создано: 01 сентября 2017 15:48 · Поправил: alex-rudenkiy
· Личное сообщение · #14

VOLKOFF пишет:
Возьми же наконец CFFE кликни 2 раза мышкой чтобы добавить твою многострадальную секцию правильно

Ну всё, секция добавлена, думал всё, славу богу, но не тут то было, при запуске программа сразу же крашится ...



Пишет "Ошибка при запуске приложения (0xc000007b)...", может он что-то забывает на автомате делать?




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 01 сентября 2017 15:51
· Личное сообщение · #15

alex-rudenkiy пишет:
а причём здесь оверлей, если он в память не грузится

Всё с вами понятно свободы

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 3.3 (гость), 1thx
Активность: 0.020
Статус: Участник

Создано: 01 сентября 2017 15:54
· Личное сообщение · #16

ClockMan пишет:
Всё с вами понятно свободы

Ну а что, я --> здесь <-- прочитал



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 01 сентября 2017 15:59
· Личное сообщение · #17

ClockMan пишет:
Всё с вами понятно

Практика показывает, что не стоит ждать чего-то выдающегося от человека называющего секции lol, kek и fuck

alex-rudenkiy пишет:
но не тут то было

ну уж с такой тулзой зафакапить создание секции это надо постараться Искренний респект




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 01 сентября 2017 16:01
· Личное сообщение · #18

alex-rudenkiy пишет:
c000007b

STATUS_INVALID_IMAGE_FORMAT

Добавлено спустя 1 минуту
VOLKOFF пишет:
lol, kek и fuck

Я заметил какойто юных недовирусописатель

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 3.3 (гость), 1thx
Активность: 0.020
Статус: Участник

Создано: 01 сентября 2017 18:58 · Поправил: alex-rudenkiy
· Личное сообщение · #19

VOLKOFF пишет:
fuck

ну блин, я смотрю data (4 буквы), text (4 буквы), rsrc (4 буквы), так ещё у меня нечего и не получается, злой и написал первое что в голову пришло

Добавлено спустя 4 минуты
Так вы не вкурсе, в чём косяк? Ох, опять всё самому разбираться )

Добавлено спустя 15 минут
Я помню в последний раз меня так сильно выбесила модель MVVM в C#.net, особенно после того как ты всю жизнь делал линейный (скорее всего не правильно называю) программы, а там сплошные binding'и и ещё эта структура только чего стоит Model, ViewModel, View, я тогда помню вообще поник, нужно же так придумать названия, ну вроде-бы потом разобрался и программы норм стали получаться




Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 01 сентября 2017 19:55
· Личное сообщение · #20

вариант для winmine.exe: после добавления секции с "начинкой", запусти - сразу как файл получится нерабочим - пожми его ASPackом. Запусти. Magic ?

-----
Don_t hate the cracker - hate the code.





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 02 сентября 2017 02:15
· Личное сообщение · #21

VOLKOFF

> Это же его "фишка" - дать вполне корректный "умный" ответ который хотя бы частично попадает в зону тематики

Да, согласен; это моя ошибка. Я не вдовался в тех детали, так как небыло времени, а описал общее решение классической задачи - любое действие юзер загрузчика логгируется.

В данном случае это не годится, как не странно

Процесс создаётся из секции(обьект), они бывают трёх типов. Создание процесса это создание конвеера на основе образа который создатся ранее как image-секция. Именно на этом этапе ядро выполняет валидации.

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

Если углубиться в детали, то фейл создания секции можно узнать только отладив в км, место около MiCreateImageFileMap() -> MiVerifyImageHeader().

Следует заметить что так как этим механизмам уделяется особое внимание по выше описанной причине, то они активно допиливаются. И в более новой версии системы валидации изменены до не узнаваемости(2k:creasect.c).

Я не стал писать сразу это всё, так как думал что проблема с юзер загрузчиком.

Добавлено спустя 12 минут
ajax

> это для того, чтоб народ гуглил

Да, достаточно для поиска. Давайте посмотрим:

Первая ссылка в гугле на мс --> Link <--

Находим нашу опцию --> Link <--

Смотрим на код загрузчика, какой больше нравится - дасм или старый исходный, не важно и видим что логгируется всё.

Если же отладчик какой то фейл выдаёт - нет проблем, открываем им же самого себя, ставим останов на NtCreateSection и получаем статус - bad image.

-----
vx





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 02 сентября 2017 22:48
· Личное сообщение · #22

alex-rudenkiy
Для Hiew есть плагин PeVerify ver 0.43, он показывает, какие конкретные ошибки в файле.

А на счёт твоей конкретной ошибки (STATUS_INVALID_IMAGE_FORMAT), то полагаю, что ты не подумал о размере образа в памяти.
Считай SizeOfImage, когда увеличиваешь размер образа.

Тебе пригодится, изучай:
PE Format Poster (pe101.pdf)
PE Format Poster Detailed (pe1012.pdf)
Portable executable (Картинка)

-----
EnJoy!




Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 03 сентября 2017 09:40 · Поправил: dosprog
· Личное сообщение · #23

К сожалению, тот плагин PEVerify чаще выдаёт информацию, которую понимает только его автор,
- пользу от того плагина можно оценить только в 10-20%, имхо.

Jupiter пишет:
Кривой SizeOfImage, полагаю, покажет.


Покажет..

К тому плагину был бы уместен объёмный документейшен, которого нету.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 03 сентября 2017 14:57
· Личное сообщение · #24

dosprog
Кривой SizeOfImage, полагаю, покажет.

-----
EnJoy!





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 03 сентября 2017 15:17
· Личное сообщение · #25

Jupiter
CFF корректит сайз

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 04 сентября 2017 11:26
· Личное сообщение · #26

ajax
Ну так ТС то код пишет, ему ж надо вроде как разбираться (я надеюсь)

-----
EnJoy!





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 04 сентября 2017 16:39
· Личное сообщение · #27

Jupiter
сырков уйма. нюанс, что ТС не хочет гуглить. о чем мой первый пост в этой ветке

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 04 сентября 2017 17:04
· Личное сообщение · #28

ajax
Я дал ссылки как на краткие (для ленивых) так и на очень подробные схемы-описания от Ange Albertini (corkami), так что даже если ТС предпочитает обучаться, не слизывая с чужих сорсов, то и в этом случае ему должно помочь.
Так то всяких библиотек для работы с PE предостаточно. От небольших до фреймворков.

-----
EnJoy!





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 04 сентября 2017 17:35 · Поправил: difexacaw
· Личное сообщение · #29

Jupiter

> ему ж надо вроде как разбираться

Давайте взглянем.

Трассируем MiCreateImageFileMap(), причём делаем это на XP, так как для неё имеются сурки. Находим место с фейлом:

-> STATUS_INVALID_IMAGE_FORMAT

--> Link <--

[ECX-8]: 0xA200
EAX: 0x100A200
VAR: 0x1005000

Дизасмим ядро:

Code:
  1. PAGE:004D3E90                 mov     eax, [ebp+var_8]
  2. PAGE:004D3E93                 and     dword ptr [esi+1Ch], 0
  3. PAGE:004D3E97                 and     dword ptr [esi+14h], 0
  4. PAGE:004D3E9B                 mov     [esi], eax
  5. PAGE:004D3E9D                 mov     eax, [ecx-8]    ; IMAGE_SECTION_HEADER.VirtualAddress
  6. PAGE:004D3EA0                 add     eax, [ebp+var_5C]
  7. PAGE:004D3EA3                 cmp     [ebp+var_40], eax
  8. PAGE:004D3EA6                 jnz     loc_4D40A1
  9. PAGE:004D3EAC                 test    edi, edi
  10. PAGE:004D3EAE                 jz      loc_4D40A1


Открываем сурец из w2k/wrk и находим наше место:

Code:
  1.             Subsection += 1;
  2.             Subsection->ControlArea = ControlArea;
  3.             Subsection->NextSubsection = NULL;
  4.             Subsection->UnusedPtes = 0;
  5.  
  6.             if (((NextVa != (PreferredImageBase + SectionTableEntry->VirtualAddress)) && (InvalidAlignmentAllowed == FALSE)) ||
  7.                 (SectionVirtualSize == 0)) {
  8.  
  9.                 //
  10.                 // The specified virtual address does not align
  11.                 // with the next prototype PTE.
  12.                 //
  13.  
  14.                 MI_BAD_IMAGE (0x1A);
  15.                 Status = STATUS_INVALID_IMAGE_FORMAT;
  16.                 goto BadPeImageSegment;
  17.             }


Видим что IMAGE_SECTION_HEADER.VirtualAddress невалид(0xA200).

2afa_04.09.2017_EXELAB.rU.tgz - mi.png

-----
vx




Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 04 сентября 2017 18:52
· Личное сообщение · #30

difexacaw
Тебе лишь бы ядро потрассировать... Там же и так видно, что он единицу забыл в адресе дописать?

Выравненные по section alignment секции должны идти одна за другой без наложений друг на друга и пропусков между секциями.


. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Проблема с добавлением секции
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати