تبليغاتX
امنیت وب و شبکه های اینترنتی
مطالب , نرم افزارها و سایتهای مهم در باره امنیت شبکه و وب سایتها و سیستیم عاملها
ماهواره های قابل دریافت در ایران همراه با فرکانس نمونه عالی24مسیرماهواره
NSS 7 22°
فرکانس
12735 H
16640 3/4


ماهواره
Telstar 12 15°
فرکانس
11150 V
19275 3/4


ماهواره
Atlantic Bird 1 12.5°
فرکانس
11386 H
27500 7/8


ماهواره
Nilesat 101/102 - Atlantic Bird 4 7°
فرکانس
11785 V
27500 3/4


ماهواره
Amos 2/3 4°
فرکانس
10722 V
27500 3/4


ماهواره
Sirius 4 4.8°
فرکانس
11766 H
27500 3/4


ماهواره
Eutelsat W3A
فرکانس
11283 V
27500 3/4


ماهواره
Eurobird 9 9°
فرکانس
11747 H
27500 3/4


ماهواره
Eutelsat W1 10°
فرکانس
11160 H
2170


ماهواره
--- Bird 6/7A/8 13°
فرکانس
11200 V
27500 5/6


ماهواره
Eutelsat W2 16°
فرکانس
11513 V
29950 3/4


ماهواره
Eutelsat W6 21.6°
فرکانس
11524 V
2170 3/4


ماهواره
Eurobird 2 25.5°
فرکانس
11075 V
27500 3/4


ماهواره
Badr-3/4/6 26°
فرکانس
11823 V
27500


ماهواره
Arabsat-2B 30.5°
فرکانس
12661 V
27500 3/4


ماهواره
Astra 5A 31.5°
فرکانس
11766 H
22000 1/2


ماهواره
Eutelsat W4 - Sesat 36°
فرکانس
12532 H
4340 1/2


ماهواره
Hellas Sat 2 39°
فرکانس
11512 H
30000 7/8


ماهواره
Express-AM1 40°
فرکانس
11096 H
4800


ماهواره
Türksat 2A/3A 42°
فرکانس
11794 H
5632


ماهواره
Express-AM22 53°

فرکانس
11495 H
5000 3/4


ماهواره
Intelsat 902 62°
فرکانس
11555 V
27500 3/4


ماهواره
ABS-1 (LMI 1) 75°
فرکانس
12640 V
22000 3/4


ماهواره
AsiaSat 3S 105.5°
فرکانس
12353 V
30000 3/4

+ نوشته شده در  شنبه 17 اسفند1387ساعت 9:24  توسط مایان  | 

 
از منوی Start میتوانید گزینه Run را انتخاب کنید و این دستور ها را در آن وارد کنید

To Access Run Command

Accessibility Controls

access.cpl

Add Hardware Wizard

hdwwiz.cpl

Add/Remove Programs

appwiz.cpl

Administrative Tools

control admintools

Automatic Updates

wuaucpl.cpl

Bluetooth Transfer Wizard

fsquirt

Calculator

calc

Certificate Manager

certmgr.msc

Character Map

charmap

Check Disk Utility

chkdsk

Clipboard Viewer

clipbrd

Command Prompt

cmd

Component Services

dcomcnfg

Computer Management

compmgmt.msc

Date and Time Properties

timedate.cpl

DDE Shares

ddeshare

Device Manager

devmgmt.msc

Direct X Control Panel (If Installed)*

directx.cpl

Direct X Troubleshooter

dxdiag

Disk Cleanup Utility

cleanmgr

Disk Defragment

dfrg.msc

Disk Management

diskmgmt.msc

Disk Partition Manager

diskpart

Display Properties

control desktop

Display Properties

desk.cpl

Display Properties (w/Appearance Tab Preselected)

control color

Dr. Watson System Troubleshooting Utility

drwtsn۳۲

Driver Verifier Utility

verifier

Event Viewer

eventvwr.msc

File Signature Verification Tool

sigverif

Findfast

findfast.cpl

Folders Properties

control folders

Fonts

control fonts

Fonts Folder

fonts

Free Cell Card Game

freecell

Game Controllers

joy.cpl

Group Policy Editor (XP Prof)

gpedit.msc

Hearts Card Game

mshearts

Iexpress Wizard

iexpress

Indexing Service

ciadv.msc

Internet Properties

inetcpl.cpl

IP Configuration (Display Connection Configuration)

ipconfig /all

IP Configuration (Display DNS Cache Contents)

ipconfig /displaydns

IP Configuration (Delete DNS Cache Contents)

ipconfig /flushdns

IP Configuration (Release All Connections)

ipconfig /release

IP Configuration (Renew All Connections)

ipconfig /renew

IP Configuration (Refreshes DHCP & Re-Registers DNS)

ipconfig /registerdns

IP Configuration (Display DHCP Class ID)

ipconfig /showclassid

IP Configuration (Modifies DHCP Class ID)

ipconfig /setclassid

Java Control Panel (If Installed)

jpicpl۳۲.cpl

Java Control Panel (If Installed)

javaws

Keyboard Properties

control keyboard

Local Security Settings

secpol.msc

Local Users and Groups

lusrmgr.msc

Logs You Out Of Windows

logoff

Microsoft Chat

winchat

Minesweeper Game

winmine

Mouse Properties

control mouse

Mouse Properties

main.cpl

Network Connections

control netconnections

Network Connections

ncpa.cpl

Network Setup Wizard

netsetup.cpl

Notepad

notepad

Nview Desktop Manager (If Installed)

nvtuicpl.cpl

Object Packager

packager

ODBC Data Source Administrator

odbccp۳۲.cpl

On Screen Keyboard

osk

Opens AC۳ Filter (If Installed)

ac۳filter.cpl

Password Properties

password.cpl

Performance Monitor

perfmon.msc

Performance Monitor

perfmon

Phone and Modem Options

telephon.cpl

Power Configuration

powercfg.cpl

Printers and Faxes

control printers

Printers Folder

printers

Private Character Editor

eudcedit

Quicktime (If Installed)

QuickTime.cpl

Regional Settings

intl.cpl

Registry Editor

regedit

Registry Editor

regedit۳۲

Remote Desktop

mstsc

Removable Storage

ntmsmgr.msc

Removable Storage Operator Requests

ntmsoprq.msc

Resultant Set of Policy (XP Prof)

rsop.msc

Scanners and Cameras

sticpl.cpl

Scheduled Tasks

control schedtasks

Security Center

wscui.cpl

Services

services.msc

Shared Folders

fsmgmt.msc

Shuts Down Windows

shutdown

Sounds and Audio

mmsys.cpl

Spider Solitare Card Game

spider

SQL Client Configuration

cliconfg

System Configuration Editor

sysedit

System Configuration Utility

msconfig

System File Checker Utility (Scan Immediately)

sfc /scannow

System File Checker Utility (Scan Once At Next Boot)

sfc /scanonce

System File Checker Utility (Scan On Every Boot)

sfc /scanboot

System File Checker Utility (Return to Default Setting)

sfc /revert

System File Checker Utility (Purge File Cache)

sfc /purgecache

System File Checker Utility (Set Cache Size to size x)

sfc /cachesize=x

System Properties

sysdm.cpl

Task Manager

taskmgr

Telnet Client

telnet

User Account Management

nusrmgr.cpl

Utility Manager

utilman

Windows Firewall

firewall.cpl

Windows Magnifier

magnify

Windows Management Infrastructure

wmimgmt.msc

Windows System Security Tool

syskey

Windows Update Launches

wupdmgr

Windows XP Tour Wizard

tourstart

Wordpad

write

 

منبع: آکادمیست

+ نوشته شده در  یکشنبه 5 آبان1387ساعت 10:23  توسط مایان  | 

 

انتشارات Microsoft Press به تازگی کتابی تحت عنوان Microsoft Windows Comman-Line منتشر کرده است که این کتاب به تشریح کامل دستورای خط فرمانی سیستم عامل ویندوز پرداخته است .

دستورات زیر چکیده ای از دستورات مورد نیاز مدیران شبکه و البته هکرهای عزیز است .

شما حتما با برنامه Scheduled Tasks در ویندوز کار کرده اید . این برنامه که رابطی در محیط گرافیکی دارد می تواند طوری تنظیم شود که در یک زمان یک برنامه را اجرا کند .

توسط دستور SchTasks می توان تنظیمات این برنامه را به صورت Command-Line انجام داد .

به دلیل ساده بودن سوییج ها از توضیح آنها صرف نظر کرده و فقط به مثال هایی از این دستور اکتفا می کنیم .

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

 

SchTasks /Create or ... /TN [TaskName] /TR [TaskToRun] /SC [ScheDuleType] /MO [ModiFier]

 در قسمت اول که مشخص می کنیم میخواهیم Task را ایجاد، پاک و یا ... کنیم .

در قسمت /TN نامی را برای Task خود انتخاب می کنیم .

در قسمت /TR مسیر برنامه ای را که می خواهیم اجرا شود را مشخص می کنیم . ( اگر فرد تیز هوشی باشید می توانید دستورات خود را هم اجرا کنید . به این صورت که دستورات را داخل NotePad می نویسید و بعد با پسوند Bat ذخیره می کنید و بعد آدرس این فایل را میدهید )

در قسمت /SC قالب اجرای برنامه را مشخص می کنید که می تواند شامل Monthly - Weekly - Daily - Minute - Once - OnLogon - OnStart باشد .

و در قسمت /MO می توان زمان و تاریخ اجرای برنامه را تعریف نمود .

این دستور برنامه ی مورد نظر را هر 10 دقیقه اجرا می کند :

SchTasks /Create /TN "MOJY" /TR c:\windows\system32\Keyloger.exe /SC minute /MO 10

این دستور برنامه ی مورد نظر را در هنگام بالا آمدن ویندور اجرا می کند :

SchTasks Create /TN "MOJY" /TR c:\windows\system32\Keyloger.exe /SC onStart

 از این دستور بجای اجرای خودکار برنامه از طریق ریجستری می توان استفاده کرد و از دست AntiVirus تا حدودی فرار کرد . الته اگر فردی به این دستورات کاملا تسلط داشته باشد با سوییچ /Query این دستور می تواند از این موضوع مطلع شود .

 با اضافه کردن سوییچ /SD به آخر این دستور و دادن تاریخ مورد نظر به صورت mm/dd/yyyy میتوان برنامه را در یک تاریخ معین اجرا کرد .

 برای پاک کردن یک Task از سوییچ /Delete به صورت زیر می توان استفاده کرد :

SchTasks /Delete /TN [TaskName]

برای متوقف کردن Task بدین صورت می توان عمل کرد :

SchTasks /End /TN [TaskName]

برای دیدن تمام Task ها بدین صورت عمل می کنیم :

SchTasks /Query

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

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

 آیا می دانید که از طریق خط فرمان هم امکان ویرایش در Registry وجود دارد ؟

بله می شود . با دستور Reg می توان این کار را عملی کرد .

به شرح این دستور می پردازیم .

همان طور که می دانید ریجستری دارای 5 شاخه یا RootKey می باشد .

در این دستور این 5 شاخه به صورت زیر تعریف شده اند :

HKEY_CURRENT_USER     --> HKCU

HKEY_LOCAL_MECHINE    --> HKLM

HKEY_CLASSES_ROOT     --> HKCR

HKEY_USER                     --> HKU

HKEY_CURRENT_CONFIG  --> HKCC

مقدار ها هم به صورت زیر تعریف شده اند :

BINARY VALUE   --> REG_BINARY

DWORD VALUE  --> REG_DWORD

STRING VALUE  --> REG_EXPAND_SZ

  به دلیل ساده بودن سوییج ها از توضیح آنها صرف نظر کرده و فقط به مثال هایی از این دستور اکتفا می کنیم .

برای پیدا نمودن یا انجام یک پرس و جو از یک مقدار در ریجستری بدین صورت عمل میکنیم :

Reg Qurey [RootKey] /v [ValueName]

Reg Query HKLM\software\microsoft\windows\currentversion\Run /v Keyloger

برای ایجاد یک مقدار در ریجستری بدین صورت عمل می کنیم :

 Reg Add [RootKey] /v [ValeuName] /t DataType /d Data

 Reg Add HKLM\software\microsoft\windows\currentversion\Run /v Keyloger /t  REG_EXPAND_SZ /d '%systemRoot%\system32\keyloger.exe'

 برای پاک کردن یک مقدار از ریجستری بدین عمل می کنیم :

Reg Delete [RootKey] /v [ValueNme]

Reg Delete HKLM\software\microsoft\windows\currentversion\Run /v Keyloger  

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

 Stop - Run - Disable - Enable کردن سرویس ها .

گرفتن اطلاعات در مورد یک سرویس خاص و کارهای دیگری که در مدیریت سرویس ها قابل انجام است .

همه این کارها را از طریق خط فرمان و با دستور Sc  می توان انجام داد .

این دستور دارای سوییچ های بسیار متعدد است که البته چند مورد از آنها که توضیح داده می شود مورد نیاز ما هستند .

سوییچ های مورد نیاز ما Qurey - Strat - Stop - Pause - Continue - Config می باشند که در مورد هر کدام مثال هایی خواهیم زد .

برای دیدن تمام سرویس های Run - Disable  و ... از این دستور استفاده می کنیم :

Local      --> Sc Query Type= service state= all

Remote --> Sc \\[IP Address ] Query type= service state= all

 برای دیدن تمام سرویس های فعال :

Sc Query type= service state= Active

برای دیدن تمام سرویس های غیر فعال :

Sc Query type= service state= inactive

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

Sc qc [ServiceName]

برای Start - Stop - Pause - Continue کردن یک سرویس به ترتیب :

Sc Start [ServixeName]

Sc Stop [ServixeName]

Sc Pause [ServixeName]

Sc Continue [ServixeName]

سرویس ها را به سه صورت می شه Config کرد : Automatic - Manoel - Disable

Config کردن سرویس به صورت Automatic :

Sc Config [ServiceName] Start=Auto

Config کردن سرویس به صورت Manoel :

Sc Config [ServiceName] start=Demand

Config کردن سرویس به صورت Disable :

Sc Config [ServiceName] Start=Disabled

 

مدیریت Log File ها نه تنها در ویندوز بلکه در تمام سیستم عامل ها و وب سرور ها و در تمام روتین های امنیتی کاری بسیار مهم و ضروری است .

این Log File ها مانند یک IDS کوچک هستنند . چرا که تمام فعالیت های امنیتی . کاربردی و سیستمی را Monitor کرده و از آنها Log بر میدارند .

مطالعه این فایلها در تشخیص نفوذ به ما خیلی کمک می کنند .

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

با استفاده از فرمان EventQuery میتوان این فایل ها را مشاهده کرد .

EventQuery [LogNmae ]

که برای دیدن Log های Security - Application - System به ترتیب از دستور های زیر استفاده می کنیم :

EvenQuery /L "Security"

EvenQuery /L "Application"

EvenQuery /L "System"

اما با این دستور این Log File ها را فقط می توان مشاهده نمود و نمی توان آنها را ویرایش کرد .

توسط برنامه WinZapper که دارای حجم بسیار کمی هم هست می توان به صورت Local نوع Log File را مشخص نمود و تک تک آن ها را پاک کرد .

این برنامه رو می توانید از سایت http://www.NtSecurity.nu به صورت رایگان Download کنید .

  دستور Convert :

توسط این دستور بدون نیاز به Fdisk مجدد می توان فت یک درایو را از Fat 16 به NTFS تغییر داد :

Convert [DraiveName]:/fs:NTFS

Convert c:/fs:NTFS

 دوستان عزیز این دستور ها و کلا بیشتر مباحث شبکه مانند چاغوی دو لبه هستند .

هم می توان از آنها استفاده صلح آمیز کرد هم برای ساخت بمب اتم استفاده کرد .

+ نوشته شده در  یکشنبه 5 آبان1387ساعت 7:51  توسط مایان  | 

ثبات ها حافظه های 8 ، 16 ، 32 و 64 بيتی در داخل پردازنده هستند. که سرعت بسار بالايي دارند و می توان از آنها در ساختارهايی که به شمارنده و محاسبات زيادی نياز دارند استفاده کرد.

در اين بخش با ثباتهای 16 بيتی کار داريم.

1) ثباتهای عمومی

AX-BX-CX-DX

که هر کدام از دو قسمت 8 بيتی کم ارزش ، و 8 بيتی پر ارزش تشکيل شده اند. مثلاً AL بخش کم ارزش و AH بخش پر ارزش AX می باشد.

این ثباتها برای کار با داده ها مورد استفاده قرار می گیرند

 AX(AH,AL) Accumulator: برای ذخیره داده به طور موقت به کار می رود.

BX(BH,BL)Base: ثبات پايه می گویند  و به عنوان انديس ازش استفاده می کنند.

CX(CH,CL)Counter: برای نگهداری شمارشگر استفاده می شود.( متغيير کنترلی اتمام حلقه ها هستند)

DX(DH,DL)Data: نتيجه ضرب و تقسيم اعداد بزرگ در DX قرار می گيرد.

۲) ثباتهای قطعه :
 CS,DS,SS ,ES :که به ترتیب آدرس شروع

سگمنت اضافي ES يا extra segment .

سگمنت پشته SS يا stack segment .
سگمنت داده
DS يا data segment .
سگمت كد
CS يا code segment .  را در داخل خود نگه می دارند.
3) ثباتهای اشاره گر :

 به برنامه اجازه می دهند تا به داده های موجود در پشته دسترسی داشته باشد .
  :
SP( Stack Pointer)  حاوي آفست بالاي پشته است. بالاي پشته يعني آخرين ورودي. پشته در زبان اسمبلي از بالا بسته است و رو به پايين پر ميشه. (از نظر آدرس)
 :  BP( Base Pointer)
 این ثبات شامل افست است . و امکان استفاده از پارامترها و آدرسهای موجود در پشته را فراهم می کند . (بیشتر در توابع تودر تو بیشتر مورد استفاده قرار میگیرد)

افست چیست؟

هر سگمنت يک آدرس شروعی دارد که در ثبات سگمنت ذخيره ميشه. به فاصله ای که از اين آدرس داريم افست ميگيم.

IP ( Instruction Pointer)  :شماره خطي از برنامه را كه بايد اجرا بشه را در خود نگه مي دارد. یعنی  CPU دستور بعدي را از روي IP پيدا  کرده و اجرا میکند.

SI(source index) براي عمليات بر روي رشته ها است و آدرس رشته منبع را نگهداري مي كند.
DI(destination index) براي عمليات بر روي رشته ها است و آدرس رشته مقصد را نگهداري مي كند.

ثبات فلگها
CF-PF-AF-ZF-SF-TF-IF-DF-OF
يک ثبات 16 بيتی که 9 بيت آن به طور مشخص نامگذاری شده و وضعيت پردازنده رو نشون ميده.



بيت (
c (carry : برای نشان دادن وجود رقم نقلی در محاسبات که آنرا CF می نامند
بيت (
D (direction : به معنی جهت می باشد و جهت پردازش روی رشته ها رو مشخص میکنه (از چپ به راست یا برعکس) و با DF نشون داده میشه
بيت (
P (parity) : اگر صفر باشه نشاندهنده اينه که تعداد شيفت ها زوج بوده وگرنه فرد بوده و با PF نشون داده ميشه
بيت (
A (auxiliary carry : رقم نقلی کمکی هست و در محاسبات 8 بيتی اگه رقم نقلی استفاده ميشه و با AF نمايش داده ميشه
بيت (
Z(zero : اگر در نتيجه محاسبات صفر ايجاد بشه اين بيت برابر يک ميشه و با ZF نشون داده ميشه
بيت (
S (sign : اگر نتيجه محاسبات منفی باشه اين بيت 1 ميشه و با SF نشون داده ميشه
بيت (
T(trap : اگر اين بيت برابر يک باشه اجرای برنامه به صورت دستور به دستور در مياد و با TF نشون داده ميشه
بيت (
I(interrupt : اگر اين بيت 1 باشه سيستم به وقفه ها پاسخ ميده وگرنه اونارو ناديده می گيره که با IF نشون داده ميشه
بيت (
O(overflow : اگه در محاسبات بيت پر ارزش سرريز بشه بيت O صفر ميشه , fh OF نشون داده ميشه.

 کارهای مهم پشته:

1)      پاس کردن پارامترها ( آرگومانها ) به تابع

2)    نگهداری آدرس بازگشت به برنامه اصلی(درIP)

3)    تخصیص حافظه برای متغیرهای نوع دینامیک هست

 

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

هیپ(Heap) چیست ؟
به غیر ازData ,  Code , Stack , محل دیگری هم برای تخصیص حافظه بکار می رود که به آنHeap  می گوییم. وقتی که توسط دستوراتی مثل malloc یا alloc یا ... حافظه ای را از سیستم میگیریم , این حافظه در هیپ سیستم اختصاص داده میشود.در واقع از هیپ برای تخصیص حافظه به صورت دینامیک استفاده میشود.
این نکته هم باید ذکر شود که در هر برنامه ای لزوما هیپ نداریم و وجود آن بستگی دارد به زبانی که برای برنامه نویسی استفاده شده است.
به طور استاندارد دو نوع هیپ برای برنامه در نظر گرفته میشود که عبارتند از :

·         Near heap

·         Far heap

اندازه Near heap محدود به 32 کیلوبایت است و برای رفع محدودیت از Far heap

استفاده میشود و تفاوت آنها در نحوه آدرس دهی است.
طرف حساب ما متغیرهای نوع دینامیک هستند که در پشته سیستم ادرس دهی میشوند .

+ نوشته شده در  شنبه 15 اردیبهشت1386ساعت 19:41  توسط مایان  | 


مقاله ای که در دست دارید درصدد آموزش یکی از مفاهیمی است که مدیران امنیتی شبکه های بزرگ و مسئولین ISPها همه روزه در مجادله برای غلبه بر عواملی هستند که باعث بروز آن میشود.
یعنی بافر اورفلو.
در اینجا ذکر این نکته را حائز اهمیت میدانم که هدف از این مقاله , آموزش افراد در جهت مقابله با آنارشی یا هرج و مرج در دنیای سایبر است و هر اقدام خرابکارانه ای که ناشی از مطالب این مقاله باشد به عهده خود شخص است.
بافر اورفلو یکی از روشهای متعددی است که نفوذگران برای رخنه در یک سیستم , یک کلاینت , یک سرور و ... از آن بهره میگیرند.
این روش , مشکلترین و کارامد ترین متدی است که نفوذگران از آن بهره میگیرند و برای استفاده از آن باید دانش فنی کافی داشته باشیم.
در این مقاله برای کد نویسی از زبان Visual C++ نسخه ششم از سویت Visual Studio 6.0 SP1 و برای یک سری کارهای دیگر از برنامه های جانبی این سویت بهره گرفته شده است.
داشتن اندکی دانش از اسمبلی 32 بیتی ویندوز هم توصیه میشود.
خواندن این مقاله به مدیران امنیتی شبکه ها و سایت ها و مسئولین نگهداری ISP ها توصیه میشود.
دلیل نگارش این مقاله هم این است که تا کسی نداند چه اتفاقی در هنگام حمله می افتد , نمیتواند راهی برای مقابله با آن کشف کند.
بدون شک ما انسانها همواره در زندگی خود درصدی از بیم و هراس و نا اطمینانی را داریم و همواره سعی بر این بوده که که میزان این نا اطمینانی را به حد اقل برسانیم ولی در این راه بسیاری از تلاشها بی نتیجه مانده و بسیار تجربه کسب گردیده است.
گستره این نا اطمینانی تا حدی است که به دنیای دیجیتال و یا اصطلاحا سایبر نیز وارد شده و همواره کاربران سیستم ها و مدیران, چه در شبکه و چه در دنیایی ایزوله از شبکه در صدد تامین امنیت سیستم خود بوده اند و بسیاری ادعای امنیت کامل نموده اند و میکنند و همه غافل از اینکه چنین چیزی رویایی بیش نیست و نمیتوان ادعای امنیت کامل نمود.حال ممکن است این سوال پیش بیاید که چرا؟
چرا هیچوقت نمیتوان ادعای امنیت صد در صد کرد؟
دلیلی که بنده میتوانم برای این امر در ذهن خود مجسم کنم این است که ما انسانها محدود هستیم و هیچوقت نمیتوانیم ادعای دانایی مطلق کنیم.چرا که آفریدگار است که تنها دانای مطلق است و اوست که بر همه چیز آگاه است.
در مقاله سعی شده است که یکی از رایج ترین و پر استفاده ترین روشهای مورد استفاده برای حمله به کلاینت ها و سرور ها در شبکه های کامپیوتری و خارج از آن را که به نام بافر اوورفلو معروف است تشریح کنیم.
برای یادگیری از این مقاله , خواننده بایستی اندکی با ساختار سیستم عامل ویندوز آشنا باشد و اندکی دانش برنامه نویسی به زبانهای سی تحت ویندوز و اسمبلی تحت ویندوز داشته باشد.اگرچه در این متن از ساده ترین کدها استفاده شده است ولی داشتن این دانش به تسریع یادگیری کمک خواهد کرد.
بخش اول: اصول مقدماتی


پشته
اکثرا باید بدانید که پشته چیست.ولی اندکی یاد آوری در مورد پشته و ذکر انواع آن خالی از لطف نیست.
یک تعریف انتزاعی از پشته این است که پشته ساختمان داده ای است که اطلاعات (از هر نوعی) به ترتیب معکوس ورود از ان خارج میشوند :


یعنی آخرین ورودی , اولین خروجی است.به همین علت به این سیستم ورودی و خروجی , سیستم LIFO اطلاق میشودکه خلاصه شده عبارت Last In First Out میباشد.
پشته یکی از پر کاربرد ترین ساختار ها در دنیای کامپیوتر و برنامه سازی از پایین ترین سطح تا بالا ترین سطح میباشد و به همین علت در همه ماشینها (سی پی یو ها) دستوالعملهای خاصی برای کار کردن با پشته سیستم تدارک دیده اند. این دستورالعملها عبارتند از دستور PUSH و دستور POP که اگر کسی به زبان اسمبلی برنامه نوشته باشد صد درصد با آنها اشنایی دارد و میداند که کارشان چیست.
دستورالعملهای مربوط به پشته و مفهوم آنها :
1- PUSH : یعنی وارد کردن یک عنصر به پشته
2-POP : یعنی خارج کردن یک عنصر از پشته
اگر کمی فکر کنیم به این نتیجه میرسیم که پشته نیز در حافظه جای میگیرد و دارای حد بالا و حد پایین است.این حد بالا و حد پایین پشته توسط سیستم عامل نگهداری میشود و دارای مقدار ثابتی است (به طور معمول) ولی تعداد آیتمهای داخل پشته ثابت نیست بنابر این از کجا میتوانیم بفهمیم که پشته تا کجای ان پر است.برای اینکار در سیستم یک ثبات در نظر گرفته میشود که نشان دهنده این است که پشته تا کجای آن پر است و هر وقت که عنصری وارد پشته شود و یا از آن خارج شود در این ثبات , تغییراتی اعمال میگردد. در بسیاری از سیستمها این ثبات با نام SP : stack pointer معروف است.

 

انواع پشته از دید آدرس دهی در حافظه

اگر اندکی تامل کنیم متوجه میشویم که بر اساس ساختار و نحوه آدرس دهی حافظه کامپیوتر میتوانیم دو نوع پشته داشته باشیم که عبارتند از :
1-پشته کاهشی
2-پشته افزایشی

1-پشته افزایشی :
در این مدل از پشته , پشته از آدرس پایین حافظه شروع به بزرگ شدن میکند.در این مدل با اضافه شدن یک آیتم به پشته در جهت ایندکس خانه های حافظه از پایین به بالا حرکت میکنیم.
در ساده ترین تفسیر با اضافه شدن هر عنصر به پشته , یک واحد به اشاره گر بالای پشته اضافه میشود و با برداشته شدن هر عنصر , یک واحد از این اشاره گر کم میشود.


1-پشته کاهشی :
در این مدل از پشته , عکس کدل قبلی ,پشته از آدرس بالای حافظه شروع به بزرگ شدن میکند.با اضافه شدن هر آیتم به پشته در خلاف جهت ایندکس خانه های حافظه از پایین به بالا حرکت میکنیم.
در ساده ترین تفسیر با اضافه شدن هر عنصر به پشته , یک واحد از اشاره گر بالای پشته کم میشود و با برداشته شدن هر عنصر , یک واحد به این اشاره گر اصافه میشود.


نمیتوان گفت که کدامیک از این دو بهتر است.هر نوع دارای کاربردهای گوناگونی هستند.از نظر بنده پشته نوع دوم یعنی پشته کاهشی دارای کاربرد بیشتری در پیاده سازیها میباشد.برای مثال در پیاده سازی پردازنده های زیر از متد کاهشی برای پیاده سازی دستورالعملهای پشته استفاده شده است :
1-Intel
2-Motorola
3-SPARC
4-MIPS

انواع پشته از دید ماهیت
اگر بخواهیم به واقعیت ساختاری پشته پی ببریم بایستی ماهیت آنرا بشناسیم.
حافظه کامپیوتر مجموعه ایست از صفر ها ویک ها و کامپیوتر برای اینکه بفهمد که کجا کدهای اجرایی قرار دارند و کجا داده ها , آنها را از هم جدا نگه میدارد و با عنوان سگمنت کد و سگمنت داده(CSوDS) به انها ارجاع میکند.ولی در مورد پشته قضیه اندکی متفاوت است و اینجاست که بر اساس پیاده سازی سیستم عامل , دو نوع پشته ظاهر میشود :

1-پشته اجرایی Executable stack
2-پشته غیر اجرایی Non executable stack

پشته اجرایی نوعی پشته است که سیستم میتواند در صورت وجود کدهای اجرایی در پشته , آنها را مشابه کدهای موجود در سگمنت کد ,اجرا کند

در پشته غیر اجرایی , حتی اگر کدهای اجرایی در پشته باشند , سیستم مجاز نیست آنها را اجرا کند و در صورت تلاش برای اجرای کدها در سگمنت پشته خطایی از طرف سیستم عامل نمایش داده میشود.
محبوبیت پشته اجرایی , بیشتر از پشته غیر اجرایی است به طوری که در پیاده سازی بسیاری از سیستم عاملهای معروف از پشته اجرایی استفاده شده است. برای مثال :
1-M$ Windows series
2-Unix (*nix series)
3-Linux (All distributions such as RedHat,Mandrake)
4-Some other well known Operating Systems

از پشته غیر اجرایی به ندرت برای پیاده سازی سیستم های عامل استفاده شده و معروف ترین گونه ای که در بازار موجود است , سیستم عامل IRIX است.
شاید دلیل محبوبیت کم پشته غیر اجرایی , مشکلات پیاده سازی و استفاده از آن در سطح سیستم و برنامه سازی است.

انواع پشته از لحاظ استفاده از SP
پشته از دیدگاه نحوه استفاده از اشاره گر بالای پشته نیز انواع متفاوتی دارد.در پیاده سازی میتوانیم به دو روش از اشاره گر بالای پشته استفاده کنیم که عبارتند از :
1-SP نشان دهنده بالاترین عنصر پشته است
2-SP نشان دهنده اولین جای خالی در پشته است
در نوع اول وقتی که پشته خالی است SP مساوی مقدار 1- یا یک مقدار غیر معتبر پیش فرض است که به این معنی است که هیچ عنصری در پشته وجود ندارد.
در نوع دوم وقتی که پشته خالی است , SP مساوی 0 یا مقداری است که نشان دهنده اولین خانه خالی در پشته است.


ذکر یک نکته در اینجا حائز اهمیت است که اگر تا اینجا در متن دقت کرده باشید همه جا از واژه واحد و خانه برای پشته استفاده شده است و هیچ جایی از واژه بایت برای ارجاع به سلولهای پشته استفاده نشده.دلیل این مطلب این است که در پیاده سازیهای سی-پی-یو ها و سیستم عاملهای مختلف برای خانه های پشته اندازه های مختلفی در نظر گرفته شده.به طور استاندارد اندازه هر خانه از پشته , یک کلمه در نظر گرفته میشود که اندازه هر کلمه از یک ماشین به ماشین دیگر متفاوت است.در بعضی از ماشینها , اندازه کلمه 3 بایت , در بعضی 4 بایت و در گستره وسیعی اندازه هر کلمه 2 بایت است و این به صورت یک استاندارد در آمده است.از آنجا که در حال حاضر بیش از 95% سیستمهای کامپیوتری در جهان از استاندارد IBM تبعیت میکنند و اندازه ه کلمه در این استاندارد 2 بایت است , ما هم به طور پیش فرض اندازه هر کلمه را 2 بایت در نظر خواهیم گرفت.ذکر این نکته هم حائز اهمیت است که چون بیشتر ما از سیستمهای x86 استفاده میکنیم , به طور پیش فرض , سیستم هدف خود را یک سیستم x86 در نظر خواهیم گرفت و تنوع خود را بر روی سیستمهای عامل متمرکز خواهیم نمود.
ثباتهایی که برای پشته تعبیه شده اند.
همانگونه که اشاره شد , در هر ماشین برای کار با پشته , دارای دستورالعملها و ثباتهایی هستیم که به دو دستور العمل کار با پشته اشاره کردیم و توضیحی در مورد آنها ارائه کردیم.حال میپردازیم به اینکه در سری x86 چه ثباتهایی برای پشته تعبیه شده است.در سری x86 برای کار با پشته , دارای ثباتهای زیر هستیم :
1-ثبات SP : اشاره گر بالای پشته
2-ثبات SS : ثبات سگمنت پشته
3-ثبات FP : ثبات اشاره گر فریم
4-ثبات BP : یک ثبات همه منظوره که بیشتربرای کاربا پشته به کار میرود
با ثبات اول که همان SP هست از قبل اشنایی دارید و میدانید که کاربرد آن چیست.
ثبات دوم , یعنی SS , ثبات سگمنت پشته میباشد که نشان دهنده ابتدای سگمنت پشته(یا بهتر بگوییم انتها)
است.اگر واقع بین باشیم این ثبات نشان دهنده حد پایین پشته است.
ثبات سوم یا همان FP بیشتر توسط سیستم عامل برای مدیریت فرایند ها به کار میرود و در سطح برنامه های کاربردی زیاد کاربرد ندارد.پشته سیستم عامل به طور منطقی , به ازای هر فرایند , به قسمتهایی تقسیم میشود که به هر یک از آنها یک فریم اطلاق میشود و در داخل هر فریم اطلاعات مربوط به فرایند متناظر با آن قرار دارد.
ثبات چهارم ,BP, بیشتر نقش آچار فرانسه را دارد و برای فعل و انفعالات برنامه کاربردی با سیستم به کار میرود.
مقادیر ثباتهای پشته نسبت به SS در نظر گرفته میشود. یعنی مقداری که در ثباتهای مربوط به پشته قرار میگیرد یک آدرس مطلق حافظه نیست و نسبت به فاصله ای که از ثبات سگمنت دارند مقادیر را نگه میدارند و اگر بخواهیم آدرس واقعی خانه ای از پشته که SP به آن اشاره میکند را بدست آوریم بایستی اندکی محاسبات انجام دهیم.
مثال :
SS=0FA800h
SP=100h
0FA800h + 100H =0FA900h=آدرس فیزیکی
به این معنی که خانه 100 هکز یا 256ام پشته در آدرس 0FA900h حافظه است.
نکته :
هر برنامه ای , به هر زبانی که نوشته میشود دارای پشته است.اگر به زبان اسمبلی برنامه نوشته باشد میدانید که در ابتدای برنامه یا باید یک سگمنت پشته توسط پیش پردازنده SEGMENT تعریف کنیم و آدرس آن را توسط پیش پردازنده ASSUME در ثبات سگمنت پشته قرار دهیم و یا اینکه توسط پیش پردازنده .STACK اندازه پشته را اعلان کنیم تا اسمبلر بقیه کارها را انجام دهد.
تعریف پشته در زبان اسمبلی:
مثال اول 
مثال دوم

ASSUME CS:CODE,DS:DATA,SS:STACK

CODE SEGMENT
MAIN PROC NEAR
....
MAIN ENDP
CODE ENDS
.MODEL SMALL

.STACK 256

.DATA
A DW 24
B DB ?

.CODE
MAIN PROC NEAR
.....
MAIN ENDP
END .MODEL SMALL
STACK SEGMENT PARA STACK 'stack'
DB 256 DUP(?)
STACK ENDS

DATA SEGMENT
A DW 24
B DB ?
DATA ENDS


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

بافر
بافر به طور عام به حافظه ای اطلاق میشود که برای نگهداری اطلاعات به کار میرود.در واقع از یک دید خاص میتوان گفت که بافر همان متغیرهای برنامه است .برای مثال یک متغیر از نوع intدر زبان سی یک بافر 2 بایتی است که برای نگهداری اطلاعات عددی ازآن استفاده میشود.میتوانیم آرایه ای از int ها را هم به عنوان یک بافر در نظر بگیریم.متغیرهای رشته ای هم که درواقع آرایه ای از کاراکتر ها هستند,نیز نوعی بافر هستند.کار اصلی ما با نوع آخر یعنی بافرهای رشته ای است.
همانگونه که باید بدانید در زبان سی , برای نشان دادن انتهای رشته از کاراکتر NULL یا همان پوچ که کد اسکی آن صفر است استفاده میشود.برای مثال اگر شکل زیر را به عنوان قسمتی از حافظه در نظر بگیریدکه متغیر رشته ای str در آن قرار دارد,اگر فرض کنیم که متغیر حاوی مقدار "String" باشد , در آن صورت خواهیم داشت :

 

این کاراکتر که در انتهای رشته قرار میگیرد نشان دهنده حد انتهای رشته هست.اگر فنی تر نگاه کنیم , در زبان سی به طور کلی آرایه ها توسط آدرس ابتدای آنها مشخص میشوند.یعنی اگر در این مثالی که آورده ایم , STRاشاره گری است به آدرس ابتدای رشته در حافظه که در مثال ما مساوی است با 23.پس داریم :

ساختار آرایه رشته در حافظه

STR="String" 
رشته ای که در حافظه است


STR=23 
قرار میگیردSTRمقداری که در متغیر


*STR='S' 
محتوای بایتی که متغیر به آن اشاره میکند.در واقع اولین خانه آرایه


*(STR+1)='t' 
دومین خانه آرایه


*(STR+2)='r' 
سومین خانه آرایه


*(STR+3)='i' 
چهارمین خانه آرایه


*(STR+4)='n' 
پنجمین خانه آرایه


*(STR+5)='g' 
ششمین خانه آرایه


*(STR+6)=Null 
آخرین خانه آرایه

 

همانگونه که میدانید در زبان سی میتوانیم توسط عملگر * به محتوای یک آدرس از حافظه به طور مستقیم دسترسی داشته باشیم و در این مثال نیز برای نشان دادن محتوای حافظه از آن استفاده شده است.اگر یک واحد به متغیری که حاوی آدرس است اضافه کنیم , در حافظه به اندازه یک خانه به طول نوع متغیر حاوی ادرس به جلو حرکت میکنیم.به عنوان مثال اگر متغیر ptrبه عنوان یک اشاره گر به integer تعریف شده باشد و به خانه ای از حافظه اشاره کند , حافظه (ptr+1) به اندازه 2 بایت جلوتر از مقدار اول آن خواهد بود , چرا که نوع داده ای integer 2 بایت طول دارد :...


int *ptr; //An integer type pointer declaration
int arr[2]; //An integer array of two cells
arr[0]=10; //Initializing array's first cell
arr[1]=20; //Initializing arrays secong cell
ptr=arr; // pointing ptr to start point of array
printf("*(ptr)=%d ",*(ptr));
printf("*(ptr+1)=%d ",*(ptr+1));
getch();
...


تمامی آنچه که گفته شد در این مثال آورده شده.
روشی که گفته شد , یکی از روشهایی بود که برای نمایش انتهای رشته ها به کار میرود.دربرخی از زبانهای برنامه سازی از روشی دیگر برای اینکار استفاده میشود و آن روش هم به این ترتیب است که اولین خانه آرایه برای نگهداری طول رشته ای که در آرایه نگهداری میشود , رزرو میشود.به این شکل :

این روش در زبانهایی چون پاسکال و ویژوال بیسیک به کار رفته است.
هر روش دارای مزایا و معایبی است که میتوان برای نمونه به موارد زیر اشاره کرد :
در روش اول این محدودیت رو داریم که نمیتوانیم از کاراکتر NULLدر داخل رشته استفاده کنیم ولی در روش دوم چنین محدودیتی نداریم.
در روش دوم بسته به اندازه حافظه ای که برای نگهداری طول رشته در نظر گرفته میشود محدودیت داریم ولی در روش اول چنین محدودیتی نداریم.برای مثال اگر برای نگهداری طول رشته , یک بایت در نظر گرفته شود , طول رشته ها محدود به 255 کاراکتر میشود.
متغیر ها در کجای حافظه قرار میگیرند (از لحاظ منطقی)
در هر زبان برنامه سازی بسته به مورد کاربرد , میتوانیم متغیر های نوع دینامیک و استاتیک داشته باشیم.
متغیرهای برنامه :
1-استاتیک
2-دینامیک

1- متغیرهای نوع استاتیک
این نوع متغیرها هنگام شروع فرایند یا همان برنامه در سگمنت Data یا داده که قبلا توضیح داده شده , آدرس دهی میشوند. متغیرهای نوع استاتیک , وابسته به بلوک نیستند و در حین اجرای برنامه همواره مقادیر خود را حفظ میکنند و اگر از تابع و یا بلوکی که در ان تعریف شده اند خارج شویم و دوباره برگردیم همان مقادیر دفعه قبل خود را حفظ میکنند.
2-متغیرهای نوع دینامیک
این گونه از متغیر ها فقط در محدوده بلوکی که تعریف میشوند مفهوم دارند و فقط در بلوکی که تعریف شده اند مقادیر خود را حفظ میکنند و اگر از بلوک خارج شده و دوباره بر گردیم مقادیر قبلی خود را نخواهند داشت.این نوع از متغیر ها , هنگام فراخوانی فرایند یا تابع , در پشته برنامه آدرس دهی میشوند و مقادیرشان را هم در همانجا یعنی پشته نگهداری میکنند و وقتی که از بلوک خارج شویم از بین میروند.


متغیرهای دینامیک و استاتیک


Static 
Dynamic
void StaticFunc()
{
static int sv=0;//Static variable
sv++;
printf("sv=%d",sv);
}
//*************************
void main()
{
StaticFunc();
StaticFunc();

خروجی
sv=1
sv=2

**********************************************************************

void DynFunc()
{
int dv=0; //Dynamic variable
dv++;
printf("dv=%d",dv);
}
//*************************
void main()
{
DynFunc();
DynFunc();
}

خروجی 
 dv=1
dv=1


در مثالی که برای شما آورده شدفرض شده که تابع را دوبار فراخوانی میکنیم و اگر دقت کنید متغیر استاتیک مقدار قبلی خود را حفظ میکند.

هیپ(Heap) چیست ؟
غیر از این دو مورد که ذکر شد یک جای دیگر هم برای تخصیص حافظه وجود دارد و آن هم هیپ (Heap) سیستم است. وقتی که توسط دستوراتی مثل malloc یا alloc یا ... حافظه ای را از سیستم میگیریم , این حافظه در هیپ سیستم اختصاص داده میشود.در واقع از هیپ برای تخصیص حافظه به صورت دینامیک استفاده میشود.
این نکته هم باید ذکر شود که در هر برنامه ای لزوما هیپ نداریم و وجود آن بستگی دارد به زبانی که برای برنامه نویسی استفاده شده است.
به طور استاندارد دو نوع هیپ برای برنامه در نظر گرفته میشود که عبارتند از :
انواع هیپ
1-هیپ نزدیک Near heap
2-هیپ دور Far heap

اندازه هیپ نزدیک محدود به 32 کیلوبایت است و برای رفع محدودیت از هیپ دور استفاده میشود و تفاوت آنها در نحوه آدرس دهی است.
طرف حساب ما متغیرهای نوع دینامیک هستند که در پشته سیستم ادرس دهی میشوند .


کاربردهای پشته
تا حالا باید فهمیده باشید یکی از کاربردهای پشته تخصیص حافظه برای متغیرهای نوع دینامیک هست.
پشته یک کاربرد دیگر هم دارد که عبارت است از پاس کردن پارامتر ها به توابع.
هیچ تا حالا به این فکر کرده اید که وقتی که یک روال را در یک برنامه فراخوانی میکنید , مقادیر پارامتر ها یا همان آرگومانها چگونه به روال تحویل داده میشوند. بله.آرگومانهای روال هم توسط پشته به روال تحویل داده میشوند. وقتی که روال فراخوانی میشود , ابتدا پارامتر ها در پشته قرار داده میشود و بعد از یک سری کارهای مقدماتی , کنترل اجرا به روال منتقل میشود.در ابتدای روال, آرگومانها از پشته برداشته میشوند و سپس بقیه کد ها اجرا میشوند.
غیر از این دومورد کاربرد , پشته یک کاربرد مهم دیگر نیز دارد که یکی از اهداف اصلی ماست.
کاربرد سوم پشته برای ذخیره کردن آدرس بازگشت یا return address هنگام فراخوانی یک روال است. حال این آدرس بازگشت چه هست؟

آدرس بازگشت
کامپیوتر برای اینکه بفهمد باید چکار بکند و چه چیزهایی دارد , اطلاعات را در حافظه RAM یا حافظه ای ماندگار (بسته به مورد) مثل هارد دیسک نگهداری میکند.
وقتی که از بلوک جاری یک روال فراخوانی میشود ,ابتدا سیستم پارامترهای تابع را درصورت وجود در پشته قرار میدهد و قبل از انتقال فرایند اجرا به آن روال , آدرس دستور العمل بعدی را که باید بعد از بازگشت از روال اجرا شود , به همراه یک سری اطلاعات دیگر در پشته قرار میدهد و سپس کنترل اجرا را به اولین دستورالعمل روال انتقال میدهد.
بعد از اتمام اجرای روال , به عنوان آخرین دستورالعمل روال , آدرس بازگشت که همان آدرس دستورالعمل بعد از دستور فراخوانی روال است , از پشته برداشته میشود و کنترل اجرا به آنجا منتقل میشود (دستور RET).
برای مثال در سیستمهای PC یک ثبات داریم با نام IP که همواره حاوی آدرس دستورالعمل بعدی است که باید اجرا شود.یعنی اگر کامپیوتر الان در حال اجرای دستورالعمل موجود در آدرس 27 باشد , آنگاه مقدار ثبات IP مساوی خواهد بود با 28 , یعنی دستوالعمل بعدی.
هر کاه بخواهیم که کنترل اجرا را به دست بگیریم , کافیست به نحوی بتوانیم مقدار ثبات IP را عوض کنیم و از جایی که میخواهیم اجرای کدها ادامه خواهد داشت.

پس درحالت کلی پشته سه کاربرد مهم برای سیستم دارد که عبارتنداز :
1-پاس کردن پارامتر ها
2-نگهداری آدرس بازگشت
3-آدرس دهی متغیرهای دینامیک

یک مفهوم که زیاد اسم آن آمد ولی در مورد ان صحبت نشد , فرایند است.فرایند چیست؟

فرایند؟
فرایند یا process در یک تعریف کلی یک برنامه است که اجرا میشود و در تعریف تخصصی تر , فرایند قطعه برنامه ای است که یک وظیفه(Task) بر عهده دارد وتوسط سیستم عامل مدیریت میشود.
هر فرایند از لحاظ منطقی به سه قسمت تقسیم میشود که به شرح زیر هست :


1- Text یا متن فرایند : این قسمت حاوی کدهای اجرایی فرایند است . این بخش توسط سیستم عامل قفل میشود و هرگونه تلاش برای دسترسی به این قسمت (چه خواندن و چه نوشتن) منجر به بروز خطای "تخطی از سگمنت بندی" یا Segmentation violation"" از طرف سیستم عامل میشود.فقط سیستم عامل اجازه دسترسی به این قسمت را دارد(به قول معروف, فقط در مود هسته(Kernel mode) مجاز به دسترسی به این بخش هستیم).

2-Data یا داده های فرایند : این همان سگمنت داده ها است که برای متغیر های استاتیک و متغیرهای با مقدار اولیه (Initialized) از آن استفاده میشود.

3-Stack یا پشته : پشته برنامه که برای سه منظور اصلی که قبلا به آن اشاره شد از آن استفاده میشود.البته ممکن است به غیر از اینها کاربردهای دیگری برای پشته داشته باشیم , ولی این سه مورد ذکر شده , موارد اصلی هستند.

نحوه مدیریت فرایند ها
لابد این اصل رامیدانید که هر برنامه ای که باید اجراشود به سه منبع اصلی 1-حافظه 2-پردازنده 3-زمان نیازمند است و کار تخصیص این منابع و مدیریت آنها توسط سیستم عامل انجام میگیرد.در سیستم عاملهای اولیه وقتی که قرار بود برنامه ای اجرا شود , خود برنامه ,به طور فیزیکی به حافظه دسترسی داشت و در فضای آدرسی که وابسته بود به اندازه حافظه کامپیوتر , میتوانست عملیات انجام دهد.ولی در سیستم ها عامل مدرن مثل ویندوز و یونیکس و لینوکس دیگر چنین کاری انجام نمیگیرد و هیچ برنامه ای به طور مستقیم به حافظه دسترسی ندارد و تمام تراکنشها با حافظه توسط سیستم عامل انجام میگیرد . دز این نوع از سیستم های عامل از تکنیک حافظه مجازی استفاده میشود, به این صورت که مقداری حافظه به صورت فیزیکی روی کامپیوتر نصب شده و بقیه حافظه هم به صورت یک فایل مبادله ای یا اصطلاحاً SWAP روی هارد دیسک در نظر گرفته میشود.در نتیجه هر برنامه ای که اجرا میشود دارای 4 گیگابایت فضای آدرس دهی خواهد بود.با تکیه بر این تکنیک دیگر هیچ وقت , هیچ برنامه ای با کمبود حافظه مواجه نمیشود و چونکه همه تراکنشهای حافظه ای به واسطه سیستم عامل انجام میگیرد , برنامه نمیتواند بفهمد که آیا آدرسی که الان میخواهد مقدار آن را بخواند و یا مقداری در آن بنویسد , در حافظه اصلی است یا حافظه معاوضه ای.در واقع این نوعی تجرید از حافظه توسط سیستم عامل است.سیستم عامل همه درخواست های حافظه را توسط نقشه ای که دارد , نگاشت میکند و در زمان لازم مقداری از حافظه را به دیسک انتقال میدهد و از دیسک به حافظه میبرد.
البته همه این 4گیگابایت برای همه برنامه ها قابل دسترسی نیست. برخی جاها از این فضای
میان فرایند ها به اشتراک گذاشته میشود و برخی جاها فقط برای یک فرایند خاص در نظر گرفته میشود.برای این چهار گیگا بایت که از آدرس 0x00000000 تا آدرس 0xFFFFFFFF ایندکس خورده , یک سازماندهی معین وجود دارد که به شرح زیر است :


سازماندهی فضای آدرس دهی توسط ویندوز

محدوده آدرس                                                                          مورد استفاده

                               NULL pointer assignments                              0x00000000 تا x0000FFFF

**********************************************************************

Processes user space
قسمتی که پروسه ها وِDll ها لود میشوند.هر کدی که اینجا لود شود میتواند اجرا شود.دسترسی به جایی که در آن کد لود نشده باعث بروز خطای Access violation میشود

    0x001000000 تا  x7FFEFFFF                                                                    

**********************************************************************

Bad pointer assignments
در صورت هر گونه تلاش برای دسترسی به این آدرس با خطای Access violation مواجه خواهید شد.

0x7FFF0000 تا0x7FFFFFFF

*********************************************************************

رزرو شده برای سیستم عامل.در این قسمت راه اندازهای ابزار و کدهای سطح هسته قرار میگیرد.در صورت تلاش برای دسترسی به این قسمت از طرف برنامه کاربری ,غیر هسته (ring3) , خطای Access violation بروز خواهد کرد.

0x80000000 تا0xFFFFFFFF

خلاصه
تااینجا یک سری از اصول برای شما بیان شد.اینها اصولی بودند که بایستی برای ادامه بحث آنها را میدانستید.در این قسمت,با پشته آشناشدیدوانواع آن را یاد گرفتید.با فرایند ها و نحوه سازماندهی آنها و ساختار آنها آشنا شدید.با سیستم سازماندهی حافظه مجازی آشنا شدید و نحوه تخصیص آدرس برای فرایند ها را تحت سیستم عامل ویندوز یاد گرفتید.
کاربردهای پشته را یاد گرفتید و دیدید که سیستم عامل اکثرا برای چه کاری از پشته استفاده میکند.ثباتها و دستورالعملهای مربوط به پشته را دیدید وفهمیدید که بافر چیست و انواع متغیر ها در کجا آدرس دهی میشوند.
در ادامه بحث خواهیم رسید به اینکه بافر اورفلو ,buffer overflow,چه هست و چگونه میتوان آن را تشخیص داد و چگونه میتوان از آن استفاده کرد.

 

**************************************************************************
منبع این مقاله : .:!:. KIMIANETWORKS .:!:.
http://www.kimianet.com

+ نوشته شده در  یکشنبه 2 اردیبهشت1386ساعت 20:5  توسط مایان  | 

ابتداء مطمئن شويد که يکی از دو سيستم win2000 or winxp ويا هر دو را نصب کرده ايد
 سپس روی start کليک کرده و وارد all programs می شويد.
بعد وارد accessories شده روی command prompt کليک می کنيم تا پنجره آن باز شود.
 در سطر فرمان دستور زير را تايپ کرده و کليد enter را می زنيم بايد توجه داشت که عمليات تبديل ۲۰ الی ۳۰ دقيقه طول می کشد
 دستور تبديل:
 convert drive_letter :/fs :ntfs
به جای drive_letter شما بايد نام درايوی را که می خواهيد عمليات تبديل بر روی آن انجام شود بنويسيد
بطور مثال:
 convert d :/fs :ntfs
توجه بين هر جزء دستور يک فاصله بايد گذاشته شود.

+ نوشته شده در  شنبه 1 اردیبهشت1386ساعت 16:57  توسط مایان  | 

فرض کنيد شما در حال چت با دوستتان در Yahoo! Messenger هستيد , فکر مي کنيد پس از پايان چت و خروج از Yahoo! Messenger چه اطلاعاتي از شما بر روي سيستم باقي مي ماند ؟ شايد فکر مي کنيد هيچ اطلاعاتي و ياحد اکثر ID شما بر روي سيستم باقي مي ماند . اما :در بيشتر گفتگوهايي که با استفاده از Yahoo! Messenger صورت مي گيرد , ID شما و طرف مقابلتان و از همه مهمتر متن کامل چت هايتان بر روي سيستم باقي مي ماند. باقي ماندن اين حجم از اطلاعات کاملا شخصي , حريم خصوصي شما را شديدا به خطر مي اندازد و افراد سود جو با نرم افزار هايي قادرند اين اطلاعات خصوصي شما را به سادگي بازیابی کنند . حال براي محفوظ ماندن و حفظ حريم خصوصي در چت چه کارهايي بايد انجام داد تا ديگر هیچ یک اين قبيل برنامه ها قادر به بازيابي اطلاعات شما نباشند ؟ به نظر ما لازم است شما با نحوه کار اين قبيل برنامه ها آشنا شويد تا بدانيد براي پيشگيري چه کار هايي را بايد پس از اتمام چت انجام دهيد تا هرگز دچار مشکل نشوید . نرم افزار Super Yahoo Messenger Archive Decoder قادر است تمام اطلاعات شما ( با چه ID هايي و با چه کساني چت کرده ايد و با آنها چه گفتگو هايي انجام داده ايد ) را از سيستم استخراج کرده و حتي آنها را به صورت HTML ذخيره سازي کند . حال اين نرم افزار را از اين لينک دريافت کرده و آن را نصب کنيد : http://www.piravi.com/ymdinst.exe با اجراي Super Yahoo Messenger Archive Decoder ملاحظه مي شود , نرم افزار آدرس C:\Program Files\Yahoo!\Messenger\Profiles را در سيستم جستجو مي کند . جستجو کردن اين آدرس توسط اين نرم افزار در سيستم نشان مي دهد که بخش اعظم اطلاعات باقي مانده پس از چت در اين مکان ذخيره مي شود و بايد پس از اتمام چت از سيستم پاک شود تا اطلاعات شما همچنان محفوظ باقی بماند. اين مسير در رجيستري نيز حاوي ID هاي شماست که براي چت از آن استفاده کرده ايد : HKEY_CURRENT_USER\Software\yahoo\pager\profiles حذف اين مسير پس از اتمام چت نيز توصيه مي شود . البته برملا شدن متن گفتگوها بسیار بدتر از لو رفتن ID است که امیدواریم هیچ کدام از این دست مشکلات برای هیچ کسی اتفاق نیفتد. تمام اطلاعات خود را پس از استفاده Yahoo! Messenger حذف کنید ! پس برای حذف این اطلاعات محرمانه مراحل زیر را دنبال کنید : 1 ) از منوی Start گزينه Run را انتخاب كنيد سپس تايپ كنيد Regedit پس از باز شدن پنجره ويرايشگر ريجستری به كليد زير برويد : HKEY_CURRENT_USER\Software\Yahoo\Pager\profiles در این مسیر تمام ID هاي افراد و اشخاصی که با آن چت داشته اند قرار دارد . پس برای حفظ حریم خصوصیتان این پوشه را یعنی پوشه profiles حذف نمایید . 2 ) یک پوشه به همین اسم (Profiles) در جایی که Yahoo! Messenger نصب شده قرار دارد .پس از هر بار استفاده آن را نیز حذف کنید.معمولا مسیر زیر : C:\Program Files\Yahoo!\Messenger\Profiles 3 ) اگر شما جزء افرادی هستید که در کافی نت و یا جا های عمومی دیگه از Yahoo! Messenger استفاده می کنید .بهتر پس از پایان کار حتما Yahoo! Messenger را کامل ببندید و حتما Yahoo! Messenger را از کنار ساعت نیز حذف کنید . انجام این کارها درعین حال که بسیار ساده است و به هیچ تخصصی نیاز ندارد ، به امنیت و حفظ حریم خصوصی شما بسیار کمک می کند.setarehsorkh.com
+ نوشته شده در  سه شنبه 18 مهر1385ساعت 15:6  توسط مایان  | 

از منوي Start گزينه Run را انتخاب كنيد و Regedit را تايپ كنيد تا داخل محيط ويرايش ريجستري شويد حالا به اين كليك در ريجستري برويد :
HKEY_CURRENT_USER\Software\Yahoo\Pager
و روی Save Password دو بار كليد كنيد و عدد 100 را در آن تايپ كنيد و OK بزنيد حالا
ياهو مسنجر را نگاه كنيد آخرين ID و Password ID می بينيد می توانيد باآن LOGIN
بشويد .
حال بايد يك برنامه كه از قبل آمده كرده باشيد كه پسورد روي ويندوز را بخواند كه با
آن بتوانيد پسورد درون ياهو مسنجر را بخوانيد.
اين كار شما مي توانيد در كافي نت انجام بدهيد چون پسورد شخص قبلي كسي
كه قبل از شما كار مي كرده اگر هم پسورد هم Save نكرده باشه مي توانيد در
بياريد .

توجه : شما مي خواهيد اين كارو در كافي نت انجام بدهيد اما مي بينيد هر چي
Regedi را در Run تايپ مي كنيد ويندوز Error به شما مي دهد اين به آن معنا است
كه رجستري ويندوز پسورد داره پس شما بيايد به جاي Regedi اين را regedt32 تايپ
كنيد ...
raminsoft.com
+ نوشته شده در  سه شنبه 18 مهر1385ساعت 13:42  توسط مایان  | 

از: مجله رايانه

پسوندهاي پنهان فايلهاي ويندوز
ممكن است از اين موضوع آگاهي نداشته باشيد، اما حتي اگر به ويندوز بگوييد كه تمام پسوندهاي فايل را نشان دهد، هنوز هم فايلهايي وجود دارند كه بطور پيش فرض مخفي شده‌اند. همچنين هر برنامه نصب شده‌ايي مي‌تواند پسوندها را پيكربندي كند تا پنهان شوند. در اينجا در مورد چگونگي انجام اين كار و همچنين دليل اينكه چرا برخي از پسوندهاي پنهان مي‌توانند براي تعدادي از كاربرهاي كامپيوتر خطرناك باشند، مثالهايي آورده شده است. به فرض اينكه شما قبلا ويندوز explorer را براي نشان دادن تمام پسوندهاي پيكربندي كرده‌ايد.

پسوندهاي SHS
يك كپي از notepad.exe بگيريد و آن را روي desktop خود قرار دهيد. Wordpad را باز كنيد. روي notepad.exe كليك كنيد و آن را به سمت سند باز شده wordpad بكشيد. روي notepad.exe كليك كنيد و آن را به عقب به سمت desktop بكشيد. فايلي را كه ايجاد شده است (Scrap) به Readme.txt تغيير نام دهيد.

حالايك آيكن كه نشان دهنده سند متني است و فايلي با نام مشخص readme.txt بر روي desktop شما وجود دارد كليك كردن بر روي فايل فوق باعث مي‌شود notepad باز ‌شود. اگر اين فايل يك Trojan باشد، شما فريب خورده‌ايد و توسط آنچه كه يك فايل متني بي‌خطر بنظر مي‌رسيد آلوده شده‌ايد. اگر اجازه نمايش اين پسوند داده مي شد شما فريب فايل Readme.txt.shs را نمي‌خورديد.

پسوندهاي PIF
اگر سعي كنيد تا notepad.exe را به anything.txt.pif تغيير نام دهيد، تنها فايلي با نام anything.txt روي desktop خود خواهيد ديد. و اين بدين دليل است كه PIF پسوند ديگري است كه ويندوز بطور پيش فرض پنهان مي‌كند. اگر شما فايل را اجرا كنيد برنامه اجرا خواهد شد، به خاطر اينكه ويندوز پسوندهاي PIF را اجرا خواهد كرد حتي اگر آنها فايلهاي اجرايي باشند.

پسوندهاي SCR
پسوند ديگري كه بايد مراقب آن بود SCR است. كپي notepad.exe خود را به notepad.scr تغيير نام دهيد و روي آن كليك كنيد. Notepad به عنوان يك فايل اجرايي اجرا خواهد شد. بسياري از افراد توسط هكرهايي فريب مي‌خورند كه account يك قرباني را بدست آورده‌اند. هكر email يا هر نوع پيغامي را به تمام دوستان قرباني مي‌فرستد كه "اين صفحه نمايش جديد و بامزه را ببينيد از خنده روده بر خواهيد شد!" از آنجايي كه اين پيغام از يك منبع مطمئن آمده، اكثر افراد فريب خورده و فايل SCR را اجرا مي‌كنند كه در نهايت به هكري ختم مي‌شود كه به كامپيوتر شما متصل شده است.

فرمانهاي خطرناكي كه مي‌توانند گنجانده شوند
پسوندهاي ميانبر PIF
برخي از پسوندهاي پنهان فايل قادرند به سادگي با فرمانهاي پنهان شده‌اي كه مي‌توانند براي سيستم شما مخرب باشند برنامه‌ريزي شوند. اين يك آزمايش ساده است:

دكمه راست ماوس خود را روي desktop كليك كنيد و New و سپس Shotcut را انتخاب نماييد. در Command line تايپ كنيد:


format a:/autotest



Next را كليك كنيد. در "Select a name for the shortcut" تايپ كنيد: readme.txt سپس Next را كليك كنيد. يك آيكن notepad را انتخاب كرده و Finish را كليك كنيد. حالا شما در desktop خود فايلي با نام readme.txt و با آيكن notepad داريد. مطمئن شويد كه در درايو شما ديسكي است كه از دست دادن آن براي شما اشكالي ندارد و روي آيكن كليك كنيد. فايلي كه شما روي آن كليك كرده‌ايد درايو A: را فرمت خواهد كرد. البته آيكن هكر درايو ديگري را مورد هدف قرار خواهد داد يا ممكن است نامي همچون ‘game.exe’ و فرماني براي حذف كردن دايركتوري ويندوز شما يا (deltree /y C:\*.*) كل درايو C شما داشته باشد. اگر پسوند PIF پنهان نشود، قادر به فريب شما نخواهد بود.

پسوند SHS
فايلهاي Scrap نيز مي‌توانند فرمانهاي گنجانده شده را پنهان كند. اين يك آزمون ساده است: از notepad.exe يك كپي بگيريد و آن را روي desktop خود قرار دهيد. Wordpad را باز كنيد.Notepad.exe را كليك كنيد و آن را به سمت سند باز شده wordpad بكشيد. روي Edit كليك كنيد و Package Object و سپس Edit package را انتخاب كنيد. روي Edit و سپس Command Line كليك كنيد.

در كادر، دستوري مانند format a:/autotest را تايپ كنيد و روي OK كليك كنيد. آيكن نيز مي‌تواند از اين پنجره تغيير يابد. از پنجره خارج شويد، اين كار سند را به روز خواهد كرد. روي notepad.exe كليك كنيد و آن را به عقيب به سمت Desktop بكشيد. فايلي را كه ايجاد شده (Scrap) به Readme.txt تغيير نام دهيد.

حالا شما آنچه را كه شبيه يك فايل متني است داريد. اگر اين فايل اجرا شود درايو A: را فرمت خواهد كرد. همانگونه كه در مثال بالا براي پسوندهاي ميانبر PIF ديده شد، هكر مي‌تواند از فرمانهاي خطرناكتري استفاده كند.

روشهاي Trojan در هنگام راه اندازي
روشهاي راه اندازي استاندارد
اكثر افراد از راههاي متفاوتي كه هكرها براي راه اندازي فايلهاي Trojan استفاده مي‌كنند آگاه نيستند. اگر هكري كامپيوتر شما را با يك Trojan آلوده كند، نياز به انتخاب يك روش راه‌اندازي خواهد داشت، بگونه‌اي كه در زمان راه‌اندازي مجدد كامپيوتر شما Trojan بارگذاري شود. روشهاي معمول راه‌اندازي شامل كليدهاي اجرايي registry، فولدر راه اندازي ويندوز، Windows Load= يا run=lines يافته شده در فايل win.ini و shell=line يافته شده در system.ini ويندوز مي‌باشند.

روشهاي راه اندازي خطرناك
از آنجايي كه فقط تعداد اندكي از اين روشهاي راه اندازي وجود دارند، هكرهاي زيادي را يافته‌ايم كه در پيدا كردن روشهاي جديد راه‌اندازي افراط مي‌كنند. اين شامل استفاده از تغييرات خطرناكي در سيستم registry مي‌باشد، كه در صورتي كه فايل Trojan يا فايل همراه آن از بين برود سيستم را بصورت بلااستفاده درخواهد آورد. اين يك دليل استفاده نكردن از نرم افزار ضد ويروس براي از بين بردن Trojanهاست. اگر يكي از اين روشها استفاده شود، و فايل بدون ثابت كردن registry سيستم از بين برود، سيستم شما قادر به اجراي هيچگونه برنامه‌اي پس از راه اندازي مجدد كامپيوترتان نخواهد بود.

قبل از آنكه سراغ registry برويم لازم به توضيح است كه يك فولدر به صورت C:\WINDOWS\StartMenu\Program\StartUp وجود دارد كه هر فايلي در اينجا باشد هنگام راه اندازي ويندوز اجرا خواهد شد.توجه داشته باشيد كه هرگونه تغييري مي‌تواند سيستم شما را به خطر بياندازد بنابراين، هرچه ما مي‌گوييم انجام دهيد. براي دستيابي به registry به منوي start>run> برويد و "regedit" را بدون علامت " " تايپ كنيد. در registry چندين مكان براي راه اندازي Startup وجود دارد كه ليستي از آنها را در اينجا مي آوريم.


[HKEY_CLASSES_ROOT\exefile\shell\open\command] ="\"%1\" %*"
[HKEY_CLASSES_ROOT\comfile\shell\open\command] ="\"%1\" %*"
[HKEY_CLASSES_ROOT\batfile\shell\open\command] ="\"%1\" %*"
[HKEY_CLASSES_ROOT\htafile\Shell\Open\Command]="\"%1\" %*"
[HKEY_CLASSES_ROOT\piffile\shell\open\command] ="\"%1\" %*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\batfile\shell\ open\command] ="\"%1\" %*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\comfile\shell\ open\command]="\"%1\" %*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\exefile\shell\ open\command]="\"%1\"%*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\htafile\Shell\ Open\Command]="\"%1\"%*"
[HKEY_LOCAL_MACHINE\Software\CLASSES\piffile\shell\ open\command]="\"%1\"%*"




اگر اين كليدها مقدار "\"%1\"%*" را نداشته باشند و به جاي اجراي فايل در هنگام راه اندازي به "\"Server.exe %1\" %*" تغيير يابد به احتمال زياد يك Trojan است.

روش راه اندازي ICQ
روشي راه اندازي ديگري كه امروزه استفاده از آن معمول است شناسايي شبكه ICQ مي‌باشد. بسياري از كاربران ICQ نمي‌دانند كه هكر مي‌تواند يك خط پيكربندي را به ICQ اضافه نمايد تا با هر بار بارگذاري شدن برنامه Trojan نيز راه اندازي شود. به عنوان آزمايش مراحل زير را انجام دهيد:

ICQ را باز كنيد. روي آيكن ICQ كليك كنيد و preference را انتخاب نماييد. روي Edit launch List كليك كنيد. روي Add كليك كنيد. روي Browse كليك كنيد. فايلي را براي اضافه كردن به Windows\notepad.exe بيابيد كه به كار اين آزمايش بيايد. روي Open و سپس OK كليك كنيد. زماني كه شما ICQ را راه اندازي مجدد مي‌كنيد فايل اجرا خواهد شد.
+ نوشته شده در  سه شنبه 15 فروردین1385ساعت 9:26  توسط مایان  | 

به نام خدا



با سلام
این یکی از جنجالی ترین مقالات روی اینترنت است.
نام مقاله:asp rider hacking
نویسنده:مهران گشتاسبی
asp rider یکی از portal های جدید می باشد که با asp نوشته شده بنا براین تنها روی IIS اجرا می شود.
برای hack این جور سایت ها 2 روش وجود دارد.

1 دانلود فایل دیتابیس

در این روش شما باید فایل دیتابیس رو دانلود کنید که این فایل حاوی username ,password ادمین(admin)
سایت می باشد.که ادرس default ان هم به صورت زیرمی باشد.
http://www.target.com/blogadmin/db/database.mdb
اگرشما موفق به دانلوداین فایل شدید می توانید انsite را به راحتی deface کنید.برای این کار شما باید اید فایل
را با برنامه ی ms access باز کنیدمی بینید که username,password در این فایل وجود دارد سپس برای
login کردن می توانید از ادرس زیر استفاده کنید.
http://www.target.com/blogadmin/login.asp
بعدش هم که دیگه سایت hack می شود.

setup.asp 2

در بعضی مواقع براثربی توجهی admin سایت فایل setup.asp پاک نمی شود که شما باید از این موقعیت
استفاده کرده و سپس asp rider رو دوباره setup کنید.که برای این کار شما باید به ادرس زیر مراجعه کنید.
http://www.target.com/blogadmin/setup.asp

راه های جلوگیری از hack

1 تغییر نام فایل database.mdb
2 تغییر مسیر فایل database.mdb
3 پاک کردن فایل setup.asp

+ نوشته شده در  دوشنبه 27 تیر1384ساعت 12:36  توسط مایان  |