Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ и WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
MickeyBlueEyes
Студент
120 / 131 / 39
Регистрация: 07.04.2011
Сообщений: 503
#1

CreateRemoteThread или же Dll инжект - C++ WinAPI

14.01.2013, 18:36. Просмотров 2234. Ответов 2
Метки нет (Все метки)

Привествую про )

Вот есть тестовая dll из банальным содержимим которая при загрузке создаcт файл на диске "C":

http://www.cyberforum.ru/win-api/thread554653.html
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
#include <stdio.h>
#include <windows.h>
 
//#define DLL_API __declspec(dllexport)
 
 
void APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved){
    
    FILE * fo;
    
    switch(fdwReason){ 
 
        case DLL_PROCESS_ATTACH:
     
            fo = fopen("C:\\test.txt", "w+");
            fclose(fo);
 
            break;
 
        case DLL_THREAD_ATTACH: break;
 
        case DLL_THREAD_DETACH: break;
 
        case DLL_PROCESS_DETACH: break;
    }
   
}
И есть сам инжектор, самые стандартные способы:
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
#include <stdio.h>
#include "windows.h"
#include "string.h"
 
void main(){
 
    const wchar_t path[] = L"C:\\hack.dll";
 
    int pid = 2456;
    
    HANDLE Thread;
 
    HMODULE ll = GetModuleHandle(L"kernel32.dll");
 
    FARPROC func = GetProcAddress(ll, "LoadLibraryW");
 
    HANDLE op = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
 
    LPVOID arg_address = VirtualAllocEx(op, 0, wcslen(path),  MEM_COMMIT, PAGE_EXECUTE_READWRITE);
 
    WriteProcessMemory(op, arg_address, path, wcslen(path), 0);
 
    Thread = CreateRemoteThread(op, 0, 0, func, arg_address, 0, 0);
 
    if(Thread == NULL){
        printf("Thread not started!");
    } else {
        printf("Thread started.");
    }
    
    getchar();
 
}
Результат "Thread started", всё хорошо, но потом походу не выполняется, файл не создаётся.
Проводил банальный тест dll через LoadLibraryW(), то всё загружается, если поменять LoadLibraryW на LoadLibrary, то любое приложение завершается с ошибкой, от калькулятора до чего-то по серьёзней и файл тоже не создаётся. После каждой строчки проверял на ГетЛастЕррор и по нулям, единственный варнинг:
C
1
Thread = CreateRemoteThread(op, 0, 0, func, arg_address, 0, 0);
\main.c(23) : warning C4113: 'FARPROC' отличается в списках параметров от 'LPTHREAD_START_ROUTINE'

Буду признателен за любую помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2013, 18:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос CreateRemoteThread или же Dll инжект (C++ WinAPI):

Инжект без dll
В общем рассказал мне препод способ как он делал инжект без динамической...

Как узнать какие dll Загружает процесс или dll
Проблема вот в чем: Нужно определить какие dll загружает процесс. Есть ли...

CreateRemoteThread
Пытаюсь воспользоваться этой функцией чтобы запустить в другом процессе свой...

Не работает безопасное завершение дочерних процессов с использованием CreateRemoteThread
Необходимо завершать процесс и все его дочерние процессы в программе на...

Инжект треда из самой длл
Можно ли проинжектить поток из вызываемой dll? В игре можно вызвать функцию из...

2
WhiteP
611 / 209 / 32
Регистрация: 20.11.2012
Сообщений: 433
Завершенные тесты: 1
14.01.2013, 19:19 #2
Не забывай про нуль-терминатор. Как LoadLibrary определит конец строки по твоему?
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
wcslen(path)+2
1
MickeyBlueEyes
Студент
120 / 131 / 39
Регистрация: 07.04.2011
Сообщений: 503
14.01.2013, 19:36  [ТС] #3
Цитата Сообщение от WhiteP Посмотреть сообщение
Не забывай про нуль-терминатор. Как LoadLibrary определит конец строки по твоему?
Точно ) попробывал добавить, результат тот же. Варнингов нет.

Добавлено через 4 минуты
Всё биг спс, поменял на LoadLibraryA, и +1 к длине и всё заработало.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2013, 19:36
Привет! Вот еще темы с решениями:

Не срабатывает инжект в 64-битные процессы
Написал dll которую хочу подгружать в другие процессы. ос win7 x64. dll...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL...

Можно ли получить список функций из DLL, не имея .lib или .h файла?
Или другими словами, можно ли позаимствовать библиотеку, находящуюся рядом с...

инжект кода(не dll)
писал на борланде 6. вылетает на функции CreateRemoveThread , в чём ошибка?...


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

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

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