آموزش نوشتن attribute changer و file browser

اینکه این برنامه به چه دردی می خوره باید بگم همیشه دیدید که وقتی ویروس وارد سیستم میشه میاد خیلی از فایل ها رو به صورت hidden , system و ... می کنه اینجا ما می تونیم از طریق این برنامه اون فایل ها رو به حالت عادی برگردونیم و یا تشخیص بدیم که فایل دارای چه خاصیتی هست 

بعد اینکه تو خیلی از بد افزار ها مخصوصا سری autorun این مشکل بوده که وقتی با windows explorer وارد درایو شدیم اتوماتیک ویروس از طریق فایل autorun.inf وارد سیستم شده و اگه از طریق این برنامه واردش بشید دیگه این مشکل هم وحود نداره 

در مرحله ی اول آموزش نوشتن یک file browser رو داریم که می خوام با کلیک روی هر کدوم از فایل ها بتونم Attribute اون رو تغییر بدم 

اول از همه شروع به نوشتن یک folder browser میکنیم 

برای این کار ما باید رفرنس های Imports System و Imports System.IO رو وارد کنیم 

بعد 3 تا listview می زارم یکی برای لیست کلیه ی درایو ها و یکی برای لیست فولدر ها و دیگری برای فایل 

در listview اول ککه مربوط به لیست دراو ها هست باید کد زیر رو بزنیم 

کد:
    For Each Dir As String In Directory.GetLogicalDrives()
      ListView1.Items.Add(Dir)
    Next

اگه دقت کنید من اینجا اومدم متغیری رو با نام dir از نوع string زدم و گفتم که از متود directory جهت لیست کردن دراو های لوجیکال استفاده کن یعنی getlogicaldrive رو بهش دادم 

و تو خط دوم هم گفتم اون رو داخل listview اضافه کن 

این کد رو باید در form _ load بزنیم که خودش بالا بیاد و اجرا بشه 

حالا می خوام بگم وقتی کلیک کردیم روی هر کدوم از درایو ها لیستی از فولدر های موجودشو بیاره منتها در listview2

کد:
    ListView2.Items.Clear()
    For Each Dir As String In Directory.GetDirectories(ListView1.SelectedItems(0).Text)
      ListView2.Items.Add(Dir)
    Next

خط اول رو زدم که هر بار کلیک جدید لیست رو پاک کنه و از نو بیاد فرامین رو اجرا کنه 

خط دوم مثل بالاست منتها گفتم از متود directory گزینه ی GetDirectories رو انتخاب کردم که میشه لیست فولدر ها 

اما لیست فولدر های کجا ؟ داخل پرانتز زدم ListView1.SelectedItems(0).Text یعنی گزینه ی انتخاب شده listview1

کد بالا رو باید در رویداد SelectedIndexChanged مربوط به lstiview درایو ها بزاریم 

و بعد هم می خوام با کلیک روی لیست فولدر ها لیست فایل های داخل اون هم در داخل listview بعدی ظاهر بشه 

کد:
    ListView2.Items.Clear()
    For Each files In Directory.GetFiles(ListView2.SelectedItems(0).Text)
      ListView3.Items.Add(files)
    Next

که گزینه ی getfiles رو برای متود directory انتخاب کردم

خوب تا اینجا ما اومدیم file / folder browser رو نوشتیم 

حالا می خوایم یک fileattribute changer قوی بنویسیم 

برنامه باید قادر باشه که ویژگی های زیر رو به یک فایل 



Compressed
Device
Directory
Encrypted
Hidden
IntegrityStream
Normal
NoScrubData
NotContentIndexed
Offline
ReadOnly
ReparsePoint
SparseFile
System
Temporary

پس به این تعداد میایم checkbox میزاریم و اسامی بالا رو بهش بدید 

و جهت درک راحت تر یک TExtbox بزارید که آدرس فایل انتخاب شده رو داخل اون بزاره با کد زیر 

کد:
TextBox1.Text = ListView3.SelectedItems(0).Text

حالا میایم میگیم که هر وقت گزینه ی مثلا hidden رو زدیم این ویژگی به فایل داده بشه و اگر تیک برداشته شد این ویژگی رو از بردار و به حالت عادی برگردون با کد زیر 

کد:
if checkhidden.checked=true then
     Dim attribute As System.IO.FileAttributes = FileAttributes.Hidden
   
 File.SetAttributes(TextBox1.Text, FileAttributes.Hidden)

else


     Dim attribute As System.IO.FileAttributes = FileAttributes.normal
   
 File.SetAttributes(TextBox1.Text, FileAttributes.normal)

و به همین ترتیب می تونید به جای گزینه ی hiiden هر کدام از گزینه ای بالا رو انتخاب کنید 

البته باید کمی بیشتر از اینها فرامین شرطی بزارید ولی Base کار همینه دیگه ما بقیه می مونه به خودتون که چقدر خلاقیت داشته باشید

اگه خواستید در مورد این سری attribute که بالا زدم بیشتر بدونید لینک زیر رو ببینید 

http://msdn.microsoft.com/en-us/libr...ttributes.aspx

آموزش ساخت taskmgr ویندوز در زبان vb.net


شاید همیشه براتون مهم بوده باشه که بدونید taskmgr ویندوز چطوری ساخته شده و بخواید خودتون با اون رو خودتون بسازید 

البته تو این یکی موضوع برنامه های قوی زیاد داریم که قوی ترین اونها process hacker هستش 

برای ساختن یک Taskmanager می تونیم از هم کد های خود vb.net ( Getprocess ) استفاده کنیم هم از Win32_class فرقی نداره 

هر دو گزینه رو شرح می دم 

اول از همه یک متغیر از نوع process تعریف می کنیم 

کد:
Dim process as new process()

حالا با استفاده از حلقه For each میایم حلقه ای رئ ایجاد می کنیم که پروسه ها در یک لیست باکس بیوفتن 

کد:
    For Each a In process.GetProcesses()

      On Error Resume Next

      lstProcesses.Items.Add(a.ProcessName)

      lstProcesses.Items(0).SubItems.Add(a.Id.ToString())
      count += 1

    Next

خط اول که همون حلقه هست 

خط دوم رو میزاریم که اگه یکی از مشخصات پروسه ها نبودند برنامه بخاطرش متوقف نشه خطا بده 

خط سوم میاد نام پروسه ها رو در listview می اندازه 

خط چهارم اوومدم ID مربوط به پروسه رو هم در column بعدی اون listview آورددم 

ما می تونیم از طریق این متغیر a که شامل لیست پروسه ها میشه دیگر جزئیات مربوط به اون رو که نمونش همین ID هست یا همون PID رو بدست بیاریم 

اما از property های اون می تونیم این موارد زیر رو هم بهش اضافه کنیم 


a.Container
a.ExitCode
a.ExitTime
a.Handle
a.HasExited
a.Id
a.MachineName
a.MainModule
a.MainWindowTitle
a.PriorityBoostEnabled
a.PriorityClass
a.ProcessName
a.Responding
a.SessionId
a.Site
a.StandardError
a.StandardInput
a.StandardOutput
a.StartInfo
a.StartTime
a.Threads
حالا می خوایم از لیست وقتی یکی از پروسه ها رو انتخاب می کنیم اون رو end کنیم 

خوب کد زیر رو بکار می بریم 

کد:
For Each Process As ListViewItem In lstProcesses.SelectedItems

System.Diagnostics.Process.GetProcessById(lstProcesses.SelectedItems(0).SubItems(1).Text()).Kill()

Next
این کد باید داخل یک دکمه با اسم مثلا end process بزارید دقت کنیم من گفتم که id پروسه ی انتخابی در لیست باکس رو end کن 


اما اگر کمی هم فکر کنیم ایده های جالبی به نظرمون میاد 

مثلا یادم میاد خیلی وقت پیش ( این به این معنیه که من خیلی وقته اینا رو می دونم  ) یکی از دوستان که صاحب کافی نت بود می گفت من هر کاری می کنم باز این ملت taskmanager رو بالا میارن منم اومدم براش یک کار خیلی کوچیکی انجام دادم 

کد زیر رو براش نوشتم و اونرو د ر اصل در وسط حلقه زدم 

کد:
            If a.ProcessName = "Taskmgr.exe" Or p.ProcessName = "Taskmgr" Then
                a.Kill()
            End If
اینجا میگه که اگر پروسه ای با اسم taskmgr اجرا شد اون رو فورا kill کن 

البته هرچند این کار باعث شد سیستم اون بنده خدا هنگ کنه  ولی برای خودم جالب بود 

همچنین شما می تونید از این کد برای Start کردن یک process استفاده کنید 

کد:
Process.Start("nameprose.exe")

=================================================
=================================================

روش بعدی هم که از طریق WMI ویندوز هست 

که در اینجا بهش اشاره کردیم 

استفاده از رفرنس زیر 

کد:
Imports System.Management
انتخاب متود مورد نظر از طریق زبان WQL و انتصاب اون به متغیر 

کد:
    
Dim strLocal_service As String = "SELECT * FROM Win32_process"
تعریف این متغیر از نوع ابجکت ManagementObjectSearcher 

کد:
    Dim sysservice_Searcher As New ManagementObjectSearcher(strLocal_service)

و استفاده از حلقه for each جهت لیست کردن نام پروسه ها 

کد:
    Dim i As Integer
    For Each servicelist As ManagementObject In sysservice_Searcher.Get()
      lstProcesses.Items.Add(servicelist("name").ToString)

      i = i + 1

    Next
دیگر property های مربوط به این کلاس رو تو لیست زیر مشاهده می کنید .


string Caption;
string CommandLine;
string CreationClassName;
datetime CreationDate;
string CSCreationClassName;
string CSName;
string De******ion;
string ExecutablePath;
uint16 ExecutionState;
string Handle;
uint32 HandleCount;
datetime InstallDate;
uint64 KernelModeTime;
uint32 MaximumWorkingSetSize;
uint32 MinimumWorkingSetSize;
string Name;
string OSCreationClassName;
string OSName;
uint64 OtherOperationCount;
uint64 OtherTransferCount;
uint32 PageFaults;
uint32 PageFileUsage;
uint32 ParentProcessId;
uint32 PeakPageFileUsage;
uint64 PeakVirtualSize;
uint32 PeakWorkingSetSize;
uint32 Priority;
uint64 PrivatePageCount;
uint32 ProcessId;
uint32 QuotaNonPagedPoolUsage;
uint32 QuotaPagedPoolUsage;
uint32 QuotaPeakNonPagedPoolUsage;
uint32 QuotaPeakPagedPoolUsage;
uint64 ReadOperationCount;
uint64 ReadTransferCount;
uint32 SessionId;
string Status;
datetime TerminationDate;
uint32 ThreadCount;
uint64 UserModeTime;
uint64 VirtualSize;
string WindowsVersion;
uint64 WorkingSetSize;
uint64 WriteOperationCount;
uint64 WriteTransferCount;


کمی کامل تر هست این کلاس ها همیشه 

سوالی بود بپرسید تا گرمم 


آموزش نوشتن SERVICE MANAGER با استفاده از کلاس های Win32 و کدهای wql

خب به مناسبت فرارسیدن ماه مبارک رمضان بزارید ما هم کمی آموزش بدیم که خدا کنه کسی مارو دعا کنه فقط به این منظور 

حالا هر چقدر تونستم در کنار نوشتن برنامم آموزش قسمت های اصلی رو می دم 

=======================

در مورد اینکه WMI چی هست می تونید از اینترنت بپرسید البته اگه سوال داشتید بپرسید 

=======================

اینجا می خوام لیستی از سرویس های ویندوز رو بگیرم و جزپیات اون ها رو هم بیارم 

این کار رو با استفاده از زبان VB.net *انجام میدم 

=======================

2 تا listview می زارم و اسم اولی رو می کنم LSTservice و LSTDetiles

حالا باید رفرنس زیر رو هم تو قسمت project properties*اضافه کنم هم در قسمت Generall کد ها 

کد:
Imports System.Management

بعد میام یک متغیر رو از نوع String*می زارم و مقدار "SELECT * FROM Win32_service" رو بهش انتصاب می دم که همون کد های WQL هست که مثل همون کدهای SQLO هم میمونه 


کد:
Dim strLocal_service As String = "SELECT * FROM Win32_service"

حالا یک متغیر رو از نوع ManagementObjectSearcher می سازیم و مقدار "SELECT * FROM Win32_service" که داخل متغیر strLocal_service هست رو بهش انتصاب می دیم 

کد:
Dim sysservice_Searcher As New ManagementObjectSearcher(strLocal_service)

حالا باید نتیجه رو با استفاده از حلقه For each در داخل listview چاپ کنیم منتها باید از فرمان Get جهت شروع پرسوجو در متغیر استفاده کنیم 

کد:
dim i as interger
For Each servicelist As ManagementObject In sysservice_Searcher.Get()
    lvServices.Items.Add(servicelist("name").ToString)
      lvServices.Items(i).SubItems.Add((servicelist("State").ToString))
      i = i + 1

    Next servicelist

تو خط اول اومدم get زدم که پرسوجو شروع بشه و خطهای بعدی هم جهت اضافه کردن مقادیر در داخل listviewها هستش 

اگه توجه کنید من گفتم از متغیر Servicelist از Syntax با اسم Name*رو بیرون بکش و اضافه کن به داخل listbox ( خاصیت name اسم سرویس هاست )

و بعد از Stat استفاده کردم که وضعیت سرویس ها رو نشون میده 

در کلاس Win32_Service می تونید از مقادیر زیر هم استفاده کنید که دیگر ویژگی های مربوط به سرویس ها رو هم ببینید 


boolean AcceptPause
boolean AcceptStop
string Caption
uint32 CheckPoint
string CreationClassName
string De******ion
boolean DesktopInteract
string DisplayName
string ErrorControl
uint32 ExitCode
datetime InstallDate
string Name
string PathName
uint32 ProcessId
uint32 ServiceSpecificExitCode
string ServiceType
boolean Started
string StartMode
string StartName
string 
string Status
string SystemCreationClassName
string SystemName
uint32 TagId