ריברסינג מאפס למאה, או: איך למדתי לפרוש

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

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

 עם תום תקופת הלימודים התחילו לפנות אליי חברים בנוגע לתוכנית הלימודים שלי, שמחתי מאוד לשתף אותם, אבל התחלתי להרגיש שיש לסילבוס ביקוש וכדאי לפרסם אותו בצורה רחבה יותר כדי שעוד אנשים יוכלו להנות וללמוד :)‏

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

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

 

Assembly and computer architecture:
Basic (He): http://www.cyber.org.il/assembly/gvahim_assembly_book.pdf
Fill the gaps (He): http://cse.proj.ac.il/asembli/st-book-pdf.pdf
The cpu execution cycle:
https://www.computerscience.gcse.guru/theory/fetch-execute-cycle

http://theteacher.info/index.php/fundamentals-of-cs/1-hardware-and-communication/topics/2599-registers-and-the-fetch-decode-execute-cycle
About offset:
https://stackoverflow.com/questions/1669662/what-does-offset-in-16-bit-assembly-code-mean
http://stackoverflow.com/questions/17777146/what-is-the-purpose-of-cs-and-ip-registers-in-intel-8086-assembly
Understanding opcodes: (advanced, optional): http://www.swansontec.com/sintel.html
And: http://ref.x86asm.net/
https://www.corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/ (I didn’t do the whole guide, just made sure I understand the concepts etc.)
Reversing:
https://www.recurse.com/blog/7-understanding-c-by-learning-assembly
Great book: https://beginners.re/ (I did only the code patterns part)

Beginners.re Challenge #53 hint: http://stackoverflow.com/questions/19342155/how-to-store-characters-into-a-char-pointer-using-the-strcpy-function
Exploitation:
Buffer overflow: https://www.youtube.com/watch?v=1S0aBV-Waeo
Check generic data sources below…
Exercises:
https://exploit-exercises.com/protostar – basic re. When asked to use existing shellcode I learned how to write a shellcode (next section, read below). Not a must, but helpful for deep understanding of how it works.
https://exploit-exercises.com/fusion – memory and execution protection
Shellcoding:
Guide: http://www.vividmachines.com/shellcode/shellcode.html
Another guide: http://www.tenouk.com/Bufferoverflowc/Bufferoverflow5.html
gcc params: https://stackoverflow.com/questions/26823678/linux-64-bit-shellcode
Check generic data sources below…
AntiDebugging:
http://www.stonedcoder.org/~kd/lib/14-61-1-PB.pdf – False Disassembly
Tools:
https://gcc.godbolt.org (untick intel button to use AT&T ASM)
EDB (like olly for linux, quite lame so you’d better not to use it): https://launchpad.net/~cybersec/+archive/ubuntu/panto-linux-4.3-tools/+build/11525283
https://packages.debian.org/wheezy/i386/nasm/download nasm for protostar vm
https://www.exploit-db.com/exploits/13357/ – non closing shellcode
http://shell-storm.org/shellcode/ – shellcodes library
Generic data sources:
https://www.technovelty.org/linux/plt-and-got-the-key-to-code-sharing-and-dynamic-libraries.html – plt & got
https://www.corelan.be shellcoding exploitation blog
http://www.win.tue.nl/~aeb/linux/hh/hh-10.html shellcoding and exploitation guide + ret2libc
http://users.atw.hu/exploitation/hack_artofexpl_0015.html exploitation guide + ret2libc
http://www.digitalwhisper.co.il/files/Zines/0x0F/DW15-3-Win7DEPnASLR.pdf ret2libc, DEP, ASLR (He)
http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf x86_64 instruction set (THE BIBLE – must use!)
https://blogs.oracle.com/ali/inside-elf-symbol-tables – symbols
http://wiki.osdev.org – Best Wiki ever (in terms of CPU)
Advanced:
http://www.win.tue.nl/~aeb/linux/hh/phrack/P55-08
http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html – process init functions flow
http://www.airs.com/blog/archives/38 – linkers (20 parts article!!!) – nice to have
https://0xax.gitbooks.io/linux-insides/content/ – linux inside (very long, but very good!)
http://wiki.osdev.org/GDT_Tutorial – GDT
https://www.quora.com/Microprocessors-What-is-the-difference-between-Global-Descripto-Table-and-Local-Descriptor-Table – GDT
http://wiki.osdev.org/Interrupts – Interrupts
Notes:

  1. ldd does some guessing, and so might mislead you to wrong libc addr. Instead use: (replace perl with your command)
    { perl >/dev/null & APID=$(pgrep -P $$); pmap $APID 2>&1; kill -9 $APID; echo $APID; } 2>/dev/null
  2. A must in gdb:
    set  disassemble-next-line on
    show disassemble-next-line
  3. If you get stuck in ret2libc protostar lvl: https://www.youtube.com/watch?v=m17mV24TgwY
  4. The linux equivalent of Win32’s VirtualProtect (which changes memory protections) is mprotect: https://linux.die.net/man/2/mprotect

 

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

איך לומדים את כל החרא הזה תוך חודשיים? – טיפים ללמידה אפקטיבית

  • קודם-כל חשוב לפנות את הזמן והראש ללימודים. ככל שתהיו עסוקים בעוד דברים, יהיו לכם יותר interruptים במהלך היום ויהיה לכם יותר קשה לשמור על רמת ריכוז גבוהה.
  • תתחילו לנהל יומן. כל פעם שאתם מתאמים משהו עם חבר (ברמת “לצאת עם חברים בערב”) תבינו מתי זה בדיוק (ברמת שעה), תעשו גזירת זמנים (כמה זמן לוקח להתארגן, להגיע לאן שניקבע, כמה זמן אני רוצה להיות שם כדי להישאר אפקטיבי) ותכתבו הכל ביומן. תדאגו שהיומן יעשה לכם התראות (בטלפון/מחשב).
    • חשוב מאוד!!! לא לזרום על אירועים אם אתם לא יודעים אחד מהדברים הבאים: מיקום, איך אני מגיע לשם, כמה זמן כל האירוע לוקח לי עד שאני בחזרה בבית.
    • תהיו בטוחים שלאירוע יש משמעות ששווה את ה-interrupt הזה. כלומר למשל: לצאת עם חברים זה חשוב. אבל לצאת עם חברים כל ערב זה רעיון רע מאוד ללימודים.
  • תבינו את הגוף שלכם ותראו מתי אתם הכי אפקטיביים. ואני אסביר: אני יודע על עצמי שאני הרבה יותר אפקטיבי וערני בערב. לכן הייתי ישן בבוקר ומתחיל ללמוד באיזור 10 (בבוקר, אל תגזימו), ומסיים ללמוד לפנות בוקר (איזור 2-3 בבוקר). הייתי ישן באיזור 7:30 – 8:30 שעות בלילה. כל יום באיזור שעה 15:30 הייתה לי נפילת מתח והאפקטיביות שלי ירדה מאוד, ואת זה הייתי פותר עם powernap.
  • powernap – מצאתי שהדרך האפקטיבית ביותר ל-powernap אצלי היא כזאת: כשאני מרגיש שאני מתקרב לשיא העייפות אני מכין לעצמי כוס אספרסו (יתרון משמעותי – לא צריך לחכות הרבה להרתחת המים ולבישול של הקפה). שותה אותו, שם שעון מעורר לעוד 20 דקות (5 דקות שלבי הירדמות + 15 דקות שינה) ונזרק על הספה. אחרי 20 דקות הייתי מרגיש כמו חדש (!!!) לפעמים אפילו הייתי מתעורר לפני השעון המעורר. זה מה שעבד אצלי, אבל תבחנו מה עובד אצלכם. + הסיבה לקפה לפני השינה ולא אחרי, היא שלקפה לוקח כרבע שעה להשפיע.
  • מחברת – למדתי על עצמי שדברים שאני כותב נכנסים הרבה יותר טוב לזיכרון שלי. לכן דברים שהיו לי מורכבים או שראיתי שאני כל פעם שוכח, הייתי כותב במחברת. זה גם היה עוזר לזכור באופן מיידי, וגם רפרנס שקל מאוד לחזור אליו (לעומת העשרת אלפים לשוניות שפתוחות לי).
  • למידה מתוך סקרנות – כמו שכתבתי בהתחלה, תוכנית הלימודים השתנתה תוך כדי למידה. למה? כי יש דברים שעניינו אותי יותר ויש דברים שפחות. כלל האצבע שלי היה שאני לומד טוב כל עוד זה מעניין אותי, ובאמת ככל שהנושא היה יותר מעניין אפקטיביות הלמידה שלי הייתה גבוהה יותר. אם נושא פחות מעניין אתכם תראו שאתם מבינים אותו באופן כללי ותמשיכו הלאה. אם נושא מאוד מעניין אתכם תתעכבו עליו ותבינו לפרטי פרטים איך הנושא עובד, כל תנצלו את הסקרנות הטבעית שלכם ככלי ללימודים אפקטיביים.
  • צ’אלנג’ים – אתם לומדים מול עצמכם. איך תדעו אם הבנתם את החומר כמו שצריך? כאן הצ’אלנג’ים נכנסים לתמונה. זה בעצם סוג של מבחן מעשי (כיפי במיוחד) שעוזר לנו לוודא מול עצמנו שאנחנו מבינים את החומר כמו שצריך. חשוב לציין שאת הצ’אלנג’ים מומלץ לעשות בסוף תהליך הלימודים התאורתיים, כי הם דורשים הרבה זמן.

טיפים ליוצאי יחידות טכנולוגיות

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

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

  1. תבין מה אתה רוצה לעשות באזרחות ולאן אתה רוצה להגיע. זה יעשה את החיים שלך להרבה יותר קלים.
  2. יכול להיות שבצבא אתה סופרמן, אבל באזרחות אנשים נמדדים על ידי הפגנת יכולות. לפני שאתה ניגש לראיונות תשב ותלמד הרבה. תהיה חד על כל הפרטים הקטנים.
  3. עולם הראיונות הוא סקיל בפני עצמו שצריך להבין מה קורה בו וזה לוקח זמן וניסיון (כמו כל דבר בחיים). לך ל-2-3 ראיונות אל חברות שאתה *בודאות* לא רוצה להגיע אליהם בכלל.
  4. אבל אל תלך ליותר מדי ראיונות. זה סתם מתיש מאוד. אחרי שאתה מרגיש שאתה יודע לאן אתה רוצה להגיע תשב ותלמד ורק אז תלך לראיונות.
  5. אם יש משהו אחד באמת טוב בשירות ביחידה טכנולוגית, זה כמו הקשרים שנוצרים לך בתעשייה. תנצל את זה כדי לגלות איזה חברות מעניינות יש בחוץ.
  6. לך לכנסים ואירועים חברתיים שאתה עשוי להיתקל בחבר’ה מהצבא שהשתחררו כבר ונמצאים בתעשייה. האימפקט שיש לשיחות הקצרות האלה הוא מטורף ומלמד מאוד.
  7. אל תוסיף אנשי HR ל-LinkedIn, תשלח קורות חיים רק לחברים שעובדים בחברות שאתה רוצה להגיע אליהם. תפנו אל HR רק כמוצא אחרון (שוב, כי אתם *כנראה* לא צריכים את הכלי הזה).

 

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

–  דור

Awesome!!

Hey guys (and girls),

For a long while I’ve been happily using Fluxbox, and actually I must say, that I started to get a little bored. The reason I moved to Fluxbox is to stay away from limiting-WM, like Unity or GNOME3. but after a while using Fluxbox, I felt I want something even more hardcore, that will give me even more control on my computer.

After a talk with my roommate (which just recently installed Linux, and quite quickly became a Linux master :D), We decided both to switch to Awesome WM, which from the current point of view, seems like a great decision!

Awesome is acutally named after Barney Stinson!

Awesome is acutally named after Barney Stinson!

Few words about Awesome and what makes it so awesome:
Awesome is a very lightweight, dynamic WM, in which you are able to modify just about anything. You have one (very long) configuration file named rc.lua, and yes, all the configuration is in Lua. actually the configuration is way more than just configuration, it’s the whole WM: widgets, toolbars, the way windows work, act and move, shortcuts, mouse actions, menus and more and more and more – everything is lua scripts, extremely configurable.

As I mentioned above, the configuration is huge lua file, containing just about anything in the wm, which makes it hard to read, and easy to mess. for that reason one of the first things I did after installing Awesome, is to split the configuration to several files, and by that making it very easy to understand and modify.
Of course that if I can think of something, probably it’s already in the internet, so after some googling I found phyber’s splitted rc.lua, which gave me a great something to start with  :)

Some more stuff I wrote for my configuration:
Language switcher (which made me write a patch for xkb-switcher)
– extremely generic startup autorun
– hacked Calendar35 a little bit to work with my local configuration

might wanna have a peek in my Github repository.

Anyways – any awesome users out there? I’m looking for tips, ideas, and mostly people for showing off from time to time (my gf isn’t impressed too much from my geeky shit :P)

Dor :)

דברים לעשות *לפני* התקנת אובונטו 13.10

אהלן,

יצאה היום גרסה חדשה של אובונטו (כאמור, 13.10), ואני ממליץ בחום לרוץ ל־ubuntu.com, להוריד, להתקין ולהנות, כמובן בחינם, כראוי לתכנה חופשית. אבל קודם..!

רקע מאת <a href="http://aandre311.deviantart.com">aandre311</a>

רקע מאת aandre311

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

  • קודם־כל, יש לכם דברים חשובים? אל תשכחו לגבות את החומרים האהובים שלכם. יש לא מעט מוצרי cloud חינמיים לגיבויים, למרות שתמיד הכי טוב זה הארדיסק חיצוני :)
  • דבר שני, תעלו לעצמכם את השאלה, האם שווה כבר לשדרג? אם אתם הרפתקנים ואוהבים לשחק עם המחשב, לחקור ולפתור באגים, מומלץ בחום, לא היום אלא אתמול! (דבר שאני כמובן מעודד מאוד). אם לא – תחשבו על זה שוב. תמיד עם שיחרור גרסה עדיין נותרים באגים רבים פתוחים, והמשתמשים הראשונים לשדרג הם כמובן אלה שיאכלו הכי הרבה חראקים.
    אני אפילו יכול להודות שמאז שיש לי פחות זמן לשחק במחשב שלי, כבודו משתמש באובונטו 12.04 LTS (המעולה ד”א), יציבה מאוד ואין הפתעות (איזה יובש, תאמינו לי).
  • עוד שאלה שאתם צריכים לשאול את עצמכם, תמיד, אבל במיוחד לפני שאתם עושים שינויים למערכת ההפעלה שלכם, זה “למה אובונטו?”. יש המון הפצות לינוקס יפות וטובות שהן לא אובונטו, אולי על הדרך תוסיפו קצת צבע חדש לחיים (או למחשב לפחות). אספתי לכם רשימה של מערכות הפעלה ששווה להכיר:

אקסטרים

  • Debian – האבא/אימא(?) של אובונטו, מרגישה קצת יותר מיושנת, אבל אם בא לכם להכיר קצת יותר טוב את המחשב שלכם, בלי להתאבד בדרך, זה אחלה התחלה. הפצה מאוד גנומית, לטוב ולרע (לא יודעים מה זה גנום? אולי כדאי שתעברו לדביאן באמת). למה דביאן זה באקטרים? כי זאת הקפיצה הראשונה שהייתי מציע למי שרוצה לעבור לתחום האקסטרים.
  • Gentoo – אפרופו סביבה גרפית, לג’נטו יש רומן של שנים עם KDE, אולי תרצו להתנסות בה. הקטע העיקרי של ג’נטו זה שהיא מותאמת לחלוטין למחשב שלכם. הכל מקומפל במיוחד עבורכם, מה שאומר שכל התקנה לוקחת הרבה מאוד זמן, אבל תוכנות יגיבות מהר וטוב יותר (או לפחות ככה טוענים). בכל אופן ג’נטו היא חוויה שכל משתמש לינוקס צריך לעבור.
  • Arch – הפצת לינוקס מעולה. רגע, זה לא היה מספיק ברור: מעולה!!!! (!!!). מי שאוהב לשלוט במחשב שלו ב־100%, זה בדיוק בשבילכם. לומדים מההפצה הזאת המון המון המון, כי פשוט אין ברירה אחרת. מצד אחד זה יתן לכם לשחק בהמון קקה, אבל מצד שני סיפוק מובטח לכל משתמש. ההפצה הרבה פחות הארדקור מג’נטו מצד אחד, ומצד שני נותנת לכם את אותה הגמישות. מעבר לזה שיש לה קהילה מדהימה ומחבקת :)

 

“אני סתם רוצה מחשב נוח שעובד”
בסדר בסדר, סה”כ בקשה לגיטימית…

  • ElementaryOS – הפצת לינוקס מעולה למשתמשי קצה, ולדעתי היום היא חוד החנית של תחום הלינוקס למשתמשי קצה. חבורת מעצבים התאספה והחליטה שאין הפצת לינוקס שנותנת תחושה של מערכת הפעלה מוגמרת. הם לקחו את זה נורא ברצינות, ונורא בקטע מקיסטי, אבל אין ספק התוצר הסופי שלהם לא פחות ממדהים.
  • Mageia – אולי נמאס לכם קצת מהגנומיות של אובונטו (בסדר בסדר, זה לא גנום זה יוניטי, מה שתגידו) ובא לכם להכיר קצת דברים חדשים – KDE זה ממש אחלה, וכל משתמש לינוקס בעולם צריך מינימום להתנסות בסביבה הזאת. (המלצה חמה: אל תשתמשו ב־KDE על אובונטו, בדר”כ זה לא נותן את החוויה הראויה לסביבה הזאת). אני מודה שאני שהיא האקסית המיתולוגית שלי (או יותר נכון Mandrake, דאז).
  • Fedora – הפצה מעניינת מהבית של RedHat. יש לה קהילה מאוד חזקה ותומכת ויש בה לא מעט פיצ’רים מגניבים שלא יביישו אף הפצה. מעבר לזה שתזכו להכיר המון טכנולוגיות חדשות ש־RedHat החליטו לזרוק על הקהילה לפני שהיא מכניסה אותם למוצר האנטרפרייז שלהם.

עוד כמה מילים

  • BackTrack/Kali – שמעתי כמה אנשים שבטעות חשבו להתקין את Backtrack על המחשב שלהם. אם חשבתם לעשות דבר כזה, א’ אם אתם מנסים להיראות חכמים ו־1337ים ככה, אז זה בדיוק עושה את ההפך ומוציא אתכם מטומטמים. ב’ לא לזה Backtrack נועד, וחסרים בו המון פיצ’רים שנועדו לעבודה יומיומית (דרייברים לכרטיס קול למשל?).
    לגבי Kali, אולי אני אכתוב יום אחד פוסט שלם על כמה ההפצה המבטיחה הזאת לא שווה כלום וכמה באזז ושעות עבודה היו סביב מערכת הפעלה שאין סיבה לקיום שלה.
  •  לא מזמן שוחרר GNU Hurd 0.5, למשתמשי לינוקס כבדים, אולי שווה להתנסות בה (מודה שלא זכיתי לזה בעצמי, אבל אני מת לנסות!)
  • למה לא אובונטו בעצם? אז ככה: אובונטו היא הפצת לינוקס מעולה, ואם אתם נהנים ממנה ואתם לא אנשים שנהנים לחקור ולגלות עולמות חדשים, אז קודם־כל אני לא מבין מה אתם עושים בלינוקס, ודבר שני אובונטו היא הפצת לינוקס מעולה, אולי הכי טובה שיש למשתמשי קצה נכון להיום, ואי אפשר לתאר את המהפכה שהיא הביאה לעולם הלינוקס. אני אישית משתמש היום באובונטו על רוב המחשבים שלי ואני מרוצה מאוד. אבל אני כבר התנסיתי בהמון הפצות ואני יודע להצביע על מה אני אוהב באובונטו ומה לא, איזה גמישות היא נותנת לי ואיפה היא גורמת לי לרצות למות (ולא חסרים מקומות כאלה). אם אתם לא שם עדיין, כנראה עוד לא הגעתם למנוחה ולנחלה. תמשיכו לחפש ולהתנסות בהפצות שונות כדי לדעת מה יש לעולם הלינוקס להציע לכם, אתם לא תתאכזבו אני מבטיח – ומקסימום, אובונטו לא הולכת לשום מקום.

אם עצבנתי אתכם, אם יש לכם שאלות או אם יש דברים שלא הצבעתי עליהם ושווה להזכיר – אתם מוזמנים להגיב.
דור :)

Fluxbox users team in Launchpad

Hello there,

Actually I’ve never wrote anything about it, but it’s been a long while I’m using Fluxbox, and I must say that I love it very much. it’s fast, customizable and easy to use. – however, new users may not like it as much as I do, because it doesn’t think a lot about the end users.

I wanted to join a Fluxbox users team in Launchpad to spread the word, but it seems that the only close thing to it was some kind of private team ansd did not fit the standards of “X-users”, so I decided to open my own one!

You’re all invited to show you’re support in this great environment on https://launchpad.net/~fluxbox-users, Paul already joined ;)

Dor :)