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

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

Control textbox size with CSS on CF7 (WP)

TL;DR:
If you’re using Contact Form 7, and need to modify any input size by CSS, use “00” as size. it will do the trick 🙂


Hey guys,

In one of my current projects I decided to use Contact Form 7, which is a very nice plugin as long as all you need is a simple, quick mail submission form. It is quite extensible and I saw several awesome extensions for better date support, adding maps to your form etc.

However, in my specific case, I did not choose that plugin for a mailing form, but for registration form, and the reason I decided to use it is that the project i’m on is VERY limited on resources. so even though you should never use CF7 for such purposes, sometimes you gotta do what you gotta do. bummer for me.

One of the most annoying things I had to deal with when using CF7, is the fact they have defaults for their input types, which obviously are hard-coded, and added directly to the HTML, so you cannot change it threw CSS 🙁

I tried putting “0” as size to avoid that, but it seems that someone think it’s not a valid input, so after reading some of its code (here), I noticed that it is possible to use “00” as a valid input!

Of course size=”00″ means nothing, and your sweet CSS can take charge of the size 🙂

Hope that this tip would help anyone…

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.