Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi C++ zu delphi (https://www.delphipraxis.net/107279-c-zu-delphi.html)

k4ni 25. Jan 2008 16:29

Re: C++ zu delphi
 
Hmm ich habs mit Delphi 7 und 10 versucht.
Es macht schon was es machen muss aber dann gibts dann halt danach ne eAddressViolation :gruebel:

Neotracer64 25. Jan 2008 16:32

Re: C++ zu delphi
 
Gib nochmal den ganzen Code oder gleich das Test Projekt als Anhang.
Vlt. habe ich einen Fall übersehen. Geht es denn, wenn du ein ganz neues projekt machst und meinen code reinkopierst?

Win32.API 25. Jan 2008 16:40

Re: C++ zu delphi
 
Dann liegt das Problem warscheinlich auch woanders, hast du dir den Anfang von PostMessage mal im disassembler angeschaut?

BTW, mein vorschlag waere:
Delphi-Quellcode:
function PostMessage1337(hWnd:HWND;MSG:UINT;WPARAM:wParam;LPARAM:lParam):BOOL; stdcall;
asm
        jmp @go
        @usr32: db 'user32.dll',0
        @PMA: db 'PostMessageA',0
        @go:
        lea eax, @usr32
        push eax
        call LoadLibraryA
   lea ecx, @PMA
        push ecx
        push eax
        call GetProcAddress
        add eax,5
        jmp eax
end;

k4ni 25. Jan 2008 16:43

Re: C++ zu delphi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab ich auch schon versucht.
Werd jetz auch mal Win32.Api's version testen.
Ich hab das project mal im ahhang. (mit der kompilierten exe).

Edit:
Komisch. Win32.Api's geht auch nicht. Auch eAddressViolation.

Neotracer64 25. Jan 2008 16:49

Re: C++ zu delphi
 
Jo Win32.APIs Lösung klappt bei mir auch problemlos. ;)
Wollte halt sowenig ASM wie möglich benutzen, da man daraus dann besser eine Secure Api Klasse basteln könnte.

Zitat:

Edit:
Komisch. Win32.Api's geht auch nicht. Auch eAddressViolation.

Hmm. Dann ist was anderes falsch. Mal reinschauen. :D

//Edit2:

Selbst die Binary von dir klappt bei mir.
Das bedeutet wohl, dass entweder:

1. PostMessageA bei dir von irgendeinem anderen Programm so merkwürdig gehookt wird, dass es nicht geht.
2. Du hast ServicePack2 nicht, da dort (afaik?) MOV EDI, EDI für Hotpatching eingeführt wird.

Hmm mehr fällt mir im Moment nicht ein.

Win32.API 25. Jan 2008 16:51

Re: C++ zu delphi
 
Deine kompilierte version laeuft bei mir, welche windows version benutzt du? Welches Programm versucht du zu umgehen?

k4ni 25. Jan 2008 16:55

Re: C++ zu delphi
 
Okay..danke.
Ne SP2 hab ich nicht, werd ich mir jetzt aber mal ziehen aber vorher erst mal mit nem PC restart versuchen. Hatte vorher das spiel mal aus mit dem GameGuard (nProtect rev1139) das PMA hookt Und genau das will ich damit umgehen. Achso ja, das spiel heist MapleStory.

Edit:
Vielen vielen dank an euch 2.
Liegt wohl an SP2 (installier ich gerade) müsst dann gehen. DANKE!! :thumb:

k4ni 25. Jan 2008 19:05

Re: C++ zu delphi
 
Hey, das soll jetz kein bump sein sondern nur eine frage zum gleichen thema.

Also das spile bzw. der GameGuard hookt ReadProcessMemory auch. (glaub ich zumindest)
Wenn ich versuche vom Prozess zu lesen gibt er einfach keine value zurück.
So hab ich das gemacht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ThreadId: Integer;
  HandleWindow: Integer;
  wnd: HWND;
  ProcessId, vl: Integer;
  p : pointer;
  puffer : array[0..1] of DWord;
  BytesRead: DWord;
begin
vl := 1337;
wnd := FindWindow('MapleStoryClass', nil);

if wnd = 0
  then
    begin
    ShowMessage('Could not find the Window');
    Exit;
    end;

    ThreadId := GetWindowThreadProcessId(wnd, @ProcessId);
    HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
    ReadProcessMemory( HandleWindow, ptr($0040000), @puffer[0], 4, BytesRead );

     vl := Puffer[0];
    ShowMessage(IntToStr(vl));
    CloseHandle(HandleWindow);
end;
Bei anderen prozessen geht das super. Dann hab ich das bei MapleStory (also das spiel) versucht dann bekomm ich die Message "1337". Hab ich ja davor noch deklariert.
Dann hab ich hier mal das gleiche versucht wie bei PMA.
Also:
Delphi-Quellcode:
function RPM(hProcess: Cardinal; const IpBaseAddress: Pointer; IpBuffer: Pointer; nSize: Cardinal; var IPNumberOfBytedRead: Cardinal):BOOL;stdcall;assembler;
asm
        jmp @go
        @usr32: db 'Kernel32.dll',0
        @PMA: db 'ReadProcessMemory',0
        @go:
        lea eax, @usr32
        push eax
        call LoadLibraryA
   lea ecx, @PMA
        push ecx
        push eax
        call GetProcAddress
        add eax,5
        jmp eax
end;
Mal keine EAddressViolation :)
Jetzt kommt auch kein "1337" mehr als message sondern immer diese zahl bei jeder addy: 1769498
Wenigstens ein kleiner erfolg.
Jetzt die frage:
Kann das sein das es auch an OpenProcess() liegt das er das hookt?
Oder ist der asm-code extra nur für PMA`?

Danke :)

Neotracer64 26. Jan 2008 03:20

Re: C++ zu delphi
 
Gameguard veranstaltet wesentlich mehr als Usermode Apis zu hooken. (Obwohl ich mir jetzt nicht sicher bin, ob GameGuard ÜBERHAUPT was im Userland hooked, aber da scheinst du dich informiert zu haben oder hast nachgeschaut?)
Wie dem auch sei, GameGuard lädt einen Treiber und verhindert jegliche Manipulation des Zielprozesses von Ring0 aus.
Es wird also viel schwieriger werden GameGuard zu umgehen, als du anfangs dachtest.
Denn jetzt wäre es an der Zeit GameGuard zu reversen um zu gucken, was GameGuard macht und was man dagegen tun könnte.
Leider kommen auch noch AntiDebug-Tricks dazu, also wie gesagt es wird nicht einfach.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz