У меня есть клиент облачной синхронизации, где я храню свои бизнес-программы, над которыми работает много работников из разных мест. Чтобы предотвратить повреждение файлов, я хочу синхронизировать облако до запуска программы.
У клиента есть демон и апплет, которые взаимодействуют по протоколу 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
Я нашел команды в декомпилированном демоне, которые интерпретируют эти команды.
Спасибо за помощь!