Mr.Visual Basic
21-04-2009, 03:05 PM
السلام عليكم ورحمة الله وبركاته
أعزائي المبرمجين المشاغبين منذ فترة كنت أبحث عن طريقة لحماية تطبيقاتي المكتوبة بوساطة الدوت نت من ((إعادة هندسة الكود)). ولم أجد موقعاً عربياً يفيد بما فيه الكفاية، في حين كانت المواقع الأخرى تزدحم بمواضيع حماية الكود. فقررت أن أطرح موضوعاً متكاملاً لحماية تطبيقاتنا وبرامجنا العربية المكتوبة على الدوت نت من أخطار التكريك وذلك لأن موضوع الحماية الفكرية والبرمجية أمر يهمني جداً وأوليه اهتماماً كبيراً. على أي حال لنبدأ المناقشة:
أولا: ما هو مفهوم (( إعادة هندسة الكود )) ؟
قد يتسائل البعض عن معنى مصطلح ((إعادة هندسة الكود)) عندما قرأه في المقدمة، لذلك سأقدم شرحاً موجزاً عن معنى هذا المصطلح.
إن من أكثر الطرق انتشاراً لحماية البيانات بشكل آمن هو تخزينها في قواعد بيانات وحمايتها بكلمة مرور، وبالتأكيد سنستخدم كلمة المرور هذه في الكود التابع للمشروع.
ولكن هناك أمر أهم من حماية البيانات وهو حماية الكود. وكما نعلم أن تطبيقات الدوت نت هي تطبيقات تتحول فيما بعد إلى لغة قريبة جداً من الأسمبلي، حيث إن هذا الكود يترجم في وقت التنفيذ من قبل الـ CLR (JIT). إذاً باستطاعة أي محرر أسمبلي العبور من هذه البوابة ويكتشف كودك بالكامل، ولذلك باستطاعة أي مبرمج محترف كان أو مبتدأ أن يحصل على الكود باستخدام مولد أكواد.
هناك الكثير من مولدات الأكواد منتشرة على الإنترنت ولكن أعظمها وأخطرها ذاك الذي يستطيع أن يعطيك حتى ملفات المشروع كاملةً وكأنك كنت تصممه وتعمل عليه وهو Lutz Roeder's Reflector ويمكنك تحميله مجاناً من هنا (http://www.red-gate.com/products/reflector/).
إن هذه العملية التي تعطيك الكود المصدري للبرامج والتطبيقات المكتوبة على الدوت نت تسمى إعادة هندسة الكود أو Reverse Engineering .
ثانيا: مثال على إعادة هندسة الكود:
لنقم بكتابة مشروع صغير يساعدنا على فهم معنى إعادة هندسة الكود، ونستخدم لذلك مولد الأكواد Lutz Roeder's Reflector.
افتح الفيجوال استوديو وأنشئ مشروع Console Application.
لمبرمجي الـ C# اكتب الكود التالي:
namespace CodeProtection
{
class Program
{
static void Main(string[] args)
{
MyClass myclass = new MyClass();
string msg = "Hello Absba, welcome to Code Protection Example";
int rep = 5;
myclass.MyMethod(msg, rep);
}
}
class MyClass
{
public void MyMethod(string msg, int rep)
{
for (int l = 0; l < rep; l++)
{
Console.WriteLine(msg);
}
}
}
}
لمبرمجي الـ VB .Net اكتب الكود التالي:
Module CodeProtection
Sub Main()
Dim cls As New MyNewClass()
Dim msg As String = "Hello Absba, welcome to Code Protection Example"
Dim rep As Integer = 5
cls.MyMethod(msg, rep)
End Sub
Class MyNewClass
Public Sub MyMethod(ByVal msg As String, ByVal rep As Integer)
Dim i As Integer
For i = 0 To rep
Console.WriteLine(msg)
Next i
End Sub
End Class
End Module
الآن بعد ترجمة التطبيق قم بفتح الـ Reflector وافتح التطبيق الذي أنشأناه
http://tw.absba.org/teamwork11/779757/01.JPG
استكشف الآن تطبيقك بسلاسة ويسر. وانظر إلى الكود الذي كتبناه:
http://tw.absba.org/teamwork11/779757/02.JPG
ويمكنك رؤية الكود بأكثر من لغة: IL , C#, Visual Basic, MC++, Delphi, Chrome
ثالثاً: ما هو حل المشكلة؟
لحل المشكلة، طرحت شركة PreEmptive Solutions برنامجها Dotfuscator
وقد تبنت شركة Microsoft هذا الحل وأدخلته مع حزمتها Visual Studio ولكن النسخة التي أدخلتها مايكروسوفت هي Community Edition بمعنى، أن هذه النسخة محدودة الوظائف ولا تعطيك كامل المزايا ولكنها تؤدي الغرض المطلوب لحماية أكوادنا.
إن فكرة Dotfuscator تقوم على تغيير المتغيرات وبعض الأسطر إلى رموز أخرى، بمعنى آخر، تحويل الكود إلى كود آخر يصعب فهمه!
أي أن الهكر الذي يريد أن يكسر برنامجك سيجد صعوبة في فهم الكود وفكه، وهذا ما نريده نوعاً ما.
رابعا: كيفية ((تشويش)) الكود:
بعد ترجمة الكود والحصول على الناتج النهائي للتطبيق (*.EXE أو *.DLL)
نفتح الـ Dotfuscator من بيئة التطوير Visual Studio 2008 (هذا ما أستخدمه):
Tools --> Dotfuscator Community Edition
ستظهر لك نافذة تطلب منك التسجيل. اختر No, I don’t want to register
اتبع الشرح الآن:
http://tw.absba.org/teamwork11/779757/03.JPG
http://tw.absba.org/teamwork11/779757/04.JPG
http://tw.absba.org/teamwork11/779757/05.JPG
من Options لدينا خيار واحد فقط على اعتبارنا نستخدم إصدار Community Edition
وهو Disable Renaming الذي يقوم بتغيير المتغيرات وأسماء الـ functions بطريقة تجعلها صعبة الفهم، فقيمة Yes تلغي هذا الخيار وقيمة No تفعله. طبعاً نحن نريد تفعيل وإلا لما لجأنا للـ Dotfuscator :D لذلك نضع No.
http://tw.absba.org/teamwork11/779757/06.JPG
من Input نختار Honor obfuscation Attributes و Library و Strip Obfuscation Attributes انظر الصورة:
http://tw.absba.org/teamwork11/779757/07.JPG
الآن من Build تستطيع اختيار موقع الهدف (الذي سينشأ فيه التطبيق المشوش) ومن ثم نبدأ عملية التشويش بالنقر على زر Build. انظر الصورة:
http://tw.absba.org/teamwork11/779757/08.JPG
الآن لقد انتهينا من حماية التطبيق يمكنك استكشاف التطبيق الجديد من خيار Output أو من خلال الـ Reflector. انظر إلى الكود قبل وبعد:
http://tw.absba.org/teamwork11/779757/09.jpg
http://tw.absba.org/teamwork11/779757/10.jpg
أخيراً آمل أن يكون الشرح واضحاً لديكم فقد بذلت ما أستطيع لتبسيطه وإيصاله إلى مختلف المستويات. وآمل أني أفدتكم في حماية برامجكم من الاختراق والتهكير والحفاظ على الملكية الفكرية العربية. وأنا جاهز للإجابة عن أي سؤال يدور في بالكم. كما يمكنكم نقل الموضوع مع الحفاظ على اسم الكاتب (جميع الحقوق محفوظة :D).
أنتظر تعليقاتكم وآرائكم وتقييمكم للموضوع :rolleyes: ... والسلام عليكم ورحمة الله وبركاته.
ملاحظة: هناك بعض الجمل المقتبسة من أحد المواضيع الأجنبية.
تم رفع الصور الى سيرفير المنتدى بواسطة moh.robinho
أعزائي المبرمجين المشاغبين منذ فترة كنت أبحث عن طريقة لحماية تطبيقاتي المكتوبة بوساطة الدوت نت من ((إعادة هندسة الكود)). ولم أجد موقعاً عربياً يفيد بما فيه الكفاية، في حين كانت المواقع الأخرى تزدحم بمواضيع حماية الكود. فقررت أن أطرح موضوعاً متكاملاً لحماية تطبيقاتنا وبرامجنا العربية المكتوبة على الدوت نت من أخطار التكريك وذلك لأن موضوع الحماية الفكرية والبرمجية أمر يهمني جداً وأوليه اهتماماً كبيراً. على أي حال لنبدأ المناقشة:
أولا: ما هو مفهوم (( إعادة هندسة الكود )) ؟
قد يتسائل البعض عن معنى مصطلح ((إعادة هندسة الكود)) عندما قرأه في المقدمة، لذلك سأقدم شرحاً موجزاً عن معنى هذا المصطلح.
إن من أكثر الطرق انتشاراً لحماية البيانات بشكل آمن هو تخزينها في قواعد بيانات وحمايتها بكلمة مرور، وبالتأكيد سنستخدم كلمة المرور هذه في الكود التابع للمشروع.
ولكن هناك أمر أهم من حماية البيانات وهو حماية الكود. وكما نعلم أن تطبيقات الدوت نت هي تطبيقات تتحول فيما بعد إلى لغة قريبة جداً من الأسمبلي، حيث إن هذا الكود يترجم في وقت التنفيذ من قبل الـ CLR (JIT). إذاً باستطاعة أي محرر أسمبلي العبور من هذه البوابة ويكتشف كودك بالكامل، ولذلك باستطاعة أي مبرمج محترف كان أو مبتدأ أن يحصل على الكود باستخدام مولد أكواد.
هناك الكثير من مولدات الأكواد منتشرة على الإنترنت ولكن أعظمها وأخطرها ذاك الذي يستطيع أن يعطيك حتى ملفات المشروع كاملةً وكأنك كنت تصممه وتعمل عليه وهو Lutz Roeder's Reflector ويمكنك تحميله مجاناً من هنا (http://www.red-gate.com/products/reflector/).
إن هذه العملية التي تعطيك الكود المصدري للبرامج والتطبيقات المكتوبة على الدوت نت تسمى إعادة هندسة الكود أو Reverse Engineering .
ثانيا: مثال على إعادة هندسة الكود:
لنقم بكتابة مشروع صغير يساعدنا على فهم معنى إعادة هندسة الكود، ونستخدم لذلك مولد الأكواد Lutz Roeder's Reflector.
افتح الفيجوال استوديو وأنشئ مشروع Console Application.
لمبرمجي الـ C# اكتب الكود التالي:
namespace CodeProtection
{
class Program
{
static void Main(string[] args)
{
MyClass myclass = new MyClass();
string msg = "Hello Absba, welcome to Code Protection Example";
int rep = 5;
myclass.MyMethod(msg, rep);
}
}
class MyClass
{
public void MyMethod(string msg, int rep)
{
for (int l = 0; l < rep; l++)
{
Console.WriteLine(msg);
}
}
}
}
لمبرمجي الـ VB .Net اكتب الكود التالي:
Module CodeProtection
Sub Main()
Dim cls As New MyNewClass()
Dim msg As String = "Hello Absba, welcome to Code Protection Example"
Dim rep As Integer = 5
cls.MyMethod(msg, rep)
End Sub
Class MyNewClass
Public Sub MyMethod(ByVal msg As String, ByVal rep As Integer)
Dim i As Integer
For i = 0 To rep
Console.WriteLine(msg)
Next i
End Sub
End Class
End Module
الآن بعد ترجمة التطبيق قم بفتح الـ Reflector وافتح التطبيق الذي أنشأناه
http://tw.absba.org/teamwork11/779757/01.JPG
استكشف الآن تطبيقك بسلاسة ويسر. وانظر إلى الكود الذي كتبناه:
http://tw.absba.org/teamwork11/779757/02.JPG
ويمكنك رؤية الكود بأكثر من لغة: IL , C#, Visual Basic, MC++, Delphi, Chrome
ثالثاً: ما هو حل المشكلة؟
لحل المشكلة، طرحت شركة PreEmptive Solutions برنامجها Dotfuscator
وقد تبنت شركة Microsoft هذا الحل وأدخلته مع حزمتها Visual Studio ولكن النسخة التي أدخلتها مايكروسوفت هي Community Edition بمعنى، أن هذه النسخة محدودة الوظائف ولا تعطيك كامل المزايا ولكنها تؤدي الغرض المطلوب لحماية أكوادنا.
إن فكرة Dotfuscator تقوم على تغيير المتغيرات وبعض الأسطر إلى رموز أخرى، بمعنى آخر، تحويل الكود إلى كود آخر يصعب فهمه!
أي أن الهكر الذي يريد أن يكسر برنامجك سيجد صعوبة في فهم الكود وفكه، وهذا ما نريده نوعاً ما.
رابعا: كيفية ((تشويش)) الكود:
بعد ترجمة الكود والحصول على الناتج النهائي للتطبيق (*.EXE أو *.DLL)
نفتح الـ Dotfuscator من بيئة التطوير Visual Studio 2008 (هذا ما أستخدمه):
Tools --> Dotfuscator Community Edition
ستظهر لك نافذة تطلب منك التسجيل. اختر No, I don’t want to register
اتبع الشرح الآن:
http://tw.absba.org/teamwork11/779757/03.JPG
http://tw.absba.org/teamwork11/779757/04.JPG
http://tw.absba.org/teamwork11/779757/05.JPG
من Options لدينا خيار واحد فقط على اعتبارنا نستخدم إصدار Community Edition
وهو Disable Renaming الذي يقوم بتغيير المتغيرات وأسماء الـ functions بطريقة تجعلها صعبة الفهم، فقيمة Yes تلغي هذا الخيار وقيمة No تفعله. طبعاً نحن نريد تفعيل وإلا لما لجأنا للـ Dotfuscator :D لذلك نضع No.
http://tw.absba.org/teamwork11/779757/06.JPG
من Input نختار Honor obfuscation Attributes و Library و Strip Obfuscation Attributes انظر الصورة:
http://tw.absba.org/teamwork11/779757/07.JPG
الآن من Build تستطيع اختيار موقع الهدف (الذي سينشأ فيه التطبيق المشوش) ومن ثم نبدأ عملية التشويش بالنقر على زر Build. انظر الصورة:
http://tw.absba.org/teamwork11/779757/08.JPG
الآن لقد انتهينا من حماية التطبيق يمكنك استكشاف التطبيق الجديد من خيار Output أو من خلال الـ Reflector. انظر إلى الكود قبل وبعد:
http://tw.absba.org/teamwork11/779757/09.jpg
http://tw.absba.org/teamwork11/779757/10.jpg
أخيراً آمل أن يكون الشرح واضحاً لديكم فقد بذلت ما أستطيع لتبسيطه وإيصاله إلى مختلف المستويات. وآمل أني أفدتكم في حماية برامجكم من الاختراق والتهكير والحفاظ على الملكية الفكرية العربية. وأنا جاهز للإجابة عن أي سؤال يدور في بالكم. كما يمكنكم نقل الموضوع مع الحفاظ على اسم الكاتب (جميع الحقوق محفوظة :D).
أنتظر تعليقاتكم وآرائكم وتقييمكم للموضوع :rolleyes: ... والسلام عليكم ورحمة الله وبركاته.
ملاحظة: هناك بعض الجمل المقتبسة من أحد المواضيع الأجنبية.
تم رفع الصور الى سيرفير المنتدى بواسطة moh.robinho