الشكر لله اخى الكريم عروة
حمدا لله على عودتك وارجو الله ان يكون تغيبك هذه الفترة فى خير
وبالنسبه الى الموضوع فهناك مشكله بسيطه فقط اعتقد انها فقط بسبب عدم معرفتى الكامله
لآ إله إلا الله محمد رسول الله
الشكر لله اخى الكريم عروة
حمدا لله على عودتك وارجو الله ان يكون تغيبك هذه الفترة فى خير
وبالنسبه الى الموضوع فهناك مشكله بسيطه فقط اعتقد انها فقط بسبب عدم معرفتى الكامله
لآ إله إلا الله محمد رسول الله
السلام عليكم
انا شاكر جدا لجميع من عاوننى فى محنتى وارجو ان لا اكون اثقلت عليكم بطلباتى الكثيرة
وارجوا ايضا ان يكون هذا هو الطلب الأخير لأنهاء ذلك الموضوع وياليت تتقبلوه بصدر رحب
علما بأنى مازال امامى طريق طويل لكتابه برامجى كلها بالدلفى لكنى اريد ان استخدم الDLL الذى تم عمله هنا فى برنامج كبيير قمت ببرمجته بــVB والى الآن مع ان الأخ Deltaaziz ارسل مثالا لكيفيه استخدامه الأ انه بالدلفى وانا لن اقدر ان اترجم البرنامج الذى عملت به لمده سنه بالVB الى دلفى الآن
الخلاصه انى استخدم طريقه قراءة الملفات التاليه :Open "ExeFile.exe" For Binary As #FN
وهى تعنى فى الVB انى افتح الملف ExeFile للقراءة او الكتابه فى الباينرى
ثم اقرأء محتويات الملف المفتوح داخل Buffer بواسطه جمله Get مثلا
Get FN, , Buffer
وهنا اصبح عندى الملف مخزن فى هيئه Binary فى متغير اسمه Buffer مثلا
أى عندى ExE مخزن فى متغير Buffer
كل الموضوع يا اساتذة انى اريد ان امرر محتويات المتغير Buffer الى الداله الموجوده بالDll
وهى تقوم بتشغيل البرنامج الموجود بمحتوى البفر المرر اليها
وقد قام بالفعل الأخ Delta بذلك وارفق مثال لكن بالدلفى وجربت اعمل عليه بالVB ولم ينفع
وكنت اخجل من كتابه هذا الرد فى المنتدى لأنه ليس له علاقه بالدلفى ولكن طمعى فى كرم الله كبير أن لا تخذلونى او تقللوا من شأنى لأنى اريده فى مشروع Vb وانى قد قلت انى اتعلم الدلفى الآن لأنى فعلا لمستها عن قرب ووجدت فيها ماليس فى لغه اخرى مع انى كنت انوى تعلم الجافا بعد الVB
لكنى غيرت رأيى والله المستعان
اعتذر ان كنت اطلت عليكم لكنى فعلا كنت اريد ان اقول لكم كل ما اريد
واخيرا ادعوا لكل من شارك فى هذا الموضوع بكل التوفيق فى الآخرة والدنيا وصلاح الأحوال
وربنا يحسن ختامنا جميعا
السلام عليكم
لآ إله إلا الله محمد رسول الله
حياك الله اخي ولماذا الخجل كثيرون هم من انتقل من الVB الى الدلفي ولوقلت ذلك لربما استطاع مساعدتك من يعرف اللغتين هنا
أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر
وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري
كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو
أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري
عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري
فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري
و كنت أعرف أنك تستخدم VB لما تدخلت :s
أمزح :lol:
يكفي أن تمرر Pointer نحو Buffer وستعمل إن شاء الله
السلام عليكم ورحمة الله
عفوا لم افهم قصدك اخى DeltaAziz
هل امرر الBuffer الى MyCreateProcessEx ,ام ماذا تقصد بالمؤشر هنا Pointer
معذرة ارجو التوضيح قليلا (وياحبذا لو بمثال :rolleyes: )
لآ إله إلا الله محمد رسول الله
لست معكم بالأجواء , ولكن إذا كنت تملك متحول نصي وتريد تمريرة كمؤشر ضع أمامة المعامل @
وإذا سبب مشاكل ضعه كالتالي :
@Buffer[0]
أتمنى أن تحصل على ماتريد , والفكرة ممتازة
السلام عليكم
للأسف الشديد البرنامج لم يعمل معى حتى الآن وجربت عليه كل ماكتبتم الى يأست من كتر المحاوله
ما العمل اذن ؟ :(
لآ إله إلا الله محمد رسول الله
لا تيأس يا أخي... مرر مؤشر Buffer إلى الدالة ما هو الخطأ الناتج بالضبط ؟
أكتب له شفرة ذلك أخي
ربما الخطأ هنا
اخى البرنامج كله ينهار ويغلق ويظهر طلب ارسال الخطأ لمايكروسوفت
مع العلم انى جربت استخدام كلا من Deltaaziz.dll , Mylib.dll اى كل من الملفين يعطيان نفس النتيجه
وللتأكد من مشكله اليكم كود الvb لبرنامج اختبار ال Dll's التى ارفقت هنا من قبل :
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Sub MyCreateProcessEx Lib "mylib.dll" (FileMemory as String)
Dim Hnd As Long
Dim Buff As String
Dim Fn As Long
Private Sub Command1_Click()
Fn = FreeFile
Buff = String(FileLen(T1), Chr(0))
Open "D:\test.exe" For Binary As Fn
Get Fn, , Buff
Close Fn
Call MyCreateProcessEx(Buff)
End Sub
Private Sub Form_Load()
Hnd = LoadLibrary(Environ("windir") & "\System32\mylib.dll")
End Sub
Private Sub Form_Unload(Cancel As Integer)
FreeLibrary (Hnd)
End Subهذا كود برنامج اختبار كتبته الآن لكى اختبر اى Dll وطبعا فقط غير اسم ال Dll و اسم الفنكشن الى المراد اختباره
و مع العلم ان رساله اغلاق البرنامج تفيد بأن ال DLL هو سبب غلق البرنامج وتوقفه عن العمل
ارجوكم افيدونى بسرعه افادكم الله
لآ إله إلا الله محمد رسول الله
تم تعديل هذه المشاركة بواسطة DeltaAziz في 25 أغسطس 2005 في 12:14
لا اله الا الله يعنى بعد كل هذا الجهد والتعب يضيع كل هذا هباء :( :(
وكمان لن استطيع استخدام AddressOf ولا اقدر على التعامل مع الDLL بعد كل هذا .. والله حرام
جزاك الله خير الجزاء Deltaaziz والله لقد بذلتم جهدا انت و اجميع من شارك فى الرد
ولكن كل شئ انهار امامى الآن وضاقت الدنيا بعد ماظننت انها قد فرجت للأسف وبعد ان قرأت ماكتب عن الموضوع :(
وانا لا استطيع ان اكتب البرنامج كله بالدلفى ثانيه لأنى مازلت اتعلمها من الصفر والبرنامج الذى تعبت فيه على مدار 15 شهر متقدم جدا
وكبير لدرجه لا تمكنى من اعاده كتابته مره ثانيه :(
لقد ازدا كرهى لمايكروسوفت اضعافا مضاعفة الآن ولا ادرى ماذا افعل . . لكن
على العموم ربنا يكرمكم جميعا و شكرا للمساعده
تم تعديل هذه المشاركة بواسطة Siner في 25 أغسطس 2005 في 20:01
لآ إله إلا الله محمد رسول الله
السلام عليكم
هل يمكنك اخى Deltaaziz ارفاق كود الDLL الأخير الذى قمت بالتعديل عليه
وشكرا
لآ إله إلا الله محمد رسول الله
ليس معي الأن و ليس لي أنترنت بالبيت :angry:
لكن تجد نسخة في هذا الموضوع
ملاحظة: ما تريد فعله ممكن ب VB لكن بإستخداف API فقط و من دون DLL
للأسف ليس لدي VB لتجربته لكني متأكد
ممكن سورس كود اخر dll ارفقته واسف على العبارة السابقة ومعلش انا مش لقيه ما تقوليش انظر فوق
{ربى زدنى علما}
و من الربط فوق
type TSections = array [0..0] of TImageSectionHeader; function GetAlignedSize(Size: dword; Alignment: dword): dword; begin if ((Size mod Alignment) = 0) then Result := Size; else Result := ((Size div Alignment) + 1) * Alignment; end; function ImageSize(Image: pointer): dword; var Alignment: dword; ImageNtHeaders: PImageNtHeaders; PSections: ^TSections; SectionLoop: dword; begin ImageNtHeaders := pointer(dword(dword(Image)) + dword(PImageDosHeader(Image)._lfanew)); Alignment := ImageNtHeaders.OptionalHeader.SectionAlignment; if ((ImageNtHeaders.OptionalHeader.SizeOfHeaders mod Alignment) = 0) then begin Result := ImageNtHeaders.OptionalHeader.SizeOfHeaders; end else begin Result := ((ImageNtHeaders.OptionalHeader.SizeOfHeaders div Alignment) + 1) * Alignment; end; PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader); for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do begin if PSections[SectionLoop].Misc.VirtualSize <> 0 then begin if ((PSections[SectionLoop].Misc.VirtualSize mod Alignment) = 0) then begin Result := Result + PSections[SectionLoop].Misc.VirtualSize; end else begin Result := Result + (((PSections[SectionLoop].Misc.VirtualSize div Alignment) + 1) * Alignment); end; end; end; end; procedure CreateProcessEx(FileMemory: pointer); var BaseAddress, Bytes, HeaderSize, InjectSize, SectionLoop, SectionSize: dword; Context: TContext; FileData: pointer; ImageNtHeaders: PImageNtHeaders; InjectMemory: pointer; ProcInfo: TProcessInformation; PSections: ^TSections; StartInfo: TStartupInfo; begin ImageNtHeaders := pointer(dword(dword(FileMemory)) + dword(PImageDosHeader(FileMemory)._lfanew)); InjectSize := ImageSize(FileMemory); GetMem(InjectMemory, InjectSize); try FileData := InjectMemory; HeaderSize := ImageNtHeaders.OptionalHeader.SizeOfHeaders; PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader); for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do begin if PSections[SectionLoop].PointerToRawData < HeaderSize then HeaderSize := PSections[SectionLoop].PointerToRawData; end; CopyMemory(FileData, FileMemory, HeaderSize); FileData := pointer(dword(FileData) + GetAlignedSize(ImageNtHeaders.OptionalHeader.SizeOfHeaders, ImageNtHeaders.OptionalHeader.SectionAlignment)); for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do begin if PSections[SectionLoop].SizeOfRawData > 0 then begin SectionSize := PSections[SectionLoop].SizeOfRawData; if SectionSize > PSections[SectionLoop].Misc.VirtualSize then SectionSize := PSections[SectionLoop].Misc.VirtualSize; CopyMemory(FileData, pointer(dword(FileMemory) + PSections[SectionLoop].PointerToRawData), SectionSize); FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment)); end else begin if PSections[SectionLoop].Misc.VirtualSize <> 0 then FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment)); end; end; ZeroMemory(@StartInfo, SizeOf(StartupInfo)); ZeroMemory(@Context, SizeOf(TContext)); CreateProcess(nil, pchar(ParamStr(0)), nil, nil, False, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo); Context.ContextFlags := CONTEXT_FULL; GetThreadContext(ProcInfo.hThread, Context); ReadProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @BaseAddress, 4, Bytes); VirtualAllocEx(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectSize, MEM_RESERVE or MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectMemory, InjectSize, Bytes); WriteProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @ImageNtHeaders.OptionalHeader.ImageBase, 4, Bytes); Context.Eax := ImageNtHeaders.OptionalHeader.ImageBase + ImageNtHeaders.OptionalHeader.AddressOfEntryPoint; SetThreadContext(ProcInfo.hThread, Context); ResumeThread(ProcInfo.hThread); finally FreeMemory(InjectMemory); end; end;
شكرا واضح انه ناقص حاجة علشان كدة مكتوب فى المنتدى وليس فى ملف دلفى ومرفق على كل حال شكرا شكرا شكرا شكرا على المجهود الكبير اوى ده :)
{ربى زدنى علما}
ليس لي الكود بالعمل
هذا الكود طرحته في منتدى أجنبي
و هو من نفس الرابط السابق
ينقصه الجزء الذي يجعله DLL
جرب الملفات الأخري و سيكون كامل
بصراحة انا معجب بيك كمبرمج لان الdll بتاعك كتير صغير يا استاز بس انا عندى استفسار ولو هو محرج لى شوية
فى المثال exe2 انا شايف فيل اسمه pro.inc ما هذا ؟؟؟؟؟؟؟؟؟؟
{ربى زدنى علما}
Pro.inc هو البرنامج المراد دمجه داخل الملف التنفيذي
Inc= Include و قد و ضعته في Array
كنت أعمل كثيرا بهذه الطريقة
ِConst Delta:String='Delta';
لكن بورلند حذفت هذا...لذا أستعمل Delphi5
ملف DLL صغير لأنه مضغوط
أخي JuStNiCK صحح توقيعك: ربى زدني علما
تم تعديل هذه المشاركة بواسطة DeltaAziz في 8 سبتمبر 2005 في 11:10
وهو مضغوط بايه معلش اصله صغير اوى اسمح لى ان اسال على فكرة انا بقالى كام يوم بحاول ان اعمل Function تقرأ ملف وترجعه ك array of byte ولكن واضح انى لا اذال تحت المستوى
شكرا لتنبيهك والله اللغة العربية لا اجيد الكتابة بها على الرغم انى مصرى و عايش فى مصر بس بدايتى فى التعليم لم تكن موفقة وهذا تحت بند (يرزق الله العلم لمن يشاء)
{ربى زدنى علما}
هذا الموضوع مغلق.