Veröffentlicht 28. September 201311 j Ich möchte unter C#.Net den Arbeitsspeicher, der einem Prozess zugeordnet ist nach einem bestimmten String durchsuchen. Der String besteht aus einer 10-stelligen Zahl, welche ich jedoch im String Format angebe. Dazu habe ich die Variable "processid" mit dem Prozess gespeichert. private bool searchInMemory() { IntPtr p = OpenProcess(0x10 | 0x20, true, this.processid); uint PTR = 0x00000000; byte[] buff = new byte[40]; String original = readConfig("original"); while (PTR != 0xFF000000) { ReadProcessMemory(p, (UIntPtr)PTR, buff, (UIntPtr)40, IntPtr.Zero); this.lblStatusValue.Text = Convert.ToString(buff); if(BitConverter.ToString(buff) == original) { return true; } PTR += 0x1; } return false; } Leider hängt sich das Programm auf und allgemein weiß ich auch nicht, ob alles so funktioniert, wie ich mir das vorstelle. Die Beschreibungen im Netz, wie sowas gehen soll sind leider auch nicht gerade verständlich geschrieben. Ich glaube es wäre ein Anfang, wenn ich den zugewiesenen Speicherbereich der Anwendung auslesen könnte und somit die suche schonmal eingrenzen könnte. Kann mir vielleicht jemand sagen was ich falsch mache und ggf. auch Verbesserungsvorschläge, bzw. Tipps geben? Gruß Shadowman Bearbeitet 28. September 201311 j von Shadowman
30. September 201311 j Es würde mich sehr wundern, wenn das so einfach gehen würde. Jedes Programm hat seinen eigenen, ihm zugeordneten Speicher, aus dem es nicht einfach so mir nichts dir nichts den Speicher eines anderen Programms durchsuchen kann.
30. September 201311 j Autor Danke für diese Info. Ich habe es jetzt soweit, dass ich im Speicher nach einem Wert suchen kann und diesen sogar überschreiben könnte!
1. Oktober 201311 j Der Arbeitsspeicher eines anderen Programms oder deinen Eigenen? Mit den entsprechenden Rechten geht beides eigentlich problemlos. Ohne Rechte wirds dann schon kniffliger
1. Oktober 201311 j Autor Natürlich eines fremden Prozesses, der aber vom selben Benutzer gestartet wurde. Einzig das Durchsuchen des Arbeitsspeichers läuft sehr schleppend, da ich jeden Wert einzeln durchlaufe. Vielleicht muss ich das noch etwas optimieren, dass größere Sprünge beim durchlaufen gemacht werden. Ausserdem wäre es eine Hilfe den Anfang und das Ende des Speichers zu kennen, der dem Programm zugewiesen wurde. Leider konnte ich dazu bisher nichts finden, ausser die Größe des Speichers, der durch den Prozess belegt wird. Bearbeitet 1. Oktober 201311 j von Shadowman
11. Oktober 201311 j Du durchläufst nicht ernsthaft den gesamten Speicher? Beschäftige dich mal mit Cheatengine und OllyDBG bzw. Reversen generell. Es gibt massenhaft Bibilotheken die das memread/write vereinfachen (Blackmagic,Whitemagic,BotSuite vom Codebot Forum) Auf www.codebot.de findest du mehr als genug Tuts zu diesem Thema unteranderem auch nette sachen wie Captchacracking,Reversen und http automatisierung ist zwar sehr AutoIT lastig aber da findet man ein paar schöne sachen die man in der Ausbildung so gut wie garnicht behandelt ^.^ mfg Lacka
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.