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

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

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

– דור

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.

איך להעלים את הפרסומות מהאפליקציה של ynet באנדרואיד (לינק חדש)

אהלן,

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

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

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

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

ווינט ללא פרסומות

איפה הפרסומות?

מתקדמים –

ערכו את הקובץ ‎/etc/hosts והוסיפו לרשומה הראשונה (127.0.0.1) את הכתובות הבאות:
media.admob.com pubads.g.doubleclick.net pagead2.googlesyndication.com partnerad.l.doubleclick.net

כנראה שתצטרכו לעגון את /‎/system/etc דבר שתוכלו לעשות בעזרת:
‎# mount -o remount,rw /system
או
‎# mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system

מתחילים –

התקינו את האפליקציה החינמית Hosts Editor.
היכנסו לאפליקציה, סמנו את 127.0.0.1 ומחקו אותו.
לאחר מכן לחצו על New Entry, ב-IP Adress הכניסו 127.0.0.1 וב-Host Entries הכניסו את השורה הבאה:
localhost media.admob.com pubads.g.doubleclick.net pagead2.googlesyndication.com partnerad.l.doubleclick.net

שימו לב שב-partnerad.l.doubleclick.net האות המובלטת היא L ולא 1.

זהו! האפליקציה של ווינטי ללא פרסומות!

דור 🙂

הערה: השימוש בתוכן המדריך באחריות המשתמש בלבד.

איך לבטל את החשבון אורח באובונטו 12.04

שלום לכולם,

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

כדי לעשות זאת, השתמשו בצירוף המקשים Alt+F2 והדביקו בחלון שנפתח את השורה הבאה:

gksudo gedit /etc/lightdm/lightdm.conf

שורה זו תפתח לכם את קובץ ההגדרות של lightdm שאחראי על ההתחברות לאובונטו.

עתה הוסיפו לשורה האחרונה של הקובץ את השורה:

allow-guest=false

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

sudo restart lightdm

 תהנו!
דור 🙂