Войти

Показать полную графическую версию : Получение прав SYSTEM в Windows 7


mrcnn
20-11-2014, 16:12
Написал программу

Как сделать чтобы у процессов, показывалась количество используемой памяти?

То есть как при открытии процесса функцией OpenProcess открыть его с правами доступа SYSTEM ?
h = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, p[i]);

http://s019.radikal.ru/i636/1411/e6/08344da01ed7.jpg


#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#include <Psapi.h>
#include <Sddl.h>
#include <AccCtrl.h>
#include <Aclapi.h>

#pragma comment (lib, "wsock32.lib")
#pragma comment (lib, "Kernel32.lib")
#pragma comment (lib, "Psapi.lib")
#pragma comment (lib, "user32.lib")
#pragma comment (lib, "Gdi32.lib")
#pragma comment(lib, "advapi32.lib")



BOOL CALLBACK e2(HWND hwnd, LPARAM l)
{
char str[1024];
GetWindowText(hwnd, str, 1024);
printf("child: %x %s\n", hwnd, str);

return 1;
}



BOOL CALLBACK e(HWND hwnd, LPARAM l)
{
char str[1024];
GetWindowText(hwnd, str, 1024);
printf("main: %x %s\n", hwnd, str);
EnumChildWindows(hwnd, (WNDENUMPROC) &e2, 0);
return 1;
}


int main(int argc, char* argv[])
{
DWORD b;
DWORD p[1024];
int i;
int r;
HANDLE h;
HMODULE m[1024];
DWORD b2;
int j;
char str[1024];
PROCESS_MEMORY_COUNTERS pm;
HWND hw;
HDC hdc;
SIZE x;
WIN32_FIND_DATA wf;
HANDLE hl;
HDC hdc2;
STARTUPINFO si;
PROCESS_INFORMATION pf;
int i1,i2,i3,i4;
SECURITY_ATTRIBUTES sa1;
SECURITY_ATTRIBUTES sa2;
char str2[1024];
char str3[1024];
char str4[1024];
SECURITY_INFORMATION sinf;
PSID ps1;
PSID ps2;
PACL pa1;
PACL pa2;
PSECURITY_DESCRIPTOR sd;


printf("error:%x %d\n", GetLastError(), GetLastError());
hl = FindFirstFile("*\0", &wf);
printf("%s\n", wf.cFileName);
while(FindNextFile(hl, &wf) )
printf("%s\n", wf.cFileName);
hw = GetConsoleWindow();
hdc = GetDC(hw);
hdc2 = GetDC(NULL);
for(i1 = 30, i3 = 600; i1< 130; i1++, i3++)
for(i2 = 30, i4 = 600; i2< 130; i2++, i4++)
SetPixel(hdc2, i3, i4, GetPixel(hdc2, i1, i2));
SetBkColor(hdc, RGB(0, 255, 0));
ScaleWindowExtEx(hdc, 5, 1, 5, 1, &x);
ReleaseDC(hw, hdc);
ReleaseDC(0, hdc2);
printf("%d %d\n", x.cx, x.cy);
SetConsoleTitle("_\0");
EnumProcesses(p, sizeof(p), &b);
r = b / sizeof(DWORD);
printf("r:%d\n", r);

for(i = 0;i < r;i++)
{
printf("Open: %d ", p[i]);
h = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, p[i]);
GetSecurityInfo(h, SE_UNKNOWN_OBJECT_TYPE, sinf, &ps1, &ps2, &pa1 ,&pa2, &sd);
ConvertSidToStringSid(&ps1, (LPSTR * ) &str2);
printf("%s\n", str2);
ZeroMemory(&pm, sizeof(pm));
GetProcessMemoryInfo(h, &pm, sizeof(pm) );
printf("\n");
printf("PageFaultCount:%x %d\n", pm.PageFaultCount, pm.PageFaultCount );
printf("PeakWorkingSetSize: %x %d\n", pm.PeakWorkingSetSize, pm.PeakWorkingSetSize / 1024);
printf("WorkingSetSize: %x %d\n", pm.WorkingSetSize, pm.WorkingSetSize / 1024);
printf("QuotaPeakPagedPoolUsage: %x %d\n", pm.QuotaPeakPagedPoolUsage, pm.QuotaPeakPagedPoolUsage / 1024);
printf("QuotaPagedPoolUsage: %x %d\n", pm.QuotaPagedPoolUsage, pm.QuotaPagedPoolUsage / 1024);
printf("QuotaPeakNonPagedPoolUsage: %x %d\n", pm.QuotaPeakNonPagedPoolUsage, pm.QuotaPeakNonPagedPoolUsage / 1024);
printf("QuotaNonPagedPoolUsage: %x %d\n", pm.QuotaNonPagedPoolUsage, pm.QuotaNonPagedPoolUsage / 1024);
printf("PagefileUsage: %x %d\n", pm.PagefileUsage, pm.PagefileUsage / 1024);
printf("PeakPagefileUsage: %x %d\n", pm.PeakPagefileUsage, pm.PeakPagefileUsage / 1024);
EnumProcessModules(h, m, sizeof(m), &b2);
for(j = 0;j < ( sizeof(b2) /sizeof(HMODULE) ) ;j++)
{
GetModuleFileNameEx(h, m[j], str, 1024);
printf("%s\n", str);
}
CloseHandle(h);
printf("\n");
}
EnumWindows( (WNDENUMPROC) &e, 0);
ZeroMemory(&si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pf, sizeof(pf) );
ZeroMemory(&sa1, sizeof(sa1) );
ZeroMemory(&sa2, sizeof(sa2) );
sa1.nLength = sizeof(sa1);
sa1.bInheritHandle = 0;
sa2.nLength = sizeof(sa2);
sa2.bInheritHandle = 0;
if ( ! CreateProcess(0,argv[0],&sa1,&sa2, 0, 0, 0,0, &si, &pf) )
{
printf("error:%x %d\n", GetLastError(), GetLastError());
}
else
{
CloseHandle(pf.hProcess);
CloseHandle(pf.hThread);
}


return 0;
}

deviance
20-11-2014, 23:21
mrcnn, права system можно получить у PsExec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx)
Using PsExec
-s Run the remote process in the System account.

Nordek
21-11-2014, 01:30
mrcnn, Прокрутите колёсико мыши на себя - для того, чтоб внизу страницы увидеть колонку "Похожие темы": где далее увидите одну (http://i1.imageban.ru/out/2014/11/21/4a89cc02ceee7723d42025da2e7e06d4.png) из похожих тем, пример (http://forum.oszone.net/thread-267860.html), в теме так же имеются ещё ссылки на темы. Всё это говорит о том, что поиск работает.




© OSzone.net 2001-2012