purebasic.info

PureBasic forum
Текущее время: Ср сен 19, 2018 4:35 am

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




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Вс мар 23, 2014 10:24 am 
Не в сети
ассистент

Зарегистрирован: Вт ноя 05, 2013 1:29 pm
Сообщений: 16
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Подменяется секция sec_image на аналогичную, созданую своими ручками без привязки к файлу dll. Полученное длл функционирует также как загруженые обычным путем через LoadLibrary.


Код:
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
 
Structure IMAGE_SECTION_HEADER
        Name.b[8]
        StructureUnion
                PhysicalAddress.l
                VirtualSize.l
        EndStructureUnion
        VirtualAddress.l
        SizeOfRawData.l
        PointerToRawData.l
        PointerToRelocations.l
        PointerToLinenumbers.l
        NumberOfRelocations.w
        NumberOfLinenumbers.w
        Characteristics.l
EndStructure
 
 
 
 
Global hSECTION
Global DllBase
Global hZwOpenSection
Global hZwMapViewOfSection
Global dumpqhZwOpenSection.q
Global dumpqhZwMapViewOfSection.q
 
 
Procedure.l ZwOpenSection(SectionHandle, DesiredAccess, ObjectAttributes)
        PokeL(SectionHandle, hSECTION)
        PokeQ(hZwOpenSection, dumpqhZwOpenSection)
        ProcedureReturn 0
EndProcedure
 
 
Procedure.l ZwMapViewOfSection(SectionHandle, ProcessHandle, BaseAddress, ZeroBits, CommitSize, SectionOffset, ViewSize, InheritDisposition, AllocationType, Win32Protect)
        PokeQ(hZwMapViewOfSection, dumpqhZwMapViewOfSection)
        PokeL(BaseAddress, DllBase)
        ProcedureReturn 0
EndProcedure
 
 
 
 
 
 
*DOS_HEADER.IMAGE_DOS_HEADER = ?StartDll
*NT_HEADERS.IMAGE_NT_HEADERS = ?StartDll + *DOS_HEADER\e_lfanew
*SECTION_HEADER.IMAGE_SECTION_HEADER = *NT_HEADERS\OptionalHeader + *NT_HEADERS\FileHeader\SizeOfOptionalHeader
 
DllBase = VirtualAlloc_(0, *NT_HEADERS\OptionalHeader\SizeOfImage, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
 
RtlMoveMemory_(DllBase, ?StartDll, *NT_HEADERS\OptionalHeader\SizeOfHeaders)
 
prot.l
*SH.IMAGE_SECTION_HEADER
For i = 0 To *NT_HEADERS\FileHeader\NumberOfSections - 1
        *SH = *SECTION_HEADER + (i * SizeOf(IMAGE_SECTION_HEADER))
        RtlMoveMemory_(DllBase + *SH\VirtualAddress, ?StartDll + *SH\PointerToRawData, *SH\SizeOfRawData)
        VirtualProtect_(DllBase + *SH\VirtualAddress, *SH\VirtualSize, #PAGE_EXECUTE_READWRITE, @prot)
Next
 
hNTDLL = GetModuleHandle_("ntdll.dll")
temp = hNTDLL
While CompareMemory(temp, ?bytes, 10) = 0
        temp + 1
Wend
Repeat
        While PeekC(temp) <> $E8
                temp + 1
        Wend
        fastcall = PeekL(temp+1) + temp + 5
        If (fastcall&$FFF00000) = (hNTDLL&$FFF00000)
                Break
        EndIf
ForEver
CallFunctionFast(fastcall, DllBase, 0, 0, $C0000018, $C000007B)
 
modulefilename.s{256}
GetModuleFileName_(0, @modulefilename, 256)
hFILE = CreateFile_(@modulefilename, #GENERIC_READ, #FILE_SHARE_READ, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL,0)
hSECTION = CreateFileMapping_(hFILE, 0, #SEC_IMAGE | #PAGE_READONLY, 0, 0, 0)
 
hZwOpenSection = GetProcAddress_(hNTDLL, "ZwOpenSection")
hZwMapViewOfSection = GetProcAddress_(hNTDLL, "ZwMapViewOfSection")
 
dumpqhZwOpenSection = PeekQ(hZwOpenSection)
dumpqhZwMapViewOfSection = PeekQ(hZwMapViewOfSection)
 
VirtualProtect_(hZwOpenSection, 8, #PAGE_EXECUTE_READWRITE, @prot)
VirtualProtect_(hZwMapViewOfSection, 8, #PAGE_EXECUTE_READWRITE, @prot)
 
PokeB(hZwOpenSection, $E9)
PokeL(hZwOpenSection + 1, @ZwOpenSection() - hZwOpenSection - 5)
PokeB(hZwMapViewOfSection, $E9)
PokeL(hZwMapViewOfSection + 1, @ZwMapViewOfSection() - hZwMapViewOfSection - 5)
 
 
 
 
;первый запуск LoadLibrary_ привяжет новое имя
LoadLibrary_("ANY_NAME.dll")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
 
;проверяем
hMODULE = GetModuleHandle_("ANY_NAME.dll")
DllProc = GetProcAddress_(hMODULE, "proc")
CallFunctionFast(DllProc)
 
;еще
hMODULE = LoadLibrary_("ANY_NAME.dll")
DllProc = GetProcAddress_(hMODULE, "proc")
CallFunctionFast(DllProc)
 
 
FreeLibrary_(hMODULE)
 
 
DataSection
        bytes:
        Data.b $68, $7B, $00, $00, $C0, $68, $18, $00, $00, $C0
        StartDll:
        IncludeBinary "test_dll.dll"
        EndDll:
EndDataSection



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 11:26 am 
Не в сети
ассистент

Зарегистрирован: Вт ноя 05, 2013 1:29 pm
Сообщений: 16
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
есть подозрения что на системах отличных от win7 не заведется


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 11:53 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 26, 2011 8:18 pm
Сообщений: 263
Откуда: Волгоград
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Windows XP (SP2) x86, PB v5.11
Код длл:
Код:
1
2
3
ProcedureDLL proc(value)
  MessageRequester("test",Str(value))
EndProcedure


Сообщение выскакивает два раза, как и положено. (добавил в CallFunctionFast() параметр - 1, потом - 2, оба раза все верно).


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 12:29 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
d33n писал(а):
есть подозрения что на системах отличных от win7 не заведется
Чуть позже на восьмерке проверю

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 1:55 pm 
Не в сети
профессор

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

Это имхо фдиск все никак не успокоится

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 3:20 pm 
Не в сети
ассистент

Зарегистрирован: Вт ноя 05, 2013 1:29 pm
Сообщений: 16
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Цитата:
Это имхо фдиск все никак не успокоится

фдиск спокоен видел его наднях веселый и жизнерадосный источает умиротверение

кстате в моем загрузчике корректно функционируют нотификации, сообщения attach detach, в отличие от мегакрутова самописного уберзагрузчика паблуши аххах
для наглядной демострации соберити такое длл

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ProcedureDLL AttachProcess(Instance)
        MessageRequester("AttachProcess !", "AttachProcess !")
EndProcedure
 
ProcedureDLL DetachProcess(Instance)
        MessageRequester("DetachProcess !", "DetachProcess !")
EndProcedure
 
ProcedureDLL AttachThread(Instance)
        MessageRequester("AttachThread !", "AttachThread !")
EndProcedure
 
ProcedureDLL DetachThread(Instance)
        MessageRequester("DetachThread !", "DetachThread !")
EndProcedure
 
 
ProcedureDLL proc(value)
        MessageRequester("test",Str(value))
EndProcedure



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 4:22 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Код:
1
While CompareMemory(temp, ?bytes, 10) = 0


Цитата:
Не возможен доступ к памяти


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 4:29 pm 
Не в сети
ассистент

Зарегистрирован: Вт ноя 05, 2013 1:29 pm
Сообщений: 16
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
MrF писал(а):
Код:
1
While CompareMemory(temp, ?bytes, 10) = 0


Цитата:
Не возможен доступ к памяти

отключи юникод
если не поможет поделись ntdll.dll из system32 или где он там


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 4:30 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вт сен 11, 2012 11:48 am
Сообщений: 35
Благодарил (а): 2 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
pablov писал(а):
Товарищи, не ведитесь на это фуфло от d33n

Это имхо фдиск все никак не успокоится

Что за чепуха? Как может Фдиск быть причастен к этому коду, если Фдиск это я?
Я уже много лет сюда ничего не пишу, хотя и заглядываю сюда регулярно, по старой памяти, всё-таки, я был в пятерке первых посетителей этого форума.

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

pablov у меня всегда создавал впечатление очень умного человека, но в данном случае, привязать меня к какому-то коду, это просто явная нелепость с его стороны.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 5:13 pm 
Не в сети
ассистент

Зарегистрирован: Вт ноя 05, 2013 1:29 pm
Сообщений: 16
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Цитата:
Что за чепуха? Как может Фдиск быть причастен к этому коду, если Фдиск это я?

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 5:39 pm 
Не в сети
профессор

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

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 6:04 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
d33n писал(а):
если не поможет поделись ntdll.dll

http://rghost.ru/53287059


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 6:33 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6382
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
d33n писал(а):
потому что я фдиск

Брехня, Фдиск и слов то таких не употребляет
Цитата:
"делать запись в LDR_DATA_TABLE_ENTRY"
"корректно функционируют нотификации"
"сообщения attach detach"


В отличии от от Вас он человек приличный, и такие программерские матюки ему не ведомы. А вот по матушке может. Если доведут.

_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 6:34 pm 
Не в сети
ассистент

Зарегистрирован: Вт ноя 05, 2013 1:29 pm
Сообщений: 16
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
MrF писал(а):
d33n писал(а):
если не поможет поделись ntdll.dll

http://rghost.ru/53287059

Ну молодец чо. x86 коде в x64 собираешь успехов тебе


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс мар 23, 2014 6:46 pm 
Не в сети
профессор

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

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


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

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


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

Сейчас этот форум просматривают: Bing [Bot] и гости: 3


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

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