Autor Beitrag
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Fr 01.02.08 15:23 
So mal was schweres:

Ich habe eine eigene DLL geschrieben, die ich in ein Programm injecten will.
Um diese DLL zu schützen, habe ich mir den ExeCryptor gekauft.

Funzt auch alles super.
Das Injecten machen ich über die uall-Collection (Danke dafür ^^)

Das Problem: Wenn sie einmal injected ist kann ich sie nicht wieder uninjecten, da EC alle Openprocess() Calls auf diesen ganzen prozess blockt (oder besser: nur wenn ich mehr als VM_Read haben will)
Sieht nach nem Kernel Hook aus...Will aber auch nicht auf den Schutz verzichten

Gibt es also noch eine andere Möglichkeit eine DLL zu laden und wieder zu entladen?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 01.02.08 16:29 
Implementiere in deiner DLL eine Möglichkeit, die auf sichere Art und Weise eine Befehlsschnittstelle zum Unloaden implementiert.

Z.B. Ne encryptete Message mit DH-KEX und die restliche Kommunikation (z.B. Shared Memory) dann nur noch verschlüsselt\authorisiert.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Sa 02.02.08 18:14 
ohje...
hab zwar ungefähr verstanden was du willst

(also die DLL soll sich selbst entladen)
aber wie jz genau hab ich nicht kapiert...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 02.02.08 18:17 
Indem Du in der DLL und in deinem Hauptprogramm einen Shared-Memory-Bereich anlegst und über diesen Bereich mit dieser DLL kommunizierst. Such mal nach IPC.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Sa 02.02.08 19:57 
ok...hab jz das hier gefunden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Procedure SendStringToWindow (aMessage : String; hClient : Integer);
Var
  c: TCopyDataStruct;

Begin
  c.dwData := 0;
  c.cbData := Length(aMessage);
  c.lpData := @aMessage[1];
  SendMessage(hClient, WM_COPYDATA, 0, Integer(@c));
End;


Ich denke das ist das einfachste da ich die GetMessage fkt von dem prozess eh gehookt habe
aber noch 2 Fragen:
Was muss ich als handle nehmen? des fensterhandle?
und wie les ich das nun genau aus?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function callbackGetMessageA(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax: UINT): BOOL; stdcall;
var   P: PCopyDataStruct;
      sMessage : String;
begin
  Result:=newGetMessageA(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
  p := PCopyDataStruct(lpMsg.LParam);       
  SetLength(sMessage , p^.cbData);
  Move(PChar(p^.lpData)^, sMessage [1], p^.cbData);
end;


richtig?

klappt iwei nicht...die nachricht kommt nicht an, da das fenster anscheinend kurz den focus verliert...
oder hab ich nen denkfehler?
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mo 04.02.08 12:18 
ok...so weit so gut
ich hab jz über allocatehwnd in meiner DLL ein fenster erstellt über das ich die nachricht empfangen kann

das problem: kriegt mein programm iwie raus, welches das ist?
Kann ich z.b. eine Statische speicheradresse nehmen und diese via ReadProcessmemory auslesen?
wie kriege ich die in allen kompilierten versionen statisch? Es würde ja auch reichen wenns ein statisches offset im speicher der DLL ist

vielen dank
AHT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207



BeitragVerfasst: Mo 04.02.08 13:35 
user profile iconFlamefire hat folgendes geschrieben:
kriegt mein programm iwie raus, welches das ist?
Kann ich z.b. eine Statische speicheradresse nehmen und diese via ReadProcessmemory auslesen?
wie kriege ich die in allen kompilierten versionen statisch?
vielen dank

Nimm Filemapping:
CreateFileMapping
MapViewOfFile
UnmapViewOfFile
OpenFileMapping
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mo 04.02.08 14:09 
das geht leider nicht, da der prozess in den ich die dll injecte mehrfach vorhanden sein kann...
darum hab ich auch kein TCP genommen, weil der sich ja selbst in die quere kommt

was mich wundert: ich kann an das fenster nachrichten wie WM_MINIMIZE WM_HIDE etc schicken (also fenster modifikationen) und mit dem aktiven GetMessageA Hook kann ich key_press events abfangen
warum kriege ich dort aber die WM_COPYDATA nicht rein wenn ich die an das auptfenster schicke?
oder muss ich da was anders machen (s.obiger code)
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Do 07.02.08 14:29 
*PUSH*

Mal ne Frage. Wenn ich die Getmessage Funktion hooke, kriege ich ja alle Messages mit oder?
Wenn ich ne WM_HIDE schicke müsste ich das mitkriegen. Warum kriege ich aber die WM_COPYDATA nicht mit?
Oder funktioniert das ganze aus ner DLL heraus anders?