شكرا جزيلا أخي ... :)
اعتقد اننا اقتربنا من الهدف كثيراً
تحياتي
شكرا جزيلا أخي ... :)
اعتقد اننا اقتربنا من الهدف كثيراً
تحياتي
السلام عليكم,
الأخ الإحتراف : ارسل لي عنوانك وسأحاول من جانبي الإتصال بك للمناقشة فكما قلت لك ليس بإمكاني الإتصال بالمسنجر في كل وقت أرغب فيه لأنه ليس لدي أنترنت شخصي.
كما ذكرت في رسالتك فباستعمال Loader خارجي للبرنامج فهذه الطريقة أسهل من الأولى وسأحاول أن أعطيك مثالا إذا سمح الوقت.
فيما يخص الكود السابق إذا كان لديك استفسار ما سأحاول تفسيره.
ماذا يعمل برنامجك ؟
وكما يجب أن نعرف أنه مهما كان مستوى الحماية فلا توجد حماية كاملة 100 في 100 فستجد دائما من يفك برنامجك .
إلى اللقاء.
الى الاخوه المحترفين هل يمكنكم مساعدتي بشرح كيفية دمج ملفين صوت wav أرجوكم مساعدتي و أنا لا أريد كود و لكن أريد معرفة الطريقه
السلام عليكم,
الأخ khabini.com إذا كنت تقصد دمج ملفين صوت في واحد عمليا أو تطبيقا فيمكن استعمال بعض البرامج لهذا وهي كثيرة.
وإذا كنت تريد أن تقوم بذلك بنفسك فالطريقة دائما كما هي. فلكل الملفات مثل wav أو bmp او avi أو غيرها لها ترويسة أو Header وفي هذه الفقرة توجد كل المعطيات على الملف أو معطيات الصوت والصورة إلى غير ذلك.
فمثلا يمكن أن تبحث في النت عن معطيات ترويسة ملف wav وهذا سيعرفك عن حالة الملف كمثل طول الصوت وأين تبتدأ المعطيات الحقيقية وغيرها. وهكذا حين نتعرف عن الملفين الذان نريد أن ندمجهما ما علينا سوى تغيير ترويسة الملف الأول حيث يجب أن يأخذ بعين الإعتبار معطيات الثاني وبعد هذا ننقل معطيات الصوت الحقيقية من الثاني ونزيدها في الملف الأول.
وإذا لم تحصل على الملف أو تعاريف الترويسة سأحاول وضعه هنا في المرة القادمة لأنه عندي في المنزل وسيكون في مكان ما أتمنى أن تسترجعه ذاكرتي بسهولة. وللعموم قد نجد ترويسة للعديد من الملفات وأنصح تحميلها كلها لأنه قد نحتاجها في وقت من الأوقات.
إلى اللقاء.
شكرا جدا لك أخي و سوف أبحث عن التروسيه
شكرا لك أخي ...
انا بصراحة معجب جدا بالقدرات الموجودة في هذا المنتدى .. واتمنى حقيقاً ان اتعرف شخصياً عليكم .. فهذا شرف لي
مما لا شك فيه ان المحاولات والامثلة الموجوة في هذا الموضوع اعتبرها انا مميزة وفريدة ايضا في المنتديات العربية .. وهي تفتح امامي افاق جديدة بإذن الله .
بالنسبة للحماية التي اتحدث عنها .. فهي منع تشغيل برنامج تنفيذي نهائياً إلا من خلال برنامج آخر .. أي ان يتم تشفير برنامج تنفيذي وان يتم تشغيله من Loader خارجي تكون له أكثر من وظيفية من بينها بينها التحقق من توافر شروط معينة قد تكون ملف او اي شيء آخر ... فإذا توفرت هذه الشروط وتحقق تم استدعاء البرنامج المشفر وتشغيله وفك تشفيره في الذاكرة على ان يبقى الملف المشفر كما هو ( اي دون فك تشفيره على القرص ) .... وبالتالي لن يعمل البرنامج دون تحقق الشروط .
آمل أن اكون قد وفقت في توصيل الفكرة ....
تحياتي
السلام عليكم,
الأخ الإحتراف : لم أتمكن من دخول المسنجر للظروف التي تعرف
وهنا أعطي مثالا عن كيفية نوع من الحماية وهي قد تشبه النوع الذي ذكرت لي. وهنا أعطي كود بعجالة وهو لا يتضمن أي تشفير الآن بل فقط لنرى الطريقة.
حين نريد حماية برنامج معين يعطينا برنامج الحماية 3 ملفات :
ملف code.dat وهو ملف يحتوي على قطعة الكود للبرنامج المستهدف
ملف exe.dat الملف المستهدف ولكن قطعة الكود فيه رجعت كلها أصفار حيث لا يشتغل لوحده كيفمت كانت الضروف ومن المستحيل إرجاعه للتشغيل إذا كان لوحده لأنه ليس فيه كود على الإطلاق.
ملف loader.exe وهذا هو الملف الذي سيحمل البرنامجين السابقين في الذاكرة ويصلح ما يجب إصلاحه ويقوم بتشغيل البرنامج وكل هذا يتم طبعا في الذاكرة.
للتجربة ولقلة الوقت وبما أني كنت أجرب البرنامج على notepad.exe هنا يجب نقل هذا البرنامج إلى مسار برنامجنا هذا الموجود في المرفقات وما علينا سوى تشغيل هذا البرنامج ليقوم بإعطائنا الملفات الثلاثة.
وإذا أردنا تجربته على برنامج آخر ننقله أيضا إلى هذا المسار ونغير اسمه إلى notepad.exe أو نغير اسم البرنامج في الكود.
هذا للتجربة ومن بعد يمكن أن نتفادى كل هذه المشقات.
وكذلك في برنامج اللودر يمكن أن نزيد تحقيقات إضافية للتأكد من شروط معينة.
أتمنى أن تكون هذه الفكرة في سياق ما تهدف إليه وإلى اللقاء.
رائــــــــــــــــــــــــــــــــــــــــــع
بالضبط أخي .. هذا هو ما قصدت
وسؤالي هو : هل هذه الطريقة تصلح مع جميع الملفات التنفيذية ؟؟
مثلا هل تصلح مع ملفات ماكروميديا فلاش التنفيذية ؟؟
حاولت ان اعمل Dump لها من خلال Procdump ولكن لم أنجح !!
حسب تقييمك ، ما مدى سهولة نسخ الملف من الذاكرة وتشغيله على القرص واعادة تجميعه ليعمل من جديد بدون Loader ؟؟
الله يعطيك العافية اخي ...
وشكرا لاهتمامك .. بانتظار تطوير الفكرة
تحياتي
السلام عليكم,
كما ذكرت مسبقا فهذه الطريقة قد تشتغل على جميع الملفات التنفيذية ولكن التي لا تضع شيئا من فقرة Import داخل قطعة الكود فمثلا هذا لا يعمل على آلى الحاسبة للوندوز - على الأقل في نظام 98 ولا أدري ما حال الحاسبة في الأنظمة الأخرى - لأنه كما ذكرت مسبقا هذه تضع معطيات Import في بداية قطعة الكود وبما أننا سنزيل هذه القطعة فسيتعذر عن الملف التحميل ليشتغل.
ولكن يمكن تطوير هذه الفكرة ليشتغل على جميع البرامج.
فيما يخص إعادة البرامج بنسخها من الذاكرة إلى القرص الصلب ليشتغل مباشرة فهذا أمر يمكن دائما فعله. فقد يتحايل بعض المبرمجين ولكن مع الوقت قد نتمكن دائما إلى هذا وخاصة إذا كان هناك فريق يتقاسم المهام والمعلومات التي وصل لها كل أحد. في الحقيقة منذ وقت لم أعد اهتم بهذه الأشياء لأنها قد تأخذ منا وقتا لا بأس به وهذا ما نحتاجه اليوم ولهذا لست أعلم ما هي آخر التطورات التي وصل لها هذا الميدان.
إلى اللقاء.
السلام عليكم ..
ابشرك أخي .. فقط قمت بتجربته على الالة الحاسبة وعلى ملف تنفيذي لعرض فلاش ونجح معهما البرنامج ..
يعني كفكرة البرنامج رائع ..
ما أريده هنا ( والله اني أشعر بخجل من كثرة طلباتي ) :
اريد شرح ليس بالكود ولكن بالنص لخطوات عمل الحماية ...
أعلم ان وقتك لا يسمح .. لذا فعند شرحك للبرنامج وطريقة عمله هذا سيتيح لي ان ابحث عن الموضوع بنفسي واحاول تطويره .. وبالذات موضوع اعادة ترتيب البرنامج في الذاكرة !!
وبقي موضوع التشفير على ما اعتقد
تحياتي
السلام عليكم,
سأحاول تطوير الفكرة والبرنامج وسأعطيك كل التفاصيل عن هذا.
فيما يخص التشفير فهذا يمكن لكل واحد أن يختار نوع التشفير الذي يريده.
إلى اللقاء.
ممكن توضيح لو سمحتم بخصوص الكود التالى الموجود فى الملف exeprotect: :wacko:
TheCode db 0BEh,00,00,40h,00,8Bh,46h,3Ch
db 03,0F0h,81h,0C6h,0F8h,00,00,00
db 8Bh,4Eh,08,41h,8Bh,7Eh,0Ch,81h
db 0C7h,00,00,40h,00,8Bh,0F7h,0ACh
db 0F6h,0D0h,0AAh,049h,075h,0F9h,0B8h,00
db 10h,40h,00,05,00,00,40h,00,0FFh,0E0h
اعرف ان هذا الكود بمثابة كود فك التشفير لقطعة الكود المشفرة بواسطة البرنامج وانة يضاف الى البرنامج المراد حمايتة على شكل section باسم .chik ولكن المطلوب معرفتة
كيفية برمجة هذا الكود وايضا كيفية تحويلة بهذا الشكل ارجوا من سيادتكم توضيح ذلك وشكرا لكم جميعا
السلام عليكم,
الأخ أحمد السيد : أريد أن أقول أولا أن الموضوع مضى عليه بعض الوقت ولذى لست متذكرا على كل محتوياته ولذى لا يمكن أن أقول لك الآن ما معنى هذا الكود. بل يمكن بسهولة تمريره تحت ديبوغر مثلا لتعرف ما يعنيه هذا الكود والآن ليس تحت يدي ديبوغر معين لأني في مكان عمومي للنت.وأضن أني أعطيت التعليمات الخاصة بهذا الكود في ملف ما إذا لم تني ذاكرتي.
فيما يخص كيف نعثر على هذا الكود فالطريقة سهلة أيضا فأولا سنقوم برمجة ما نريد كالعادة يعني باستعمال التعليمات كالمعتاد وبعد هذا عندما نبني البرنامج سيحول بالطبع ما كتبناه إلى هذا النوع من الكود ونأخذ منه ما نريد وكذلك يمكن أن نكتب التعليمات مباشرة في ديبوغر يمكن من ذلك وسيعطينا مباشرة الأكواد المناسبة لذلك.
فمثلا لو أريد الكود الخاص بالتعليمة mov eax,1234 فإذا كنت تستعمل سفتايس مثلا قم بما يلي داخل نافذة لهذا البرنامج :
A address mov eax,1234 <esc>
علما أن address هي العنوان الذي تريد أن تكتب فيه التعليمة ويمكنك أن تختار مكانا فارغا حتى لا تغير أي شيء.
وبعد هذا سيحول البرنامج التعليمة إلى كود الآلة ويمكن أن تستعمل هذا الكود حين تريد ذلك.
إلى اللقاء.
وعليكم السلام ورحمة الله وبركاتة
مشكور لتعاونك معى اخ chik ساقوم بتجربة هذا وساقول لك ماصنعتك ارجوا عدم ازعاجك :D
عزيزى chik ليس هذا ما اقصدة ولكن اريد فهم الكود وللتذكرة هذا هو الملف المقصود:
.386 .model flat,stdcall option casemap:none include C:\masm32\include\windows.inc include C:\masm32\include\kernel32.inc ;include C:\masm32\include\user32.inc include C:\masm32\include\comdlg32.inc includelib C:\masm32\lib\kernel32.lib ;includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\comdlg32.lib .data ofn OPENFILENAME<> hand dd 0 fsize dd 0 nRead dd 0 OldEntry dd 0 ImageBase dd 0 ImageSize dd 0 FileAlig dd 0 SectionAlig dd 0 NumberSection dw 0 OfsFirstSect dd 0 OfsNewSect dd 0 RawOffs dd 0 RawSize dd 0 Place dd 0 NewName db "_Chik.exe",0 ; Next data is for loader, it will restitues encoded data and original entry point هذا ماقصدة بالتحديد :o :o TheCode db 0BEh,00,00,40h,00,8Bh,46h,3Ch db 03,0F0h,81h,0C6h,0F8h,00,00,00 db 8Bh,4Eh,08,41h,8Bh,7Eh,0Ch,81h db 0C7h,00,00,40h,00,8Bh,0F7h,0ACh db 0F6h,0D0h,0AAh,049h,075h,0F9h,0B8h,00 db 10h,40h,00,05,00,00,40h,00,0FFh,0E0h .data? strFile db 100 DUP (?) .code start: mov eax,sizeof ofn mov ofn.lStructSize ,eax mov ofn.lpstrFile,offset strFile mov ofn.nMaxFile ,200 invoke GetOpenFileName,addr ofn; dialog for opening file or eax,eax jz TheEnd invoke CreateFile,addr strFile,GENERIC_READ + GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 or eax,eax jz TheEnd mov hand,eax invoke GetFileSize,eax,0 mov fsize,eax invoke VirtualAlloc,0,eax,MEM_COMMIT,PAGE_READWRITE or eax,eax jz TheEnd mov Place,eax invoke ReadFile,hand,eax,fsize,addr nRead,0 or eax,eax jz TheEnd invoke CloseHandle,hand mov hand,0 ;******************************************* xor al,al lea esi,strFile EndString: lodsb cmp al,0 jnz EndString sub esi,5 mov edi,esi lea esi ,NewName mov ecx,10 rep movsb mov esi,Place ;add esi,3ch mov eax,[esi + 3Ch] add esi,eax mov ax,[esi + 6] mov NumberSection,ax inc WORD PTR [esi + 6];Incremente number of sections mov eax,[esi + 28h] mov OldEntry,eax mov eax,[esi + 34h] mov ImageBase,eax mov eax,[esi + 38h] ; eax=section alignement mov SectionAlig,eax push eax mov eax,[esi + 50h] mov ImageSize,eax mov [esi + 28h],eax ;Change Entry Point To new section pop eax add [esi + 50h],eax ; Increment Image size by section alignement mov eax,[esi + 3Ch] mov FileAlig,eax mov eax,esi add eax,0F8h mov OfsFirstSect,eax ; We will change characteristics of text section mov ebx,0E0000020h mov [eax + 24h],ebx xor ebx,ebx mov bx,NumberSection dec bx mov eax,28h mul ebx add eax,esi ; eax point to top of last section add eax,0F8h push eax add eax,10h mov ebx,[eax] ; ebx= Raw Size of the last section add eax,4 mov eax,[eax] ; eax = Raw Offset of last section add eax,ebx; Now eax will have raw offset for our new section mov RawOffs,eax pop esi add esi,28h mov byte ptr [esi],'.' mov ebx,'KIHC' mov [esi + 1],ebx mov ebx,FileAlig mov [esi + 08h],ebx mov [esi + 10h],ebx mov [esi + 14h],eax mov eax,ImageSize mov [esi + 0Ch],eax mov eax,0E0000020h mov [esi + 24h],eax ; jz TheEnd ; TheEnd: invoke CreateFile,addr strFile,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0 or eax,eax jz TheEnd mov hand,eax ;******************************************************* mov esi,OfsFirstSect ; add esi,Place mov edi,[esi + 14h] add edi,Place mov ecx,[esi + 8] inc ecx mov esi,edi Encrypt: lodsb not al stosb dec ecx jnz Encrypt invoke WriteFile,hand,Place,fsize,addr nRead,0 or eax,eax jz TheEnd ;******************************************************* mov edi,Place mov ecx,FileAlig xor eax,eax rep stosb lea esi,TheCode ; push esi mov edi,Place push edi mov ecx,32h rep movsb pop edi mov eax,ImageBase mov [edi + 1],eax mov [edi + 19h],eax mov [edi + 2Ch],eax mov eax,OldEntry mov [edi + 27h],eax invoke SetFilePointer,hand,RawOffs,0,FILE_BEGIN;this is needed for some files containing debug info invoke WriteFile,hand,Place,FileAlig,addr nRead,0 TheEnd: invoke VirtualFree,Place,0,MEM_RELEASE invoke CloseHandle,hand invoke ExitProcess,0 end start
السلام عليكم,
هل تريد شرح البرنامج كامل أم شرح الكود الموجود في المعطيات.
ما يعمله الكود الكامل هو خلق فقرة جديدة وسيقوم بتشفير فقرة الكود. وفي الفقرة الجديدة سنضع الكود الموجود في المعطيات وهذا الكود سيقوم فقط بفك تشفير الفقرة السابقة. ويمكن أن نكتب الكود كما قلت سابقا كالعادة ونأخذ الكود ونضعه في المعطيات حسب ما نريد عمله.
وإذا كانت هناك أشياء أخرى يمكن أن نناقشها.
إلى اللقاء.
جزاك الله كل خير يااخ chik على توضيحك ولكن لى استفسار بسيط وهو لنفرض اننى
صادفت احد هذة القطع وهى على شكل معطيات مثل
db 03,0F0h,81h,0C6h,0F8h,00,00,00
db 8Bh,4Eh,08,41h,8Bh,7Eh,0Ch,81h
db 0C7h,00,00,40h,00,8Bh,0F7h,0ACh
db 0F6h,0D0h,0AAh,049h,075h,0F9h,0B8h,00
كيف يمكننى تحويلها من هذة الصورة الثنائية الى الصورة التنفيذية اى الى اصلها قبل تحويلها وليس بعمل ترجمة للملف ككل هذة القطعة فقط مع العلم ان ممكن ان تكون على شكل صورة وليس ملف تنفيذى على مااعتقد
وشكرا -waf
TheCode db 0BEh,00,00,40h,00,8Bh,46h,3Ch
اقتباسسنضع الكود الموجود فى المعطيات
هذا ماقصدة بالتحديد اريد شفرة الكود الموجود فى المعطيات بالاسمبلى
وشكرا على مجهوداتك
السلام عليكم,
كما قلت لك مسبقا ليس لدي الآن ديبوغر لأترجم الكود. سأقوم بهذا في المنزل هذا المساء وسأضعه هنا غدا إن شاء الله وأتمنى أن لا تنسيني ذاكرتي.
إلى اللقاء.
السلام عليكم,
كما قلت مسبقا سأعطيك الكود بالأسمبلر الخاص بالكود البايناري السابق وهو كما يلي :
BE 00 00 40 00 mov esi,00400000 8B 46 3C mov eax,[esi + 3C] 03 F0 add esi,eax 81 C6 F8 00 00 00 add esi,F8 8B 4E 08 mov edi,[esi + 0C] 81 C7 00 00 40 00 add edi,00400000 8B F7 mov esi,edi AC lodsb F6 D0 not al AA stosb 49 dec ecx 75 F9 jnz (lodsb instruction above) B8 00 10 40 00 mov eax,00401000 05 00 00 40 00 add eax,00400000 FE E0 jmp eax
علما أنه بعض العناوين هنا ليست قارة بل ستغير حسب العنوان الحقيقي. فمثلا في التعليمة الأولى mov esi,00400000 نفترض أن بداية البرنامج ستكون في العنوان المذكور لكن إذا لم يكن كذلك فستلاحظ أن البرنامج الأسبق سيغير هذا إلى العنوان الصحيح قبل أن يسجل الملف كما في البرنامج السابق مثل :
mov eax,ImageBase mov [edi + 1],eax mov [edi + 19h],eax mov [edi + 2Ch],eax mov eax,OldEntry mov [edi + 27h],eax
وهكذا سيكون عندنا هذه القطعة من الكود شبه ديناميكية حسب البرنامج المستهدف. وكما تلاحظ كل ما يفعله هذه القطعة من الكود هي إيجاد العناوين الصحيحة للبرنامج والتي تكون وضعت من قبل البرنامج السابق ثم يفك الشفرة وبعد هذا يذهب إلى نقطة بداية البرنامج الأصلية ليشتغل البرنامج وكأن شيئ لم يكن.
إلى اللقاء.
جزاك الله كل خير يااستاذى ومعلمى الاستاذ chik هذا ماكنت اريد الوصول الية ممكن سوال اخر :D
كيف توصلت الى هذا الكود من الملف البينارى ؟؟؟؟؟؟؟
اسف ازعجتك بكثرة اسئلتى التى لاتنتهى بس لاتؤاخذنى اريد الفهم مش اكتر
السلام عليكم,
هذا الكود كنت كتبته مع البرنامج ولكن بما أني كنت محتاجا للبايناري فقط أخذت منه الترجمة الباينارية فقط. ويمكن كذلك أن تجد هذا الكود وكما ذكرت مسبقا بكتابة هذه المعطيات الباينارية في برنامج ديبوغر وتعمل Unassemble لهذه المعطيات لتحصل على الكود السابق وهي طريقة تصلح لباقي كود البرامج.
إلى اللقاء.
شكرا على التوضيح
mov ebx,0E0000020h mov [eax + 24h],ebx xor ebx,ebx
اريد معرفة وظيفة هذا الكود ولية بالذات اضافنا 0E0000020h
السلام عليكم,
نعرف أن كل فقرة أو section لها خصائصها مثل الكتابة أو القراءة أو كود أو رسورس إلى غير ذلك ولكل خاصة رقم معين ويمكن أن نجمع عدة خصائص. والأرقام ليست كلها على بالي ويمكن أن تعثر عليها بسهولة في أي ملف يتكلم عن Pe Header .
وفيما يخص مثالي فأنا تعودت أن أعطي لأي فقرة جميع الخصائص لذا سيكون الرقم E0000 وبما أن هذه الفقرة ستكون كود أيضا سنضيف لها 20 مما النتيجة السابقة.
إلى اللقاء.
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…