سلام،
من یک برنامه دارم که براش SeDebugPrivilege رو هم قرار میدم منتها نمیتونه به همه پروسه ها دسترسی کامل داشته باشه. چه کار دیگه ای باید بکنم؟
Printable View
سلام،
من یک برنامه دارم که براش SeDebugPrivilege رو هم قرار میدم منتها نمیتونه به همه پروسه ها دسترسی کامل داشته باشه. چه کار دیگه ای باید بکنم؟
"نميتونم" و "همه پروسه" و "دسترسي كامل" رو بايد توضيح بدي .
راستش براي نوشتن يه دامپر از حافظه که بتونه ناحيه هاي حافظه که به روشهايي سطح کاربر مثل استفاده از VirtualProtect محافظت شدند، رو هم بخونه و علاوه بر اون بشه يک برنامه در حال اجرا رو موقتا متوقف (ترجمه Pause) کرد و از فضاي حافظه اش دامپ گرفت، اول با استفاده از AdjustTokenPrivilege مجوز ديباگ به برنام خودم ميدم. اين بخش دچار اشکال نميشه.
بعد اون وقتي ميخوام پروسه نرم افزار ديگه اي که توسط Execryptor محافظت شده رو با دسترسي کامل (ترجمه PROCESS_ALL_ACCESS) بازش کنم، مقدار صفر رو به عنوان هندل پروسه بر ميگردونه.
دوباره پست اولم رو خوندم...:خجالت:
یک عنایتی بکنید، ممنون میشم.
واقعيت اينه كن من نميفهمم چي ميگي . اگر ممكنه كدت رو به همراه برنامه اي كه ميخواي دامپش كني ضميمه كن يا توضيح دقيقتري رو بنويس
سلام
تو MSDN ديدم که براي اينکه بشه 1-يک پروسه در حال اجرا رو Pause کرد، 2-نوع محافظت بخشهاي مختلف حافظه مجازي پروسه رو به دلخواه از حالت محافظت شده در آورد، بايد پروسه ما مجوز Debug داشته باشه. بري همين اول يک روتين براي فعال کردن اين مجوز نوشتم
function EnableDebugPrivilege(Enable: Boolean): Boolean;بعدش با استفاده از اين روتين، مجوز Debug به برنامه خودم (دامپر) دادم. حالا مي خوام يک برنامه که با ExeCryptor 2.4.1 محافظتش کردم رو با PROCESS_ALL_ACCESS بازش کنم.
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;
hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID)مقدار صفر به عنوان hProcess بر مي گردونه.
فردا برنامه خودم و برنامه محافظت شده رو ضميمه مي کنم.
(مي خواستم نمونه برنامه محافظت شده و برنامه خودم رو بفرستم ولي الآن تو مرخصيم و هم ExeCryptor هم برنامه دامپر من تو شرکته. دامپر رو ميتونستم دوباره بنويسم ولي باز هم برنامه محافظت شده در اختيار نبود)
هر فایلی که با ExeCryptor محافظت شده باشه رو با این امتحان کنید.
نخندید که اسمش Advancedه!
خود ExeCryptor هم قابل تسته.
یادم رفت آدرس ExeCryptor رو بدم که تو http://www.strongbit.com هستش. دموی ExeCryptor هم به این روش با PROCESS_ALL_ACCESS باز نمیشه.