Entwickler-Ecke
Open Source Projekte - ProcessView [9 KB] (Console)
retnyg - Fr 29.04.05 00:25
Titel: ProcessView [9 KB] (Console)
processview 1.0 by retnyg @
http://krazz.net/retnyg
___________________________________________________________________
download : hier [
http://krazz.net/retnyg/psview.zip]
ein prozessmanager für die kommandozeile.
features:
- prozesse auflisten
- prozesse killen
- geladene dll's anzeigen
- verdächtige prozesse anzeigen
based on
uallprocess unit [
http://www.delphi-forum.de/topic_uallHook+uallProtect+uallDisasm+uallKernel+uallUtil+etc_39250.html] 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.
Delete - Fr 29.04.05 01:00
Titel: Re: ProcessView [9 KB] (Console)
retnyg hat folgendes geschrieben: |
kills processes the taskmgr.exe's way, not like
most other processmanager tools ie. |
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; 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; |
Ä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:
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 hProcess := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, False, dwProcID); TerminateProcess(hProcess, 0); dw := WaitForSingleObject(hProcess, 5000); case dw of WAIT_OBJECT_0: Messagebox(Application.Handle, 'Prozess wurde beendet.', 'Prozess beenden', MB_ICONINFORMATION); WAIT_TIMEOUT: begin Messagebox(Application.Handle, 'Prozess konnte nicht innerhalb von 5 Sekunden beendet werden.', 'Prozess beenden', MB_ICONSTOP); exit; end; WAIT_FAILED: begin RaiseLastOSError; exit; end; end; Form1.Button1Click(Form1); end; |
(Müsste ich mal überarbeiten und etwas schöner machen. ;) )
retnyg - 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.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| 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; |
Delete - Fr 29.04.05 01:40
retnyg 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 - Fr 29.04.05 01:47
deswegen ist ja auch der auskommentierte delphi-source dabei, der das gleiche macht:
oben hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| | |
wie gesagt, entscheidend sind die parameter. dahin hat mich aber nicht die msdn geführt, sondern der debugger.
Delete - 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 - Fr 29.04.05 09:24
in konstanten gesprochen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function killprocess(pid:dword):boolean; 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); CloseHandle(ProcHnd); end; end; end; |
Luckie 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.
retnyg - 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
|
Delete - 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 - Mi 29.06.05 19:15
Luckie 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
Delete - 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 - 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
Delete - 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 - 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
Alni - Sa 23.07.05 03:57
retnyg 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 ;)
Delete - 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 - 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. |
zemy - Sa 23.07.05 14:31
Ist es absicht, das ich unter psview /vs auch psview.exe finde? :D
MfG Zemy
Delete - Sa 23.07.05 14:53
Nach deutschen Recht ist Disassemblieren erlaubt. Man darf sogar das Kompilat ändern für den privaten gebrauch.
Alni - 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.
Delete - Sa 23.07.05 15:11
Ein Student für Computerrecht, oder wie sich das nennt, hatte mir mal die entsprechenden Passagen im Gesetzestext gezeigt.
Alni - Sa 23.07.05 15:21
Gut dann will ich dir mal glauben, scheinst mir ja auch sonst immer recht glaubwürdig gewesen zu sein :D. Dann vergesst alles was ich gesagt habe. Wobei eines eigentlich noch bleibt: Den Assembler -code 1:1 in ein Delphiprogramm zu übernehmen wäre das dann nicht eine Bearbeitung im Sinne des Urheberrechtes, die die Einwilligung des Rechte Inhabers bedarf? Oder bin ich hier auch auf dem falschen Dampfer unterwegs?
retnyg - Sa 23.07.05 15:32
Alni hat folgendes geschrieben: |
Den Assembler -code 1:1 in ein Delphiprogramm zu übernehmen wäre das dann nicht eine Bearbeitung im Sinne des Urheberrechtes, die die Einwilligung des Rechte Inhabers bedarf? Oder bin ich hier auch auf dem falschen Dampfer unterwegs? |
das mit dem 1:1 ist sinngemäss zu verstehen. assemblercode kann man gar nicht 1:1 aus einem anderen programm übernehmen, da die offsets sich immer auf fixe werte beziehen.
ich habe nur den aufruf von TerminateProcess debuggt, um rauszufinden welche werte auf den Stack gepushed werden.
kann mir nicht vorstellen dass ein api-aufruf ein lizenzrechtliches problem darstellt :lol:
die aktuelle version von psview benutzt sowieso nicht mehr die assembler-, sondern die delphi-routine.
zemy hat folgendes geschrieben: |
Ist es absicht, das ich unter psview /vs auch psview.exe finde? :D |
ja, denn für psview gilt das gleiche wie andere programme ohne dateiversionsinformationen:
retnyg hat folgendes geschrieben: |
verdächtig ist, was nicht von einer als vertrauenswürdig eingestuften firma kommt, bzw keine dateiversionsinformationen bei der dll/exe dabei sind |
diese versionsinformationen mussten zugunsten einer kleinen .exe entfernt werden ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!