מבוא לריברסינג - חלק ב


עכשיו אחרי שכיסינו את החלק הבסיסי של בסיסים נתחיל עם הריברסינג עצמו:)

מה במדריך?

-הגדרה והסבר של ריברסינג
-כלים
-מתאוריה למעשים
-סוף דבר

הגדרה והסבר של ריברסינג:
------------------------
דבר ראשון הגדרה:השם המלא(באנגלית) הוא reverse engineering או בעברית הנדסה הפוכה( או להנדס בריברס חח כמו שמישהו אמר לי פעם)..

מה זה אומר? בעיקרון זה אומר בפשטות לקחת משהו ולהנדס אותו הפוך יעני אם המהנדס חושב-בונה משהו אתה מפרק-חושב ומבין איך זה נבנה או\ו איך זה פועל(שמתם לב שהסדר הפוך נכון?)

זוכרים שהייתם ילדים קטנים(או גם היום)ואתם לוקחים משהו מפרקים תו לגמרי מבינים איך הכול עובד אולי אפילו מתקנים אותו ואז זה עובד שוב (או בדרך כלל לא חח) בדיוק אותו דבר בתוכנות מחשב,

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

לפני שמתחילים כמה כלים
----------------------

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

w32dasm דיאסמבלר,מחזיר קובץ exe לקוד אסמבלי.
high view תוכנה מעולה לשינוי תוכניות(אפשר גם להשתמש בכול האקס אדיטור)

יש עוד סוג אחד של כלים שלא נגעתי במדריך זה לכן אני לא אכלול אותו פה אבל מי שבא לו להתעניין(debuggers):
soft ice & OLLYDBG


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

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

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

בשביל להבין מה הקוד עושה ולשנות אותו בהתאם חייב לדעת אסמבלי!למדריך זה אין צורך בידע כזה נרחב אבל לדברים רציניים צריך... בכלל תמיד טוב לדעת
(knowledge is power)...

מי שאין לו ידע בסיסי באסמבלי ילך ללמוד,ואז לחזור ישר לנקודה הזאת!(בשביל מדריך זה צריך להגיע עד לקפיצות בערך) אפשר ללמוד מספר,ממדריכים ברשת וכו אם יש לכם בעיה למצוא פנו אלי(see end of this text).

עכשיו שרוצים להעביר את התוכנה לגרסה המלאה(לפתוח את כל הפונקציות או להעיף תמגבלת זמן וכו')
אז צריך בדרך כלל להכניס סיריאל ללחוץ הרשם(או register) ואז או שזה מקבל אם הסיריאל נכון ופותח או שהוא לא מקבל ואומר לך משהו כמו "key entered not good"

התוכנה בודקת את מה שהכנסת לפי קוד שיש לה בפנים או ע"י חוקיות מסויימת או איזה מאגר ומחזירה תשובה כן או לא וממשיכה בהתאם,עכשיו אפשר ללכת "לפרוץ" את זה בכמה רמות...
1)רמה ראשונה(רמת קושי 1)משנים את המקום שמחליט על התשובה כלומר נגיד והמקום שבודק תסיסמא הוא כזה:
(להפוך כיוון)
{ax has the val of the key u have entered}
{bx has the wanted key}
cmp ax,bx;
je good;
jmp bad;
(להחזיר)
מה יקרה אם נהפוך את התנאי מ je ל jne או שנתן לו את ל jmp את אותה כתובת כמו ה good? גרמנו לו לחשוב שהקי(או מפתח) שלנו נכון הכול ימשיך כאילו הוא נכון ולמעשה סיימנו את עבודתנו! איזה כיף

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

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

3)מה שעוד אפשר לעשות זה להבין את החוקיות של בדיקת המפתח ואז לא צריך לשנות בתוכני כלום(בדרך כלל זה הכי קשה אבל הכי טוב, וגם יש אומרים יותר אתי כי אתה לא משנה משהו של מישהו אחר פה אתה לומד אותו:) )
ובסוף מתקבלת אותה תוצאה מה שנקרא keygenerator מה שטוב בלהבין תחוקיות זה שבדרך כלל מתת גירסה לבאה לא משנים תחוקיות רק מתקנים באגים וכו(לדוגמא מ 1.0 ל 1.01 לא משנים)אז זה יכול להיות טוב ליותר כול סידרה *.1 עד מוציאים *.2 אולי אפילו יותר...לפעמים זה לא אבל עדיין שווה לנסות.

טוב עד כאן על ריברסינג ניסיתי לעשות את זה כמה שיותר כללי כדי לכסות כמה טכניקות וע"י זאת להביא לכם מבוא טוב למקום הנקרא ריברסינג
יש אנשים המכנים זאת אומנות(כן כן..)

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

סוף דבר:
--------
משהו קטן לפני הסוף(word for the wise) למדו דבר אחד! כמו בפריצות למחשבים(אבטחת מידע) אין דבר תוכנה או מחשב שהוא בלתי פריץ זה הכול עניין של משחק מוחות בין המתכנת לפורץ,או יותר נכון שאלה של כמה זמן יש לפורץ כוח לשבת על משהו מול כמה זמן המתכנת ישב כדי להקשות על הפורץ.

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