منتدى استراحات زايد

منتدى استراحات زايد (http://vb.ma7room.com/index.php)
-   منتدى أخبار المواقع والمنتديات العربية والأجنبية (http://vb.ma7room.com/forumdisplay.php?f=183)
-   -   حماية الأكواد في Microsoft .Net Framework (http://vb.ma7room.com/showthread.php?t=82695)

محروم.كوم 04-21-2009 05:00 PM

حماية الأكواد في Microsoft .Net Framework
 
السلام عليكم ورحمة الله وبركاته

أعزائي المبرمجين المشاغبين منذ فترة كنت أبحث عن طريقة لحماية تطبيقاتي المكتوبة بوساطة الدوت نت من ((إعادة هندسة الكود)). ولم أجد موقعاً عربياً يفيد بما فيه الكفاية، في حين كانت المواقع الأخرى تزدحم بمواضيع حماية الكود. فقررت أن أطرح موضوعاً متكاملاً لحماية تطبيقاتنا وبرامجنا العربية المكتوبة على الدوت نت من أخطار التكريك وذلك لأن موضوع الحماية الفكرية والبرمجية أمر يهمني جداً وأوليه اهتماماً كبيراً. على أي حال لنبدأ المناقشة:

أولا: ما هو مفهوم (( إعادة هندسة الكود )) ؟
قد يتسائل البعض عن معنى مصطلح ((إعادة هندسة الكود)) عندما قرأه في المقدمة، لذلك سأقدم شرحاً موجزاً عن معنى هذا المصطلح.
إن من أكثر الطرق انتشاراً لحماية البيانات بشكل آمن هو تخزينها في قواعد بيانات وحمايتها بكلمة مرور، وبالتأكيد سنستخدم كلمة المرور هذه في الكود التابع للمشروع.
ولكن هناك أمر أهم من حماية البيانات وهو حماية الكود. وكما نعلم أن تطبيقات الدوت نت هي تطبيقات تتحول فيما بعد إلى لغة قريبة جداً من الأسمبلي، حيث إن هذا الكود يترجم في وقت التنفيذ من قبل الـ CLR (JIT). إذاً باستطاعة أي محرر أسمبلي العبور من هذه البوابة ويكتشف كودك بالكامل، ولذلك باستطاعة أي مبرمج محترف كان أو مبتدأ أن يحصل على الكود باستخدام مولد أكواد.
هناك الكثير من مولدات الأكواد منتشرة على الإنترنت ولكن أعظمها وأخطرها ذاك الذي يستطيع أن يعطيك حتى ملفات المشروع كاملةً وكأنك كنت تصممه وتعمل عليه وهو Lutz Roeder's Reflector ويمكنك تحميله مجاناً من هنا.
إن هذه العملية التي تعطيك الكود المصدري للبرامج والتطبيقات المكتوبة على الدوت نت تسمى إعادة هندسة الكود أو Reverse Engineering .

ثانيا: مثال على إعادة هندسة الكود:
لنقم بكتابة مشروع صغير يساعدنا على فهم معنى إعادة هندسة الكود، ونستخدم لذلك مولد الأكواد Lutz Roeder's Reflector.
افتح الفيجوال استوديو وأنشئ مشروع Console Application.
لمبرمجي الـ C# اكتب الكود التالي:
كود PHP:
<span style="color: #000000">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 <span style="color: #007700">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://emvmda.bay.livefilestore.com/.../Reflector.JPG

استكشف الآن تطبيقك بسلاسة ويسر. وانظر إلى الكود الذي كتبناه:

http://emvmda.bay.livefilestore.com/...Reflector2.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://emvmda.bay.livefilestore.com/...otfuscator.JPG

http://emvmda.bay.livefilestore.com/...tfuscator2.JPG

http://emvmda.bay.livefilestore.com/...tfuscator3.JPG

من Options لدينا خيار واحد فقط على اعتبارنا نستخدم إصدار Community Edition
وهو Disable Renaming الذي يقوم بتغيير المتغيرات وأسماء الـ functions بطريقة تجعلها صعبة الفهم، فقيمة Yes تلغي هذا الخيار وقيمة No تفعله. طبعاً نحن نريد تفعيل وإلا لما لجأنا للـ Dotfuscator :D لذلك نضع No.

http://emvmda.bay.livefilestore.com/...tfuscator4.JPG

من Input نختار Honor obfuscation Attributes و Library و Strip Obfuscation Attributes انظر الصورة:

http://emvmda.bay.livefilestore.com/...tfuscator5.JPG

الآن من Build تستطيع اختيار موقع الهدف (الذي سينشأ فيه التطبيق المشوش) ومن ثم نبدأ عملية التشويش بالنقر على زر Build. انظر الصورة:

http://emvmda.bay.livefilestore.com/...tfuscator6.JPG

الآن لقد انتهينا من حماية التطبيق يمكنك استكشاف التطبيق الجديد من خيار Output أو من خلال الـ Reflector. انظر إلى الكود قبل وبعد:

http://emvmda.bay.livefilestore.com/...eforeAfter.jpg

http://emvmda.bay.livefilestore.com/...eAfterCode.jpg

أخيراً آمل أن يكون الشرح واضحاً لديكم فقد بذلت ما أستطيع لتبسيطه وإيصاله إلى مختلف المستويات. وآمل أني أفدتكم في حماية برامجكم من الاختراق والتهكير والحفاظ على الملكية الفكرية العربية. وأنا جاهز للإجابة عن أي سؤال يدور في بالكم. كما يمكنكم نقل الموضوع مع الحفاظ على اسم الكاتب (جميع الحقوق محفوظة :D).
أنتظر تعليقاتكم وآرائكم وتقييمكم للموضوع :rolleyes: ... والسلام عليكم ورحمة الله وبركاته.


ملاحظة: هناك بعض الجمل المقتبسة من أحد المواضيع الأجنبية.


الساعة الآن 10:05 AM

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.5.2 TranZ By Almuhajir


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227