נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: Reverse engineering - חייב עזרה

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 05 December 2007 בשעה 08:21 | IP רשוּם
ציטוט decimal

ככה החלתי להתחיל ללמוד ב Reverse engineering זה נראה לי דבר מעניין מאוד ( הרבה יותר מתיכנות בשפה עילית ) והשאלה שלי היא איפה מתחילים ?
למי שלא הבין אני רוצה לדעת להבין קוד כזה :




ולדעת לשנות אותו בתאם למה שאני צריך

כמה זמן בערך אני צריך ללמוד כדי להבין תוכניות פשוטות כמו פנקס רשימות וכאלה ?

תודה לעוזרים
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
inHaze
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 23 November 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 119
נשלח בתאריך: 05 December 2007 בשעה 18:39 | IP רשוּם
ציטוט inHaze

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

איך אתה באסמבלי?



__________________
הבלוג שלי
חזרה לתחילת העמוד הצג את כרטיס החבר של inHaze חפש הודעות אחרות של inHaze
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 05 December 2007 בשעה 19:00 | IP רשוּם
ציטוט decimal

1) אני לא יודע מה זה assembly כמעט
ואני יודע שזה ממש קשה ומעניין בגלל זה בא לי ללמוד את זה כי זה לא שטיות JS או עוד שפת תיכנות ועכשיו שאני יודע יחסית טוב אפילו ממש טוב את היסודות אפילו שאין עדיין שפה מסוימת שאני יודע באופן מושלם אני וכמו שאמרתי אני רק עכשיו מתחיל ולא איכפת לי כמה זה יקח זה משתלם אפילו שנתיים שלוש ( זה בערך מה שאני מניח )
אז להתחיל מ ASSEMBLY ?
וגם , מישהו יכול להעריך כמה זמן יקח לי לדעת להבין מה עשוה תוכנה פשוטה נגיד ( מחשבון או משהו כזה ) או לשנות בה משהו נגיד להוסיף למחשבון של וינדוס עוד כפתור שמדפיס HELLO על מסך צריך הערכת זמן שנה שנתיים חמש ?
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג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 רשוּם
ציטוט decimal

1) אמרתי כבר שאני יודע שזה בין הנושאים הכי קשים שיש ואני לא מבין בו כלום אבל זאת הסיבה שאני רוצה ללמוד אותו
2) אני מבין למה צריך להכיר את וינדוס אבל למה אני צריך לדעת C\C++ ? הרי גם ככה שאני פותח את זה עם התוכנה הזאת שהפוכת את זה ל אסמבלר אני אראה רק אסמבלר ...

חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג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 רשוּם
ציטוט decimal

זאת אומרת שכדי להחזיר קוד למקור , כדאי מאוד לדעת את השפה שבה הוא נכתב במקור ( זה נשמע לי הגיוני ) וגם להכיר את המערכת הפעלה שעליה הוא אמור לרוץ ? ( שזה גם נשמע לי למרות שלא אמרת את זה )
אבל אני לא מבין בכלל איך אני אדע באיזה שפה נכתב הקובץ כי הרי בסוף גם ככה אני רואה הכול באסמבלר אז לא משנה לי כ"כ מהו הדבר שאותו אני מנסה לפתור אלא מה הוא עושה ...
זה כול העיניין נגיד dynamic_cast ( שאגב אני לא יודע מה זה ) עושה משהו מסויים ואתה אומר שאני צריך לדעת לזהות את זה אז אם אני אבין דרך האסמבלר מהו עושה כבר לא יהיה איכפת לי אם זיהיתי את זה או לא כי אני יודע מה התפקיד של אותו דבר בגלל שלבד הבנתי מבלי להכיר אותו קודם
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג2ר פ33תי

הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת
הודעות: 609
נשלח בתאריך: 09 December 2007 בשעה 23:02 | IP רשוּם
ציטוט אלצ'קו

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

בלי להכיר את הצורה של קוד מקור ואת מה שהקומפיילר והלינקר וה-loader עושים לו כדי שהוא ירוץ הסיכויים שלך להבין את קוד המכונה שואפים לאפס. רוצה הוכחה? תנסה לעשות את הדברים הללו בלי הידע שציינתי שדרוש ונראה עד כמה רחוק תגיע. :)
חזרה לתחילת העמוד הצג את כרטיס החבר של אלצ'קו חפש הודעות אחרות של אלצ'קו
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 10 December 2007 בשעה 10:05 | IP רשוּם
ציטוט decimal

עכשיו סיבכת את זה לגמריי ז"א שאם אני רוצה להחזיר משהו לקוד מקור אני חייב :
1) לדעת באיזה מערת הפעלה ותחת איזה קומיילר הוא קומפל ואיך הקומפיילר עובד
2) על איזה מעבד ואיך המעבד הזה עובד
3) באיזה שפה הוא נכתב במקור
זה נשמע לי כמעט בלתי אפשרי אתה בטוח שעד כדי כך ?
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
11010010110
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת
הודעות: 2621
נשלח בתאריך: 10 December 2007 בשעה 14:25 | IP רשוּם
ציטוט 11010010110

אכן ז לא סביר לעשות הנדסה לאחור לתוכנות windows על ידיי
אסמבלי

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

. . . מה שכן עשו. למשל בפרוייקט הקוד הפתוח wine שמאפשר
להפעיל קבציי exe של חלונות בלינוקס. ה wine הוא פשוט
מימוש עצמאי של פונקציות API שנמצאות ב dll ים של חלונות
וכך ה exe ים מרגישים 'בבית'

http://winehq.com




אני לא מסכים אם אלצ'קו אלא ההיפך ממליץ על אסמבי בתור
שפה ראשונה

אבל אני חושב שנכון יותר להתחיל מנקודה אחרת - בנייה (ולא
הנדסה לאחור) של תוכנות עצמאיות קטנות (מה שאומר תוכניות
DOS או תוכניות קונסול פשוטות של לינוקס)

חזרה לתחילת העמוד הצג את כרטיס החבר של 11010010110 חפש הודעות אחרות של 11010010110
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 10 December 2007 בשעה 15:25 | IP רשוּם
ציטוט decimal

אני מכיר את WINE אבל המטרה שלי היא לא "מה הדרך הקלה ביותר להבין איך חלונות עובד" כי אם כן אני יודע שיש כבר אנשים כהחזירו חלקים גדולים ממנו ...
אני רוצה ללמוד איך לכתוב תוכנות בהנחה שאין "מתחתי" שום דבר חוץ מהחומרה והאפשרויות שבאות איתה ( כאילו לכתוב מערכת הפעלה משלי שלא מבוסס על כלום וחוץ מהחומרה )
וגם לדעת לשנות מערכות הפעלה קיימות רק על פי הקבצים הבינאריים שלהם אני יודע שזה שנמע מוגזם לעשות את שתי הדברים האלה אבל יש לי תחושה שאחד מהם תלוי בשני (זאת אומרת שאם אני אדע אחד מהם אוטמטית אני אדע את השני ) רק אני לא יודע איזה מהם מביא לידעת השני לדעת לבנות או לדעת לפרק ?

ועוד דבר 100 אמרת ש " אכן ז לא סביר לעשות הנדסה לאחור לתוכנות windows על ידיי
אסמבלי "
אם זה לא סביר על ידי אסמבלי אז על ידי מה ? או שהתכוונת שזה לא סביר שמישהו מתחיל ינסה להחזיר את הקוד מקור ?
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
11010010110
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת
הודעות: 2621
נשלח בתאריך: 10 December 2007 בשעה 19:11 | IP רשוּם
ציטוט 11010010110

לא סביר שתוכל להבין איך פנקס רשימות עובד אם תהנדס לאחור
רק את ה exe שלו כי הרוב המוחלט שלו ממומש בתכלס ב dll ים
של חלונות ולא ב exe

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

אם אתה מחפש משהוא 'נקי' תחפש בתוכנות ישנות של DOS או
האקים של אסמבלי של דוס או לינוקס ולא בתוכנות של חלונות
חזרה לתחילת העמוד הצג את כרטיס החבר של 11010010110 חפש הודעות אחרות של 11010010110
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 10 December 2007 בשעה 20:02 | IP רשוּם
ציטוט decimal

עזבו את פנקס הרשימות הוא היה דוגמה לא טובה נגיד ויש לי פנקס רשימות אחר ( NOTEPAD++ ) למשל שיש לי DDL ים משלו , מה אני צריך לדעת כדי לעשות לו הנדסה אחורית ? ( אני יודע שהור קוד מקור פתוח סתם ננתי אותו לדוגמה נגיד והוא לא היה קוד מקור פתוח ) מה צריך ומה צריך לדעת כדי לעשות לתוכנה עצמאית הנדסה אחורית ?
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
11010010110
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת
הודעות: 2621
נשלח בתאריך: 10 December 2007 בשעה 21:17 | IP רשוּם
ציטוט 11010010110

עדיין לא כי הוא (וה dll שלו) משתמשים המון ב API של
חלונות

תתחיל ממשהוא של DOS שם יש לך סיכוי טוב למצוא
אסמבלי 'אמיתי'
חזרה לתחילת העמוד הצג את כרטיס החבר של 11010010110 חפש הודעות אחרות של 11010010110
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 10 December 2007 בשעה 22:27 | IP רשוּם
ציטוט decimal

אבל איך להתחיל מה לעשות ?
בנתיים יש לי disassembler שאני פותח איתו ה EXE ורואה הרבה פקודות ASM אז קודם צריך לדעת ASM או לדעת איך הדבר עובד זה עדיין לא ברור לי ?
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
11010010110
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת
הודעות: 2621
נשלח בתאריך: 11 December 2007 בשעה 01:23 | IP רשוּם
ציטוט 11010010110

אתה יכול ללמוד בדרך ה '+' (לבנות) ולא רק ה '-' (לפרק
משהוא קיים)

לא אמרתי שאחת מהדרכים עדיפה יותר

נסה למצוא איזה פרוייקט ב ASM



זה מדריך טובל ASM של לינוקס בכיוון ה '+'. ניתן ללמוד
ממנו ללא קשר למערכת הפעלה שאיתה אתה משתמש

http://download.savannah.gnu.org/releases/pgubook/
חזרה לתחילת העמוד הצג את כרטיס החבר של 11010010110 חפש הודעות אחרות של 11010010110
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג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 רשוּם
ציטוט decimal

אלצ'יקו , לא יודע מאיפה הבאת את זה , אבל זה בדיוק מה שבאתי לשאול :
"איך אני יכול לכתוב קליינט לתוכנה לא שהקוד שלה לא פתוח כמו ICQ למשל ?"
או
"איך אני יכול לכתוב תוכנה שפותחת קבצים מסוג XXX שיוצרת תוכנה שהקוד שלה סגור כמו פוטושופ למשל ?"
בקיצור אני אתחיל ללמוד אסמבלי ( לפי כול מה שנאמר פה אני מבין שחייב לדעת את זה לעשות הנדסה אחורית לתוכנה ) , השגתי מאיפה שהוא לא יודע איך אחרי שעות רבות של חיפושים ברשת מדריך בעיברית על אסמבלי את זה :
http://cse.proj.ac.il/index_units.htm
זה טוב ? ( מבחינת התוכן של ההסברים כי האופן שהספר כתוב הוא בין הספר הברור היחיד שראיתי לא חשבתי שקיים מקור כול כך טוב לאסמבלי בעיברית )
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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