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

Visual C++

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

Подключение DLL к проекту - Visual C++

21.12.2016, 19:19. Просмотров 450. Ответов 1

Привет всем. Как подключить DLL к проекту и как обращаться к этому DLL изнутри проекта?
Допустим, есть DLL bin.dll и есть код который вставляет его в другой процесс.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool Inject(DWORD pID, char* path)
{
    HANDLE proc_handle;
    LPVOID RemoteString;
    LPVOID LoadLibAddy;
    if (pID == 0)
        return false;
    proc_handle = OpenProcess(PROCESS_ALL_ACCESS, false, pID);
    if (proc_handle == 0)
        return false;
    LoadLibAddy = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
    RemoteString = VirtualAllocEx(proc_handle, NULL, strlen(path), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(proc_handle, RemoteString, path, strlen(path), NULL);
    CreateRemoteThread(proc_handle, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, RemoteString, NULL, NULL);
    CloseHandle(proc_handle);
    return true;
}
Как добавить библиотеку в проект (сама библиотека уже есть) и как "заинжектить" её приведённым выше кодом?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2016, 19:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подключение DLL к проекту (Visual C++):

Добавить DLL к проекту - Visual C++
Всем привет. Сделал простенькую программу с использование mfs на VS 2013 pro. У меня на компьютере программа работает идеально, а когда...

Помогите с подключением dll к проекту - Visual C++
Здравствуйте! У меня имеется вот такая библиотека dll, сделанная в Win32: // MyFirstDLL.h namespace MyFirstDLL { class...

Подключение C# класса к C++ проекту - Visual C++
Всем привет. Есть проект на C++ metro приложения. К нему нужно подключить C# класс. Казалось бы всё легко и просто, добавить в с++ проект...

Подключение mysql.h к проекту - Visual C++
Доброго времени суток, уважаемые посетители cyberforum! Не могу никак сделать путь к инклуду mysql.h Код: #include...

Как подключить dll, lib к проекту? - Visual C++
Здравствуйте! Раньше никогда этим не занимался, и длл и либ файлы не мои. Надо подключить к проекту что бы пропали ошибки ...

Подключение *.obj файла к проекту - Visual C++
Всем привет! Задали лабораторную, в которой нужно подключить внешний obj файл, написанный на ассемблере, к Турбо Паскалю. В методичке...

1
malhaz
Заблокирован
29.12.2016, 19:38 #2
Привет, Wekaurs, сделал небольшое пособие.
Dll-модуль
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
//
// Tutorial Injection Dll
//
// Copyright (c) 2016 malhaz
//
 
#include "stdafx.h"
 
#ifdef _MANAGED
#pragma managed(push, off)
#endif
 
char g_szVersion[] = "1.0";
#define mb(x)MessageBoxA(GetActiveWindow(),x,"DllModule",MB_OK|MB_ICONINFORMATION|MB_SETFOREGROUND|MB_TOPMOST);
#define mbW(x)MessageBox(GetActiveWindow(),x,L"DllModule",MB_OK|MB_ICONINFORMATION|MB_SETFOREGROUND|MB_TOPMOST);
 
void __stdcall Start()
{
    char svParentpath[512]; char svBuffer[1024];
    GetModuleFileNameA(GetModuleHandleA(NULL), svParentpath, 512);
    wsprintfA(svBuffer,
        "Version %s Compiled on %s\nParent ModuleFileName %s",
        g_szVersion, __TIMESTAMP__, svParentpath);
    mb(svBuffer);
}
 
void __stdcall Stop()
{
    //mbW(L"Stop()");
}
 
//
// Entry point: DLL
//
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch( ul_reason_for_call )
    {
        case DLL_PROCESS_ATTACH:
        DisableThreadLibraryCalls(hModule);
        Start();
        break;
 
        case DLL_PROCESS_DETACH:
        Stop(); 
        break;
    }
    return TRUE;
}
 
#ifdef _MANAGED
#pragma managed(pop)
#endif


Exe-модуль
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
106
//
// Tutorial Injection Dll
//
// Copyright (c) 2016 malhaz
//
 
#include "stdafx.h"
 
#define mb(x)MessageBox(HWND_DESKTOP,x,L"Injection Dll",0);
 
//
// Entry point.
//
int _tmain(int argc, _TCHAR* argv[])
{
    STARTUPINFOW si;
    PROCESS_INFORMATION pi; 
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi)); 
 
    if( !CreateProcessW(L"C:\\WINDOWS\\NOTEPAD.EXE",
        NULL, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi) )
    {
        mb(L"Could not spawn process");
        return EXIT_FAILURE;
    }
 
    //
    // Следующий участок не обязателен.
    //
 
    int Attempt = 0;
    HWND hwndParent = NULL;
    while( 10 != Attempt && NULL == hwndParent )
    {
        hwndParent = FindWindow(TEXT("Notepad"), NULL);
        ++Attempt;
        Sleep(100);
    }
    if( NULL == hwndParent )
    {
        mb(L"Cannot FindWindow");
        return EXIT_FAILURE;
    }
 
    BOOL Visible = FALSE;
    Attempt = 0;
    while( 10 != Attempt && Visible == FALSE )
    {
        Visible = IsWindowVisible(hwndParent);  // Окно видимо?
        ++Attempt;
        Sleep(100);
    }
    if( FALSE == Visible )
    {
        mb(L"Parent window is not visible");
        return EXIT_FAILURE;
    }// Конец не обязательного.
 
 
    #ifdef _DEBUG
        const wchar_t* Buffer = L"..\\Debug\\DllModule.dll\0";
    #else
        const wchar_t* Buffer = L"DllModule.dll\0";
    #endif
 
    size_t const Size = ( wcslen(Buffer) + 1 ) * sizeof(wchar_t);
 
    LPVOID BaseAddress;
    BaseAddress = (LPVOID)VirtualAllocEx(
        pi.hProcess, NULL, Size, MEM_COMMIT, PAGE_READWRITE);
    if( NULL == BaseAddress )
    {
        mb(L"Could not allocate memory in process");
        return EXIT_FAILURE;
    }
 
    if( 0 == WriteProcessMemory(
        pi.hProcess, BaseAddress, Buffer, Size, NULL) )
    {
        mb(L"Could not WriteProcessMemory");
        return EXIT_FAILURE;
    }
 
    HMODULE Module = GetModuleHandle(TEXT("kernel32.dll"));
    LPVOID StartAddress = (LPVOID)GetProcAddress(Module, "LoadLibraryW");
    if( NULL == StartAddress )
    {
        mb(L"Unable to locate LoadLibraryW");
        return EXIT_FAILURE;
    }
 
    HANDLE Thread;
    Thread = CreateRemoteThread(pi.hProcess, NULL, 0,
        (LPTHREAD_START_ROUTINE)StartAddress, BaseAddress, 0, 0);
    if( NULL == Thread )
    {
        mb(L"Cannot CreateRemoteThread");
        return EXIT_FAILURE;
    }
 
    mb(L"Injection - Done");
 
    return EXIT_SUCCESS;
}
сцена выглядит так
Подключение DLL к проекту


Tutorial_Injection_Dll.zip
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2016, 19:38
Привет! Вот еще темы с ответами:

Подключение папки с исходниками к проекту Visual Studio 2015 - Visual C++
Здравствуйте, Имеется папка с вложенные каталоги с файлами .cpp и .h. Возник вопрос как подключить данную папочку к проекту Visual...

Подключение DLL - Visual C++
Ребята, помогите пожалуйста, уже третий день голову ломаю. Подключаю к своей программке библиотеку швейцарских эфемерид swedll32.dll...

Подключение DLL - Visual C++
Не могу разобраться уже какой день, подключаю библиотеку, пишет что библиотека подключена а вот вункция не найдена... dll: #include...

dll динамическое подключение - Visual C++
что не правильно? #include<iostream> #include<Windows.h> #include<conio.h> typedef int(*dll_func)(); int...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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