Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  3 840
God kveld freaker.

Jeg har en venn som har vært så grei å gi meg en header og ba meg dele den med verden, så da gir jeg den til dere her på Freakforum.
Denne krever nok en viss teknisk innsikt for å få glede av.

Det eneste jeg ber om, er at dere ikke misbruker headeren ved å ta æren for den, da det ville vært dårlig gjort mot fyren jeg fikk dette av.

cHack

Kode

/*
   CHack.h - Mateo's CHack class for
   hacking all kinds of external applications
   
   Written by Mateo - 2008-11-15.
   Just include this header in your project.
*/

#pragma once
#include <windows.h>
#include <tlhelp32.h>
#include <psapi.h>
#include <cstdio>
#include <string>

using std::string;

class CHack {
public:
   bool Active;
   DWORD ProcessID;

   void Initialize(char *ProcessName) {
      ProcessID = GetPIDFromName(ProcessName);
      if (ProcessID != NULL) {
         hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
         Active = true;
      } else Active = false;
   };

   void Initialize(char *WindowName, char *ClassName) {
      ProcessID = GetPIDFromWindow(WindowName, ClassName);
      if (ProcessID != NULL) {
         hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
         Active = true;
      } else Active = false;
   };

   template <typename T> void Write(int Address, T Value) {
      if (Active) {
         T NewData = Value;
         DWORD NewDataSize = sizeof(NewData);
         WriteProcessMemory(hProcess, (LPVOID)Address, &NewData, NewDataSize, 0);
      }
   };

   template <typename T> T Read(int Address) {
      if (Active) {
         T Ret;
         ReadProcessMemory(hProcess, (LPVOID) Address, &Ret, sizeof(T), NULL);
         return Ret;
      }
   };

   CHack() {
      Active = false;
      hProcess = NULL;
      ProcessID = NULL;
   };

   ~CHack() {
      CloseHandle(hProcess);
   };

private:
   HANDLE hProcess;

   DWORD GetPIDFromWindow(char *WindowName, char *ClassName) {
      DWORD ProcID;
      HWND TargetWnd;

      TargetWnd = FindWindowA(ClassName, WindowName);
      GetWindowThreadProcessId(TargetWnd, &ProcID);
      return ProcID;
   };

   DWORD GetPIDFromName(char *ProcessName) {    
      DWORD PID = 0;    
      string Name = ProcessName;    
      Name = ::CharLowerA((char*) Name.c_str());     
      PROCESSENTRY32 lp;    
      HANDLE lh = NULL;    

      memset(&lp, 0, sizeof(lp));    
      lp.dwSize = sizeof(lp);     
      lh = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);    
      int Found = ::Process32First(lh, &lp);
      
      while(Found) {       
         char* dName = new char[(int) ((wcslen(lp.szExeFile) + 1) * sizeof(wchar_t))];       
         ::WideCharToMultiByte(CP_ACP, 0, lp.szExeFile, -1, dName, static_cast <int> (wcslen(lp.szExeFile) + 1), NULL, NULL);       
         dName = ::CharLowerA(dName);       
         
         if (0 == Name.compare(dName)){          
            PID = lp.th32ProcessID;          
            delete [] dName;          
            dName = NULL;          
            break;       
         }       
         delete [] dName;       
         dName = NULL;       
         Found = ::Process32NextW(lh, &lp);    
      }
      return PID;
   };
};

Kode

Usage:
Code:
// Hack Example.cpp
#include "CHack.h"
#include <iostream>
using std::cout;

CHack Soldat;

int main(void) {
   while (Soldat.Active == false) Soldat.Initialize("Soldat.exe"); // Make sure Soldat is active first.
   // Soldat.Active is the variable that tells you wether its ready to write/read the process.
   while (1) {
      // Each second, print out the current position for slot 1
      cout << Soldat.Read <float> (0xAFAE64) << ", ";
      cout << Soldat.Read <float> (0xAFAE68) << "\n";
      Sleep(1000);
   }
   return 0;
}
Eksempelet bruker spillet Soldat, men headeren fungerer på hvilken som helst .exe-fil.

For å finne adressene du skal skrive til, er Cheat Engine er flott alternativ.

PS: Nå er jeg trøtt, kommer tilbake med mer detaljerte guider på hvordan ting fungerer senere.


EDIT: Op kan få plassere denne tråden i datasikkerhet eller programmering sånn som det passer dem. Jeg er ikke sikker på hvor den skal, så slang den hit.
Sist endret av 7th_account; 11. juli 2009 kl. 00:19.
Skulle det komme noen mer detaljert guide på dette? Jeg så litt på det, og det virket forsåvidt interessant.
Det er jo en grei liten klasse, men det er jo egentlig bare ReadProcessMemory/WriteProcessMemory.

Tror jeg har noen andre eksempler liggende rundt (bla. en liten hack for DopeWars ). Men har ikke brukt den samme klassen. (Bare brukte noe lite lignende).
Trådstarter
13 2
Har vært på ferie i noen dager, men skal få fikset en liten guide på hvordan man kan finne adresser og utnytte disse i løpet av de neste dagene.