-
شنبه, ۶ دی ۱۳۹۹، ۱۱:۱۳ ق.ظ
-
۵۸۵۴
چگونه با پایتون اسکریپت هایی طراحی کنیم که به محض روشن شدن کامپیوتر خودکار اجرا شوند ؟
درود به همه !
امروز در خدمت شما هستیم با یه آموزش باحال دیگه در زمینه امنیت با پایتون . در این پست روش هایی رو یادمیگیریم که به وسیله ی اونا میتونیم اسکریپت ها یا ویروس هایی بسازیم که به محض روشن شدن یک کامپیوتر در ویندوز به طور خودکار اجرا شوند . این اسکریپت ها میتوانند هم کاربرد خوب و هم کاربرد بد داشته باشند .بنابراین شما با یادگیری این پست ، روش مقابله با ویروس هایی که به طور خودکار پس از روشن شدن کامپیوتر اجرا میشوند را یاد میگرید . با ما همراه باشید .
خب باید بگم که تا وقتی که کامل درک نکردیم که قراره چیکار کنیم حق نداریم بریم سراغ اسکریپت نویسی :)))) . پس بیاین اول در مورد نحوه ی انجام اینکار توضیح بدیم .
با یه سوال شروع میکنیم : چگونه میشه کاری کرد که یک برنامه به طور خودکار در هنگام روشن شدن ویندوز اجرا شود ؟
جواب : برای اینکار روش های متعددی در طول زمان بوده و هست و خواهد بود . امروز دو مورد از معروف ترین و کاربردی ترین روش های اینکار رو برسی میکنیم .
روش اول - استفاده از پوشه STARTUP در ویندوز :
این روش یکی از معروف ترین و ساده ترین روش های انجام اینکاره . در سیستم عامل ویندوز پوشه ای به نام STARTUP وجود داره که وقتی ویندوز بالا میاد ، هرچی داخل این پوشه هست رو خودکار اجرا میکنه (دقیقا انگار روی همشون دابل کلیک میکنه تا باز بشن) . برای همین بعضی نرم افزارها مثل آنتی ویروس ها ، درایور ها ، دانلودر ها یا ... که نیاز دارن در هنگام روشن شدن ویندوز خودکار اجرا بشند خودشونو میزارن داخل این پوشه STARTUP . بنابراین وقتی ویندوز بالا میاد ، ویندوز اونارو خودکار اجرا میکنه .
حالا ما هم از همین الگو استفاده میکنیم . یعنی کافیه اسکریپتمون رو قرار بدیم داخل این پوشه ! اینطوری وقتی ویندوز بالا میاد اسکریپتمون به طور خودکار اجرا میشه .
در این مورد ما اسکریپتی مینویسیم که وقتی اجرا شد ، خودش یک نسخه از خودشو داخل پوشه STARTUP کپی کنه !
برای اینکه پوشه استارتاپ رو داخل ویندوز خودتون پیدا کنید ، کلید CTRL + R رو فشار بدید تا پنجره RUN باز بشه . سپس دستور shell:startup رو بنویسید و اینتر بزنید . شکل زیر :
پس از اینتر زدن میبینیم که پوشه ی استارتاپ با آدرس مشخص شده برامون باز میشه :
به طور کلی آدرس پوشه استارتاپ در ویندوز های جدید به صورت زیر است :
در اینجا ویندوز روی درایو C نصب شده بنابراین آدرس داخل درایور C هستش . به جای USERNAME هم باید یوزرنیم خودتون رو قرار بدید .
اما حالا بریم اسکریپت این روش رو بنویسیم . میخوایم اسکریپتی بنویسیم که به محض اجرا شدن ، خودشو کپی کنه داخل این پوشه .
سورس کد :
from getpass import getuser import os from winsound import Beep
username = getuser() # Get The Current Username startup = 'C:\\Users\\"{}"\\AppData\\Roaming\\Microsoft\\Windows\\"Start Menu"\\Programs\\Startup'.format(username)
os.system("copy {} {}".format(__file__ , startup)) # Copy This File To Startup Directory
Beep(1000,80) Beep(1500,80) Beep(2000,1000)
توضیح سورس : در خط اول تابع getuser رو از کلاس getpass ایمپورت کردیم . این تابع به ما یوزرنیم کاربری که در حال حاضر در ویندوز لاگین کرده رو برمیگردونه . برای فهمیدن مسیر startup به این یوزرنیم نیاز داریم .
خط بعد کتابخونه ی os رو ایمپورت کردیم . و سپس از کتابخونه ی winsound تابع beep رو ایمپورت کردیم . این تابع برای بوق زدنه :)))) . به طور فنی تر باید بگم میتونه یه فرکانس صدایی دلخواه رو با بلندگو کامپیوترمون ایجاد کنه ولی من میگم بوق میزنه :)
در خط بعد متغییر username رو تعریف کردیم و مقدار خروجی تابع getuser که یوزرنیم کاربر رو برمیگردونه رو ریختیم داخلش .
سپس متغییر startup رو تعریف کردیم و داخل اون مسیر پوشه startup رو ذخیره کردیم .
در خط بعد با استفاده از تابع os.system اومدیم یک دستوری رو در خط فرمان اجرا کردیم که باعث میشه این اسکریپت کپی بشه داخل پوشه استارتاپ . توجه کنید متغییر __file__ که به طور پیشفرض در هر اسکریپت پایتونی تعریف شده ، حاوی آدرس همین اسکریپتی که اجرا شده است .
بعد از اون هم با استفاده از سه دستور beep پشت سر هم ، سه تا بوق زدیم (اگه بلندگو سیستمتون وصل باشه صداشو میشنوید) .
حالا کافیه یه بار این اسکریپت رو اجرا کنید . اتفاقی که میافته اینه که خودشو کپی میکنه داخل پوشه استارتاپ و سپس سه تا بوق میزنه . از این به بعد چون اسکریپت داخل پوشه استارتاپ وجود داره ، هروقت که سیستمتون بالا میاد این اسکریپت اجرا میشه و سه تا بوق براتون میزنه :)) .
این از روش اول اجرای اسکریپت به طور خودکار در زمان روشن شدن کامپیوتر . بریم سراغ روش دوم
روش دوم - استفاده از رجیستری ویندوز برای اجرای خودکار برنامه ها در هنگام روشن شدن ویندوز :
در این روش نیز ما کاری میکنیم که اسکریپتمون به محض روشن شدن ویندوز اجرا بشه ولی خوبی روش دوم نسبت به روش اول این است که اسکریپت با سطح دسترسی administrator اجرا خواهد شد .
نکته : برای یادگیری بهتر این روش بهتره که با رجیستری ویندوز آشنایی کلی داشته باشید .
در روش دوم ما از رجیستری ویندوز استفاده میکنیم . اما رجیستری در ویندوز چیست ؟ رجیستری در اصل یکی از مهمترین بخش های ویندوز است . رجیستری مانند پایگاه داده ی کل سیستم عامل میماند . تمامی تنظیمات و کانفیگ های مربوط به خود سیستم عامل و نرم افزار ها داخل رجیستری ویندوز ذخیره میشوند.
هر تنظیمی که در ویندوز میبینید داخل رجیستری کانفیگ و ذخیره شده است . از پسوورد های کاربری گرفته تا ........ همه و همه .
اگر با رجیستری آشنا باشید بهتر میتوانید روش دوم را استفاده کنید . همانطور که احتمالا میدونید رجیستری ویندوز بر اساس معماری (key/value) کار میکند . یعنی میتوان گفت رجیستری پر از کلید هایی است که هر کلید یک مقدار دارد . مسیری داخل رجیستری ویندوز وجود دارد که آدرس هر فایلی که داخل آن نوشته شده باشد ، ویندوز آن فایل را به محض بوت و لاگین شدن اجرا میکند . پس ما کافیه که آدرس اسکریپتمون رو بنویسیم داخل این مسیر در رجیستری ویندوز تا به محض اجرا روشن شدن کامپیوتر و بالا آمدن ویندوز اجرا بشه .
مسیری که گفتم HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run هستش . داخل این مسیر در رجیستری هر کلیدی که اضافه کنیم و آدرس فایلی را در مقدار آن کلید بنویسیم ، آن فایل در زمان روشن شدن ویندوز با دسترسی administrator اجرا خواهد شد .
بنابراین دیگه میدونیم میخوایم چیکار کنیم . اسکریپت ما قراره که آدرس خودش رو بنویسه داخل مسیری که گفتیم در رجیستری .
سورس :
from winsound import Beep import winreg as reg
def addToReg(): # For add Script Address To Registry key = reg.OpenKey(reg.HKEY_CURRENT_USER , "Software\Microsoft\Windows\CurrentVersion\Run" ,0 , reg.KEY_ALL_ACCESS) # Open The Key reg.SetValueEx(key ,"any_name" , 0 , reg.REG_SZ , __file__) # Appending Script Address reg.CloseKey(key) # Close The Key
addToReg()
Beep(1000,80) Beep(1500,80) Beep(2000,1000)
توضیح سورس کد : در دو خط اول کتابخونه های مورد نیاز رو ایمپورت کردیم .کتابخونه winreg رو برای کار با رجیستری استفاده میکنیم .
اگه دقت کنید اول کار یه تابع تعریف کردیم به نام addToReg . درواقع کار این تابع اینه که آدرس این اسکریپت ما رو به مسیر داخل رجیستری که معرفی کردیم اضافه کنه .
در خط اول این تابع در ابتدا کلید مورد نیاز رو در رجیستری (همون مسیری داخل رجیستری که قراره تغییرش بدیم) باز کردیم و ریختیم داخل شیء key . سپس در خط بعد با استفاده از کتابخونه ی winreg و متود setValueEx اومدیم یک مقدار به این کلیدی که باز کردیم اضافه کردیم و این مقدار برابر با همون آدرس فایلی هست که میخوایم خودکار اجرا بشه (فایل اسکریپتمون) . به جای any_name هر اسمی میتونید بزارید .
در خط بعد هم کلیدی که باز کرده بودیم رو بستیم .
همین !
بعد از تعریف تابع اونو فراخونی کردیم . با فراخونی تابع ، مسیر اسکریپت به رجیستری اضافه میشه و درنتیجه این اسکریپت در هر بار اجرای ویندوز باز میشه و مثل قبل سه تا بوق آخرش میزنه .
اگه بعد از اجرای اسکریپت ، وارد ابزار regedit بشیم و بریم به مسیر HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run ، میبینیم که آدرس اسکریپت ما به درستی اضافه شده به رجیستری . شکل زیر :
خب اینم از دو روشی که گفتیم . روش اول دردسر کمتری داره نسبت به روش دوم چون در روش دوم باید رجیستری یکم بدونید و درگیرش بشید .
امیدوارم که لذت برده باشید . سوالی بود مطرح کنید .
یا حق !
Telegram Channel : @mrpythonblog