AOB Scan / Pattern Scan

10/01/2015 17:44 anonymous-29742#1
Moin ^^,

Es geht ums Game Hacking und ich möchte gerne einen Pattern Scanner einbauen. Leider weiß ich nicht wie ich da überhaupt anfangen soll.


1. Option
bsp. AOB

Code:
74 10 8B 55 FC 8B 8A ?? ?? ?? ?? E8 ?? ?? ?? ?? EB ?? 8B 45 ?? 8B 88 ?? ?? ?? ?? E8 ?? ?? ?? ?? EB ?? ?? ?? ?? ?? 85 C9
Aus der AOB soll nun die Addresse im RAM gefunden werden.


2. Option
bsp. AOB

Code:
D9 45 FC 8B E5 5D C3 CC CC CC CC CC CC 55 8B EC 51 89 4D FC
Man sucht nicht die Addresse sondern schreib gleich in Bytes.
D9 soll nun zu DB geändert werden.



Kennt sich damit jemand evtl aus ?
10/01/2015 18:46 Daifoku#2
Du könntest den Boyer–Moore Algorithmus implementieren.
Dieser eignet sich meiner Meinung nach gut und hat im schlechtesten Falle eine Laufzeit von O(PatternLength * MemorySize)

Alternativ könntest du den Maximum Weight Matching (MWM) Algorithmus verwenden. Dieser ist schwieriger umzusetzen, dafür aber - bei geschickter implementierung - schneller.
10/03/2015 17:56 anonymous-29742#3
Suche noch weitere hilfe :)
10/03/2015 18:17 tolio#4
kannst du das genauer definieren? dort oben sind zwei ansätze genannt.
10/03/2015 20:15 anonymous-29742#5
Quote:
Originally Posted by tolio View Post
kannst du das genauer definieren? dort oben sind zwei ansätze genannt.
Ich möchte eine Addresse im RAM finden eines bestimmtem Prozesses.
Da viele Speicher-Addressen nicht Dynamisch sind gibt es die Möglichkeit an die Addressen zu kommen mit der entsprechendem AOB (Array of Byte).

Was ich nun möchte..
AOBScan / PatternScan machen um an die Addresse zu kommen die ich brauche um sie danach den wert der Addresse zu ändern.


Bsp.
Code:
AOB = D9 45 C4 8B 4D F4 64 89 0D
Danach wird in einem Prozess gesucht und er findet dort zb diese Addresse :
-> 0x0DBEF0 (Da kommt natürlich was anderes raus)
Diese Addresse hat jetzt zb den Wert 20
Jetzt ändere ich den Wert von 20 auf 30.
Der Wert der Addresse kann ich selber Problemlos ändern, nur ich muss halt erstmal an diese Addressen kommen, damit ich dies tun kann. Darum brauch ich hilfe bei einem AOBScan / Pattern Scan / Pattern Finder /.. whatever
10/03/2015 21:14 Daifoku#6
Dann schreibe dir doch erstmal ein Grundgerüst.

GetProcessesByName
[Only registered and activated users can see links. Click Here To Register...]
OpenProcess
[Only registered and activated users can see links. Click Here To Register...]
ReadProcessMemory
[Only registered and activated users can see links. Click Here To Register...]

Um das ganze dann effektiv und nicht byte für byte zu durchsuchen, nutzt du eine implementieren des Boyer-Moore Algorithmus.

Wenn ich meine Prüfung am Dienstag hinter mir habe, bastel ich mal ne Library. Werde Boyer-Moore wahrscheinlich mit den Heuristiken BAD_CHAR und GOOD_SUFFIX implementieren, sofern mir keine effizientere Methode einfällt.
10/03/2015 21:54 anonymous-29742#7
Quote:
Originally Posted by Daifoku View Post
Dann schreibe dir doch erstmal ein Grundgerüst.

GetProcessesByName
[Only registered and activated users can see links. Click Here To Register...]
OpenProcess
[Only registered and activated users can see links. Click Here To Register...]
ReadProcessMemory
[Only registered and activated users can see links. Click Here To Register...]

Um das ganze dann effektiv und nicht byte für byte zu durchsuchen, nutzt du eine implementieren des Boyer-Moore Algorithmus.

Wenn ich meine Prüfung am Dienstag hinter mir habe, bastel ich mal ne Library. Werde Boyer-Moore wahrscheinlich mit den Heuristiken BAD_CHAR und GOOD_SUFFIX implementieren, sofern mir keine effizientere Methode einfällt.
Dieses "Grundgerüst" steht bereits schon.
Ich brauche nurnoch den AOB Scann.

MFG #Lucas#
10/03/2015 22:35 Daifoku#8
Dann simuliere zu Testzwecken dein Grundgerüst durch
Code:
unsigned char memory[37] = "asdhisacsbfbusdzfbtsdufzgbuisgfbzugb";
und arbeite damit.

Als Suchmuster wählen wir
Code:
unsigned char pattern[10] = "sdzfbtsdu";
Wir verzichten zunächst auf Wildcards.

Schreibe zunächst eine Funktion, die eine lineare Suche* implementiert und poste deinen Code. Wenn du das hast, erweitern wir hier gemeinsam deine Funktion Schritt für Schritt.


* Suche Byte für Byte ab, ohne Algorithmus.
10/04/2015 12:07 anonymous-29742#9
Quote:
Originally Posted by Daifoku View Post
Dann simuliere zu Testzwecken dein Grundgerüst durch
Code:
unsigned char memory[37] = "asdhisacsbfbusdzfbtsdufzgbuisgfbzugb";
und arbeite damit.

Als Suchmuster wählen wir
Code:
unsigned char pattern[10] = "sdzfbtsdu";
Wir verzichten zunächst auf Wildcards.

Schreibe zunächst eine Funktion, die eine lineare Suche* implementiert und poste deinen Code. Wenn du das hast, erweitern wir hier gemeinsam deine Funktion Schritt für Schritt.

* Suche Byte für Byte ab, ohne Algorithmus.
Ok, danke erstmal im vorraus. Was ich noch anmerken möchte, ich schreibe das ganze in Visual Basic. Werde es nun so versuchen wie du es gesagt hast und erstmal dein Grundgerüst für den Scann aufbauen.

Das ganze sieht bis jetzt so aussehen (ohne AOB Scan).
Code:
          Try
                Dim P22 As Process = Process.GetProcessesByName(Defines.GameEXE)(0)
                Dim ProcessHandle As IntPtr = OpenProcess(&H1F0FFF, False, P22.Id)
                Dim cBase As Long = P22.MainModule.BaseAddress
                SuspendProcess(p(0))
                System.Threading.Thread.Sleep(1000)
                WriteLong(Defines.GameEXE, cBase + &HADDY1, WERT1)
                WriteLong(Defines.GameEXE, cBase + &HADDY2, WERT2)
                WriteLong(Defines.GameEXE, cBase + &HADDY3, WERT3)
                System.Threading.Thread.Sleep(1000)
                ResumeProcess(p(0))
                MsgBox("Success Bypassed..")
                Me.Close()
          Catch ex E...
                MsgBox("Failed..")
                Me.Close()
          End Try