1. Forum
    1. Unerledigte Themen
  2. Artikel
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  4. Blog
    1. Artikel
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Forum
  • Blog-Artikel
  • Seiten
  • Erweiterte Suche
  1. StageTwo - Deine Wohlfühloase
  2. Mitglieder
  3. TC-MaXX

Beiträge von TC-MaXX

  • Speicher schnell durchsuchen (C#) ?

    • TC-MaXX
    • 12. Oktober 2011 um 21:33

    Hi,

    ich habe es versucht, aber das Teil läuft bei mir nicht im Debugger..
    Das Prog ist in VB6 geschrieben, kann's vielleicht daran liegen?
    VB6 springt ja am Anfang gleich in die MS.VB.Virtual Machine (MSVBVM60.DLL)

  • Speicher schnell durchsuchen (C#) ?

    • TC-MaXX
    • 12. Oktober 2011 um 20:24

    Hi,
    ich muss den Thread noch mal kurz aufwärmen:

    Es geht um ein anderes Programm.

    Mit Cheat Engine kann ich meinen gesuchten String finden, allerdings steht dieser an einer Adresse,
    wo kein's der benutzten Module hinschreibt.?!

    Um nicht den gesamten Speicher durchsuchen zu müssen, muss ich den Bereich eingrenzen...

    Hat jemand eine Idee?

    Gruß
    tcM

  • Speicher schnell durchsuchen (C#) ?

    • TC-MaXX
    • 28. September 2011 um 10:39

    Danke für deinen Hinweis, das habe ich versucht, doch leider fand ich immer noch nicht die richtigen stellen.
    Jetzt habe ich versucht von der BaseAddr bis BaseAddr+Size der Dll zu suchen, nun habe ich die Stelle gefunden!

    Danke
    VG tcM

  • Speicher schnell durchsuchen (C#) ?

    • TC-MaXX
    • 27. September 2011 um 21:22

    Hallo zusammen,

    ich muss an einer Stelle im Speicher eine Änderung vornehmen ;) Leider ist de zu patchende Adresse nicht statisch,
    somit muss ich mir eine Suchfunktion bauen, die mir die zu patchenden Byte's im Programmspeicher findet und die Adresse liefert.

    Ich habe testweise mal versucht mit Hilfe einer for-Schleife und ReadProcessMemory den Speicher von 0x04100000...0x7FFFFFFF zu durchsuchen aber das hat extrem lange gedauert..

    Nun habe ich folgenden Ansatz, leider liefert mir ManagedWinapi.ProcessMemoryChunk.read in das Array "bigMem" nur Null-bytes...
    Kann das jemand nachvollziehen bzw. kennt eine bessere und schnelle Möglichkeit den Speicher ratzfatz zu scannen ?

    (Das Programm ist in Modulen aufgebaut und eins davon schreibt die Bytes, die ich patchen muss..)

    thanks in advice
    tcM

    Code
    using System;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    using ManagedWinapi;
    using System.Collections.Generic;
    namespace Proggy
    {
    	public struct MEMORY_BASIC_INFORMATION
    	{
        	public uint BaseAddress;
        	public uint AllocationBase;
        	public uint AllocationProtect;
        	public uint RegionSize;
        	public uint State;
        	public uint Protect;        	 
        	public uint Type;
    	}
    	public partial class Form1 : Form
    	{
        	[DllImport("Kernel32.Dll")]
        	public static extern uint VirtualQueryEx(IntPtr ProcessHandle, uint Address, ref MEMORY_BASIC_INFORMATION MemInfo, int MemInfoLength);
        	[DllImport("Kernel32.Dll")]
        	public static extern bool ReadProcessMemory(IntPtr ProcessHandle, uint Address, byte[] Buffer, uint Size, ref uint BytesRead);
        	[DllImport("Kernel32.Dll")]
        	public static extern bool WriteProcessMemory(IntPtr ProcessHandle, uint Address, byte[] Buffer, uint Size, ref uint BytesRead);
     
        	public Form1()
        	{
            	InitializeComponent();
        	}
        	private void button1_Click(object sender, EventArgs e)
        	{
            	byte[] s = new byte[4];
            	s[0]= 54; s[1]= 51; s[2]= 47 ; s[3]= 48;
            	Process[] p = Process.GetProcessesByName("prog");
            	MessageBox.Show(GetMemoryAddressOfString(s, p[0]).ToString());
        	}
    private static int GetMemoryAddressOfString(byte[] searchedBytes, Process p)
        	{
            	int addr = 0;
            	int speed = 1024 * 64;
            	for (int j = 0x04100000; j < 0x7FFFFFFF; j += speed)
            	{
                	ManagedWinapi.ProcessMemoryChunk mem = new ProcessMemoryChunk(p, (IntPtr)j, speed + searchedBytes.Length);           	 
                	byte[] bigMem = mem.Read();
     
                	for (int k = 0; k < bigMem.Length - searchedBytes.Length; k++)
                	{
                    	bool found = true;
                    	for (int l = 0; l < searchedBytes.Length; l++)
                    	{
                        	if (bigMem[k + l] != searchedBytes[l])
                        	{
                            	found = false;
                            	break;
                        	}
                    	}
                    	if (found)
                    	{
                        	addr = k + j;
                        	MessageBox.Show("found");
                        	break;
                    	}
                	}
                	if (addr != 0)
                	{
                    	break;
                	}
            	}
            	return addr;
        	}   
    	}
    }
    Alles anzeigen
  1. Datenschutzerklärung
  2. Impressum