27.6.2011

מסה שקולה לאנגרייה - והפעם - אנרגייה קינטית (אחת מנסחאות אלבט אנשטיין)

אז אחרי קורס מעולה בנושא תורת היחסות הפרטית, מפי ד"ר עופר מגד בחמד"ע, ואחרי מספר שעות של נסיונות הוכחה כושלים של הנוסחא הזו ביקשתי עזרה מהמרצה. (מיד העלה את הקובץ) אך רק לפני כן אני הקדיש כמה מילים על הנוסחא הזו
ועל מה שהיא מציינת.
לאחר פיטוח די מטורף של תורת היחסות הפרטית היה ניסיון ליסם את המסכנות ואת צורת החשיבה שלה על המונח אנרגיה שהיה קיים עד הרבה לפני.
אנרגיה בפיזיקה היא - "כמות הכוח הפועל לאורך מסלול". בשפה יותר פשוטה - האנרגיה שלי היא גודל (סקלר) שמתקבלת מפעולות חשבון בין הכוח שאני מפעיל לבין המרחק שבוא הכוח הופעל. (יש לציין שזהו בכללי הגדרה של "עבודה" אך כמו שניראה בהמשך אנו מתחסים לעבודה והאנרגיה כשווים בגלל נקודת המוצא שבחרנו.)
בצורה מתמטית אנרגיה היא אינטגרל של כוח לפי ווקטור הדרך. ומיכאן העלה את קובץ השניכתיו על ידי
ד"ר אופר מגד


הוכחה לכך שאנרגיה קינטית שקולה למסה...

הבה נפעיל על גוף שמסת המנוחה שלו היא כוח כך שהגוף צובר מהירות לאורך זמן. מחד גיסא, משפט עבודה אנרגיה מספר לנו שהעבודה המתבצעת על הגוף שווה להפרש האנרגיות הקינטיות. ובפרט, עבור גוף המתחיל תנועתו ממנוחה נקבל . מאידך גיסא, נוכל לרשום:

עתה נניח (לצורך נוחות הדיון) שהכוח פועל בכיוון התנועה כך שמתבצעת תנועה לאורך קו ישר. במקרה זה נוכל לעבור מווקטורים לסקלרים כיוון ש- . הבה נחשב עתה את:


אנו נרצה לעבור לאינטגרציה על המשתנה y . לשם כך נרשום את v^2  כפונקציה של  y^2 וגם נוציא דיפרנציאל לשני האגפים:


נציב את הדיפרנציאל בביטוי עבור העבודה, נעזר בתוצאה מלמעלה ונקבל (שימו לב, אנו עוברים לאינטגרציה לפי y ולכן גבולות האינטגרציה משתנים בהתאם):



באשר m היא המסה הרלטיביסטית. מה כל זה אומר לנו? ש-  . כלומר האנרגיה ההתחלתית ניתנת ע"י הגודל  , האנרגיה הסופית ניתנת ע"י   וההפרש ביניהם הוא האנרגיה הקינטית...
אני רוצה לומר תודה שוב לאופר על ההסבר המצויין ועל קורס יוצא מגדר הרגיל :)

בינה מלאכותית הבסיס

יותר מידי זמן לא כתבתי פה בגלל חוסר זמן ופטעום החופש הגדול מתחיל לבצבץ פה ושם , למרות שנישאר עד אחד למנאייק (ביטוי שמדגיש את מספר הבגרויות שנותרו לי ולחברים שלי לעשות) אני חוזר לכתוב פה ובגדול אני מתחיל את תוכנית חיי - לצור אדם כצלמי כדמותי :)
הבלוג הזה ישמש אותי כמו יומן שאני יתעד בו כל שלב ביצירה ואחרי זה אני יוכל להשתמש בזה בשיביל הביביוגריפייה שלי :) הגב - ביביוגרפייה - שמעתי משפט יפה "אם נכונה האמרה כי כל המלבין פני חברו ברבים כאילו שופך דמים , הרי שכל ניסיון אמיתי לחבר אוטוביוגרפיה הוא מעשה של הרס עצמי - אלבר קאמי"

טוב מספיק עם השטויות מתחילים לעבוד - הרעיון המרכזי בכתיבה של תוכנה שלומדת בעצמה הוא בבסיסו ליצור תוכנה שמשפרת את היכולות של עצמה - לשם כך האדם מנסה את כוחה של האבולוציה.

טוב בראשית התכתיבה טיפה תאורייה , אז אמרתי שהאדם משתמש באבולוציה? אז נסביר בדיוק מה זה אבולוציה והדרך הטובה ביותר היא דוגמה , ניתמקד בווירוס השפעת - תמיד שומעים בחדשות שהוא מתחסן לאנטיביותיקות.
מה זאת אומרת מיתחסן??? אז במילים יותר אמיתיות הוא לא מתחסן אלה הוא עובר תהליך שניקרא - החזק סורד . בדיוק ככה - אותו חוק שכולנו למדנו בגן - חוקי הג'נגל - זה בעצם האבולוציה.
אז מה שקורה הוא כזה - ניקלח צלחת פטרית ונגדל שם חיידקי שפעת - אחרי כמה זמן נשפוך אנטיביוטיקה על כל הצלחת - כמובן שכול החיידקים צריכים למות ! אבל מה שקורה שלא תמיד כולם מתים.
אם תכחו 20000 צלחות בסופו של דבר תצליחו למצאו כמה חיידים שסרדו את האנטיביוטיקה - אומנים אם חלשים נורא אבל הם סרדו! ואז הם ורק הם מתרבים וגם הצעצעים שלהם סורדים את האנטיביוטיקה כי אילו אותם הגנים וככה יש זן חדש של ווירוסי שפעת שהאנטיביוטיקה לא עוזרת נגדם, אבל למה מלחתחילה היא לא עבדה? לשאלה הזו יש תשובה פשוטה - מוטצייה - (טיפה רקע לפני - כל תא לא משנה מאיזה סוג אם זה בגוף האדם או יצור חד-תאיי משתחפל בכך שאותו צופן DNA שמגדיר אותו ניפתח ואז מתבצעת קראה של המידע ועל פי המידע הזה התא יותר תא חדש בדיוק אחד לאחד כמו שהיה כתוב ב DNA כלומר אותו תא בדיוק) עכשיו בכל פעם שסליל DNA ניפתח על מנת להשתחפל לפעמים ההעתקה לא יוצאת בדיוק אותו הדבר לפעמים יש "שגיאת כתיב" (אירוני שאני משתמש במוסג הזה אה?) בכל אופן זה ממש מקרה די נדיר ורוב הפעמים החלבונים או מה שזה לא יהיה שנוצר מאותו DNA אין לו שימוש והוא ניזרק אבל לפעמים אותם "שגיאות כתיב" אותם "באגים" - אותם מוצטיות שלא הועתקו כמו שצריך בגלל אותם טעויות הופכים ליותר חזקים יותר טובים וכו'
זה בכללי מה שהביא את האדם למה שהוא היום , הקופים הכי חזקים הכי חכמים שידעו שלמדו ללכת שלמדו לבנות דברים - הם אילו שסרדו וככה הדור הבא מתפתח.

עכשיו איך זה קשור לחבר החדש שאני הולך לאתחיל לכתוב עד פחות מחודש? אז התאורייה של התוכנה שלומדת היא פשוטה , ניצור דרך שבא התוכנה יכולה לקבל החלתות מסויימות וכל פעם שהיא מקבלת אחלתה לא טובה היא מפסידה נקודה וכל פעם שהיא עושה משהו טוב היא מקבלת נקודה - בסופו של יום התוכנות עם הניקוד הכי גבואה נישמרות אבל נוספות למשחק עד תכנות חדשות שהן בעצם שיבוטים של התוכניות הכי טובות שהזכרתי קודם אבל עם באגים פה ושם מה שאנו קוראים מוטציות , ואז מתחילים שוב לספור ניקוד ושוב ההכי טובות נישמות ועוברות מוטצייה והשאה ניזרקות
ככה בסופו של דבר היו לי תוכנות שעושות בדיוק מה שרציתי - אבל הן עושות את זה בדרך שהן

איך עושים את זה?
אז ככה - כשאני ניכנסתי לתחום למדעתי על שיטה של מטריצות - אני אישית כבר לא הולך להשתמש בשיטה הזו כי לדעתי מצאתי שיטה יותר יעילה ונוחה אבל כבר ניראה מה נעשה.
בכל אופן אני הולך להסביר איך עובדת השיטה הזו- לוקחים מטריצה שהיא "טבלה" לטבלה מכניסים ערכים נגיד בין מינוס 5 ל 5 כולל שברים וכו' ואז קוראים לאותה טבלה - המוח - אחרי זה יוצרים סביבת משחק - כלומר - מין מגרש ששם המוח יפעל , למשל זה -







כן אני יודע כמה מה זה ניראה -__-" . בכל אופן זו היא סביבת המחשק הראשונה שראיתי (חבר צייר) המשחק הוא פשוט - אסור לעלות על החלקים השחורים ואסור לצאת מחוץ למסגרת , כמובן שהתמונה שאתם רואים מומרת גם היא למטריצה , המוח ניטען למקום לבן על הלוח ומקבל כל פעם את 8 המשבצות שסביבו (גם בצורה של מטריצה) ואחרי פעולות של הכפלת מטריצות בין המוח לבין הקלט (8 המשבצות שסביב המיקום של המוח בלוח) וכו מתקבלת תוצאה ועל פי התוצאה הזו המוח זז ימינה שמואלה למעלה למטה אלכסון וכו' - במידה המוח ניכנס לעזור שחור או יצא מגבול או שהוא מת כי הוא יצא מהלוח או שהוא מעבד נקודה - אם הצעד הבאה שלו היה למשבצת לבנה הוא מקבל נקודה פלוס - וככה הלאה כמו שהסברתי למעלה - מחדירים מוטציות וכו' ושמעו כשאני בניתי את הקוד הזה ב MLS והרצה של לילה שלם יצא לי מוח שפשוט עושה את העבודה - כן עם טיפה באגים (כאילו מה זה באגים הוא היה ניכנס לאיזה פינה ולא היה יוצא ממנה - כל פעם הולך לנקודה לבנה וחוזר לנקודה הקודמת וככה האלה - בתחלס הוא מקבל את מקסימום הנקודות אבל זה לא מה שציפינו - הייתי יכול לפתור את זה עם הייתי מוסף מטריצת זיכרון אבל למי יש כוח היה לי דברים אחרים לעשות). בכל אופן זה עובד זה יפה והמטרה ברור! אדם!

טוב בכייף - מאיפה מתחילים?
טוב בשלב הזה אני קימעת באותו מצב כמוכם (רק שלי יש טיפה יותר ידע מעשי ואני באנגאובר XD מתן מזל טוב בחור D:) טוב אז נתחיל מהקל לקשה (פאק עד עכשיו כתבתי 4 פעמים -טוב-) - כלומר - ניבנה את העולם שבו האדם יתפקד (סביבת המשחק) מטעמים אישיים אני יקרא למקום הזה -גן עדן- או ג"ן בקיצור - טוב נתחיל לקראו מדבריכים? חח את זה אני כבר ישאיר לפוסט הבאה.

19.3.2011

hackthissite.org - Application Challenge 1,2,3,4,5,6 (easy)

מסתבר שיש די הרבה כניסות לבלוג שלי דרך קישורים הקשורים לאתר hackthissite (שמתם לב לצירוף הצמוד? XD )
חח קיצור אחרי אופורייה מטורפת של פיטרון שלב 5 ועל אותו הגל פיטרון של שלב 6 אני מפרסם את כל הדרכים לפטרון החלק הקל של אתגר משימות התוכנה - משימות 1 עד 6 :)  יאללה D: או כמו שאני תמיד אומר....
Last Go YoYo!!


שלב ראשון!

כמו כל משימה ראשונה - חרטה דבר - פותחים את הקוד אסקי של הקובץ על כתבן ולאחר סריקה של שניות עם העניים מוצאים את הסיראלים שאיתם ניתן לקבל את הקוד :)


שלב שני!

כתוב במפורש שאנו חייבים להתחבר לאינטרנט! זאת אומרת שתוכנה מאמתת את הסיסמה שלנו עם סיסמה ששמורה איפה שהוא באינרנט , אישית כשאני ניכנסתי לזה בפעם הראשונה ישר פתחתי Wireshark (הוא כבר היה פתוח חח)  מצאתי את המיקום של הקובץ באינטרנט. גם חיפוש של המחרוזת "http" בקוד אסקי של הקובץ יניב את אותה התוצאה :)


שלב שלישי!

 שוב אנו חייבים להיות מחוברים לאינטרנט , לאחר שימוש בתוכנה Wireshark (שוב חיפוש של המילה HTTP תמצא אותו הדבר) נימצא הקישור הבאה:
/missions/application/app3/auth.php?key=
כמובן שהכתובת המלאה היא:
http://www.hackthissite.org/missions/application/app3/auth.php?key=XXX
עבור כל סיסמה שאנו כותבים במקום ה-XXX הקוד PHP מחזיר האם זו הסיסמה או לא - הקובץ EXE שלנו בודק מה האתר מחזיר ועל פי זה הוא מציג או לא מציג לנו את הסיסמה - כלומר... אם הסיסמה שגויה האתר מחזיר FALSE התוכנה רואה שהוא מחזיר זאת ואז היא כותבת שהסיסמה שגויה :) נישאלת השאלה - אם נערוך את התוכנה כך שהיא תציג את הסיסמה במידה והאתר החזיר פולס? במילים אחרות - מה יקרה אם אני משנה את המילה טרו לפולס בתני :
if ($wordfromsite == "True") reutrn ThePassword
אז לא בעיה :) אני עורך את הקובץ עם התוכנה hex idetor אבל אפשר עם כל תוכנה , פשוט חפשו את המילה False ותשנו אותה ל true :) עד שזה יעבוד חח 


שלב רביעי!

חחח כמה שברתי ת'ראש עם יותר מי 5 תוכנות בניסיון לפטור את זה XD בכל מיקרה בסופו של דבר עזבתי את הדרך הקונבנציונלית להלכתי בדרך שלא ניראת כל כך יפה בכללי (בדיאבד אין דבר כזה דרך לא קובנציונלית!) אז פרשתי לגוגל בחיפוש אחר decompiler של VB , המטרה: לראות את קוד המקור של התוכנה וכך למצאו את הסיסמה :) חיפושי בגוגל הביאוני אל התוכנה  VB Decompiler Lite - חמודה מאוד - הדבר שהיא צריכה לעשות הוא להציג את הקוד סורס של קובץ VB , (אישית לא הצלחתי לעשות את זה - התוכנה קורסת :\ ) אך במקום לעבור על השורות סורס עשיתי משהו אחר, הקטע הוא שהתוכנה מספקת דבר נוסף =>
אז למי שלא מבין VB :
VB היא שפת איבנטים - כלמור - כל פעולה מסויימת מריצה קטע קוד שכתוב לאותה פעולה
דוגמה: אם תחת האיבנט command1_click כתבתי msgbox("jf48jds") X מה שקורה שברגע שהפעולה CLICK (לחיצה) הופעלה על האבג'קט command1 (שמו של הכפתור) אז קטע הקוד ירוץ.
התוכנה מראה לנו את כל האיבנטים שמופיעים בתוכנה - יש 7 איבנטים -
הראשון איבנט שרץ כאשר התוכנה ניפתחת
השני השלישי והרביעי איבנטים שקשורים ללחצן הראשון
חמישי שישי שביעי איבנטים שקשורים ללחצן השני
הדבר הנוסף שהתוכנה מציגה לנו (מסומן בירוק) הוא השורה בזיכרון בה מתחיל אותו קטע קוד שקשור לאותו איבנט
כלומר - בשורה 402AD0 מתחיל הקטע קוד של שניכתב לאותו אינבט \ במיקרה של השורה הזו זה האיבנט Command1_click
נישאל את השאלה - מה יקרה אם יתחיל לרוץ במקום האיבנט של הMuseMove האיבנט של ה- CLICK ? כאילו יש לי את השורות ואני יכול לשנות אותם אז כאילו למה לא? :)
מי שעד לא הבין מה לעשות פשוט לכו לתוכנה ODBG תגיעו לשורה של ה MuseMove ותשנו את הקטע קוד שכתוב שם (posh משהו) ל jmp XXX כאשר XXX זו השורה של האיבנט Click לאחר מיכן תזיזו את האחבר על הלחצנים ותיראו מה קורה :)




לפני השלבים הבאים טיפה רקע על התוכנה שנישתמש בה -
ODBG - גיליתי את התוכנה הזו לפני כמה שבועות , משהו עצני :)
הורדה וזה: http://www.ollydbg.de
טיפה רקע על התוכנה:
קובץ EXE שמתפיס על חלון ה- CMD (השחור שניפתח ברגע שאנחנו לוחצים על הקובץ) את המילים HELLO WORLD כתוב בכניראה ב C/C++/C# וכו' אך איך לעזאזל המחשב יודע לפרש את פקודות ה C ? איאפשר לדבר עם המעבד ולומר לו על פעם שאתה רואה X תעשה Y זה לא עובד ככה, אבל מה שכן עובד זה מספר פקודות ששמורות לו והוא יודע לבצעה אותם כמו תוקי , למשל אם אני יגיד למעבד תכניס את המספר 1 למשנה בשם AX , את זה הוא יודע לעשות יפה מאוד :) איך מהכנסה של הערך 1 לעוגר (משתנה) AX אני יוצר את המנועה הגרפי של קריסיס 2 זה סיפור שלם בפני עצמו - תורה שלמה וגדולה מאוד בשם אסמבלר - אך לעיינינו שלנו נבין בסך הכל של מה שהתוכנה אומרת למחשב לעשות אנו יכולים לראות , לשנות , להוסיף, ולימחוק :) ועכשיו מתחיל הכייף D:
מה ש-ODBG עושה היא נותנת לנו את האפשרות לראות , לשנות , להוסיף, ולימחוק בצורה קלה יפה ופשוטה מאוד במקום לעשות זאת ידנית (אפשרי לגמרי).

עד אתר נורא יעיל - http://home2.paulschou.net/tools/xlate
המרה ישירה מי בסיס 2 10 16 64 אסקי והצפנות MD5/4/2 

 שלב חמישי!
החשיבה מאוד פשוטה - אני מכניס סיסמה - התוכנה משווה אותה עם הסיסמה שהיא יודעת שהיא הנכונה - במידה שהן אותו הדבר מחזיר נכון - במידה ולא - שגויה , הגיוני לא? עכשיו נבודד פה משהו חשוב - משווה את הסיסמה לאותה סיסמה שלי - אם אני ימצא את הסיסמה שהתוכנה משווה לסיסמה שלי.... יפה לא? הקטע שהסיסמה לא שמורה ככה סתם כמו במשימה הראשונה הוא יוצר את הסיסמה בעצמו ככה שאיאפשר למצאו אותו בסורס.
אז כמה טיפים לפריצה מהסוג הזה :
1-תלמדו אסמבלי
2- תמיד תתחילו מהסוף! תחפשו את השורת ה ASCII שאומרת שהסיסמה שהוכנסה לא נכונה , מאותה שורה תעלו למעלה ותחפשו איזה קפיצה מביעה לאותה שורה je jb וכו' , לפני אותה קפיצה צריכה להיות הפקודה CMP שמשווה בין שני ערכים.
אחד הערכים הוא הסיסמה שלכם - והשני זה הסיסמה הנכונה -

אז אחרי חיפושים הגעתי לדרך הזו -
הכניסו את התוכנה ל ODBG תחלצו ctrl + G תגיעו לאדררס 004010C3
השורת קוד צריכה להיות כדיל כמאן :
CMP EAX,DWORD PTR SS:[EDX*4+EBP-18]
השורה הבאה:
JE SHORT 004010DA

אז ככה , השורה הראשונה משווה בין הערך שנימצא בעוגר EAX לערך שנימצא בזיכרון במקום:
SS:[EDX*4+EBP-18]
התוכנה ODBG מראה את הערכים הנימצאים בכל אחד מהמקומות האילו ברגע שהיא נימצאת על השורה 
אז מה שנעשה נלחץ דאבל קליק על הקוד אסקי של הפקודה (עמודה שנייה) מה שגורם למספר השורה להיות באדום (עמודה ראשונה) מה שעשינו הוא לומר לתוכנה לעצור את הרצת התוכנה ברגע שהיא תגיע לשורה הזו
אחרי כל זה נילחץ על לחצן ההרצה (משולש פונה ימינה כמו תמיד) בחלון התוכנה שניפתח נכניס את הסיסמה 123456 ואנטר - ברגע התוכנה נימצאת על השורה 004010C3 ניתן ליראות למטה מיתחת לחלון הראשי חלון יותר קטן שם כתוב את הערכים שנימצים ב EAX / SS:[EDX*4+EBP-18] X - הערך כמובן מוצג ב Hex
אז פשוט נשתמש באתר http://home2.paulschou.net/tools/xlate על מנת לתרגם את האקסה לתווים.
עכשיו מה שנעשה זה נילחץ F8 פעם אחת, מה שעשינו היה לומר לתוכנה ODBG לבצע את השורה שהיא סימנה:
CMP EAX,DWORD PTR SS:[EDX*4+EBP-18]
ולעבור לשורה באה - >
JE SHORT 004010DA
מה שהשורה שנייה עושה נורא פשוט - היא קופצת לאדררס 004010AD רק במידה והדגל ZE דולק (1 ולא 0) 
הדגל ZE מושפע מהפעולה CMP (שורה ראשונה)  במידה והערכים שהשוונו באמת שווים אז הדגל הופך ל 1 אם הם לא אז הדגל הופך ל 0 , מין הסתם הערכים לא היו שווים כי הסיסמה שכתבנו 123456 היא לא הסיסמה הנכונה לכן לפני שנידרוש מהמחשב לבצע את הפדוה הזו (F8) נשנה ידנית את הדגל ZE ל 1 - אפשר לעשות את זה דרך החלון בצד ימין . נילחץ F8 התוכנה תקפוץ מספר שורות למעלה ואז נמשיך ללחוץ F8 עד שנגיעה שוב לשורה הראשונה וככה ונחזור על הפעולות - כל פעם נפענח עד חלק של הסיסמה עד שבסופו של דבר הקוד יסתיים. וזהו :)
שימו לב שהקוד אסקי של הסיסמאות הפוך! כלומר הוא לא משווה 1234 עם ASDF הוא משווה 4321 עם FDSA.

תמונה שסימנתי שם את כל מה שדיברתי עליו במשימה הזו:


שלב שישי!
שלב שישי בדיוק אותו הדבר כמו שלב 5! רק עם טריק קטן , אין לי מוסג איך או למה אבל כאשר מריצים את הקוד בתוכנה ODBG חלק מהפקודות (החלק שאנחנו רוצים) לא מופיעה בצורה טובה - אנחנו לא רואים שם דבר שאפשר לעבוד איתו (מי שיבדוק יבין על מה אני מדבר)  בישביל לפטור את זה צריכים לבצעה כמה פעולות , דבר ראשון הולכים לראש קטע הקוד שמשם הפקודות לא ניראות טוב (אצלי זה מישורה 004010D5) . זה מתחיל ישר אחרי הפקודה:
JMP SHORT 00401116
מה שעושים מסמנים הכל (קליק רצוף) משם עד סוף הבלוק הזה של הפקודת (אצלי זה שורה 004011C4
קליק ימיני על אחת השורות:
Edit => Binry Edit
מעתיקים את כל הקוד HEX שיש שם , לאחר מיכן חוזרים לשורה הראשונה (אצלי זו שורה 004010D5) לחצים רק עליה ולאחרי שרק היא מסומנת לחצים עליה קליק ימיני ושוב
Edit => Binry Edit
ובמקום השני מספרי HEX שיש שם מדביקים את כל מה שהעתקתם. עושים אישור וזה צריך לפתור את הבעיה
חוזרים על איכרון הפריצה של שלב 5 וסיימנו :) 

בהצלחה לכולם ! מקווה לתגובות לשם שינוי :) 
כל הזכיות שמורות ל Vendetta -  The Last Dimension

11.3.2011

מטריצות :)

כידוע לכם אני כותב לרוב במירק סקריפט ולמי שיצא לעבד עם התוכנה כניראה הבין שאין שם כלום XD אז אחרי דיונים כאילו ואחרים כתבתי את הפונקציה matrix על מנת לתת קלי נוסף למתכנתים וכו'
אני רוצה לציין שהפוסט הזה הוא הפוסט הראשון בסידרה די גדולה (אני מקווה) של פוסטים שיעשקו באחד מהמטרות שלי בחיים והיא לצור בינה אנושית מלחותית , תצחקו :) זה בראי . עכשיו נתחיל -

MLS:
//Matrix new name x y z
//Matrix close name
//Matrix move name x y z text
//echo -a $matrix(name).info
//echo -a $matrix(name,x,y,z)

alias Matrix {
  if ($prop == info) return $hget(Matrix,$1)
  var %checkid = 0
  if ($isid == $false) %checkid = 1
  if (%checkid == 1) {
    if ($1 == new) {
      tokenize 32 $2-
      if (!$3) { echo $color(info) -sa * Too few parameters: Matrix | goto error }
      else {
        if ($26) { echo $color(info) -sa * Too many parameters: Matrix | goto error }
        else {
          if ($window($+(@,$1))) {
            hdel -w Matrix $1
            window -c $+(@,$1)
          }
          var %x = 2 , %sum = 1 , %all
          while ([ $ [ $+ [ %x ] ] ]) {
            %all = %all $v1
            %sum = $calc(%sum * $v1) 
            if ($v1 !isnum) { echo $color(info) -sa * Index mast be a number: Matrix | goto error }
            inc %x
          }
          window -h $+(@,$1)
          %x = 1
          while (%x <= %sum) { echo $+(@,$1) 0 | inc %x }
          hadd -m Matrix $1 %all
        }
      }
    }
    if ($1 == close) {
      hdel -w Matrix $1
      window -c $+(@,$1)
    }
    if ($1 == move) %checkid = 2
  }
  if (%checkid == 2) || (%checkid == 0) {
    if (%checkid == 2) tokenize 32 $2-
    else tokenize 32 $1-
    var %x = $0 , %n , %text , %info , %i = 1
    %info = $hget(Matrix,$1)
    while ($gettok(%info,%i,32)) {
      if ([ $ [ $+ [ $calc(%i + 1) ] ] ] > $v1) { echo $color(info) -sa * Deviation from the limit: Matrix | goto error }
      inc %i
    }
    %text = [ $ [ $+ [ %x ] ] ]
    dec %x
    if (%checkid == 2) dec %x
    if (%x !== $numtok(%info,32)) { echo $color(info) -sa * Discrepancy between the number of indexes in the matrix and what is introduced: Matrix | goto error }
    else {
      var %i = 1 , %Function = $replace($MatrixFunction(%x),0,$2) , %v1
      while (%i < %x) {
        %v1 = [ $ [ $+ [ $calc(%i + 2) ] ] ]
        ;%v1 = [ $ [ $+ [ $0 ] ] ]
        %Function = $replace(%Function,$chr($calc(%i + 64)),$gettok(%info,%i,32),$chr($calc(%i + 161)),%v1)
        inc %i
      }
      if (%checkid == 2) rline $+(@,$1) $calc(%Function) %text
      else return $line($+(@,$1),$calc(%Function))
    }
  }
}
alias MatrixFunction {
  if ($1 > 1) {
    var %x 1 , %all , %save
    while (%x < $1) {
      %all = %all $chr($calc(%x + 64)) %save * ( $chr($calc(%x + 161)) - 1 ) +
      %save = %save * $chr($calc(%x + 64))
      inc %x
    }
  }
  return %all 0
}
קוד נורא יפה לטעמי למבד החלק של האלייס השני - עשיתי את זה בנסיון לפשט את הקוד כדי שיהיה יותר קל לקרוא ממינו אך לצערי רק סיבחתי :\ 
אז יש לנו מימוש של מטריצות , יש עד כמה דברים שהייתי רוצה לפרסם בנושא:
כפל בין שני מטריצות וחזרה של מטריצת ההכפלה.
MLS: 
mcasd <name1> <name2> <name3>
alias mcasd {
  Matrix new $3 $gettok($Matrix($2).info,1,32) $gettok($Matrix($1).info,2,32)
  var %x = 1 , %y = 1 , %z = 1 , %i = 1 , %sum = 0
  %x = 1
  while (%x <= $gettok($Matrix($1).info,2,32)) {
    %z = 1
    while (%z <= $gettok($Matrix($2).info,1,32)) {
      %y = 1
      while (%y <= $gettok($Matrix($1).info,1,32)) {
        %sum = $calc(%sum + ( $Matrix($1,%y,%x) * $Matrix($2,%z,%y) ))
        inc %y
      }
      Matrix move $3 %z %x %sum
      %sum = 0
      inc %z
    }
    inc %x
  }
}
מציג מטריצות בצורת טבלה
MLS:
alias showmatrix {
  var %x = 1 , %y , %text
  while (%x <= $gettok($matrix($1).info,2,32)) {
    %y = 1
    %text = $null
    while (%y <= $gettok($matrix($1).info,1,32)) {
      %text = %text $matrix($1,%y,%x)
      inc %y
    }
    echo -a @ %text
    inc %x
  }
}

אלי בהמשך יהיה מאמר על כפל מטריצות לכו תדעו :)
כל הזכיות שמורות ל Vendetta -  The Last Dimension

6.3.2011

hackthissite.org - Basic missions - 1,2,3,4,5,6,7,8,9,10

http://www.hackthissite.org/missions/basic/1/
חפשו את הסיסמה בקוד HTML של האתר , יותר מזה אין מה לעשות.
http://www.hackthissite.org/missions/basic/2/
שוב משעמם , ניצבת טענה שהקוד משווה את הסיסמה עם סיסמה שנימצאת בקובץ טקסט אחר אבל הקובץ לא העלה , אזי בזמן הקראה הוא יקבל ערך ריק - NULL כלומר צריך בסך הכל לשלוח (או לא לישלח) כלום וכך עוברים שלב.
http://www.hackthissite.org/missions/basic/3/
לאחר קראה של פעולת שליחת הנתונים מסתבר שבשליחה נימצא INPUT מוסתר שמכיל את הערך password.php... מעניין מה יש שם -_-".
http://www.hackthissite.org/missions/basic/4/
מוצגת לפניינו הנחה שהמתכנת מסוגל לשלוח לאימייל שלו את הסיסמה - אחרי קראה של מקור הדף ניתר ליראות שצויין האימייל שאליו תשלח הסיסמה ומידה והמתכנת ירצה בזה - מה יקרה עם נשנה לאימייל של משהו אחר? אישית אני משתמש ב firebug בישביל העריכה הזו אבל אפשר לפתוח דף HTML חדש וכו'.
http://www.hackthissite.org/missions/basic/5/
לדברי המשימה כניראה פתיחה של דף HTML משלנו לא תעשה את העבודה כניראה הוסתר שם משהו וכו' . שימוש בתוכנה firebug עם חזרה על מעלך הפריצה של המשימה הקודמת תעביר אותך שלב.
http://www.hackthissite.org/missions/basic/6/
כמו שהבנתי צריך למצאו את הפונקציה שמקמפלת להבין מה היא עושה שם בדיוק ולחזור על הפעולות עם הקוד הנתון. אישית אני פשוט הבנתי את חוקיות של האצפנה וכך פרצתי , אני מצרף קוד שמחזיר את הסיסימה הדורשה לשלב הבא
MLS:
  var %x = 1 , %sad
  while ($mid(69;de>87,%x,1))
  {
    %sad = %sad $+ $chr($calc($asc($v1) + 1 - %x))
    inc %x
  }
  echo -a @ %sad

http://www.hackthissite.org/missions/basic/7/
שלב חמוד האמת , מצויין לנו שלפניינו אפשרות להשתמש בפקודה cal של UNIX , במילים אחרות יש לנו פה אפשרות לריץ פקודות UNIX :) חמוד לא? אז צויין שאנחנו צריכים למצאו את הקובץ והפקודה שמציגע לנו את כל הקבצים בסביבה היא לא אחרת מאשר LS
 כמובן שסתם ככה זה לא יעבוד  - נעלץ לעזריק את הפקודה הנ"ל למערכת , נעשה זאת בעזרת הוספת התיו ; שמציין פקודה חדשה במרית השפות 
; ls

http://www.hackthissite.org/missions/basic/8/
האמת שזה שבר לי ת'ראש חח , אז ככה מסתבר שבPHP אפשר לזריק פקודות לשרת שליו הוא רץ, התחביר 
<!--#exec cmd="CMD"-->
אנו שוב צריכים שם של קובץ שנימצא שם אז אותו חרטה כמו במשימה הקודמת ויאללה למשימה הבאה
<!--#exec cmd="ls ../"-->
http://www.hackthissite.org/missions/basic/9/
מריכים את הסוף הא?  אז כל החפירה שנימאת שם אומרת בפשטות שהבאג שהיה במשימה הקודת נחסם אבל אולי יש משהו בדברים שכבר עשינו שיוכל לעזור לנו לפרוץ את המשימה החדשה? אז אולי באמת יש משהו כזה - בחזרה למשימה הקודמת! וכאן הדיין יש את הבאג , הפעם נזריק פקודה אחרת , חדשה - תנחשו לבד איך היא תראה :)
<!--#exec cmd="ls ../../9"-->
 http://www.hackthissite.org/missions/basic/10/
אישית לא הייתי מציב את המשימה הזו כאחרונה אבל פסדר בקטנה - הכל בגוף השאלה , אני צריך להכניס סיסמה על מנת לקבל גישה לדף הבאה.. מעניין...חירבוש של סיסמה מחזירה הודעה על כך שאין אני מורשה לצפות בדף זה - הרשאה.... נחמד....קוקיז אולי? אישית אני משתמש בקוקיז אדיטור - מין תוסף לפייפוקס אבל אתם יכולים לעשות את זה איך שבא לכם 
חפשו את הקוקיז תערכו אותו כמו שצריך ליש לך את המשימה האחרונה בכיס D: 
בהצלחה :) 
כל הזכיות שמורות ל Vendetta -  The Last Dimension

26.2.2011

פוסט ראשון - Dont say Vendetta for nothing

שלום קוראים לי תומר וזהו הבלוג שלי :) אני אפרסם פה מידי פעם ופעם דברים שאני עושה או כותב

אז הדבר הראשון שהפרסם הוא מדריך די נחמד שכתבתי לפני שנתיים בערך - המטרה של מדריכים היא להציג דרך לפיטרון של דברים מסויימים ושימוש בתוכנה wireshark . המדריך ניכתב בעבר עבור הפורום mircx ז"ל אך כיום ניתן למצאו אותו בכל פורום MS שמכבד גנבות בלי ידיע של הכותב  XD השפה שכתובים בה הקודים היא MS (mirc script)

אז מה היא Wireshark?
Wireshark היא תוכנה המאפשרת לראות את כל יציאות וכניסות הפאקטים למחשב.
כלומר, כל תוכנה אשר מקבלת נתונים בהמצאות האינטרנט ושולחת נתונים אנחנו ניראה אותם. ואת מחשב היעד אליו הם נשלחים ועד מידע מפורט ומלא עליהם.

למה אנכנו צריכים את זה בכתיבת של קודים?
אנחנו נשתמש בתוכנה הזות לרוב כאשר נרצה לחכות פעולות של תוכנות מסויימות בעזרת המירק על מנת לקבל נתונים מסויימים. הדוגמה הכי קלה להבנה היא רבים מין בוטי החדשות שנמצאים ברשות ב IRC השונות , מה שהבוטים האילו עושים בבסיסו של דבר הם מחכים את הפעולות שעושים הדפדפנים (iexplorer , mozil, opera) על מאת לקבל את קוד ה HTML של האתר עליו הם מתחברים וכך לשלוף משם את המידע אותו הם רוצים.

מה נילמד במדריך?
במדריך זה אני ילמד אותכם כמה דברים מאוד בסיסים בתוכנה ושילוב שלה בכתיבת קוד במירק.

Wireshark:
אתר ראשי - http://www.wireshark.org
עמוד בוויקיפדיה - http://en.wikipedia.org/wiki/Wireshark
הורדה - http://www.wireshark.org/download.html

*הערה: השימוש בתוכנה מתבצע רק כאשר אנו צריכים אותה , אין טעם לפתוח אותה ואז לשאול "טוב מה ניבנה" זה לא עובד ככה.

שלב - א'
מצאת תירוץ לשימוש בתוכנה:
ליפני שנה בערך רציני לבנות קוד שמוצא את הכתובת אינטרנט המלאה של איפי מסויים,
לדוגמה:
ip - 89.138.84.107
address - 89-138-84-107.bb.netvision.net.il
חיפשתי ברשת מדריך איך עושים את זה ולא מצאתי אך לא הרמתי ידיים , כמו שרובכם יודעים (אני מקווה) כאשר מריצים את הפקודה ping -a ip בחלון הCMD המחשב מחזיר את הכתובת המלאה של האיפי שעליו עשינו פינג, המטרה שלי עכשיו היא לראות מה המחשב שלי שולח בכל פעם שאני עושה את הפקודה ping -a על מנת שאני יעשה את זה בעצמי במירק.
אז פתחתי את התוכנה Wireshark ויצאתי לדרך.

הערות:
-פרוטוקול, פרוטוקול הוא צורת שליחת נתונים או כבלת נתונים מסויימת , למשל שליחת הנתונים לאתרי אינטרנט מיתבצעת על ידי פרוטוקול HTTP פרוטוקול העלאת קבצים לשרתים ניקרא פרוטוקול FTP , כלומר אנחנו רוצים למצוא מה המחשב שלי שלוח כל פעם שהוא עושה את הפקודה , אני לא יראה בדיוק איך מצאתי את הפרוטוקול כי זה לפעמים מצאת פרוטוקולים יכולה לחכת שעות ימים או אפילו דקות תלוי עד כמה אתה טוב או אם סתם היה לך מזל, בכל אופן אני ינסה להראות רק את הרעיון הכללי. חשוב להזכיר שאפשר לחפש מידע על כל פרוטוקול בגוגל אך לא תמיד מוצאים ולשם כך ניכתב המדריך הזה.
-ממלץ מאוד מאוד מאוד מאוד לצאת מכל התוכנות המשתמשות באינטרנט בשביל לא להתבלבל אין פאקט של תוכנה אחרת למה שאנחנו צריכים באמת.

שלב שני:
מצאתי פרוטוקול שליחת הנתונים בעזרת wireshark:
אז יצאתי מכל התוכנות והרצתי את הwireshark לאחר מכן התחלתי לקבל פאקטים , כמובן שלא ראיתי כלום עד שלא עשיתי את פקודות הפינג כי יצאתי מכל התוכנות המשתמשות באינטרנט.
לאחר ששלחתי את הפקודה 89.138.84.104 ping -a התוכנה הציגה לי את השורות הבאות,

מיקרא לתמונה:
-הלשונית Sourec , נימצאת מעל המרובעים בצהוב והאדום מצד שמאל- מציינת את האיפי מימנו נישלח הפאקט.
-הלשונית Destination , נימצאת מעל המרובעים בצהוב והאדום מצד ימין - מציינת את האיפי אליו נישלח הפאקט.
-87.68.213.213 - האיפי של המחשב שלי
-80.179.52.100 - האיפי אליו המחשב שלי שלח את הפאקט
-החלון הלבן למלטה שבטוחו יש ריבוע ירוק , מראה את הפאקט בדיוק בעמצעות HEX (בסיס 16) ובהמצאת chr כלומר התווים הרגילים , מה שנימצא על המיקלחת וטיפה יותר מיזה.

אז מה שעשיתי אחרי שהתוכנה הציגה לי את הפאקטים שנשלחו למחשב שלי , חיפשתי איפה נמצאת הכתובת המלא של האיפי שעליו עשיתי פינג , ומצאתי אותה בפאקט בשלישי שנימצא בשורה שלישית במרובע הירוק.
לאחר מיכן הסתקלתי מאיפה נישלח הפאקט הזה (מרובע צהוב) ומצאתי שהוא נישלח מהאיפי 80.179.52.100, אם הוא נישלח משם משמע אני שלחתי עליו משהו כניראה , וחיפשתי שורה בא המחשב שלי שלוח לאיפי הזה פאקט ומצאתי אותה בדיוק שורה מעליו
שורה מיספר 2 מרובע אדום.

ניכנסתי לפאקט שאותו שלחתי לאיפי 80.179.52.100 וכך הוא ניראה,

מיקרה לתמונה:
ריבוע צהוב - כל הפאקט המלא שהמחשב שלי שלח להשרת , סימו לב שכל מה שליפני ה 4D לא מסומן , כל מה שכתוב ליפני הוא חלק מפרוטוקול אב שניקרא UDP שזו דרך לשלוח נתונים , לא נתמקד בזה. אז מה אנחנו רואים פה בכלל? המחשב שלי שולח לאיזה שהוא איפי מסויים (80.179.52.100) את התווים הבאים
4d ed 01 00 00 01 00 00 00 00 00 00
לאחריהם הוא מוסיף את כתובת האיפי שעליה עשיתי PING אבל הפוכה
כתובת האיפי המקורית - 89.138.84.104
החדשה - 104.84.138.89
ובן כל בית (מספר באיפי) מופיעה נקודה , אח זו לא נקודה. התוכנה לא מראה תווים שאין להם צורה ברורה (כן יש תווים כאילו כמו כל התווים שהמספר שלהם קטן מי 15 או גדול מי250) היא פשות מראה נקודה, אחרי הרבה ניסיונות הבנתי שבין כל מספר ומספר הוא כותב את מספר הספרות של המספר. כלומר
קוד: 
(3)104(2)84(3)138(2)89
ובסוף בסוף בסוף מסוף את השורה הזו לאיפי החדש
.in-addr.arpa
גם פה הנקודות הן לא נקודות הלה מספר התווים שמופעה במילה כלומר
קוד:
(7)in-addr(4)arpa
ואז את התווים
00 00 0c 00 01
מצאתנו את הפרוטוקול :) מיכן יש רק לכתוב את הקוד....
לבסוף הקוד מוכן ועובד , כמובן שאם תסימו לב כל התווים של HEX הפכו לדיסיבלים (בסיס 10) כי ככה יותר נוח לי.

עכשיו לקוד,
קודם כול אני כותב את האלייס הבא:
קוד:
alias ipcodn return $chr($len($1)) $+ $1

האלייס הזה יחזיר את התוו שמספרו הוא מספר ספרותיו של המספר שהוכנס לאלייס, פלוס המספר עצמו. כלומר אם יוכנס 85 הוא יחזיר
$chr(2) $+ 85

לאחר מיכן אני מתחיל את כתיבת הפאקט 
alias DNS2 {   bset &send 1 156 24 1 0 0 1 0 0 0 0 0 0 
}
פותח אלייס חדש ובתוכו יוצר משתנה בינרי עם התווים שמצאנו בעזרת התוכנה Wireshark שנישלחים כל פעם בהתחלה.
קוד: 
var %ip $1   bset -t &send 13 $+($ipcodn($gettok(%ip,4,46)),$ipcodn($gettok(%ip,3,46)),$ipcodn($gettok(%ip,2,46)),$ipcodn($gettok(%ip,1,46)),$ipcodn(in-addr),$ipcodn(arpa))

מכניס לאותו המשתנה את האיפי בסדר הפוך שליפני כל מספר יש את מספר הספרות שלו בעזרת האלייס ipcodn.
קוד: בחר הכל
bset &send $calc($bvar(&send,0) +1) 0 0 12 0 1
ולבסוף מוסיפים את הסיומת שמצאנו שצריך לשלוח בסוף כל פאקט בפרוטוקול הזה.
קוד: 
sockudp -k $+(openilonly-,$1) 80.179.52.100 53 &send
לבסוף פותחים את הסוקט בפרוטוקול UDP עם האיפי אליו הPING שלח את אותו הפאקט
ועכשיו נותר רק ליקרוא את המידע  :)
הקוד המלא :
קוד: 
alias DNS2 {   bset &send 1 156 24 1 0 0 1 0 0 0 0 0 0   var %ip $1   bset -t &send 13 $+($ipcodn($gettok(%ip,4,46)),$ipcodn($gettok(%ip,3,46)),$ipcodn($gettok(%ip,2,46)),$ipcodn($gettok(%ip,1,46)),$ipcodn(in-addr),$ipcodn(arpa))   bset &send $calc($bvar(&send,0) +1) 0 0 12 0 1   sockudp -k openi 80.179.52.100 53 &send } on *:udpread:openi:{   sockread &dns    var %x 0   while (%x < 256) {     if (%x <= 47) || (%x >= 123)  breplace &dns %x 45     if (%x >= 58) && (%x <= 64)   breplace &dns %x 45     if (%x >= 91) && (%x <= 96)   breplace &dns %x 45     inc %x   }   var %x 1 | var %ds $bvar(&dns,1,$bvar(&dns,0)).text   while ($gettoks(%ds,%x,--)) {     var %f $v1     if ($len($v1) > 5) && (*-* iswm %f) && (*in*addr*arpa* !iswm %f) echo -a $replace($gettok(%f,1,32),-,.)     inc %x   } } alias gettoks return $replacecs($gettok($replacecs($1-,$3, ),$2,1), ,$3) alias ipcodn return $chr($len($1)) $+ $1

שימוש :
קוד: 
/dns2 IP

בהצלחה :)

המדריך נכתב על ידי Vendetta