Home of Gamehacking

Normale Version: Trainermodul problem auf Prozess 64Bit
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Ich habe das Trainermodul eingesetzt um auf ein Prozess der auf 64Bit läuft auszuführen.
Zuerst war mein Programm selbst auf 32 Bit.
Die Fehlermeldung war das er nur teilweilse den Prozessmodul abgeschlossen hat.

Dann habe ich mein Programm auf 64 Bit umgestellt.
Die gleiche Fehlermeldung kam aber wieder.

Zurzeit sieht der Code so aus:


Code:
   Public Function GetModuleBase_32Bit(ByVal ProcName As String, ByVal ModuleName As String)
        Dim BaseAddress As Int32
        For Each PM As ProcessModule In Process.GetProcessesByName(ProcName)(0).Modules
            If ModuleName.ToLower = PM.ModuleName.ToLower Then
                BaseAddress = PM.BaseAddress
            End If
        Next
        Return BaseAddress
    End Function

    Public Function GetModuleBase_64Bit(ByVal ProcName As String, ByVal ModuleName As String)
        Dim BasePointerAdress As Int64
        If Process.GetProcessesByName(ProcName).Length <> 0 Then
            For Each [Module] As ProcessModule In Process.GetProcessesByName(ProcName)(0).Modules
                If [Module].ModuleName = ProcName Then
                    BasePointerAdress = [Module].BaseAddress.ToInt64()
                End If
            Next
            Return BasePointerAdress
        End If
    End Function



Die Frage ist jetzt ob der Trainermodul wo ich von diesem Forum habe auch für 64Bit Prozesse funktionieren kann?
Was muss ich noch umstellen?

mfg.
Xiantrius

Überarbeitet Fehler ist behoben.

Ich habe nun weitere probleme zwar beseitigt.
Habe mein Trainermodul auf 64 Bit gestellt und noch dazu Netframework auf 4.0 gesetzt.

Ich habe soweit die probleme mit dem 64 Bit problem gelöst.
Trotzdem funktioniert es immer noch nicht!
Obwohl der Pointer bei Cheat Engine funktioniert.
Sieht es bei mir anders aus bei mir kommt das endergebnis 0 raus.

Ich brauch wirklich umbedingt hilfe. Ich möchte das Trainermodul für 32 und 64Bit Prozesse anpassen können, aber ich bin jetzt ratlos und nicht so ein super Programmierer wie ihr.
Ich habe Teamviewer. Wer mir helfen will kann sich ruhig melden. Ich wäre sehr dankbar dafür.
Ich mache da schon 2 Tage rum.
Ich geh jetzt einfach mal von meinem Fall aus...
Ich programmiere mit Delphi aber ich denke mal bei VB / .NET siehts nicht anders aus.
Seitens des Betriebssystems kannst du nicht mit einem x64 Prozess auf einen x86 Prozess zugreifen und umgedreht.
Das heißt du müsstest ein Trainermodul für x86 Prozesse schreiben und eines für x64 Prozesse.
Aber eine 32 Bit Funktion zusammen mit einer 64 Bit Funktion in einem Trainermodul unterzubringen dürfte wohl nicht funktionieren.
Es sei denn Du würdest es auskommentieren.
(26.11.2016, 18:29)iNvIcTUs oRCuS schrieb: [ -> ]Ich geh jetzt einfach mal von meinem Fall aus...
Ich programmiere mit Delphi aber ich denke mal bei VB / .NET siehts nicht anders aus.
Seitens des Betriebssystems kannst du nicht mit einem x64 Prozess auf einen x86 Prozess zugreifen und umgedreht.
Das heißt du müsstest ein Trainermodul für x86 Prozesse schreiben und eines für x64 Prozesse.
Aber eine 32 Bit Funktion zusammen mit einer 64 Bit Funktion in einem Trainermodul unterzubringen dürfte wohl nicht funktionieren.
Es sei denn Du würdest es auskommentieren.

Also ganz ehrlich wenn ich ein ganz neues Trainermodul schreiben soll, dass auf 64Bit laufen soll...
Das problem ist ich weis nicht wie. Ich kenne jetzt nur die 32Bit Version.
Ihr kennt ja alle von DNA das Trainermodul das ich noch ein wenig mehr funktionen hinzugefügt habe.
Wie müsste dieses Trainermodul für 64Bit komplett umgeschrieben werden?
Weil an sich ist der Trainermodul sehr gut und der hat mir für 32Bit Prozesse nie schwierigkeiten bereitet und möchte die Methode so beibehalten, nur halt für 64Bit Prozesse, weil wie du ja bereits sagtest es nicht möglich ist beides drin zu haben. Ich wünschte DNA würde sich da melden, er wüsste bestimmt was zu tun ist, weil das Trainermodul stammt ja ursprünglich von ihm.
Ich denke so schlimm wirds hier nich sein.
Bei meinem Trainer Template hab ich auch die 32 Bit Fassung zu 64 Bit konvertiert indem einfach nur verschiedene Datentypen angepasst werden mussten.
Also z.B. aus Integer (32 Bit Ganzzahl) wird zu Int64 (64 Bit Ganzzahl).
Die brauchst du auch bzw. musst du auch ändern weil ansonsten nur Murks rauskommt.
Stell dir mal folgendes Beispiel vor...
Eine gängige statische Basisadresse bei einem 32 Bit Prozess ist die 00400000h. Bei einem 64 Bit Prozess ist das die 140000000h. Würdest Du jetzt für 64 Bit nur mit Integer (bei VB Int32) handieren kriegst du als Rückgabewert nur eine 40000000h raus.
Ich denke du weist was ich damit zeigen will...
(26.11.2016, 19:28)iNvIcTUs oRCuS schrieb: [ -> ]Ich denke so schlimm wirds hier nich sein.
Bei meinem Trainer Template hab ich auch die 32 Bit Fassung zu 64 Bit konvertiert indem einfach nur verschiedene Datentypen angepasst werden mussten.
Also z.B. aus Integer (32 Bit Ganzzahl) wird zu Int64 (64 Bit Ganzzahl).
Die brauchst du auch bzw. musst du auch ändern weil ansonsten nur Murks rauskommt.
Stell dir mal folgendes Beispiel vor...
Eine gängige statische Basisadresse bei einem 32 Bit Prozess ist die 00400000h. Bei einem 64 Bit Prozess ist das die 140000000h. Würdest Du jetzt für 64 Bit nur mit Integer (bei VB Int32) handieren kriegst du als Rückgabewert nur eine 40000000h raus.
Ich denke du weist was ich damit zeigen will...

Ich habe alles was auf Int32 war nun auf Int64 gesetzt auch die ganzen funktionen so übernommen, allerdings nur die wo auslesen um das zu testen.
Nun ich habe die read funktion benutzt um auf den Pointer drauf zu gehen. Nun er spuckt zwar jetzt kein fehler aus, aber der Wert wird immer noch auf 0 angezeigt, der Pointer ist aber der richtige laut Cheat Engine.
Ich habe bestimmt was falsch gemacht, oder was wichtiges vergessen.
Mich nervt das langsam, ich mache 2 Tage rum und kriege es nicht auf 64Bit zum laufen. Wie kompliziert ist den das bitte? Sry ich bin einfach mittlerweile genervt von dem Projekt grad.

Stimmt das eigentlich auch bei 64Bit noch? >>>  Private Const ACCESS_RIGHTS_ALL = &H1F0FFF <<<
(26.11.2016, 20:03)Xiantrius schrieb: [ -> ]Stimmt das eigentlich auch bei 64Bit  noch? >>>  Private Const ACCESS_RIGHTS_ALL = &H1F0FFF <<<

Ja, das stimmt noch.
Startest du dein Programm über die IDE oder die kompilierte EXE? Ich hatte schon häufig den Fall, dass
meine Programme, sofern ich sie über die IDE gestartet hatte, nichts auslesen konnten bzw. immer ne 0 raus kam.
Kompilier dein Programm und starte es mit Adminrechten

Ansonsten müsste man die anderen Teile des Quellcodes sehen, um mehr sagen zu können.
Wenn man die IDE mit Admin Rechten startet erhält auch der Child Prozess die Admin Rechte. Sollte zumindest so der Fall sein.

Und die Schreibweise ist, wie DNA schon schrieb, auch die gleiche. So ist z.B. für 64 Bit die API CreateToolhelp32Snapshot diesselbe wie für 32 Bit Prozesse.
Das hab ich jetzt auf Adminstrator umgestellt.

Code:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC-Manifestoptionen
          Wenn Sie die Zugangsebene für das Windows-Benutzerkonto ändern möchten, ersetzen Sie den 
          requestedExecutionLevel-Knoten durch eines der folgenden Elemente.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            Durch Angeben des requestedExecutionLevel-Knotens wird die Datei- und Registrierungsvirtualisierung deaktiviert.
            Wenn Sie Datei- und Registrierungsvirtualisierung für Abwärts- 
            kompatibilität verwenden möchten, löschen Sie den requestedExecutionLevel-Knoten.
        -->
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
  
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- Eine Liste aller Windows-Versionen, mit denen die Anwendung kompatibel ist. Windows wählt automatisch die am stärksten kompatible Umgebung aus.-->

      <!-- Wenn die Anwendung mit Windows 7 kompatibel ist, heben Sie die Kommentierung des folgenden supportedOS-Knotens auf.-->
      <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
      
    </application>
  </compatibility>
  
  <!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren -->
  <!-- <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>-->

</asmv1:assembly>

Doch leider bekomme ich immer noch den Wert 0 ich hab bestimmt irgendwo noch ein Fehler drin. Ich habe noch Teamviewer. Da könntest du dir dem next wenn du Zeit hast den Code mal anschauen.

Wie siehts eigentlich mit einem Debugger aus?
Da ist doch bestimmt einer mit eingebaut?

Um welches Spiel oder welche Anwendun gehts denn eigentlich?
Seiten: 1 2 3