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