[Question] ReadProcessMemory With Char Text !?

02/20/2012 16:59 xBioK1ngz#1
CHAR chVersion[11];
DWORD dwVersion = 0x3A1234;
ReadProcessMemory(hProcessHandler,(LPCVOID)dwVersi on,&chVersion,4,NULL);
if ( chVersion == " 1.201301202" )
{
VersionInfoLabel->Text="< OK >";
}
else
{
VersionInfoLabel->Text="< PATCHED >";
}


Was ist falsch?
02/20/2012 17:28 jacky919#2
Der vierte Parameter gibt die Menge an Bytes an, die gelsen werden sollen. In deinem Fall hast du vier angegeben. Du vergleichst aber mit einem einem 12 stelligen String, also kann das garnicht funktionieren.
Probier es einmal so, da dein String 12 Stellen hat:
Code:
ReadProcessMemory(hProcessHandler,(LPCVOID)dwVersi on,&chVersion,sizeof(CHAR)*12,NULL)
Außerdem musst du dein Puffer-Array auf 12 vergrößern, da der String ansonsten nicht null terminiert ist.
02/20/2012 18:22 ms​#3
Außerdem solltest du strcmp benutzen.

Jetzt ist es aber genug mit dem Spoonfeeding. ;O
02/20/2012 19:19 xNopex#4
Code:
#include <stdio.h>
#include <windows.h>


int main(int argc, char** argv)
{
    HANDLE handle = GetCurrentProcess();
    char cstrVersion[] = "1.201301202";
    const char* ulAddress = cstrVersion;
    DWORD dwRead = 0;
    size_t length = 128;
    char buffer[length];
    ZeroMemory(buffer, length);
    if(ReadProcessMemory(handle, ulAddress, buffer, length, &dwRead) == TRUE)
    {
        buffer[dwRead] = 0;
        if(strcmp(buffer, "1.201301202") == 0)
        {
            printf("%s", "< OK >");
        }else
        {
            printf("%s", "< PATCHED >");
        }
    }

    return 0;
}
EDIT: Letzter Parameter von ReadprocessMemory is gemäß MSDN ein size_t Zeiger.. Aber scheinbar sind meine Header veraltet..
02/21/2012 17:33 MrSm!th#5
C++ Lernen + MSDN Lesen = win

#closed