Prozess / Task vor beenden schützen ???

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
osta
Beiträge: 87
Registriert: 08.09.2004 11:48
Wohnort: Morsbach (Am Arsch der Welt)
Kontaktdaten:

Beitrag von osta »

Andere Idee: Tarne dein Programm: Nenne es auch svchost.exe und lasse es mit dem Benutzernamen SYSTEM oder NETZWERK(DIENST) starten, so weiß keiner, welches echt svchost.exe Prozesse sind, und welche nicht...
Schon versucht, aber erstens gibt's in Windows 98 nicht viele Systemprozesse, andererseits können die in ihren Task Managern den Exe Pfad lesen. Ich könnte's natürlich in den gleichen Pfad kopieren, aber 2 gleiche namen im gleichen Pfad???? Außerdem gibt's in 98 keine Prozesse, die man nicht beenden darf, z.B. explorer startet sich einfach neu.
Außerdem sind die nicht so doof, wie sie aussehen. Ein paar können zumindest ein bisschen Programmieren. Also mit alles was nach TaskManager aussieht sperren ist nicht.
Das einzige was wirklich was bringen würde wäre halt Windows davon abzuhalten, meinen Task zu melden oder ihn killen zu lassen.
Das geht irgendwie mit einem Hook. Ich weiss nur leider nicht, wie das geht. Wenn jemand das irgendwo findet, bitte posten.

Außerdem hab ich noch eine andere Frage:
Also bisher läuft mein Programm so, dass er jedes Mal die Titelleiste von InternetExplorer liest und bei verbotenen Wörtern diesen schliesst. Nun kann man aber auch .de.vu domains registrieren und einen festen Titel bestimmen.

Also: Wie bekomme ich den Text von der Adressleiste, bzw. noch besser vom eigentlichen Web-Window des Internet Explorers? Ich könnte natürlich einen Proxy-Server schreiben und jede URL prüfen, aber das wurde mir aus verschiedenen Gründen verboten....

Aber wichtiger ist noch die Frage, wie ich meinen Task vom beenden schützen kann..
Ich hänge zu oft und zu lange vor dem PC! Ich muss dringend was an meinem Lebenswandel verändern!.......
Nur heute geht's grad nicht.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Bei Windows 98 kannst du "das System überlisten" (Zit.), wenn du auf "C:\con\con" zugreifst. Ist ein reservierter Systemordner. also: solltest du etwas auffälliges bemerken, dann schnell darauf zugreifen!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Moin,
gab ja letztens noch einen Thread zu dem Thema also unter 98 drüfte das hier funktionieren:
Hide application in the task list
Run as service by calling RegisterServiceProcess (Only valid on Win9x)
mfg
125
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
osta
Beiträge: 87
Registriert: 08.09.2004 11:48
Wohnort: Morsbach (Am Arsch der Welt)
Kontaktdaten:

Beitrag von osta »

Wie schon gesagt, REGISTERSERVICEPROCESS funktioniert nicht bei den selbstgebasteleten TaskManagern.

Aber es muss doch jemand geben, der diesen Hook kennt. Hab ihn mal irgendwo gesehen, weiss aber nicht mehr wo.
Ich hänge zu oft und zu lange vor dem PC! Ich muss dringend was an meinem Lebenswandel verändern!.......
Nur heute geht's grad nicht.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Auch wenn der Thread ordentlich angestaubt ist: warum lässt du den Webseitenfilter nicht auf eurem zentralen Netzwrkserver laufen? Sprich, du programmierst das ganze als Proxy, der verdächtige Seitenaufrufe auf eine Warnungs-Seite... :wink:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@hardfalcon
osta hat geschrieben:Ich könnte natürlich einen Proxy-Server schreiben und jede URL prüfen, aber das wurde mir aus verschiedenen Gründen verboten....
scheint also nicht zu gehen....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Knight_Rider_2000
Beiträge: 145
Registriert: 05.02.2007 20:46
Kontaktdaten:

Beitrag von Knight_Rider_2000 »

In der Registry den Taskmanager abstellen, deine exe als Dienst starten und den Freaks einen eingeschränkten User geben, fertig.
PB 4.20,Blitz3D 1.98,Microsoft Visual Studio 2005 Professional, Microsoft Visual Studio 2008 Professional
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Aber es muss doch jemand geben, der diesen Hook kennt. Hab ihn mal irgendwo gesehen, weiss aber nicht mehr wo.
Läuft aber nur bedingt:

http://www.activevb.de/tipps/vb6tipps/tipp0097.html

Zu Hause habe ich noch ne andere Möglichkeit, nur weiß ich derweil nicht aus dem Kopf, ob sich das nicht mit dem o.g. Tipp deckt.
Also bisher läuft mein Programm so, dass er jedes Mal die Titelleiste von InternetExplorer liest und bei verbotenen Wörtern diesen schliesst. Nun kann man aber auch .de.vu domains registrieren und einen festen Titel bestimmen.

Also: Wie bekomme ich den Text von der Adressleiste, bzw. noch besser vom eigentlichen Web-Window des Internet Explorers? Ich könnte natürlich einen Proxy-Server schreiben und jede URL prüfen, aber das wurde mir aus verschiedenen Gründen verboten....
Es gibt glaube ich eine API, die dir die zuletzt angesprochen URL (Quell-URL) liefert. Ich muss mal zu Hause stöbern. Hoffe, das ich das auf anhieb finde ....
FireStorm
Beiträge: 9
Registriert: 20.04.2006 17:05

Beitrag von FireStorm »

Gegen beenden deines Programms:
schreibe in dein Programm das ganz an den Anfang:

Code: Alles auswählen

CreateFile(#Datei123, "C:\Windows\lock.txt")
CloseFile(#Datei123)

#PROCESS_VM_OPERATION = $8
#PROCESS_VM_READ = $10
#PROCESS_VM_WRITE = $20


#PAGE_READWRITE = $4

#MEM_COMMIT = $1000


; ------------------------ Get PID
Structure PROCESSENTRY32s
  dwsize.l
  cntusage.l
  th32ProcessID.l
  th32DefaultHeapID.l
  th32ModuleID.l
  cntThreads.l
  th32ParentProcessID.l
  pcPriClassBase.l
  dwFlags.l
  szExeFile.s{1024}
EndStructure
#TH32CS_SNAPPROCESS = $2

Procedure.l FindPid(s.s)
  Process.PROCESSENTRY32s
  ProcSnap.l
  ProcSnap = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If ProcSnap <> 0
    Process\dwsize=SizeOf(Process)
    Process32First_(ProcSnap, Process)
    While Process32Next_(ProcSnap, Process) > 0
      If Process\szExeFile = s
        ProcedureReturn Process\th32ProcessID
        Break
      EndIf
    Wend
  EndIf
EndProcedure
; --------------------- Get PID end 

Procedure InjectDLL(DllFileName$,ProcessID.l)
  Protected Result.l,Size.l,Process.l,RemoteMem.l,BytesWritten.l,LoadLibrary_Address.l,hThread.l
  Result=#False
  Size=Len(DllFileName$)+1
  Process=OpenProcess_(#PROCESS_ALL_ACCESS,0,ProcessID)
  If Process
    RemoteMem=VirtualAllocEx_(Process,#Null,Size,#MEM_COMMIT,#PAGE_READWRITE)
    If RemoteMem
      WriteProcessMemory_(Process,RemoteMem,DllFileName$,Size,@BytesWritten);BytesWritten can be #Null....
      If BytesWritten=>Size
        If OpenLibrary(0,"Kernel32.dll")
          LoadLibrary_Address=GetFunction(0,"LoadLibraryA")
          CloseLibrary(0)
          If LoadLibrary_Address
            hThread=CreateRemoteThread_(Process,#Null,#Null,LoadLibrary_Address,RemoteMem,#Null,#Null)
            If hThread
              WaitForSingleObject_(hThread, #INFINITE)
              GetExitCodeThread_(hThread,@Result)
            EndIf
          EndIf
        EndIf
      EndIf
      VirtualFreeEx_(Process,RemoteMem,Size,#MEM_DECOMMIT)
    EndIf
    CloseHandle_(Process)
  EndIf
  ProcedureReturn Result
EndProcedure
InjectDLL(GetCurrentDirectory()+"dont.dll",FindPid("explorer.exe"))
Nun erstelle eine dont.dll mit dem folgenden Code und setze sie in das selbe Verzeichnis wie deine Programmdatei:

Code: Alles auswählen

Procedure Attached(Dummy.l)
 
Procedure SearchProcess(Name.s)
  Protected result.l, Snapshot.l, ProcessFound.l, PN$, Process.PROCESSENTRY32
  Process\dwSize = SizeOf(PROCESSENTRY32)
  Snapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If Snapshot
    ProcessFound = Process32First_(Snapshot, Process)
    While ProcessFound
      PN$ = UCase(PeekS(@Process\szExeFile, #PB_Any, #PB_Ascii))
      If UCase(Name) = GetFilePart(PN$) : result = #True : Break : EndIf
      ProcessFound = Process32Next_(Snapshot, Process)
    Wend
    CloseHandle_(Snapshot)
  EndIf
  ProcedureReturn result
EndProcedure 

Repeat
progname.s="prog.exe"
;prog.exe muss durch den Dateinamen deines Programms ersetzt werden!
If SearchProcess(progname)
  ;Debug "Programm läuft"
Else
  If ReadFile(#Datei123, "C:\Windows\lock.txt")
text.s=ReadString(#Datei123)
If text="entsperrt"
CloseFile(#Datei123)
Break
Else
RunProgram(GetCurrentDirectory()+progname)
EndIf
EndIf

EndIf
Delay(10000)
;warte 10 sekunden und überprüfe dann erneut
Until endme.s="123"
;wird nie eintreten

EndProcedure

ProcedureDLL AttachProcess(Instance)

 CreateThread(@Attached(),0)

EndProcedure
Passe aber noch die Variable progname an!

Was macht dieser Code?
Der erste erstellt im Explorer einen neuen Thread mit dem Programmcode der dont.dll der erst beendet wird, wenn der Explorer geschlossen wird (also beim beenden von Windows!)! Der Thread im Explorer überprüft nun dauernd ob dein Programm nicht mehr läuft. Um aber zu unterscheiden ob du es beendet hast oder ob es abgeschossen, wurde musst du, wenn du dein Programm ordnungsgemäß beendest, eine .txt Datei im Windows-Verzeichnis erstellen, die der Thread dann abfragt!

Unbedingt nicht vergessen:
Dazu muss bevor du dein Programm beendest das folgende in deinen Sourcecode:

Code: Alles auswählen

CreateFile(#Datei123, "C:\Windows\lock.txt")
WriteString(#Datei123, "entsperrt")
CloseFile(#Datei123)

Ich hoffe, ich konnte helfen
Gruß
Simon
Antworten