purebasic.info

PureBasic forum
Текущее время: Пн июл 16, 2018 9:47 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Portable Executable формат
СообщениеДобавлено: Вс фев 12, 2012 3:34 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Что такое Portable Executable файл? Это щняга, которую придумали мелкомягкие. Это файл (куча байт), для
запуска которого не нужно стороннего ПО, нужна только ось (ее загрузчик)
Естественно у таких файлов должна присутствовать структура, и она таки присутствует.
Это хорошо описано тут От зеленого к красному
Для большего понимания PE формата я наваял этот код. Если у кого будут вопросы, постараюсь на них ответить
Кстати, дальше можно вывести таблицу импорта\экспорта и т.д.


Вложения:
PEinfo.rar [99.33 KiB]
Скачиваний: 369

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Последний раз редактировалось pablov Вт ноя 17, 2015 11:03 pm, всего редактировалось 1 раз.
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 12, 2012 5:58 pm 
Не в сети
профессор

Зарегистрирован: Вт май 04, 2010 12:19 pm
Сообщений: 352
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Цитата:
hFileMap = CreateFileMapping_(hFileCr, #Null, #PAGE_WRITECOPY, 0, 0, #Null)
MapVOF = MapViewOfFile_(hFileMap, #FILE_MAP_READ, 0, 0, $1000) ; создаем проекцию файла в
С файлами меньше 4 kb будет облом.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 12, 2012 9:57 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
puremaster писал(а):
С файлами меньше 4 kb будет облом.

Нека, не будет облома, ага

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 13, 2012 6:46 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс ноя 07, 2010 12:19 pm
Сообщений: 281
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
pablov
По тиху приходим к малварке, пе формат, ссылка тематическая.. Мы все с этого начинали. Потом после накопления некоторого опыта пишут инфекторы :)

_________________
Materia Lucida


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 13, 2012 7:59 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
puremaster писал(а):
С файлами меньше 4 kb будет облом.

Да, чет я погорячился. В этой строчке
Цитата:
MapVOF = MapViewOfFile_(hFileMap, #FILE_MAP_READ, 0, 0, $1000) ; создаем проекцию файла в

$1000 лучше заменить на 0 (ноль)
Indy
Я PE формат давно скурил, инфекторами не болею, так что все нормуль :wink:

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 07, 2012 11:11 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11204
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Этот код подавился драйвером (а ведь он тоже PE формата).
Жаль.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 07, 2012 1:05 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Пётр
Дров в студию.
Из System32\drivers не давится (все не пробовал, но штук 20 съел и не поморщился)

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 07, 2012 2:36 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11204
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
pablov писал(а):
Дров в студию.


Вложения:
pbdriverio.rar [964 байт]
Скачиваний: 243

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 07, 2012 3:07 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Пётр
pablov писал(а):
Да, чет я погорячился. В этой строчке
Цитата:MapVOF = MapViewOfFile_(hFileMap, #FILE_MAP_READ, 0, 0, $1000) ; создаем проекцию файла в

$1000 необходимо заменить на 0 (ноль, нуль, зеро, бублик...)

и все будет глотаться :D

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 08, 2012 2:46 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11204
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Я думал что прога покажет распределение кода по секциям....
В общем есть дров, но есть сомнение что процедура DriverEntry() расположена в секции INIT.
Код дрова:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Declare DriverEntry(*DriverObject, *RegistryPath)
Declare UnloadDriver(*DriverObject.DRIVER_OBJECT)
 
!public PureBasicStart
!section '.INIT' discardable
!PureBasicStart:
*A=@DriverEntry()
!jmp [p_A]
 
Procedure DriverEntry(*DriverObject.DRIVER_OBJECT, *RegistryPath.UNICODE_STRING)
 
  ; Указатель на функцию выгрузки драйвера.
  *DriverObject\DriverUnload = @UnloadDriver()
 
        ProcedureReturn #STATUS_SUCCESS
EndProcedure
 
!section '.code' code readable executable align 8
 
Procedure UnloadDriver(*DriverObject.DRIVER_OBJECT)
 
EndProcedure

Вот его асм. листинг:
Код:
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
format MS COFF 
public PureBasicStart
section '.INIT' discardable
PureBasicStart:
LEA eax,[_Procedure0]
 PUSH eax
 POP dword [p_A]
jmp [p_A]
macro MP0{
_Procedure0:
PUSH ebp
 PS0=8                                                                                                                                                                                                                                          
 LEA eax,[_Procedure2]
 MOV ebp,dword [esp+PS0+4-4]
 MOV dword [ebp+52],eax
 XOR eax,eax
 JMP _EndProcedure1
 XOR eax,eax
_EndProcedure1:
POP ebp
 RET 8
}
section '.code' code readable executable align 8
macro MP2{
_Procedure2:
PS2=4                                                                                                                                                                                                                                                    
 XOR eax,eax
_EndProcedure3:
RET 4
}

Как видим, процедуры в макросах, а значит не факт что будут в тех местах, где они сейчас. Это доказывает хотя бы то, что если убрать из кода эти строки:
Код:
1
2
 *A=@DriverEntry()
!jmp [p_A] ; Переход в процедуру DriverEntry().

то судя по асм листингу, за меткой PureBasicStart: сразу следует процедура и вроде как мы должны на автомате в нее попасть, на на деле, как говорил пёс Шарик из Простоквашино - "получаем национальную индейскую избу - фигвам"! :D Дров при запуске, рушит систему и естественно мы видим синенький экранчик! :(

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 08, 2012 7:05 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Пётр писал(а):
Я думал что прога покажет распределение кода по секциям....

Не, Петр, PEinfo показывает только внутреннюю структуру PE.
Распределение кода по секциям гляди этим прибором

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 08, 2012 9:06 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс ноя 07, 2010 12:19 pm
Сообщений: 281
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр
Цитата:
PureBasicStart:
LEA eax,[_Procedure0]
PUSH eax
POP dword [p_A]
jmp [p_A]
macro MP0{
_Procedure0:
PUSH ebp
PS0=8

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

По сабжу вот полнейшая матчасть от разраба http://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx

_________________
Materia Lucida


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 08, 2012 10:36 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11204
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Indy писал(а):
Подключайте асм сурс
Писать на асме как-то не возникает желания....

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 09, 2012 4:53 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс ноя 07, 2010 12:19 pm
Сообщений: 281
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр
Зачем же тогда вы на нём пишите.

_________________
Materia Lucida


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 09, 2012 6:00 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11204
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Indy писал(а):
Зачем же тогда вы на нём пишите
Я не на асме дров пишу, а на пурике, а асм. код это тот, что "скармливается" FASM'у после трансляции из бейсика в асм.
Хотел процедуру DriverEntry() поместить в секцию INIT, но из-за того, что пурик процедуры заворачивает в макросы, пока что не получилось.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB