الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اضافة برنامج في برنامج آخر ؟؟

مغلقرائج
بدأه الاحتراف في 19 نوفمبر 2004 · 52 رد · 4,273 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#26

شكرا جزيلا أخي ... :)

اعتقد اننا اقتربنا من الهدف كثيراً

تحياتي

#27

السلام عليكم,

الأخ الإحتراف : ارسل لي عنوانك وسأحاول من جانبي الإتصال بك للمناقشة فكما قلت لك ليس بإمكاني الإتصال بالمسنجر في كل وقت أرغب فيه لأنه ليس لدي أنترنت شخصي.

كما ذكرت في رسالتك فباستعمال Loader خارجي للبرنامج فهذه الطريقة أسهل من الأولى وسأحاول أن أعطيك مثالا إذا سمح الوقت.

فيما يخص الكود السابق إذا كان لديك استفسار ما سأحاول تفسيره.

ماذا يعمل برنامجك ؟

وكما يجب أن نعرف أنه مهما كان مستوى الحماية فلا توجد حماية كاملة 100 في 100 فستجد دائما من يفك برنامجك .

إلى اللقاء.

#28

الى الاخوه المحترفين هل يمكنكم مساعدتي بشرح كيفية دمج ملفين صوت wav أرجوكم مساعدتي و أنا لا أريد كود و لكن أريد معرفة الطريقه

#29

السلام عليكم,

الأخ khabini.com إذا كنت تقصد دمج ملفين صوت في واحد عمليا أو تطبيقا فيمكن استعمال بعض البرامج لهذا وهي كثيرة.

وإذا كنت تريد أن تقوم بذلك بنفسك فالطريقة دائما كما هي. فلكل الملفات مثل wav أو bmp او avi أو غيرها لها ترويسة أو Header وفي هذه الفقرة توجد كل المعطيات على الملف أو معطيات الصوت والصورة إلى غير ذلك.

فمثلا يمكن أن تبحث في النت عن معطيات ترويسة ملف wav وهذا سيعرفك عن حالة الملف كمثل طول الصوت وأين تبتدأ المعطيات الحقيقية وغيرها. وهكذا حين نتعرف عن الملفين الذان نريد أن ندمجهما ما علينا سوى تغيير ترويسة الملف الأول حيث يجب أن يأخذ بعين الإعتبار معطيات الثاني وبعد هذا ننقل معطيات الصوت الحقيقية من الثاني ونزيدها في الملف الأول.

وإذا لم تحصل على الملف أو تعاريف الترويسة سأحاول وضعه هنا في المرة القادمة لأنه عندي في المنزل وسيكون في مكان ما أتمنى أن تسترجعه ذاكرتي بسهولة. وللعموم قد نجد ترويسة للعديد من الملفات وأنصح تحميلها كلها لأنه قد نحتاجها في وقت من الأوقات.

إلى اللقاء.

#31

شكرا لك أخي ...

انا بصراحة معجب جدا بالقدرات الموجودة في هذا المنتدى .. واتمنى حقيقاً ان اتعرف شخصياً عليكم .. فهذا شرف لي

مما لا شك فيه ان المحاولات والامثلة الموجوة في هذا الموضوع اعتبرها انا مميزة وفريدة ايضا في المنتديات العربية .. وهي تفتح امامي افاق جديدة بإذن الله .

بالنسبة للحماية التي اتحدث عنها .. فهي منع تشغيل برنامج تنفيذي نهائياً إلا من خلال برنامج آخر .. أي ان يتم تشفير برنامج تنفيذي وان يتم تشغيله من Loader خارجي تكون له أكثر من وظيفية من بينها بينها التحقق من توافر شروط معينة قد تكون ملف او اي شيء آخر ... فإذا توفرت هذه الشروط وتحقق تم استدعاء البرنامج المشفر وتشغيله وفك تشفيره في الذاكرة على ان يبقى الملف المشفر كما هو ( اي دون فك تشفيره على القرص ) .... وبالتالي لن يعمل البرنامج دون تحقق الشروط .

آمل أن اكون قد وفقت في توصيل الفكرة ....

تحياتي

#32

السلام عليكم,

الأخ الإحتراف : لم أتمكن من دخول المسنجر للظروف التي تعرف

وهنا أعطي مثالا عن كيفية نوع من الحماية وهي قد تشبه النوع الذي ذكرت لي. وهنا أعطي كود بعجالة وهو لا يتضمن أي تشفير الآن بل فقط لنرى الطريقة.

حين نريد حماية برنامج معين يعطينا برنامج الحماية 3 ملفات :

ملف code.dat وهو ملف يحتوي على قطعة الكود للبرنامج المستهدف

ملف exe.dat الملف المستهدف ولكن قطعة الكود فيه رجعت كلها أصفار حيث لا يشتغل لوحده كيفمت كانت الضروف ومن المستحيل إرجاعه للتشغيل إذا كان لوحده لأنه ليس فيه كود على الإطلاق.

ملف loader.exe وهذا هو الملف الذي سيحمل البرنامجين السابقين في الذاكرة ويصلح ما يجب إصلاحه ويقوم بتشغيل البرنامج وكل هذا يتم طبعا في الذاكرة.

للتجربة ولقلة الوقت وبما أني كنت أجرب البرنامج على notepad.exe هنا يجب نقل هذا البرنامج إلى مسار برنامجنا هذا الموجود في المرفقات وما علينا سوى تشغيل هذا البرنامج ليقوم بإعطائنا الملفات الثلاثة.

وإذا أردنا تجربته على برنامج آخر ننقله أيضا إلى هذا المسار ونغير اسمه إلى notepad.exe أو نغير اسم البرنامج في الكود.

هذا للتجربة ومن بعد يمكن أن نتفادى كل هذه المشقات.

وكذلك في برنامج اللودر يمكن أن نزيد تحقيقات إضافية للتأكد من شروط معينة.

أتمنى أن تكون هذه الفكرة في سياق ما تهدف إليه وإلى اللقاء.

Protect.ZIP

#33

رائــــــــــــــــــــــــــــــــــــــــــع

بالضبط أخي .. هذا هو ما قصدت

وسؤالي هو : هل هذه الطريقة تصلح مع جميع الملفات التنفيذية ؟؟

مثلا هل تصلح مع ملفات ماكروميديا فلاش التنفيذية ؟؟

حاولت ان اعمل Dump لها من خلال Procdump ولكن لم أنجح !!

حسب تقييمك ، ما مدى سهولة نسخ الملف من الذاكرة وتشغيله على القرص واعادة تجميعه ليعمل من جديد بدون Loader ؟؟

الله يعطيك العافية اخي ...

وشكرا لاهتمامك .. بانتظار تطوير الفكرة

تحياتي

#34

السلام عليكم,

كما ذكرت مسبقا فهذه الطريقة قد تشتغل على جميع الملفات التنفيذية ولكن التي لا تضع شيئا من فقرة Import داخل قطعة الكود فمثلا هذا لا يعمل على آلى الحاسبة للوندوز - على الأقل في نظام 98 ولا أدري ما حال الحاسبة في الأنظمة الأخرى - لأنه كما ذكرت مسبقا هذه تضع معطيات Import في بداية قطعة الكود وبما أننا سنزيل هذه القطعة فسيتعذر عن الملف التحميل ليشتغل.

ولكن يمكن تطوير هذه الفكرة ليشتغل على جميع البرامج.

فيما يخص إعادة البرامج بنسخها من الذاكرة إلى القرص الصلب ليشتغل مباشرة فهذا أمر يمكن دائما فعله. فقد يتحايل بعض المبرمجين ولكن مع الوقت قد نتمكن دائما إلى هذا وخاصة إذا كان هناك فريق يتقاسم المهام والمعلومات التي وصل لها كل أحد. في الحقيقة منذ وقت لم أعد اهتم بهذه الأشياء لأنها قد تأخذ منا وقتا لا بأس به وهذا ما نحتاجه اليوم ولهذا لست أعلم ما هي آخر التطورات التي وصل لها هذا الميدان.

إلى اللقاء.

#35

السلام عليكم ..

ابشرك أخي .. فقط قمت بتجربته على الالة الحاسبة وعلى ملف تنفيذي لعرض فلاش ونجح معهما البرنامج ..

يعني كفكرة البرنامج رائع ..

ما أريده هنا ( والله اني أشعر بخجل من كثرة طلباتي ) :

اريد شرح ليس بالكود ولكن بالنص لخطوات عمل الحماية ...

أعلم ان وقتك لا يسمح .. لذا فعند شرحك للبرنامج وطريقة عمله هذا سيتيح لي ان ابحث عن الموضوع بنفسي واحاول تطويره .. وبالذات موضوع اعادة ترتيب البرنامج في الذاكرة !!

وبقي موضوع التشفير على ما اعتقد

تحياتي

#36

السلام عليكم,

سأحاول تطوير الفكرة والبرنامج وسأعطيك كل التفاصيل عن هذا.

فيما يخص التشفير فهذا يمكن لكل واحد أن يختار نوع التشفير الذي يريده.

إلى اللقاء.

#37

ممكن توضيح لو سمحتم بخصوص الكود التالى الموجود فى الملف 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 ولكن المطلوب معرفتة

كيفية برمجة هذا الكود وايضا كيفية تحويلة بهذا الشكل ارجوا من سيادتكم توضيح ذلك وشكرا لكم جميعا

#38

السلام عليكم,

الأخ أحمد السيد : أريد أن أقول أولا أن الموضوع مضى عليه بعض الوقت ولذى لست متذكرا على كل محتوياته ولذى لا يمكن أن أقول لك الآن ما معنى هذا الكود. بل يمكن بسهولة تمريره تحت ديبوغر مثلا لتعرف ما يعنيه هذا الكود والآن ليس تحت يدي ديبوغر معين لأني في مكان عمومي للنت.وأضن أني أعطيت التعليمات الخاصة بهذا الكود في ملف ما إذا لم تني ذاكرتي.

فيما يخص كيف نعثر على هذا الكود فالطريقة سهلة أيضا فأولا سنقوم برمجة ما نريد كالعادة يعني باستعمال التعليمات كالمعتاد وبعد هذا عندما نبني البرنامج سيحول بالطبع ما كتبناه إلى هذا النوع من الكود ونأخذ منه ما نريد وكذلك يمكن أن نكتب التعليمات مباشرة في ديبوغر يمكن من ذلك وسيعطينا مباشرة الأكواد المناسبة لذلك.

فمثلا لو أريد الكود الخاص بالتعليمة mov eax,1234 فإذا كنت تستعمل سفتايس مثلا قم بما يلي داخل نافذة لهذا البرنامج :

A  address
mov eax,1234
<esc>

علما أن address هي العنوان الذي تريد أن تكتب فيه التعليمة ويمكنك أن تختار مكانا فارغا حتى لا تغير أي شيء.

وبعد هذا سيحول البرنامج التعليمة إلى كود الآلة ويمكن أن تستعمل هذا الكود حين تريد ذلك.

إلى اللقاء.

#39

وعليكم السلام ورحمة الله وبركاتة

مشكور لتعاونك معى اخ chik ساقوم بتجربة هذا وساقول لك ماصنعتك ارجوا عدم ازعاجك :D

#40

عزيزى 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
#41

السلام عليكم,

هل تريد شرح البرنامج كامل أم شرح الكود الموجود في المعطيات.

ما يعمله الكود الكامل هو خلق فقرة جديدة وسيقوم بتشفير فقرة الكود. وفي الفقرة الجديدة سنضع الكود الموجود في المعطيات وهذا الكود سيقوم فقط بفك تشفير الفقرة السابقة. ويمكن أن نكتب الكود كما قلت سابقا كالعادة ونأخذ الكود ونضعه في المعطيات حسب ما نريد عمله.

وإذا كانت هناك أشياء أخرى يمكن أن نناقشها.

إلى اللقاء.

#42

جزاك الله كل خير يااخ 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

#43
اقتباس
سنضع الكود الموجود فى المعطيات

هذا ماقصدة بالتحديد اريد شفرة الكود الموجود فى المعطيات بالاسمبلى

وشكرا على مجهوداتك

#44

السلام عليكم,

كما قلت لك مسبقا ليس لدي الآن ديبوغر لأترجم الكود. سأقوم بهذا في المنزل هذا المساء وسأضعه هنا غدا إن شاء الله وأتمنى أن لا تنسيني ذاكرتي.

إلى اللقاء.

#45

السلام عليكم,

كما قلت مسبقا سأعطيك الكود بالأسمبلر الخاص بالكود البايناري السابق وهو كما يلي :

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

وهكذا سيكون عندنا هذه القطعة من الكود شبه ديناميكية حسب البرنامج المستهدف. وكما تلاحظ كل ما يفعله هذه القطعة من الكود هي إيجاد العناوين الصحيحة للبرنامج والتي تكون وضعت من قبل البرنامج السابق ثم يفك الشفرة وبعد هذا يذهب إلى نقطة بداية البرنامج الأصلية ليشتغل البرنامج وكأن شيئ لم يكن.

إلى اللقاء.

#46

جزاك الله كل خير يااستاذى ومعلمى الاستاذ chik هذا ماكنت اريد الوصول الية ممكن سوال اخر :D

كيف توصلت الى هذا الكود من الملف البينارى ؟؟؟؟؟؟؟

اسف ازعجتك بكثرة اسئلتى التى لاتنتهى بس لاتؤاخذنى اريد الفهم مش اكتر

#47

السلام عليكم,

هذا الكود كنت كتبته مع البرنامج ولكن بما أني كنت محتاجا للبايناري فقط أخذت منه الترجمة الباينارية فقط. ويمكن كذلك أن تجد هذا الكود وكما ذكرت مسبقا بكتابة هذه المعطيات الباينارية في برنامج ديبوغر وتعمل Unassemble لهذه المعطيات لتحصل على الكود السابق وهي طريقة تصلح لباقي كود البرامج.

إلى اللقاء.

#48

شكرا على التوضيح

#49
   mov ebx,0E0000020h
   mov [eax + 24h],ebx
   xor ebx,ebx

اريد معرفة وظيفة هذا الكود ولية بالذات اضافنا 0E0000020h

#50

السلام عليكم,

نعرف أن كل فقرة أو section لها خصائصها مثل الكتابة أو القراءة أو كود أو رسورس إلى غير ذلك ولكل خاصة رقم معين ويمكن أن نجمع عدة خصائص. والأرقام ليست كلها على بالي ويمكن أن تعثر عليها بسهولة في أي ملف يتكلم عن Pe Header .

وفيما يخص مثالي فأنا تعودت أن أعطي لأي فقرة جميع الخصائص لذا سيكون الرقم E0000 وبما أن هذه الفقرة ستكون كود أيضا سنضيف لها 20 مما النتيجة السابقة.

إلى اللقاء.

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…