Professional Documents
Culture Documents
email ah_khamiss@hotmail.com
URL www.ahmedkhamiss.net
©
2 0 1 9
(CD)
الكراك Crackهو كســــر حمــايــة البرامج والتطبيقــات واﻷلعــاب أو
اقت حام ها وحتي نعرف حقي قة الكراك في جب أن نتعرف علي أنواع الح مايـة
المتوفرة للبرامج واﻷلعاب وهي علي عدة أشكال أو أنواع
النوع اﻷول وهو المســـمي Time Trail Checkوهي حماية خاصـــة بالبرامج
التجريب ية التي تعرض للتجربة لفترة زمن ية م حددة بغرض الشــــراء وغال با ما
تتراوح تلك الفترة بين 15إلي 30يوما
النوع الثاني وهو يعرف باســـم Check Function Disabledوهي تعتمد علي
تعطيــل بعض المهــام أو الخصـــــائص المهمــة في البرنــامج بحيــث ﻻ يمكن
اﻻســتفادة منها مثل عملية الحفظ Saveأو الطباعة Printأو بعض الخصــائص
اﻻخري المهمة في اختيارات البرنامج
النوع الثالث ويطلق عليه Hardware Key Checkويتم اســتخدام الحماية من
خﻼل Hardwareمعين يســـمي Dongleوهو عبارة عن ســـدادة صـــغيرة يتم
توصــيلها إلي أحد مخارج الكمبيوتر Portsمثل Serial Portأو Parallel Portأو
المن فذ USBوهي ع بارة عن ح ما ية ماد ية Hardwareوبرمج ية Software
وتطبيقات الحماية بواســـطة Dongleتكون في الغالب ضـــعيفة ويمكن كســـر
حمايتها بسهولة
النوع الرابع ويطلق عليه CD-ROM Checkوهي الحماية المســــتخدمة في
اﻷلعاب وهي حماية ليست صعبة ويمكن كسرها
النوع الخامس ومن أمثلة هذا النوع من الحماية حماية اﻻسطوانة من النسخ
البرامج المستخدمة في كسر الحماية:
تنقســــم برامج الكراك إلي عدة أن ماط أو أنواع ي ندرج ت حت كل نوع أو نمط
مجموعة من البرامج وتلك اﻷنواع هي:
Debugger .1
OllyDpg 1.10 .a
SmartCheck 6.03 .a
Soft Ice4.05 .b
W32Dasm 8.93 .c
Decompile .2
DeDe 3.50.04.1635 .d
InstallShield Decompiler 1.00 .e
Vb Decompiler 0.85 .f
4
Edit Hex .3
Hex Workshop 3.1 .a
Hiew 7.01 .b
Monitor .4
API Monitor 1.5 .c
FileMonitor 6.03 .d
RegMonitor 6.03 .e
Patcher .5
CodeFusion 3.0 .a
Diablo2002's Universal Patcher 2.03 .b
PachEngine 1.33 .c
Predator's Extreme Loader Generator 0.3 .d
PrincessSandy 1.0 .e
Registry Patch Creator .f
R!SC'S Process Patcher 1.5.1 .g
PE edit .6
LordPE .a
PEditor 1.7 .b
Scan .7
File insPEditor XL .a
PEiD 0.93 .b
Stud_PE 1.8.1 .c
UnPacker .8
ProcDump 1.6 .a
Utilities .9
Apispy 2.5 .a
ASCII Table 2.01 .b
eXeScope 6.41 .c
HexDecOctBin Converter 1.00 .d
Import REConstructor 1.4.2 .e
Import REConstructor 1.6 .f
ProcessKiller 1.1 .g
Revirgin .h
Windows Enabler 1.1 .i
وأنواع الملفات التي يمكنك تحويلها إلي لغة التجميع Assemblyالخاصــــة بها
الملفات من اﻷنواعexe, 386, com, cpl, drv, dll, fon, mpd, ocx, vbx, :
. vbx and sys
Assembly Language
8
حتى يمكنك اســــتخدام برامج فك الحماية يجب أن تكون لك دراية
بلغة Assemblyوهي اللغة التي تكتب بها مصادر البرامج والتطبيقات واﻷلعاب
وقبل مناقشــة برامج فك الحماية المختلفة ســوف نتعرف فيما يلي علي تلك
اللغة ومفرداتها وكيفية تنفيذ أوامرها.
ماهي لغة اﻻسمبلي:
اﻻســــمبلي هي الل غة التي ت خا طب المكو نات ال ماد ية للكمبيوتر
وتخاطب المعالج بصــفة خاصــة وهي اللغة التي يتم اســتخدامها في برمجة
التطبيقات واﻷلعاب وتســـتخدم كذلك في برامج وملفات المشـــغﻼت Drivers
للع تاد ال مادي للكمبيوتر ك ما يســــت خدم ها بعض المبرمجين في ع مل برامج
الفيروســــات وتســــتخدم لغة اﻻســــمبلي باﻹضــــافة إلي لغات أخري عالية
المستوي مثل C++في عمل البرامج
المسجﻼتRegisters :
المســــجﻼت هي ع بارة عن متغيرات Variablesتخزن في الم عالج
CPUويســــت خدم الم عالج ت لك المتغيرات في تنف يذ العمل يات الحســـــاب ية
والمنطقية ومن أكثر الم سجﻼت ا ستخداما الم سجﻼتeax, ebx, ecx and :
edxوأحيانا تري المسجﻼت edi, esi, esp, ebp
ويوجد ثﻼثة أنواع من المســجﻼت:مســجﻼت بنظام 32bitومســجﻼت بنظام
16bitومسجﻼت بنظام 8bit
وتصــــنف المســــجﻼت إلي خمســــة أنواع هي :مســــجﻼت اﻷغراض العامة
General-Purpose Registersومســــجﻼت اﻷقســـــام Segment Registers
ومســجﻼت الفهرســة أو المســجﻼت الدليلية Index Registersومســجﻼت
ال تأشــــير Pointer Registersباﻹضـــــا فة إلي مســــجﻼت ال حا لة والتحكم
. Status and Control Registers
مسجل القاعدةBX:
وهذا المســجل هو المســجل الوحيد من مســجﻼت اﻷغراض العامة
التي يمكن اســــت خدا مه كدل يل أو فهرس Indexو هذا المســــ جل يمكن
اســتخدامه للعمليات الحســابية والمنطقية وهو ينقســم هذا المســجل إلي
قسمين كل قسم بطول 8bitوهما BLو BHوهما ضمن مسجل أوسع بطول
32bitوهو المسجل . EBX
مسجل العدادCX:
وهو يســتخدم بصــفة أســاســية كعداد ويســتخدم مع تعليمة التكرار
Loopكما يمكن ا ستخدامه في العلميات الح سابية والمنطقية وينق سم إلي
قســـمين كل قســـم بطول 8bitوهما CHو CLوهما جزء من المســـجل ECX
بطول .32bit
مسجل المعطياتDX:
يستخدم هذا المسجل لتخزين المعطيات في عمليات الدخل والخرج
ويمكن اســتخدامه مثل باقي المســجﻼت في العمليات الحســابية والمنطقية
وهو ينق سم بدوره إلي ق سمين كل ق سم بطول 8bitوهذين الق سمين هما
DHو DLوهما ضمن مسجل أوسع وهو EDXبطول . 32bit
ملحوظة:
في المعالجات التي تعمل بنظام 32bitتم إضــافة مســجلين أقســام جديدين
بطول 16bitوهما GS,FSويمكن استخدامهما كالمسجل ES
ونستعرض فيما يلي تلك اﻷقسام:
10
قسم الشفرةCS:
يحمل هذا المســــجل عنوان بداية القســــم الخاص بالشــــفرة في
البرنامج
قسم البياناتDS:
يحمل عنوان بداية قسم البيانات
قسم المكدسةCS:
يحمل عنوان بداية قسم المكدسة في البرنامج
القسم اﻹضافيES:
يحمل عنوان بداية ق سم إ ضافي ويمكن أن ي ستخدم كق سم بيانات
آخر
اﻷمر :وهو اﻷمر الذي يدل علي نوع التعليمة مثل ADDو MOV
الوســـائط :وهي تحدد الشــــئ الذي ينفذ عليه اﻷمر وبعض التعليمات تأخذ
وسيطة واحدة فقط والبعض اﻵخر يأخذ أكثر من وسيطة ومن أمثلة ذلك:
elcهذه وسيطة بدون أمر
dec axتعليمة تستخدم وسيطة واحدة فقط
mov ex,dxتعليمة تستخدم وسيطتين
ويمكن إضـــــافة أي تعلي قات مع اﻷوامر ويتم فصــــل ها عن اﻷوامر بالفاصــــلة
المنقوطة .
ﺃﻧﻮﺍﻉ ﺍﻟﻮﺳﺎﺋﻂ:
هناك عدة أنواع من الوسائط وهي
.1معلومة فورية أو قيمة ثابتة مثل 'b' – 20 – 10
.2مسجل RegisterمثلAX-EAX-BL :
.3موقع ذاكرة ويتم تحديده بواسطة العنوان مثل bx-200-300
.4متغير وهو مثل موقع الذاكرة ويقوم اﻻســــمبلر باســــتبدال العنوان
المتغير برقم يدل علي عنوانه مثل VAR-STR1-INTVAL
ﺍﺳﺘﺨﺪﺍﻡ Debugger
يعتبر ال Debuggerمن أهم وأقوي برامج لغة اﻻســمبلي وهو مدمج
مع نظام التشــــغيل ويعمل من خﻼل محث نظام DOSويمكنك الخروج إلي
محث نظام DOSمن خﻼل نظام Windowsولتنفيذ ذلك أفتح قائمة Startثم
أضغط All Programsومن خﻼل مجموعة الملحقات ccessoriesأضغط اﻻختيار
.Command Prompt
14
مثال:1
اﻹجراء التالى يســتخدم فى إلغاء أو مســح إعدادات شــريحة BIOS
للتخلص من كلمة الســر أو الفيروســات وكذلك اﻹعدادات الســابقة وذلك فى
حالة الفشل فى الدخول إلى برنامج اﻹعداد Setupبسبب كلمة السر .
C>DEBUG
A -
MOVE AX,0 -
MOV AX,CX -
OUT 70,AL -
MOV AX,0 -
OUT 71,AL -
INC,CX -
CMP CX.100 -
JB 103 -
INT 20 -
هذا السطر يترك فارغا عمدا -
G -
Q -
مثال:2
اﻹجراء ال تالى يقوم باخت بار م خارج الكمبيوتر Portsلتعرف هل تم
التعرف عليها من خﻼل الجهاز أم ﻻ .
C>DEBUG
D40:0 -
Q -
مثال:3
اﻹجراء ال تالى ســــوف يقوم بت حديد نوع ب طاقة العرض المركبة فى
جهاز الكمبيوتر
C>DEBUG
-D C000:0040 -
-Q -
16
الضربMultiplication:
تتم عملية الضرب لﻸرقام في لغة اﻻسمبلي في ثﻼثة أنظمة:
مثال:
للحصول علي حاصل ضرب 25*200نفذ الخطوات اﻵتية:
17
MOV CX,25D
MOV AX,200D MUL CX
MOV [1000H]AX
القسمةDivision:
والقســمة تتم بنفس الطريقة بالنســبة لعمليات الضــرب أي أنها تتم
علي نفس اﻷنظمة الثﻼثة السابقة
مثال:
لتنفيذ قسمة 16+علي 5-نكتب الكود التالي:
MOV AL,16D
CBW
18
MOV BL,5D
NEG BL
IDIV BL
MOV PYTE PTR[1000H],AL
MOV PYTE PTR[2000H],AH
ﺍﻟﺘﺤﻜﻢ ﰲ ﺍﻟﱪﻧﺎﻣﺞ
يمكن التحكم في م سار البرنامج عن طريق تقنيات كالتي ت ستخدم
في لغات البرمجة العالية المستوي ونتعرف فيما يلي علي بعض تلك التقنيات
ﺍﻟﺪﺍﻟﺔ CMP
يأتي ب عد ت لك ا لدا لة القيمتين الل تان ســــوف نقوم باخت باره ما ويكون القفز
JUMPبعد هذا اﻻختبار شئ طبيعي
مثال:
سنقوم في هذا المثال باختبار ت ساوي قيمتين وهما 7,5وعند تحقق ال شرط
سيقفز البرنامج إلي النهاية
MOV AX,5
MOV BX,7
CMP AX,BX
JE END
ﺍﻟﺪﺍﻟﺔTEST:
وهي تؤدي نفس عمل الدالة الســـابقة ولكن بدﻻ من تنفيذ عملية طرح تقوم
بتنفيذ ربط منطق Logic AND
مثال:
يقوم هذا اﻻختبار في اختبار آخر Bitفي القيمة الموجودة في المسجل AX
MOV AX,5
NEG AX
ADD AX,2
TEST AX,10000000B
JZ END
19
ﺍﻟﺪﻭﺭﺍﺕ Loops
ا لدورة Loopهي عمل ية تكرار لخطوة أو مجو عة خطوات عدة مرات وﻻ ي كاد
يخلو برنامج من واحدة أو أكثر من تلك الدورات ويوجد ثﻼث أنواع من الدورات
نتعرف عليهم فيما يلي:
مثال:
في المثال التالي يتم ا ستخدام الدورة الم شروطة لكل اﻷرقام من 1
إلي 8وتخزينها في الذاكرة
MOV AL,8
XOR CL,CL;CL=0
START_LOOP
ADD CL,AL
DEC AL
20
CMP AL,00H
JNE START_LOOP
MOV ]BYTE PTR[0100H
استخدام اﻷمر LOOP
يستخدم هذا اﻷمر بعدة أشكال منها المشروط ومنها غير المشروط
ويتم كتابة عنوان أول جملة في الدورة ويتم تحديد عدد مرات الدورة
فى CXويتم تقليل CXواحد وتختبر قيمته في كل مرة إذا كانت صفر
تنتهي الدورة وإذا كانت غير ذلك يتم تنفيذ اﻷمر الموجود أمامها
مثال:
MOV CX,8
XOR AX,AX
START_LOOP
ADD AX,CX
LOOP START_LOOP
MOV [0100H],AX
ومن الدورات المشروطة المستخدمة:
LOOPZ
LOOPPNZ
LOOPE
LOOPPNE
مثال:
CLD
MOV AX,0000H
MOV DS,AX
MOV CX,1000H
MOV SL,0
MOV AH,2H
START
LODSB
MOV DL,AL
INT 21H
REP START
END
مثال:
CLD
AX,0B800H MOV
ES,AX MOV
DL0 MOV
CX,10,70 MOV
AX,0720H MOV
STOSW REB
END:
مثال:2
CLD
MOV AX,0B800H
MOV ES,AX
22
MOV DI,0
MOV CX,20*80
MOV AX,0527H
REB STOSW
END:
الدالةMOVSB:
تســـتخدم هذه الدالة في نقل Byteمن محتويات مكان في الذاكرة
بعنوان ES:DIإلي المكان بالعنوان DS:SIويتم زيادة أو نقصان DI:SI
بواحد بناءا علي علم اﻻتجاه . FLAGD
الدالةMOVSW:
تســــتخدم في نقل كلمة من محتويات المكان في الذاكرة بالعنوان
ES:DIإلي الم كان بالعنوان ] DS:[SIويتم ز يادة أو نقصـــــان DI:SI
بواحد بناء علي علم اﻻتجاه . FALGD
الدالةMOVSD:
تســتخدم في نقل كلمتان من محتويات المكان ] ES:[DIفي الذاكرة
إلي المكان ] DS:[SIمع زيادة أو نقصـــان DI:SIبواحد حســـب علم
اﻻتجاه . FLAGD
مثال:
CLD
MOV AX,01000H
MOV DS,AX
MOV AX,02000H
MOV ES,AX
MOV DI,0
MOV SI,0
23
MOV CX,64 * 1024D
REP MOVSW
END:
يقوم هذا المثال بنسخ المقطع 1000إلي المقطع 2000عن طريق تكرار نقل
الكلمات عدد KWORDS 64وهي مساحة المقطع الواحد
الدالةINS:
تســــتخدم تلك الدالة في إد خال البيانات من وحدات اﻹدخال مثل
الشاشة أو Hard Diskوالخطوات التالية توضح كيفية عمل الدالة:
يتم تحديد وسيلة اﻹدخال التي سوف تستخدم في DX
تجهيز عنوان المكان الذي ســـوف يســـتقبل البيانات في الذاكرة
في ]ES:[DI
إعداد علم اﻻتجاه طبقا لمتطلبات البرنامج
اختبار وســــيلة اﻹدخال وهل تحتوي علي بيانات أو ﻻ قبل طلب
البيانات ES:[DI]=[DX];DI=DI+1
ويمكن نقــل Byteبواســــطــة الــدالــة ] [INSBوإدخــال كلمــة
باستخدام ] [INSWوإدخال كلمتين باستخدام ][INSD
مثال:
MOV DI,0
CLD
MOV AX,1000H
MOV ES,AX
MOV DX,3ACH
MOV CX,100
REP INSB
END:
الدالة[OUTS]:
تســـتخدم تلك الدالة في اﻹخراج علي العكس من الدالة الســـابقة
وتعمل بنفس الطريقة
مثال:
MOV SI,0
CLD
MOV AX,1000H
24
MOV DS,AX
MOV DX,3ACH
MOV CX,512
REP OUTB
END:
الدالة[SCASI]:
تســــت خدم هذه ا لدا لة في م قار نة محتو يات موقع في ا لذاكرة له
العنوان ] ES:[DIومحتو يات AIع ند اســــت خدام ] [SCASBومقرنت ها
بمحتويات الـــــــ AXعند اســتخدام ] [SCASWومقرنتها بمحتويات الـ
EAXعن استخدام ][SCASD
مثال:
CLD
MOV DI,0
MOV CX,2000
XOR AX,AX
MOV ES,AX
REBNE SCASW
END:
الدالة[CMPS]:
تلك الدالة تقوم بم قارنة مكانين في الذاكرة باســــتخدام أمر واحد
وتــعــتــمــد مســــــاحــة الــمــكــان عــلــي اســــــتــخــدام أحــد
اﻷوامر[CMPSW],[CMPSD],[CMPSB]:
مثال:
CLD
MOV DI,0
MOV SI,0
MOV CX,2000
MOV AX,AX
25
MOV ES,AX
MOV AX,1000H
MOV DS,AX
REBE CMPSW
END:
ﺍﻹﺟﺮﺍءﺍﺕ Procedures
اﻹجراءات عبارة عن مجموعة من اﻷوامر والجمل البرمجية التي تكون
أجزاء من البرنامج وتعمل كوحدة أو برنامج صغير م ستقل يعمل داخل البرنامج
نفسه أو خارجه
وتتميز اﻹجراءات بأنها توفر الكود والوقت كما أن لها تأثير كبير في النظام كما
أنها تسـاعد في سـرعة تصـحيح أخطاء البرنامج كما أنها تسـتخدم من معظم
البرامج والتطبيقات الكبري
ﺇﻧﺸﺎء ﺍﻹﺟﺮﺍء:
يتم إنشاء اﻷجراء بكتابة اسم اﻷجراء يليه كتابة اﻷمر PROCويحتوي
اﻷجراء علي الجمل البرمجية لﻺجراء وينتهي اﻷجراء بكتابة اســـم اﻷجراء يليه
اﻷمر ][RET
ملحوظة:
ﻻ يمكنك كتابة إجراء داخل إجراء آخر وإذا حاولت ذلك ســــوف يعطي
المترجم Assemblerرســــالة خطأ وليس من الضــــروري أن يكون
اﻹجراء في نفس البر نامج بل يمكن أضـــــاف ته إلي البر نامج م ثل
إجراءات النظام التي يتم النداء عليها باستخدام اﻷمر .INT
ﺍﻟﺘﻌﻠﻴﻤﺔ :MOV
ســوف نتناول بالشــرح فيما يلى تعلميات لغة أســمبلى ،ولنبدأ بأهم
تعليمات اللغة وهى التعليمة .MOV
26
صيغة التعليمةMOV (destination),(source) :
تســــتخدم هذه التعليمة في نســــخ القيمة من مصــــدرها Destinationإلي
الموقع المقصود Source
مثال:
MOV AX,10
ﺍﻟﺘﻌﻠﻴﻤﺔ :ADD
صيغة التعليمةADD (destination),(source) :
تستخدم هذه التعليمة في إضافة القيمة من المصدر إلي الجهة المقصودة
مثال:
MOV AX, 10h
ADD AX, 10h
ﺍﻟﺘﻌﻠﻴﻤﺔ:AND:
صيغة التعليمةAND (destination),(mask) :
يكون الناتج في هذه التعليمة صــــحيح أي يســــاوي 1إذا كن كﻼ المعاملين
صحيح والناتج يكون خاطئا أو يساوي صفر إذا أحد المعاملين خطأ
ﺍﻟﺘﻌﻠﻴﻤﺔCALL:
صيغة التعليمةCALL (address) :
تنــادي علي اﻹجراء Procedureأو الــدالــة Functionالموجودة في العنوان
المحدد
مثال:
CALL 00425789
ﺍﻟﺘﻌﻠﻴﻤﺔRET:
صيغة التعليمةRET :
تستخدم هذه التعليمة في اﻻنتقال إلي التعليمة التي تلي أمر النداء
ﺍﻟﺘﻌﻠﻴﻤﺔCMP:
صيغة التعليمةCMP (A),(B) :
تستخدم في مقارنة متغيرين Aو Bوتأتي بعدها تعليمة قفز
27
ﺍﻟﺘﻌﻠﻴﻤﺔINT:
صيغة التعليمةINT 21h :
تســــتخدم هذه التعليمة في النداء علي دوال ووظائف تخص مقاطعات DOS
وكل جزء في الجهاز له دوال تتعامل معه لها INTخاص بها برقم معين وهي
مــا تســــمي بــالمقــاطعــات Interruptsوالقــائمــة التــاليــة تمثــل بعض تلــك
المقاطعات.
تنفيذ برنامج خطوة خطوة لتتبع اﻷخطاء 01h:
خطأ في اﻻنفصال 03h:
نتيجة تعدي الحجم الخطأ 04h:
الشاشة في شكل نص طبع 05h:
هذه المقاطعة مسئولة عن خدمات الشاشة 10h:
ﺍﻟﺘﻌﻠﻴﻤﺔNOP:
صيغة التعليمةNOP(no operation) :
ﻻ يحدث شيء عند هذه التعليمة وينتقل التنفيذ إلي التعليمة التالية
ﺍﻟﺘﻌﻠﻴﻤﺔOR:
صيغة التعليمةOR(destination),(mask) :
تستخدم هذه التعليمة orالمنطقية اعتمادا علي القناع
ﺍﻟﺘﻌﻠﻴﻤﺔPUSH:
صيغة التعليمةPUSH(value) :
تقوم هذه التعليمة بوضع قيمة valueفي المكدس stack
ﺍﻟﺘﻌﻠﻴﻤﺔPOP:
صيغة التعليمةPOP(register) :
تقوم هذه التعليمة بأخذ القيمة من المكدس وتخزينها في المسجل Register
.
ﺍﻟﺘﻌﻠﻴﻤﺔREP:
صيغة التعليمةREP(instruction) :
تقوم هذه التعليمة بتكرار القيمة xحيث أن xتمثل محتوي المسجل ECX
ﺍﻟﺘﻌﻠﻴﻤﺔINC:
صيغة التعليمةINC(register) :
تعمل هذه التعليمة علي زيادة قيمة المسجل
28
ﺍﻟﺘﻌﻠﻴﻤﺔDEC:
صيغة التعليمةDEC(register) :
تقوم هذه التعليمة بإنقاص قيمة المسجل
ﺍﻟﺘﻌﻠﻴﻤﺔSUB:
صيغة التعليمةSUB(destination),(source) :
تقوم هذه التعليمة بطرح قيمة المصدر من قيمة الجهة المقصودة
ﺍﻟﺘﻌﻠﻴﻤﺔTEST:
صيغة التعليمةTEST(source),(mask):
تقوم هذه التعليمة باختبار bitخاص للمصدر
ﺍﻟﺘﻌﻠﻴﻤﺔXOR:
صيغة التعليمةXOR(destination),(mask) :
تستخدم هذه التعليمة علي المكان المقصود اعتمادا علي القناع
مثالXOR A,A:
ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺰ:
تســـتخدم تعليمة القفز في تحويل طريق تنفيذ التعليمات في البرنامج ويوجد
نوعان من تعليمات القفز المشروط والقفز غير المشروع
أن خانة واحدة من هذا لنظام سواء كانت 0أو 1تسمي bit
كل مجموعة من 8 bitsتسمي Byte
مجموعة من Bytesالمرتبطة ببعضها تكون كلمة Word
في هذه الحالة سوف نضطر إلي إغﻼق البرنامج ثم فتح برنامج : W32Dasm
37
ومن خﻼل اخت يار الب حث ســــوف نقوم بالب حث عن نصــــوص م ثل
registered, unregisteredأو . Password
38
والخطوة التالية هي تحليل الكود ال خاص بالح ماية وفهم ميكانيك ية
: وكود حوار كلمة السر يبدو كما يليJumpالقفز
:00401715 6A64 push 00000064
:00401717 53 push ebx
* Reference To: USER32.GetDlgItemTextA, Ord:0000h
|
:00401718 E8A5B50000 Call 0040CCC2
:0040171D E822FFFFFF call 00401644
:00401722 85C0 test eax, eax
:00401724 741E je 00401744
:00401726 6A30 push 00000030
ﻗﺎﺋﻤﺔ Debug
تعتبر قائ مة Debugأهم قائ مة في البر نامج ح يث أن ها تحتوي علي أوامر
واختيارات كسر الحماية وتغيير أوامر الملفات التنفيذية للبرامج والجدول التالي
يحتوي علي اختيارات وأوامر تلك القائمة ووظائفها
42
وظيفته اﻻختيار
يستخدم لتشغيل البرنامج Run
إعادة تشغيل البرنامج Restart
إنهاء البرنامج Close
يخطو البرنامج داخل كل أمر من أوامر اﻻسمبلي Step into
يخطو البرنامج داخل كل أمر قفز فقط Step Over
يخطو البرنامج داخل كل أمر تلقائيا Animate into
يخطو ﻷوامر القفز تلقائيا Animate over
تشغيل البرنامج حتي يرجع Execute till return
تشغيل البرنامج خطوة خطوة Execute till user code
تسجيل أو مسح كل اثر Open or clear run trace
اقتفاء اﻷثر داخل كل أمر Trace into
اقتفاء اثر كل أمر قفز فقط Trace over
وضع أمر شرطي Set condition
إنهاء تشغيل اقتفاء اﻷثر Close run trace
ﺍﳌﻈﻬﺮ Appearance
من خﻼل هذا اﻻخت يار يمك نك التحكم في مظهر البر نامج م ثل اﻻلوان ونوع
وحجم الخط Fontومكان حفظ Pluginsالخاصة بالبرنامج
43
ﺧﻴﺎﺭﺍﺕ Debugging
يتم من خﻼل هذا اﻻختيار التحكم في خيارات التنقيح
44
ﺍﳋﺎﺻﻴﺔJust-in-time debugging:
هذه الخاصية تستخدم لعمل التنقيح في أي وقت وهذا في حالة حدوث خطا
في أثناء تشــغيل برنامج ســوف تظهر رســالة خطأ بها زر Debugعند الضــغط
عليه يحولك إلي برنامج Ollydbgمباشرة
ومن خﻼل البرنامج يمكنك أن تغير أي أمر مثل أمر قفز مثﻼ ويتم ذلك بالضــغط
Double Clickعلي اﻷمر فيظهر لك نافذة التعديل اﻵتية
45
عند ظهور نافذة اﻷمر يمكنك ببســـــاطة تغيير أمر القفز الموجود أ مامك مثﻼ
بإضافة الحرف nإلي اﻷمر JEكما في الشكل التالي
وعند الضغط علي Yesسوف تظهر لك نافذة الحفظ لتحديد مكان حفظ الملف
46
ولتحويل أمر قفز jeالي jmpحدد اﻷمر ثم أضــغط Right Clickثم نفذ اﻻختيار
اﻷتي
47
من خﻼل النافذة التي ظهرت لك غير الرقمين اﻷولين إلي EBكما في الشكل
الموضح ثم أضغط OK
ويتكون البر نامج من عدة نوا فذ فمثﻼ ه ناك نا فذة المســــجﻼت Registers
كالموضحة في الشكل التالي:
48
كما يحتوي البرنامج أيضا علي نافذة الـ Dumpالموضحة في الشكل التالي
وقبل ا ستخدام البرنامج يتم ضبط بعض اﻻعدادات وذلك بفتح قائمة Program
ثم أضغط علي Settingsلعرض نافذة اﻻعدادات
Reporting من خﻼل نافذة اﻻعدادات اضغط بعد ذلك علي اﻻختيار
51
من خﻼل نافذة Reportingنشط اﻻختيار
واﻻخـــتـــيـــار
وكذلك اﻻختيار
وبعد اﻻنتهاء من ضبط تلك اﻻعدادات ا ضغط OKﻹنهاء اﻻعدادات وإغﻼق نافذة
اﻻعدادات المطلوبة للبرنامج .
اﻵن أصـبح البرنامج جاهزا للتعامل فقم بفتح قائمة Fileثم أضـغط Openلفتح
الملف التنفيذي للبرنامج
كما يمكنك بعد فتح الملف التنفيذي اضــغط أداة Startمن شــريط اﻷدوات
الضغط علي مفتاح F5وﻹغﻼق البرنامج التنفيذي أضغط أداة اﻹغﻼق
ﻗﺎﺋﻤﺔ File
تحتوي قائمة Fileعلي مجموعة اﻻختيارات اﻵتية كما هو واضح من الشكل:
ﻗﺎﺋﻤﺔ Edit
تحتوي قــائمــة Editأو التحرير علي مجموعــة اختيــارات تســــتخــدم ﻹجراء
التعديﻼت علي الملف التنفيذي فمثﻼ يمكنك إضـــافة تعليق باســـتخدام اﻷمر
Add Commentوﻹضــــافة تعليق أو إعﻼن أو تصــــريح أضــــغط اﻻختيار Add
ProcDeclarationويســــت خدم اﻻخت يار Patchلع مل باتش لكود معين وع ند
الضغط علي هذا اﻻختيار تظهر لك النافذة التالية:
من خﻼل النافذة السابقة نقوم بتغيير الرقم 74إلي 75ويتم ذلك بتغيير الرقم
4إلي 5ثم نضــغط Applyلتطبيق التغيير ويتم إنشــاء ملف جديد بنفس اســم
الملف اﻷصـــلي ولكن باﻻمتداد BAKولتشـــغيل الملف أضـــغط نقوم بالضـــغط
علي ، Runوللتراجع عن تغيير التعديل نضغط اﻻختيار Reset
54
ﻗﺎﺋﻤﺔ Options
تحتوي قائمة الخيارات Optionsعلي مجموعة خيارات واعدادات للتحكم في
نوع وحجم الخط Select Fontوحفظ الخط اﻻفتراضــــي Save Default font
وأيضــــا التحكم في خيارات Dissemblerوأيضــــا التحكم في خيارات التعديل
Debugger optionsواﻻخت يار Display colorsيســــت خدم للتحكم في ألوان
البرنامج مثل لون الخلفية لون الخط ولون نقاط التوقف ولون تحديد اﻷوامر وغير
ذلك من ألوان عناصر البرنامج
كما يمكنك من خﻼل قائمة الخيارات عمل باتش من باســـتخدام برنامج Hiew
من خﻼل اﻻختيار Patch Options
ﻗﺎﺋﻤﺔ Debug
تســــت خدم اخت يارات قائ مة Debugفي تتبع تنف يذ أوامر البر نامج من خﻼل
تحميل العملية أوﻻ وذلك بالضــغط علي اﻻختيار Load Processثم أضــغط OK
فتظهر لك النافذة التالية
55
ومن خﻼل تلك النافذة يمكنك تتبع خطوات تشــــغيل البرنامج بالضــــغط علي
اﻻختيار AutoStep Overوإذا كان أمر نداء اضــــغط علي APIوللخروج من تلك
النافذة أضغط اﻻختيار Terminate
ﻗﺎﺋﻤﺔ Goto
تســــتخدم قائمة Gotoللتحرك في الملف التنفيذي من خﻼل مجموعة أوامر
حركة مختلفة فاﻻختيار Goto Code Startيؤدي إلي تحرك المؤ شر إلي بداية
أوامر البرنامج واﻻختيار Goto Program Entry Pointيحرك المؤ شر إلي نقطة
دخول البرنامج كما يمكنك الضــــغط علي مفتاح F10مباشــــرة بينما اﻻختيار
Goto Pageيسمح لك بالتحرك إلي صفحة معينة من صفحات الملف واﻻختيار
Goto Code Locationيســــت خدم للوصــــول إلي عنوان معين في البر نامج
واﻻختيار Execute jumpيؤدي إلي تنفيذ أمر القفز المحدد واﻻختيار Return
form last jumpللعودة من آخر أمر قفز
واﻻختيار Execute Callلتتبع أمر نداء معين بينما اﻻختيار Return form Call
يستخدم للعودة من آخر أمر نداء
SoftIce ﺑﺮﻧﺎﻣﺞ
ويتم ضـــبط اﻻعدادات الخاصـــةDebug يعتبر هذا البرنامج أقوي برامج التعديل
وهو موجود فيwinice ب هذا البر نامج وهي موجودة في الملف المســــمي
وبعد تثبيت البرنامج قم بنســــخ هذا الملف في مجلدSoftIce مجلد برنامج
و هذا إذا ك نتCtrl+D أضــــغطSoftice ولتشــــغ يل بر نامجSoftice بر نامج
المه مة ال خاصـــــةApi وفي ما يلي قائ مة بدوال، Windows 98 تســــت خدم
Breakpoint بعمل
Reading/writing Files:
ReadFile
WriteFile
CreateFileA
Registry Access:
RegCreateKeyA
RegDeleteKeyA
RegQueryValueA
RegCloseKeyA
RegOpenKeyA
Dialog Boxes:
57
GetWindowTextA
GetDlgItemTextA
GetDlgItemInt
Message Boxes:
MessageBox
MessageBoxA
MessageBoxExA
MessageBeep
Creating a window
CreateWindowExA
ShowWindow
CD-ROM Calls
GetDriveType
GetDriveTypeA
وفيما يلي قائمة بأنواعBreakpoint
DeDe3.50.04.1635 ﺑﺮﻧﺎﻣﺞ
ي ستخدم هذا البرنامج للتعامل مع برامج دلفي ونافذة البرنامج الرئي سية تبدو
كما في الشكل التالي
59
من شــــريط اﻷدوات ثم حدد ولفتح ملف تنفيذي اضــــغط علي أداة الفتح
الملف التنفيذي للبرنامج المرغوب ثم أضغط Open
ولفتح ملف وتعديل Hexالخاص به أفتح قائمة Fileثم أضــــغط Openثم اختر
الملف التنفيذي كما يمكنك الضـــغط علي أداة الفتح في شـــريط اﻷدوات
ويمكنك أن تعمل مقارنة بين ملفين وذلك بفتح الملف اﻵخر من خﻼل الملف
الحالي ولتنفيذ ذلك أفتح قائمة Toolsثم من خﻼل القائمة Compareاضـــغط
اﻻختيار Compare File
ومن خﻼل نافذة ملفات المقارنة افتح الملف اﻷصــلي الذي تم فتحه أســاســا
في البرنامج Sourceثم في القســم Targetأفتح الملف الثاني الذي ســوف
يستخدم في مقارنته بالملف اﻷصلي
61
وعند التعديل في قيم Hexسوف تﻼحظ التعديل في الجزء اﻷيمن الذي يمثل
النص أو العبارة
وﻻختيار ملف معين لتعديله أضــغط ALT + F1ثم حدد مكان وجود الملف ومن
ثم حدد الملف
62
وبعد فتح الملف يمكنك اختيار نمط عرض الملف بحيث يمكنك عرض شــــكل
hexللملف أو عرض الملف بشكل نصي Textأو بشكل كود البرنامج Decode
ويتم ذلك بالضغط علي مفتاح . F4
ولتغيير أمر معين من أوامر البرنامج حدد اﻷمر أوﻻ ثم أضــــغط مفتاح F3ثم قم
بتغير اﻷمر واســتخدم مفتاح F7للبحث داخل الملف بطريقة Hexأو بواســطة
كتابة النص المرغوب البحث عنه ثم اضغط Enterلتبدأ عملية البحث
ولعرض قائمة الملفات لفتح ملف معين لتعديله أضـــغط مفتاح F9وحدد الملف
ثم أضغط Enterلفتحه
63
ولفتح ملف ولفتح ملف جديد اضـــغط علي أداة الفتح من شـــريط اﻷدوات
ثم حدد الملف المرغوب وتســـتخدم اﻷداة محفوظ أضـــغط أداة الفتح
لحفظ الخطوات التي يتعامل معها البرنامج
64
وﻻلت قاط الخطوات التي تر غب في ها أضــــغط علي أداة الت قاط اﻷ حداث
وســوف تظهر لك النافذة التالية والتي يتم من خﻼلها تحديد النشــاطات التي
يتم الت قاط ها فقم بت حد يد كل اﻻخت يارات Select Allبالنســــ بة للقســــم
Win32API
الخاصة بترشيح العمليات تظهر لك النافذة التالية وعند الضغط علي اﻷداة
:
65
نافذة ترشيح اﻷحداث Process Filterعلي اﻻختيارات: وتحتوي
Disable Filterوهو يعني التقاط جميع اﻷحداث التي يتم تنفيذها .1
Include Filterويعني التقاط أحداث البرنامج الذي تحدده بنفسك .2
Exclude Filterويعني التقاط جميع أحداث الملفات ما عدا الملفات .3
التي تقوم بتحديدها
وﻹي قاف أو ولحفظ الخطوات التي يقوم ب ها البر نامج أضــــغط أداة الحفظ
تؤدي إلي إيقاف واﻷداة تشــغيل عملية التقاط اﻷحداث أضــغط اﻷداة
فتســتخدم في التحكم تحرك شــريط اﻷحداث إلي أســفل بينما اﻷيقونة
في تنسيق الوقت الخاص باﻷحداث وﻹلغاء أو مسح كل اﻷحداث الحالية أضغط
وللتحكم في اﻷ حداث التي يقوم بالت قاط ها بح يث يمك نك ت حد يد اﻷداة
وعند الضـغط علي تلك أحداث معينة فقط يتم التقاط أحداثها أضـغط اﻷداة
اﻷداة يظهر لك نافذة تحديد اﻷحداث أو البرامج التي يتم التقاط أحداثها
66
وﻻحظ هنا أننا قصرنا التقاط اﻷحداث علي برنامج Microsoft Wordفقط وكانت
النتيجة كما تري
ويمكنك تحديد أكثر من برنامج أو ملف يتم التقاط أحداثه بكتابة ا سم الملف أو
البرنامج واستخدام الفاصلة "; " لتفصل بين أسماء الملفات
ولتحديد أو معرفة القسم أو المفتاح الذي يحدث فيه الحدث في ملف السجل
كما Registryحدد الســــطر الذي يحتوي علي الحدث ثم أضــــغط اﻷداة
يمكنك النقر المزدوج Double Clickبالفارة علي الســــطر الذي يحتوي علي
الملف
67
من خﻼل نافذة البرنامج أكتب عنوان أو اســــم نافذة الباتش ثم اكتب اســــم
البرنامج كما يمكنك كتابة أي تعليق أو وصــف للبرنامج ثم أضــغط علي Load
68
Iconﻻختيار أيقونة النافذة وبعد اختيار اﻷيقونة المرغوبة اضــغط Nextلﻼنتقال
إلي الخطوة التالية:
لتحديد ملف من خﻼل تلك النافذة أ ضغط علي أداة إ ضافة ملف Add File
البرنامج المطلوب كسر حمايته
لعرض نافذة من خﻼل تلك النافذة أضــــغط علي اختيار إضــــافة البيانات
خيارات البرنامج
من خﻼل نافذة الخيارات أضغط اﻻختيار File Compareثم حدد الملف البرنامج
الذي تم كسر حمايته لمقارنته بالملف اﻷصلي للبرنامج
70
وب عد اخت يار الملف ا لذي تم كســــر ح ماي ته أضــــغط Compareلت بدأ عمل ية
المقارنة بين البرنامج اﻷصــلي والبرنامج المكســور وســوف تظهر لك رســالة
لت حدد نتي جة الم قار نة وفي حا لة ت طابق النســــختين يكون نتي جة الم قار نة
العبارة Match Exactlyثم أضغط OK
بعد العودة الي النافذة الســـابقة أضـــغط OKلﻼنتقال إلي الخطوة التالية من
البرنامج
71
من خﻼل النافذة التالية أضــــغط اﻻختيار Make Win32 Executableثم اكتب
اسم ومكان حفظ ملف Patchثم أضغط Finishﻹنهاء البرنامج
من خﻼل تلك النافذة اكتب عنوان ملف الباتش واســـم البرنامج وتاريخ الباتش
وأية معلومات ترغب أن تظهر عند الضــغط علي اختيار Aboutثم أضــغط Save
ثم أضغط Addمن النافذة التالية فتظهر لك النافذة اﻵتية
من خﻼل تلك النافذة أضغط Double Clickعلي اﻻختيار Offset Patchوسوف
تظهر لك النافذة التالية
73
حدد الملف المراد كســــر حمايته أو الملف اﻷصــــلي للبرنامج ثم حدد الملف
اﻷصــــلي للبرنامج ثم الملف المكســــور ثم أضــــغط اﻻختيار Compareﻹجراء
المقارنة بينهما
ثم أضــــغط OKللعودة إلي النافذة رغبت وذلك بالضــــغط علي اﻷيقونة
السابقة مرة أخرى
من خﻼل تلك النافذة حدد الملف اﻷ صلي للبرنامج Original Fileوكذلك ا سم
بعد كســر حمايته Patched Fileثم حدد اﻻســم الذي تريده للملف التنفيذي
وباقي المعلومات اﻻخري مثل اسم كاسر البرنامج وعنوان موقعه إن وجد وأية
معلومات خاصة بالملف ثم أضغط علي اﻻختيار Generate
و سوف تظهر ر سالة تخبرك أن عملية الكسر تمت بنجاح ثم أ ضغط Exitﻹنهاء
البرنامج
76
البرنامج Predator's Extreme Loader Generator 0.3
هذا البر نامج من البرامج من برامج Loaderالذي يســــت خدم في تغيير أوامر
البرامج في الذاكرة بدون الحاجة إلي إنشــــاء ملف Patchله وهو مناســــب
للبرامج المضغوطة والمشفرة وعند تشغيل البرنامج تظهر النافذة التالية:
ﻻختيار بكســر حماية البرنامج Cracker Nameثم يتم الضــغط علي أداة
الملف المرغوب فكه وبعد اختيار الملف المرغوب كســــر حمايته اضــــغط علي
اﻻختيار Addﻻختيار اﻷمر المطلوب تغييره .
77
في هذه النافذة يتم كتابة العنوان أو كود اﻷمر الموجود في البرنامج والمطلوب
تغييره ثم نضغط . OK
من خﻼل النافذة التالية نقوم بكتابة اﻷمر الجديد الذي ســـوف يحل محل اﻷمر
السابق الموجود بالفعل في البرنامج ثم نضغط OK
وفي حالة وجود خطا في اﻷمر الذي تم تغييره يمكنك الضـــغط علي Change
لتغيير اﻷمر ولحذف أمر حدد اﻷمر ثم أضغط Removeوﻹنشاء ال Loaderأضغط
اﻻختيار Create Loaderثم اكتب اسم الملف واضغط . Save
من خﻼل هذه النافذة نقوم باختيار الملف التنفيذي المراد فك تشــــفيره ثم
أضغط Openلفتح الملف
من خﻼل النافذة التالية أ ضغط اﻻختيار Add Itemﻹ ضافة اﻷمر الذي المطلوب
تغييره
79
من خﻼل النافذة التالية نقوم بكتابة العنوان المطلوب Addressثم نكتب كود
البيانات اﻷصلية المطلوب تغييرها Original Dataثم البيانات الجديدة أو بيانات
الباتش Patch Dataثم نضغط Addوبعد إضافة اﻷوامر المرغوبة نضغط اﻻختيار
Buildﻹنشاء ملف Loader
ﺑﺮﻧﺎﻣﺞ LordPE
ويســــتخدم هذا البرنامج في تعديل ملفات PEمثل ملفات الربط الديناميكية
DLLوعند تشغيل البرنامج تظهر لك النافذة التالية
من خﻼل نا فذة البر نامج حدد الملف المرغوب ثم أضــــغط الزر اﻷيمن لل فارة
Right Clickومن خﻼل القائمة المختصـــرة اضـــغط اﻻختيار dump fullلعمل
dumpله
80
ولك سر حماية برنامج معين أ ضغط اﻻختيار PE Editorثم حدد الملف المطلوب
كسر حمايته وسوف تحصل علي نافذة مثل النافذة التالية
ومن خﻼل ال نا فذة الســـــابق يمك نك تغيير الم قاطع المختل فة للبر نامج م ثل
Entry Pointواختيار ImageBase
وعند الضـــغط علي اختيار المقاطع Sectionsســـوف تحصـــل علي نافذة مثل
النافذة التالية
81
ومن خﻼل نافذة البرنامج الرئيسية نضغط علي اﻻختيار Browseﻻختيار الملف
المرغوب تعديله
82
بعد فتح الملف المرغوب يمكنك الضـــغط علي اﻻختيار Sectionsلعرض مقاطع
البرنامج وعند ال ضغط علي اﻻختيار Tasksسوف يتم عرض المهام التي يقوم
بها البرنامج
ولعمل Dumpللملف المختار نقوم بال ضغط علي dump fullوكل ملف م شفر
نرغب في كسر حمايته نقوم بعمل dump fullله
83
من خﻼل نا فذة البر نامج نقوم بالضــــغط علي اﻻخت يار Open Fileثم ن حدد
الملف المطلوب مسحه وبعد فتح الملف نقوم بالضغط علي Scanلعمل مسح
للملف ومن ثم سوف تظهر النافذة التالية:
84
من خﻼل النافذة الســــابقة تظهر معلومات الملف التنفيذي مثل EntryPoints
وImageBase
وعند الضـــغط علي اﻻختيار Object tableتظهر محتويات المقاطع التي يتكون
منها البرنامج ويمكن عمل dumpﻷي مقطع من تلك المقاطع ولعرض الدوال
المستخدمة في البرنامج أضغط اﻻختيار Functions
85
وتلك الملفات تحتوي علي مجموعة الدوال التي تســــتخدم من قبل البرنامج
ويطلق علي هذه الدوال اســـم APIوهي حيوية للبرنامج وكل البرامج تحتوي
علي مجموعة من تلك الدوال أو الوظائف ولمعرفة لغة البرنامج نقوم بالضـــغط
علي اﻻختيار Compilerفتظهر النافذة التالية
من خﻼل تلك النافذة يمكن التعرف علي اللغة المستخدمة في كتابة البرنامج
ويمكن أيضـــا معرفة إذا كان البرنامج مشـــفر أو مضـــغوط وعند الضـــغط علي
اﻻختيار Modifyتظهر النافذة التالية
86
وتحتوي ت لك ال نا فذة علي مجمو عة اخت يارات وهي خاصـــــة بالت عد يل علي
الملف التنفيذي فاﻻختيار Add Sectionيسمح لك بإضافة مقطع إلي البرنامج
وتحديد حجم المقطع Sizeواســــم المقطع Nameكما تحتوي النافذة علي
الخيار Entry Pointويســمح بتغيير نقطة معينة Entry Pointثم الضــغط علي
Patchبعد إدخال Entry Pointواﻻختيار Add Importsيســـمح بإضـــافة دوال
APIمن ملفات أخري ويتم ذلك بالضــغط علي Openبينما اﻻختيار Optimize
لتصغير حجم الملف التنفيذي أو الملف قيد المسح
وع ند الضــــغط علي العنوان اﻷدوات والخ يارات Tools & Optionsتظهر لك
النافذة التالية :
تحتوي نا فذة اﻷدوات والخ يارات علي واﻷدوات ال خاصـــــة بالملف التنف يذي
فاﻻختيار RVA Offsetي ستخدم ﻹدخال عنوان معين لمعرفة اﻻوف ست الخاص
به كما يســــتخدم اﻻختيار TimeDateCrackerلتغيير تاريخ البرنامج التنفيذي
وهو مفيد في حالة البرامج التي لها تاريخ صــــﻼحية محدد تنتهي بعده وفي
هذه الحالة يتم إدخال تاريخ جديد New Dateثم الضــــغط علي اﻷمر ، Write
واﻻختيار Associationيتيح لك عرض البرنامج فعند الضــــغط علي الزر اﻷيمن
Right Clickعلي اســــم الملف المطلوب بدﻻ من الذهاب إلي مجلد البرنامج
وتشــــغيله في كل مرة ،ويســــتخدم اﻻختيار Languageﻻختيار لغة واجهة
البرنامج من خﻼل اللغات المتاحة :
87
وعند الضغط علي العنوا ن Plug-Insتظهر النافذة التالية
ثم نختار ملف البرنامج ونقوم بالضــــغط علي أداة فتح الملف التنفيذي
ونﻼحظ في النافذة التالية أن البرنامج مكتوب بلغة Microsoft visual C++
89
وع ند الضــــغط علي اﻻخت يار Multi Scanتظهر نا فذة يتم من خﻼل ها اخت يار
المج لد المطلوب ع مل مســــح لمل فا ته وذ لك ع ند الضــــغط علي اﻻخت يار
Scan Directoryثم اختيار المجلد المرغوب:
وبعد اختيار المجلد المرغوب عمل مســــح لملفاته تظهر نافذة تحتوي علي
مجموعة الملفات التنفيذية للبرامج :
وع ند تحم يل الملف في بر نامج PEidتظهر ال نافذة ال تال ية التي تحتوي علي
الملف وﻻحظ اللغة المكتوب بها البرنامج :
كما يمكن من خﻼل القائمة المختصــــرة التي تظهر عند اﻹشــــارة إلي الملف
وال ضغط علي Right Clickأن تعمل Dumpللملف المحدد وذلك بال ضغط علي
اﻻختيــار ) Load in PEid (Fileوﻹنهــاء تشــــغيــل الملف نضــــغط اﻻختيــار
Kill Selected Taskولتحديث القائمة نضغط اﻻختيار . Refresh Task List
91
وبعد تحديد اﻻختيارات وخصــائص البرنامج نقوم بالضــغط علي Saveلحفظ تلك
من النافذة التالية الخصائص واﻻختيارات ثم عند الضغط علي اﻷداة
92
وعند اختيار Pluginsســــوف تظهر لك قائمة فرعية تحتوي علي مجموعة من
اﻻختيارات كما في التالي:
وعند ال ضغط علي خا صية CRC32سوف تظهر لك نافذة تحتوي علي جزء من
بيانات البرنامج
93
والخاصية UPXShitتعمل علي فك تشفير UPXShit
والخا صية Crypto analyzerتظهر نافذة تو ضح الت شفير Cryptoالموجود علي
الملف
لتشغيل ومن خﻼل القائمة نختار الخاصية المرغوبة ثم نضغط علي اﻷداة
تلك الخاصية
وعند الضغط علي الخاصية Quick ChSumتظهر النافذة التالية:
أما الخاصــــية Rebuild PEفتعمل علي إعادة بناء الملف التنفيذي مع تقليص
حجمه
أما في حالة الضــغط علي الخاصــية String Viewerفتظهر لك النافذة التالية
والتي تحتوي علي النصوص الموجودة في البرنامج
95
ولعمل مسح لملف معين نقوم بفتح قائمة Fileثم نضغط Openونقوم باختيار
الملف المرغوب مسحه
96
وتلك النافذة توضـــح ما إذا كان الملف مشـــفر أو مضـــغوط وعند اﻻنتقال إلي
اﻻختيار Procسوف تظهر النافذة التالية :
توضـــح هذه النافذة البرامج التي تعمل حاليا في الذاكرة وعند الضـــغط Right
Clickعلي أي ملف تظهر قائمة مختصرة
99
وتحتوي تلك النافذة علي خ صائص واختيارات البرنامج مثل اختيار النافذة التي
يتم فتح البر نامج علي ها مثﻼ وذ لك من خﻼل اﻻخت يار At start display this
pageواﻻختيار Stay on topالذي يجعل البرنامج علي الســطح دائما وغيرها
من اﻻعدادات والخصائص اﻷخرى.
100
ومن خﻼل نافذة البرنامج أضــغط علي اﻻختيار Unpackلفك تشــفير او ضــغط
احد البرامج وسوف تحصل علي النافذة التالية
من خﻼل تلك النافذة نقوم باختيار البرنامج المرغوب ا ستخدامه ثم ن ضغط OK
فتظهر النافذة التي يتم من خﻼلها اختيار الملف التنفيذي ثم حدد مكان حفظ
الملف الذي تم فك تشـــفيره أو ضـــغطه ثم اضـــغط Saveوعند انتهاء العملية
سوف تحصل علي رسالة تفيد ذلك
101
وﻹ عادة ب ناء الملف التنف يذي للبر نامج أضــــغط اﻻخت يار Rebuild PEثم حدد
الملف الذي ترغب في إعادة ب ناءه ولتحرير الملف التنف يذي اضــــغط اﻻخت يار
PE Editorوفي هذه الحالة سوف تظهر نافذة ﻻختيار الملف التنفيذي:
تحتوي ت لك ل نا فذة علي م قاطع البر نامج وهي التي يتم من خﻼل ها التعرف
علي البرنامج إذا كان مشفر أم غير ذلك وعند الضغط علي اﻻختيار Directory
تظهر لك النافذة التالية :
102
تحتوي هذه ال نا فذة علي معلو مات الملف التنف يذي وال PEأو الملف ال قا بل
للتنفيذ Portable Executableوإذا رغبت في عمل Dumpلملف قم بتشــغيل
الملف ثم تحول إلي البرنامج وحدد الملف ثم أضــــغط Right Clickومن خﻼل
القائمة المختصرة أضغط : Dump
103
ﻻختيار ملف البرنامج المطلوب من خﻼل تلك النافذة أضــــغط علي اﻷداة
ثم أضــــغط Runوبعد لحظات تظهر نافذة تحتوي علي مجموعة ملفات DLL
التي يحتاجها البرنامج
104
وبعد إغﻼق البرنامج سوف تظهر النافذة التالية التي تحتوي علي الدوال التي
قام البرنامج باســــتدعائها وإذا رغبت في حفظ هذه البيانات أضــــغط اﻻختيار
Save LOG
من خﻼل قائمة Fileنقوم بالضــــغط علي Openثم نختار الملف التنفيذي ثم
نضغط Openفتظهر النافذة التالية :
106
من خﻼل نافذة التحويل يمكنك كتابة الرقم العشــــري Decimalالذي ترغب
في تحويله إلي اﻷنظمة اﻷخرى وســــوف تري قيمة هذا الرقم في اﻷنظمة
الثﻼثة اﻷخرى
وتحتوي تلك النافذة علي الدوال الغير ســــليمة وبعد ذلك اضــــغط
Right Clickعلي الدوال السابقة ثم اضغط اﻻختيار )Trace Level1(Disasm
بعد ذلك أضغط اﻻختيار Show Invalidلعرض الدوال الغير شرعية أو سليمة
ﺑﺮﻧﺎﻣﺞ Revirgin
يســتخدم هذا البرنامج في إصــﻼح الجداول Import Tableللبرامج المشــفرة
وعند تشغيل البرنامج سوف تحصل علي الشكل التالي:
خﻼل نافذة البرنامج نقوم أوﻻ بتشــــغيل برنامج LordPEونقوم بعمل Dump
للملف المشـــفر ،ثم نقوم بتشـــغيل البرنامج المشـــفر ثم من خﻼل برنامج
Revirginثم نضــــغط اﻻختيار Refreshثم نقوم بتحديد الملف المشــــفر وبعد
اختيار الملف المشفر نضع OEPثم نضغط Fetch IATثم نضغط IAT Resolve
وعند الضغط علي اﻷيقونة مرة واحدة بالفارة سوف يتحول الشكل إلي اﻵتي
وعند الضــغط علي أي زر غير نشــط ضــغطة واحدة فانه يتم تفعيل أو تنشــيط
هذا الزر كما في المثال التالي
113
في الشكل السابق تﻼحظ أن الزر Registryغير نشط ولكي يتم تنشيط هذا
الزر نقوم أوﻻ بكتابة أي نص داخل مربع النص وعندئذ يتم تنشيط الزر :
واﻵن تحول إلي مجلد برنامج Softiceثم أفتح الملف Winice.datوأضـــف إليه
السطور التالية:
Exp=c:\windows\system\msvbm60.dll
;Exp=c:\windows\system\msvbvm50.dll
الســـطر اﻷول يدل علي أن برنامج Softiceســـوف يشـــغل هذا الملف لعمل
نقطة توقف في برنامج الفيجوال بيســـيك الذي يســـتخدم هذا الملف ونفس
الحال بالنســـبة للســـطر الثاني غير الســـطر الثاني كما تﻼحظ يبدأ بفاصـــلة
منقوطة ; وهذا معناه أن الملف غير مفعل وتلك الفاصـــلة تســـتخدم في حالة
الرغبة في اســـتخدام الملف msvbvm60.dllفقط ثم عند إلغاء الفاصـــلة يتم
تفع يل الملف msvbvm50.dllولكن ي جب إل غاء تفع يل الملف msvbvm60.dll
بإضافة الفاصلة في أوله حيث ﻻ يمكن تفعيل الملفان في نفس الوقت.
قم ب عد ذ لك بإضـــــا فة القي مة SYM=4096في ملف winice.datوب عد حفظ
التعديﻼت اعد تشغيل الجهاز Restartحتي يتم تنفيذ تلك التغيرات.
معظم برامج فيجوال بيســـيك تســـتخدم الدالة vbastrcmpﻹيجاد الســـيريال
وعلي ذلــك لوضــــع نقطــة توقف في برنــامج Softiceنكتــب اﻷمر Bpx
117
( ثم نقوم بتشـــغيل البرنامج وندخل اﻻســـم )أي اســـمmsvb60_vbastrcmp
.والسيريال )أي رقم( ثم نضغط زر التسجيل
في إيجاد الســــيريال اســــتخدم برنامجSoftice في حالة عدم فعالية برنامج
وهو يحتوي علي مجموعةFunctions ثم انتقل إلي ق سم الدوالW32Dasm
:الدوال اﻵتية
.__vbaBoolVar
.__vbaBoolVarNull
.__vbaCastObjVar
.__vbaChkstk
.__vbaEnd
.__vbaErrorOverflow
.__vbaExceptHandler
.__vbaExitProc
.__vbaFileClose
.__vbaFileOpen
.__vbaForEachCollObj
.__vbaFPException
.__vbaFpI4
.__vbaFpR4
.__vbaFreeObj
.__vbaFreeObjList
.__vbaFreeStr
.__vbaFreeStrList
.__vbaFreeVar
.__vbaFreeVarList
.__vbaHresultCheckObj
.__vbaI2I4
.__vbaI2Str
.__vbaI2Var
.__vbaI4Str
.__vbaI4Var
.__vbaInStr
.__vbaLateIdCall
.__vbaLateIdCallLd
.__vbaLateIdSt
.__vbaLenBstr
.__vbaLenVar
.__vbaLsetFixstr
118
.__vbaNew2
.__vbaNextEachCollObj
.__vbaObjSet
.__vbaObjSetAddref
.__vbaOnError
.__vbaPrintFile
.__vbaPrintObj
.__vbaR4Var
.__vbaR8Str
.__vbaR8Var
.__vbaRecAnsiToUni
.__vbaRecAssign
.__vbaRecUniToAnsi
.__vbaSetSystemError
.__vbaStrBool
.__vbaStrCat
.__vbaStrCmp
.__vbaStrCopy
.__vbaStrI2
.__vbaStrI4
.__vbaStrMove
.__vbaStrR8
.__vbaStrToAnsi
.__vbaStrToUnicode
.__vbaStrVarCopy
.__vbaStrVarMove
.__vbaStrVarVal
.__vbaUI1I2
.__vbaVarAnd
.__vbaVarCat
.__vbaVarCmpEq
.__vbaVarCmpNe
.__vbaVarCopy
.__vbaVarDup
.__vbaVarForInit
.__vbaVarForNext
.__vbaVarMove
.__vbaVarSub
.__vbaVarTstEq
119
.__vbaVarTstNe
._adj_fdiv_m16i
._adj_fdiv_m32
._adj_fdiv_m32i
._adj_fdiv_m64
._adj_fdiv_r
._adj_fdivr_m16i
._adj_fdivr_m32
._adj_fdivr_m32i
._adj_fdivr_m64
._adj_fpatan
._adj_fprem
._adj_fprem1
._adj_fptan
._allmul
._CIatan
._CIcos
._CIexp
._CIlog
._CIsin
._CIsqrt
._CItan
.DllFunctionCall
.EVENT_SINK_AddRef
.EVENT_SINK_QueryInterface
.EVENT_SINK_Release
.rtcAnsiValueBstr
.rtcBeep
.rtcCommandVar
.rtcDoEvents
.rtcErrObj
.rtcGetDayOfMonth
.rtcGetHourOfDay
.rtcGetMinuteOfHour
.rtcGetMonthOfYear
.rtcGetPresentDate
.rtcGetSecondOfMinute
.rtcGetTimer
.rtcGetTimeVar
120
.rtcGetYear
.rtcHexVarFromVar
.rtcInputBox
.rtcIsNumeric
.rtcLeftCharVar
.rtcLowerCaseVar
.rtcMidCharVar
.rtcMonthName
.rtcMsgBox
.rtcReplace
.rtcRightCharVar
.rtcSpaceBstr
.rtcSpaceVar
.rtcStrFromVar
.rtcTrimVar
.rtcUpperCaseVar
.rtcVarBstrFromAnsi
.rtcVarFromError
.rtcVarStrFromVar
.ThunRTMain
d3drm.Direct3DRMCreate
DDraw.DirectDrawCreate
gdi32.BitBlt
gdi32.CreateCompatibleBitmap
gdi32.CreateCompatibleDC
gdi32.CreatePen
gdi32.DeleteDC
gdi32.Polygon
gdi32.Polyline
gdi32.SetBkMode
gdi32.SetPixel
gdi32.StretchBlt
MSVBVM50.__vbaAryConstruct
MSVBVM50.__vbaAryDestruct
MSVBVM50.__vbaAryLock
MSVBVM50.__vbaAryUnlock
MSVBVM50.__vbaBoolVarNull
MSVBVM50.__vbaCastObj
MSVBVM50.__vbaCastObjVar
121
MSVBVM50.__vbaCheckType
MSVBVM50.__vbaChkstk
MSVBVM50.__vbaCopyBytes
MSVBVM50.__vbaEnd
MSVBVM50.__vbaErrorOverflow
MSVBVM50.__vbaExceptHandler
MSVBVM50.__vbaExitEachColl
MSVBVM50.__vbaExitProc
MSVBVM50.__vbaFileClose
MSVBVM50.__vbaFileOpen
MSVBVM50.__vbaForEachCollAd
MSVBVM50.__vbaForEachCollObj
MSVBVM50.__vbaFpCDblR4
MSVBVM50.__vbaFpCDblR8
MSVBVM50.__vbaFpCSngR4
MSVBVM50.__vbaFpCSngR8
MSVBVM50.__vbaFPException
MSVBVM50.__vbaFpI2
MSVBVM50.__vbaFpI4
MSVBVM50.__vbaFPInt
MSVBVM50.__vbaFpR4
MSVBVM50.__vbaFpR8
MSVBVM50.__vbaFreeObj
MSVBVM50.__vbaFreeObjList
MSVBVM50.__vbaFreeStr
MSVBVM50.__vbaFreeStrList
MSVBVM50.__vbaFreeVar
MSVBVM50.__vbaFreeVarList
MSVBVM50.__vbaGenerateBoundsError
MSVBVM50.__vbaGet3
MSVBVM50.__vbaGet4
MSVBVM50.__vbaGetOwner3
MSVBVM50.__vbaHresultCheck
MSVBVM50.__vbaHresultCheckObj
MSVBVM50.__vbaI2I4
MSVBVM50.__vbaI2Var
MSVBVM50.__vbaI4Str
MSVBVM50.__vbaI4Var
MSVBVM50.__vbaInputFile
122
MSVBVM50.__vbaInStr
MSVBVM50.__vbaInStrVar
MSVBVM50.__vbaLateIdCall
MSVBVM50.__vbaLateIdCallLd
MSVBVM50.__vbaLateIdSt
MSVBVM50.__vbaLateMemCall
MSVBVM50.__vbaLateMemCallLd
MSVBVM50.__vbaLateMemSt
MSVBVM50.__vbaLenBstr
MSVBVM50.__vbaNew
MSVBVM50.__vbaNew2
MSVBVM50.__vbaNextEachCollAd
MSVBVM50.__vbaNextEachCollObj
MSVBVM50.__vbaObjIs
MSVBVM50.__vbaObjSet
MSVBVM50.__vbaObjSetAddref
MSVBVM50.__vbaObjVar
MSVBVM50.__vbaOnError
MSVBVM50.__vbaPowerR8
MSVBVM50.__vbaPrintFile
MSVBVM50.__vbaPrintObj
MSVBVM50.__vbaPut3
MSVBVM50.__vbaPut4
MSVBVM50.__vbaPutOwner3
MSVBVM50.__vbaR4ErrVar
MSVBVM50.__vbaR4Str
MSVBVM50.__vbaR4Var
MSVBVM50.__vbaR8IntI4
MSVBVM50.__vbaR8Str
MSVBVM50.__vbaR8Var
MSVBVM50.__vbaRecAssign
MSVBVM50.__vbaRecDestruct
MSVBVM50.__vbaRedim
MSVBVM50.__vbaRedimPreserve
MSVBVM50.__vbaSetSystemError
MSVBVM50.__vbaStrCat
MSVBVM50.__vbaStrCmp
MSVBVM50.__vbaStrCopy
MSVBVM50.__vbaStrI2
123
MSVBVM50.__vbaStrI4
MSVBVM50.__vbaStrMove
MSVBVM50.__vbaStrR4
MSVBVM50.__vbaStrR8
MSVBVM50.__vbaStrToAnsi
MSVBVM50.__vbaStrToUnicode
MSVBVM50.__vbaStrVarMove
MSVBVM50.__vbaStrVarVal
MSVBVM50.__vbaVarAdd
MSVBVM50.__vbaVarAnd
MSVBVM50.__vbaVarCat
MSVBVM50.__vbaVarCmpEq
MSVBVM50.__vbaVarCmpNe
MSVBVM50.__vbaVarDiv
MSVBVM50.__vbaVarDup
MSVBVM50.__vbaVarIdiv
MSVBVM50.__vbaVarMove
MSVBVM50.__vbaVarMul
MSVBVM50.__vbaVarNeg
MSVBVM50.__vbaVarOr
MSVBVM50.__vbaVarSub
MSVBVM50.__vbaVarTstEq
MSVBVM50.__vbaVarTstGt
MSVBVM50.__vbaVarTstLe
MSVBVM50.__vbaVarVargNofree
MSVBVM50._adj_fdiv_m16i
MSVBVM50._adj_fdiv_m32
MSVBVM50._adj_fdiv_m32i
MSVBVM50._adj_fdiv_m64
MSVBVM50._adj_fdiv_r
MSVBVM50._adj_fdivr_m16i
MSVBVM50._adj_fdivr_m32
MSVBVM50._adj_fdivr_m32i
MSVBVM50._adj_fdivr_m64
MSVBVM50._adj_fpatan
MSVBVM50._adj_fprem
MSVBVM50._adj_fprem1
MSVBVM50._adj_fptan
MSVBVM50._allmul
124
MSVBVM50._CIatan
MSVBVM50._CIcos
MSVBVM50._CIexp
MSVBVM50._CIlog
MSVBVM50._CIsin
MSVBVM50._CIsqrt
MSVBVM50._CItan
MSVBVM50.DllFunctionCall
MSVBVM50.EVENT_SINK_AddRef
MSVBVM50.EVENT_SINK_QueryInterface
MSVBVM50.EVENT_SINK_Release
MSVBVM50.GetMem2
MSVBVM50.GetMem4
MSVBVM50.GetMem8
MSVBVM50.GetMemNewObj
MSVBVM50.GetMemObj
MSVBVM50.PutMem2
MSVBVM50.PutMem4
MSVBVM50.PutMem8
MSVBVM50.PutMemNewObj
MSVBVM50.PutMemObj
MSVBVM50.rtcAtn
MSVBVM50.rtcBeep
MSVBVM50.rtcCos
MSVBVM50.rtcDoEvents
MSVBVM50.rtcEndOfFile
MSVBVM50.rtcErrObj
MSVBVM50.rtcFreeFile
MSVBVM50.rtcGetDateVar
MSVBVM50.rtcGetSetting
MSVBVM50.rtcInputBox
MSVBVM50.rtcIsMissing
MSVBVM50.rtcLeftCharVar
MSVBVM50.rtcMidCharBstr
MSVBVM50.rtcMidCharVar
MSVBVM50.rtcMsgBox
MSVBVM50.rtcR8ValFromBstr
MSVBVM50.rtcRgb
MSVBVM50.rtcRightCharVar
125
MSVBVM50.rtcSaveSetting
MSVBVM50.rtcSin
MSVBVM50.rtcSqr
MSVBVM50.rtcTrimVar
MSVBVM50.rtcVarBstrFromAnsi
MSVBVM50.rtcVarFromFormatVar
MSVBVM50.rtcVarStrFromVar
MSVBVM50.SetMemNewObj
MSVBVM50.SetMemObj
MSVBVM50.ThunRTMain
أو قم بتشـــغيل برنامج W32Dasmثم نتقل إلي تلك الدالة ونتحرك ﻷمر القفز
الموجود في اﻷعلى ثم قم بعكس اﻷمر
Bpx msvbm60!_vbvartsteq
وفي هذا النوع من الم قار نة ﻻ يتم اســــت خدام دا لة ح يث أن الم قار نة تكون
داخل الملف التنفيذي
ﻻ يتم اســــتخدام دالة في هذه الطريقة حيث أنها تتم داخل الملف التنفيذي
أيضا
في هذه المقارنة أيضــــا ﻻ يتم اســــتخدام دالة حيث أنها تتم داخل الملف
التنفيذي.
كما ﻻ يســــتخدم مع هذه المقارنة كذلك أية دوال حيث أنها تتم داخل الملف
التنفيذي.
_vbstrcomp
_vbstrcmp
_vbavastrteq
بالرغم من بحثك داخل الدوال السابقة فربما ﻻ تجد السيريال الحقيقي ويجب
عليك التنقل بين الســــطور بعناية حتي تجد الســــيريال الحقيقي للبرنامج
وســوف تجد الســيريال متبوع باﻷمر _vbaمثﻼ يمكن أن يكون ، _vbafreestr
ولكي تستطيع كسر حماية برامج فيجوال بيسيك المكتوبة باﻹصدار السادس
فيجب أن يظل الملف msvbvm60في المقدمة.
132
بعد ذلك قم بحفظ هذه التغيرات ثم شــــغل البرنامج وســــوف تﻼحظ اختفاء
الشاشة المزعجة
Jmps=EB
je=74
jne=C3
ret = C3
nop = 90
الطريقة اﻷولي:
نقوم أوﻻ بتشــــغ يل البر نامج المطلوب تغييره ثم نقوم بفتح بر نامج Ollydbg
ومن خﻼل قائمة Fileنضغط Attachفتظهر النافذة التالية
134
من خﻼل تلك النافذة حدد الملف المطلوب تعديله ثم أضــــغط Double Click
علي الملف للدخول إلي الملف ثم لتغيير نص أو أمر من أوامر البرنامج أضـــغط
Double Clickعلي النص أو اﻷمر ثم قم بتعديله .
ملحوظة:
إذا كان هذا البرنامج مشفر فلن يمكنك حفظ التعديﻼت ومن ثم نقوم
بالذهاب إلي برنامج Loaderلعمل Loaderللبرنامج
الطريقة الثانية:
في هذه الطريقة ســوف نســتخدم برنامج PrincessSandyفقم بتشــغيل هذا
البرنامج ثم أختر البرنامج المطلوب تغيير أوامره ثم اضــغط Add Itemثم أضــف
اﻷمر المطلوب كما في المثال التالي :
135
وﻹضــافة أوامر أخري كرر اﻷمر Add Itemمرة أخري ﻹضــافة كل أمر ثم أضــغط
BUILDﻹنشـــاء ملف Loaderوقم بوضـــع هذا الملف في نفس المجلد الذي
يحتوي علي البرنامج ويتم تشـــغيل البرنامج باســـتخدام ملف Loaderوطبعا
ملف Loaderيســــت خدم لع مل باتش للبر نامج في ا لذاكرة بدون تغيير أوامر
البرنامج اﻷصلية.
وهذا اﻷمر معناه تغيير اختبار اللعبة من وجود اللعبة علي الســــي دي إلي
وجودها علي Hard Diskوبذلك يمكنك تشــــغيل اللعبة بدون الحاجة لوجود
السي دي وحتي تكون اﻻستفادة كاملة من هذا الجزء إليك قائمة بأهم أوامر
القفز في لغة اﻻسمبلي:
ﺇﳚﺎﺩ ﺍﻟﺴﲑﻳﺎﻝ
يتم اســــتخدام برنامج Softiceلمعرفة الســــيريال أو الرقم الخاص
بتثبيت البرنامج ويتم ذلك بتشغيل البرنامج ثم ادخل أي رقم للسيريال ثم قم
بتشــغيل برنامج Softiceثم ضــع نقطة توقف باســم Hmemcpyوعند الضــغط
علي OKيظهر برنامج Softiceوتلك هي الطريقة المســــتخدمة في إيجاد
الســــير يال وع ند ظهور بر نامج Softiceنقوم بك تا بة اﻷمر * BCل حذف نق طة
التوقف التي تم وضــعها ثم بالضــغط علي F12فتظهر Proto32ثم نقوم بتتبع
أوامر البرنامج عن طريق الضــغط علي مفتاح F10وســوف تﻼحظ أوامر مقارنة
مثــل Test EAX,EDXأو CMP EAX,EBXحيــث يقوم البرنــامج بمقــارنــة بين
الســيريال الذي قمت بوضــعه مع الســيريال الحقيقي للبرنامج وﻹظهار القيمة
الموجودة في أي من المسجﻼت ال سابقة فنقوم بالضغط علي D EAXسوف
تشــاهد الســيريال الذي تم وضــعه وعند تكرار نفس اﻷمر مع المســجل EBX
سوف تشاهد السيريال الحقيقي للبرنامج .
Bpx Hmemcpy
ثم نقوم بالضــــغط علي F5للرجوع إلي البرنامج المطلوب التعرف علي رقمه
وســـوف تظهر عندئذ نافذة برنامج Softiceومن ثم نقوم بالضـــغط علي مفتاح
F12عدة مرات حتى تظهر كلمة Proto32ونســــتمر في الضــــغط حتي يظهر
اســــم البرنامج أســــفل نافذة البرنامج وهذا يعني انك داخل كود البرنامج ثم
نقوم بالضـــغط علي F10حتي تشـــاهد أمر نداء نقوم بتتبعه حتي نعثر علي
السيريال الحقيقي للبرنامج .
141
ويمكنك من خﻼل البرنامج إظهار محتويات أي مســـجل من المســـجﻼت مثل
EAXوذ لك بك تا بة اﻷمر D EAXأو أمر قفز م ثل jz,jnz,jne,jeوع ند وجود أمر
مقارنة مثل CMPيليه أمر قفز فهذا غالبا يكون أمر المقارنة الذي يحتوي علي
السيريال الحقيقي للبرنامج وقد يظهر كود مثل اﻵتي:
CALL 0041EF84
MOV EAX,[EBP-14] EAX
السريال الذي تم وضعه تم تخزينه في
MOV EDX,[004738D4] EDX
CALL 00403D8C
وهذا يمثل نداء لدالة أو أمر للمقارنة بين السيريال الحقيقي والموضوع
وللقفز إلي تسجيل البرنامج إذا كان السيريال الذي تم وضعه حقيقي
JNZ 00466E39
MOV EAX,00466F34
CALL 0043C650
وإذا كان السيريال غير حقيقي يظل البرنامج غير مسجل
JMP 00466EA2
MOV EAX,004738D4
MOV EDX,00466F7C
CALL 00403A54
ولمعرفة السيريال الحقيقي للبرنامج في اﻷوامر السابقة نقوم بإظهار محتوي
المسجل EDXبكتابة اﻷمر . D EDX
ﻛﺴﺮ ﺍﻟﺴﲑﻳﺎﻝ
ســوف نســتخدم هذا المثال المســمي Bradلتوضــيح كيفية معرفة
الســــيريال وســــوف نســــتخدم برنامج Ollydbgفي تنفيذ هذا المثال ونبدأ
بتشغيل المثال Bradوسوف تحصل علي النافذة التالية :
بعد إدخال البيانات أضــغط الزر Check it Babyوســوف تحصــل علي الرســالة
التالية :
144
ثم أ ضغط مفتاح F9 بعد ذلك تحول إلي شا شة CPUبال ضغط علي اﻷداة
لتشــغيل البرنامج ثم ادخل البيانات الســابقة وفي هذه الحالة ســوف يتوقف
البرنامج ويذهب إلي العنوان التالي.
قم بإغﻼق البر نامج ثم شــــ غل بر نامج SmartCheckثم أفتح قائ مة Fileثم
أضغط Openثم اختار الملف التنفيذي للبرنامج ثم أضغط F5لتشغيل البرنامج
ثم ادخل البيانات السابقة ثم أ ضغط OKوسوف تظهر نفس الر سالة السابقة
ثم اكتب الكلمة اﻵتية ويتم إغﻼق البرنامج ثم قم بالضــــغط علي اﻷداة
وعند إيجاد الر سالة سوف في شريط البحث ثم أ ضغط علي أداة البحث
تشاهد الرسالة في الجانب اﻷيمن من النافذة .
146
عند التحرك إلي ال سطر الخامس اعلي مكان وجود المؤ شر و سوف تﻼحظ أن
البرنامج ي قارن بين الســــيريال الحقيقي والرقم الذي أدخلناه ثم أذهب إلي
البرنامج وستجد أن البرنامج قد تم تسجيله
بعد إدخال البيانات السابقة اضغط الزر Registerوسوف تحصل علي الرسالة
اﻵتية :
قم بإغﻼق البرنامج ثم شــغل برنامج Ollydbgثم حمل البرنامج من خﻼله ثم
من خﻼل قسم النصوص أبحث عن الرسالة السابقة وعند الوصول إليها أضغط
عليها Double Clickثم تحرك إلي اعلي حتي ت شاهد أمر قفز وهو JEا ضغط
السطر لتحديده ثم اضغط مفتاح F2لوضع نقطة توقف
149
أضــــغط OKثم أغلق البرنامج وأفتح برنامج Ollydbgثم حمل ملف البرنامج
التنفيذي من خﻼله ثم من خﻼل قســم النصــوص ابحث عن العبارة الســابقة
وعند العثور عليها أضغط عليها Double Clickللوصول إليها ثم أضغط F2لوضع
نقطة توقف
151
بعد إدخال البيانات في لخطوة رقم 2أ ضغط الخطوة رقم 3فتظهر لك الر سالة
التالية
تحرك اعلي اســـطر الحالي بثﻼث ســـطور حتي تصـــل إلي أمر النداء كما هو
م شار إليه في النافذة ال سابقة ثم أ ضغط F2لو ضع نقطة توقف ثم أ ضغط F9
لتشـــغيل البرنامج ثم ادخل البيانات الســـابق إدخالها مرة أخري ثم أضـــغط زر
التســـجيل وفي هذه الحالة ســـوف يتوقف البرنامج ومن ثم تحول إلي برنامج
Ollydbgلتحصل علي الشكل التالي:
حدد السطر المشار إليه في الصورة ثم اضغط Right Clickومن خﻼل القائمة
المختصرة أضغط Modify Register
154
وســـوف تﻼحظ ظهور الرقم الذي أدخلته قف في الخانة اﻷولي من النافذة ثم
أضــغط ; Right Clickثم اضــغط Modify Dataمن القائمة المختصــرة فتحصــل
علي الشكل التالي:
أضــغط OKثم أغلق البرنامج وشــغل برنامج Ollydbgومن خﻼل أفتح الملف
التنفيذي للبرنامج ثم أبحث عن الرســـالة الســـابقة داخل قســـم النصـــوص
وعندما تصـــل إليها أضـــغط Double Clickعليها ثم تحرك إلي أعلي لتري أمر
المقارنة CMP EAX,ECXوهو يقوم بمقارنة الســــيريال الخطأ مع الســــيريال
الحقيقي للبرنامج
كما تﻼحظ في تلك النافذة فقد ظهر الرقم الذي أدخلناه ثم اشــر إلي الســطر
اﻷول ثم أ ضغط Right Clickثم أ ضغط اﻻختيار Modify registerفترى ال شكل
التالي:
ﺍﻟﺒﺎﺗﺶ Patch
يحتوي هذا الجزء علي مجموعة من اﻷمثلة التي ت شرح كيفية عمل
الباتش أو الملف التنفيذي وســــوف نســــتخدم في ذلك مجموعة من البرامج
المختلفة لكسر الحماية مثل Ollydbgو w32Dsamو . Hiew
157
المثال اﻷولTester:
سوف نستخدم لهذا المثال برنامج W32Dasm
وعند تقوم بتشغيل البرنامج سوف تﻼحظ ظهور النافذة التالية :
فتظهر لك ال نا فذة وب عد اﻻنت هاء من تجم يل الملف أضــــغط علي اﻷداة
التالية
بعد ذلك قم بإغﻼق البرنامج ثم شــغل البرنامج مرة أخري وقبل الضــغط علي
OKشغل برنامج Softiceثم اﻷمر bpx showwindowثم أ ضغط OKو سوف
تﻼحظ ظهور بر نامج Softiceثم أضــــغط F12حتي تظهر كل مة Proto32في
الجزء اﻷيمن من النافذة وتري اﻷمر:
161
002412A JMP 0042411C
وهذا مجرد أمر نداء ولذلك أســتمر في الضــغط علي مفتاح F12وبعد الضــغط
ثﻼث مرات سوف تصل إلي اﻷمر اﻵتي:
اذهب إلي برنامج Hiewثم ضـــع اﻻوفســـت الخاص بهذا اﻷمر وهو 2F3A4ثم
اعكس اﻷمر إلي NOPوســــوف يصــــبح اﻷمر 9090909090وبعـد ذلـك قم
بتشــــغيل البرنامج ســــوف تﻼحظ عدم ظهور الصــــندوق الحواري أو الديالوج
السابق وهذا معناه أننا كسرنا حماية البرنامج
من خﻼل النافذة السابقة أضغط اﻻختيار Purchaseثم ادخل البيانات اﻵتية
162
بعد إدخال البيانات أضــــغط اﻻختيار Unlock softwareفتظهر لك الرســـــالة
التالية :
تحرك إلي كل أمر من اﻷوامر الم حددة ثم أعكســـــه وب هذه الطريقة تكون قد
كسرت حماية البرنامج
أذهب إلي أمر القفز الم شار إليه في الشكل ال سابق ثم أعكس أمر القفز ثم
شــغل البرنامج ثم أدخل البيانات الســابقة وســوف ﻻ يظهر البرنامج الرســالة
وهذا معناه أن البرنامج قد تم تسجيله
اعكس أمر القفز المحدد في الصــورة الســابقة ثم شــغل البرنامج وادخل أي
رقم ثم أضــغط Registerوســوف تري أن الرســالة اختفت ولكن عند تشــغيل
البرنامج مرة ثانية ســوف تﻼحظ انه يطلب منك التســجيل ومن ثم أذهب إلي
برنامج W32Dasmثم ابحث عن الجملة :
Your user number is 52701
Enter the registration number
عند ظهور نافذة البرنامج أفتح قائمة Helpثم أضــــغط اﻻختيار Registration
Codeثم أدخل البيانات اﻵتية:
اذهب إلي اﻷمرين المحددين في الصورة ثم اعكسهما إلي jneثم تحرك إلي
الرسالة الثالثة
اعكس اﻷمر إلي jeثم شــــغل البرنامج وادخل أي رقم وﻻحظ ظهور رســــالة
الشكر واختفاء كل الرسائل السابقة
ويمكنك إتباع طريقتين الطريقة اﻷولي هي أن تأخذ اﻻوفســــت لهذا اﻷمر ثم
شغل برنامج Hiewوأضغط F3ثم F2وادخل الكود التالي:
Push 00000001
Pop EAX
Ret
والطريقة الثانية ارجع أمر القفز كما كان ثم تتبع أمر النداء وأدخل الكود التالي:
170
Mov a1,01
Ret
وهذا الكود يعني إ ضافة القيمة 1إلي a1حيث أن ال سطر ال سابق ﻷمر القفز
يحتوي علي القيمة test a1,a1فإذا كانت القيمة a1=1يتم ت سجيل البرنامج
أما إذا كانت القيمة a1=0فلن يتم التســــجيل واﻷمر retيعني الرجوع إلي
اﻷمر الذي يلي أمر النداء وهو test a1,a1وقد أضــــفنا 1إلي المســــجل a1
وعلي ذلك عند المقارنة يجد البرنامج أن قيمة المسجل a1=1فيتم التسجيل
.
تكون نتيجة تنفيذ اﻻختيار ال سابق الو صول إلي ق سم الن صوص ومن ثم أ ضغط
مفتاح Homeللتحرك إلي أول الصــفحة ثم أضــغط Right Clickثم نفذ اﻻختيار
Search for textثم أكتب نص الرسالة السابقة.
172
عند الوصــول إلي الرســالة أضــغط عليها Double Clickللوصــول إلي العنوان
الخاص بها .
دون العنوان السابق ثم اذهب به إلي برنامج W32Dasmثم أذهب إلي ذلك
العنوان .
قم بتشغيل البرنامج وسوف تري عند عمل مسح علي الملف النافذة التالية
اضـــغط مفتاح F8ثم تحول إلي قســـم المســـجﻼت ثم توقف عند المســـجل
ESPثم أضغط Right Clickثم أضغط اﻻختيار : Follow in Dump
175
تحرك إلي نافذة Dumpثم حدد اﻷربع Byteاﻷولي ثم أضــغط Right clickثم
اﻻختيار :
ثم اضغط مفتاح F9لتشغيل البرنامج وسوف يتوقف البرنامج عند هذا العنوان
176
شــــ غل بر نامج Ollydbgثم ح مل الملف التنف يذي للبر نامج ثم أضــــغط F9
لتشغيل البرنامج وسوف تري النافذة التالية
عند الوصـــول إلي هذه النافذة أضـــغط Alt+Mثم أشـــر إلي العنوان الموضـــح
وأضغط Right Clickثم أضغط اﻻختيار Set memory breakpoint on access
ثم اضغط OKثم تحرك إلي اعلي سطر واحد ثم ضع نقطة توقف Breakpoint
علي أمر النداء الثاني:
يســـمي أمر النداء هذا بالنداء الســـحري ﻷنه ســـوف يتحرك إلي مكان OEP
الصــــحيح في معظم البرامج وبعد وضــــع Breakpointعلي أمر النداء اضــــغط
Right Clickعلي هذا اﻷمر ثم نفذ اﻻختيار Fill with NOPsمن خﻼل قائمة
: Binary
185
وبعد تنفيذ NOPأضــغط Shift+F9ثم اضــغط " "-ثم حدد أوامر NOPثم اضــغط
ALT+BackSpaceو سوف يرجع اﻷمر كما كان ثم ا ضغط Shift+F9حتي ت صل
إلي اﻷمر التالي:
ثم أضــــغط Shift + F9وســــوف تصــــل إلي OEPولكن هذا المكان ليس هو
المكان الصحيح حيث أن المسجل EAXﻻ يساوي المسجل EIP
186
كما يظهر في الشــكل تم العثور علي OEPالحقيقي للبرنامج ويدل علي ذلك
تســـاوي OEPمع EIPثم شـــغل برنامج ImportREConstructor 1.6ثم افتح
الملف التنفيــذي ثم ضــــع القيمــة 10CCفي خــانــة OEPثم أضــــغط IAT
AutoSearchثم أضــــغط Get Importsثم أضــــغط Fix Dumpثم اختر الملف
الناتج من برنامج Ollydbgوسوف تجد أن البرنامج يعمل بدون مشاكل .
ﻻحظ أن المســجل EIPمتســاوي مع العنوان الذي نقف عليه وهذا يدل علي
أننا في المكان ال صحيح ومن ثم قف علي هذا اﻷمر ثم أ ضغط Right Clickثم
أضغط اﻻختيار Dumpثم احفظ الملف الناتج تحت اسم sample.exeثم أغلق
بر نامج Ollydbgثم شــــ غل بر نامج ImportREConstructor 1.6ثم أد خل
القي مة 1E54في خانة OEPثم اضــــغط IAT AutoSearchثم اضــــغط Get
Importsثم أضــــغط Fix Dumpثم حدد الملف ال ناتج من بر نامج Ollydbg
وسوف تجد أن البرنامج يعمل بدون مشاكل
يظهر في الشــــكل الســــابق أن أمر القفز هو الذي وصــــل إليه البرنامج بعد
تحميله واﻷمر التالي هو OEPالحقيقي للبرنامج ويمكن الوصــول إليه بالضــغط
علي مفتاح F8مرتين :
192
قف علي المسجل ESPثم اضغط Right Clickثم اضغط اﻻختيار اﻵتي:
تحرك إلي نافذة Dumpثم قف علي اﻷربع Bitاﻷولي ثم أضـــغط Right Click
ثم نفذ اﻻختيار :
واﻵن شغل برنامج LordPEثم أضغط Right Clickعلي الملف المشفر ثم نفذ
اﻻختيار Dump Fullكما هو واضح من الشكل التالي :
قم بحفظ الملف تحت اﻻســــم Dumped.exeمع مﻼحظة عدم إغﻼق برنامج
Ollydbgواﻵن شــــ غل بر نامج ImportREConstructor 1.6ثم أختر الملف
المشفر ثم ضع OEPكما في الشكل التالي:
195
ا ضغط اﻻختيار Fix Dumpثم أختر الملف الناتج من برنامج Ollydbgثم شغل
البرنامج وسوف تﻼحظ انع يعمل بدون مشاكل
196
تحول إلي نافذة Dumpثم حدد أول رقمين ثم اضـــغط Right Clickثم أضـــغط
اﻻختيار الموضح بالشكل
واضـــح في الصـــورة ال OEPالحقيقي للبرنامج توقف عند هذا اﻷمر ثم أضـــغط
Right Clickثم اضغط اﻻختيار Dump debugged processثم احفظ الملف
ماهي لغة اﻻسمبلي8 ...................................................................... :
المسجﻼت8 ...................................................................... Registers:
مسجﻼت اﻷغراض العامة 8 .......................... General Purpose Registers
مسجﻼت اﻷقسام9 .............................................. Segment Registers:
مسجﻼت التأشير10 ................................................ Pointer Registers:
مسجﻼت الحالة والتحكم11 ..................... Control and Status Registers:
إعﻼم التحكم11 ............................................................ Control Flags:
أعﻼم الحالة11 .............................................................. Status Flags:
مسجﻼت التحكم للمعالج والذاكرة12 ................................................... :
أوامر وتعليمات لغة اﻻسمبلي 12 ..........................................................
أنواع الوسائط13 .............................................................................. :
استخدام 13 ...................................................................... Debugger
كيفية إدخال كود البرنامج14 ............................................................... :
تنفيذ العمليات الحسابية 16 .................................................................
التحكم في البرنامج 18 .......................................................................
الجملة الشرطية18 ....................................................... IF Statement:
الدالة 18 ................................................................................... CMP
الدالة18 ................................................................................. TEST:
الدورات 19 .............................................................................. Loops
دوال التعامل مع النصوص 20 ................................................................
اﻹجراءات 25 .................................................................... Procedures
كيفية عمل اﻹجراءات25 .................................................................... :
إنشاء اﻹجراء25 ............................................................................... :
التعليمة 25 ............................................................................. :MOV
التعليمة 26 .............................................................................. :ADD
التعليمة26 .............................................................................. :AND:
التعليمة26 .............................................................................. CALL:
التعليمة26 ................................................................................RET:
التعليمة26 ............................................................................... CMP:
التعليمة27 ................................................................................ INT:
التعليمة27 ............................................................................... NOP:
التعليمة27 ................................................................................. OR:
التعليمة27 ............................................................................. PUSH:
200
التعليمة27 ............................................................................... POP:
التعليمة27 ................................................................................ REP:
التعليمة27 ................................................................................ INC:
التعليمة28 ............................................................................... DEC:
التعليمة28 ............................................................................... SUB:
التعليمة28 .............................................................................. TEST:
التعليمة28 ............................................................................... XOR:
تعليمات القفز28 .............................................................................. :
التحويﻼت بين اﻷنظمة الرقمية 30 .........................................................
النظام العشري 30 ................................................ Decimal Numbers :
النظم الثنائي30 ...................................................... Binary Numbers :
النظام السداسي عشر31 ............................... Hexadecimal Numbers :
التحويل من الثنائي إلي العشري32 .................................................... :
التحويل من العشري إلي السادس عشر32 .......................................... :