Autor Beitrag
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 29.04.05 00:25 
processview 1.0 by retnyg @ krazz.net/retnyg
___________________________________________________________________
download : hier

ein prozessmanager für die kommandozeile.
features:
- prozesse auflisten
- prozesse killen
- geladene dll's anzeigen
- verdächtige prozesse anzeigen

based on uallprocess unit of uall

lists processes, kills processes the taskmgr.exe's way, not like
most other processmanager tools ie. those of sysinternals.
generates lists of all loaded processes including submodules
(injected dll's). use lists of clean systems to compare if u're infected.

Zitat:
Usage: psview options
if started without parameters, psview lists all running processes.
available options:

/lm:4104 - lists modules of process with ID 4104
/k:4104 - kills process with ID 4104
/f:explorer - shows pid of process explorer.exe
/d - detailed: lists all process with modules

to generate a list-file of all your processes, type:

psview /d > list.txt



use only on own risk.

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...


Zuletzt bearbeitet von retnyg am Mi 12.10.05 17:34, insgesamt 1-mal bearbeitet
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 29.04.05 01:00 
user profile iconretnyg hat folgendes geschrieben:
kills processes the taskmgr.exe's way, not like
most other processmanager tools ie.

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:
function KillProcess(pid: integer): boolean; register;
// by retnyg
asm
   push 0
   test eax, eax
   jz @out
   push EAX
   push 0
   push 1
   CALL OpenProcess
   MOV ESI, EAX
   TEST ESI, ESI
   JE @final
   PUSH 1
   PUSH ESI
   Call TerminateProcess
   TEST EAX, EAX
   JNZ @success
   jmp @final
   @success:
   pop edi
   push 1
   @final:
   PUSH ESI
   CALL closehandle
   @out:
   pop eax
end;
{  // pascal version
  var prochnd: thandle;
  begin
    result := false;
    if pid > 0 then begin
      procHnd := OpenProcess(1, False, pID);
      if procHnd <> 0 then  begin
         result:= TerminateProcess(procHnd, 1);
         CloseHandle(ProcHnd);
      end;
    end;
  end; }

Äh, TerminateProcess ist aber kein Geheimnis. ich wüßte gar nicht, wie es anders geht. Wie machen es denn die von SysInternals?

Und man sollte beachten, dass TermionateProcess asynchron arbeitet und sofort zurückkehrt. Deswegen sieht meine Methode so aus:
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:
procedure KillIt(dwProcID: DWORD); 
var 
  hProcess : Cardinal; 
  dw       : DWORD; 
begin 
  { open the process and store the process-handle } 
  hProcess := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, False, dwProcID); 
  { kill it } 
  TerminateProcess(hProcess, 0); 
  { TerminateProcess returns immediately, so wie have to verify the result via 
    WaitfForSingleObject }
 
  dw := WaitForSingleObject(hProcess, 5000); 
  case dw of 
    { everythings's all right, we killed the process } 
    WAIT_OBJECT_0: Messagebox(Application.Handle, 'Prozess wurde beendet.''Prozess beenden'
      MB_ICONINFORMATION); 
    { process could not be terminated after 5 seconds } 
    WAIT_TIMEOUT: 
    begin 
      Messagebox(Application.Handle, 'Prozess konnte nicht innerhalb von 5 Sekunden beendet werden.'
        'Prozess beenden', MB_ICONSTOP); 
      exit; 
    end
    { error in calling WaitForSingleObject } 
    WAIT_FAILED: 
    begin 
      RaiseLastOSError; 
      exit; 
    end
  end
  { and refresh combobox contend } 
  Form1.Button1Click(Form1); 
end;

(Müsste ich mal überarbeiten und etwas schöner machen. ;) )
retnyg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 29.04.05 01:11 
hmm ich werde mal gucken ob dein einwand berechtigt ist; fakt ist mein code läuft.
ausserdem ist das 1 zu 1 der code, den ich mit ollydbg aus der taskmgr.exe raushabe.
und zwar deswegen, weil alle codeschnippsel die ich bislang gefunden habe, genau wie die sysinternal tools, explorer.exe zwar abschiessen können, diese sich jedoch im anschluss gleich wieder startet, wodurch man keine gelegenheit hat, viren-dll's zu löschen die sich in diesen prozess injiziert hatten.

dies ist der code, wie er auch von genannten tools benutzt wird.
entscheidend sind nur die parameter, welche übergeben werden.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
// üblicher weg prozesse zu killen. allerdings startet sich explorer.exe gleich neu
function KillProcess(pid: integer): boolean; stdcall;
var procHnd: THandle;
begin
  result := false;
  if pID <> 0 then begin
    procHnd := OpenProcess
    (PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION, False, pID);
    if procHnd <> 0 then  begin
       result:= TerminateProcess(procHnd, 0);
       CloseHandle(ProcHnd);
    end;
  end;
end;

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 29.04.05 01:40 
user profile iconretnyg hat folgendes geschrieben:
, weil alle codeschnippsel die ich bislang gefunden habe, genau wie die sysinternal tools, explorer.exe zwar abschiessen können, diese sich jedoch im anschluss gleich wieder startet,

Das ist aber doch eine Einstellung in der Registry, dass er wieder neu startet. Wo ist denn der Trick bei dir? Ich kann leider kein Assembler lesen.
retnyg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 29.04.05 01:47 
deswegen ist ja auch der auskommentierte delphi-source dabei, der das gleiche macht:
oben hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
{  // pascal version
  var prochnd: thandle;
  begin
    result := false;
    if pid > 0 then begin
      procHnd := OpenProcess(
1, False, pID);
      if procHnd <> 0 then  begin
         result:= TerminateProcess(procHnd,
 1);
         CloseHandle(ProcHnd);
      end;
    end;
  end; }

wie gesagt, entscheidend sind die parameter. dahin hat mich aber nicht die msdn geführt, sondern der debugger.

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 29.04.05 02:21 
Ach so, das meintest du mit dem Hinweis auf die Parameter.

Welcher Konstanten entspricht die 1 bei OpenProcess oder ist das eine undokumentierte Konstante?

Der zweite Parameter bei TerminateProcess ist aber doch nur der Exitcode für den Process. Und wenn man da 1 angibt, dann startet der Explorer nicht neu?
retnyg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 29.04.05 09:24 
in konstanten gesprochen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function killprocess(pid:dword):boolean;
//by retnyg
var prochnd: thandle;
begin
  result := false;
  if pid > 0 then begin
    procHnd := OpenProcess(PROCESS_TERMINATE, False, pID);
    if procHnd <> 0 then  begin
       result:= TerminateProcess(procHnd, 1);
       // 2.ter parameter ist hier der exitcode für den prozess und hat keine konstante
       CloseHandle(ProcHnd);
    end;
  end;
end;

user profile iconLuckie hat folgendes geschrieben:
Der zweite Parameter bei TerminateProcess ist aber doch nur der Exitcode für den Process. Und wenn man da 1 angibt, dann startet der Explorer nicht neu?

so ist es.

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
retnyg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 29.06.05 18:53 
neue version online: kann nun auch einen prozess per prozessname killen, und listen verdächtiger prozesse anzeigen
downloadlink oben
Zitat:

pr0cessV13w 1.1 ::by retnyg::

Usage: psview options

if started without parameters, psview lists all running processes.
available options:
/lm:4104 - lists modules of process with ID 4104
/k:4104 - kills process with ID 4104
/k:explorer - kills process explorer.exe
/f:explorer - shows pid of process explorer.exe
/d - detailed: lists all process with modules

/s - suspicious: lists suspicios processes & modules

/vs - very suspicious: lists suspicios processes & modules

to generate a list-file of all your processes, type:
psview /d > list.txt


_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.06.05 19:06 
Was sind denn für dich 'verdächtige' Prozesse? Und sind das auch für mich verdächtige Prozesse?
retnyg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 29.06.05 19:15 
user profile iconLuckie hat folgendes geschrieben:
Was sind denn für dich 'verdächtige' Prozesse? Und sind das auch für mich verdächtige Prozesse?

verdächtig ist, was nicht von einer als vertrauenswürdig eingestuften firma kommt, bzw keine dateiversionsinformationen bei der dll/exe dabei sind

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.06.05 19:35 
In meinen Projekten sind meist auch keine Dateiinformationen enthalten, entwerder, weil ich es vergesse oder zu faul bin. Ich halte das nicht für ein sehr aussagekräftiges Kriterium.
retnyg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 29.06.05 19:44 
ich schon, weil ich die prozessnamen meiner eigenen programme und deren dlls, sowie der tools die ich mir irgendwo runtergeladen habe, kenne. das was übrig bleibt sind dann vielleicht noch 20 "schlampig implementierte" exe/dlls (da sieht man dann aber anhand des pfade, z.b. C:\programme\java\jre2.1.4 ob man denen vertrauen kann) - und eventuell vorhandene trojanerprozesse und hooks

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.06.05 20:01 
Dann würdest du auch einem Programm vertrauen, was in Windows\System32 liegt, weil das ist ja ein natives Windows Verzeichnis?
retnyg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 29.06.05 20:10 
natürlich nicht. wenns ne datei ist die im win-ordner liegt und die im /VS modus angezeigt wird, ist höchste vorsicht geboten (es empfiehlt sich eine suche mit google nach dem dateinamen). entweder ein trojaner oder ein dummes programm, das seine dll da hinkopiert hat (z.b. netlimiter)
die einzige "unsignierte" MS-datei im windows ordner, die standardmässig geladen ist, ist übrigens redmonnt.dll

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Alni
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 205

Win 2000, XP, SuSe, Debian
D5 Prof, D7 Prof, Kylix
BeitragVerfasst: Sa 23.07.05 03:57 
user profile iconretnyg hat folgendes geschrieben:

ausserdem ist das 1 zu 1 der code, den ich mit ollydbg aus der taskmgr.exe raushabe.


Bitte versteh mich nicht falsch ich will hier keine Legalitätsdiskussion vom Zaun brechen. Aber dass du damit gegen die EULA von Windows verstoßen hast, sollte dir klar sein. Vor allem das ganze noch in Opensource an zu bieten... Das soll nur ein freundlicher Hinweis darauf sein. Ob du derartige Risiken eingehen willst bleibt dir überlassen. Aber zumindest empfehle ich eine Überarbeitung deines Posts, dann ändere ich den Post hier auch gern wieder. Dann hat keiner was gesehen und keiner was gemerkt ;)

_________________
MfG Alex
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 23.07.05 12:28 
Ich glaube kaum, dass der Taskmanager von Windows in Delphi geschrieben ist, also hat schon mal eine Übertragung nach Delphi stattgefunden, desweiteren dürfte er im Disassembler auch nur die API Aufrufe gesehen haben, diese selber aufzurufen kann nicht illegal sein, da sie Windows selber zur Verfügung stellt.
Alni
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 205

Win 2000, XP, SuSe, Debian
D5 Prof, D7 Prof, Kylix
BeitragVerfasst: Sa 23.07.05 13:42 
Aber bereits disassemblieren darf er nicht. Wenn die EULA nicht so lang wär würde ich ja die Passage raussuchen, mal sehen. Aber ich lass mich gerne eines besseren Belehren falls ich mich in dem Punkt geirrt habe.

Edit:
EULA hat folgendes geschrieben:
4. LIMITATIONS ON REVERSE ENGINEERING, DECOMPILATION, AND DISASSEMBLY. You may not reverse engineer, decompile, or disassemble the Software, except and only to the extent that such activity is expressly permitted by applicable law notwithstanding this limitation.

_________________
MfG Alex


Zuletzt bearbeitet von Alni am Sa 23.07.05 14:43, insgesamt 2-mal bearbeitet
zemy
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 207

Win XP Prof.
D7
BeitragVerfasst: Sa 23.07.05 14:31 
Ist es absicht, das ich unter psview /vs auch psview.exe finde? :D

MfG Zemy

_________________
LifeIsToShortToThinkAboutTheShortness
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 23.07.05 14:53 
Nach deutschen Recht ist Disassemblieren erlaubt. Man darf sogar das Kompilat ändern für den privaten gebrauch.
Alni
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 205

Win 2000, XP, SuSe, Debian
D5 Prof, D7 Prof, Kylix
BeitragVerfasst: Sa 23.07.05 15:06 
@Luckie könntest du mir bitte eine Quelle dazu angeben, die deine Aussage bestätigt? In der deutschen Version der EULA stehts nämlich genauso drin nur eben wieder mit der Einschränkung falls andere Gesetze gelten. Danke dir schon mal.

_________________
MfG Alex