PDA

View Full Version : گفتگو: ساخت Anti Autorun!



Saman_12
پنج شنبه 04 شهریور 1389, 07:32 صبح
سلام دوستان گل برنامه نویس.

من این تایپیک رو ایجاد کردم تا توی اون در مورد روش های مقباله با ویروس های Autorun گفتگو کنیم.:کف:

یه خواهش از مدیریت دارم اونم اینه که لطفا این تایپیک رو حذف نکن چون من خودم خیلی در این مورد توی سایت های مختلف گشتم چیز زیاد جالبی نبوده یا تایپیک به ثمر رسیده.:قلب::قلب:

از همه دوستانی که نظری در این باره داند می خوام که ایده ها و نظراتشون رو توی این تایپیک بزارند تا دیگران هم استفاده کنن.:تشویق:

هدف اصلی این تایپیک نوشتن یک برنامه Anti Autorun هوشمند هست تا از شر همه ویروس های Autorun بدون اینکه کاربر رو توی تنگنا قراربدیم راحت بشیم.(دوستان این مطلب رو در نظر داشته باشن که این تایپیک تایپیکی برای درخواست پروژه برای این کار نیست و هدف فقط ارتقاء سطح علمی دوستان هست):لبخندساده:

خوب پس ما می خوایم یه برنامه Anti Autorun به زبان شیرین VB.NET بنویسیم پس هر کس مطلبی در این باره داره باره تا روی خوب بد بودنش بحث کنیم.(راستش رو بخواین من می خوام یه برنامه Anti Autorun بنویسم البته برای خودم و گفتم چه خوب میشه که دوستان هم نظراتشون رو بگن تا هم من فیظ ببرم همه بقیه.)
اگه کسی در باره شناسی ویروس هم مطلبی داره بزاره نور الا نو میشه.

پس یا علی بگو بیا توی تایپیک شرکت کن.(بعید می دونم تعدا پست های این تایپیک به بیش از ..... پست یرسه.):لبخند::خجالت::قلب:

خوب اول من یه سوال دارم اونم این که چجوری جلوی اجرای یک فایل Autorun.inf رو توی سیستم بگریم(بدون غیر فعال کردن Autorun توسط ریجستری.)؟

modirmasool
پنج شنبه 04 شهریور 1389, 08:51 صبح
برای چه قسمتی میخوایم بنویسیم؟ فلش،سی دی یا هارد؟

تو ویبی 6 که با sysinfo و با رویداد Arrival میشه این کار رو کرد. تو دات نت هم دیدمش بود ولی من چون تو دات نت تازه واردم، نمیدونم چجوری بندازم تو صفحه!:لبخند: نکنه ظاهر نداره؟ ممنون میشم در این مورد کسی توضیح بده.
به نظر من نباید به یک روش بسنده کرد و تمام حالتها باید در نظر گرفته بشن. پس ما باید هم پیشگیری کنیم و هم درمان.
راه هایی که به ذهنم میرسن:
1- Sysinfo (هم در هنگام ورود و هم در هنگام خروج)
2- مقایسه بعضی از کلید های خاص رجیستری بعد از وصل شدن وسیله با قبلش
3- مقایسه task ها ،قبل و بعد از اتصال
4- ساخت فایل اتوران بی ضرر به طوریکه پاک نشه( با این کار ویروس اگه بخواد گسترش پیدا کنه با مشکل مواجه میشه)
5- ارسال دکمه شیفت برای چند ثانیه برای از کار انداختن اتوران
6- از کار انداختن اتوران (به کلی)
7- آنتی مون باید طوری باشه که خودش به صورت امن درایو رو باز کنه.

Saman_12
پنج شنبه 04 شهریور 1389, 09:13 صبح
تو ویبی 6 که با sysinfo و با رویداد Arrival میشه این کار رو کرد.
به نظر من نباید به یک روش بسنده کرد و تمام حالتها باید در نظر گرفته بشن. پس ما باید هم پیشگیری کنیم و هم درمان.
راه هایی که به ذهنم میرسن:
1- Sysinfo (هم در هنگام ورود و هم در هنگام خروج)
2- مقایسه بعضی از کلید های خاص رجیستری بعد از وصل شدن وسیله با قبلش
3- مقایسه task ها ،قبل و بعد از اتصال
4- ساخت فایل اتوران بی ضرر به طوریکه پاک نشه( با این کار ویروس اگه بخواد گسترش پیدا کنه با مشکل مواجه میشه)
به جزء درایو های CD_DVD دیگه برای همشون.
گزینه آخر رو بی خیال شو آخه کاربران به طور معمول از این جور کار ها خوششون نمیاد اما می تونیم در بارش بحث کنیم.
دارم یه کد توپ می نویسم اگه درست شه و کار کنه می تونه هسته ی جستوجوی این Anti Autorun برای فلش دیسک ها باشه(USB).:کف:

Saman_12
پنج شنبه 04 شهریور 1389, 09:33 صبح
خوب اون کد رو همین الان تموم کردم یه نیم ساعتی هست دارم روش کا می کنم.:لبخند:
حالا نوبت توضیح است :
این کد میاد و اسم تمام درایو های Removable رو به دست میاره بعد هم توی هموشون چک می کنه که آیا فایل آتورانی هست یا نه اگه بود نوشته ها شو میخونه اگه کلمه ی Shell (که یکی از کلماتی هست که ویروس های آتوران داخل فایل آتورانشون مینویسند) وجود داشت دنبال اسم فایلی که اتوران قراره اونو اجرا کنه می گرده بعد هم خود آتوران + فایل رو پاک می کنه.:کف: :کف:
اینم اون کد طلایی :


On Error Resume Next

Dim GetDriveName() As System.IO.DriveInfo = System.IO.DriveInfo.GetDrives
Dim DriveRemovable As ArrayList = New ArrayList
Dim PutString As String
Dim AutorunName As String
Dim Text() As String
Dim NumberOfText As Integer
Dim SplitsNumber As Integer
Dim PathAutorun As String
Dim Str As String
Dim EvenStr As Integer


For Each Drive As System.IO.DriveInfo In GetDriveName

If Drive.DriveType = IO.DriveType.Removable And Drive.Name <> "A:\" Then
DriveRemovable.Add(Drive.Name)
End If
Next

For DriveRemovableIndex As Integer = 0 To DriveRemovable.Count - 1
PathAutorun = DriveRemovable.Item(DriveRemovableIndex) & "Autorun.inf"

If FileIO.FileSystem.FileExists(PathAutorun) = True Then
PutString = FileIO.FileSystem.ReadAllText(PathAutorun)
Text = Split(PutString, vbCrLf)
NumberOfText = Text.Length

If NumberOfText > 0 And Text.Length > 0 Then

For TextItems As Integer = 0 To Text.Length - 1
Str = Text(TextItems)

If Mid(Str, 1, 5) = "Shell" Or Mid(Str, 1, 5) = "shell" Or Mid(Str, 1, 5) = "SHELL" Then
EvenStr = InStr(Str, "=") + +1

If EvenStr > 0 Then
If Mid(Str, EvenStr, 1) = " " Then
EvenStr += 1
End If

If Mid(Str, Str.Length - 3, 1) = "." Then
AutorunName = Mid(Str, EvenStr)


If Mid(AutorunName, 1, 8) = "Recycler" Or Mid(AutorunName, 1, 8) = "recycler" Or Mid(AutorunName, 1, 8) = "RECYCLER" Then

For AutorunNameSplits As Integer = 1 To AutorunName.Length - 1
If Mid(AutorunName, AutorunNameSplits, 1) = "\" Then
SplitsNumber = AutorunNameSplits
End If
Next

If SplitsNumber <> 0 Then
AutorunName = Mid(AutorunName, SplitsNumber + 1)
End If
End If

If FileIO.FileSystem.FileExists(DriveRemovable.Item(D riveRemovableIndex) & AutorunName) = True Then

SetAttr(DriveRemovable.Item(DriveRemovableIndex) & AutorunName, FileAttribute.Normal)
SetAttr(DriveRemovable.Item(DriveRemovableIndex) & "Autorun.inf", FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(DriveRemovable.Item(D riveRemovableIndex) & AutorunName)
FileIO.FileSystem.DeleteFile(DriveRemovable.Item(D riveRemovableIndex) & "Autorun.inf")
Else

SetAttr(DriveRemovable.Item(DriveRemovableIndex) & "Autorun.inf", FileAttribute.Normal)
SetAttr(DriveRemovable.Item(DriveRemovableIndex) & "Recycler", FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(DriveRemovable.Item(D riveRemovableIndex) & "Autorun.inf")
FileIO.FileSystem.DeleteDirectory(DriveRemovable.I tem(DriveRemovableIndex) & "Recycler", FileIO.DeleteDirectoryOption.DeleteAllContents)
End If

Else
AutorunName = Mid(Str, EvenStr)
Dim S As String = Split(AutorunName)(0)
AutorunName = S

If FileIO.FileSystem.FileExists(DriveRemovable.Item(D riveRemovableIndex) & AutorunName) = True Then

SetAttr(DriveRemovable.Item(DriveRemovableIndex) & AutorunName, FileAttribute.Normal)
SetAttr(DriveRemovable.Item(DriveRemovableIndex) & "Autorun.inf", FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(DriveRemovable.Item(D riveRemovableIndex) & AutorunName)
FileIO.FileSystem.DeleteFile(DriveRemovable.Item(D riveRemovableIndex) & "Autorun.inf")
Else

SetAttr(DriveRemovable.Item(DriveRemovableIndex) & "Autorun.inf", FileAttribute.Normal)
SetAttr(DriveRemovable.Item(DriveRemovableIndex) & "Recycler", FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(DriveRemovable.Item(D riveRemovableIndex) & "Autorun.inf")
FileIO.FileSystem.DeleteDirectory(DriveRemovable.I tem(DriveRemovableIndex) & "Recycler", FileIO.DeleteDirectoryOption.DeleteAllContents)
End If
End If
End If
End If
Next
End If
End If
Next

من خودم از کد خودم کف کردم شما رو نمی دونم.:بامزه:
در مورد SysInfo من اطلاعاتی در این زمنه ندارم میشه یکم بیشتر توضیه بدید.
برای ساخت یه پوشه که به طور معمولی باک نشه میشه یه پوشه با نام Con ساخت بعد هم به آتوران ریینیمش کرد.
می تونیم کلید های Run , RunOnce و Explorer ریجستری رو هم تحت نظر بگیریم نظرت چیه ؟

Saman_12
پنج شنبه 04 شهریور 1389, 11:14 صبح
برای باز کردن درایو به گونه ای که آتورانش اجرا نشه کافیه این گونه عمل کرد :

Shell "Explorer Drivename:\"
خوشحال می شم نظرات دیگر دوستان رو هم بدونم.:کف:

Saman_12
پنج شنبه 04 شهریور 1389, 18:51 عصر
چون کسی در باره ی کارکرد این آنتی نظر نمیده پس من حداقل یک قسمت گرافیکی اونو طراحی کردم این یک کلاس هست که خودم نوشتمش و یک پیغام به کاربر نشون میده مثل Nod32 و غیره ... :


Public Class FormWarning
Inherits Form

Private Time1 As New Timer
Private Sub FormWarning_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Opacity = 0.95
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
Me.Height = Screen.PrimaryScreen.WorkingArea.Height / 5
Me.Width = Screen.PrimaryScreen.WorkingArea.Width / 3.5
Me.Top = Screen.PrimaryScreen.WorkingArea.Height - Me.Height
Me.Left = Screen.PrimaryScreen.WorkingArea.Width - Me.Width
Me.AutoSize = True

Dim Time As New Timer
Time.Interval = 60000
Time.Enabled = True
AddHandler Time.Tick, AddressOf Time_

Time1.Interval = 200
Time1.Enabled = True
AddHandler Time1.Tick, AddressOf Time1_

End Sub

Private Sub FormWarning_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
Dim i, n As Integer

Select Case e.X
Case Me.Width - 25 To Me.Width
i = 1
End Select

Select Case e.Y
Case "0" To "30"
n = 1
End Select

If n = 1 And i = 1 Then Me.Close()

End Sub

Private Sub FormWarning_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseHover
Time1.Dispose()
For i As Single = Me.Opacity To 0.95 Step +0.000015
Me.Opacity = i
Next
End Sub

Private Sub FormWarning_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave
Time1.Dispose()
For i As Single = Me.Opacity To 0.1 Step -0.000008
Me.Opacity = i
Next
End Sub

Private Sub FormWarning_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim Wid As Integer = Me.Width
Dim Hgt As Integer = 35

Dim NewFont As Font
Dim R_P() As Point = {New Point(0, 0), New Point(Wid, 0), New Point(Wid, Hgt), New Point(0, Hgt)}
Dim P_Br As New System.Drawing.Drawing2D.PathGradientBrush(R_P)
P_Br.CenterColor = Color.Orange

NewFont = New Font("Comic Sans MS", 20, FontStyle.Bold)

e.Graphics.FillPolygon(P_Br, R_P)
e.Graphics.DrawString("/", NewFont, Brushes.Red, Me.Width - 25, 0)
e.Graphics.DrawString("\", NewFont, Brushes.Red, Me.Width - 25, 0)

End Sub

Private Sub Time_(ByVal sender As Object, ByVal e As System.EventArgs)
Me.Close()
End Sub

Private Sub Time1_(ByVal sender As Object, ByVal e As System.EventArgs)
If Me.Opacity >= 0.01 Then
Me.Opacity -= 0.01
End If

If Me.Opacity <= 0.3 Then
Time1.Dispose()
End If

End Sub

Public Sub Setting(ByVal Deleted1 As Boolean, ByVal Name1 As String, ByVal Path As String)

Dim LblName As New Label
LblName.Location = New Point(5, 50)
LblName.Text = "ViruseName : " & Name1
LblName.AutoSize = True


Dim LblPath As New Label
LblPath.Location = New Point(5, 50 + 30)
LblPath.Text = "VirusePath : " & Path
LblPath.AutoSize = True

If Deleted1 = False Then Deleted1 = True Else Deleted1 = False

Dim LblDeleted As New Label
LblDeleted.Location = New Point(5, 50 + 30 + 30)
LblDeleted.Text = "ViruseDeleted : " & Deleted1
LblDeleted.AutoSize = True


Me.Controls.Add(LblName)
Me.Controls.Add(LblPath)
Me.Controls.Add(LblDeleted)

End Sub
End Class

طریقه استفادش هم راحت هست مثلا اگه بخوایم با کد دفعه ی قبل که برای جستوجوی آتوران بود استفادش کنیم کد دفعه ی قبل رو اینجوری تغییر میدم :


On Error Resume Next

Dim GetDriveName() As System.IO.DriveInfo = System.IO.DriveInfo.GetDrives
Dim DriveRemovable As ArrayList = New ArrayList
Dim PutString As String
Dim AutorunName As String
Dim Text() As String
Dim NumberOfText As Integer
Dim SplitsNumber As Integer
Dim PathAutorun As String
Dim Str As String
Dim EvenStr As Integer


For Each Drive As System.IO.DriveInfo In GetDriveName

If Drive.DriveType = IO.DriveType.Removable And Drive.Name <> "A:\" Then
DriveRemovable.Add(Drive.Name)
End If
Next

For DriveRemovableIndex As Integer = 0 To DriveRemovable.Count - 1
PathAutorun = DriveRemovable.Item(DriveRemovableIndex) & "Autorun.inf"

If FileIO.FileSystem.FileExists(PathAutorun) = True Then
PutString = FileIO.FileSystem.ReadAllText(PathAutorun)
Text = Split(PutString, vbCrLf)
NumberOfText = Text.Length

If NumberOfText > 0 And Text.Length > 0 Then

For TextItems As Integer = 0 To Text.Length - 1
Str = Text(TextItems)

If Mid(Str, 1, 5) = "Shell" Or Mid(Str, 1, 5) = "shell" Or Mid(Str, 1, 5) = "SHELL" Then
EvenStr = InStr(Str, "=") + +1

If EvenStr > 0 Then
If Mid(Str, EvenStr, 1) = " " Then
EvenStr += 1
End If

If Mid(Str, Str.Length - 3, 1) = "." Then
AutorunName = Mid(Str, EvenStr)


If Mid(AutorunName, 1, 8) = "Recycler" Or Mid(AutorunName, 1, 8) = "recycler" Or Mid(AutorunName, 1, 8) = "RECYCLER" Then

For AutorunNameSplits As Integer = 1 To AutorunName.Length - 1
If Mid(AutorunName, AutorunNameSplits, 1) = "\" Then
SplitsNumber = AutorunNameSplits
End If
Next

If SplitsNumber <> 0 Then
AutorunName = Mid(AutorunName, SplitsNumber + 1)
End If
End If
Else
AutorunName = Mid(Str, EvenStr)
Dim S As String = Split(AutorunName)(0)
AutorunName = S
End If

If FileIO.FileSystem.FileExists(DriveRemovable.Item(D riveRemovableIndex) & AutorunName) = True Then

SetAttr(DriveRemovable.Item(DriveRemovableIndex) & AutorunName, FileAttribute.Normal)
SetAttr(DriveRemovable.Item(DriveRemovableIndex) & "Autorun.inf", FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(DriveRemovable.Item(D riveRemovableIndex) & AutorunName)
FileIO.FileSystem.DeleteFile(DriveRemovable.Item(D riveRemovableIndex) & "Autorun.inf")
Else

SetAttr(DriveRemovable.Item(DriveRemovableIndex) & "Autorun.inf", FileAttribute.Normal)
SetAttr(DriveRemovable.Item(DriveRemovableIndex) & "Recycler", FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(DriveRemovable.Item(D riveRemovableIndex) & "Autorun.inf")
FileIO.FileSystem.DeleteDirectory(DriveRemovable.I tem(DriveRemovableIndex) & "Recycler", FileIO.DeleteDirectoryOption.DeleteAllContents)
End If

Dim NewFrm As New FormWarning
NewFrm.Setting(FileIO.FileSystem.FileExists(DriveR emovable.Item(DriveRemovableIndex) & AutorunName), AutorunName, DriveRemovable.Item(DriveRemovableIndex) & AutorunName)
NewFrm.Show()

End If
End If
Next
End If
End If
Next
End Sub

دوست اگه نظری نیست ......... :گریه:

modirmasool
جمعه 05 شهریور 1389, 00:53 صبح
خوب!
1-تایمر فکر خوبی نیست. ما باید با sysinfo این کار رو انجام بدیم،چون قبل از اجرای اتوران، رویداد arrival مربوط به sysinfo اجرا میشه.(sysinfo یه سری رویداد خوب واسه لحظه ی وصل شدن device و یا جدا شدنش داره به علاوه ی چیزهای دیگه که بعضی وقت ها بدرد میخورن.)
2- دستور Open رو فراموش کردین بذارین.(هم shell و هم open باید بررسی بشن.)
3- درمورد کلیدهای رجیستری هم آره اونایی که گفتین به علاوه shell کنیم خوب میشه. فعلا کلید دیگه ای تو ذهنم نیست ولی فکر کنم یکی دوتای دیگه هم بشه جور کرد.:متفکر:
4- منظورتون از تغییر نام con رو نفهمیدم. تا اونجایی که من میدونم اسم های رزرو شده مثل PRN, AUX, NUL, COM1 و con و... رو میشه با داس ساخت و با داس هم باید پاکشون کرد. ولی اگه تغییر نام بدیمشون اونوقت دیگه به راحتی پاک میشن.(اگه راحی داره ممنون میشم بگین.)
برای این کار نظرتون چیه که بیایم با دستور open خود ویبی و به صورت Read write lock فایل های اتوران خودمون رو باز کنیم تا ویروس نتونه جایگزین بشه؟

Saman_12
جمعه 05 شهریور 1389, 08:32 صبح
کد یک مشکل فنی داشت اونم انه که اگه بعد از اسم فایل کلمه دی گری می گذاشتن نام و آدرس برنامه مخرب درست برگشت داده نمی شد همچنید توی اون از حلقه ای متعددی استفاده شده بود این کد کد خلاصه و خیلی پیشرفته تر اون کد هست که من خودم تمام حالات رو امتحان کردم مشکلی به وجود نمیاد(اگه مشکلی داشت بگید تا بر طرفش کنم) :


On Error Resume Next

Dim GetDriveName() As System.IO.DriveInfo = System.IO.DriveInfo.GetDrives
Dim PutString As String
Dim Text() As String
Dim NumberOfText As Integer
Dim AutorunPath As String
Dim FileAutorunPath, FileAutorunName, FileAutorunFolder As String
Dim EvenStr As Integer
Dim Bo As Boolean

For Each Drive As System.IO.DriveInfo In GetDriveName
AutorunPath = Drive.Name & "Autorun.inf"
If Drive.Name <> "A:\" Then
If Drive.DriveType = IO.DriveType.Removable And FileIO.FileSystem.FileExists(AutorunPath) = True Then
PutString = FileIO.FileSystem.ReadAllText(AutorunPath)
Text = Split(PutString, vbCrLf)
For Each LineText As String In Text

If UCase(Mid(LineText, 1, 5)) = "SHELL" Or UCase(Mid(LineText, 1, 4)) = "OPEN" Then

NumberOfText = InStr(LineText, "=")

If Mid(LineText, 1, 1) <> " " Then
EvenStr = NumberOfText + +1
Else
EvenStr = NumberOfText + +2
End If

If Mid(LineText, LineText.Length - 3, 1) <> "." Then
Dim S() As String = Split(Mid(LineText, EvenStr))

For Each ArrayText As String In S
If ArrayText <> " " And ArrayText <> "" And Bo = False Then
Bo = True
FileAutorunPath = ArrayText
FileAutorunName = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Nam e
FileAutorunFolder = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Dir ectory.Name
End If
Next
Else
FileAutorunPath = Mid(LineText, EvenStr)
FileAutorunName = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Nam e
FileAutorunFolder = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Dir ectory.Name
End If

If FileIO.FileSystem.FileExists(Drive.Name & FileAutorunPath) = True Then

SetAttr(Drive.Name & FileAutorunPath, FileAttribute.Normal)
SetAttr(AutorunPath, FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(Drive.Name & FileAutorunPath)
FileIO.FileSystem.DeleteFile(AutorunPath)
Else

SetAttr(AutorunPath, FileAttribute.Normal)
SetAttr(Drive.Name & "Recycler", FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(AutorunPath)
FileIO.FileSystem.DeleteDirectory(Drive.Name & "Recycler", FileIO.DeleteDirectoryOption.DeleteAllContents)
End If

Dim NewFrm As New FormWarning
NewFrm.Setting(FileIO.FileSystem.FileExists(Drive. Name & FileAutorunPath), FileAutorunName, Drive.Name & FileAutorunPath)
NewFrm.Show()

End If
Next

End If
End If
Next

من آخر نفهمیدم این Sysinfo توی دات نت هست یا نه ؟
بهتره به لیست کلید هامون کلیه زیر شاخه های Policies رو هم اظافه کنیم چون بیشتر محدود کردن ها از این کلید نشأت می گیره!
اون Con رو هم بی خیالش من امتحان کردم فهمیدم نمیشه کاریش کرد خودم دنبال راهی برای قفل پوشه هستم شما بهتره دیگه نگران این مسوله نباشی دارم روش تحقیق می کنم تا چند وقت دیگه هم مطالب رو میزارم.(اگه یک فایل آتوران رو خودمون درست کنیم کاربر دچار مشکل میشه!بهتره از پوشه استفاده کنیم و قبل از اون هم از ویروسی بودن فلش مطمئن با شیم.)
از هم کاری تون خیلی ممنونم!

modirmasool
جمعه 05 شهریور 1389, 10:05 صبح
چرا کاربر باید دچار مشکل بشه؟!!!

با پوشه که نمیتونیم جلوشو بگیریم. ما باید فایل متنی Autorun.inf رو بسازیم چون اینه که منشاء اصلی پخش ویروس های فلش و درایوها هستش.
Sys info رو من در سربرگ com واقع در reference دیدم. اما تو دات نت نمیدونم چجوری باید فراخونی اش کرد.(آخه تو ویبی 6 به صورت کامپوننت بود ولی اینجا نمیدونم چجوریه.

راستی دستور open رو هم باید به کدتون اضافه کنین تا جست و جو بشه. فقط به shell نباید بسنده کرد.

Saman_12
جمعه 05 شهریور 1389, 10:33 صبح
معذرت می خوام من منظورتون رو از اون گزینه ی آخر در پست ها ی قبل نفهمید الان ویرایش شد.
چرا با پوشه نمی شه! :
بعد از چندیدن ساعت انلاین بودن بالاخره کد مورد نظر یافت شد :


Dim fld As New System.IO.DirectoryInfo("Your path")
Dim sec As System.Security.AccessControl.DirectorySecurity

sec = fld.GetAccessControl()
For Each rul As System.Security.AccessControl.FileSystemAccessRule In sec.GetAccessRules(True, True, GetType(System.Security.Principal.NTAccount))
sec.RemoveAccessRuleAll(rul)
Next
sec.SetAccessRuleProtection(True, False)
fld.SetAccessControl(sec)

sec.AddAccessRule(New Security.AccessControl.FileSystemAccessRule("CREATOR OWNER", Security.AccessControl.FileSystemRights.FullContro l, Security.AccessControl.AccessControlType.Deny))
fld.SetAccessControl(sec)

کد بالا میاد سطح دسترسی فولدر رو تغییر میده و اونو به طور کامل از هر لحاظ بلاک می کنه!!!(به گونه ای که فقط فولدر جنبه نمایشی داره با اینکه وجود داره.)

Saman_12
جمعه 05 شهریور 1389, 10:45 صبح
وقتی می خوام فرم رو که SysInfo روی اون هست اجرا کنم پیغام ریجستر نشدن میده هیچ کارشم نمیشه کرد.
می گم نظرتون چیه که اون قسمت جستو جورو جوری طراحی کنیم که قبل از پاک کردن از کاربر بپرسه چی کار کنه (یعنی بلاکش کنه, پاکش کنه یا .......)?
من به این دلیل از دستور Open استفاده نکردم که چون بعضی از کاربران از فلش دیسک به عنوان منتقل کردن نرم افزار استفاده می کنن و خبلی از نرم افزار ها از تعداد زیادی فایل اجرایی استفاده می کنن و اگه ما فایل های آتوران معمولی رو هم دیلیت کنیم ممکنه برای کار بر مشکل تراشی کرده باشیم؟

modirmasool
جمعه 05 شهریور 1389, 14:59 عصر
وقتی می خوام فرم رو که SysInfo روی اون هست اجرا کنم پیغام ریجستر نشدن میده هیچ کارشم نمیشه کرد.
می گم نظرتون چیه که اون قسمت جستو جورو جوری طراحی کنیم که قبل از پاک کردن از کاربر بپرسه چی کار کنه (یعنی بلاکش کنه, پاکش کنه یا .......)?


در مورد رجیستر نشدنش نمیدونم. من تو دات نت وارد نیستم. حالا وقت کردم یه نمونه ویبی 6 اش رو براتون میذارم ببینین. شاید خودتون بتونین درستش کنین.

برای پرسیدن از کاربر هم خوبه.



من به این دلیل از دستور Open استفاده نکردم که چون بعضی از کاربران از فلش دیسک به عنوان منتقل کردن نرم افزار استفاده می کنن و خبلی از نرم افزار ها از تعداد زیادی فایل اجرایی استفاده می کنن و اگه ما فایل های آتوران معمولی رو هم دیلیت کنیم ممکنه برای کار بر مشکل تراشی کرده باشیم؟

من به کدتون خوب توجه نکردم. مگه شما دارین فایل های اتوران رو جست و جو می کنین؟!!!
ما که نباید کاری به پوشه های دیگه داشته باشیم. فقط باید مسیر ریشه رو بررسی کنیم که آیا اتوران داره یا نه. مثلا برای یه فلش لازم نیست بریم پوشه های داخلش رو جست و جو کنیم و فقط کافیه که در مسیر اصلی دنبالش بگردیم.(مگه هدفمون جلوگیری از اجرای ویروس در هنگام اتصال فلش نیست!)
نکته بعدی این که یه ویروس هم میتونه از دستور Open استفاده کنه و باید حتما این نکته در نظر گرفته بشه.

Saman_12
جمعه 05 شهریور 1389, 16:05 عصر
توی ویندوز 7 64 این Ocx ها ریجستر نمی شوند.(البته فقط بعضی هاشون.)
قسمت پرسیدن از کابر رو هم تا چندی دیگر طراحی مکنم.
نه من فایل ها رو جستجو نمی کنم منظورم این بود که به طور مثال شما توی فلشتون VS2010 رو دارید که تعداد متعددی برنامه Exe همراه خودش داره اگه شما اسم فایل اصلی نصب رو ندونید باید آتوران اونو اجرا کنه که از دستور Open استفاده می کنه اونوقت اگه ما بیایم و پاکش کنیم شما باید تک تک فایل ها رو باز کنید تا به فایل نصب برسید.
برای بلاک کردنش هم کافیه اون دستور قبل که پوشه رو قفل می کرد یکم تغییر بدیم!

modirmasool
جمعه 05 شهریور 1389, 17:59 عصر
به طور مثال شما توی فلشتون VS2010 رو دارید که تعداد متعددی برنامه Exe همراه خودش داره اگه شما اسم فایل اصلی نصب رو ندونید باید آتوران اونو اجرا کنه که از دستور Open استفاده می کنه اونوقت اگه ما بیایم و پاکش کنیم شما باید تک تک فایل ها رو باز کنید تا به فایل نصب برسید.


معمولا کاربران نرم افزارهاشون رو توی پوشه های مختلف دسته بندی میکنن و بعد میریزن تو فلش. حالا اگه یکی دقیقا محتویات سی دی vs رو در فلشش ریخته باشه، این جاست که کاربر باید تصمیم بگیره که میخواد پاکش کنه یا نه. اما به هر حال بازهم دلیل نمیشه که open رو از قلم بندازیم!

Saman_12
جمعه 05 شهریور 1389, 19:41 عصر
از قلم نمی اندازیم برای همین هم از فورم سوال استفاده می کنیم.

Saman_12
شنبه 06 شهریور 1389, 10:13 صبح
قسمت سوال با دست کاری کمی از کد های قبل درست شد.
ایین اون کلاس قبل با کمی دست کاری :


Public Class FormWarning
Inherits Form

Private Time1 As New Timer

Private Sub FormWarning_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Opacity = 0.95
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
Me.Height = Screen.PrimaryScreen.WorkingArea.Height / 5
Me.Width = Screen.PrimaryScreen.WorkingArea.Width / 3.5
Me.Top = Screen.PrimaryScreen.WorkingArea.Height - Me.Height
Me.Left = Screen.PrimaryScreen.WorkingArea.Width - Me.Width
Me.AutoSize = True

Dim Time As New Timer
Time.Interval = 60000
Time.Enabled = True
AddHandler Time.Tick, AddressOf Time_

Time1.Interval = 200
Time1.Enabled = True
AddHandler Time1.Tick, AddressOf Time1_

End Sub

Private Sub FormWarning_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
Dim i, n As Integer

Select Case e.X
Case Me.Width - 25 To Me.Width
i = 1
End Select

Select Case e.Y
Case "0" To "30"
n = 1
End Select

If n = 1 And i = 1 Then Me.Close()

End Sub

Private Sub FormWarning_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseHover
Time1.Dispose()
For i As Single = Me.Opacity To 0.95 Step +0.000015
Me.Opacity = i
Next
End Sub

Private Sub FormWarning_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave
Time1.Dispose()

For i As Single = Me.Opacity To 0.3 Step -0.000008
Me.Opacity = i
Next

End Sub

Private Sub FormWarning_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim Objbr As New Drawing2D.LinearGradientBrush(Me.DisplayRectangle, Color.Azure, Color.Gainsboro, Drawing2D.LinearGradientMode.Vertical)

e.Graphics.FillRectangle(Objbr, Me.DisplayRectangle)
Objbr.Dispose()

Dim Wid As Integer = Me.Width
Dim Hgt As Integer = 35

Dim NewFont As Font
Dim R_P() As Point = {New Point(0, 0), New Point(Wid, 0), New Point(Wid, Hgt), New Point(0, Hgt)}
Dim P_Br As New System.Drawing.Drawing2D.PathGradientBrush(R_P)
P_Br.CenterColor = Color.Orange

NewFont = New Font("Comic Sans MS", 20, FontStyle.Bold)

e.Graphics.FillPolygon(P_Br, R_P)
e.Graphics.DrawString("/", NewFont, Brushes.Red, Me.Width - 25, 0)
e.Graphics.DrawString("\", NewFont, Brushes.Red, Me.Width - 25, 0)

End Sub

Private Sub Time_(ByVal sender As Object, ByVal e As System.EventArgs)
Me.Close()
End Sub

Private Sub Time1_(ByVal sender As Object, ByVal e As System.EventArgs)
If Me.Opacity >= 0.01 Then
Me.Opacity -= 0.01
End If

If Me.Opacity <= 0.3 Then
Time1.Dispose()
End If

End Sub

Public Sub Setting(ByVal Deleted1 As Boolean, ByVal Name1 As String, ByVal Path As String, Optional ByVal Number As Integer = 0)

Select Case Number

Case 0

Dim LblName As New Label
LblName.Location = New Point(5, 50)
LblName.Text = "ViruseName : " & Name1
LblName.AutoSize = True


Dim LblPath As New Label
LblPath.Location = New Point(5, 50 + 30)
LblPath.Text = "VirusePath : " & Path
LblPath.AutoSize = True

If Deleted1 = False Then Deleted1 = True Else Deleted1 = False

Dim LblDeleted As New Label
LblDeleted.Location = New Point(5, 50 + 30 + 30)
LblDeleted.Text = "ViruseDeleted : " & Deleted1
LblDeleted.AutoSize = True


Me.Controls.Add(LblName)
Me.Controls.Add(LblPath)
Me.Controls.Add(LblDeleted)

Case 1

Dim LblName As New Label
LblName.Location = New Point(5, 50)
LblName.Text = "ViruseName : " & Name1
LblName.AutoSize = True


Dim LblPath As New Label
LblPath.Location = New Point(5, 50 + 30)
LblPath.Text = "VirusePath : " & Path
LblPath.AutoSize = True

If Deleted1 = False Then Deleted1 = True Else Deleted1 = False

Dim LblDeleted As New Label
LblDeleted.Location = New Point(5, 50 + 30 + 30)
LblDeleted.Text = "ViruseDeleted : " & Deleted1
LblDeleted.AutoSize = True


Me.Controls.Add(LblName)
Me.Controls.Add(LblPath)
Me.Controls.Add(LblDeleted)

Dim BtnAllow As New Button
BtnAllow.Location = New Point(5, 140)
BtnAllow.Text = "Allow"
BtnAllow.AutoSize = True

Dim BtnLock As New Button
BtnLock.Location = New Point(5 + BtnAllow.Width + 5, 140)
BtnLock.Text = "Lock"
BtnLock.AutoSize = True

Dim BtnDelete As New Button
BtnDelete.Location = New Point(5 + BtnLock.Width + 5 + BtnAllow.Width + 5, 140)
BtnDelete.Text = "Delete"
BtnDelete.AutoSize = True

Me.Controls.Add(BtnAllow)
Me.Controls.Add(BtnLock)
Me.Controls.Add(BtnDelete)

AddHandler BtnAllow.Click, AddressOf BtnAllow_Click
AddHandler BtnLock.Click, AddressOf BtnLock_Click
AddHandler BtnDelete.Click, AddressOf BtnDelete_Click


End Select

End Sub

Public Address As String
Private Sub BtnAllow_Click(ByVal sender As Object, ByVal e As System.EventArgs)
On Error Resume Next
Dim Free As Integer = FreeFile()

FileOpen(Free, Address, OpenMode.Append, , OpenShare.Shared)
PrintLine(Free, vbCrLf & "Allow")
FileClose(Free)
Me.Close()
End Sub
Public FileAddress As String

Private Sub BtnLock_Click(ByVal sender As Object, ByVal e As System.EventArgs)
On Error Resume Next
On Error Resume Next
Dim Drive As String = FileIO.FileSystem.GetFileInfo(Address).Directory.R oot.ToString
Dim Free As Integer = FreeFile()

Dim fld As New System.IO.FileInfo(Drive & FileAddress)
Dim sec As System.Security.AccessControl.FileSecurity

sec = fld.GetAccessControl()
For Each rul As System.Security.AccessControl.FileSystemAccessRule In sec.GetAccessRules(True, True, GetType(System.Security.Principal.NTAccount))
sec.RemoveAccessRuleAll(rul)
Next
sec.SetAccessRuleProtection(True, False)
fld.SetAccessControl(sec)

sec.AddAccessRule(New Security.AccessControl.FileSystemAccessRule("CREATOR OWNER", Security.AccessControl.FileSystemRights.FullContro l, Security.AccessControl.AccessControlType.Deny))

fld.SetAccessControl(sec)

FileOpen(Free, Address, OpenMode.Append, , OpenShare.Shared)
PrintLine(Free, vbCrLf & "Lock")
FileClose(Free)

Me.Close()
End Sub

Public FileName As String
Private Sub BtnDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs)
On Error Resume Next
Dim Drive As String = FileIO.FileSystem.GetFileInfo(Address).Directory.R oot.ToString
If FileIO.FileSystem.FileExists(Drive & FileAddress) = True Then

SetAttr(Drive & FileAddress, FileAttribute.Normal)
SetAttr(Address, FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(Drive & FileAddress)
FileIO.FileSystem.DeleteFile(Address)
Else

SetAttr(Address, FileAttribute.Normal)
SetAttr(Drive & "Recycler", FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(Address)
FileIO.FileSystem.DeleteDirectory(Drive & "Recycler", FileIO.DeleteDirectoryOption.DeleteAllContents)
End If
Me.Close()
End Sub

End Class


این از کد قسمت جستجو بازم با کمی دست کاری :


On Error Resume Next

Dim GetDriveName() As System.IO.DriveInfo = System.IO.DriveInfo.GetDrives
Dim PutString As String
Dim Text() As String
Dim NumberOfText As Integer
Dim AutorunPath As String
Dim FileAutorunPath, FileAutorunName, FileAutorunFolder As String
Dim EvenStr As Integer
Dim Bo As Boolean

For Each Drive As System.IO.DriveInfo In GetDriveName
AutorunPath = Drive.Name & "Autorun.inf"
If Drive.Name <> "A:\" Then

If Drive.DriveType = IO.DriveType.Removable And FileIO.FileSystem.FileExists(AutorunPath) = True Then
PutString = FileIO.FileSystem.ReadAllText(AutorunPath)
Text = Split(PutString, vbCrLf)

For Each LineText As String In Text

Dim L As String
Dim Instr1 As Integer = InStr(PutString, "SHELL", CompareMethod.Text)
If Instr1 <> 0 Then
L = LineText
LineText = Mid(PutString, Instr1)
LineText = (Mid(LineText, Instr1, InStr(LineText, vbCrLf, CompareMethod.Text) - 1))

NumberOfText = InStr(LineText, "=")

If Mid(LineText, 1, 1) <> " " Then
EvenStr = NumberOfText + +1
Else
EvenStr = NumberOfText + +2
End If

If Mid(LineText, LineText.Length - 3, 1) <> "." Then
Dim S() As String = Split(Mid(LineText, EvenStr))

For Each ArrayText As String In S
If ArrayText <> " " And ArrayText <> "" And ArrayText <> vbCrLf And Bo = False Then
Bo = True
FileAutorunPath = ArrayText
FileAutorunName = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Nam e
FileAutorunFolder = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Dir ectory.Name
End If
Next
Else
FileAutorunPath = Mid(LineText, EvenStr)
FileAutorunName = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Nam e
FileAutorunFolder = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Dir ectory.Name
End If

If FileIO.FileSystem.FileExists(Drive.Name & FileAutorunPath) = True Then

SetAttr(Drive.Name & FileAutorunPath, FileAttribute.Normal)
SetAttr(AutorunPath, FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(Drive.Name & FileAutorunPath)
FileIO.FileSystem.DeleteFile(AutorunPath)
Else

SetAttr(AutorunPath, FileAttribute.Normal)
SetAttr(Drive.Name & "Recycler", FileAttribute.Normal)
FileIO.FileSystem.DeleteFile(AutorunPath)
FileIO.FileSystem.DeleteDirectory(Drive.Name & "Recycler", FileIO.DeleteDirectoryOption.DeleteAllContents)
End If

Dim NewFrm As New FormWarning
NewFrm.Setting(FileIO.FileSystem.FileExists(Drive. Name & FileAutorunPath), FileAutorunName, Drive.Name & FileAutorunPath)
NewFrm.Show()

End If

If Instr1 = 0 And FileIO.FileSystem.FileExists(AutorunPath) = True Then
If L <> "" Then
LineText = L
End If
If Text(Text.Length - 2) <> "Allow" Then
If UCase(Mid(LineText, 1, 4)) = "OPEN" Then

NumberOfText = InStr(LineText, "=")

If Mid(LineText, 1, 1) <> " " Then
EvenStr = NumberOfText + +1
Else
EvenStr = NumberOfText + +2
End If

If Mid(LineText, LineText.Length - 3, 1) <> "." Then
Dim S() As String = Split(Mid(LineText, EvenStr))

For Each ArrayText As String In S
If ArrayText <> " " And ArrayText <> "" And Bo = False Then
Bo = True
FileAutorunPath = ArrayText
FileAutorunName = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Nam e
FileAutorunFolder = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Dir ectory.Name
End If
Next
Else
FileAutorunPath = Mid(LineText, EvenStr)
FileAutorunName = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Nam e
FileAutorunFolder = FileIO.FileSystem.GetFileInfo(FileAutorunPath).Dir ectory.Name
End If


Dim NewFrm As New FormWarning
NewFrm.Address = AutorunPath
NewFrm.FileAddress = FileAutorunPath
NewFrm.FileName = FileAutorunName
NewFrm.Setting(FileIO.FileSystem.FileExists(Drive. Name & FileAutorunPath), FileAutorunName, Drive.Name & FileAutorunPath, 1)
NewFrm.Show()
End If

End If
End If
Next
End If
End If
Next

کد بالا اگه توی فایل آتوران از کلمه Shell استفاده نشده بود از تون سوال می کنه چی کارش کنم که سه حالت داره پاک کش کنه یا قفلش کنه یا اجزاه دسترسی بده.
و اگه از اون کلمه استفاده شده بود سریع اونو پاک می کنه و یه پیغام پاک وضعیت نشون میده.
من اینو امتحان کردم مشکلی نداشت اگه مشکلی دیدید بگین تا اصلاح بشه.
کد قسمت ریجستری هم چندی دیگر (شاید چندی دیگر شاید هم بیشتر) آماده میشه.

modirmasool
شنبه 06 شهریور 1389, 10:52 صبح
منظورتون از قفل کردن چیه؟ یعنی اجرا نشه؟

Saman_12
شنبه 06 شهریور 1389, 11:10 صبح
اگه اون کد دفعه ی قبل که گفتم یه پوشه رو قفل می کنه رو امتحان کرده باشین مثل همون میشه اگر هم امتحان نکردین من توضیح میدم چی میشه :
شما و یا هر برنامه دیگری نمیتونین اون فایل رو هیچ کار کنید مگر که سطح سترسی رو تغییر بدید.

saeedmassomi
چهارشنبه 17 شهریور 1395, 10:52 صبح
با سلام ... لطفا راهنمایی کنید. کامپیوترم سوپر هیدنه هار و فعال کردم میبینم ولی سوالم ساخت autorun.inf غیر قابل دسترسی هستش
ساخت فایل و پوشه Autorun.inf در usb با سطح دسترسی
http://s6.picofile.com/file/8266543600/autorunautorun.jpg