Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi MSN Messenger Exploit (https://www.delphipraxis.net/105086-msn-messenger-exploit.html)

Luckie 15. Dez 2007 14:09

Re: MSN Messenger Exploit
 
Zitat:

Zitat von hedie
Ok gut dan mit deinem Anhang....

Vergiss es. Das war nur ein Scherz. Für einen Anfänger sollte das etwas zu schwer sein.

Grundsätzlich solltest du dich erstmal mit der Sprache auseinandersetzen, die du nicht kannst. Dann kann man sich daran machen etwas von einer Sprache in die andere zu übersetzen.

hedie 15. Dez 2007 14:10

Re: MSN Messenger Exploit
 
@ SubData

Sicher?
Woher weisst du da?

///////////////

@Luckie

Ja du hast recht :D

SubData 15. Dez 2007 14:11

Re: MSN Messenger Exploit
 
Getestet...

hedie 15. Dez 2007 14:13

Re: MSN Messenger Exploit
 
Cool :D

Wie kann man den eine DLL in einen Process Injecten

Das is nur ne Allgemeine Frage ich meine ich krieg ja nichtmal die DLL hin :D

Luckie 15. Dez 2007 14:17

Re: MSN Messenger Exploit
 
Zitat:

Zitat von hedie
Wie kann man den eine DLL in einen Process Injecten

Das is nur ne Allgemeine Frage ich meine ich krieg ja nichtmal die DLL hin :D

Dann solltest du dich erstmal mit DLLs beschäftigen: http://www.michael-puff.de/Developer...orte/Assarbad/

Und bitte benutzt die Forensuche und erstell für eine neue Frage einen neuen Thread.

PaddyL 15. Dez 2007 14:28

Re: MSN Messenger Exploit
 
Zitat:

Zitat von hedie
Cool :D

Wie kann man den eine DLL in einen Process Injecten

Das is nur ne Allgemeine Frage ich meine ich krieg ja nichtmal die DLL hin :D

Wieso immer gleich ne ganze DLL? Ich hab das mal aus Spaß per Thread gemacht:

InjectCode.pas
Delphi-Quellcode:
unit InjectCode;

interface

uses
  Windows, ShellAPI, Dialogs;

procedure Inject(ProcessHandle: longword; EntryPoint: pointer);
procedure FindAndInject(WindowTitle: PChar; EntryPoint: pointer);

implementation

procedure Inject(ProcessHandle: longword; EntryPoint: pointer);
var
  Module, NewModule: Pointer;
  Size, BytesWritten, TID: longword;
begin
  Module := Pointer(GetModuleHandle(nil));
  Size := PImageOptionalHeader(Pointer(integer(Module) + PImageDosHeader(Module)._lfanew + SizeOf(dword) +SizeOf(TImageFileHeader))).SizeOfImage;
  VirtualFreeEx(ProcessHandle, Module, 0, MEM_RELEASE);
  NewModule := VirtualAllocEx(ProcessHandle, Module, Size, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  WriteProcessMemory(ProcessHandle, NewModule, Module, Size, BytesWritten);
  CreateRemoteThread(ProcessHandle, nil, 0, EntryPoint, Module, 0, TID);
end;

procedure FindAndInject(WindowTitle: PChar; EntryPoint: pointer);
var
  ProcessHandle, PID: longword;
  Active : Integer;
begin
  Active := FindWindow(nil, WindowTitle);
  if Active = 0 then
    Exit;
  GetWindowThreadProcessId(Active, @PID);
  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
  Inject(ProcessHandle, EntryPoint);
  CloseHandle(ProcessHandle);
end;

end.
GTADelphi.dpr
Delphi-Quellcode:
program GTADelphi;

{$IMAGEBASE $13140000}

{$R 'GTADelphi.res' 'GTADelphi.rc'}

uses
  Windows, InjectCode;

{ This is the function which get's injected
  so add all your neat stuff here          }
function Main(EntryPoint: Pointer): LongWord; stdcall;
var
  ClearWantedLevel: procedure;
begin
  ClearWantedLevel := ptr($00438E40);
  ClearWantedLevel;
 
  Result := 0;
end;

begin
  // Inject Code
  FindAndInject('GTA: San Andreas', @Main);
  // Our Job is done
end.
Injected sich in San Andreas und ruft die Funktion zum reseten des Wanted Levels auf (sodas die Polizei einen nicht weiter sucht). Dannach beendet sich das ganze.

hedie 15. Dez 2007 14:30

Re: MSN Messenger Exploit
 
Coool Danke....

Hätt ich jetzt ne brauchbare zu Injectende DLL würd ich das glatt Testen

:D

PaddyL 15. Dez 2007 14:34

Re: MSN Messenger Exploit
 
Zitat:

Zitat von hedie
Coool Danke....

Hätt ich jetzt ne brauchbare zu Injectende DLL würd ich das glatt Testen

:D

Wie ich bereits sagte benutze ich keine DLL. Schreib deinen Code in die Main-Funktion. Sei allerdings gewarnt, dass 90% aller Delphi-Codes hier nicht gehen, da du hier im fremdem Addressraum arbeitest und nicht mal annähernd alles geladen ist was die VCL benötigt. Probiere ein paar einfache Win32-Calls wie CopyFile() und DeleteFile() oder such dir ein paar inGame oder inApp Addressen die du, wie ich im Beispiel, callen kannst um zu sehen ob es funktioniert hat.

Namenloser 15. Dez 2007 16:36

Re: MSN Messenger Exploit
 
Hallo, ich hab den Code mal mit Notepad testen wollen.
Leider funktioniert folgendes nicht:
Delphi-Quellcode:
program Project2;

{$IMAGEBASE $20000} //Imagebase mit HxD rausgekriegt

uses
  windows,
  InjectCode in 'InjectCode.pas';

function Main(EntryPoint: Pointer): LongWord; stdcall;
begin
  MessageBoxA(0,'Hallo Welt','meep',MB_OK);
  result := 0;
end;

begin
  FindAndInject('Unbenannt - Editor', @Main);
end.
Statt eine Messagebox anzuzeigen stürzt Notepad einfach ohne Fehlermeldung ab. Am Code in der function Main scheint es nicht zu liegen, weil Notepad sogar bei einer leheren Main-Funktion abstürzt.

Neotracer64 15. Dez 2007 17:04

Re: MSN Messenger Exploit
 
Ich weiss ja nicht genau, was PaddyL da genau machen wollte.
Zum Beispiel holt er sich die Base des eigenen MainModules und Freed diesen Addressbereich im fremden Prozess ohne zu wissen was sich dort befindet. Hää
Die Idee ist, die Funktion in den gleichen Addressbereich zu stopfen um nicht relocaten zu müssen.
Dass das funktionieren wird, ist aber sehr vage. Eigentlich muss man sogar viel Glück haben, dass es klappt.

http://msdn2.microsoft.com/en-us/library/aa366890.aspx
Zitat:

Zitat von MSDN
VirtualAllocEx Function
[...]
lpAddress

The pointer that specifies a desired starting address for the region of pages that you want to allocate.

If you are reserving memory, the function rounds this address down to the nearest multiple of the allocation granularity.

If you are committing memory that is already reserved, the function rounds this address down to the nearest page boundary.
[...]

Dann quetsch er dort das gesamte MainModule rein. Warum eigentlich?

Insgesamt also eigentlich eine sehr unsichere Methode.
Besser ist es, die beiden Addressen der Funktionen GetProcAddress und LoadLibraryA mit rüberzukopieren.
Dann ist man unabhängig. ;)
Natürlich darf man dann nicht auf globals zugreifen oder die RTL. Man beginnt in diesem Thread sozusagen von 0 mit GetProcAddres und LoadLibrary ;)


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

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