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

לקראת השיחרור שלי מצה”ל ותחילת חיפושי העבודה והראיונות, הגעתי למסקנה שלמרות שהייתי ביחידה טכנולוגית, מרגע שסיימתי את קורס היסוד שלי תם עידן הפיתוח האישי בצבא, ובעצם הרגשתי שעמדתי במקום כמעט לגמרי מבחינת התפתחות מאותו רגע ועד לשיחרור שלי 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 :)

Download all dependencies of a package on Ubuntu/Debian

UPDATE: Thanks To Julian, Now I know you can simply use

aptitude download ‘?reverse-depends(PKGNAME)’

 Awesome.


Hey there!

Several days ago a colleague asked me if there’s a way to download the dependencies of a package in a Debian based distribution, for an offline use.
Sound like an easy task, and after a while of thinking, i got remembered in a tool that used to ship with Ubuntu back in the days, called “Synaptic”, that used to have that tool.

However, there are some cons to that tool. first of all it’s a GUI one (GUI? Eeeeww!”), and second, it downloads only the packages missing to your current installation, so if you’re offline installation dismatch your own one, you’ve got a problem.

So I decided to take it as a challenge, and ended up with a little script I hope will help ya’ll. And you may find it in my github of course…

https://github.com/Ddorda/dl-deb-deps/blob/master/dl-deb-deps.sh

I think it’s pretty much straight-forward code, but if you have any questions you’re more than welcome to ask.

Dor.

Back to Flux

Hey there all,

It’s been a while since i wrote last time. sorry for that, i’ve been really busy recently… Hope to find some more time to write in the future.

I decided to write again for a really good reason: After a really long time that i’ve been using a standard plain Ubuntu installation on my laptop, I decided to change back to Fluxbox! Hurray!

I hear many people saying how Ubuntu is getting lame lately, and how Unity is the worst WM ever. I extremely disagree. Ubuntu is going very straight forward toward their great goal: bringing Linux everywhere, and you can’t say they’re not trying their best. every time a new Ubuntu version is released the whole network is buzzing, once again Canonical broke the rules when playing with something that should never be touched in the UNIX world (Pidgin? GDM? GNOME? Xorg? remember all those?). Canonical has a vision, and they do w/e they can to get there. I don’t always agree with what they do, but they touch any taboo they can, and that’s awesome.

A word about Unity: it coud be better. for ex. i can’t see why they removed the 2d version, since compiz is a resources killer. I hate that they removed all the configurations gnome had, every time I enter Unity i feel in some kind of virtual prison, can’t touch anything can’t change anything, what’s linux in that?? :(
However, i fell in love with the HUD (Menus search), and probably will find a way to use it outside unity sometime soon.

So as i said, even though Unity has it’s own awesome features, for a long time I felt I no longer control my machine, and wanted to switch back to Fluxbox, but couldn’t find time.. Until now :)

Fluxbox Desktop

Of course using anything different from Unity on Ubuntu isn’t always an easy task, and I had my own challanges on the way. I promise to publish some notes on hacks i’ve done to make my Linux work faster and look better.

Dor.