OpenJudgeSystem icon indicating copy to clipboard operation
OpenJudgeSystem copied to clipboard

Can I kill the judge service?

Open zhanhb opened this issue 6 years ago • 11 comments

#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
int main() {
    HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 pe = {0};
    pe.dwSize = sizeof (PROCESSENTRY32);
    DWORD pid = GetCurrentProcessId();
    if (Process32First(h, &pe)) {
        do {
            if (pe.th32ProcessID == pid) {
                printf("PID: %i; PPID: %i\n", pid, pe.th32ParentProcessID);
                HANDLE h = OpenProcess(PROCESS_TERMINATE, 0, pe.th32ParentProcessID);
                if (h) {
                    TerminateProcess(h, 0);
                    CloseHandle(h);
                }
            }
        } while (Process32Next(h, &pe));
    }
    CloseHandle(h);
}

zhanhb avatar Jan 02 '18 14:01 zhanhb

You can try :))

NikolayIT avatar Jan 02 '18 15:01 NikolayIT

I'm not sure if I succeed to do it. But I only see This submission is being processed at the moment... Please wait.

zhanhb avatar Jan 02 '18 15:01 zhanhb

It seems I succeed to kill the judge client. http://bgcoder.com/Submissions

zhanhb avatar Jan 03 '18 15:01 zhanhb

Good job! Can you provide us with a fix? :)

NikolayIT avatar Jan 03 '18 16:01 NikolayIT

Not yet, I'm trying to find a solution fix this too.

zhanhb avatar Jan 03 '18 16:01 zhanhb

I found one solution now.

ScopedHandle token;
CreateRestrictedToken(USER_LIMITED, INTEGRITY_LEVEL_LOW, PRIMARY, true, &token);
STARTUPINFO sa = {sizeof(sa)};
sa.lpDesktop = TEXT("Winsta0\\default"); // this line is optional if you are not running in windows service
CreateProcessAsUser(token.Get(), lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, &sa, lpProcessInformation);
// job

https://chromium.googlesource.com/chromium/src.git/+/66.0.3329.3/sandbox/win/src/restricted_token_utils.cc#54

zhanhb avatar Jan 23 '18 15:01 zhanhb

Without setting lpDesktop of startup info, you will get incorrect when running java in windows service.

zhanhb avatar Jan 23 '18 15:01 zhanhb

What changes do you suggest here: https://github.com/NikolayIT/OpenJudgeSystem/blob/38fbf8de04954514ab9f45549df3d002363b3392/Open%20Judge%20System/Workers/OJS.Workers.Executors/Process/RestrictedProcess.cs#L351

NikolayIT avatar Jan 23 '18 15:01 NikolayIT

if (!NativeMethods.CreateRestrictedToken(
        processToken,
        SANDBOX_INERT | DISABLE_MAX_PRIVILEGE,
        ?, // Disable SID
        ?, // all sids in the token except Users("S-1-5-32-545"), Everyone("S-1-1-0"), Interactive("S-1-5-4")
        0, // Delete privilege
        null, // these two are ignored if DISABLE_MAX_PRIVILEGE is specified
        4, // Restricted SID
        ?, // Users, Everyone, restrict code("S-1-5-12"), login sid
        out restrictedToken))

https://github.com/NikolayIT/OpenJudgeSystem/blob/38fbf8de04954514ab9f45549df3d002363b3392/Open%20Judge%20System/Workers/OJS.Workers.Executors/Process/RestrictedProcess.cs#L365-L374

zhanhb avatar Jan 23 '18 16:01 zhanhb

Hello, I think simple System.Diagnostics.Process.GetCurrentProcess().Kill(); in C# could kill Judje,but i am good man and i will not try this. (but what you will do if i succses?)

KonstantinBobrovski avatar Oct 28 '19 18:10 KonstantinBobrovski

You can not allow Process.Kill method it maybe will help.And this is working.

KonstantinBobrovski avatar Nov 01 '19 20:11 KonstantinBobrovski