![]() |
|
تغيير بايتات معينة في البرنامج - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : تغيير بايتات معينة في البرنامج (/showthread.php?tid=12180) |
تغيير بايتات معينة في البرنامج - Delphi4Us - 12-01-2023 السلام عليكم ورحمة الله وكيف حالكم جميعا وارجوا ان يكون الجميع بخير اردت ان يقوم برنامجي بتغيير بايتات معينة في جسمه ولكن تظهر رسالة ان الملف مشغول ولا يمكن اجراء العملية اي ما كانت الطريقة لابد وان تكون قد تطرق لها احد ما هنا او هناك او لها مكونات او حلول احترافية مرت بكم وشكرا RE: تغيير بايتات معينة في البرنامج - محمد عبد العزيز - 12-01-2023 وعليكم السلام ورحمة الله وبركاته احد الطرق: ينسخ البرنامج نفسه باسم مخلتلف/مجلد اخر ينفذ النسخة الجديدة وينهي مهامه النسخة الجديدة تقوم بتعديل النسخة الاصلية تنفذ النسخة الجديدة النسخة القديمة وتنهي مهامها RE: تغيير بايتات معينة في البرنامج - larbiparadox - 12-01-2023 وعليكم السلام ورحمة الله وبركاته عند البرمجة صمم برنامجين ، برنامج إسمه Luncher يقوم بتشغيل البرنامج و هو الذي يقوم بالفحص أو التغيير ، والثاني ينفذ من طرف Luncher حيث لا يمكن تنفيذه مباشرة RE: تغيير بايتات معينة في البرنامج - Delphi4Us - 13-01-2023 كود : والثاني ينفذ من طرف Luncher حيث لا يمكن تنفيذه مباشرةهل يوجد ملفات تنفيذية لا تعمل الا عند الطلب على العموم الذكاء الصناعي طلبت منه كود لتغيير بايتات لملف تنفيذي يعمل بالذاكرة فاعطاني هذا الكود ولم افهم منه شئ كود : uses
Windows, SysUtils;
const
PAGE_READWRITE = $04;
PROCESS_ALL_ACCESS = $001F0FFF;
var
hProcess: THandle; // Handle to the process we want to modify.
pBaseAddress: Pointer; // Base address of the executable in memory.
pBuffer: array[0..255] of Byte; // Buffer containing the bytes we want to write.
begin
// Get a handle to the process we want to modify.
hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, GetCurrentProcessId);
// Get the base address of the executable in memory.
pBaseAddress := VirtualAllocEx(hProcess, nil, SizeOf(pBuffer), MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
// Write our buffer of bytes to the executable in memory.
WriteProcessMemory(hProcess, pBaseAddress, @pBuffer[0], SizeOf(pBuffer), nil);
// Free up resources and close handles.
VirtualFreeEx(hProcess, pBaseAddress, 0, MEM_RELEASE); CloseHandle(hProcess); end.فهل فيه شئ ينفع لما نتحدث عنه او شئ اخر كود : // This code will modify the hex values at a specific address in an executable.
// It assumes that the executable is already loaded into memory.
uses Windows; // for the VirtualProtect function
const
// The address of the hex values to be modified:
HexAddress = $12345678;
// The new hex values to be written:
NewHexValues: array[0..3] of Byte = ($01, $02, $03, $04);
var
OldProtection: DWORD; // used by VirtualProtect function
begin
// Change the memory protection at HexAddress so we can write to it:
VirtualProtect(Pointer(HexAddress), 4, PAGE_EXECUTE_READWRITE, @OldProtection);
// Write the new hex values to HexAddress:
Move(NewHexValues[0], Pointer(HexAddress)^, 4);
// Restore the original memory protection at HexAddress:
VirtualProtect(Pointer(HexAddress), 4, OldProtection, @OldProtection);
end.RE: تغيير بايتات معينة في البرنامج - محمد عبد العزيز - 13-01-2023 (13-01-2023, 03:27 AM)Delphi4Us كتب : الذكاء الصناعي طلبت منه كود لتغيير بايتات لملف تنفيذي يعمل بالذاكرة فاعطاني هذا الكود ولم افهم منه شئذلك مثال للتعديل على البرنامج بالذاكرة وليس الملف التنفيذي بالقرص. |