27-04-2013, 05:04 PM
السلام عليكم ورحمة الله وبركاتة
لدي مشكلة في عملية الحقن ... عندما احقن DLL في عملية تعمل بالذاكرة
الحالة ... :
كنت اعمل على XP ... وكنت استعمل دالة الحقن(InjectDLL كتبتها بالاسفل) وكان كل شيء سليم
لكن بعد إنتقالي لـ Win7 ... قمت بتجربة الدالة وعند الحقن يصبح البرنامج الحاقن والعملية المحقونة
كلاهم في حالة عدم إستجابة ... بعد ان قمت بتنقيح البرنامج الحاقن وجدته يتوقف على دالة من دوال API
وهي الدالة WaitForSingleObject وبعد ان بحثت بمشاكل هذه الدالة وجدت
صفحة من صفحات microsoft والتي اشارات إلى نفس الخطاء الذي واجهني ... وذكرت السبب وذكرت كذلك الحل ... حيث كان بإستعمال الدالة
الاخرى MsgWaitForMultipleObjects ...
الدالة :
أريـد احد الاخوة الذي يستطيع ترجمة C++ إلى Delphi ان يقوم بترجمة الحل في صفحة ماكروسوفت
وإن كان هناك طريقة افضل من التي استعملتها او بدون استعمال دوال API فاافيدوني بها جزاكم الله خير
وشكراً لحسن القراءة
لدي مشكلة في عملية الحقن ... عندما احقن DLL في عملية تعمل بالذاكرة
الحالة ... :
كنت اعمل على XP ... وكنت استعمل دالة الحقن(InjectDLL كتبتها بالاسفل) وكان كل شيء سليم

لكن بعد إنتقالي لـ Win7 ... قمت بتجربة الدالة وعند الحقن يصبح البرنامج الحاقن والعملية المحقونة
كلاهم في حالة عدم إستجابة ... بعد ان قمت بتنقيح البرنامج الحاقن وجدته يتوقف على دالة من دوال API
وهي الدالة WaitForSingleObject وبعد ان بحثت بمشاكل هذه الدالة وجدت
صفحة من صفحات microsoft والتي اشارات إلى نفس الخطاء الذي واجهني ... وذكرت السبب وذكرت كذلك الحل ... حيث كان بإستعمال الدالة
الاخرى MsgWaitForMultipleObjects ...
الدالة :
PHP كود :
function InjectDLL(dwPID: DWORD; DLLPath: PWideChar): integer;
var
dwThreadID: Cardinal;
hProc, hThread, hKernel: THandle;
BytesToWrite, BytesWritten: SIZE_T;
pRemoteBuffer, pLoadLibrary: Pointer;
begin
hProc := OpenProcess(PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or PROCESS_VM_WRITE or PROCESS_VM_READ, False, dwPID);
if hProc = 0 then
exit(0);
try
BytesToWrite := SizeOf(WideChar)*(Length(DLLPath) + 1);
pRemoteBuffer := VirtualAllocEx(hProc, nil, BytesToWrite, MEM_COMMIT, PAGE_READWRITE);
if pRemoteBuffer = nil then
exit(0);
try
if not WriteProcessMemory(hProc, pRemoteBuffer, DLLPath, BytesToWrite, BytesWritten) then
exit(0);
hKernel := GetModuleHandle('kernel32.dll');
pLoadLibrary := GetProcAddress(hKernel, 'LoadLibraryW');
hThread := CreateRemoteThread(hProc, nil, 0, pLoadLibrary, pRemoteBuffer, 0, dwThreadID);
try
WaitForSingleObject(hThread, INFINITE); // Here I did get the error
finally
CloseHandle(hThread);
end;
finally
VirtualFreeEx(hProc, pRemoteBuffer, 0, MEM_RELEASE);
end;
finally
CloseHandle(hProc);
end;
exit(1);
end;
أريـد احد الاخوة الذي يستطيع ترجمة C++ إلى Delphi ان يقوم بترجمة الحل في صفحة ماكروسوفت
وإن كان هناك طريقة افضل من التي استعملتها او بدون استعمال دوال API فاافيدوني بها جزاكم الله خير

وشكراً لحسن القراءة

