Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
fcnfgtyrjd3004
1 / 1 / 0
Регистрация: 06.12.2013
Сообщений: 67
#1

Внедрение динамической библиотеки - C++

03.01.2016, 13:15. Просмотров 193. Ответов 5
Метки нет (Все метки)

C++
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
#include <windows.h>
#include <tlhelp32.h>
 
LRESULT CALLBACK WindowProcedure (HWND,UINT,WPARAM,LPARAM);
char szClassName[ ] = "0";
int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
HWND hwnd;           
MSG messages;         
WNDCLASSEX wincl;   
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;   
wincl.style = CS_DBLCLKS;               
wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon (NULL,IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL,IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = 0;               
wincl.cbClsExtra = 0;                   
wincl.cbWndExtra = 0;                   
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND+7;
if (!RegisterClassEx (&wincl))
return 0;
hwnd = CreateWindowEx (0,szClassName,"",WS_SYSMENU|WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,0,0,HWND_DESKTOP,0,hThisInstance,0 );
while (GetMessage (&messages,0,0,0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
HWND Input1,Input2;
HWND Inject;
 
 
BOOL SetPrivilege(LPSTR type) 
{
HANDLE Htoken;
TOKEN_PRIVILEGES tokprivls;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&Htoken))
{
return 0;
}
tokprivls.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, type, &tokprivls.Privileges[0].Luid);
tokprivls.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
BOOL Success =AdjustTokenPrivileges( Htoken,FALSE,&tokprivls, sizeof(tokprivls),0,0);
CloseHandle(Htoken);
return Success;
}
HANDLE GetHandle(char *proc)
{
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE Snap = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
Process32First(Snap,&pe32);
do
{
if(stricmp(pe32.szExeFile,proc)==0)
{
SetPrivilege(SE_DEBUG_NAME);
return OpenProcess(PROCESS_ALL_ACCESS,0,pe32.th32ProcessID);
}
}
while(Process32Next(Snap,&pe32));CloseHandle(Snap);
}
void InjectDll(char* Name, char *path)
{
HANDLE hProcess = GetHandle(Name);
if(hProcess)
{
int DllPath = strlen(path) + 20;
LPVOID MemSp = VirtualAllocEx(hProcess,NULL,DllPath,MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(hProcess,MemSp,path,DllPath,0);
HANDLE hThread = CreateRemoteThread(hProcess,0,0,(LPTHREAD_START_ROUTINE)GetProcAddress(LoadLibrary("Kernel32.dll"),"LoadLibraryA"), MemSp,0,0);
if(hThread)
{
WaitForSingleObject(hThread,100);
CloseHandle(hThread);
}
VirtualFreeEx(hProcess,MemSp,0,MEM_RELEASE);
}      
}
 
char proc[50],dll[260];
LRESULT CALLBACK WindowProcedure (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{  
switch (message)             
{
case WM_CREATE:    
 
 
 
Input1 = CreateWindow("Edit", "OPERATION7.exe",0,0,0,0,0,0,0,0,0);
Input2 = CreateWindow("Edit", "C:\\ole32.dll",0,0,0,0,0,0,0,0,0);
SendMessage(Input1,WM_GETTEXT,sizeof(proc),LPARAM(proc));
if(proc!=0)
SendMessage(Input2,WM_GETTEXT,sizeof(dll),LPARAM(dll));
if(dll!=0)
InjectDll(proc,dll);
FatalExit(0);       
}
return TRUE;
}
в данном случае инжект происходит из C:\\ole32.dll я чот после праздников не могу не как понять
почему если я не указываю каталог C:\\ инжекта не происходит в процесс
вопрос в том что если я инжектор и саму dll допустим на рабочий стол положу рядом и не указывая каталог C:\\
просто запишу название ole32.dll или даже так \\ole32.dll не чего не происходит
не могли бы вы подсказать как правильно сделать инжект из текущего каталога (папки и т.п) если dlll и инжект будет рядом
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2016, 13:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Внедрение динамической библиотеки (C++):

Вызов функции одной динамической библиотеки из другой динамической библиотеки - C++
Добрый день! Помогите пожалуйста разобраться со следующим вопросом. Возможно ли из одной библиотеки передать параметры для...

Подключение динамической библиотеки - C++
Всем доброго времени суток. Передо-мной стоит задача подключения собственно написанной библиотеки. И дело в том что я понятие не имею как...

Создание динамической библиотеки сортировок - C++
Всем привет, дали задание создать динамическую библиотеку с сортировками bubble и Quick. Я делаю в компиляторе dev с++ dllmain.c ...

Ошибка подключения динамической библиотеки VS 2013 - C++
Делаю всё по руководству: http://msdn.microsoft.com/ru-RU/library/ms235636.aspx В результате получаю: 1&gt;------ Сборка начата:...

Почему не передаются данные из динамической библиотеки? - C++
Когда я возвращаю указатель из функции, программа получает его вместе с данными. Динамическая библиотека: __declspec(dllexport) RGBQUAD...

Ошибка при подключении динамической библиотеки - C++
Всем привет! Помогите пожалуйста разобраться со следующим: Установил библиотеку cURL, раскидав либы и длл файлы по нужным папкам....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Убежденный
Системный программист
Эксперт С++
15550 / 7058 / 1114
Регистрация: 02.05.2013
Сообщений: 11,468
Завершенные тесты: 1
03.01.2016, 15:58 #2
Цитата Сообщение от fcnfgtyrjd3004 Посмотреть сообщение
почему если я не указываю каталог C:\\ инжекта не происходит в процесс
Потому что путь к dll получается относительный, а не абсолютный, и
создаваемый удаленный поток ищет эту dll не там, где она лежит.

Цитата Сообщение от fcnfgtyrjd3004 Посмотреть сообщение
не могли бы вы подсказать как правильно сделать инжект из текущего каталога (папки и т.п) если dlll и инжект будет рядом
Определить полный путь к каталогу, дописать туда название dll. Все.
1
fcnfgtyrjd3004
1 / 1 / 0
Регистрация: 06.12.2013
Сообщений: 67
03.01.2016, 16:31  [ТС] #3
я просто подумал что возможно сделать и без указания пути к данному каталогу если и dll и injekt лежат рядом
ну все же спасибо за ответ, а то я уже пол googla перечитал) в поисках своего ответа
думал возможно

Добавлено через 6 минут
хотел сотворить на подобие этого
http://www.youtube.com/watch?v=V5krjb_sH9s
только что бы прям из архива происходил инжект
не помещая файл в ресурсы и не хочется просто что бы dll вобщем отдельно лежала на диске
0
Somebody
2789 / 1603 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
03.01.2016, 16:41 #4
Потому что ole32 есть в KnownDLLs, с другим именем попробуй.
https://msdn.microsoft.com/ru-ru/lib...=vs.85%29.aspx

Добавлено через 2 минуты
Цитата Сообщение от fcnfgtyrjd3004 Посмотреть сообщение
только что бы прям из архива происходил инжект
не помещая файл в ресурсы и не хочется просто что бы dll вобщем отдельно лежала на диске
Теоретически, конечно, всё возможно, но это будет очень проблематично.
1
fcnfgtyrjd3004
1 / 1 / 0
Регистрация: 06.12.2013
Сообщений: 67
03.01.2016, 16:50  [ТС] #5
я и так тож пробовал переименовать
результат тот же)
0
Убежденный
Системный программист
Эксперт С++
15550 / 7058 / 1114
Регистрация: 02.05.2013
Сообщений: 11,468
Завершенные тесты: 1
03.01.2016, 17:23 #6
Цитата Сообщение от fcnfgtyrjd3004 Посмотреть сообщение
я просто подумал что возможно сделать и без указания пути к данному каталогу если и dll и injekt лежат рядом
Возможно. Но только в том случае, если current directory у этого exe указывает на этот каталог,
или он прописан для данной программы либо в dll search path, либо в переменной %Path%.
Somebody выше привел очень четкую ссылку по этой теме, т.е. как загрузчик dll
узнает, откуда ему нужно загружать эту dll, а также каков порядок поиска.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2016, 17:23
Привет! Вот еще темы с ответами:

Передача аргументов в функцию динамической библиотеки - C++
И снова здравствуйте. Я пытаюсь написать универсальный класс, который позволит мне обращаться к любым функциям динамических билиотек. ...

Создание динамической библиотеки (dll) в Dev C++ - C++
Кто умеет создавать dll библиотеки в Dev C++, вопрос к вам. Дело в том что я умею создавать header файлы, то бишь заголовочные, но в виду...

Вместо динамической библиотеки собирается статическая - C++
Добрый день! У меня вместо динамической библиотеки собирается статическая. в makefile указан ключ P_SHAREDLIB=1 сборка ...

Не видит <windows.h> в заголовочном файле динамической библиотеки - C++
Приветствую. Вопрос в теме.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.01.2016, 17:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru