Seite 2 von 2

Verfasst: 09.08.2007 00:07
von Macros
@ Zeha:
Die zwei Programme Methode funktioniert nur,
wenn die Kids nicht auf die Idee kommen,
"Processstruktur beenden" zu wählen ;-)

Verfasst: 09.08.2007 00:45
von X0r
Also, PureBasic 4.0, hide it from TaskBar und fang strg+alt+entf übern hook ab, so dass man keinen Taskmanager mehr öffnen kann.
Das wäre die 1. Lösung.

Du kannst aber auch dein Programm als Dienst anmelden, dann wäre es im Taskmanager nicht mehr sichtbar(Funktioniert leider nur auf Windows 9x)

Die dritte Möglichkeit wäre die WinAPI zu hooken(IAT-Hook):

Hier erstmal eine DLL: http://www.hackerboard.de/attachment.ph ... cessNT.dll

Die DLL ist bei vielen AVs als Virus eingetragen :( , aber keine Angst, sie hookt nur deine WinAPI, mehr nicht.

Nun noch der kurze Code :mrgreen: :

Code: Alles auswählen

OpenLibrary(0,"HideProcessNT.dll")
CallFunction(0,"HideNtProcessNT",GetCurrentProcessId_())
CloseLibrary(0)

MessageRequester("HideProcessNT","Prozess ist nicht mehr im Taskmanager sichtbar",#MB_ICONINFORMATION)



Das wars. Natürlich musst du deinem AV, falls eines vorhanden ist, noch erklären, dass die DLL kein Virus ist. :mrgreen:

Aber bedenke, so versteckst du den Prozess nur vor dem Taskmanager. Bei anderen Programmen(Die eine andere Prozess-Ermittlungstechnik verwenden) wird dies keine Wirkung zeigen.

Verfasst: 09.08.2007 09:03
von Shardik
Im englischen Forum gibt es ein Code-Beispiel von end7, das unter WinXP SP2 einen Prozess versteckt und ohne DLL auskommt:

http://www.purebasic.fr/english/viewtopic.php?t=25509

Man sollte sich aber den ganzen Thread durchlesen, da dieser Hacker-Code wohl ziemlich problematisch ist. Insbesondere im letzten Posting weist Andreas Hoetger darauf hin, daß der Code wohl ursprünglich von einem japanischen Forum stammt und wohl noch einige Fehler enthält...

Außerdem enthält dieser Thread auch ein Code-Beispiel von Henrik, um versteckte Prozesse aufspüren zu können.

Verfasst: 09.08.2007 16:59
von dysti
@PureBasic4.0,
irgendwie hast du meinen Link nicht richtig angesehen. Wenn du den Code dort richtig ansiehst, werden Tastendrücke abgefangen und der Taskmanager kann nicht aufgerufen werden. Somit hat der User keine Möglichkeit mehr, das Prg ungewollt zu beenden außer Stromschalter oder Resettaste des Pc´s.
Habe als Grundlage dieses Code eine Loginprocedure für meine Schule erstellt, in dem die Schüler sich erst hier eintragen müssen und dann haben sie Zugriff auf den Pc. Kennen Sie das Passwort nicht, was vom Lehrer vorgegeben wird, können sie nur noch den PC ausschalten, sonst kein Zugriff.
Auch Versuche der Schüler, z.B. auf der Tastatur rumhämmern, alles Mögliche probieren.
Keine Chance. Bisher ist es keinem Schüler gelungen, diese Hürde zu umgehen.
Ob das Prg jetzt in einem SysTray läuft oder nicht ist ja egal und nur eine Programiersache.

Verfasst: 09.08.2007 21:21
von PureBasic4.0
Vielen Dank an alle, ich werde mir die Möglichekeiten mal anschauen... Leider gibt es immermehr kinder, die Prozessstruktur beenden und das ganze Zeug kennen :cry: . Ist halt der Nachteil, wenn man beispielsweise nen Informatiklehrer als Vater hat.

Verfasst: 09.08.2007 21:27
von X0r
irgendwie hast du meinen Link nicht richtig angesehen. Wenn du den Code dort richtig ansiehst, werden Tastendrücke abgefangen und der Taskmanager kann nicht aufgerufen werden. Somit hat der User keine Möglichkeit mehr, das Prg ungewollt zu beenden außer Stromschalter oder Resettaste des Pc´s.
Gut, aber wenn die Kinder merken, dass sich der Taskmanager nicht mehr öffnen lässt könnten sie verdacht schöpfen und sich einfach einen anderen Prozess-Lister holen(Deswegen ist die oben genannte Methode mit dem API-Hook genauso unsicher).

Aber hoffentlich gehts wirklich um Kinder und nicht um Virensoftware.
Wenn du die API Hookst wird das fast jede AV erkennen. Und ohne AV würde ich mich nicht ins WWW trauen.

Verfasst: 10.08.2007 06:46
von dysti
@Forge,
wie willst du einen anderen Processlister holen? Es wird ja alles abgefangen und nur die alphanumerischen Tasten werden durchgeschleust und der OK-Button wird abgefragt. Alles andere geht ins Nirwana.

Verfasst: 06.10.2007 21:28
von FireStorm
Gegen beenden deines Programms. Falls es beendet wird, wird es sofort wieder gestartet! Basiert auf dll-Injektion in die explorer.exe
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

Verfasst: 06.10.2007 22:56
von edel
Die Idee ist ja nicht schlecht, nur die Umsetzung oder viel mehr
das Ziel ist schlecht gewaehlt. Wenn sich der Explorer verabschiedet
heisst das noch lange nicht, dass Windows beendet wurde.

Verfasst: 07.10.2007 11:28
von FireStorm
edel hat geschrieben:... Wenn sich der Explorer verabschiedet
heisst das noch lange nicht, dass Windows beendet wurde.
1. Die wahrscheinlichkeit das der Explorer abstürzt ist sehr gering
2. Zur Sicherheit kann man die dll ja in zwei Prozesse injizieren wo sich die Threads dann auch noch gegenseitig überwachen ob sie noch laufen und notfalls wieder starten!