purebasic.info

PureBasic forum
Текущее время: Чт апр 26, 2018 7:58 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: Вс мар 23, 2014 6:49 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1608
Откуда: Алматы
Благодарил (а): 13 раз.
Поблагодарили: 43 раз.
Пункты репутации: 5
вы мне главное про прозрачный скроллбаргаджет скажите, а потом хоть взорвите форум флудом :) висит все дело... делать две кнопки не комильфо... хочу то писят прозрачных скроллбаров поверх рисунка для управления сделать.


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

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

Ну раз такая зависимость, то пример pablov'а несомненно лучше.


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

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

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


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

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

Вот после таких высказываний маленько понимаешь чела

сереза, вы в [цензура] вставте себе свое хотение

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


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

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1608
Откуда: Алматы
Благодарил (а): 13 раз.
Поблагодарили: 43 раз.
Пункты репутации: 5
pablov писал(а):
сереза, вы в [цензура] вставте себе свое хотение

так я вроде натурал... так что нефиг меня сбивать с пути истинного.


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

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 147
Благодарил (а): 74 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
d33n
на ХР завелся сразу! И, похоже, сие весьма круто!
Мы вручную в памяти создаем структуру пе файла,
по адресу DOS_HEADER.IMAGE_DOS_HEADER загружаем нашу dll..
Не совсем понятно несколько вещей:
1. механизм передачи управления(указателя) на нашу dll
2. как осуществляется привязка к "ANY_NAME.dll" - наша dll называетсяпо-другому
3. зачем нужны быйты "Data.b $68, $7B, $00, $00, $C0, $68, $18, $00, $00, $C0" - это что за сигнатура?


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

Зарегистрирован: Вт ноя 05, 2013 1:29 pm
Сообщений: 16
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
bizdon
штатный загрузчик формирует длл в памяти через ZwCreateSection(filename..sec_image..)-раскидывает песекции по их виртуальным адресам и настраивает релокации. Стало быть для подмены необходимо получить копию такой секции. Первое понятно, второе сделано через LdrRelocateImage что ищется по тем 10 байтам. Для настройки всего остального и перехода на ep вызывается LoadLibrary(any_name.dll), птакого фала нет но нам [цензура] мы подменяем открытие секции и отображение на адресное пространство ранее созданной секции, так что any_name.dll как бы есть и записывается в наше LDR_DATA_TABLE_ENTRY/BaseDllName


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

Зарегистрирован: Ср апр 23, 2014 2:39 pm
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
под последние апдейты Win7 доделал
Код:
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
 
OSVERSION = OSVersion()
 
 
 
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
 
Global NewhRtlImageNtHeaderEx
 
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
 
 
Procedure.l RtlImageNtHeaderEx(p1, p2, p3, p4, p5)
        If b = DllBase
                ProcedureReturn CallFunctionFast(NewhRtlImageNtHeaderEx, 1, p2, p3, p4, p5)
        Else
                ProcedureReturn CallFunctionFast(NewhRtlImageNtHeaderEx, p1, p2, p3, p4, p5)
        EndIf
        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 = Space(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")
 
If OSVERSION = #PB_OS_Windows_7
        hRtlImageNtHeaderEx = GetProcAddress_(hNTDLL, "RtlImageNtHeaderEx")
        ntdllpath.s = Space(256)
        GetSystemDirectory_(@ntdllpath, 256)
        hFile = CreateFile_(ntdllpath + "\ntdll.dll", #GENERIC_READ, #FILE_SHARE_READ, 0, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL,0)
        hMapFile = CreateFileMapping_(hFile, 0, #SEC_IMAGE + #PAGE_READONLY, 0, 0, 0)
        hNewDLL = MapViewOfFile_(hMapFile, #FILE_MAP_READ, 0, 0, 0)
        NewhRtlImageNtHeaderEx = hNewDLL + (hRtlImageNtHeaderEx - hNTDLL)
        VirtualProtect_(hRtlImageNtHeaderEx, 8, #PAGE_EXECUTE_READWRITE, @prot)
        PokeB(hRtlImageNtHeaderEx, $E9)
        PokeL(hRtlImageNtHeaderEx + 1, @RtlImageNtHeaderEx() - hRtlImageNtHeaderEx - 5)
EndIf
 
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, "test")
CallFunctionFast(DllProc, @"123")
 
;еще
hMODULE = LoadLibrary_("ANY_NAME.dll")
DllProc = GetProcAddress_(hMODULE, "test")
CallFunctionFast(DllProc, @"123")
 
 
FreeLibrary_(hMODULE)
 
 
DataSection
        bytes:
        Data.b $68, $7B, $00, $00, $C0, $68, $18, $00, $00, $C0
        StartDll:
        IncludeBinary "testdll.dll"
        EndDll:
EndDataSection
 



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

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


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

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


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

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