Autor Beitrag
MCQ
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75

Windows 95/98/XP
Delphi 7 Etp.
BeitragVerfasst: Mi 08.02.06 19:53 
Hey, Ich wolllte mich mal mit CreateRemoteThread beschäftigen. Nun hab ich schon herausgefunden, das man den Code und die dafür notwendigen Daten in den Remot-Prozess kopieren muss um mit CreateRemoteThread einen Thread erstellen zu können. Das hab ich auch getan. Wenn ich es zum testen in den eigenen Prozess injeziere funktioniert es auch tadellos. Sobald ich es aber in in eine andere Anwendung injeziere wird diese "aus Sicherheitsgründen geschlossen". Sie stürzt also ab. Kann mir jemannd sagen woran das liegt und wie ich es ändern kann?


Gruß MCQ

Ich poste hier mal meinen bisherigen Code:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
unit Unit2;

interface

uses
  Windows, Sysutils;

//  {$DEFINE Set_BreakPoint}

implementation

function GetProcSize(proc : Pointer) : Cardinal;
begin
  result := 1;
  while(true)do
  begin
    if(Byte((pointer(Cardinal(proc) + result - 1))^) = $C3)then
      Break;
    Inc(result);
  end;
end;

function ExpandFileName(const FileName: string): string;
var
  FName: PChar;
  Buffer: array[0..MAX_PATH - 1] of Char;
begin
  SetString(Result, Buffer, GetFullPathName(PChar(FileName), SizeOf(Buffer),
    Buffer, FName));
end;


procedure Thread(param:Pointer);stdcall;
var
  (* API-Pointer *)
  pLoadLibrary,pGetProcAddress:pointer;
  (* inkludierte API-Funktionen *)
  LoadLibrary     : function(libname:PChar):THandle;stdcall;
  GetProcAddress  : function(hModule:THandle;ProcName:PChar):Pointer;stdcall;
  MsgBox          : function (h:THandle;Text,Caption:PChar;typ:integer):integer;stdcall;
  (* Zeichenketten *)
  user32          : PChar;
  kernel32        : PChar;
  msg_api         : PChar;
  (* normale Variablen *)
  h:THandle;
begin
asm
{$IFDEF Set_BreakPoint}
  int 3
{$ENDIF}
  mov eax,[ebp+8]           // Parameter
  xor ebx,ebx
  mov  bl, [eax]            // Parameter - Anzahl d. Zeichenketten
  add eax,  ebx
  inc eax                   // Springe hinter die Längenangaben der Zeichenketten
  (* LoadLibrary und GetProcAddress werden ermittelt *)
  mov ebx, [eax]            // Parameter - LoadLibrary
  mov pLoadLibrary,ebx
  add eax, 4
  mov ebx, [eax]            // Parameter - GetProcAddess
  mov pGetProcAddress,ebx
  (* Zeichenketten *)
  xor ecx, ecx
  xor edx, edx
  mov  al,[ebp+8]           // eax = Länge der Zeichenketten
  mov ebx, eax              // ebx = Pointer auf Zeichenkette
  mov  cl, [eax]            // ecx = Anzahl d. Zeichenketten
  add ebx, ecx
  add ebx, 9
  inc eax
  mov user32, ebx           // Zeichenkette 1 - user32.dll
  inc ebx
  mov dl,[eax]
  add ebx,edx
  inc eax
  mov kernel32, ebx         // Zeichenkette 2 - kernel32.dll
  inc ebx
  mov dl,[eax]
  add ebx,edx
  inc eax
  mov msg_api, ebx          // Zeichenkette 3 - MessageBoxA
end;
@LoadLibrary:=pLoadLibrary;
@GetProcAddress:=pGetProcAddress;
h:=LoadLibrary('user32.dll');
@MsgBox:=GetProcAddress(h,msg_api);
MsgBox(0,user32,kernel32,0);
end;


var param     : pByteArray;
    p         : Pointer;
    pAPI      : Pointer;
    tmp       : DWORD;
    s         : PChar;
    len       : byte;
    num       : byte;
    hProcess  : THandle;
    ThreadSize: DWORD;
    procedure AddPtr(var p:Pointer;i:integer);
     begin
      p:=ptr(DWORD(p)+i);
     end;
begin
ThreadSize:=GetProcSize(@Thread);
num:=0;
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,GetCurrentProcessID());
param:=VirtualAllocEx(hProcess, nil, 30 + threadsize, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess,param,@num,SizeOf(num),tmp);
p:=param;
(* Die Länge des Strings "user32.dll" wird ermittelt und gespeichert *)
AddPtr(p,1);
len:=length('user32.dll');
inc(num);
WriteProcessMemory(hProcess,p,@len,SizeOf(len),tmp);
(* Die Länge des Strings "kernel32.dll" wird ermittelt und gespeichert *)
AddPtr(p,1);
len:=length('kernel32.dll');
inc(num);
WriteProcessMemory(hProcess,p,@len,SizeOf(len),tmp);
(* Die Länge des Strings "MessageBoxA" wird ermittelt und gespeichert *)
AddPtr(p,1);
len:=length('MessageBoxA');
inc(num);
WriteProcessMemory(hProcess,p,@len,SizeOf(len),tmp);
(* Die Anzahl der Zeichenketten wird aktuallisiert *)
WriteProcessMemory(hProcess,param,@num,SizeOf(num),tmp);
(* Die API-Adressen werden gespeichert *)
AddPtr(p,1);
pAPI:=GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA');
WriteProcessMemory(hProcess,p,@pAPI,SizeOf(pAPI),tmp);

AddPtr(p,SizeOf(pAPI));
pAPI:=GetProcAddress(GetModuleHandle('kernel32.dll'), 'GetProcAddress');
WriteProcessMemory(hProcess,p,@pAPI,SizeOf(pAPI),tmp);
(* Zeichenketten werden geschrieben *)
(* user32.dll *)
AddPtr(p,SizeOf(pAPI));
s:='user32.dll';
pAPI:=@s;
pAPI:=Pointer(DWORD(pAPI^));
WriteProcessMemory(hProcess,p,pAPI,length(s),tmp);
AddPtr(p,length(s)+1);
(* kernel32.dll *)
s:='kernel32.dll';
pAPI:=@s;
pAPI:=Pointer(DWORD(pAPI^));
WriteProcessMemory(hProcess,p,pAPI,length(s),tmp);
AddPtr(p,length(s)+1);
(* MessageBoxA *)
s:='MessageBoxA';
pAPI:=@s;
pAPI:=Pointer(DWORD(pAPI^));
WriteProcessMemory(hProcess,p,pAPI,length(s),tmp);
AddPtr(p,length(s)+1);
writeProcessMemory(hProcess,p,@Thread,1024,tmp);
CreateRemoteThread(hProcess,nil,0,p,param,0,tmp);
end.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Mi 08.02.06 20:17 
wie soll der das bitte machen?:

h:=LoadLibrary('user32.dll');

und wenn du nen BP hast dann debug es doch.

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
MCQ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75

Windows 95/98/XP
Delphi 7 Etp.
BeitragVerfasst: Mi 08.02.06 20:21 
naja das probl. is er ruft die funktion nicht auf
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: Mi 08.02.06 22:28 
Soweit ich den Source richtig verstehe, kann das so nicht funzen ...

Du fragst in deinem Adressraum ab, wo die Kernel32.dll und andere DLLs (sowie deren Funktionen) liegen und nutzt diese Werte für den Zugriff auf diese Funktionen im Remote-Thread. Das kann nicht gutgehen.

Unter Win98 mag das funzen ... Jedes WinNT verhagelt Dir das, da kaum eine DLL in zwei Prozessen an der gleichen Stelle liegt ...

Lese jegliche API-Befehle und deren Adressen im Zielprozess ein.

Weiterhin zu beachten:
1. Nur relative Sprünge
2. keine Absoluten Adressangaben!

Have a nice day!

_________________
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.
MCQ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75

Windows 95/98/XP
Delphi 7 Etp.
BeitragVerfasst: Mi 08.02.06 22:31 
aber wie lese ich die adressen der api's ein ohne welche zu nutzen?
Oder wie lese ich die Adressen der PI's im Remote-Prozess aus?
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: Mi 08.02.06 22:36 

_________________
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.
MCQ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75

Windows 95/98/XP
Delphi 7 Etp.
BeitragVerfasst: Do 09.02.06 01:53 
hmm hab es mir mal angeschaut, aber auch da keine funktion gefunden die mir weiterhilft. Das einzigste Was dabei ist ist eine Funktion die das selbe macht was ich schon programmiert hab, nämlich den Thread injezieren und starten
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Do 09.02.06 10:33 
Also so wie du es da hast, funktioniert das doch in der eigenen Anwendung.

Den mainpart solltest du besser in eine Funktion auslagern.

Es wird aber nicht mit einem Fremden Prozess funktionieren, da bei

h:=LoadLibrary('user32.dll');

der PChar natürlich nicht stimmt.

Kernel32.dll ist in jedem Prozess an der gleichen Stelle, vondaher kannst du da ruhig die Adressen nehmen die du per GetPRocAddress aus dem eigenen Prozess holst. Was anderes mach ich bei mir in der Collection auch nicht.

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
MCQ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75

Windows 95/98/XP
Delphi 7 Etp.
BeitragVerfasst: Do 09.02.06 10:55 
uall@ogc hat folgendes geschrieben:
h:=LoadLibrary('user32.dll');

der PChar natürlich nicht stimmt.

ARKS bin ich bekloppt
Hab den Source grade etwas geändert, es muss natürlich heißen

ausblenden Delphi-Quelltext
1:
h:=LoadLibrary(user32);					


Da in user32 der PChar "user32.dll" steht, dann sollte es eigentlich funktionieren ... aber es stürzt nach wie vor ab. Stuzig macht mich weiterhin das der Debugger auf meinem BP in der ersten Zeile der Thread-Prozedur nicht reagiert obwohl ich die Auskommentierung des entsprechenden Debugger-Define rückgängig gemacht hab. Ich hab das gefühl Sie wird gar nicht ausgeführt :( Es Sieht für mich fast so aus als würde ich an eine falsche stelle im Code verweisen. Sind die Parameter die ich CreateRemoteThread übergeben hab so korrekt?
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Do 09.02.06 13:07 
Hab mir zwar die MSDN angeschaut aber wo ist der Zweck/Logik einen Thread an einen anderen Prozess zu binden?
MCQ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75

Windows 95/98/XP
Delphi 7 Etp.
BeitragVerfasst: Do 09.02.06 13:38 
Im Moment will ich es einfach nur lernen weil es etwas isst was ich noch nicht kann. Aber Einsatzgebiete gibt es dafür auch einige. z.B. im Securitybereich. Man kann man eine Funktion in den Eltern-Prozess auslagen, welche im Elternproess APIs hookt die ein Debugger nutzen würde. Die Explorer.exe ist im normalfall dieser Elternprozess, diese wird die Debugging-APIs selbst aber nicht nutzen ... denke ich mal. Wenn die Prozedur merkt das der Prozess (unser kleines tool) beendet wurde macht er die API-Hooks rückgängig und beeendet den Thread. Das ist nur eine Theorie anwendung, in der Praxis konnte ich es noch nicht testen.
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: Do 09.02.06 15:52 
@uall: Ich dachte da an die uallKernel-Unit, speziell GetKernelHandle und LoadLibraryX ;-) Die kann man mit ein wenig phantasie auch in nem Remote-Thread ausführen lassen *g*

_________________
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.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Do 09.02.06 19:31 
MCQ der oben benutzte Quellcode funktioniert bei mir ohne Probleme, das muss dann an dir liegen ;)

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
MCQ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75

Windows 95/98/XP
Delphi 7 Etp.
BeitragVerfasst: Do 09.02.06 19:35 
Hast du dabei auch mal versucht in der Zeile

ausblenden Delphi-Quelltext
1:
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,GetCurrentProcessID());					

eine andere PID einzutragen? im eigenen Prozess funktioniert es nämlich bei mir auch, im fremden nur nicht ;)

Im eigenen Prozess würden mit X wege einfallen die weniger umständlich währen um einen Thread zu erzeugen, aber das ziel ist es ja einen Thread in einem fremden Prozess zu starten.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Do 09.02.06 21:19 
Geht bei mir auch mit nem fremden Prozess.

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
MCQ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75

Windows 95/98/XP
Delphi 7 Etp.
BeitragVerfasst: Fr 10.02.06 07:52 
dann weiss ich echt nicht mehr was ich falsch mache. Ich hab es mit Notepad, dem IE, Thunderbird und dem Explorer versucht und alle sind abgesstürzt :(
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Fr 10.02.06 15:36 
Ich hab das mal so überarbeitet:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
unit Unit2;

interface

uses
  Windows, Sysutils, uallProcess;

procedure bla;

implementation


function ExpandFileName(const FileName: string): string;
var
  FName: PChar;
  Buffer: array[0..MAX_PATH - 1] of Char;
begin
  SetString(Result, Buffer, GetFullPathName(PChar(FileName), SizeOf(Buffer),
    Buffer, FName));
end;


procedure Thread(param:Pointer); stdcall;
var
  (* inkludierte API-Funktionen *)
  XLoadLibrary     : function(libname:PChar):THandle;stdcall;
  XGetProcAddress  : function(hModule:THandle;ProcName:PChar):Pointer;stdcall;
  XMsgBox          : function (h:THandle;Text,Caption:PChar;typ:integer):integer;stdcall;
  (* Zeichenketten *)
  Xuser32          : PChar;
  Xkernel32        : PChar;
  Xmsg_api         : PChar;
  (* normale Variablen *)
  h:THandle;
  incb: PByte;
begin
  incb := Param;
  Param := Pointer(integer(Param)+1);
  XUser32 := Param;

  Param := Pointer(Integer(Param)+incb^);
  incb := Param;
  Param := Pointer(integer(Param)+1);
  XKernel32 := Param;

  Param := Pointer(Integer(Param)+incb^);
  incb := Param;
  Param := Pointer(integer(Param)+1);
  Xmsg_api := Param;

  Param := Pointer(Integer(Param)+incb^);

  @XLoadLibrary := PPointer(Integer(Param)+0)^;
  @XGetProcAddress := PPointer(Integer(Param)+4)^;

  h := XLoadLibrary(Xuser32);
  @XMsgBox := XGetProcAddress(h,Xmsg_api);
  XMsgBox(0,Xuser32,Xkernel32,0);
end;

procedure ThreadEnd; asm end;


procedure bla;
var param     : pByteArray;
    p         : Pointer;
    pAPI      : Pointer;
    tmp       : DWORD;
    hProcess  : THandle;
    S, T: String;
    procedure AddPtr(var p:Pointer;i:integer);
    begin
      p:=ptr(integer(p)+i);
    end;
begin
  hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,findProcess('firefox'));
  param:=VirtualAllocEx(hProcess, nil, 30 + Integer(@ThreadEnd)-Integer(@Thread
    ), MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);

  p:=param;
  (* Die Länge des Strings "user32.dll" wird ermittelt und gespeichert *)
  t := 'user32.dll'#0;
  s := Char(Length(t))+t;
  WriteProcessMemory(hProcess,p,@s[1],Length(s),tmp);
  AddPtr(p,tmp);

  (* Die Länge des Strings "kernel32.dll" wird ermittelt und gespeichert *)
  t := 'kernel32.dll'#0;
  s := Char(Length(t))+t;
  WriteProcessMemory(hProcess,p,@s[1],Length(s),tmp);
  AddPtr(p,tmp);

  (* Die Länge des Strings "MessageBoxA" wird ermittelt und gespeichert *)
  t := 'MessageBoxA'#0;
  s := Char(Length(t))+t;
  WriteProcessMemory(hProcess,p,@s[1],Length(s),tmp);
  AddPtr(p,tmp);


  (* Die API-Adressen werden gespeichert *)
  pAPI:=GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA');
  WriteProcessMemory(hProcess,p,@pAPI,SizeOf(pAPI),tmp);
  AddPtr(p,tmp);

  pAPI:=GetProcAddress(GetModuleHandle('kernel32.dll'), 'GetProcAddress');
  WriteProcessMemory(hProcess,p,@pAPI,SizeOf(pAPI),tmp);
  AddPtr(p,tmp);

  WriteProcessMemory(hProcess,p,@Thread,Integer(@ThreadEnd)-Integer(@Thread),tmp);
  CreateRemoteThread(hProcess,nil,0,p,param,0,tmp);
end;

end.

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
MCQ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75

Windows 95/98/XP
Delphi 7 Etp.
BeitragVerfasst: Fr 10.02.06 16:18 
Anscheinend hab ich es nur versucht in den falschen Prozess zu injezieren. Mit firefox funktioniert es, Notepad und der Explorer stürzen aber ab :( Hast du ne Idee worn das lieg?
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Fr 10.02.06 17:20 
Du machst mir das echt nicht einfach.

Habs kompiliert, doppelklick in die listbox und der injected es in den prozess.
Einloggen, um Attachments anzusehen!
_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
MCQ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75

Windows 95/98/XP
Delphi 7 Etp.
BeitragVerfasst: Fr 10.02.06 17:25 
user profile iconuall@ogc hat folgendes geschrieben:
Du machst mir das echt nicht einfach.

Sorry :oops:
user profile iconuall@ogc hat folgendes geschrieben:
Habs kompiliert, doppelklick in die listbox und der injected es in den prozess.
Ich sags ja ungern ... aber beim notepad gibt es bei injecten immernoch einen craah seitens notepad. Auch bei der von dir compileten exe. Ich hoffe es testet außer mir nochjemannd, schließlich ist es ja möglich das es an meinem System liegt. Obwohl das eigendlich frisch installiert ist.