עצלנות של מפתחים ואבטחת מידע – והפעם כיצד לעקוף את הבדיקה שטלריק עושים האם קניתם את המוצר (2)

30 במרץ 2012

תגיות: , ,
2 תגובות


 


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

 

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

 

 

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

 

 

אז ככה, במידה ויש לכם את החבילה לעולם ה – Windows forms, סביר להניח שמידי פעם הייתם מקבלים את החלון הבא:

 

telerik win fors

 

 

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

 

 



private void CheckLicense()


{


    if ((RadControl.licenseCount == -1) && (numberOfEvalMsgsShown < 3))


    {


        RadControl.licenseCount = new Random().Next(0, 10);


        if (RadControl.licenseCount == 1)


        {


            Assembly assembly = null;


            foreach (Assembly assembly2 in AppDomain.CurrentDomain.GetAssemblies())


            {


                if (assembly2.FullName.Contains("Telerik.WinControls.UI"))


                {


                    assembly = assembly2;


                    break;


                }


            }


            if (assembly != null)


            {


                Type type = assembly.GetType("Telerik.WinControls.UI.Licensing.RadEvaluationForm");


                object target = Activator.CreateInstance(type);


                type.InvokeMember("ShowDialog", BindingFlags.InvokeMethod, null, target, null);


            }


            else


            {


                using (EvaluationForm form = new EvaluationForm())


                {


                    form.ShowDialog();


                }


            }


            numberOfEvalMsgsShown++;


        }


    }


}


 

 

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

לאחר מכן האם כבר הוצגו שלוש הודעות על גרסת הניסיון.

 

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

 

 

אחרי שמצאתי את הקוד – לעקוף אותו זה כבר עניין פשוט, היות שהחכמים האלו משתמשים ב – Reflection כדי לייצר את המופע – ויותר מכך הם בודקים האם ה – dll טעון לזיכרון לפי השם שלו, יצרתי dll חדש שקראתי לו Telerik.WinControls.UI.Crack, הוספתי לו את הקוד הבא:

 



namespace Telerik.WinControls.UI.Crack


{


    public class RadEvaluationForm


    {


        public static void Crack()


        {


 


        }


    }


}


 


namespace Telerik.WinControls.UI.Licensing


{


    public class RadEvaluationForm


    {


        public void ShowDialog()


        {


 


        }


    }


}


 

בפונקצית Main לפני הכול קראתי ל – Crack

 



RadEvaluationForm.Crack();


 

מה שקורה הוא שהיות שהשימוש בפונקציית Crack קורה לפני כל דבר אחר, ה – dll שלי (שכזכור עומד בבדיקה שהם עשו – Contain על השם שלו) נטען ראשון לזיכרון, ולכן כשהם יבקשו מופע של החלון הם יקבלו את המחלקה שלי שפונקציית ה – ShowDialog לא עושה כלום.

 

דרך אחרת – היא פשוט להריץ קוד שיבצע את הדבר הבא:

 



Type type = typeof(RadElementTree);


FieldInfo evalMsgInfo = type.GetField("numberOfEvalMsgsShown", BindingFlags.NonPublic | BindingFlags.Static);


evalMsgInfo.SetValue(null, 50);


 

 

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

הוסף תגובה
facebook linkedin twitter email

להגיב על יוסי לבטל

האימייל לא יוצג באתר. שדות החובה מסומנים *

2 תגובות

  1. יוסי31 במרץ 2012 ב 2:12

    עבור ה-RADCONTROLS למינהם. לפי יוזר וסיסמה? לפי סריאל?
    תיאורטית, מה מונע ממני להשתמש בגרסת ניסיון ופשוט לסבול את ההודעות המעצבנות?

    הגב
  2. רון קליין31 במרץ 2012 ב 20:23

    אהבתי את הפוסט, חביב ביותר!

    הגב