BinaryVision

הקדמה לרשתות GSM

מאת בתאריך 26/02/09, תחת כללי

GSM – Global System for Mobile Communications – הבסיס

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

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

המרכזיה (MSC – Mobile Switching Center)

כמו בכל רשת סטנדרטית, צריך להיות איזשהו רכיב שממתג את השיחות, בגדול, זהו תפקידה העיקרי של המרכזיה, המרכזיה בנוסף למיתוג שיחות, מחזיקה בתוכה כמה רכיבים קטנים עליהם אפרט:
HLR (Home Location Registry) – המרכזיה הביתית, המחזיקה את כל האינפורמציה של המשתמשים "הביתיים" של הרשת, לדוגמא, אם אתה לקוח של אורנג', המרכזיה הביתית של אורנג' מחזיקה את כל האינפורמציה שלך, כשאני אומר כל האינפורמציה אני מתכוון החל מכל הנתונים הטכניים של המכשיר שלך עד למס' כרטיס האשראי  שלך, הכל.
VLR (Visitor Location Registry) – המרכזיה המארחת. נסעת פעם לכיוון אילת וקיבלת הודעה שנכנסת לרשת הירדנית? זה אומר שנרשמת במרכזיה המארחת הירדנית. תפקידה של המרכזיה המארחת היא לתקשר עם הרשת הביתית שלך (דרך סיבים כלשהם), לשמור את האינפורמציה שלך ואת זמני השימוש שלך (בשביל לחייב אותך בהמשך דרך הרשת הביתית שלך..). או בעצם, לשמור את כל המידע הלא קבוע ברשת.
OMC (Operation and Maintaince Center) – בגדול, מרכז תחזוקה ותפעול של הרשת, כל בעיה ברשת נרשמת בלוגים ואף לרוב מטופלת בצורה אוטומטית ע"י הרכיב הזה.
AUC (Authentication Center) – מרכז אימות הנתונים של הרשת, שם מתבצע תהליך האימות של משתמש מול הרשת המארחת שלו. עליו תשמעו עוד בהמשך :>.

הרכיב הבא הוא הבקר, התקשורת בינו לבין המרכזיה מתבצעת דרך פרוטוקול שנקרא A ועובר בשיטת ריבוב E1*.

הבקר (BSC – Base Station Controller)

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

הרכיב הבא הוא התא, התקשורת בינו לבין הבקר מתבצעת דרך פרוטוקול שנקרא ABIS וגם כן עובר בשיטת ריבוב E1*.

התא (BTS – Base Transceiver Station)

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

הרכיב הבא והאחרון בשרשרת הלוקלית של רשת GSM הוא בעצם משתמש הקצה, נקרא לו MS  (Mobile Station) ונפרט עליו מיד, אבל לפני אגיד שהMS מתקשר עם התא בפרוטוקול שנקרא P, ברשת GSM מתוקנת זהו הפרוטוקול היחיד שעובר באוויר.
תדר בפרוטוקול P  מחולק ל8 Time Slots, ההמוספרים מ0 עד 7, שתמיד בTS0 עובר לו תדר הביקון עליו דיברנו בקצרה.

משתמש הקצה MS (Mobile Station)

הגענו עד למשתמש הביתי ברשת הGSM, אותו אפשר לחלק בצורה די ברורה לשני חלקים:
ME – Mobile Equipment –  מכשיר הפלאפון + אנטנות, המכשיר מחזיק עליו זהות חשובה שנקראת IMEI, זהות שאמורה להיות יחידה בעולם (כמובן אם לא היו צורבים). 5 הספרות הראשונות בזהות הזאת אמורות להצביע על מודל המכשיר שבידך. את ה IMEI אפשר להשיג ע"י לחיצת *#06* או לפתוח את המכשיר באיזור הבטריה ולקרוא את המס' הסידורי שלו (הIMEI).
SIM – Subscriber Identification Module – או בעצם הזהות שלנו מול הרשת.. מחזיק את כל הזהויות שלנו בתור משתמשי רשת, IMSI (המספר שאנחנו לא רואים אבל מזהה אותנו כמשתמשים מול הרשת), Ki (הקוד זיהוי הראשי שלנו מול הרשת, או בעצם הדרך של הרשת לאמת את זהותנו).

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

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

אבטחה ברשת GSM

ברכיבי הAUC+HLR של המרכזיה נשמרים טבלאות של צימודים של IMSI (אמרנו שזהו המזהה שלנו מול הרשת או בעצם המס' שלנו) + Ki (המספר אימות שלנו שידוע לאף אחד חוץ מאיתנו ומהרשת) ועוד כל מיני אינפורמציה שאינן רלוונטיות ללמסמך זה כרגע.
תהליך הזיהוי מתבצע בצורה הבאה (זהו פירוט לא טכני וללא הודעות ספציפיות, אלא ההליך מוסבר בעברית כפי שהוא קורה):
1. המשתמש אומר לרשת "הלו? אני צריך להזדהות, אני מוציא שיחה/שולח SMS/מתחבר לאנשהו. יאללה בואי נתחיל את תהליך הזיהוי.."
2. המרכזיה הביתית אומרת למשתמש "אין בעיה סחבק, אנחנו מתחילים", בשלב זה המרכזיה יוצרת מס' רנדומלי באורך 128 ביטים, שולחת אותו למשתמש (כמובן שהמס' גם על הדרך עובר בפרוטוקול P שעובר באוויר כמו שאמרנו).
3. המשתמש מקבל את המספר הרנדומלי, לוקח את זהות ה Ki שלו + את הIMSI שלו + את המספר הרנדומלי שהרשת יצרה ומכניס את כל המשתנים האלה לאלגוריתם אינקריפציה חד כיוונית (סגנון HASH) שנקרא A5. משם מתקבלים שני מספרים, הראשון הוא SRES שנוצר למטרה היחידה של להצפין את הגל האלקטרומגנטי שעובר באוויר + מספר הזיהוי הסופי שלנו. האינפורמציה נשלחת למרכזיה הביתית.
4. המרכזיה בגדול עשתה את אותו התהליך שהמשתמש עשה, עכשיו היא קיבלה את האינפורמציה מהמשתמש ויכולה להשוות, ולראות אם המשתמש הוא באמת מי שהוא טוען שהוא.. אפשר לשים לב למודעות הקטנה לאבטחה, הKi לא עובר באוויר בשום שלב. אבל הנה הקטע ההזוי..
5. בהנחה שהרשת זיהתה את המשתמש היא שולחת לו הודעת Authentication Success וממשיכים בפעולה שהמשתמש רצה לעשות, ואם הזיהוי נכשל היא שולחת Authentication Failed ומנסים עוד פעם..
הזוי לא?! כלומר הרשת מוגנת מפני פריצות, כפי שבטח שמתם לב היא השולטת הגדולה בהליך האימות, סלולר זה לא אינטרנט, זה קצת מסובך פשוט לחסום את מי שמנסה לעשות לך BRUTEFORCE. אבל מה איתי? משתמש הקצה? אני לא צריך איזשהו אימות לגבי זה שאני מדבר עם הרשת שלי באמת? או שאני פשוט אמור לזרום עם מה שמביאים לי..
בגדול ברשתות המבוססות על תקן UMTS (דור שלישי) כל העיניין הזה תוקן, כלומר, גם הרשת צריכה להזדהות מול המשתמש כנותנת השירות. אבל בGSM העיניין לא מתבצע ככה, מה שהופך את כל העיניין לפריץ, יש לכם רעיונות פריצה? תכתבו לנו בתגובות.. אם לא אני פשוט אתן לכם קצת חומר למחשבה במאמר הבא שיעלה לקראת הסופ"ש (או במהלכו)..

  • E1 – שיטת ריבוב לנתוני טלפוניה המעבירה 2.048 מביט לשנייה ומחולק ל32 ערוצי זמן (PCM). כל PCM מחולק ל8 TS. כל TS מסוגל להעביר 8 קילובי\ט לשנייה. PCM0 וPCM16 הם ערוצי סינכרון ואיתותים בהתאמה ואינם משמשים להעברת נתוני שיחה.
    • ראוי לציין שלא אני כתבתי את המאמר, אלא אדם חביב שאינו מעוניין בפרסום שמו 🙂 תודה
8 תגובות :, , , , , עוד...

נוקיה 5800 (עם מוסיקה בפנים)

מאת בתאריך 13/02/09, תחת כללי

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

אני כבר חודש מסתובב עם ה Nokia 5800 בתור המכשיר הראשי שלי, אני מרוצה, ואני גם ממליץ לאחרים לנסות.

אפליקציית Last.fm ב Nokia 5800

אפליקציית Last.fm ב Nokia 5800

אני אתחיל ממה שלא טוב, וזה לדעתי כל הקטע של ה CPU / מאיץ גרפי (שאין), בקטע הזה ה 5800 בינוני מינוס, לא שהוא חלש, אבל ה CPU שלו הוא כמעט כמו ה N96, רק שהמסך שלו עם רזולוציה פי 3 יותר גדולה (שנראה מעולה אגב). אז אם אתם רוצים משהו שיצייר לכם טיפות של מים ב realtime תקנו iphone.

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

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

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

הדפדפן בפלאפון עובד אחלה, אפשר להתחזות ל iPhone (תאכלס זה אותו דפדפן) והרבה אתרים שנראו לא משהו פתאום יפעילו את העיצוב המיוחד וייראו מעולה. הצלחתי לפתוח אתרים מאוד כבדים, וכל פונקציות ה ajax יעבדו כמו ב webkit שולחני.

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

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

מי שרוצה להעיף את הצפצוף של המצלמה צריך להעתיק את הקובץ z:\private\10202be9\101F8809.txt לאותה תיקיה ב c, ולשנות את השורה האחרונה מ:

0x7 int 1 0 cap_rd=alwayspass cap_wr=alwaysfail

ל:

0x7 int 0 0 cap_rd=alwayspass cap_wr=alwaysfail

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

אפליקציות מומלצות:

  • JoikuSpot הופכת את המכשיר לנקודת Wifi דרך האינטרנט בסלולר
  • Handy Profile משנה את הפרופיל שלכם לפי מיקום או לפי מה שרשום ביומן
  • Mobbler משמיעה שירים מ last.fm
  • Slick מאפשרת לפתוח Msn, ICQ, Google Talk
  • AccuWeather מוצאת תחזית מזג אוויר לפי GPS
  • Handy Shell מחליפה את ה Active Standby עם מסך שעובד גם לרוחב
  • Step Counter סופרת צעדים ומרחק לפי האקסלרומטר
14 תגובות :, , , , עוד...

הקמת NAS ושינוי תשתיות

מאת בתאריך 07/02/09, תחת כללי

BR-6215SRg Front

BR-6215SRg Front

מצאתי איפה לקנות את הNAS שרציתי,
קניתי Edimax BR-6215SRg!

מה יש לו:

  • 4 כניסות RJ45 בשביל LAN שעובדות בתור Switch
  • עוד כניסה RJ45 בשביל WAN שאפשר לחייג בו לADSL וכו'
  • Wifi 802.11b and 802.11g עם כל האבטחה של ימינו. מסוגל לעבוד בתור AP וגם WDS
  • שני כניסות USB 2.0 לחיבור כוננים חיצוניים, Disk On Key, או מדפסות

הרשת שלי לפני השינויים

BR-6215SRg Back

BR-6215SRg Back

  • מודם USB/ETH של B-Focus שקיבלתי מבזק, שכרגע מחייג בעצמו ומתנהג כראוטר (מריץ DHCP,DNS)
  • Switch שמחובר אל המודם, ויש לו עוד 7 יציאות
  • מחשב נייח שמחובר עם כבל לSwitch
  • רואטר אלחוטי של Level One שמחובר ביציאת Ethernet היחידה שלו לSwitch
  • מחשב נייד שמחובר אלחוטית לLevel One.

כולם מקבלים IP ישירות מהמודם B-Focus, וגולשים מולו.

מה רציתי לעשות

  • להפטר מהכמות האינסופית של מכשירים מיותרים וכבלים מיותרים
הרשת הישנה

הרשת הישנה

  • להוסיף Storage ענק לשימוש הרשת (ראה ערך "טרה של צרות")
  • אולי להריץ שרת יעודי על החומרה החדשה, להוריד טורנטים?

מבנה הרשת החדשה

  • מודם B-Focus שעובד בתור Bridge מחובר לפורט WAN של המכשיר NAS
  • מחשב נייח שמחובר לאחת מהיצאיות רשת של הNAS
  • מחשב נייד שמחובר אלחוטית לאותו הNAS
  • איכסון חיצוני שמחובר דרך USB גם כן לNAS
  • ברגע שאני אמצא את הכבל של המדפסת, גם היא תחובר לNAS

דברים שאני לא כלכך מרוצה מהם

הרשת החדשה

הרשת החדשה

  • אין חיבור SSH ללינוקס שמורץ בתוך הEdimax, אני אצטרך לפרוץ אותו או משהו, וזה לא יהיה קל (Blind + Not x86).. אולי אני אוכל לתת לו Firmware אחר או משהו…
  • הכונן קשיח החיצוני אף פעם לא נכבה, גם כשאף אחד לא משתמש בו
  • עדיין צריך את המודם המסריח של בזק, לפי מה שראיתי יש מצב שאולי אני אצליח להפתר ממנו אם אני אחליף את החיבור לקיר במשהו שמסתיים בRJ45 ולא RJ11. ואז צריך רק לראות שהWAN Port מסוגל לחיות עם זה בצורה ישירה..

לסיכום

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

6 תגובות :, , , עוד...

טרה של צרות

מאת בתאריך 29/01/09, תחת כללי

קניתי היום External Hard Disk Drive של Western Digital.
או במילים אחרות, כונן קשיח חיצוני.
בגודל 1 Terabyte.

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

אז עכשיו למה "טרה של צרות"?

Explorer Crash
אני מכניס את הדבר הזה לחשמל, מחבר אותו לUSB למחשב, עד כאן הכל טוב ויפה.
ואז אני פותח את הכונן, מעתיק משם את התוכן (דריברים ותוכנות שבאו איתו), ומוחק הכל.
פותח כמה תיקיות מתכונן להעתיק, סרט, ואיזה יופי, קורס הExplorer.
התמונה זה מהEventlog.

הDll שרשום שם, זה איזה Codec וידאו שהותקן אצלי בגלל כלים של Nokia, ועבודה עם פלאפון של Nokia במחשב.
שמסתבר שהוא לא אוכל כלכך טוב להציג Preview בExplorer של סרט מהרד-דיסק של טרה.
מי שלא מבין, מדובר בתמונה צד שמאל למטה בWindows XP שמציגה את הסרטון כשעומדים עליו עם הסמן.

חיפשתי באינטרנט, ובנרות, ומסתבר שאין לבעיה הזאת Patch, ולא רק, היא גם קיימת בCodecים אחרים.
xvid למשל.
הפתרון שלי היה למצוא את הDLL לשנות את השם שלו כך שלא ימצאו אותו ויטענו אותו, ולעלות את Explorer מחדש.
זה אומנם פתרון ערבי קצת, אבל אני לא משתמש בכל מקרה בכלים של המרת סרטים של נוקיה, ובינתיים זה עובד יופי.

אז תאחלו לי מזל טוב,
אני צעד אחד קרוב יותר לNAS שאני מתכנן להקים אצלי בבית…

5 תגובות :, , עוד...

האם goto באמת שטני?

מאת בתאריך 26/01/09, תחת כללי

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

לאלה מכם שלא יודעים goto זו קפיצה בלתי מותנית ב c (ודומותיה).
דוגמא לשימוש בקוד:

  1. goto exit;
  2. printf("hello world!\n");
  3. exit: return 0;

בקוד הזה, שורה 2 לעולם לא תקרא, שורה 1 תגרום לקפיצה בלתי מותנית (קרי: תמיד) לשורה 3, אשר תסיים את הרצת הפונקציה.


אז למה בעצם goto נחשב רע?

לפי דעתי ישנן כמה סיבות אפשריות:
1. goto נחשב רע עקב רצון שאנשים ישתמשו באלטרנטיבות היותר "high level" שלו, כמו for, while, if, try, etc… ובשביל שאנשים באמת ישתמשו בהם, התחילו להעליל על goto.
הנה לדוגמא קוד ב goto (סטייל אסמבלי) וקוד עם for:

  for (i=0; i<5 ; i++)
  	print("hi");

לעומת הקוד עם goto:

  i=0;
  
  start:
  if (i<5) 
  
  print ("hi");
  
  i++;
  goto start;
  
  exit:

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

  int
  foo (int i) 
  {
  	goto a;	
  	return 0;
  }
  
  int
  bar (int j)
  {
  a:	
  	print("hi");
  	return 0;
  }

3. בעצם אנשים עשו בלאגן עם goto בעבר הרחוק ואז אנשים התרגלו לראות goto ולברוח בזוועה.
לדוגמא:

  while (i<6) {
  start:
  	for (j=0; j<5; j++) {
  		if (j==3)
  			goto start;
  	}
  	i++;
  }

למה כן
כל אחת מהסיבות האלה הגיונית ואפשרית אבל האם הן מספקות? הרי אפשר להתעלל בעוד הרבה פקודות ב C אם לא עושים דברים נכון. זה כמו לאסור להשתמש במצביעים ל void הרי עם שימוש במצביעים כאלה אין type checking בחלק מהמקומות וזה יכול להוביל לשגיאות. זה פשוט לא הגיוני!

לעומת הטענות החלשות נגד goto יש טענות חזקות בעד:
1. אנשים משתמשים ב goto (בלי לדעת) כל הזמן.
2. goto עוזר מאוד בכל מיני מקרים.

סינטקס קיים שפועל כמו goto
1. break ו continue זה goto שעטפו אותו מעט! הרי בקלות אפשר לממש את שניהם בעזרת goto:

  while (true) {
  	if (i>1)
  		continue;
  	else
  		break;
  }

ועם goto:

  while (true) {
  next:
  	if (i>1)
  		goto next;
  	else
  		goto end;
  }
  end:

והמימוש עם לולאות for לא שונה בהרבה!

מה בנוגע ל try and catch? (כן, אני יודע שזה c++)

  try {
  	if (error) {
  		throw "error!";
  	}
  }
  catch (char * str) {
  	printf("%s\n", str);
  }

לעומת:

  if (error) {
  	str = "error!";
  }
  else {
  	goto cont;
  }
  
  /* catch */
  error:
  printf("%s\n", str);
  
  cont:

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

שימושים נכונים:

אני לדוגמא משתמש ב goto רק בשימוש אחד (אני חייב להודות שקיבלתי השראה מהקוד של הקרנל…) ניקוי פונקצייה אחרי שגיאה:
לדוגמא ללא שימוש ב goto:

  int
  foo (int i)
  {
  	char *a;
  	char *b;
  	char *c;
  
  	a = malloc(5);
  	if (a == null) 
  		return -1;
  
  	b = malloc(6);
  	if (b == null) {
  		free(a);
  		return -1;
  	}
  	
  	c = malloc(7);
  	if (c == null) {
  		free(a);
  		free(b);
  		return -1;
  	}
  	return 0;
  }

לעומת ניקיון בעזרת goto:

  int
  foo (int i)
  {
  	int ret=0;
  	char *a;
  	char *b;
  	char *c;
  
  	a = malloc(5);
  	if (a == null) 
  		goto errora;
  
  	b = malloc(6);
  	if (b == null) 
  		goto errorb;
  	
  	c = malloc(7);
  	if (c == null) 
  		goto errorc;
  
  exit:
  	return ret;
  
  
/* error handling section */  
  errorc:
  	free(b);
  errorb:
  	free(a);
  errora:
  	ret = -1;
  	goto exit;
  }

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

עוד דוגמא:

  int
  foo (int i)
  {
  	int stop = 0;
  	while (true) {
  		while (true) {
  			if (i==3) {
  				stop = 1;
  				break;
  			}
  		}
  		if (stop)
  			break;
  	}
  	/*more code */
  }
  

לעומת:

  int
  foo (int i)
  {
  	while (true) {
  		while (true) {
  			if (i==3) 
  				goto end;
  		}
  	}
  end:
  	/*more code */
  }

או עוד דוגמא:

  if (a) {
  	if (b) {
  		if (c) {
  			printf("a ");
  			printf("= b = c = true\n");
  		}
  	}
  	else {
  		if (d) {
  			printf("a = !b = d = true\n");
  		}
  	}
  }

לעומת:

  if (!a)
  	goto end;
  
  if (b) {
  	if (! c)
  		goto endc;
  
  	printf("a ");
  	printf("= b = c = true\n");
  	
  	endc:
  }
  else {
  	if (! d)
  		goto endd;
   	
  	printf("a = !b = d = true\n");
  	
  	endd:
  }
  
  end:

שהרבה יותר ברור (ויותר חשוב, מונע הזחות מיותרות!).

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

2. בלי קפיצות "אחורה".
לא מומלץ לכתוב קוד שבו הקפיצה תוביל "למעלה" במעלי הקוד, כלומר לקוד שהורץ לפני ה goto, לדוגמא, לא לעשות דבר כזה:

  start:
  /*code*/
  goto start;

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

4. יש לכם עוד רעיונות? תכתוב בתגובות…

אני מקווה שעד עכשיו אתם מסכימים של goto יש מקום בעולם ואסור לפסול אותו על הסף, כי גם לו יש שימוש מעניינים ונכונים.

18 תגובות :, , עוד...

מערכת ההפעלה של גוגל (Android)

מאת בתאריך 25/01/09, תחת כללי

פתיח

מי שלא יודע על מה אני מדבר בכלל,
אז גוגל (Google) הוציאו מערכת הפעלה לטלפונים ניידים ושהקוד מקור שלה פתוח לכולם, וקוראים לה Android.
http://www.android.com

יצא לי להתקין את הPort של המערכת לNeo FreeRunner של OpenMoko.
והנה כמה התרשמויות שלי לגבי הbeta2 של המערכת שהועבר לFreeRunner תודות לעבודתם הקשה של אנשי קהילת הקוד הפתוח שהחליפו פקודות שמיועדות לArm5 בפקודות שמיועדות לArm4, והוסיפו דריברים מתאימים כך שאני אוכל להתקין את הAndroid על המוקו.
הbeta2 יצא לא מזמן (22 לינואר נדמה לי) אז הורדתי אותו והתקנתי.
http://freerunner.android.koolu.com/release-files

Booting Android

התקנה

עבר חלק יחסית לזה שהסוללה של המוקו שלי די התרוקנה מאז פעם אחרונה ששיחקתי איתו.

  • מורידים את הkernel image, עושים Flash בעזרת dfu-util בWindows, מחכים איזה 2-3 דקות.
  • מורידים את הrootfs (מערכת הקבצים), עושים Flash בעזרת dfu-util, מחכים איזה משהו כמו 20 דקות (זה ממש ארוך…)
  • בהזדמנות גם עדכנתי את Qi לגרסה החדשה (זה הBootLoader החדש, והוא עובד די טוב עם Android)

שלפתי את הכרטיס 512 מגה שבא יחד עם המכשיר, הכנסתי אותו למחשב הנייד ופירמטתי אותו ל 2 מחיצות בעזרת Acronis Disk Director.
מחיצה ראשונה Fat32 בגודל 256, והשנייה Ext3 בגודל 256.
אני לא מכניס SIM Card, כי אין לי אחד מיותר, ואני יודע שהAndroid יעלה אצלי גם בלי הSIM.
אחרי כל ההתקנה, מפעילים את המכשיר.

Running Android

התרשמות

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

בעיות

חשוב לשים לב שהבעיות כאן נובעות כמעט כולן מהPort של אנדרויד לOpenMoko, ולא משליך על הG1 המקורי.

  • המקלדת הוירטואלית צריכה עוד עבודה, היא לא כלכך נוחה, ולא עובדת בכל המקומות (למשל הקלדת שם הרשת האלחוטית)
  • לא הצלחתי לגרום לWifi לעבוד, הוא גם לא מזהה רשתות בעצמו מסביב, וגם אחרי שאני סופסוף מצליח להעתיק טקסט בNotes ולשים אותו בטקסט של הוספת רשת חדשה, הוא כותב לי גם שלא יכול לשמור את הרשת…
  • Bluetooth לא נדלק…

מסקנות

אני עוד לא הולך להשתמש בהפצה הזאת כהפצה ראשית,
יש לה עוד בעיות, שכנראה יתוקנו ע"י האנשים בקהילה.
ברגע שאני אצליח לפתור Wifi או Bluetooth, אני אכתוב על זה משהו…

2 תגובות :, , , עוד...

"האח הגדול" ? מה עם האחים הקטנים ?!

מאת בתאריך 10/01/09, תחת כללי

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

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

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

1. האנטנה הראשונה (זו שהמכשיר הסלולארי הכי קרוב אליה) מבצעת מדידה של המרחק בינה לבין המכשיר הסלולארי, זוהי בדיקה פשוטה מכיוון שמהירות שידור הנתונים ומיקום האנטנה ידועים, הבדיקה מתבצעת אל מול פרמטר מתוך שידור ה GSM שנקרא TA שמסמל את הזמן שלוקח להעביר שידור מהמכשיר הנייד אל תחנת השידור (האנטנה), השיטה\טכנולוגיה עצמה נקראת TOA ובעברית "זמן הגעה".
מיקום המכשיר יכול להיות בכל נקודה בשטח המעגל סביב האנטה, בקוטר המעגל שהאנטנה חישבה.

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

3. מתבצעת בדיקה באמצעות אנטנה שלישית, לאחר מכן ניתן לחשב את המיקום ההכי סביר שבו המכשיר נמצא ביחס לכל הנתונים שהתקבלו.

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

triangulation

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

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

16 תגובות :, , , , עוד...

OCR בעזרת רשת עצבית בJavaScript

מאת בתאריך 08/01/09, תחת כללי

כן כן, שמעתם טוב…
מכירים את האתר Megaupload?
זה כמו Rapidshare, אבל עם CAPTCHA הרבה יותר פשוטה של 3 אותיות.
מי שלא מכיר את הCAPTCHA, הנה לינק לדוגמה להורדה: http://www.megaupload.com/?d=X03HFLP1
(מצד ימין יש 3 אותיות)
כולם יודעים שCAPTCHA נועדה למנוע רובוטים שינסו להוריד את הקובץ בצורה אוטומטית,
וחלק אפילו יודעים שיש אפשרות לנסות לעשות זיהוי Optical Character Recognition או בקצרה OCR.
אבל אני לא חושב שמישהו פה ראה סקריפט Javascript שמממש את זה,
ואפשר להשתמש בו Live מול האתר בעזרת Add-on לFirefox שקוראים לו Greasemonkey.
התוסף מאפשר הרצת סקריפטים מסויימים עבור אתר כשנכנסים אליו.
הלינק הקודם שהבאתי, (http://www.megaupload.com/?d=X03HFLP1)
מכיל הורדה של התוסף, וגם של הסקריפט שעושה זיהוי אוטמטי עם הCAPTCHA של Megaupload.
מי שלא מעניין אותו השלמה אוטמטית של הCAPTCHA לפחות יעניין אותו איך בנוי הסקריפט.
הסקריפט מממש רשת עצבית מלאכותית ומגיע עם המשקלים המתאימים כדי לזהות את הCAPTCHA.
מי שמעניין אותו לקרוא על Artificial Neural Networks מוזמן ללמוד על זה מ:
http://en.wikipedia.org/wiki/Artificial_neural_network

הנה חלק מהסקריפט עם כמה מהמשקלים:

function create_net()
  {
    //pre-calculated weights
var h_weights = [[-0.126359597761, [-0.58837191446576764, 0.036755965405260743
, 0.51854514831840781, -0.43431581850621709, 1.0754289255168701
, -0.64799960752449348, 1.1940698464323356, -0.86824098689125395
, 0.29366831980315877, -0.89830849234532661, -0.43654295013922195
תגובה אחת :, עוד...

מה?! למה שהWindows ישמור את המידע הזה?

מאת בתאריך 06/01/09, תחת כללי

USBDeview

USBDeview


מסתבר שמערכת ההפעלה Windows שומרת אצלה ברגיסטרי דברים שלא הייתי מצפה ממערכת הפעלה לשמור.
במקרה הזה מדובר ברשימת כל מכשירי הUSB שחיברתם למחשב שלכם.
גם כאלה שמחוברים כרגע וגם מכשירים שחיברתם אי פעם…?!
במקרים מסויימים יש לו זמנים ותאריכים של מתי זה חובר.
מצאתי תוכנה פשוטה שיכולה להראות את כל המידע הזה, וגם לנקות אותו.
קוראים לה USBDeview ואפשר להוריד אותה וללמוד איך להשתמש בה באתר:
http://www.nirsoft.net/utils/usb_devices_view.html

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

10 תגובות : עוד...

עוד משחק ל"האקרים"

מאת בתאריך 02/01/09, תחת כללי

צילום מסך

Hacker Evolution

שוב אתר המשחק-חינם-ליום-אחד (http://game.giveawayoftheday.com) פרסם לא מזמן משחק נוסף מהסדרה של Hacker Evolution.
הפעם זה המשחק הראשון שיצא, ולא ההרחבה, לפי מה שאני הבנתי הוא יותר ארוך מבחינת עלילה,
ואני אישית אהבתי שם את מוזיקת הרקע 🙂
מי שלא מעודכן, Hacker Evolution זה משחק אסטרטגיה ספק סימוצליה של חייו של האקר Freelance שמנסה להציל את העולם בהזדמנות…
כמובן שזה משחק בלבד, ואין לקחת את הדברים שאפשר לעשות שם בקלות כמשהו מהמציאות.
וכמובן בגלל שהמשחק היה זמין להורדה מלאה לפני כמה זמן, בתגובות לפוסט הזה יש קישור Rapidshare להורדת הRip שעשיתי למשחק כדי שאפשר יהיה להתקין אותו מתי שרוצים.

2 תגובות :, עוד...

מחפש משהו?

תשתמש בטופס למטה כדי לחפש באתר: