반응형

안녕하세요 유똥입니다.

오늘은 파워쉘 GUI 프로그래밍을 이용하여 나만의 이벤트 뷰어 로그 추출 및 분석 도구에 대하여 포스팅 진행하겠습니다!

 

이벤트 뷰어 로그 분석 도구를 만들기 전에 앞서, 이벤트 뷰어 로그에 관련하여 말씀드리겠습니다.

 

 이벤트 뷰어 로그란?

윈도우에서 컴퓨터의 사용 기록을 이벤트 뷰어라는 곳에 항상 기록을 하게 됩니다.

시스템에서 발생하는 각종 로그를 남기기 때문에 무슨 일이 발생하면 참고하여 오류를 확인하여야 합니다.

 

[ 시스템 ] Windows 시스템 구성요소가 기록하는 이벤트로 시스템 부팅 시 드라이버가 로드 되지 않는 경우와 같이 구성요소의 오류를 이벤트에 기록합니다.

 

이번 장에서는 시스템 이벤트 뷰어 로그를 추출하는 GUI 프로그래밍을 만들려고 합니다!

아래의 내용을 토대로 참고 부탁드리겠습니다.

 

 사용방법

기본 UI

 시스템 - 경고 추출

기간 지정 : 2021년 4월 22일 11시 ~ 11시 01분

 소스코드

Add-Type -AssemblyName System.Windows.Forms # 필요한 .net 라이브러리로드 (출력을 억제하기 위해 void 사용)
Add-Type -AssemblyName System.Drawing


$window = New-Object System.Windows.Forms.Form
$window.Width = 1200
$window.Height = 700
$window.Text = '이벤트 뷰어 로그 확인'

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Multiline = $true
$textBox.Width = 650
$textBox.Height = 450
$textBox.location = new-object system.drawing.point(10,10)
$textBox.Font = "Microsoft Sans Serif,8"
$TextBox.Scrollbars = "both"
$TextBox.WordWrap = $false 
$window.controls.Add($textBox)

$InputBox2 = New-Object System.Windows.Forms.TextBox #  텍스트 상자 만들기 
$InputBox2.Location = New-Object System.Drawing.Size (680,230 ) # 기본 에 대한 텍스트 상자의 위치 (px) 창 가장자리 (길이, 높이) 
$InputBox2.Size = New-Object System.Drawing.Size (150,20 ) # 텍스트 상자의 크기 (픽셀 단위 ) (길이, 높이 )
#$InputBox2.text = ""
$window.Controls.Add($InputBox2) # 기본 창 내부의 텍스트 상자 활성화
$InputBox2.hide()

$InputBox3 = New-Object System.Windows.Forms.TextBox #  텍스트 상자 만들기 
$InputBox3.Location = New-Object System.Drawing.Size (680,260 ) # 기본 에 대한 텍스트 상자의 위치 (px) 창 가장자리 (길이, 높이) 
$InputBox3.Size = New-Object System.Drawing.Size (150,20 ) # 텍스트 상자의 크기 (픽셀 단위 ) (길이, 높이 )
#$InputBox1.text = ""
$window.Controls.Add($InputBox3) # 기본 창 내부의 텍스트 상자 활성화
$InputBox3.hide()

$InputBox6 = New-Object System.Windows.Forms.TextBox #  텍스트 상자 만들기 
$InputBox6.Location = New-Object System.Drawing.Size (680,320 ) # 기본 에 대한 텍스트 상자의 위치 (px) 창 가장자리 (길이, 높이) 
$InputBox6.Size = New-Object System.Drawing.Size (150,20 ) # 텍스트 상자의 크기 (픽셀 단위 ) (길이, 높이 )
#$InputBox1.text = ""
$window.Controls.Add($InputBox6) # 기본 창 내부의 텍스트 상자 활성화
$InputBox6.hide()

$InputBox7 = New-Object System.Windows.Forms.TextBox #  텍스트 상자 만들기 
$InputBox7.Location = New-Object System.Drawing.Size (680,350 ) # 기본 에 대한 텍스트 상자의 위치 (px) 창 가장자리 (길이, 높이) 
$InputBox7.Size = New-Object System.Drawing.Size (150,20 ) # 텍스트 상자의 크기 (픽셀 단위 ) (길이, 높이 )
#$InputBox1.text = ""
$window.Controls.Add($InputBox7) # 기본 창 내부의 텍스트 상자 활성화
$InputBox7.hide()



$label2 = new-object system.windows.forms.label
$label2.text = "기간 지정"
$label2.Location = New-Object System.Drawing.Size 680,150
$label2.Size = New-Object Drawing.Point 300,30
$label2.hide()
$window.controls.add($label2)

$label3 = new-object system.windows.forms.label
$label3.text = "2019년 01월 17일 08시"
$label3.Location = New-Object System.Drawing.Size 680,180
$label3.Size = New-Object Drawing.Point 300,30
$label3.hide()
$window.controls.add($label3)

$label4 = new-object system.windows.forms.label
$label4.text = "예시 ) 1/17/2019 08:00:00"
$label4.Location = New-Object System.Drawing.Size 680,210
$label4.Size = New-Object Drawing.Point 300,30
$label4.hide()
$window.controls.add($label4)

#$button_click2 = {write-host "hi system"}
$button_click2 = {$textBox.Text = "hi system"}
#$button_click2 = {$label.Text = "hi system"}
$windowButton2 = New-Object System.Windows.Forms.Button
$windowButton2.Location = New-Object System.Drawing.Point(460,500)
$windowButton2.size = New-Object System.Drawing.Size(180,50)
$windowButton2.BackColor ="White"
$windowButton2.ForeColor ="Black"

$windowButton2.Text = "시스템"
$windowButton2.Add_Click($button_click2)

$windowButton2.BackColor ="White"
$windowButton2.ForeColor ="Black"

$windowButton2.Add_Click({hide_button})
Function hide_button(){
$InputBox6.show()
$InputBox7.show()
$InputBox2.show()
$InputBox3.show()
$label2.show()
$label3.show()
$label4.show()
$windowButton5.show()
$windowButton6.show()
$windowButton8.show()
$windowButton10.show()
$windowButton11.show()
$windowButton12.show()
$windowButton13.show()
}

$commandResult2 =  Get-EventLog -LogName system -EntryType warning | Out-String

$button_click5 = {
   #$result = get-content $commandResult | %{$_ -replace('\n','`n`')}
   $textBox.Text = $commandResult2
}

$windowButton5 = New-Object System.Windows.Forms.Button
$windowButton5.Location = New-Object System.Drawing.Point(680,10)
$windowButton5.size = New-Object System.Drawing.Size(180,50)
$windowButton5.BackColor ="White"
$windowButton5.ForeColor ="Black"
$windowButton5.hide()
#$windowButton5.Scrollbars = "both"


$windowButton5.Text = "경고"
$windowButton5.Add_Click($button_click5)


$commandResult6 = Get-winevent system | where {$_.LevelDisplayName -eq "위험"} | Out-String

$button_click6 = {
   $textBox.Text = $commandResult6
}

$windowButton6 = New-Object System.Windows.Forms.Button
$windowButton6.Location = New-Object System.Drawing.Point(680,80)
$windowButton6.size = New-Object System.Drawing.Size(180,50)
$windowButton6.BackColor ="Red"
$windowButton6.ForeColor ="Black"
$windowButton6.hide()

$windowButton6.Text = "위험"
$windowButton6.Add_Click($button_click6)

$button_click8 = {
$date2 = $InputBox2.text

$Date3 = $InputBox3.text

$Begin = Get-Date -Date $date2

$End = Get-Date -Date $Date3

$commandResult8 = Get-EventLog -LogName system -EntryType warning -After $Begin -Before $End | Out-String
   #$commandResult7 = $textBox.Text
   $textBox.Text = $commandResult8
}

$windowButton8 = New-Object System.Windows.Forms.Button
$windowButton8.Location = New-Object System.Drawing.Point(850,240)
$windowButton8.size = New-Object System.Drawing.Size(30,40)
$windowButton8.BackColor ="White"
$windowButton8.ForeColor ="Black"
$windowButton8.hide()

$windowButton8.Text = "경고"
$windowButton8.Add_Click($button_click8)

$button_click10 = {

$date5 = $InputBox6.text

$Date6 = $InputBox7.text


$startTime1 = Get-Date -Date $date5

$endTime1 = Get-Date -Date $Date6

$commandResult10 = Get-winevent -FilterHashtable @{logname ="system"; startTime=$startTime1; EndTime=$endTime1;} | where {$_.LevelDisplayName -eq "위험"}  | Out-String

   #$commandResult7 = $textBox.Text
   $textBox.Text = $commandResult10
}

$windowButton10 = New-Object System.Windows.Forms.Button
$windowButton10.Location = New-Object System.Drawing.Point(850,330)
$windowButton10.size = New-Object System.Drawing.Size(30,40)
$windowButton10.BackColor ="red"
$windowButton10.ForeColor ="Black"
$windowButton10.hide()

$windowButton10.Text = "위험"
$windowButton10.Add_Click($button_click10)

$button_click11 = {
  cd c:\
  Get-EventLog -LogName security | Select-Object -Property EntryType,TimeGenerated,Source,EventID,Category,Message | Export-CSV -Path c:\events.csv -NoClobber -Encoding UTF8
  Import-Csv "C:\events.csv" | Where-Object -Property Message -Like '*원본 네트워크 주소*' > test1.csv
   $CSV = Import-Csv "C:\test1.csv" -Header A | Where {$_ -match "원본 네트워크 주소"}
   $data_array = @{}
   $a = 0

   foreach($LINE in $CSV)
{
  $data_array[$a] = $LINE.A.Substring(12)
  #$data_array = $LINE.A.Substring(12)
  $data_array[$a] | Out-File -Append c:\result.txt
  $a++
}
}

$windowButton11 = New-Object System.Windows.Forms.Button
$windowButton11.Location = New-Object System.Drawing.Point(680,10)
$windowButton11.size = New-Object System.Drawing.Size(180,50)
$windowButton11.BackColor ="White"
$windowButton11.ForeColor ="Black"
$windowButton11.hide()
#$windowButton5.Scrollbars = "both"


$windowButton11.Text = "CSV 파일 설치"
$windowButton11.Add_Click($button_click11)

$button_click12 = {
 $commandResult11 = Get-Content c:\result.txt | Group-Object -noelement | Out-String
 $textBox.Text = $commandResult11
}

$windowButton12 = New-Object System.Windows.Forms.Button
$windowButton12.Location = New-Object System.Drawing.Point(680,80)
$windowButton12.size = New-Object System.Drawing.Size(180,50)
$windowButton12.BackColor ="White"
$windowButton12.ForeColor ="Black"
$windowButton12.hide()

$windowButton12.Text = "이벤트 뷰어 접근 IP"
$windowButton12.Add_Click($button_click12)

$button_click13 = {
 cd c:\
 del result.txt
 del test1.csv
 del events.csv
}

$windowButton13 = New-Object System.Windows.Forms.Button
$windowButton13.Location = New-Object System.Drawing.Point(680,150)
$windowButton13.size = New-Object System.Drawing.Size(180,50)
$windowButton13.BackColor ="White"
$windowButton13.ForeColor ="Black"
$windowButton13.hide()

$windowButton13.Text = "CSV 파일 삭제"
$windowButton13.Add_Click($button_click13)

$window.Controls.Add($windowButton2)
$window.Controls.Add($windowButton5)
$window.Controls.Add($windowButton6)
$window.Controls.Add($windowButton8)
$window.Controls.Add($windowButton10)
$window.Controls.Add($windowButton11)
$window.Controls.Add($windowButton12)
$window.Controls.Add($windowButton13)
[void]$window.ShowDialog() # 폼 활성화

여기까지 완료되었으면, 이벤트 뷰어 로그 - 시스템 분석 관련하여 알아보았습니다.

 

도움이 되셨다면 구독 좋아요

궁금하신 내용이 있으시면 댓글 부탁드리겠습니다.

이벤트뷰어 로그_시스템.ps1
0.01MB

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
});