وبلاگ
پایتون در امنیت سایبری: پروژههای کشف آسیبپذیری و دفاع
فهرست مطالب
“تسلط به برنامهنویسی پایتون با هوش مصنوعی: آموزش کدنویسی هوشمند با ChatGPT”
"تسلط به برنامهنویسی پایتون با هوش مصنوعی: آموزش کدنویسی هوشمند با ChatGPT"
"با شرکت در این دوره جامع و کاربردی، به راحتی مهارتهای برنامهنویسی پایتون را از سطح مبتدی تا پیشرفته با کمک هوش مصنوعی ChatGPT بیاموزید. این دوره، با بیش از 6 ساعت محتوای آموزشی، شما را قادر میسازد تا به سرعت الگوریتمهای پیچیده را درک کرده و اپلیکیشنهای هوشمند ایجاد کنید. مناسب برای تمامی سطوح با زیرنویس فارسی حرفهای و امکان دانلود و تماشای آنلاین."
ویژگیهای کلیدی:
بدون نیاز به تجربه قبلی برنامهنویسی
زیرنویس فارسی با ترجمه حرفهای
۳۰ ٪ تخفیف ویژه برای دانشجویان و دانش آموزان
0 تا 100 عطرسازی + (30 فرمولاسیون اختصاصی حامی صنعت)
دوره آموزش Flutter و برنامه نویسی Dart [پروژه محور]
دوره جامع آموزش برنامهنویسی پایتون + هک اخلاقی [با همکاری شاهک]
دوره جامع آموزش فرمولاسیون لوازم آرایشی
دوره جامع علم داده، یادگیری ماشین، یادگیری عمیق و NLP
دوره فوق فشرده مکالمه زبان انگلیسی (ویژه بزرگسالان)
شمع سازی و عودسازی با محوریت رایحه درمانی
صابون سازی (دستساز و صنعتی)
صفر تا صد طراحی دارو
متخصص طب سنتی و گیاهان دارویی
متخصص کنترل کیفی شرکت دارویی
“`html
پایتون در امنیت سایبری: پروژههای کشف آسیبپذیری و دفاع
در دنیای دیجیتال امروز، امنیت سایبری به یک نگرانی حیاتی برای سازمانها و افراد تبدیل شده است. با افزایش روزافزون تهدیدات سایبری، نیاز به متخصصان امنیت سایبری که بتوانند از شبکهها و سیستمها در برابر حملات مخرب محافظت کنند، بیش از پیش احساس میشود. پایتون، به عنوان یک زبان برنامهنویسی قدرتمند و انعطافپذیر، به ابزاری ضروری برای متخصصان امنیت سایبری تبدیل شده است. این زبان به دلیل سهولت استفاده، کتابخانههای گسترده و جامعه فعال، برای توسعه ابزارها و اسکریپتهای امنیتی، تجزیه و تحلیل دادهها و اتوماسیون وظایف امنیتی بسیار مناسب است.
این مقاله به بررسی نقش پایتون در امنیت سایبری، به ویژه در زمینه کشف آسیبپذیری و دفاع میپردازد. ما پروژههای عملی مختلفی را بررسی خواهیم کرد که نشان میدهند چگونه میتوان از پایتون برای شناسایی و رفع آسیبپذیریها، تجزیه و تحلیل ترافیک شبکه و ایجاد سیستمهای تشخیص نفوذ (IDS) استفاده کرد. هدف ما ارائه یک راهنمای جامع برای متخصصان امنیت سایبری و توسعهدهندگانی است که میخواهند از پایتون برای بهبود امنیت سیستمهای خود استفاده کنند.
چرا پایتون در امنیت سایبری محبوب است؟
محبوبیت پایتون در امنیت سایبری به عوامل متعددی برمیگردد:
- سهولت استفاده: پایتون یک زبان برنامهنویسی سطح بالا با سینتکس ساده و خوانا است که یادگیری و استفاده از آن را آسان میکند.
- کتابخانههای گسترده: پایتون دارای کتابخانههای قدرتمند و متنوعی است که برای انجام وظایف مختلف امنیتی طراحی شدهاند، از جمله اسکن شبکه، تجزیه و تحلیل بستهها، رمزنگاری و غیره.
- جامعه فعال: پایتون دارای یک جامعه بزرگ و فعال از توسعهدهندگان است که به طور مداوم کتابخانهها و ابزارهای جدیدی را برای امنیت سایبری ایجاد و به اشتراک میگذارند.
- قابلیت اتوماسیون: پایتون به خوبی از اتوماسیون پشتیبانی میکند، که برای خودکارسازی وظایف تکراری و وقتگیر در امنیت سایبری بسیار مفید است.
- سازگاری با سیستم عاملهای مختلف: پایتون بر روی سیستم عاملهای مختلفی مانند ویندوز، لینوکس و macOS قابل اجرا است، که آن را به یک ابزار انعطافپذیر برای امنیت سایبری تبدیل میکند.
کتابخانههای کلیدی پایتون برای امنیت سایبری
پایتون دارای کتابخانههای متعددی است که برای انجام وظایف مختلف امنیتی طراحی شدهاند. در اینجا به برخی از مهمترین این کتابخانهها اشاره میکنیم:
- Scapy: یک کتابخانه قدرتمند برای دستکاری و تجزیه و تحلیل بستههای شبکه. از Scapy میتوان برای اسکن پورتها، جعل آدرس IP، انجام حملات Man-in-the-Middle و موارد دیگر استفاده کرد.
- Nmap: اگرچه Nmap یک ابزار خط فرمان است، اما یک کتابخانه پایتون به نام
python-nmap
وجود دارد که به شما امکان میدهد از قابلیتهای Nmap در اسکریپتهای پایتون خود استفاده کنید. از Nmap میتوان برای کشف میزبانها و سرویسها در یک شبکه، شناسایی سیستم عاملها و آسیبپذیریها استفاده کرد. - Requests: یک کتابخانه ساده و قدرتمند برای ارسال درخواستهای HTTP. از Requests میتوان برای تعامل با APIها، واکشی دادهها از وبسایتها و انجام تستهای امنیتی وب استفاده کرد.
- Beautiful Soup: یک کتابخانه برای تجزیه و تحلیل اسناد HTML و XML. از Beautiful Soup میتوان برای استخراج دادهها از وبسایتها، شناسایی لینکهای مخرب و انجام تستهای امنیتی وب استفاده کرد.
- PyCrypto/Cryptography: کتابخانههایی برای انجام عملیات رمزنگاری مانند رمزگذاری، رمزگشایی، تولید کلید و ایجاد امضای دیجیتال.
- OWASP ZAP API: کتابخانهای برای تعامل با OWASP ZAP، یک ابزار اسکن آسیبپذیری وب.
- Volatility: یک چارچوب برای تجزیه و تحلیل حافظه RAM. از Volatility میتوان برای استخراج اطلاعات از فایلهای dump حافظه، شناسایی بدافزارها و انجام تحقیقات جرمشناسی دیجیتال استفاده کرد.
- Yara: یک ابزار برای شناسایی و طبقهبندی بدافزارها بر اساس الگوهای متنی یا باینری.
پروژههای عملی با پایتون در کشف آسیبپذیری
در این بخش، به بررسی پروژههای عملی مختلفی میپردازیم که نشان میدهند چگونه میتوان از پایتون برای کشف آسیبپذیریها استفاده کرد.
1. اسکنر پورت با Scapy
اسکن پورت یکی از اولین گامها در ارزیابی امنیت یک سیستم یا شبکه است. با استفاده از Scapy، میتوان یک اسکنر پورت ساده اما کارآمد ایجاد کرد.
#!/usr/bin/env python
import scapy.all as scapy
def scan(ip):
arp_request = scapy.ARP(pdst=ip)
broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
arp_request_broadcast = broadcast/arp_request
answered_list = scapy.srp(arp_request_broadcast, timeout=1, verbose=False)[0]
clients_list = []
for element in answered_list:
client_dict = {"ip": element[1].psrc, "mac": element[1].hwsrc}
clients_list.append(client_dict)
return clients_list
def print_result(results_list):
print("IP\t\t\tMAC Address\n-----------------------------------------")
for client in results_list:
print(client["ip"] + "\t\t" + client["mac"])
scan_result = scan("192.168.1.1/24")
print_result(scan_result)
این اسکریپت از پروتکل ARP برای کشف میزبانهای فعال در یک شبکه استفاده میکند. این یک مثال ساده است و میتوان آن را با افزودن قابلیتهای بیشتر مانند اسکن پورتهای TCP/UDP، شناسایی سرویسها و غیره بهبود بخشید.
2. اسکنر آسیبپذیری وب با Requests و Beautiful Soup
برای شناسایی آسیبپذیریهای وب، میتوان از Requests برای ارسال درخواستهای HTTP و از Beautiful Soup برای تجزیه و تحلیل پاسخها استفاده کرد. به عنوان مثال، میتوان یک اسکریپت برای شناسایی فرمهای ورود به سیستم ناامن ایجاد کرد.
import requests
from bs4 import BeautifulSoup
def find_login_forms(url):
try:
response = requests.get(url)
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
except requests.exceptions.RequestException as e:
print(f"Error fetching URL: {e}")
return []
soup = BeautifulSoup(response.content, 'html.parser')
login_forms = []
for form in soup.find_all('form'):
# Check if the form has input fields for username and password
username_field = form.find('input', {'name': 'username'}) or form.find('input', {'name': 'user'}) or form.find('input', {'name': 'login'})
password_field = form.find('input', {'name': 'password'}) or form.find('input', {'type': 'password'})
if username_field and password_field:
login_forms.append(form)
return login_forms
def analyze_form(form):
method = form.get('method', 'GET').upper()
action = form.get('action', '')
is_https = action.startswith('https')
print(f" Form Action: {action}")
print(f" Method: {method}")
print(f" Using HTTPS: {is_https}")
if not is_https:
print(" WARNING: Form is not using HTTPS. Credentials may be transmitted in plaintext.")
# Example Usage
url = "http://testphp.vulnweb.com/login.php" # Replace with the target URL
login_forms = find_login_forms(url)
if login_forms:
print(f"Found {len(login_forms)} login form(s).")
for i, form in enumerate(login_forms):
print(f"\nAnalyzing form #{i+1}:")
analyze_form(form)
else:
print("No login forms found on the page.")
این اسکریپت URL داده شده را واکشی می کند، HTML را تجزیه می کند و فرم های ورود به سیستم را بر اساس وجود فیلدهای کاربری و رمز عبور شناسایی می کند. سپس متد فرم (GET/POST)، اکشن و استفاده از HTTPS را تجزیه و تحلیل می کند و هشدارهایی را در مورد فرم هایی که از HTTPS استفاده نمی کنند، نشان می دهد. این یک مثال ابتدایی است، و اسکن آسیب پذیری کامل شامل بررسی آسیب پذیری های متعدد مانند XSS، CSRF و SQL Injection است. همچنین به تست برای آسیب پذیری ها مانند Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF), و SQL Injection نیاز است.
3. تجزیه و تحلیل ترافیک شبکه با Scapy
Scapy میتواند برای تجزیه و تحلیل ترافیک شبکه و شناسایی الگوهای غیرعادی استفاده شود. به عنوان مثال، میتوان یک اسکریپت برای شناسایی حملات DDoS ایجاد کرد.
from scapy.all import *
import time
def detect_ddos(packets):
ip_counts = {}
threshold = 100 # Adjust this threshold as needed
suspicious_ips = []
for packet in packets:
if IP in packet:
src_ip = packet[IP].src
if src_ip in ip_counts:
ip_counts[src_ip] += 1
else:
ip_counts[src_ip] = 1
for ip, count in ip_counts.items():
if count > threshold:
suspicious_ips.append((ip, count))
return suspicious_ips
def packet_callback(packet):
# You can add more sophisticated analysis here.
print(packet.summary())
# Capture packets for a specific duration
packets = sniff(filter="ip", prn=packet_callback, timeout=60)
# Analyze the captured packets
suspicious_ips = detect_ddos(packets)
if suspicious_ips:
print("\nPossible DDoS attack detected!")
for ip, count in suspicious_ips:
print(f"IP: {ip}, Packet Count: {count}")
else:
print("\nNo DDoS attack detected.")
این کد بستههای شبکه را شنود میکند، تعداد بستهها را بر اساس آدرس IP مبدا جمعآوری میکند و آدرسهای IP با تعداد بستههای بیشتر از یک آستانه معین را به عنوان مظنون به حمله DDoS شناسایی میکند. توجه داشته باشید که این یک مثال ساده است و برای تشخیص دقیق DDoS به تجزیه و تحلیل و تنظیم دقیقتری نیاز است.
4. ایجاد یک سیستم تشخیص نفوذ (IDS) ساده
با استفاده از Scapy و سایر کتابخانههای پایتون، میتوان یک سیستم تشخیص نفوذ (IDS) ساده ایجاد کرد که ترافیک شبکه را برای شناسایی الگوهای مخرب نظارت میکند. به عنوان مثال، میتوان یک IDS برای شناسایی حملات SQL Injection ایجاد کرد.
from scapy.all import *
import re
def detect_sql_injection(packet):
if packet.haslayer(Raw):
payload = packet[Raw].load.decode('utf-8', errors='ignore')
# Simple SQL injection pattern matching
sql_injection_patterns = [
r"(select\s+\*\s+from\s+\w+)",
r"(union\s+select)",
r"(;\s*--)",
r"(drop\s+table)",
r"(insert\s+into\s+\w+\s+values)",
]
for pattern in sql_injection_patterns:
if re.search(pattern, payload, re.IGNORECASE):
print(f"Possible SQL injection attack detected! Pattern: {pattern}")
print(f"Source IP: {packet[IP].src}")
print(f"Destination IP: {packet[IP].dst}")
print(f"Payload: {payload}")
return True
return False
def packet_callback(packet):
detect_sql_injection(packet)
# Sniff network traffic and apply the filter
sniff(filter="tcp port 80 or tcp port 443", prn=packet_callback, store=0)
این کد ترافیک شبکه را برای بستههای TCP در پورتهای 80 (HTTP) و 443 (HTTPS) شنود میکند. سپس بار (payload) بسته را استخراج میکند و آن را با الگوهای SQL Injection رایج مطابقت میدهد. اگر یک الگو مطابقت داشته باشد، یک هشدار چاپ میکند. این یک IDS ساده است و میتواند با افزودن قوانین و الگوهای بیشتر، تجزیه و تحلیل رفتاری و مکانیسمهای پاسخ، بهبود یابد.
5. بررسی فایلهای Log با پایتون
بررسی فایلهای Log یکی از مهمترین کارها برای شناسایی فعالیتهای مشکوک و بررسی حملات است. پایتون میتواند برای خودکارسازی این فرآیند و استخراج اطلاعات مفید از فایلهای Log استفاده شود.
import re
def analyze_log_file(log_file_path, error_patterns):
"""
Analyzes a log file for specific error patterns and reports the occurrences.
Args:
log_file_path (str): The path to the log file.
error_patterns (list): A list of regular expression patterns to search for.
Returns:
dict: A dictionary containing the counts of each error pattern found in the log file.
"""
error_counts = {}
for pattern in error_patterns:
error_counts[pattern] = 0
try:
with open(log_file_path, 'r') as log_file:
for line in log_file:
for pattern in error_patterns:
if re.search(pattern, line, re.IGNORECASE):
error_counts[pattern] += 1
except FileNotFoundError:
print(f"Error: Log file not found at {log_file_path}")
return None
return error_counts
def main():
log_file_path = 'sample.log' # Replace with your log file path
error_patterns = [
r'error',
r'failed login',
r'exception',
r'unauthorized access'
]
results = analyze_log_file(log_file_path, error_patterns)
if results:
print("Log Analysis Results:")
for pattern, count in results.items():
print(f"Pattern '{pattern}': {count} occurrences")
if __name__ == "__main__":
# Create a dummy log file for testing
with open('sample.log', 'w') as f:
f.write("2024-10-27 10:00:00 INFO: Application started\n")
f.write("2024-10-27 10:00:05 ERROR: File not found\n")
f.write("2024-10-27 10:00:10 WARNING: Unauthorized access attempt\n")
f.write("2024-10-27 10:00:15 INFO: User logged in successfully\n")
f.write("2024-10-27 10:00:20 ERROR: Connection timed out\n")
f.write("2024-10-27 10:00:25 INFO: Application shutting down\n")
main()
این کد یک فایل Log را باز میکند، خط به خط آن را میخواند و به دنبال الگوهای مشخصی میگردد. سپس تعداد دفعاتی که هر الگو در فایل Log ظاهر شده است را گزارش میکند. این یک مثال ساده است و میتوان آن را با افزودن قابلیتهای بیشتر مانند تجزیه و تحلیل الگوهای زمانی، ایجاد هشدار و گزارشدهی بهبود بخشید.
6. خودکارسازی تست نفوذ با پایتون
پایتون میتواند برای خودکارسازی تست نفوذ و کاهش زمان و تلاش مورد نیاز برای ارزیابی امنیت یک سیستم استفاده شود. با استفاده از کتابخانههای پایتون، میتوان اسکریپتهایی برای انجام اسکن آسیبپذیری، brute-forcing و سایر تکنیکهای تست نفوذ ایجاد کرد.
import requests
import itertools
def brute_force_login(url, username, password_list):
"""
Performs a brute-force attack against a login form.
Args:
url (str): The URL of the login form.
username (str): The username to try.
password_list (list): A list of passwords to try.
Returns:
str: The password if successful, None otherwise.
"""
for password in password_list:
data = {'username': username, 'password': password, 'submit': 'Login'} # Adjust the form field names as needed
try:
response = requests.post(url, data=data)
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
# Check for successful login (adjust the condition based on the website's response)
if "Login successful" in response.text: #Example. Adjust depending on page
print(f"Successfully cracked password: {password}")
return password
# Print attempt for debugging
print(f"Attempted username: {username}, password: {password}")
except requests.exceptions.RequestException as e:
print(f"Request error: {e}")
return None
print("Login failed.")
return None
def main():
url = "http://example.com/login" # Replace with the target URL
username = "admin" # Replace with the target username
password_list = ["password", "123456", "admin", "secret"] # Replace with a larger password list
print(f"Starting brute-force attack on {url} with username '{username}'...")
password = brute_force_login(url, username, password_list)
if password:
print(f"Password found: {password}")
else:
print("Password not found.")
#Example wordlist for testing, replace with a larger one
#If running this as a script, make sure to remove this comment block
#main()
این کد یک حمله brute-force را بر روی یک فرم ورود به سیستم انجام میدهد. این کد یک لیست از رمزهای عبور را امتحان میکند تا زمانی که رمز عبور صحیح پیدا شود. این یک مثال ساده است و باید با احتیاط استفاده شود. حملات brute-force میتوانند غیرقانونی باشند و باید فقط با مجوز صاحب سیستم انجام شوند.
7. اتوماسیون پاسخ به حادثه با پایتون
پایتون میتواند برای خودکارسازی پاسخ به حادثه و کاهش زمان و تلاش مورد نیاز برای مقابله با حوادث امنیتی استفاده شود. با استفاده از کتابخانههای پایتون، میتوان اسکریپتهایی برای جمعآوری اطلاعات، مهار آسیب و بازیابی سیستمها ایجاد کرد.
import os
import shutil
import datetime
def isolate_infected_system(hostname):
"""
Isolates a potentially infected system by disabling network access and creating a forensic image.
Args:
hostname (str): The hostname or IP address of the infected system.
"""
print(f"Isolating system: {hostname}")
# 1. Disable network access (example using iptables on Linux)
# You might need to adapt this depending on the operating system and network setup
try:
os.system(f"iptables -A INPUT -s {hostname} -j DROP")
os.system(f"iptables -A OUTPUT -d {hostname} -j DROP")
print("Network access disabled via iptables.")
except Exception as e:
print(f"Error disabling network access: {e}")
# 2. Create a forensic image (example using dd on Linux)
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
image_path = f"/forensic_images/{hostname}_{timestamp}.img" # Adjust the path as needed
try:
#This assumes the system disk is /dev/sda - VERY DANGEROUS without proper adjustment
os.system(f"dd if=/dev/sda of={image_path} bs=4096 conv=sync,noerror status=progress")
print(f"Forensic image created at: {image_path}")
except Exception as e:
print(f"Error creating forensic image: {e}")
# 3. Log the incident
log_message = f"Incident: System {hostname} isolated and forensic image created on {timestamp}."
with open("incident.log", "a") as log_file:
log_file.write(log_message + "\n")
print("Incident logged.")
def main():
infected_hostname = "192.168.1.100" # Replace with the actual hostname or IP address
isolate_infected_system(infected_hostname)
#This code requires root privileges
#main()
این کد یک سیستم را با غیرفعال کردن دسترسی به شبکه و ایجاد یک تصویر قانونی از آن جدا میکند. این یک مثال ساده است و باید با احتیاط استفاده شود. قبل از اجرای این کد، باید اطمینان حاصل شود که دستورات مورد استفاده برای غیرفعال کردن دسترسی به شبکه و ایجاد تصویر قانونی برای محیط شما مناسب هستند.
نکات مهم برای توسعه پروژههای امنیتی با پایتون
هنگام توسعه پروژههای امنیتی با پایتون، باید به نکات زیر توجه کرد:
- امنیت کد: اطمینان حاصل کنید که کد شما امن است و هیچ آسیبپذیریای ندارد. از بهترین شیوههای برنامهنویسی امن استفاده کنید و کد خود را به طور منظم بررسی کنید.
- مدیریت وابستگیها: از یک سیستم مدیریت وابستگی مانند
pip
برای مدیریت وابستگیهای پروژه خود استفاده کنید. اطمینان حاصل کنید که تمام وابستگیهای شما بهروز هستند و هیچ آسیبپذیریای ندارند. - مدیریت کلیدها و رمزهای عبور: از ذخیره کلیدها و رمزهای عبور در کد خود خودداری کنید. از یک سیستم مدیریت کلید مانند HashiCorp Vault برای ذخیره و مدیریت امن کلیدها و رمزهای عبور استفاده کنید.
- گزارشدهی: گزارشدهی مناسب برای درک و تجزیه و تحلیل فعالیتهای امنیتی ضروری است. از یک سیستم گزارشدهی قوی برای ثبت تمام رویدادهای مهم استفاده کنید.
- تست: قبل از استقرار هر پروژه امنیتی، آن را به طور کامل تست کنید. از تستهای واحد، تستهای یکپارچهسازی و تستهای نفوذ برای اطمینان از عملکرد صحیح پروژه خود استفاده کنید.
- قانونمندی: به قوانین و مقررات مربوط به امنیت سایبری احترام بگذارید. قبل از انجام هرگونه فعالیت امنیتی، اطمینان حاصل کنید که مجوزهای لازم را دارید.
نتیجهگیری
پایتون یک زبان برنامهنویسی قدرتمند و انعطافپذیر است که میتواند برای انجام وظایف مختلف امنیتی مورد استفاده قرار گیرد. با استفاده از کتابخانههای پایتون، میتوان ابزارها و اسکریپتهای امنیتی، تجزیه و تحلیل دادهها و اتوماسیون وظایف امنیتی را توسعه داد. این مقاله به بررسی نقش پایتون در امنیت سایبری، به ویژه در زمینه کشف آسیبپذیری و دفاع پرداخت و پروژههای عملی مختلفی را ارائه کرد که نشان میدهند چگونه میتوان از پایتون برای بهبود امنیت سیستمها استفاده کرد. با رعایت نکات مهمی که در این مقاله ذکر شد، میتوان پروژههای امنیتی موثری را با پایتون توسعه داد و به حفظ امنیت سایبری کمک کرد.
“`
“تسلط به برنامهنویسی پایتون با هوش مصنوعی: آموزش کدنویسی هوشمند با ChatGPT”
"تسلط به برنامهنویسی پایتون با هوش مصنوعی: آموزش کدنویسی هوشمند با ChatGPT"
"با شرکت در این دوره جامع و کاربردی، به راحتی مهارتهای برنامهنویسی پایتون را از سطح مبتدی تا پیشرفته با کمک هوش مصنوعی ChatGPT بیاموزید. این دوره، با بیش از 6 ساعت محتوای آموزشی، شما را قادر میسازد تا به سرعت الگوریتمهای پیچیده را درک کرده و اپلیکیشنهای هوشمند ایجاد کنید. مناسب برای تمامی سطوح با زیرنویس فارسی حرفهای و امکان دانلود و تماشای آنلاین."
ویژگیهای کلیدی:
بدون نیاز به تجربه قبلی برنامهنویسی
زیرنویس فارسی با ترجمه حرفهای
۳۰ ٪ تخفیف ویژه برای دانشجویان و دانش آموزان