openprocessの保護

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
うーの

openprocessの保護

#1

投稿記事 by うーの » 15年前

何度もすいません。

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が必要なわけですから。。。。
ここからせきゅりてぃれべるを変更したいです。
よろしくお願いします。

“C言語何でも質問掲示板” へ戻る