כותב |
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 05 December 2007 בשעה 08:21 | | IP רשוּם
|
|
|
|
ככה החלתי להתחיל ללמוד ב Reverse engineering זה נראה לי דבר מעניין מאוד ( הרבה יותר מתיכנות בשפה עילית ) והשאלה שלי היא איפה מתחילים ? למי שלא הבין אני רוצה לדעת להבין קוד כזה :
ולדעת לשנות אותו בתאם למה שאני צריך
כמה זמן בערך אני צריך ללמוד כדי להבין תוכניות פשוטות כמו פנקס רשימות וכאלה ?
תודה לעוזרים
|
חזרה לתחילת העמוד |
|
|
inHaze משתמש פעיל
הצטרף / הצטרפה: 23 November 2006 מדינה: Israel
משתמש: מנותק/ת הודעות: 119
|
נשלח בתאריך: 05 December 2007 בשעה 18:39 | | IP רשוּם
|
|
|
|
זה ממש קשה, אתה חייב להיות תותח באסמבלי. וגם להכיר את התוכנה שאתה מנסה לעשות לה reverse engineering עד לפרטים הכי קטנים.
איך אתה באסמבלי?
__________________ הבלוג שלי
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 05 December 2007 בשעה 19:00 | | IP רשוּם
|
|
|
|
1) אני לא יודע מה זה assembly כמעט ואני יודע שזה ממש קשה ומעניין בגלל זה בא לי ללמוד את זה כי זה לא שטיות JS או עוד שפת תיכנות ועכשיו שאני יודע יחסית טוב אפילו ממש טוב את היסודות אפילו שאין עדיין שפה מסוימת שאני יודע באופן מושלם אני וכמו שאמרתי אני רק עכשיו מתחיל ולא איכפת לי כמה זה יקח זה משתלם אפילו שנתיים שלוש ( זה בערך מה שאני מניח ) אז להתחיל מ ASSEMBLY ? וגם , מישהו יכול להעריך כמה זמן יקח לי לדעת להבין מה עשוה תוכנה פשוטה נגיד ( מחשבון או משהו כזה ) או לשנות בה משהו נגיד להוסיף למחשבון של וינדוס עוד כפתור שמדפיס HELLO על מסך צריך הערכת זמן שנה שנתיים חמש ?
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 06 December 2007 בשעה 21:09 | | IP רשוּם
|
|
|
|
לא סביר.
כדי לעשות reverse engineering לתוכנות ווינדוס אתה צריך לדעת אסמבלי די טוב. אבל יותר מזה, אתה גם צריך להכיר את ווינדוס די טוב. להוסיף כפתור שמדפיס הודעה זה בלאגן שלם: אתה צריך לצייר את הכפתור במקום אחד, ולהגדיר לו פונקציה שמגיבה על הודעות. כשילחצו עליו ווינדוס תשלח הודעה לפונקציה ההיא, ושם יש בדיקה עצומה מול טבלה של ההודעות שהפונקציה מכירה. לכתוב את זה באסמבלי זה לא טריוויאלי, ולעשות reverse engineering לפונקציות שבהן עשרות ומאות רשומות בטבלה הזאת זה גם לא הכי פשוט או כיף.
על להתחיל ללמוד אסמבלי כשפה ראשונה אומרים אצלנו ש-it borders with crispiness.
כדי לעשות reverse engineering לקוד שנכתב בשפה מסויימת אתה צריך להכיר את השפה. עוד סיבה טובה להתחיל ללמוד CPP ו-C ואסמבלי. שלושתן זה פשוט המינימום כדי לשחזר קוד מקור, וגם אז זה לא הכי פשוט, בוא נגיד.
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 07 December 2007 בשעה 07:02 | | IP רשוּם
|
|
|
|
1) אמרתי כבר שאני יודע שזה בין הנושאים הכי קשים שיש ואני לא מבין בו כלום אבל זאת הסיבה שאני רוצה ללמוד אותו 2) אני מבין למה צריך להכיר את וינדוס אבל למה אני צריך לדעת C\C++ ? הרי גם ככה שאני פותח את זה עם התוכנה הזאת שהפוכת את זה ל אסמבלר אני אראה רק אסמבלר ...
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 07 December 2007 בשעה 09:54 | | IP רשוּם
|
|
|
|
וכדי להבין את קוד האסמבלי אתה צריך להבין מאיפה הוא בא. יש מבנים שקל לזהות באסמבלי (נגיד for או switch), ויש מבנים שקצת פחות קל. להבין במבט אחד קוד אסמבלי שעושה dynamic_cast-ים קצת פחות טריוויאלי. אם אתה לא יודע מה זה dynamic_cast ומה הוא עושה, קשה לי לתאר לעצמי מה תבין מקוד האסמבלי שמייצג אותו.
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 07 December 2007 בשעה 15:06 | | IP רשוּם
|
|
|
|
זאת אומרת שכדי להחזיר קוד למקור , כדאי מאוד לדעת את השפה שבה הוא נכתב במקור ( זה נשמע לי הגיוני ) וגם להכיר את המערכת הפעלה שעליה הוא אמור לרוץ ? ( שזה גם נשמע לי למרות שלא אמרת את זה ) אבל אני לא מבין בכלל איך אני אדע באיזה שפה נכתב הקובץ כי הרי בסוף גם ככה אני רואה הכול באסמבלר אז לא משנה לי כ"כ מהו הדבר שאותו אני מנסה לפתור אלא מה הוא עושה ... זה כול העיניין נגיד dynamic_cast ( שאגב אני לא יודע מה זה ) עושה משהו מסויים ואתה אומר שאני צריך לדעת לזהות את זה אז אם אני אבין דרך האסמבלר מהו עושה כבר לא יהיה איכפת לי אם זיהיתי את זה או לא כי אני יודע מה התפקיד של אותו דבר בגלל שלבד הבנתי מבלי להכיר אותו קודם
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 09 December 2007 בשעה 23:02 | | IP רשוּם
|
|
|
|
אז זהו, שזה לא מספיק להגיד "הרי בסוף גם ככה אני רואה הכול באסמבלר אז לא משנה לי כ"כ מהו הדבר שאותו אני מנסה לפתור אלא מה הוא עושה". יש מיליון דרכים לעשות כל פעולה, וכל קוד מקור, וכל קומפיילר, וכל מצב רוח שונה שלו ייצרו תוצאות שונות לחלוטין.
בלי להכיר את הצורה של קוד מקור ואת מה שהקומפיילר והלינקר וה-loader עושים לו כדי שהוא ירוץ הסיכויים שלך להבין את קוד המכונה שואפים לאפס. רוצה הוכחה? תנסה לעשות את הדברים הללו בלי הידע שציינתי שדרוש ונראה עד כמה רחוק תגיע. :)
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 10 December 2007 בשעה 10:05 | | IP רשוּם
|
|
|
|
עכשיו סיבכת את זה לגמריי ז"א שאם אני רוצה להחזיר משהו לקוד מקור אני חייב : 1) לדעת באיזה מערת הפעלה ותחת איזה קומיילר הוא קומפל ואיך הקומפיילר עובד 2) על איזה מעבד ואיך המעבד הזה עובד 3) באיזה שפה הוא נכתב במקור זה נשמע לי כמעט בלתי אפשרי אתה בטוח שעד כדי כך ?
|
חזרה לתחילת העמוד |
|
|
11010010110 פורומיסט על
הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת הודעות: 2621
|
נשלח בתאריך: 10 December 2007 בשעה 14:25 | | IP רשוּם
|
|
|
|
אכן ז לא סביר לעשות הנדסה לאחור לתוכנות windows על ידיי
אסמבלי
אותו פנקס רשימות שנראה די פשוט למעשה קורא למלא פונקציות
מה API של חלונות כך שאם אתה בא להנדס לאחו אתה אמור
להנדס חלק מחלונות .. . .
. . . מה שכן עשו. למשל בפרוייקט הקוד הפתוח wine שמאפשר
להפעיל קבציי exe של חלונות בלינוקס. ה wine הוא פשוט
מימוש עצמאי של פונקציות API שנמצאות ב dll ים של חלונות
וכך ה exe ים מרגישים 'בבית'
http://winehq.com
אני לא מסכים אם אלצ'קו אלא ההיפך ממליץ על אסמבי בתור
שפה ראשונה
אבל אני חושב שנכון יותר להתחיל מנקודה אחרת - בנייה (ולא
הנדסה לאחור) של תוכנות עצמאיות קטנות (מה שאומר תוכניות
DOS או תוכניות קונסול פשוטות של לינוקס)
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 10 December 2007 בשעה 15:25 | | IP רשוּם
|
|
|
|
אני מכיר את WINE אבל המטרה שלי היא לא "מה הדרך הקלה ביותר להבין איך חלונות עובד" כי אם כן אני יודע שיש כבר אנשים כהחזירו חלקים גדולים ממנו ... אני רוצה ללמוד איך לכתוב תוכנות בהנחה שאין "מתחתי" שום דבר חוץ מהחומרה והאפשרויות שבאות איתה ( כאילו לכתוב מערכת הפעלה משלי שלא מבוסס על כלום וחוץ מהחומרה ) וגם לדעת לשנות מערכות הפעלה קיימות רק על פי הקבצים הבינאריים שלהם אני יודע שזה שנמע מוגזם לעשות את שתי הדברים האלה אבל יש לי תחושה שאחד מהם תלוי בשני (זאת אומרת שאם אני אדע אחד מהם אוטמטית אני אדע את השני ) רק אני לא יודע איזה מהם מביא לידעת השני לדעת לבנות או לדעת לפרק ?
ועוד דבר 100 אמרת ש "
אכן ז לא סביר לעשות הנדסה לאחור לתוכנות windows על ידיי
אסמבלי
" אם זה לא סביר על ידי אסמבלי אז על ידי מה ? או שהתכוונת שזה לא סביר שמישהו מתחיל ינסה להחזיר את הקוד מקור ?
|
חזרה לתחילת העמוד |
|
|
11010010110 פורומיסט על
הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת הודעות: 2621
|
נשלח בתאריך: 10 December 2007 בשעה 19:11 | | IP רשוּם
|
|
|
|
לא סביר שתוכל להבין איך פנקס רשימות עובד אם תהנדס לאחור
רק את ה exe שלו כי הרוב המוחלט שלו ממומש בתכלס ב dll ים
של חלונות ולא ב exe
זה בידיוק מה שאתה מתכוון אליו - בין פנקס רשימות והחומרה
יש המון דברים של חלונות. פנקס רשימות לא בנוי ישר על
החומרה
אם אתה מחפש משהוא 'נקי' תחפש בתוכנות ישנות של DOS או
האקים של אסמבלי של דוס או לינוקס ולא בתוכנות של חלונות
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 10 December 2007 בשעה 20:02 | | IP רשוּם
|
|
|
|
עזבו את פנקס הרשימות הוא היה דוגמה לא טובה נגיד ויש לי פנקס רשימות אחר ( NOTEPAD++ ) למשל שיש לי DDL ים משלו , מה אני צריך לדעת כדי לעשות לו הנדסה אחורית ? ( אני יודע שהור קוד מקור פתוח סתם ננתי אותו לדוגמה נגיד והוא לא היה קוד מקור פתוח ) מה צריך ומה צריך לדעת כדי לעשות לתוכנה עצמאית הנדסה אחורית ?
|
חזרה לתחילת העמוד |
|
|
11010010110 פורומיסט על
הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת הודעות: 2621
|
נשלח בתאריך: 10 December 2007 בשעה 21:17 | | IP רשוּם
|
|
|
|
עדיין לא כי הוא (וה dll שלו) משתמשים המון ב API של
חלונות
תתחיל ממשהוא של DOS שם יש לך סיכוי טוב למצוא
אסמבלי 'אמיתי'
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 10 December 2007 בשעה 22:27 | | IP רשוּם
|
|
|
|
אבל איך להתחיל מה לעשות ? בנתיים יש לי disassembler שאני פותח איתו ה EXE ורואה הרבה פקודות ASM אז קודם צריך לדעת ASM או לדעת איך הדבר עובד זה עדיין לא ברור לי ?
|
חזרה לתחילת העמוד |
|
|
11010010110 פורומיסט על
הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת הודעות: 2621
|
נשלח בתאריך: 11 December 2007 בשעה 01:23 | | IP רשוּם
|
|
|
|
אתה יכול ללמוד בדרך ה '+' (לבנות) ולא רק ה '-' (לפרק
משהוא קיים)
לא אמרתי שאחת מהדרכים עדיפה יותר
נסה למצוא איזה פרוייקט ב ASM
זה מדריך טובל ASM של לינוקס בכיוון ה '+'. ניתן ללמוד
ממנו ללא קשר למערכת הפעלה שאיתה אתה משתמש
http://download.savannah.gnu.org/releases/pgubook/
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 11 December 2007 בשעה 20:48 | | IP רשוּם
|
|
|
|
decimal כתב:
עכשיו סיבכת את זה לגמריי ז"א שאם אני רוצה להחזיר משהו לקוד מקור אני חייב : 1) לדעת באיזה מערת הפעלה ותחת איזה קומיילר הוא קומפל ואיך הקומפיילר עובד 2) על איזה מעבד ואיך המעבד הזה עובד 3) באיזה שפה הוא נכתב במקור זה נשמע לי כמעט בלתי אפשרי אתה בטוח שעד כדי כך ?
|
|
|
"להחזיר משהו לקוד מקור" זה רעיון מופרך. אם זו המטרה שלך, שום דבר לא יכול לעזור לך. בוא נדבר על מטרות רציניות: אתה רוצה לדעת כיצד פעולה מסויימת ממומשת; אתה רוצה לדעת איך לעקוף הגנה מסויימת בתוכנה; אתה רוצה לדעת איך תוכנה מסויימת מתקשרת עם תוכנה אחרת; אתה רוצה להבין פורמט קבצים בלתי-מתועד בו שומרת תוכנה מסויימת את הנתונים שלה. עכשיו כשיש לנו מטרות נורמליות בוא נבין מה אנחנו מנסים לעשות פה. אנחנו רואים קוד אסמבלי, וממנו רוצים להבין רעיון high-level-י כלשהו. אם מדובר פשוט באלגוריתם כלשהו ("נקי"), אז כנראה שכל מה שאנחנו צריכים לעשות זה לדעת קצת אסמבלי (לזהות פעולות אריתמטיות ולוגיות ומבני בקרה פשוטים, בגדול). אבל מה אם אנחנו רוצים להבין פרוטוקול תקשורת מסויים? כל הזין! אתה צריך להבין איפה התוכנה פותחת תקשורת, איך היא שולחת הודעות, איך היא מקבלת הודעות, ועוד ועוד. בשלב הזה אתה צריך להכיר את הסביבה שמספקת לך את התקשורת הזו. גם אם אתה לא יודע עליה כלום, ברגע שתתחיל לעבוד תגלה שאתה נאלץ ללמוד את החלקים הספציפיים שאתה מתממשק מולם.
אין מה לעשות. אתה לא עובד בוואקום. גם אם היית קורא קוד שעובד ישירות מעל החומרה, היית צריך להכיר את הסביבה שמתחתיו. במקרה הזה זו לא הייתה ספריית תקשורת או מערכת הפעלה, אלא החומרה עצמה. מה המשמעות של כל פסיקה; של כל אוגר; של כל כתובת שמורה. אין פקודת אסמבלי של "שדר פקטת HTTP GET דרך כרטיס רשת"...
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 12 December 2007 בשעה 21:50 | | IP רשוּם
|
|
|
|
אלצ'יקו , לא יודע מאיפה הבאת את זה , אבל זה בדיוק מה שבאתי לשאול : "איך אני יכול לכתוב קליינט לתוכנה לא שהקוד שלה לא פתוח כמו ICQ למשל ?" או "איך אני יכול לכתוב תוכנה שפותחת קבצים מסוג XXX שיוצרת תוכנה שהקוד שלה סגור כמו פוטושופ למשל ?" בקיצור אני אתחיל ללמוד אסמבלי ( לפי כול מה שנאמר פה אני מבין שחייב לדעת את זה לעשות הנדסה אחורית לתוכנה ) , השגתי מאיפה שהוא לא יודע איך אחרי שעות רבות של חיפושים ברשת מדריך בעיברית על אסמבלי את זה : http://cse.proj.ac.il/index_units.htm זה טוב ? ( מבחינת התוכן של ההסברים כי האופן שהספר כתוב הוא בין הספר הברור היחיד שראיתי לא חשבתי שקיים מקור כול כך טוב לאסמבלי בעיברית )
|
חזרה לתחילת העמוד |
|
|