Вызов метода из другой программы - PullRequest
0 голосов
/ 07 июля 2019

У меня есть клиент облачной синхронизации, где я храню свои бизнес-программы, над которыми работает много работников из разных мест. Чтобы предотвратить повреждение файлов, я хочу синхронизировать облако до запуска программы. У клиента есть демон и апплет, которые взаимодействуют по протоколу RPC. Также демон и апплет используют свою собственную dll для связи RPC.

У меня появилась идея внедрить dll и вызвать функцию отправки rpc, но я понятия не имею, как это сделать.

Это все, что у меня есть.

int procID = 10884;
HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
if (process == NULL) {
    OutputDebugStringW(L"Error: the specified process couldn't be found.\n");
}

LPVOID addr = (LPVOID)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
if (addr == NULL) {
    OutputDebugStringW(L"Error: the LoadLibraryA function was not found inside kernel32.dll library.\n");
}

LPVOID arg = (LPVOID)VirtualAllocEx(process, NULL, strlen(buffer), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if (arg == NULL) {
    OutputDebugStringW(L"Error: the memory could not be allocated inside the chosen process.\n");
}

int n = WriteProcessMemory(process, arg, buffer, strlen(buffer), NULL);
if (n == 0) {
    OutputDebugStringW(L"Error: there was no bytes written to the process's address space.\n");
}

HANDLE threadID = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)addr, arg, NULL, NULL);
if (threadID == NULL) {
    OutputDebugStringW(L"Error: the remote thread could not be created.\n");
}
else {
    OutputDebugStringW(L"Success: the remote thread was successfully created.\n");
}

CloseHandle(process);
getchar();

Имя и адрес функции RPC:

Adres=0076E000
Symbol=searpc_client_call__string

Я нашел команды в декомпилированном демоне, которые интерпретируют эти команды. Спасибо за помощь!

...