Frage zu naked Funktion und WriteProcessMemory, help!



  • Dein Edit ändert nichts an der Tatsache das du hier Beihilfe für etwas willst, was nicht legal ist.



  • Ich sehe hier nur jemand der wild behauptet er wolle eine Software von Blizzard manipulieren.
    Also kein Aufruf ihm bei etwas eventuell(!) verbotenem zu helfen.

    Somit können ich und andere ihm ohne Probleme helfen.

    P.S. In Deutschland ist die Gesetzeslage übrigens anders, hier wird ja noch nicht einmal ein Binary disassembliert, sondern zur Laufzeit in den Speicher einer anderen Anwendung geschrieben/gelesen, das ist in Deutschland definitiv nichs illegales.
    Illegal wäre erst, wenn man dies nutzt um einen Rechtsverstoß zu begehen, beispielsweise TAN-Nummern aus einer Online-Banking Software auslesen und sich von dem Konto Geld abzuheben.



  • Okay ich sehe schon da stößt man in diesen Forum auf verschlossene Türen. Jedoch ohne das ich jetzt extra einen neuen Thread startet möchte habe ich eine frage die aufjedenfall NICHT illegal ist oder sonstiges.

    Ich hab es geschaft die Registerinhalte auszulesen, so weit so gut... nur habe nun das Problem, dass ich dies Register in DWORD variablen einlesen musste, ansonsten würde ich immer Null erhalten. Ich brauche aber die Registerinhalte als float, gibts ne möglichkeit aus einem unsigned long ein float zu machen?
    Ich habe hier so eien Converter der macht sowas, aber ich weiß nicht wie er es macht, ein Beispiel:

    unisgned long: 1120403456
    als float: 100.00

    wenn ich das so versuche DWORD dwWord = 1120403456 -> float fFloat = (float)dwWord, wird es nichts. Wie macht er das sonst? Oder gibt es eine bessere möglichkeit den Registerinhalt gleich als float zu erhalten?

    Greetz Tobi



  • Dann musst Du halt den Register Inhalt gemäss dem IEEE- irgendwas interpretieren.

    Such mal den IEEE zu Float und Double und so weiter und so fort.
    Simon



  • Was ist IEEE?

    EDIT:
    Ok ich weiß nun das IEEE 754 die Standartnorm für die Darstellung von Gleitkommazahlen auf Computern ist, aber wie ich ein unsigned long zu ein float umrechne habe ich dennoch nicht herraus gefunden. hm....

    EDIT2:

    SOO wird gemacht:
    DWORD dwVal = 1120403456;
    FLOAT fValue = *(PFLOAT)&dwVal;

    Greetz Tobi



  • Ein schönerer Weg wäre: float float_val = reinterpret_cast< float >( dwVal );

    Warum ging das Auslesen der Registerwerte denn nicht?



  • Fellhuhn schrieb:

    Davon abgesehen das es nicht einmal legal ist.

    bullshit.



  • Helferlein schrieb:

    Ein schönerer Weg wäre: float float_val = reinterpret_cast< float >( dwVal );

    Warum ging das Auslesen der Registerwerte denn nicht?

    Wenn dwVal = 1120403456 und du so castest, folgt: 1120403456.000 😉

    Greetz



  • Also bei mir kompiliert dieser Cast gar nicht, was auch zu erwarten ist, da ein Umwandeln eines Floats in ein Integer mit static_cast geschieht und dann trifft dein Ergebnis auch zu.

    Was man hier möchte ist ja einen Speicherbereich neu zu interpretieren, das geschieht über die Adresse auf diesen, d.h.

    float float_val = *( reinterpret_cast< float* >( &int_val ) );
    

    Sieht natürlich nicht wirklich schön aus, ist aber durchaus beabsichtigt.



  • Hi!

    Ich versuche auch grade, ein Register auszulesen.
    Doch ich verstehe nicht, wie man den ASM Code in Laufzeit generieren soll?

    @T0bi hat geschrieben...

    WriteProcessMemory( hWar3Process, (LPVOID)0x6F4973D2, (LPCVOID)&CodeCave, sizeof( (DWORD)CodeCave ), 0 );

    Aber das geht doch so nicht, oder?
    Wenn ich OllyDBG hernehme und eine ASM Line zu "CALL xxxxxxxx" ändere, ist von diesen xxxxxxxx im HEX- Code nix zu sehen.

    Wie funktioniert das alles?

    😕


Anmelden zum Antworten