المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [VS] حماية الأكواد في Microsoft .Net Framework


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

eldoktor007
21-04-2009, 04:30 PM
مبدع والله مبدع ياخوى الغالى / سراج
مشكووووور يا غالى على شرحك الوافى ومعلوماتك المفيده لجميع المشاغبين

ومن تفوق الى تفوق ان شاء الله

تقبل تحياتى مع احلى خمس نجوووم تقييم
http://images.absba.org/absba.org/images/rating/rating_5.gif

alwatwaat
21-04-2009, 06:06 PM
شكرا لك

TheFantasy
21-04-2009, 06:08 PM
بارك الله فيك اخي السراج

ابداع في ابداع

موضوعك مهم للحفاظ على مشاريعنا

التقيم خماسي:)

Mr.Visual Basic
21-04-2009, 10:54 PM
شكرا لكم أيها المراقبون الأعزاء eldoktor007 و alimaj
على المرور الطيب ... نورتو الموضوع وآمل أن تكون الإفادة كبيرة عليكم إن شاء الله
وشكرا على النجوم الخمسة :D

شكراً لك أخ alwatwaat على المرور :)

Mr.Visual Basic
22-04-2009, 02:13 PM
ايه يا مبرمجين؟ الموضوع ما عجبكم يعني؟ :)

فارس الانتقام
22-04-2009, 05:29 PM
لا والله رائع مشكووووووووووووووووووووووووورين

SAUDI AMERICAN
22-04-2009, 07:04 PM
Excellent Mr visual basic
Thanks

Mr.Visual Basic
23-04-2009, 02:02 PM
شكرا على المرور الطيب فارس الانتقام و SAUDI AMERICAN

الآمل الطائر
23-04-2009, 03:06 PM
الله يعطيك العافية

Mr.Visual Basic
23-04-2009, 03:50 PM
الله يعطيك العافية

الله يعافيك أخي وان شاء الله يكون الموضوع عجبك

Mr.Visual Basic
23-04-2009, 04:00 PM
بالمناسبة يا مبرمجين ... إن شاء الله سأطرح موضوع آخر عن حماية
التطبيقات في Microsoft .Net Framework
انتظروني :)

Haddad1987
24-04-2009, 01:43 AM
يا سلام

MrProgrammer
25-04-2009, 03:50 AM
ماشاء الله اخى سراج موضوع رائع والله :)
وفعلا مثل هذا الموضوع يحتاج الية المبرمجين العرب كثيرا
بارك الله فيك اخى وزادك الله من العلم لتنفع بة المسلمين ان شاء الله
شكرا لك وتقبل تحياتى :)

Mr.Visual Basic
26-04-2009, 04:38 PM
شكرا على المرور الطيب أخ Haddad1987

نورت الموضوع أخي MrProgrammer وإن شاء الله تكون استفدت :)

أبوعـــرب
10-07-2009, 02:40 PM
الله يعطيك العافية ابداع تسلم الأيادي

mos
11-07-2009, 05:34 AM
السلام عليكم

شكرا عزيزى على الموضوع المهم جدا والذى كنت اتكلم عليه سابقا وها انت تقدم لنا الحل

شكرا وننتظر منك المزيد

o.mohammed
11-07-2009, 03:21 PM
بارك الله فيك اخي السراج

ابداع في ابداع

موضوعك مهم للحفاظ على مشاريعنا

التقيم خماسي:)

TheFantasy
09-07-2010, 01:05 PM
ينقل الى قسم الشروحات
مع الشكر

abu_sumayah
06-08-2010, 03:55 PM
شكرا لنقلك المعرفة و الخبرة إلى إخوتك العرب

bufahad
17-08-2010, 07:32 PM
جزاك الله خير على الجهد الكبير منك

المبرمج 2012
16-10-2010, 09:28 PM
مشكور يا الغلا على طرحك الرائع

asd000asd
08-01-2011, 07:03 PM
بارك الله فيك .. hh: .. وشكراً جزيلاً

shooter1000
09-01-2011, 03:06 PM
♥♥♥

بارك الله فيك

♥♥♥