2016-06-16 29 views
0

Nun, ich habe IDA und Cheat Engine. Ich versuche die Auflösung der Anwendung zu ändern, eigentlich nur die Breite und Höhe des Fensters. Ich weiß, dass das Ändern der Breite und Höhe die Anwendung nicht richtig funktionieren lässt, aber es ist mein erster Schritt, um Disassembler zu verstehen. Nach nicht langer Suche habe ich die Funktion CreateWindowEx gefunden. Nun, sieht aus wie ich gefunden, wenn die Anwendung erstellen Fenster,Ändern der Fensterbreite und -höhe durch Disassembler

push 1E0h 
push 280h 
….   ;some code 
mov esi, ds:GetSystemMetrics 
push 0  ;nIndex 
call esi  ;GetSystemMetric 
push 1  ;nIndex 
move edi,eax 
call esi  ;GetSystemMetrics 
...   ;somecode 
call ds:CreateWindowExA 

gut push 1E0h = 480 und push 280h = 640. Hm, sehe aus wie ich Breite und Höhe gefunden habe, also habe ich Adressen von Konstanten bekommen, lass sie versuchen sie zu ändern. (Eigentlich finde ich bei der Suche zwei weitere Orte mit dieser Konstante. Aber alle werden nicht zum Erstellen von Fenstern verwendet, und da ich nur versuche, Fensterhöhe und -breite zu ändern, arbeite ich mit diesen). Anwendung ausführen und Engine betrügen.

Hex-Wert: 280 (1E0) Scan-Typ: Genauer Wert Typ: 4bytes

Erster Scan: gefunden 33

Blick auf der Liste der Adresse nicht von ihnen auch nur annähernd an die Adresse, die wir hatte in IDA. Und wenn ich es richtig verstehe, weil die Cheat-Engine Adressen aus dem Speicher holt, die zum Ausführen der Anwendung verwendet werden, während IDA den Code analysiert und Adressen darin findet. Ich weiß nicht, ob ich es richtig oder falsch gesagt habe, jede Erklärung von deiner Seite wird gut sein. Aber das Problem ist nicht dabei.

Nun lassen Sie Adresse manuell hinzufügen. Ok wir haben es, und der Wert auf dieser Adresse ist 163944. Was? Schauen wir uns hexadezimal an: 00028068. Hm, ich sehe die 280 drauf, aber woher kommt die 68? Schauen wir uns die Höhe an: 122984-> 0001E068.

So jetzt habe ich eine Frage, warum es so ist? Woher kam diese 68 am Ende? 1E0 ist nicht gleich 1E068. Liege ich falsch? Irgendwelche Vorschläge was ich vermisst habe.

Ok, lass weitergehen, lass es versuchen, es zu ändern. Nun, ich habe zwei Varianten in Hexadezimal: 50068 und 3C068 gebunden. Und ohne 68, wie soll es eigentlich sein (meiner Meinung nach :)). Keiner von ihnen funktioniert nicht, gut, ich denke, es ist wahrscheinlich, weil die Anwendung später durch Zeiger konstant verwendet wird (ich denke, aber wahrscheinlich bin ich falsch). Also muss ich auch die Zeiger ändern. Lassen Sie finden, was auf diese Adressen zugreift. Nun, jetzt habe ich ein Problem, in einfacher Variante, um herauszufinden, was auf diese Adressen zugreifen Sie müssen nur ändern Bedingung in Ihrer Anwendung sagen wir Wert = 5, klicken Sie auf den Button Wert ändern Wert = 3 und cheat Engine finden, was haben Zugang zu dieser Adresse. In meinem Fall wurde das Fenster jedoch bereits erstellt und ich weiß nicht, wie ich diese Liste bekommen soll. Jetzt bin ich irgendwie in diesem Punkt steckengeblieben. Vielleicht habe ich etwas verpasst. Aber jeder Vorschlag, in welche Richtung ich mich bewege oder was ich falsch mache, wird helfen.

Antwort

0

Hier sind ein paar Hinweise.

  1. Die Adressen in IDA basieren auf der Basisadresse, die IDA für Ihre ausführbare Datei liest. Wenn Ihr Programm vom Betriebssystem geladen wird, befindet es sich (meistens) an einem anderen Speicherort. Ihre Adressen in IDA werden sich daher von denen im Speicher unterscheiden. Der Offset von der Basisadresse sollte immer gleich sein.
  2. Ihr Hex-Wert kann nur 2 Bytes dauern, und ich würde vermuten, dass Ihre Architektur Little Endian ist. Daher steht die 68 möglicherweise nicht mit Ihrem tatsächlichen Wert in Beziehung, sondern eine andere Variable.