PDA

View Full Version : سوال: باز کردن پروسه با PROCESS_ALL_ACCESS



B-Vedadian
چهارشنبه 18 اردیبهشت 1387, 11:11 صبح
سلام،

من یک برنامه دارم که براش SeDebugPrivilege رو هم قرار میدم منتها نمیتونه به همه پروسه ها دسترسی کامل داشته باشه. چه کار دیگه ای باید بکنم؟

Inprise
چهارشنبه 18 اردیبهشت 1387, 15:50 عصر
"نميتونم" و "همه پروسه" و "دسترسي كامل" رو بايد توضيح بدي .

B-Vedadian
چهارشنبه 18 اردیبهشت 1387, 17:46 عصر
راستش براي نوشتن يه دامپر از حافظه که بتونه ناحيه هاي حافظه که به روشهايي سطح کاربر مثل استفاده از VirtualProtect محافظت شدند، رو هم بخونه و علاوه بر اون بشه يک برنامه در حال اجرا رو موقتا متوقف (ترجمه Pause) کرد و از فضاي حافظه اش دامپ گرفت، اول با استفاده از AdjustTokenPrivilege مجوز ديباگ به برنام خودم ميدم. اين بخش دچار اشکال نميشه.

بعد اون وقتي ميخوام پروسه نرم افزار ديگه اي که توسط Execryptor محافظت شده رو با دسترسي کامل (ترجمه PROCESS_ALL_ACCESS) بازش کنم، مقدار صفر رو به عنوان هندل پروسه بر ميگردونه.

دوباره پست اولم رو خوندم...:خجالت:

B-Vedadian
شنبه 21 اردیبهشت 1387, 08:49 صبح
یک عنایتی بکنید، ممنون میشم.

Inprise
دوشنبه 23 اردیبهشت 1387, 00:18 صبح
واقعيت اينه كن من نميفهمم چي ميگي . اگر ممكنه كدت رو به همراه برنامه اي كه ميخواي دامپش كني ضميمه كن يا توضيح دقيقتري رو بنويس

B-Vedadian
سه شنبه 24 اردیبهشت 1387, 11:49 صبح
سلام

تو 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 هم برنامه دامپر من تو شرکته. دامپر رو ميتونستم دوباره بنويسم ولي باز هم برنامه محافظت شده در اختيار نبود)

B-Vedadian
شنبه 28 اردیبهشت 1387, 11:20 صبح
هر فایلی که با ExeCryptor محافظت شده باشه رو با این امتحان کنید.
نخندید که اسمش Advancedه!

خود ExeCryptor هم قابل تسته.

B-Vedadian
دوشنبه 30 اردیبهشت 1387, 12:38 عصر
یادم رفت آدرس ExeCryptor رو بدم که تو http://www.strongbit.com (http://www.strongbit.com/) هستش. دموی ExeCryptor هم به این روش با PROCESS_ALL_ACCESS باز نمیشه.