Gå til innhold

Godkjenning av kjørbare programfiler


Anbefalte innlegg

Har tenkt litt på et program som gjør følgene:

 

Før en kjørbar fil blir kjørt, må den godkjennes kjørt av et program. Samtidig har programmet en liste over godkjente prosesser.

 

Noen som vet om et slikt program finnes idag ? Jeg liker ikke tanken på at ukjente kjørbare filer ligger i bakgrunnen og kjører, uten min spesifikke tillatelse.

 

Er det mulig å lage slike low-level program med VB ? Har for øyeblikket laget til et program som viser prosesser som blir kjørt, og mulighet for å terminere dem.

 

 

mvh

Lenke til kommentar
Videoannonse
Annonse

Ja, dette er helt og fult mulig, mest av alt på grunn av genialiteten med Win32 API. Jeg ville derfor ikke kalle dette for noe low-level greier, men uansett. Her er koden til et slikt program:

 


Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Const PROCESS_TERMINATE As Long = &H1
Const TH32CS_SNAPHEAPLIST = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPTHREAD = &H4
Const TH32CS_SNAPMODULE = &H8
Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Const TH32CS_INHERIT = &H80000000
Const MAX_PATH As Integer = 260

Enum EP
EP_CHECKNEW = 0
EP_APPROVEALL = 1
End Enum

Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type

Dim EndProgram As Boolean
Dim LastList() As PROCESSENTRY32

Private Sub Command1_Click()

List1.AddItem InputBox("Write the name of the process", "Name")

End Sub

Public Function GetProcesses(ByVal Action As EP) As Long

Dim TmpList() As PROCESSENTRY32, TmpCnt&, Ret&
Dim hSnapShot As Long, uProcess As PROCESSENTRY32
Dim R&, A&, Valid As Boolean

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)
uProcess.dwSize = Len(uProcess)
R = Process32First(hSnapShot, uProcess)

Do While R
Select Case Action
Case EP_APPROVEALL: List1.AddItem uProcess.szExeFile
Case EP_CHECKNEW

Valid = False

For A = LBound(LastList) To UBound(LastList)
If UCase(LastList(A).szExeFile) = UCase(uProcess.szExeFile) Then Valid = True
Next

If Valid = False Then
   For A = 0 To List1.ListCount
   If UCase(List1.List(A)) = UCase(uProcess.szExeFile) Then Valid = True
   Next
   
   If Valid = False Then
   Ret = OpenProcess(PROCESS_TERMINATE, False, uProcess.th32ProcessID)
   TerminateProcess Ret, 0
   CloseHandle Ret
   End If
End If

End Select

TmpCnt = TmpCnt + 1
ReDim Preserve TmpList(1 To TmpCnt)
LSet TmpList(TmpCnt) = uProcess

R = Process32Next(hSnapShot, uProcess)
Loop

CloseHandle hSnapShot
If TmpCnt > 0 Then CopyArray LastList, TmpList Else GetProcesses = -1

End Function

Private Sub CopyArray(Dest() As PROCESSENTRY32, Src() As PROCESSENTRY32)

Dim Tell&

ReDim Dest(LBound(Src) To UBound(Src))

For Tell = LBound(Src) To UBound(Src)
LSet Dest(Tell) = Src(Tell)
Next

End Sub

Private Sub Form_Load()

Show
GetProcesses EP_APPROVEALL

Do Until EndProgram
GetProcesses EP_CHECKNEW
Sleep 10
DoEvents
Loop

End

End Sub

Private Sub Form_Unload(Cancel As Integer)

EndProgram = True

End Sub

 

Lim det inn i en form. Husk å legg inn en list box og en knapp. Ennå kan du f.eks ikke slette processer som er på listen som du ikke vil skal åpne seg, den legger seg heller ikke ned i taskbaren og nyttige ting som Dialog bokser som spør om en hvis process skal ha tilatelse til å kjøre må du selv lage. Ellers hadde denne posten blitt litt for lang.

Endret av aadnk
Lenke til kommentar
Heisann!

 

Takker for svar :-)

 

Fikk ikke helt til det programmet ditt, får feilmelding når det skal kjøres. Gjorde som du sa ang. hvordan det skal settes opp.

 

Har du prøvd dette selv ?

 

mvh

Hvordan feilmelding får du? Programmet funker fint her :dontgetit:

 

Edit: hva var knappen til? bare legge til en ting i lista?

Endret av jonas22282460
Lenke til kommentar
Heisann!

 

Jo fikk det til å fungere nå, installerte en nyere versjon av VB.

 

Eksemplet er jo greit det, men forsatt er jeg på utkikk etter kode som hindrer f.eks .exe filer å kjøres, før jeg godkjenner det.

 

=)

Du vil lage noe lignende Zone Alarm som bare at ZA godkjenner programmer som bruker internett? Jeg kan ikke noe som helt om det, og jeg tror ikke så mange andre kan det heller. Da hadde det sikkert vært en del fler lignende programmer. Bare noe jeg tenker, men kansje det finnes :roll:

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...