چگونه با پایتون اسکریپت هایی طراحی کنیم که به محض روشن شدن کامپیوتر خودکار اجرا شوند ؟ :: Mr Python | مستر پایتون

چگونه با پایتون اسکریپت هایی طراحی کنیم که به محض روشن شدن کامپیوتر خودکار اجرا شوند ؟

  • ۵۲۸۰

چگونه با پایتون اسکریپت هایی طراحی کنیم که به محض روشن شدن کامپیوتر خودکار اجرا شوند ؟

درود به همه !

 

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

خب باید بگم که تا وقتی که کامل درک نکردیم که قراره چیکار کنیم حق نداریم بریم سراغ اسکریپت نویسی :)))) . پس بیاین اول در مورد نحوه ی انجام اینکار توضیح بدیم . 

 

با یه سوال شروع میکنیم : چگونه میشه کاری کرد که یک برنامه به طور خودکار در هنگام روشن شدن ویندوز اجرا شود ؟ 

جواب : برای اینکار روش های متعددی در طول زمان بوده و هست و خواهد بود . امروز دو مورد از معروف ترین و کاربردی ترین روش های اینکار رو برسی میکنیم .

 

روش اول - استفاده از پوشه STARTUP در ویندوز : 

این روش یکی از معروف ترین و ساده ترین روش های انجام اینکاره . در سیستم عامل ویندوز پوشه ای به نام STARTUP وجود داره که وقتی ویندوز بالا میاد ، هرچی داخل این پوشه هست رو خودکار اجرا میکنه (دقیقا انگار روی همشون دابل کلیک میکنه تا باز بشن) . برای همین بعضی نرم افزارها مثل آنتی ویروس ها ، درایور ها ، دانلودر ها یا ... که نیاز دارن در هنگام روشن شدن ویندوز خودکار اجرا بشند خودشونو میزارن داخل این پوشه STARTUP . بنابراین وقتی ویندوز بالا میاد ، ویندوز اونارو خودکار اجرا میکنه . 

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

در این مورد ما اسکریپتی مینویسیم که وقتی اجرا شد ، خودش یک نسخه از خودشو داخل پوشه STARTUP کپی کنه !

 

برای اینکه پوشه استارتاپ رو داخل ویندوز خودتون پیدا کنید ، کلید CTRL + R رو فشار بدید تا پنجره RUN باز بشه . سپس دستور shell:startup رو بنویسید و اینتر بزنید . شکل زیر :

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

 

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

C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\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

  • Everything is very open with a precise clarification of the issues.
    It was really informative. Your website is useful. Many thanks for sharing!
    پاسخ:
    خواهش میکنم عزیز حالا چرا انگلیسی :)
  • سلام

    عالی و بی نظیر

    دمت گرم

    پاسخ:
    سلام و درود .

    ممنون که دنبال میکنید :)
    خواهش میکنم
  • سلام

    دمت گرم خیلی خوب بود.

    شما بمب اطلاعات هستید.

    چیزی که از ذهن آدم هم نمی گذره رو هم شما بلدید.

    خدا حفظتان کند.

     

    یه سوال:

    چطور میشه یه فایل پایتون رو روی فلش ریخت بطوری که بعد از اتصال فلش فایل اجرا بشه؟

     

    با تشکر

    خدا همیشه پشت و پناهت باشه.

    پاسخ:
    سلام و درود .
    از لطف شماس :) ممنون بابت اینکه کارای مارو دنبال میکنید. 


    ببینید یه سخت افزاری هایی (در قالب فلش مموری) هست که بهش میگن rubber ducky . اینا دقیقا همین چیزی هستند که میگید . یعنی وقتی وصلشون میکنیم به سیستم خودکار یه کد دلخواه رو اجرا میکنن . در ویندوزای قدیمی میشد با ساختن یه فایل autorun.inf روی فلش مموری اینکارو کرد ولی الان دیگه نمیشه چون قابلیت autorun ویندوز به صورت پیشفرض غیر فعاله . به جاش الان از روش HID استفاده میکنند . یعنی میان با استفاده از برد هایی مثل برد های arduino مثلا یه سخت افزاری درست میکنن که خودشو جای کیبورد جا میزنه . بعد دستورات هکر رو از طریق ارسال کلید های کیبورد به سیستم اجرا میکنه . مثلا تنظیمش میکنن تا وصل شد کلید WIN + R رو بزنه تا پنجره run باز بشه . بعد تایپ کنه cmd و اینتر بزنه . بعد یه کد مخرب تو cmd بنویسه و دوباره اینتر بزنه . اینکارو خیلی سریع انجام میده 
  • سلام داداش خوبی؟ 
     میگم من برنامه رو نوشتم اوکی بود ولی وقتی به فایل اجرای (exe) تبدیل میکنم دیگه کار نمیکنه  مشکل چیه

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

     

    آقا دمت گرم خیلی گلی 

    فقط اینکه چرا دستور copy تو cmd کار نمیکنه و ارور میده همش دقیقا همه مدلشم تست کردم 

     

    error: The system cannot find the file specified

     

     

    copy C:\Users\Khane Digital\OneDrive\Desktop F:\

    پاسخ:
    درود بر شما . 
    ممنونم :)
    اونجایی که متغییر srartup رو تعریف کردید رو دقت کنید . احتمالا دور username تون دابل کوتیشن (") نذاشتید . چون یوزرنیم شما یه space بینش داره . بنابراین مثل سورسی که داخل پست نوشتیم حتما دور username دابل کوتیشن بزارید تا اگه space داره مشکلی پیش نیاد .
  • با سلام این کتابخانه در درسترس نیستند چیکار کنیم ؟!

    پاسخ:
    درود بر شما . کتابخونه هایی که در این پست استفاده شده همه به صورت پیشفرض روی پایتون نصب هستند !
    آیا با اروری مواجه میشید ؟ لطفا متن ارور رو بفرستید 
  • سلام

    من هر دو روش را امتحان کردم هیچ کدام اجرا نشد!

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

    ببخشید به جز صدای بوق دیگه چجور صداهایی هست میشه یه جوری تو ضیح بدید بفهمم

    ممنون

    پاسخ:
    سلام
    تابع beep کارش اینه که یک روی بلندگو یک فرکانس صدایی خاص رو اجرا کنه (مثلا ۲ کیلوهرتز) .
    اگه میخواین یک آهنگ یا صدایی خاص پخش بشه باید از کتابخونه هایی مثل winsound  کمک بگیرید که حتی میتونید باهاشون صدا های خود ویندوز رو هم پخش کنید (مثل صدای روشن یا خاموش شدن ویندوزتون)
  • سلام مهندس

    آقا درود بر تو

    ما هر بار که میام تو وبلاگت یه چیز جدید و خفن ناک یاد میگیریم. مرسی که هستی.

    پاسخ:
    درود :)
    قربان شما . سلامت باشید . 
    خداروشکر .
  • مسیر هر استارت اپ توی هر کامپیوتر متفاوته چجوری با پایتون مسیر هر کدومشون رو پیدا کنم؟

    پاسخ:
    اینطوری نیست که داخل هر کامپیوتر متفاوت باشه . داخل بعضی ورژن های ویندوز متفاوته . که میتونین با یه if چک کنین ویندوز طرف چی هست و بعد با توجه به ورژن ویندوز متغییر حاوی مسیر استارتاپ رو تعریف کنید . مسیر استارتاپ در هر کدوم از ورژن های ویندوز روی اینترنت موجوده میتونید در گوگل پیداش کنید .
  • سلام به مستر پایتون عزیز !

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

    2. دیدی تو ++C یسری کد هست مثل n\ , \r و امثال اینا ( البته تو متن درست در نیومدن) ، می خواستم بپرسم قضیه اینا تو python چجوریه ؟ من تو پایتون فقط با n\ آشنایی دارم.

    پاسخ:
    سلام . ممنون که گفتین صفحه ایجاد شد : https://mrpython.blog.ir/page/ask

    به این کاراکتر های (escape characters) میگن که در اصل یه جور کاراکترای ویژه به حساب میان . 


    در لینک بالا میتونید در مورد این کاراکتر ها در پایتون بخونید
  • عالی بودددددددددددددددددددددددد😍😍😍😍😍😍🤩🤩🤩🤩🤩

    پاسخ:
    ممنونم :))
  • عالی 

    چرا   Start Menu در مسیر استارتاپ رو باید داخل دبل کوتیشن گذاشت؟ 

    پاسخ:
    درود :)
    ببینید کلمه ی start menu بینش یه فاصله وجود داره . اگه داخل دبل کوتیشن نزاریمش cmd اون رو دوتا دستور جدا یا بهتره بگم دوتا آرگومان جدا در نظر میگیره و تداخل و مشکل بوجود میاد :)
  • سلام مستر عزیز

    این لیست کل ریجیستری کلید های استارتاپ ویندوزه :
    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
    [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit]

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices]
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
    [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows]

    پاسخ:
    سلام اتریب جان .
    مچکرم که گفتی :)
  • سلام دمت گرم مثل بقیه پست هات خیییییلی عالیییی بود 

    فقط یه چیزی، نمیشه کد مورد نظرمون رو بنویسیم و به صورت دستی توی پوشه کپی کنیم؟؟

     

    پاسخ:
    سلام و درود . ممنونم و خواهش میکنم :)
    بله چرا که نه . نه تنها کد هاتون بلکه هر چیزی (برنامه ، فیلم و ....) رو میتونید کپی کنید داخل پوشه startup و بعد از روشن شدن کامپیوتر شاهد اجرا شدنش باشید :)
  • آموزش خیلی خوبی بود ، دو تا سوال کوتاه دارم اگه میشه همینجا جواب بدید . من با tkinter یه نرم افزار ساختم چیکار کنم که یه دکمه بسازم که به کلیک کردن اون یه url خاص باز شه ؟

    2 هم اینکه چیکار کنم که یه مقدار str بعد از کلیک روی دکمه بجای کنسول تو یک لیبل چاپ بشه ؟


    خیلی ممنون مستر

    پاسخ:
    سلام . خواهش میکنم

    جواب هر دو سوال شما در غالب دو سورس جدا به ایمیلتون ارسال شد .
  • در اکثر سیستم های گرافیکی لینوکس هم میتونید از این آدرس استفاده کنید:

    /home/$USER/.config/autostart/

     

    پاسخ:
    سلام :)

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