Main.c und procfunc.c fehler?
-
Dann hast du womöglich das falsche Verzeichnis als Projektverzeichnis angegeben.
-
So jetzt versteh ihr die Welt nicht mehr.So die Fehler hab ich weg bekommen ich hab die " " in < > gemacht.
So jetzt hab ich neue fehler
------ Erstellen gestartet: Projekt: DMA HÄXXN, Konfiguration: Debug Win32 ------
Kompilieren...
main.c
c:\dokumente und einstellungen\keller\desktop\neuer ordner\main.c(2) : fatal error C1083: Datei (Include) kann nicht geöffnet werden: "resource.h": No such file or directory
procfunc.c
c:\dokumente und einstellungen\keller\desktop\neuer ordner\procfunc.c(2) : fatal error C1083: Datei (Include) kann nicht geöffnet werden: "procfunc.h": No such file or directory
Code wird generiert...
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\keller\Desktop\Neuer Ordner\DMA_HÄXXN___Win32_Debug\BuildLog.htm" gespeichert.
DMA HÄXXN - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========So da hab ich aber nichts mit #inlcude...
-
Vielleicht solltest du nicht nur die Fehlermeldungen zeigen, sondern auch den Code, der sie ausgelöst hat

-
Das ist jetzt die Datei resource.h
//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by rsrc.rc // #define IDD_DLGMAIN 1000 #define IDC_ABOUT 1001 #define IDC_EXIT 1002 #define IDC_STATUSTEXT 1003 #define IDC_KEY0 1010 #define IDC_KEY1 1011 #define IDC_KEY2 1012 #define IDC_KEY3 1013 #define IDC_KEY4 1014 #define IDC_KEY5 1015 #define IDC_KEY6 1016 #define IDC_KEY7 1017 #define IDC_KEY8 1018 #define IDC_KEY9 1019 #define IDC_KEYPB 1030 #define IDC_KEYZM 1031 #define IDC_KEYDH 1032 #define IDC_KEYZM2 1033 #define IDC_KEYZM3 1035 #define IDC_STAT0 1100 #define IDC_STAT1 1101 #define IDC_STAT2 1102 #define IDC_STAT3 1103 #define IDC_STAT4 1104 #define IDC_STAT5 1105 #define IDC_STAT6 1106 #define IDC_STAT7 1107 #define IDC_STAT8 1108 #define IDC_STAT9 1109 #define IDC_STATPB 1130 #define IDC_STATZM 1131 #define IDC_STATZM2 1132 #define IDC_NAME0 1200 #define IDC_NAME1 1201 #define IDC_NAME2 1202 #define IDC_NAME3 1203 #define IDC_NAME4 1204 #define IDC_NAME5 1205 #define IDC_NAME6 1206 #define IDC_NAME7 1207 #define IDC_NAME8 1208 #define IDC_NAME9 1209 #define IDC_NAMEPB 1230 #define IDC_NAMEZM 1231 #define IDC_NAMEDH 1232 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 107 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1024 #define _APS_NEXT_SYMED_VALUE 101 #endif #endifUnd das ist procfunc.h
#pragma once BOOL Peek(HANDLE gamePROC,DWORD Address, DWORD Count,void * save); BOOL Poke(HANDLE gamePROC,DWORD Address, LPVOID write, DWORD Count); DWORD GetPID(char *ExeName); DWORD GetDLLBase(DWORD pid,char* DllName); BOOL InjectDLL(LPCTSTR sLibName,DWORD dwProcID); BOOL EjectDLL(LPCTSTR sLibName,DWORD dwProcID); BOOL MemCopyEx(HANDLE hProcess,DWORD dwFrom,DWORD dwTo,DWORD dwSize); DWORD CreateCopy(DWORD dwBase, DWORD dwSize); DWORD CreateCopyEx(HANDLE hProcess, DWORD dwBase, DWORD dwSize); BOOL DeleteCopy(DWORD dwBase, DWORD dwSize); BOOL DeleteCopyEx(HANDLE hProcess, DWORD dwBase, DWORD dwSize); BOOL LoadSeDebugPrivilege();
-
Ich denke er meint eher die Datei, wo du die beiden Dateien verwendest.
-
#include <windows.h> #include <resource.h> #include <procfunc.h> #include <cheats.h> #include <log.h> HWND dlg; //Handle für das Fenster // Funktionsdeklarationen void ReadOriginalCode(); void DisableAllHax(); void RedirectAddresses(); void AttachGame(); void CopyOriginalCode(); BOOL Initialize(); BOOL DeInitialize(); void SetStatusText(LPCTSTR Text); ////////////////////////////////////////////////////////////////////////////////////////// void ReadOriginalCode(){ ///////////////////////////////////////////////////////////////////////////////////////// // Ab Hier werden alle originalen Werte gespeichert bevor ein Hack sie verändern kann // // damit man später diese Codes wieder schreiben kann um eine toggle Funktion zu haben // ///////////////////////////////////////////////////////////////////////////////////////// if (!gameRunning) return; ///////////////////////////////////////////////////////////////////////////////////// // Ab hier beginnt der Static Basepointer Abschnitt in dem die Addressen gespeichert werden Peek(gamePROC,gameExeBase+CHBase,sizeof(tmpBase1),&tmpBase1); // ab Hier Original Cursor Peek(gamePROC,tmpBase1+CHAdd1,sizeof(tmpBase2),&tmpBase2); CHAddr = tmpBase2 + CHAdd2; Peek(gamePROC,gameDllBase+NFBase,sizeof(NFBase),&tmpBase1);// ab Hier NoFog NFAddr = tmpBase1 + NFAdd; Peek(gamePROC,NFAddr,sizeof(NFHack),&NFOrg); // Fogweite Peek(gamePROC,gameDllBase+VDBase,sizeof(VDBase),&tmpBase1);// ab Hier Viewdistance VDAddr = tmpBase1 + VDAdd; Peek(gamePROC,VDAddr,sizeof(VDHack),&VDOrg); // Sichtweite Peek(gamePROC,gameDllBase+TVBase,sizeof(TVBase),&tmpBase1);// ab Hier Static TV TVAddr = tmpBase1 + TVAdd; WriteLog("Static TV DMA @ 0x%08X",TVAddr); Peek(gamePROC,gameDllBase+NSBase,sizeof(NSBase),&tmpBase1);// ab Hier No Sky NSAddr = tmpBase1 + NSAdd; WriteLog("Sky DMA @ 0x%08X",NSAddr); } void DisableAllHax(){ /////////////////////////////////////////////////////////////////////// // Hier werden die originalen werte in alle Addressen geschrieben // // und alle Hax ausgeschaltet // /////////////////////////////////////////////////////////////////////// SetDlgItemText(dlg,IDC_STAT4,"Off"); SetDlgItemText(dlg,IDC_STAT5,"0"); SetDlgItemText(dlg,IDC_STAT6,"Off"); SetDlgItemText(dlg,IDC_STAT7,"Off"); SetDlgItemText(dlg,IDC_STAT8,"Off"); //Hackstatus auf Aus isCHOn=isNFOn=isVDOn=isFCOn=isZMOn=isTVOn=isNSOn=FALSE; if (!gameRunning) return; // DMA Hacks Poke(gamePROC,CHAddr,&CHOrg,sizeof(CHOrg)); // Original Cursor schreiben Poke(gamePROC,NFAddr,&NFOrg,sizeof(NFOrg)); // Original Fog schreiben if (FCAddr) Poke(gamePROC,FCAddr,&FCOrg,sizeof(FCOrg)); // Original Fog schreiben Poke(gamePROC,VDAddr,&VDOrg,sizeof(VDOrg)); // Original ViewDistance schreiben if (ZM1Addr) Poke(gamePROC,ZM1Addr,&ZM1Org,sizeof(ZM1Org)); // Original Zoom schreiben if (ZM2Addr) Poke(gamePROC,ZM2Addr,&ZM2Org,sizeof(ZM2Org)); Poke(gamePROC,NSAddr,&NSOrg,sizeof(NSOrg)); // No Sky } BOOL Initialize(){ hooksInjected=(InjectDLL(hookDll,gamePID)); if (hooksInjected) SetStatusText("Anti SS injected"); AttachGame(); if (gameRunning){ Sleep(500); ReadOriginalCode(); } return TRUE; } BOOL Deinitialize(){ DisableAllHax(); CloseHandle(gamePROC); return TRUE; } ////////////////////////////////////////////////////////////////////////////////////////// void AttachGame() {// Diese Procedure sorgt dafür das der Prozess immer geöffnet ist um darin zu schreiben // sollte dieser nicht geöffnet sein dann ist gameRunning FALSE CloseHandle(gamePROC); // altes Handle von OpenProcess schließen gamePID = GetPID(gameExe); // ProcessID von Game ermitteln gameDllBase = GetDLLBase(gamePID,gameDll); // Base gameRunning = (gamePID != 0); if (gameRunning) { gamePROC=OpenProcess(PROCESS_ALL_ACCESS,0,gamePID); // BF2 Prozess öffnen und Handle speichern } } void TimerProc(){// Diese Procedure wird bei jedem Interval des Timer ausgeführt AttachGame(); //Spiel suchen und Prozess öffnen wenn gefunden if (!gameRunning){ // solange Spiel nicht läuft, nur diesen Block ausführen if (!firstRun){ firstRun = TRUE; // Wenn der Prozess weg ist erststart wieder TRUE DisableAllHax(); // Cheatstaus alle aus } SetStatusText("Warte auf BF2142..."); // Text im Fenster ändern return; // Solange BF2 nicht gefunden wird bricht die Procedure hier ab } // erstes mal seit Prozessstart hier angekommen und Spiel läuft! if (firstRun && gameRunning){ SetStatusText("BF2142 gefunden! 10 sek. warten"); // Text im Fenster ändern Sleep(10000); // 20 Sekunden Warten Initialize(); SetStatusText("Hotkeys aktiviert"); // Text im Fenster ändern firstRun = FALSE; // erstesmal auschalten } ///////////////////////////////////////////////////////////////////////////////////// // Hier wird geprüft ob ein hack an ist und ob er wiederaufgerufen werden soll bei // // jedem Intervall z.B. RedDot damit er immer gezeichnet wird // ///////////////////////////////////////////////////////////////////////////////////// // Crosshairtest Peek(gamePROC,CHAddr,sizeof(CHHack),&CHAkt); if ((isCHOn) && (CHHack != CHAkt)) Poke(gamePROC,CHAddr,&CHHack,sizeof(CHHack)); //Hack schreiben // Zoomtest if (ZM1Addr){ Peek(gamePROC,ZM1Addr,sizeof(ZMAkt),&ZMAkt); //Aktuellen Zoom Speichern //SetDlgItemText(dlg,IDC_STATZM2,(char*) ZMAkt); if (ZM1Hack == ZMAkt){ isZMOn = TRUE; SetDlgItemText(dlg,IDC_STATZM,"On"); }else{ isZMOn = FALSE; SetDlgItemText(dlg,IDC_STATZM,"Off"); } } // Commandertest if (FCAddr){ Peek(gamePROC,FCAddr,sizeof(FCHack),&FCAkt); if ((isFCOn) && (FCHack != FCAkt)) Poke(gamePROC,FCAddr,&FCHack,sizeof(FCHack)); } ReadProcessMemory(hand,(void*)0xA8BF28,dwBuffer1,sizeof(dwBuffer1),NULL); ReadProcessMemory(hand,(void*)(dwBuffer1+0x6C),&dwLeaderBase,sizeof(dwLeaderBase),NULL); dwTeamValue = dwLeaderBase + 0xD8; if(GetAsyncKeyState(VK_F10)) { if(dwTeamValue == 0x01) { WriteProcessMemory(hand,(void*)(dwTeamValue),&two,1,NULL); } else { WriteProcessMemory(hand,(void*)(dwTeamValue),&one,1,NULL); } } else if(GetAsyncKeyState(TeamKey)){ // Team Switch Peek(gamePROC,gameExeBase+TSBase,sizeof(tmpBase1), &tmpBase1);// ab Hier Teamswitch Peek(gamePROC,tmpBase1+TSAdd1,sizeof(tmpBase2), &tmpBase2); TSAddr = tmpBase2 + TSAdd2; Peek(gamePROC,TSAddr,sizeof(TSAkt),&TSAkt); if (TSAkt==1){ Poke(gamePROC,TSAddr,&TS2,sizeof(TS2)); }else Poke(gamePROC,TSAddr,&TS1,sizeof(TS1)); } else if (GetAsyncKeyState(VK_DELETE)){ // [Entf]ernen Taste DisableAllHax(); // Alle Hacks ausschalten und Originalwerte schreiben } } BOOL CALLBACK DialogProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ switch (message){ // Message übersetzen damit wir abfragen können case WM_INITDIALOG: // Wird beim erstellen unseres Fensters ausgeführt dlg = hwnd; SetTimer(hwnd,1001,tmrInterval,NULL); return TRUE; // Funktion beenden und True übergeben case WM_COMMAND: // Wird beim anclicken eines Buttons ausgeführt switch (LOWORD(wParam)){ // LOWORD(wParam) enthält die Message case IDC_EXIT: // Exit wurde gedrückt EndDialog (hwnd, 0); // Fenster schließen return TRUE; } return TRUE; case WM_DESTROY: // Wird beim beenden unseres Programs aufgerufen Deinitialize(); PostQuitMessage(0); return TRUE; case WM_CLOSE: // Wird beim druck auf Ende ausgeführt PostQuitMessage(0); return TRUE; case WM_TIMER: // Bei jedem Intervall vom Timer wird diese Message versendet TimerProc(); // timer ausführen return TRUE; } return FALSE; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { DialogBox(hInstance,MAKEINTRESOURCE(IDD_DLGMAIN), NULL,DialogProc); // DialogBox aus einer Resource erstellen mit Callback an DialogProc return 0; // Hier kommt man erst hin wenn die Dialogbox geschlossen wird } [cpp]void SetStatusText(LPCTSTR Text){ SetDlgItemText(dlg,IDC_STATUSTEXT,Text); }#include <windows.h>
#include <procfunc.h>
#include <tlhelp32.h>
/BOOL Peek(HANDLE gamePROC,DWORD Address, DWORD Count,void * save){
// Diese Function Liest aus dem Speicher des Prozesses "proc" ab der Addresse "Address"
// "Count" Bytes und speichert diese in "save". Wenn alles erfolgreich ist wird TRUE übergeben
UINT iRPM;
DWORD pStateOld, pStateDummy;
DWORD bw; // var für RPMiRPM = 0;
if (gamePROC != 0){// Wenn gefunden
//rechte im Speicher auf ALL_ACCESS
if (VirtualProtectEx(gamePROC,(PDWORD)(Address),Count,PAGE_READWRITE,&pStateOld)){
// Ab Address Bytes lesen
iRPM = ReadProcessMemory(gamePROC, (PDWORD)(Address),save, Count, &bw);
//rechte im Speicher wieder standard
VirtualProtectEx(gamePROC,(PDWORD)(Address),Count,pStateOld,&pStateDummy);
}
}
return ((iRPM!=0)&(bw==Count));
}BOOL Poke(HANDLE gamePROC,DWORD Address, void *write, DWORD Count){
// Diese Function schreibt in den Speicher des Prozesses "proc" ab der Addresse "Address"
// "write".Count ist die große in Bytes. Wenn alles erfolgreich ist wird TRUE übergeben
UINT iWPM;
DWORD pStateOld, pStateDummy;
DWORD bw; // var für WPM
MEMORY_BASIC_INFORMATION mbi;iWPM = 0;
if (gamePROC != 0){// Wenn gefunden
//Information über den gewählten Speicherbereich holen
VirtualQueryEx(gamePROC,(PDWORD)Address,&mbi,sizeof(MEMORY_BASIC_INFORMATION));
//rechte im Speicherbereich auf READWRITE
if (VirtualProtectEx(gamePROC,(PDWORD)mbi.BaseAddress,mbi.RegionSize,PAGE_READWRITE,&pStateOld)){
// Ab Address Bytes schreiben wenn Rechte erfolgreich gesetzt
iWPM = WriteProcessMemory(gamePROC, (PDWORD)(Address),write, Count, &bw);
//rechte im Speicherbereich wieder standard
VirtualProtectEx(gamePROC,(PDWORD)mbi.BaseAddress,mbi.RegionSize,pStateOld,&pStateDummy);
}}
return (bw==Count);
}DWORD GetPID(char *ExeName){
// Diese Funktion gibt die ProzessID von "EXEName" in der Prozessliste zurück
HANDLE snapProc;
PROCESSENTRY32 pe32;// Prozess finden
snapProc = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(snapProc == INVALID_HANDLE_VALUE) return 0; // Wenn kein gültiges Suchhandle dann Funktionsabbruch
pe32.dwSize = sizeof(PROCESSENTRY32); // Informationen Initialisieren
if(Process32First(snapProc,&pe32)){ // Wenn 1. Prozess gefunden
do{ // Schleifen anfang
if (stricmp(ExeName,pe32.szExeFile)==0){; // Ist Prozess.Exename = BF2 dann
CloseHandle(snapProc); // Suchhandle schließen
return pe32.th32ProcessID; // ProcessID übergeben und Funktion beenden
}
} while(Process32Next(snapProc,&pe32));
} //Sleife solange Prozesse gefunden werden
CloseHandle(snapProc); // Suchhandle schließen
return 0;
}DWORD GetDLLBase(DWORD pid,char* DllName){
//Diese Function liest die Base Addresse des Moduls "DLLName" aus dem Prozess mit der ID "pid"
HANDLE snapMod;
MODULEENTRY32 me32;// Modul im Prozess finden
snapMod = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid); //Suchhandle auf alle Module im Process iProcID
me32.dwSize = sizeof(MODULEENTRY32); // Informationen vorbereiten
if (Module32First(snapMod, &me32)){ // Erstes Modul finden und informationen speichern
do{ // Solange noch module gefunden werden
if (stricmp(DllName,me32.szModule) == 0){ // Wenn aktuell gefundenes Modul.Name mit übergebenem DLLName übereinstimmt
CloseHandle(snapMod); //Suchhandle schließen
return (DWORD) me32.modBaseAddr; // Dll Base Addresse speichern
}
}while(Module32Next(snapMod,&me32));
}
// Hier kommt man nur an wenn das Modul nicht gefunden wurde
CloseHandle(snapMod); // Suchhandle schließen
return 0; // 0 übergeben
}BOOL InjectDLL(LPCTSTR sLibName,DWORD dwProcID){
// Diese Function Injeziert ein Modul "sLibName" in den Prozess mit der ID "dwProcID"
// Wenn erfolgreich injeziert wird TRUE übergeben
DWORD dwLLA,dwTID,dwMemSize,dwTargetMemory,hMod;
HANDLE hProc,hThread;
char fullLibName[MAX_PATH];// Wenn die DLL bereits im Prozess Procedure beenden
if (GetDLLBase(dwProcID,(char *)sLibName)!=0) return TRUE;
// Prozess öffnen mit vollzugriff
hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcID);
if (!hProc){
return FALSE;
}
// kompletter Pfad und dateiname ermitteln
if (SearchPath(NULL,sLibName,NULL,MAX_PATH,fullLibName,0)){
// Größe des vollen Dll-Namens ermittelndwMemSize = strlen(fullLibName)+1;
}else return FALSE;
// Speicher im Game für DllName reservieren
dwTargetMemory = (DWORD) VirtualAllocEx(hProc,NULL,dwMemSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
// Addresse der Function LoadLibrary ermitteln
dwLLA = (DWORD) GetProcAddress(GetModuleHandleA("kernel32.dll"),"LoadLibraryA");
// Wenn Addresse gefunden und Speicher allokiert
if ((dwLLA!=0) & (dwTargetMemory!=0)){
// Modulname in Prozess schreiben
Poke(hProc,dwTargetMemory,(void *)fullLibName,dwMemSize);
// Thread im Process Prozess starten der LoadLibrary ausführt
hThread = CreateRemoteThread(hProc,NULL,0, (void *)dwLLA,(void *)dwTargetMemory,0,&dwTID);
// auf den Thread warten bis er fertig ist
WaitForSingleObject(hThread,INFINITE);
// LoadLibrary erfolgreich?
GetExitCodeThread(hThread,&hMod);
// Handle des Threads schließen
CloseHandle(hThread);
}
// Speicher und Handles schließen
if (dwTargetMemory) VirtualFreeEx(hProc,(PDWORD)dwTargetMemory,dwMemSize,MEM_DECOMMIT);
if (hProc)CloseHandle(hProc);
// Wenn DLL in Prozess TRUE übergeben
if (GetDLLBase(dwProcID,(char *)sLibName)!=0) return TRUE;
return FALSE;
}BOOL EjectDLL(LPCTSTR sLibName,DWORD dwProcID){
// Diese Function Entlädt das Modul "sLibName" in den Prozess mit der ID "dwProcID"
// Wenn erfolgreich entladen wird TRUE übergeben
DWORD dwFL,dwTID;
PBYTE dwModuleHandle = 0;
DWORD dwCRTResult;
HANDLE hProc,hThread;// DLLBase (DWORD) als PBYTE schreiben
dwModuleHandle=(PBYTE) GetDLLBase(dwProcID,(char *)sLibName);
// Wenn die DLL bereits im Prozess beendet
if (!dwModuleHandle) return TRUE;
// Prozess öffnen mit vollzugriff
hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcID);
if (!hProc) return FALSE;// Addresse der Function FreeLibrary ermitteln
dwFL = (DWORD) GetProcAddress(GetModuleHandleA("kernel32.dll"),"FreeLibrary");
if ((dwFL) && (dwModuleHandle)){
// Thread im Process Prozess starten der LoadLibrary ausführt
hThread = CreateRemoteThread(hProc,NULL,0, (void )dwFL,(void)dwModuleHandle,0,&dwTID);
// auf den Thread warten bis er fertig ist
WaitForSingleObject(hThread,INFINITE);
// Ergebnis
GetExitCodeThread(hThread,&dwCRTResult);
// Handle des Threads schließen
CloseHandle(hThread);
}
// Speicher und Handles schließen
if (hProc)CloseHandle(hProc);
// Wenn DLL in Prozess TRUE übergeben
if (!GetDLLBase(dwProcID,(char *)sLibName)) return TRUE;
return FALSE;
}BOOL MemCopyEx(HANDLE hProcess,DWORD dwFrom,DWORD dwTo,DWORD dwSize){
// Diese Function kopiert im Prozess "hProcess" den Bereich ab "dwFrom" mit der
// größe "dwSize" an die Addresse "dwTo" und übergibt TRUE wenn erfolgreich//Speicher für Buffer reservieren
PBYTE dwBuffer = (PBYTE)VirtualAlloc(0,dwSize,MEM_COMMIT,PAGE_READWRITE);
// Lesen und Zweischenspeichern
if (Peek(hProcess,dwFrom,dwSize,dwBuffer)){
// Zwischenspeicher schreiben
if (Poke(hProcess,dwTo,dwBuffer,dwSize)){
// Zwischenspeicher leeren
VirtualFree(dwBuffer,dwSize,MEM_RELEASE);
// Function beenden
return TRUE;
}
}
// Zwischenspeicher leeren
VirtualFree(dwBuffer,dwSize,MEM_RELEASE);
return FALSE;
}DWORD CreateCopy(DWORD dwBase, DWORD dwSize){
// Diese Function kopiert im aktuellen Prozess den Bereich "dwBase" mit der größe "dwSize"
// und übergibt wenn erfolgreich die Addresse an die es kopiert worden ist//Speicher für Buffer reservieren
PBYTE dwBuffer = (PBYTE)VirtualAlloc(0,dwSize,MEM_COMMIT,PAGE_READWRITE);
if (!dwBuffer) return 0;
//Speicher lesen und speichern
if (Peek(GetCurrentProcess(),dwBase,dwSize,dwBuffer)){
// Zwischenspeicher leeren
VirtualFree(dwBuffer,dwSize,MEM_RELEASE);
// Addresse des gespeicherten zurückgeben
return (DWORD) dwBuffer;
}
// Zwischenspeicher leeren
VirtualFree(dwBuffer,dwSize,MEM_RELEASE);
return 0;
}DWORD CreateCopyEx(HANDLE hProcess, DWORD dwBase, DWORD dwSize){
// Diese Function kopiert im Prozess "hProcess" den Bereich "dwBase" mit der größe "dwSize"
// und übergibt wenn erfolgreich die Addresse an die es kopiert worden ist
DWORD dwBufferAddr;//Speicher für Buffer reservieren
dwBufferAddr = (DWORD) VirtualAllocEx(hProcess,0,dwSize,MEM_COMMIT,PAGE_READWRITE);
if (!dwBufferAddr) return 0;
//Speicher kopieren
if (MemCopyEx(hProcess,dwBase,dwBufferAddr,dwSize)){
return (DWORD) dwBufferAddr;
}
// Zwischenspeicher leeren
return 0;
}BOOL DeleteCopy(DWORD dwBase, DWORD dwSize){
return VirtualFree((PDWORD) dwBase,dwSize, MEM_RELEASE);
}BOOL DeleteCopyEx(HANDLE hProcess, DWORD dwBase, DWORD dwSize){
return VirtualFreeEx(hProcess,(PDWORD) dwBase,dwSize, MEM_DECOMMIT);
}BOOL LoadSeDebugPrivilege(){
HANDLE hToken;
LUID Val;
TOKEN_PRIVILEGES tp;if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return(FALSE);
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Val))
return(FALSE);
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = Val;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL))
return(FALSE);
CloseHandle(hToken);
return TRUE;
}void HideModule(HINSTANCE hModule)
{
DWORD dwPEB_LDR_DATA = 0;
_asm
{
pushad;
pushfd;
mov eax, fs:[30h] // PEB
mov eax, [eax+0Ch] // PEB->ProcessModuleInfo
mov dwPEB_LDR_DATA, eax // Save ProcessModuleInfoInLoadOrderModuleList:
mov esi, [eax+0Ch] // ProcessModuleInfo->InLoadOrderModuleList[FORWARD]
mov edx, [eax+10h] // ProcessModuleInfo->InLoadOrderModuleList[BACKWARD]LoopInLoadOrderModuleList:
lodsd // Load First Module
mov esi, eax // ESI points to Next Module
mov ecx, [eax+18h] // LDR_MODULE->BaseAddress
cmp ecx, hModule // Is it Our Module ?
jne SkipA // If Not, Next Please (@f jumps to nearest Unamed Lable @@:)
mov ebx, [eax] // [FORWARD] Module
mov ecx, [eax+4] // [BACKWARD] Module
mov [ecx], ebx // Previous Module's [FORWARD] Notation, Points to us, Replace it with, Module++
mov [ebx+4], ecx // Next Modules, [BACKWARD] Notation, Points to us, Replace it with, Module--
jmp InMemoryOrderModuleList // Hidden, so Move onto Next Set
SkipA:
cmp edx, esi // Reached End of Modules ?
jne LoopInLoadOrderModuleList // If Not, Re LoopInMemoryOrderModuleList:
mov eax, dwPEB_LDR_DATA // PEB->ProcessModuleInfo
mov esi, [eax+14h] // ProcessModuleInfo->InMemoryOrderModuleList[START]
mov edx, [eax+18h] // ProcessModuleInfo->InMemoryOrderModuleList[FINISH]LoopInMemoryOrderModuleList:
lodsd
mov esi, eax
mov ecx, [eax+10h]
cmp ecx, hModule
jne SkipB
mov ebx, [eax]
mov ecx, [eax+4]
mov [ecx], ebx
mov [ebx+4], ecx
jmp InInitializationOrderModuleList
SkipB:
cmp edx, esi
jne LoopInMemoryOrderModuleListInInitializationOrderModuleList:
mov eax, dwPEB_LDR_DATA // PEB->ProcessModuleInfo
mov esi, [eax+1Ch] // ProcessModuleInfo->InInitializationOrderModuleList[START]
mov edx, [eax+20h] // ProcessModuleInfo->InInitializationOrderModuleList[FINISH]LoopInInitializationOrderModuleList:
lodsd
mov esi, eax
mov ecx, [eax+08h]
cmp ecx, hModule
jne SkipC
mov ebx, [eax]
mov ecx, [eax+4]
mov [ecx], ebx
mov [ebx+4], ecx
jmp Finished
SkipC:
cmp edx, esi
jne LoopInInitializationOrderModuleListFinished:
popfd;
popad;
}
}[/cpp]So jetzt hab ich es richitg.Es soll zwar ein hack werden aber nur für Singelplayer.
-
#include <windows.h> #include <resource.h> #include <procfunc.h> #include <cheats.h> #include <log.h> HWND dlg; //Handle für das Fenster // Funktionsdeklarationen void ReadOriginalCode(); void DisableAllHax(); void RedirectAddresses(); void AttachGame(); void CopyOriginalCode(); BOOL Initialize(); BOOL DeInitialize(); void SetStatusText(LPCTSTR Text); ////////////////////////////////////////////////////////////////////////////////////////// void ReadOriginalCode(){ ///////////////////////////////////////////////////////////////////////////////////////// // Ab Hier werden alle originalen Werte gespeichert bevor ein Hack sie verändern kann // // damit man später diese Codes wieder schreiben kann um eine toggle Funktion zu haben // ///////////////////////////////////////////////////////////////////////////////////////// if (!gameRunning) return; ///////////////////////////////////////////////////////////////////////////////////// // Ab hier beginnt der Static Basepointer Abschnitt in dem die Addressen gespeichert werden Peek(gamePROC,gameExeBase+CHBase,sizeof(tmpBase1),&tmpBase1); // ab Hier Original Cursor Peek(gamePROC,tmpBase1+CHAdd1,sizeof(tmpBase2),&tmpBase2); CHAddr = tmpBase2 + CHAdd2; Peek(gamePROC,gameDllBase+NFBase,sizeof(NFBase),&tmpBase1);// ab Hier NoFog NFAddr = tmpBase1 + NFAdd; Peek(gamePROC,NFAddr,sizeof(NFHack),&NFOrg); // Fogweite Peek(gamePROC,gameDllBase+VDBase,sizeof(VDBase),&tmpBase1);// ab Hier Viewdistance VDAddr = tmpBase1 + VDAdd; Peek(gamePROC,VDAddr,sizeof(VDHack),&VDOrg); // Sichtweite Peek(gamePROC,gameDllBase+TVBase,sizeof(TVBase),&tmpBase1);// ab Hier Static TV TVAddr = tmpBase1 + TVAdd; WriteLog("Static TV DMA @ 0x%08X",TVAddr); Peek(gamePROC,gameDllBase+NSBase,sizeof(NSBase),&tmpBase1);// ab Hier No Sky NSAddr = tmpBase1 + NSAdd; WriteLog("Sky DMA @ 0x%08X",NSAddr); } void DisableAllHax(){ /////////////////////////////////////////////////////////////////////// // Hier werden die originalen werte in alle Addressen geschrieben // // und alle Hax ausgeschaltet // /////////////////////////////////////////////////////////////////////// SetDlgItemText(dlg,IDC_STAT4,"Off"); SetDlgItemText(dlg,IDC_STAT5,"0"); SetDlgItemText(dlg,IDC_STAT6,"Off"); SetDlgItemText(dlg,IDC_STAT7,"Off"); SetDlgItemText(dlg,IDC_STAT8,"Off"); //Hackstatus auf Aus isCHOn=isNFOn=isVDOn=isFCOn=isZMOn=isTVOn=isNSOn=FALSE; if (!gameRunning) return; // DMA Hacks Poke(gamePROC,CHAddr,&CHOrg,sizeof(CHOrg)); // Original Cursor schreiben Poke(gamePROC,NFAddr,&NFOrg,sizeof(NFOrg)); // Original Fog schreiben if (FCAddr) Poke(gamePROC,FCAddr,&FCOrg,sizeof(FCOrg)); // Original Fog schreiben Poke(gamePROC,VDAddr,&VDOrg,sizeof(VDOrg)); // Original ViewDistance schreiben if (ZM1Addr) Poke(gamePROC,ZM1Addr,&ZM1Org,sizeof(ZM1Org)); // Original Zoom schreiben if (ZM2Addr) Poke(gamePROC,ZM2Addr,&ZM2Org,sizeof(ZM2Org)); Poke(gamePROC,NSAddr,&NSOrg,sizeof(NSOrg)); // No Sky } BOOL Initialize(){ hooksInjected=(InjectDLL(hookDll,gamePID)); if (hooksInjected) SetStatusText("Anti SS injected"); AttachGame(); if (gameRunning){ Sleep(500); ReadOriginalCode(); } return TRUE; } BOOL Deinitialize(){ DisableAllHax(); CloseHandle(gamePROC); return TRUE; } ////////////////////////////////////////////////////////////////////////////////////////// void AttachGame() {// Diese Procedure sorgt dafür das der Prozess immer geöffnet ist um darin zu schreiben // sollte dieser nicht geöffnet sein dann ist gameRunning FALSE CloseHandle(gamePROC); // altes Handle von OpenProcess schließen gamePID = GetPID(gameExe); // ProcessID von Game ermitteln gameDllBase = GetDLLBase(gamePID,gameDll); // Base gameRunning = (gamePID != 0); if (gameRunning) { gamePROC=OpenProcess(PROCESS_ALL_ACCESS,0,gamePID); // BF2 Prozess öffnen und Handle speichern } } void TimerProc(){// Diese Procedure wird bei jedem Interval des Timer ausgeführt AttachGame(); //Spiel suchen und Prozess öffnen wenn gefunden if (!gameRunning){ // solange Spiel nicht läuft, nur diesen Block ausführen if (!firstRun){ firstRun = TRUE; // Wenn der Prozess weg ist erststart wieder TRUE DisableAllHax(); // Cheatstaus alle aus } SetStatusText("Warte auf BF2142..."); // Text im Fenster ändern return; // Solange BF2 nicht gefunden wird bricht die Procedure hier ab } // erstes mal seit Prozessstart hier angekommen und Spiel läuft! if (firstRun && gameRunning){ SetStatusText("BF2142 gefunden! 10 sek. warten"); // Text im Fenster ändern Sleep(10000); // 20 Sekunden Warten Initialize(); SetStatusText("Hotkeys aktiviert"); // Text im Fenster ändern firstRun = FALSE; // erstesmal auschalten } ///////////////////////////////////////////////////////////////////////////////////// // Hier wird geprüft ob ein hack an ist und ob er wiederaufgerufen werden soll bei // // jedem Intervall z.B. RedDot damit er immer gezeichnet wird // ///////////////////////////////////////////////////////////////////////////////////// // Crosshairtest Peek(gamePROC,CHAddr,sizeof(CHHack),&CHAkt); if ((isCHOn) && (CHHack != CHAkt)) Poke(gamePROC,CHAddr,&CHHack,sizeof(CHHack)); //Hack schreiben // Zoomtest if (ZM1Addr){ Peek(gamePROC,ZM1Addr,sizeof(ZMAkt),&ZMAkt); //Aktuellen Zoom Speichern //SetDlgItemText(dlg,IDC_STATZM2,(char*) ZMAkt); if (ZM1Hack == ZMAkt){ isZMOn = TRUE; SetDlgItemText(dlg,IDC_STATZM,"On"); }else{ isZMOn = FALSE; SetDlgItemText(dlg,IDC_STATZM,"Off"); } } // Commandertest if (FCAddr){ Peek(gamePROC,FCAddr,sizeof(FCHack),&FCAkt); if ((isFCOn) && (FCHack != FCAkt)) Poke(gamePROC,FCAddr,&FCHack,sizeof(FCHack)); } ReadProcessMemory(hand,(void*)0xA8BF28,dwBuffer1,sizeof(dwBuffer1),NULL); ReadProcessMemory(hand,(void*)(dwBuffer1+0x6C),&dwLeaderBase,sizeof(dwLeaderBase),NULL); dwTeamValue = dwLeaderBase + 0xD8; if(GetAsyncKeyState(VK_F10)) { if(dwTeamValue == 0x01) { WriteProcessMemory(hand,(void*)(dwTeamValue),&two,1,NULL); } else { WriteProcessMemory(hand,(void*)(dwTeamValue),&one,1,NULL); } } else if(GetAsyncKeyState(TeamKey)){ // Team Switch Peek(gamePROC,gameExeBase+TSBase,sizeof(tmpBase1), &tmpBase1);// ab Hier Teamswitch Peek(gamePROC,tmpBase1+TSAdd1,sizeof(tmpBase2), &tmpBase2); TSAddr = tmpBase2 + TSAdd2; Peek(gamePROC,TSAddr,sizeof(TSAkt),&TSAkt); if (TSAkt==1){ Poke(gamePROC,TSAddr,&TS2,sizeof(TS2)); }else Poke(gamePROC,TSAddr,&TS1,sizeof(TS1)); } else if (GetAsyncKeyState(VK_DELETE)){ // [Entf]ernen Taste DisableAllHax(); // Alle Hacks ausschalten und Originalwerte schreiben } } BOOL CALLBACK DialogProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ switch (message){ // Message übersetzen damit wir abfragen können case WM_INITDIALOG: // Wird beim erstellen unseres Fensters ausgeführt dlg = hwnd; SetTimer(hwnd,1001,tmrInterval,NULL); return TRUE; // Funktion beenden und True übergeben case WM_COMMAND: // Wird beim anclicken eines Buttons ausgeführt switch (LOWORD(wParam)){ // LOWORD(wParam) enthält die Message case IDC_EXIT: // Exit wurde gedrückt EndDialog (hwnd, 0); // Fenster schließen return TRUE; } return TRUE; case WM_DESTROY: // Wird beim beenden unseres Programs aufgerufen Deinitialize(); PostQuitMessage(0); return TRUE; case WM_CLOSE: // Wird beim druck auf Ende ausgeführt PostQuitMessage(0); return TRUE; case WM_TIMER: // Bei jedem Intervall vom Timer wird diese Message versendet TimerProc(); // timer ausführen return TRUE; } return FALSE; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { DialogBox(hInstance,MAKEINTRESOURCE(IDD_DLGMAIN), NULL,DialogProc); // DialogBox aus einer Resource erstellen mit Callback an DialogProc return 0; // Hier kommt man erst hin wenn die Dialogbox geschlossen wird } void SetStatusText(LPCTSTR Text){ SetDlgItemText(dlg,IDC_STATUSTEXT,Text); }#include <windows.h> #include <procfunc.h> #include <tlhelp32.h> / BOOL Peek(HANDLE gamePROC,DWORD Address, DWORD Count,void * save){ // Diese Function Liest aus dem Speicher des Prozesses "proc" ab der Addresse "Address" // "Count" Bytes und speichert diese in "save". Wenn alles erfolgreich ist wird TRUE übergeben UINT iRPM; DWORD pStateOld, pStateDummy; DWORD bw; // var für RPM iRPM = 0; if (gamePROC != 0){// Wenn gefunden //rechte im Speicher auf ALL_ACCESS if (VirtualProtectEx(gamePROC,(PDWORD)(Address),Count,PAGE_READWRITE,&pStateOld)){ // Ab Address Bytes lesen iRPM = ReadProcessMemory(gamePROC, (PDWORD)(Address),save, Count, &bw); //rechte im Speicher wieder standard VirtualProtectEx(gamePROC,(PDWORD)(Address),Count,pStateOld,&pStateDummy); } } return ((iRPM!=0)&(bw==Count)); } BOOL Poke(HANDLE gamePROC,DWORD Address, void *write, DWORD Count){ // Diese Function schreibt in den Speicher des Prozesses "proc" ab der Addresse "Address" // "write".Count ist die große in Bytes. Wenn alles erfolgreich ist wird TRUE übergeben UINT iWPM; DWORD pStateOld, pStateDummy; DWORD bw; // var für WPM MEMORY_BASIC_INFORMATION mbi; iWPM = 0; if (gamePROC != 0){// Wenn gefunden //Information über den gewählten Speicherbereich holen VirtualQueryEx(gamePROC,(PDWORD)Address,&mbi,sizeof(MEMORY_BASIC_INFORMATION)); //rechte im Speicherbereich auf READWRITE if (VirtualProtectEx(gamePROC,(PDWORD)mbi.BaseAddress,mbi.RegionSize,PAGE_READWRITE,&pStateOld)){ // Ab Address Bytes schreiben wenn Rechte erfolgreich gesetzt iWPM = WriteProcessMemory(gamePROC, (PDWORD)(Address),write, Count, &bw); //rechte im Speicherbereich wieder standard VirtualProtectEx(gamePROC,(PDWORD)mbi.BaseAddress,mbi.RegionSize,pStateOld,&pStateDummy); } } return (bw==Count); } DWORD GetPID(char *ExeName){ // Diese Funktion gibt die ProzessID von "EXEName" in der Prozessliste zurück HANDLE snapProc; PROCESSENTRY32 pe32; // Prozess finden snapProc = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(snapProc == INVALID_HANDLE_VALUE) return 0; // Wenn kein gültiges Suchhandle dann Funktionsabbruch pe32.dwSize = sizeof(PROCESSENTRY32); // Informationen Initialisieren if(Process32First(snapProc,&pe32)){ // Wenn 1. Prozess gefunden do{ // Schleifen anfang if (stricmp(ExeName,pe32.szExeFile)==0){; // Ist Prozess.Exename = BF2 dann CloseHandle(snapProc); // Suchhandle schließen return pe32.th32ProcessID; // ProcessID übergeben und Funktion beenden } } while(Process32Next(snapProc,&pe32)); } //Sleife solange Prozesse gefunden werden CloseHandle(snapProc); // Suchhandle schließen return 0; } DWORD GetDLLBase(DWORD pid,char* DllName){ //Diese Function liest die Base Addresse des Moduls "DLLName" aus dem Prozess mit der ID "pid" HANDLE snapMod; MODULEENTRY32 me32; // Modul im Prozess finden snapMod = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid); //Suchhandle auf alle Module im Process iProcID me32.dwSize = sizeof(MODULEENTRY32); // Informationen vorbereiten if (Module32First(snapMod, &me32)){ // Erstes Modul finden und informationen speichern do{ // Solange noch module gefunden werden if (stricmp(DllName,me32.szModule) == 0){ // Wenn aktuell gefundenes Modul.Name mit übergebenem DLLName übereinstimmt CloseHandle(snapMod); //Suchhandle schließen return (DWORD) me32.modBaseAddr; // Dll Base Addresse speichern } }while(Module32Next(snapMod,&me32)); } // Hier kommt man nur an wenn das Modul nicht gefunden wurde CloseHandle(snapMod); // Suchhandle schließen return 0; // 0 übergeben } BOOL InjectDLL(LPCTSTR sLibName,DWORD dwProcID){ // Diese Function Injeziert ein Modul "sLibName" in den Prozess mit der ID "dwProcID" // Wenn erfolgreich injeziert wird TRUE übergeben DWORD dwLLA,dwTID,dwMemSize,dwTargetMemory,hMod; HANDLE hProc,hThread; char fullLibName[MAX_PATH]; // Wenn die DLL bereits im Prozess Procedure beenden if (GetDLLBase(dwProcID,(char *)sLibName)!=0) return TRUE; // Prozess öffnen mit vollzugriff hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcID); if (!hProc){ return FALSE; } // kompletter Pfad und dateiname ermitteln if (SearchPath(NULL,sLibName,NULL,MAX_PATH,fullLibName,0)){ // Größe des vollen Dll-Namens ermitteln dwMemSize = strlen(fullLibName)+1; }else return FALSE; // Speicher im Game für DllName reservieren dwTargetMemory = (DWORD) VirtualAllocEx(hProc,NULL,dwMemSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE); // Addresse der Function LoadLibrary ermitteln dwLLA = (DWORD) GetProcAddress(GetModuleHandleA("kernel32.dll"),"LoadLibraryA"); // Wenn Addresse gefunden und Speicher allokiert if ((dwLLA!=0) & (dwTargetMemory!=0)){ // Modulname in Prozess schreiben Poke(hProc,dwTargetMemory,(void *)fullLibName,dwMemSize); // Thread im Process Prozess starten der LoadLibrary ausführt hThread = CreateRemoteThread(hProc,NULL,0, (void *)dwLLA,(void *)dwTargetMemory,0,&dwTID); // auf den Thread warten bis er fertig ist WaitForSingleObject(hThread,INFINITE); // LoadLibrary erfolgreich? GetExitCodeThread(hThread,&hMod); // Handle des Threads schließen CloseHandle(hThread); } // Speicher und Handles schließen if (dwTargetMemory) VirtualFreeEx(hProc,(PDWORD)dwTargetMemory,dwMemSize,MEM_DECOMMIT); if (hProc)CloseHandle(hProc); // Wenn DLL in Prozess TRUE übergeben if (GetDLLBase(dwProcID,(char *)sLibName)!=0) return TRUE; return FALSE; } BOOL EjectDLL(LPCTSTR sLibName,DWORD dwProcID){ // Diese Function Entlädt das Modul "sLibName" in den Prozess mit der ID "dwProcID" // Wenn erfolgreich entladen wird TRUE übergeben DWORD dwFL,dwTID; PBYTE dwModuleHandle = 0; DWORD dwCRTResult; HANDLE hProc,hThread; // DLLBase (DWORD) als PBYTE schreiben dwModuleHandle=(PBYTE) GetDLLBase(dwProcID,(char *)sLibName); // Wenn die DLL bereits im Prozess beendet if (!dwModuleHandle) return TRUE; // Prozess öffnen mit vollzugriff hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcID); if (!hProc) return FALSE; // Addresse der Function FreeLibrary ermitteln dwFL = (DWORD) GetProcAddress(GetModuleHandleA("kernel32.dll"),"FreeLibrary"); if ((dwFL) && (dwModuleHandle)){ // Thread im Process Prozess starten der LoadLibrary ausführt hThread = CreateRemoteThread(hProc,NULL,0, (void *)dwFL,(void*)dwModuleHandle,0,&dwTID); // auf den Thread warten bis er fertig ist WaitForSingleObject(hThread,INFINITE); // Ergebnis GetExitCodeThread(hThread,&dwCRTResult); // Handle des Threads schließen CloseHandle(hThread); } // Speicher und Handles schließen if (hProc)CloseHandle(hProc); // Wenn DLL in Prozess TRUE übergeben if (!GetDLLBase(dwProcID,(char *)sLibName)) return TRUE; return FALSE; } BOOL MemCopyEx(HANDLE hProcess,DWORD dwFrom,DWORD dwTo,DWORD dwSize){ // Diese Function kopiert im Prozess "hProcess" den Bereich ab "dwFrom" mit der // größe "dwSize" an die Addresse "dwTo" und übergibt TRUE wenn erfolgreich //Speicher für Buffer reservieren PBYTE dwBuffer = (PBYTE)VirtualAlloc(0,dwSize,MEM_COMMIT,PAGE_READWRITE); // Lesen und Zweischenspeichern if (Peek(hProcess,dwFrom,dwSize,dwBuffer)){ // Zwischenspeicher schreiben if (Poke(hProcess,dwTo,dwBuffer,dwSize)){ // Zwischenspeicher leeren VirtualFree(dwBuffer,dwSize,MEM_RELEASE); // Function beenden return TRUE; } } // Zwischenspeicher leeren VirtualFree(dwBuffer,dwSize,MEM_RELEASE); return FALSE; } DWORD CreateCopy(DWORD dwBase, DWORD dwSize){ // Diese Function kopiert im aktuellen Prozess den Bereich "dwBase" mit der größe "dwSize" // und übergibt wenn erfolgreich die Addresse an die es kopiert worden ist //Speicher für Buffer reservieren PBYTE dwBuffer = (PBYTE)VirtualAlloc(0,dwSize,MEM_COMMIT,PAGE_READWRITE); if (!dwBuffer) return 0; //Speicher lesen und speichern if (Peek(GetCurrentProcess(),dwBase,dwSize,dwBuffer)){ // Zwischenspeicher leeren VirtualFree(dwBuffer,dwSize,MEM_RELEASE); // Addresse des gespeicherten zurückgeben return (DWORD) dwBuffer; } // Zwischenspeicher leeren VirtualFree(dwBuffer,dwSize,MEM_RELEASE); return 0; } DWORD CreateCopyEx(HANDLE hProcess, DWORD dwBase, DWORD dwSize){ // Diese Function kopiert im Prozess "hProcess" den Bereich "dwBase" mit der größe "dwSize" // und übergibt wenn erfolgreich die Addresse an die es kopiert worden ist DWORD dwBufferAddr; //Speicher für Buffer reservieren dwBufferAddr = (DWORD) VirtualAllocEx(hProcess,0,dwSize,MEM_COMMIT,PAGE_READWRITE); if (!dwBufferAddr) return 0; //Speicher kopieren if (MemCopyEx(hProcess,dwBase,dwBufferAddr,dwSize)){ return (DWORD) dwBufferAddr; } // Zwischenspeicher leeren return 0; } BOOL DeleteCopy(DWORD dwBase, DWORD dwSize){ return VirtualFree((PDWORD) dwBase,dwSize, MEM_RELEASE); } BOOL DeleteCopyEx(HANDLE hProcess, DWORD dwBase, DWORD dwSize){ return VirtualFreeEx(hProcess,(PDWORD) dwBase,dwSize, MEM_DECOMMIT); } BOOL LoadSeDebugPrivilege(){ HANDLE hToken; LUID Val; TOKEN_PRIVILEGES tp; if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return(FALSE); if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Val)) return(FALSE); tp.PrivilegeCount = 1; tp.Privileges[0].Luid = Val; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if (!AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL)) return(FALSE); CloseHandle(hToken); return TRUE; } void HideModule(HINSTANCE hModule) { DWORD dwPEB_LDR_DATA = 0; _asm { pushad; pushfd; mov eax, fs:[30h] // PEB mov eax, [eax+0Ch] // PEB->ProcessModuleInfo mov dwPEB_LDR_DATA, eax // Save ProcessModuleInfo InLoadOrderModuleList: mov esi, [eax+0Ch] // ProcessModuleInfo->InLoadOrderModuleList[FORWARD] mov edx, [eax+10h] // ProcessModuleInfo->InLoadOrderModuleList[BACKWARD] LoopInLoadOrderModuleList: lodsd // Load First Module mov esi, eax // ESI points to Next Module mov ecx, [eax+18h] // LDR_MODULE->BaseAddress cmp ecx, hModule // Is it Our Module ? jne SkipA // If Not, Next Please (@f jumps to nearest Unamed Lable @@:) mov ebx, [eax] // [FORWARD] Module mov ecx, [eax+4] // [BACKWARD] Module mov [ecx], ebx // Previous Module's [FORWARD] Notation, Points to us, Replace it with, Module++ mov [ebx+4], ecx // Next Modules, [BACKWARD] Notation, Points to us, Replace it with, Module-- jmp InMemoryOrderModuleList // Hidden, so Move onto Next Set SkipA: cmp edx, esi // Reached End of Modules ? jne LoopInLoadOrderModuleList // If Not, Re Loop InMemoryOrderModuleList: mov eax, dwPEB_LDR_DATA // PEB->ProcessModuleInfo mov esi, [eax+14h] // ProcessModuleInfo->InMemoryOrderModuleList[START] mov edx, [eax+18h] // ProcessModuleInfo->InMemoryOrderModuleList[FINISH] LoopInMemoryOrderModuleList: lodsd mov esi, eax mov ecx, [eax+10h] cmp ecx, hModule jne SkipB mov ebx, [eax] mov ecx, [eax+4] mov [ecx], ebx mov [ebx+4], ecx jmp InInitializationOrderModuleList SkipB: cmp edx, esi jne LoopInMemoryOrderModuleList InInitializationOrderModuleList: mov eax, dwPEB_LDR_DATA // PEB->ProcessModuleInfo mov esi, [eax+1Ch] // ProcessModuleInfo->InInitializationOrderModuleList[START] mov edx, [eax+20h] // ProcessModuleInfo->InInitializationOrderModuleList[FINISH] LoopInInitializationOrderModuleList: lodsd mov esi, eax mov ecx, [eax+08h] cmp ecx, hModule jne SkipC mov ebx, [eax] mov ecx, [eax+4] mov [ecx], ebx mov [ebx+4], ecx jmp Finished SkipC: cmp edx, esi jne LoopInInitializationOrderModuleList Finished: popfd; popad; } }So jetzt hab ich es richitg.Es soll zwar ein hack werden aber nur für Singelplayer.
-
Setz mal deine eigenen Dateien, also resource.h und procfunc.h in Anführungsstrichelchen:
#include "resource.h" #include "procfunc.h"
-
Ok habs gemacht und jetzt kommem wieder Fehler.
------ Erstellen gestartet: Projekt: DMA HÄXXN, Konfiguration: Debug Win32 ------
Kompilieren...
main.c
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\cheats.h(27) : error C2054: Nach 'Variablendeklarationen' muss '(' folgen
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\cheats.h(27) : error C2085: 'firstRun': Nicht in der formalen Parameterliste enthalten
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\cheats.h(27) : error C2143: Syntaxfehler: Es fehlt ';' vor '='
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\main.c(5) : fatal error C1083: Datei (Include) kann nicht geöffnet werden: "log.h": No such file or directory
procfunc.c
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\procfunc.c(76) : warning C4996: 'stricmp' wurde als veraltet deklariert
c:\programme\microsoft visual studio 8\vc\include\string.h(213): Siehe Deklaration von 'stricmp'
Meldung: "The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _stricmp. See online help for details."
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\procfunc.c(96) : warning C4996: 'stricmp' wurde als veraltet deklariert
c:\programme\microsoft visual studio 8\vc\include\string.h(213): Siehe Deklaration von 'stricmp'
Meldung: "The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _stricmp. See online help for details."
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\procfunc.c(343) : warning C4102: 'InLoadOrderModuleList': Unreferenzierte Marke
Code wird generiert...
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\keller\Desktop\Neuer Ordner\Neuer Ordner\DMA_HÄXXN___Win32_Debug\BuildLog.htm" gespeichert.
DMA HÄXXN - 4 Fehler, 3 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
-
Erstmal: Kannst du mal dazusagen, welche der oben angegebenen Dateien welche ist (und du cheats.h dazugeben)?
Zweitens: Hast du zufällig etwas mit dem User "Chenoa" zu tun? (die letzten Warnmeldungen kommen mir irgendwie bekannt vor)
Drittens: Schreibst du eigentlich C oder C++? Wenn ersteres, würde ich dich eine Etage höher verschieben.
-
Erwin schrieb:
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\cheats.h(27) : error C2054: Nach 'Variablendeklarationen' muss '(' folgen
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\cheats.h(27) : error C2085: 'firstRun': Nicht in der formalen Parameterliste enthalten
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\cheats.h(27) : error C2143: Syntaxfehler: Es fehlt ';' vor '='Diese Fehler müsstest du auch selbst raushauen können, schließlich steht Zeilennummer und Begründung dabei...
-
CStoll schrieb:
Erstmal: Kannst du mal dazusagen, welche der oben angegebenen Dateien welche ist (und du cheats.h dazugeben)?
Zweitens: Hast du zufällig etwas mit dem User "Chenoa" zu tun? (die letzten Warnmeldungen kommen mir irgendwie bekannt vor)
Drittens: Schreibst du eigentlich C oder C++? Wenn ersteres, würde ich dich eine Etage höher verschieben.
Ja ich kenne ihn von eine Page.Da gibts source codes.Ich schätze die hat er auch genommen
-
Ich schreib in C++.Sry solte eig. Kein doppelpost werden.Das erste ist main.c das zweite ist procfunc.c
-
ok 3 fehler nur noch die ich aber nicht weg bekomme
----- Erstellen gestartet: Projekt: DMA HÄXXN, Konfiguration: Debug Win32 ------
Kompilieren...
main.c
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\cheats.h(27) : error C2054: Nach 'Variablendeklarationen' muss '(' folgen
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\main.c(27) : error C2449: '{' auf Dateiebene gefunden - fehlt der Funktionskopf?
c:\dokumente und einstellungen\keller\desktop\neuer ordner\neuer ordner\main.c(261) : fatal error C1004: Unerwartetes Dateiende gefunden.
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\keller\Desktop\Neuer Ordner\Neuer Ordner\DMA_HÄXXN___Win32_Debug\BuildLog.htm" gespeichert.
DMA HÄXXN - 3 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Wenn ich bei der ersten fehler meldung ne { setze geht es immer noch nicht
-
ok hab nur noch einen fehler
.\rsrc.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.
Sry wegen meine doppelpost kann einer sie löschen?
-
Hi
Ich glaube du benutzt VC++ Express dan kann er es nicht.(Stimmt das?)
-
das ist ein Multiplayer hack, das erkennt man an zbsp. crosshair usw... und CSS und DoD_Source(parameter..)
Helft ihm bloss net, cheater an die Wand!
-
Ich glaube kaum, dass da Gefahr besteht.
