سلام
تو MSDN ديدم که براي اينکه بشه 1-يک پروسه در حال اجرا رو Pause کرد، 2-نوع محافظت بخشهاي مختلف حافظه مجازي پروسه رو به دلخواه از حالت محافظت شده در آورد، بايد پروسه ما مجوز Debug داشته باشه. بري همين اول يک روتين براي فعال کردن اين مجوز نوشتم
function EnableDebugPrivilege(Enable: Boolean): Boolean;
var
TokenPrivileges: TTokenPrivileges;
hToken: THandle;
luidDebugPrivilege: Int64;
ReturnLength: Cardinal;
begin
Result := True;
Result := Result and LookupPrivilegeValue(nil, 'SeDebugPrivilege', luidDebugPrivilege);
if not Result then
Exit;
Result := Result and OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);
if not Result then
Exit;
TokenPrivileges.PrivilegeCount := 1;
TokenPrivileges.Privileges[0].Luid := luidDebugPrivilege;
if Enable then
TokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
TokenPrivileges.Privileges[0].Attributes := 0;
Result := Result and AdjustTokenPrivileges(hToken, False, TokenPrivileges, sizeof(TTokenPrivileges), nil, ReturnLength);
Result := Result and (GetLastError() <> ERROR_NOT_ALL_ASSIGNED);
CloseHandle(hToken);
end;
بعدش با استفاده از اين روتين، مجوز Debug به برنامه خودم (دامپر) دادم. حالا مي خوام يک برنامه که با ExeCryptor 2.4.1 محافظتش کردم رو با PROCESS_ALL_ACCESS بازش کنم.
hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID)
مقدار صفر به عنوان hProcess بر مي گردونه.
فردا برنامه خودم و برنامه محافظت شده رو ضميمه مي کنم.
(مي خواستم نمونه برنامه محافظت شده و برنامه خودم رو بفرستم ولي الآن تو مرخصيم و هم ExeCryptor هم برنامه دامپر من تو شرکته. دامپر رو ميتونستم دوباره بنويسم ولي باز هم برنامه محافظت شده در اختيار نبود)