Я видел аналогичный, но все же другой вопрос, поэтому просто хочу уточнить, что это не обман 13428881 (вызов функции во внедренной DLL).
Что у меня есть на данный момент: DLL, внедренная в целевой процесс, отображающая окно сообщения и занимающаяся математикой.
Что я хочу в будущем: DLL, которая может манипулировать и играть с внутренностями целевого процесса.
Следующим шагом на пути к желаемой манипуляции является вызов метода в удаленном потоке внутри процесса, в который я внедряю.
Возьмем пример: у меня есть приложение C++, в котором есть int main, допустим, оно выглядит так:
int PrintText(string text)
{
cout << text;
return 1;
}
int main()
{
while (true)
{
PrintText("From the DLL");
}
}
Итак, это прекрасно, мое целевое приложение в настоящее время печатает некоторый текст, и, кажется, делает это очень счастливо. Он рассылает спам с невероятной скоростью, но я могу замедлить его, используя потоки, спящий режим и т. д., если мне нужно. Дело в том, что это не проблема, код здесь не компилировался и не тестировался, и я не собираюсь использовать именно этот код. Я на самом деле работаю с игрой.
Теперь предположим, что я создаю указатель на метод PrintText и знаю его адрес в этом процессе. Как мне вызвать его извне, передав аргументы?
На местном уровне, я думаю, это будет выглядеть примерно так:
int i;
int (*PrintSomeText)(string) = PrintText;
Затем я мог бы вызвать эту функцию, используя ссылку, например:
i = operation("Text to be printed", PrintSomeText);
По моей теории, это должно объявить целое число с именем i, затем определить указатель на метод, который возвращает int, принимает одну строку в качестве параметра, а указатель сохраняет значение указателя, который был в PrintText. (Или что-то в этом роде).
Очень хорошо, так что я могу вызывать свои собственные функции через указатель, это здорово, на самом деле взломано. Я действительно поразил себя этой способностью, и теперь я действительно чувствую себя сверхчеловеком. Я пойду спасу детей или что-то в этом роде, брб.
Назад, так что теперь я хочу продолжить немного дальше и сделать следующий шаг. Допустим, я знаю, что метод находится по адресу 100 в целевом процессе (десятичном, я, скорее всего, сделаю это в шестнадцатеричном, так как я использую CheatEngine/OllyDBG для поиска методов в целевом процессе, но для этого примера мы' останусь простым).
Я предполагаю, что моя внедренная DLL полностью получает собственное пространство, имеет ли она более высокий доступ к целевому процессу? Как я могу это узнать?
Спасибо за ваше время, Джош
Изменить: небольшая заметка, я просматриваю учебник по С++, и до сих пор он оказался очень полезным. Я заметил, что забыл включить свой метод работы, поэтому приношу свои извинения за то, что он отсутствует. Если потребуется, дайте мне знать. Спасибо!
Редактировать № 2: я только что сделал компилируемый код, чтобы проверить это, так как я написал большую часть этого свободного чтения из книги без IDE, и IDE, наконец, настроила себя, так что вот код, который я сейчас работать с
#include "stdafx.h"
#include <iostream>
using namespace std;
int PrintText(char * Text)
{
cout << Text << endl;
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int (*Print)(char*) = PrintText;
char Text[] = "Hello, world!";
PrintText(Text);
int x = (*Print)("Oh my word, it really works!");
cin.get();
return 0;
}
Обратите внимание, что я еще не запустил его на неопределенный срок, так что да, извините, я скоро добавлю.