openprocessの保護
Posted: 2010年10月13日(水) 21:46
何度もすいません。
http://eternalwindows.jp/security/acces ... rol13.html
このサイトにある
openorocessの保護についてですが、
おそらくこの部分
void RestartProcess(LPTSTR lpszKey, DWORD dwRemoveAccess)
{
TCHAR szAccountName[256];
TCHAR szModuleName[MAX_PATH];
PACL pDacl;
DWORD dwSize;
EXPLICIT_ACCESS explicitAccess;
SECURITY_ATTRIBUTES securityAttributes;
SECURITY_DESCRIPTOR securityDescriptor;
STARTUPINFO startupInfo;
PROCESS_INFORMATION processInformation;
dwSize = sizeof(szAccountName) / sizeof(TCHAR);
GetUserName(szAccountName, &dwSize);
BuildExplicitAccessWithName(&explicitAccess, szAccountName, PROCESS_ALL_ACCESS & ~dwRemoveAccess, GRANT_ACCESS, 0);
SetEntriesInAcl(1, &explicitAccess, NULL, &pDacl);
InitializeSecurityDescriptor(&securityDescriptor, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&securityDescriptor, TRUE, pDacl, FALSE);
securityAttributes.nLength = sizeof(SECURITY_ATTRIBUTES);
securityAttributes.lpSecurityDescriptor = &securityDescriptor;
securityAttributes.bInheritHandle = FALSE;
GetModuleFileName(NULL, szModuleName, MAX_PATH);
startupInfo.dwFlags = 0;
GetStartupInfo(&startupInfo);
CreateProcess(szModuleName, lpszKey, &securityAttributes, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInformation);
CloseHandle(processInformation.hThread);
CloseHandle(processInformation.hProcess);
}
この部分を変更して、以下のようなものを作りたいです。
========================
1)test.exeが起動してあった場合、そのPIDを調べて、セキュリティの設定でReadProcessMemoryとWriteprocesMemoryを禁止させる
========================
というものです。
test.exeが起動してあった場合、PIDを調べるというのは、前回教えていただきました。
DWORD GetPIDTID(LPCTSTR program, LPDWORD tid)
{
HANDLE hSnapshot;
PROCESSENTRY32 pe;
THREADENTRY32 te;
TCHAR szFileTitle[64];
DWORD pid = 0xFFFFFFFF;
*tid = 0xFFFFFFFF;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD, 0);
if (hSnapshot != INVALID_HANDLE_VALUE)
{
pe.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hSnapshot, &pe))
{
do
{
GetFileTitle(pe.szExeFile, szFileTitle, 64);
if (lstrcmpi(szFileTitle, program) == 0)
{
pid = pe.th32ProcessID;
break;
}
} while(Process32Next(hSnapshot, &pe));
}
if (pid != 0xFFFFFFFF)
{
te.dwSize = sizeof(THREADENTRY32);
if (Thread32First(hSnapshot, &te))
{
do
{
if (te.th32OwnerProcessID == pid)
{
*tid = te.th32ThreadID;
break;
}
} while(Thread32Next(hSnapshot, &te));
}
}
CloseHandle(hSnapshot);
}
return pid;
}
これでPIDを取得できます。
printf("test.exeを起動してください。\n");
for(;;)
{
pid = GetPIDTID(TEXT("test.exe"), &tid);
if (tid != 0xFFFFFFFF)
break;
Sleep(1000);
}
これでPIDを取得しました。
あとは、セキュリティレベルを変更して、メモリの読み込みと書き込みを禁止したいのですが、
どこをいじったらよいかわかりません。
SECURITY_ATTRIBUTES securityAttributes;
SECURITY_DESCRIPTOR securityDescriptor;
このへんでセキュリティの設定をしているなぁ~
ということはわかったのですが、
どこをいじればいいでしょうか・・・・
現在は
test.exeが起動されたらそのPIDを取得することはできました。
openprocessにはPIDが必要なわけですから。。。。
ここからせきゅりてぃれべるを変更したいです。
よろしくお願いします。
http://eternalwindows.jp/security/acces ... rol13.html
このサイトにある
openorocessの保護についてですが、
おそらくこの部分
void RestartProcess(LPTSTR lpszKey, DWORD dwRemoveAccess)
{
TCHAR szAccountName[256];
TCHAR szModuleName[MAX_PATH];
PACL pDacl;
DWORD dwSize;
EXPLICIT_ACCESS explicitAccess;
SECURITY_ATTRIBUTES securityAttributes;
SECURITY_DESCRIPTOR securityDescriptor;
STARTUPINFO startupInfo;
PROCESS_INFORMATION processInformation;
dwSize = sizeof(szAccountName) / sizeof(TCHAR);
GetUserName(szAccountName, &dwSize);
BuildExplicitAccessWithName(&explicitAccess, szAccountName, PROCESS_ALL_ACCESS & ~dwRemoveAccess, GRANT_ACCESS, 0);
SetEntriesInAcl(1, &explicitAccess, NULL, &pDacl);
InitializeSecurityDescriptor(&securityDescriptor, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&securityDescriptor, TRUE, pDacl, FALSE);
securityAttributes.nLength = sizeof(SECURITY_ATTRIBUTES);
securityAttributes.lpSecurityDescriptor = &securityDescriptor;
securityAttributes.bInheritHandle = FALSE;
GetModuleFileName(NULL, szModuleName, MAX_PATH);
startupInfo.dwFlags = 0;
GetStartupInfo(&startupInfo);
CreateProcess(szModuleName, lpszKey, &securityAttributes, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInformation);
CloseHandle(processInformation.hThread);
CloseHandle(processInformation.hProcess);
}
この部分を変更して、以下のようなものを作りたいです。
========================
1)test.exeが起動してあった場合、そのPIDを調べて、セキュリティの設定でReadProcessMemoryとWriteprocesMemoryを禁止させる
========================
というものです。
test.exeが起動してあった場合、PIDを調べるというのは、前回教えていただきました。
DWORD GetPIDTID(LPCTSTR program, LPDWORD tid)
{
HANDLE hSnapshot;
PROCESSENTRY32 pe;
THREADENTRY32 te;
TCHAR szFileTitle[64];
DWORD pid = 0xFFFFFFFF;
*tid = 0xFFFFFFFF;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD, 0);
if (hSnapshot != INVALID_HANDLE_VALUE)
{
pe.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hSnapshot, &pe))
{
do
{
GetFileTitle(pe.szExeFile, szFileTitle, 64);
if (lstrcmpi(szFileTitle, program) == 0)
{
pid = pe.th32ProcessID;
break;
}
} while(Process32Next(hSnapshot, &pe));
}
if (pid != 0xFFFFFFFF)
{
te.dwSize = sizeof(THREADENTRY32);
if (Thread32First(hSnapshot, &te))
{
do
{
if (te.th32OwnerProcessID == pid)
{
*tid = te.th32ThreadID;
break;
}
} while(Thread32Next(hSnapshot, &te));
}
}
CloseHandle(hSnapshot);
}
return pid;
}
これでPIDを取得できます。
printf("test.exeを起動してください。\n");
for(;;)
{
pid = GetPIDTID(TEXT("test.exe"), &tid);
if (tid != 0xFFFFFFFF)
break;
Sleep(1000);
}
これでPIDを取得しました。
あとは、セキュリティレベルを変更して、メモリの読み込みと書き込みを禁止したいのですが、
どこをいじったらよいかわかりません。
SECURITY_ATTRIBUTES securityAttributes;
SECURITY_DESCRIPTOR securityDescriptor;
このへんでセキュリティの設定をしているなぁ~
ということはわかったのですが、
どこをいじればいいでしょうか・・・・
現在は
test.exeが起動されたらそのPIDを取得することはできました。
openprocessにはPIDが必要なわけですから。。。。
ここからせきゅりてぃれべるを変更したいです。
よろしくお願いします。