purebasic.info

PureBasic forum
Текущее время: Пн июл 24, 2017 7:40 am

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




Начать новую тему Ответить на тему  [ Сообщений: 133 ]  На страницу 1, 2, 3, 4, 5 ... 9  След.
Автор Сообщение
 Заголовок сообщения: Перевод кода драйвера с C++ на PB
СообщениеДобавлено: Вт июн 11, 2013 9:13 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 04, 2011 7:38 am
Сообщений: 728
Откуда: Россия
Благодарил (а): 29 раз.
Поблагодарили: 9 раз.
Пункты репутации: 0
Кто нибудь, переведите пожалуйста вот эту хреновину (дайвер) на пурик

Код:
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
161
162
163
164
165
166
167
168
169
170
171
 
#include <ntddk.h>;
 
#define DEBUG
 
#ifdef DEBUG
  #define DPRINT DbgPrint
#else
  #define DPRINT
#endif
 
typedef PVOID* PNTPROC;
typedef DWORD (ULONG);
typedef DWORD*  PDWORD;
typedef unsigned char (BYTE);
typedef BYTE* PBYTE;
 
typedef struct _SYSTEM_SERVICE_TABLE
{
    PNTPROC ServiceTable;
    PDWORD  CounterTable;
    ULONG   ServiceLimit;
    PBYTE   ArgumentTable;
}
SYSTEM_SERVICE_TABLE ,
* PSYSTEM_SERVICE_TABLE ,
* * PPSYSTEM_SERVICE_TABLE ;
 
 
typedef struct _SERVICE_DESCRIPTOR_TABLE {
   SYSTEM_SERVICE_TABLE ntoskrnl;  //SST для ntoskrnl.exe
   SYSTEM_SERVICE_TABLE win32k;    //SST для win32k.sys
   SYSTEM_SERVICE_TABLE unused1;   //не используется
   SYSTEM_SERVICE_TABLE unused2;   //не используется
}
SERVICE_DESCRIPTOR_TABLE ,
* PSERVICE_DESCRIPTOR_TABLE,
* * PPSERVICE_DESCRIPTOR_TABLE ;
 
//макрос для простого доступа к SST ядра
#define NTCALL(_function) KeServiceDescriptorTable->ntoskrnl.ServiceTable[_function]
 
//импортируем указатель на SDT
extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable;
 
//импортируем версию ядра NT
extern PUSHORT NtBuildNumber;
 
//обьявляем прототип True функции для перехватываемой функции
typedef NTSTATUS (*NtOpenPrcPointer) (
    OUT PHANDLE ProcessHandle,
    IN ACCESS_MASK DesiredAccess,
    IN POBJECT_ATTRIBUTES ObjectAttributes,
    IN PCLIENT_ID ClientId OPTIONAL);
 
//обьявляем True функцию
NtOpenPrcPointer TrueNtOpenProcess;
 
//номер системного вызова NtOpenProcess
ULONG OpenProcId;
 
//функция - обработчик перехвата
NTSTATUS NewNtOpenProcess (
    OUT PHANDLE ProcessHandle,
    IN ACCESS_MASK DesiredAccess,
    IN POBJECT_ATTRIBUTES ObjectAttributes,
    IN PCLIENT_ID ClientId OPTIONAL)
{
        HANDLE ProcessId;
 
        //безопасным образом извлекаем ProcessId
        if ((ULONG)ClientId > MmUserProbeAddress) return STATUS_INVALID_PARAMETER;
        __try
        {
                ProcessId = ClientId->UniqueProcess;
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
                DPRINT("Exception");
                return STATUS_INVALID_PARAMETER;
        }
 
        if (ProcessId == (HANDLE)2800)
        {
                DPRINT("Access Denied!");
                return STATUS_ACCESS_DENIED;
        } else
       
        return TrueNtOpenProcess(ProcessHandle, DesiredAccess,
                                 ObjectAttributes, ClientId);
}
 
 
VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
        ULONG CR0Reg;
 
        DPRINT("Driver unloaded");
 
        //снимаем перехват
        __asm
        {
                cli                     // запрещаем прерывания
                mov eax, cr0
                mov CR0Reg,eax
                and eax,0xFFFEFFFF     // сбросить WP bit
                mov cr0, eax
        }
 
        NTCALL(OpenProcId) = TrueNtOpenProcess;
 
        __asm
        {
                mov eax, CR0Reg    
                mov cr0, eax            // востановить содержимое CR0
                sti                     // разрешаем прерывания
        }
 
        return;
}
 
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
                     IN PUNICODE_STRING RegistryPath)
{
        ULONG CR0Reg;
 
        DPRINT("Driver loaded");
 
        //определяем версию ядра системы
        switch (*NtBuildNumber)
    {
        case 2195 :  //win 2k
         OpenProcId = 0x06A;
         break;
       
        case 2600 : //win xp
         OpenProcId = 0x07A;
         break;
       
        default :
         return STATUS_NOT_IMPLEMENTED;
         break;
    }
       
        //устанавливаем перехват  
        TrueNtOpenProcess  = NTCALL(OpenProcId);
 
        __asm
        {
                cli                     // запрещаем прерывания
                mov eax, cr0
                mov CR0Reg,eax
                and eax,0xFFFEFFFF      // сбросить WP bit
                mov cr0, eax
        }
 
        NTCALL(OpenProcId) = NewNtOpenProcess;
 
        __asm
        {
                mov eax, CR0Reg    
                mov cr0, eax            // востановить содержимое CR0
                sti                     // разрешаем прерывания
        }
       
        //назначаем процедуру выгрузки драйвера
        DriverObject->DriverUnload = DriverUnload;
 
    return STATUS_SUCCESS;
}
 



без 100 гр. вообще ни как, а я не пью да и C++ не знаю.


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 10958
Благодарил (а): 4 раз.
Поблагодарили: 353 раз.
Что вообще никак? Хотя бы среду PB 5.11 получилось настроить под разработку дров?

И кстати, этот драйвер будет работать только на Win 2000 и WinXP.

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


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

Зарегистрирован: Пн июл 04, 2011 7:38 am
Сообщений: 728
Откуда: Россия
Благодарил (а): 29 раз.
Поблагодарили: 9 раз.
Пункты репутации: 0
Пётр писал(а):
Что вообще никак? Хотя бы среду PB 5.11 получилось настроить под разработку дров?


Вообще ни как :( , я использую пока Ваш вариант PureBasic 4.61

Пётр писал(а):
И кстати, этот драйвер будет работать только на Win 2000 и WinXP.


Ууу, тогда и смысла в нём нету... разве нельзя в него будет включить Win7/Vista/Win8

Код:
1
2
3
4
5
6
7
8
9
 
case 2195 :  //win 2k
         OpenProcId = 0x06A;
         break;
       
        case 2600 : //win xp
         OpenProcId = 0x07A;
         break;
 



Или там уже совсем другая история?

Вроде

Цитата:
If NTBuildNumber <> 2195 _ 'WIN2000 SP4
And NTBuildNumber <> 2600 _ 'WINXP SP3
And NTBuildNumber <> 3790 _ 'WIN2003 SP2
And NTBuildNumber <> 6000 _ 'VISTA SP0
And NTBuildNumber <> 6001 _ 'VISTA SP1
And NTBuildNumber <> 7600 Then 'WINDOWS7 RTM

Return FALSE
End If


Последний раз редактировалось SergeyA Вт июн 11, 2013 10:01 pm, всего редактировалось 1 раз.

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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 10958
Благодарил (а): 4 раз.
Поблагодарили: 353 раз.
SergeyA писал(а):
разве нельзя в него будет включить Win7/Vista/Win8
Теоретически можно, если знаешь ИД в таблице функций.

SergeyA писал(а):
PureBasic 4.61
Есть для 5.11, но нужно самому собирать. http://www.purebasic.fr/english/viewtop ... 14&t=53460

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 11, 2013 10:02 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 04, 2011 7:38 am
Сообщений: 728
Откуда: Россия
Благодарил (а): 29 раз.
Поблагодарили: 9 раз.
Пункты репутации: 0
Пётр писал(а):
SergeyA писал(а):
PureBasic 4.61
Есть для 5.11, но нужно самому собирать. http://www.purebasic.fr/english/viewtop ... 14&t=53460


Это я думаю не проблема, соберу на досуге.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 11, 2013 10:18 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 04, 2011 7:38 am
Сообщений: 728
Откуда: Россия
Благодарил (а): 29 раз.
Поблагодарили: 9 раз.
Пункты репутации: 0
Вот Build Number есть под разные ОС


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 10958
Благодарил (а): 4 раз.
Поблагодарили: 353 раз.
А где позиции функций в списке (то, что записывается в OpenProcId)?

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 11, 2013 10:36 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 04, 2011 7:38 am
Сообщений: 728
Откуда: Россия
Благодарил (а): 29 раз.
Поблагодарили: 9 раз.
Пункты репутации: 0
Пётр

Этого я пока не нашёл, да и пока это не так важно, у меня XP и я смогу потестировать его у себя, если будет работать то найду их


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

Зарегистрирован: Пн июл 04, 2011 7:38 am
Сообщений: 728
Откуда: Россия
Благодарил (а): 29 раз.
Поблагодарили: 9 раз.
Пункты репутации: 0
Я так понимаю OpenProcId это индекс/оффсет по которому находится функция NtOpenProcess в ядре (или где-то там...) а нет ли ядерного аналога GetProcAddress чтоб сам определял адрес NtOpenProcess, или я чушь спорол..

_________________
https://www.instagram.com/custom.software/


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

Зарегистрирован: Пн июл 04, 2011 7:38 am
Сообщений: 728
Откуда: Россия
Благодарил (а): 29 раз.
Поблагодарили: 9 раз.
Пункты репутации: 0
Для Windows 7 нашёл ординал - 369 (0x171)


Последний раз редактировалось SergeyA Ср июн 12, 2013 12:00 am, всего редактировалось 1 раз.

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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 10958
Благодарил (а): 4 раз.
Поблагодарили: 353 раз.
Это адрес в таблице SST.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 12, 2013 12:06 am 
Не в сети
профессор

Зарегистрирован: Пн июл 04, 2011 7:38 am
Сообщений: 728
Откуда: Россия
Благодарил (а): 29 раз.
Поблагодарили: 9 раз.
Пункты репутации: 0
Я не могу разобраться, в одном примере было написано что winxp - 0x07A это syscall ordinal, начал искать по этим словам, нашёл для Win 7, оказывается не то, для Vista нашёл syscalls - syscals - 'NtOpenProcess', # 0xc2 то, не то, не знаю...

_________________
https://www.instagram.com/custom.software/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 12, 2013 12:10 am 
Не в сети
профессор

Зарегистрирован: Пн июл 04, 2011 7:38 am
Сообщений: 728
Откуда: Россия
Благодарил (а): 29 раз.
Поблагодарили: 9 раз.
Пункты репутации: 0
Да, это то, вот все ординалы для Win XP, Vista, Win 7, Win 2003, для Win 8 правда нету...

_________________
https://www.instagram.com/custom.software/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 12, 2013 6:34 am 
Не в сети
PureBasic Coder
Аватар пользователя

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

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 12, 2013 7:02 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6146
Благодарил (а): 15 раз.
Поблагодарили: 162 раз.
Пункты репутации: 48
А тупо скомпилироваоь в С++?

_________________
read-only


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

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


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

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


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

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