وبلاگ فربد | Farbod Blog

توی این وبلاگ راجع به پروژه هام صحبت می کنم

چگونه در پایتون اسکریپتی بنویسیم که بصورت خودکار با بالا اومدن سیستم اجرا بشه؟

  • ۱۳۰۷

سلام دوستان :)

 

امروز میخوایم با هم یک آموزش باحال دیگه در زمینه امنیت توی پایتون رو ببینیم

 

توی این آموزش قراره با هم اسکریپتی طراحی کنیم که به محض روشن شدن سیستم اجرا بشه

خب برای این کار دو تا روش کلی وجود داره

 

روش اول - کپی کردن اسکریپت در استارتاپ ویندوز:

 

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

اما استارتاپ ویندوز کجاست ؟

کلید windows + r رو بزنید تا پنجره Run براتون باز بشه بعدش اونجا تایپ کنید shell:startup (تصویر زیر)

 

 

بعد از اینتر زدن براتون یک پنجره باز میشه که اون پوشه رو با مسیر مشخص باز کرده

 

به طور کلی مسیر پوشه استارتاپ ویندوز های جدید به صورت زیر هست:

 

C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

خب حالا بریم اسکریپت این روش رو بنویسیم. میخوایم اسکریپتی بنویسیم که به محض اجرا شدن خودش رو کپی کنه توی این مسیر

 

سورس کد:

 

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 ایمپورت کردیم. این تابع به ما یوزرم کاربری که در حال حاضر توی ویندوز لاگین کرده رو به ما بر میگردونه. برای فهمیدن مسیر استارتاپ به این یوزرنیم نیاز داریم.

 

خط بعد کتابخونه ی os رو ایمپورت کردیم . و سپس از کتابخونه ی winsound تابع beep رو ایمپورت کردیم . این تابع برای بوق زدنه :)))) . به طور فنی تر باید بگم میتونه یه فرکانس صدایی دلخواه رو با بلندگو کامپیوترمون ایجاد کنه ولی من میگم بوق میزنه :)

 

توی خط بعد متغیر username رو تعریف کردیم و مقدار خروجی تابع getuser رو داخلش ریختیم.

 

بعدش متغیر startup رو تعریف کردیم و مسیر پوشه استارتاپ رو داخلش قرار دادیم.

 

در خط بعد با استفاده از تابع os.system اومدیم یک دستوری رو در خط فرمان اجرا کردیم که باعث میشه این اسکریپت کپی بشه داخل پوشه استارتاپ . دقت کنین که متغییر __file__ که به طور پیشفرض در هر اسکریپت پایتونی تعریف شده ، توش آدرس همین اسکریپتی که اجرا شده است .

 

حالا کافیه یه بار این اسکریپت رو اجرا کنید . اتفاقی که میافته اینه که خودشو کپی میکنه داخل پوشه استارتاپ و سپس سه تا بوق میزنه . از این به بعد چون اسکریپت داخل پوشه استارتاپ وجود داره ، هروقت که سیستمتون بالا میاد این اسکریپت اجرا میشه و سه تا بوق براتون میزنه :)) .

 

خب این از روش اول حالا بریم سراغ روش دوم

 

روش دوم - استفاده از رجیستری ویندوز برای اجرای خودکار برنامه ها در زمان روشن شدن ویندوز : 

 

در این روش نیز ما کاری میکنیم که اسکریپتمون به محض روشن شدن ویندوز اجرا بشه ولی خوبی روش دوم نسبت به روش اول این است که اسکریپت با سطح دسترسی 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)

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

 

اول کار یک تابع تعریف کردیم به نام addToReg که کار این تابع اینه که آدرس اسکریپت ما رو به مسیر داخل رجیستری که معرفی کردم اضافه کنه .

 

توی خط اول این تابع در ابتدا کلید مورد نیاز رو در رجیستری (همون مسیری داخل رجیستری که قراره تغییرش بدیم) باز کردیم و ریختیم داخل شیء key . بعدش در خط بعد با استفاده از کتابخونه ی winreg و متود setValueEx اومدیم یک مقدار به این کلیدی که باز کردیم اضافه کردیم و این مقدار برابر با همون آدرس فایلی هست که میخوایم خودکار اجرا بشه (فایل اسکریپتمون) . به جای any_name هر اسمی میتونید بزارید .

 

در خط بعدی هم کلیدی که باز کرده بودیم رو بستیم.

 

همین D:

 

بعد از تعریف تابع اونو فراخوانی کردیم. با فراخوانی تابع مسیر اسکریپت به رجیستری اضافه میشه و در نتیجه این اسکریپت در هر بار احرای ویندوز باز میشه و مثل قبل سه با بوق آخرش میزنه.

 

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

 

امیدوارم براتون مفید بوده باشه D:

 


  • بهتون تبریک میگم،من تازه با وبلاگتون آشنا شدم مطالب وبلاگتون بسیار عالی و کاربردی هستش
    موفق باشید
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی