vaxobey
Master Üye
- Katılım
- 16 Mar 2024
- Mesajlar
- 1,273
- Beğeniler
- 268
Kod:
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
#include <string>
#include <vector>
// Hedef process adını bulmak için basit bir fonksiyon (gerçek uygulamada daha sağlam olmalı)
DWORD FindProcessId(const std::wstring& processName) {
PROCESSENTRY32 processInfo;
processInfo.dwSize = sizeof(processInfo);
HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (processesSnapshot == INVALID_HANDLE_VALUE) {
return 0;
}
Process32First(processesSnapshot, &processInfo);
if (processName.compare(processInfo.szExeFile) == 0) {
CloseHandle(processesSnapshot);
return processInfo.th32ProcessID;
}
while (Process32Next(processesSnapshot, &processInfo)) {
if (processName.compare(processInfo.szExeFile) == 0) {
CloseHandle(processesSnapshot);
return processInfo.th32ProcessID;
}
}
CloseHandle(processesSnapshot);
return 0;
}
int main() {
// Enjekte edilecek DLL'in tam yolu (injector.exe ile aynı klasörde olduğunu varsayalım)
char dllPath[MAX_PATH];
GetFullPathNameA("executor_dll.dll", MAX_PATH, dllPath, NULL);
// FiveM process adları değişebilir, en yaygın olanları deneyebilirsiniz.
// Örnek: "FiveM_GTAProcess.exe", "FiveM_b2060_GTAProcess.exe" vb.
// Doğru process adını Görev Yöneticisi'nden kontrol edin.
std.wstring fivemProcessName = L"FiveM_GTAProcess.exe"; // Bu adı FiveM sürümünüze göre ayarlayın
std::wcout << L"FiveM process aranıyor: " << fivemProcessName << std::endl;
DWORD processId = 0;
// Farklı FiveM process adlarını deneyebilirsiniz
std::vector<std::wstring> possibleProcessNames = {
L"FiveM_GTAProcess.exe",
L"FiveM_b2189_GTAProcess.exe", // Örnek build numaraları
L"FiveM_b2372_GTAProcess.exe",
L"FiveM.exe" // Bazen ana process bu olabilir
};
for (const auto& name : possibleProcessNames) {
processId = FindProcessId(name);
if (processId != 0) {
fivemProcessName = name;
std::wcout << L"Process bulundu: " << fivemProcessName << L" (PID: " << processId << L")" << std::endl;
break;
}
}
if (processId == 0) {
std::cerr << "Hata: FiveM process bulunamadı. FiveM'in çalıştığından ve process adının doğru olduğundan emin olun." << std::endl;
system("pause");
return 1;
}
std::cout << "DLL enjekte ediliyor: " << dllPath << std::endl;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
if (hProcess == NULL) {
std::cerr << "Hata: Process açılamadı. Yönetici olarak çalıştırmayı deneyin. Hata kodu: " << GetLastError() << std::endl;
system("pause");
return 1;
}
void* allocMem = VirtualAllocEx(hProcess, NULL, strlen(dllPath) + 1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (allocMem == NULL) {
std::cerr << "Hata: Hedef process'te bellek ayrılamadı. Hata kodu: " << GetLastError() << std::endl;
CloseHandle(hProcess);
system("pause");
return 1;
}
if (!WriteProcessMemory(hProcess, allocMem, dllPath, strlen(dllPath) + 1, NULL)) {
std::cerr << "Hata: Hedef process'e yazılamadı. Hata kodu: " << GetLastError() << std::endl;
VirtualFreeEx(hProcess, allocMem, 0, MEM_RELEASE);
CloseHandle(hProcess);
system("pause");
return 1;
}
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, allocMem, 0, NULL);
if (hThread == NULL) {
std::cerr << "Hata: Remote thread oluşturulamadı. Hata kodu: " << GetLastError() << std::endl;
VirtualFreeEx(hProcess, allocMem, 0, MEM_RELEASE);
CloseHandle(hProcess);
system("pause");
return 1;
}
std::cout << "DLL başarıyla enjekte edilmiş olabilir. Hedef process'te DLL'in DllMain fonksiyonu çalıştırılacak." << std::endl;
std::cout << "DLL'in loglarını veya etkilerini kontrol edin." << std::endl;
CloseHandle(hThread);
// Belleği hemen serbest bırakmak DLL'in çalışmasını engelleyebilir, bu yüzden process kapanana kadar tutulabilir
// veya DLL kendi kendini unload ettikten sonra serbest bırakılabilir.
// VirtualFreeEx(hProcess, allocMem, 0, MEM_RELEASE); // Şimdilik yorum satırı
CloseHandle(hProcess);
system("pause");
return 0;
}