ParsedArgument ValidateArguments(SoNewArgumentParser &argParser, int argc, char **argv) { UIntTypeValidator *inj_validator = new UIntTypeValidator(1, 4); UIntTypeValidator *pid_validator = new UIntTypeValidator(); FilePathValidator *fp_validator = new FilePathValidator(); SetArguments(&argParser, inj_validator, pid_validator, fp_validator); ParsedArgument pa; try { pa = argParser.parse(argc, argv); // check if we're just listing processes first. if (pa.hasArgument("-l")) { PrintProcessList(); exit(0); } if (pa.hasArgument("-h")) { ShowUsage(argParser); exit(0); } if (!pa.hasArgument("-p") && !pa.hasArgument("-n")) ShowError(argParser, L"Error: We require a process name or pid!"); if (!pa.hasArgument("-i")) ShowError(argParser, L"Error: We require an injection method!"); } catch(InvalidArgumentException iae) { String message = StringToWstring(iae.what()); ShowError(argParser, message); } delete inj_validator; delete pid_validator; delete fp_validator; return pa; }
int main() { DWORD aProcess[1024], cbNeeded, cProcesses; unsigned int i; if (!EnumProcesses(aProcess, sizeof(aProcess), &cbNeeded)) { printf("Enumerate Process is failed!!\n"); _exit(0); } cProcesses = cbNeeded / sizeof(DWORD); for (i = 0; i < cProcesses; i++) { if (aProcess[i] != 0) { PrintProcessList(aProcess[i]); } } getchar(); }
void test(void) { std::list<PROCESSENTRY32> lProcess; std::list<MODULEENTRY32> lModules; DWORD dwPid = 0; std::list<MEMORY_BASIC_INFORMATION> lMemBI; std::list<THREADENTRY32> lThreads; std::list<LPCVOID> lAddress; DWORD dwBaseAddress = 0; IMAGE_DOS_HEADER DosHeader; IMAGE_NT_HEADERS NTHeader; lProcess = GetProcessList(); PrintProcessList(lProcess); dwPid = GetPidProcess("notepad++.exe"); PrintPidProcess("notepad++.exe", dwPid); lModules = GetModuleList(dwPid); PrintModulesList(lModules); lMemBI = GetMemoryInformation(dwPid); PrintMemoryInfo(lMemBI); lThreads = GetThreadsList(dwPid); PrintThreadsInfo(lThreads); SuspendAllThread(dwPid); Sleep(1000); ResumeAllThread(dwPid); lAddress = ScanPattern("\x42\x42\x42", 3, dwPid); PrintPatternMatch(lAddress); dwBaseAddress = GetRemoteBaseAddress(dwPid); printf("BaseAddress = %08X\n", dwBaseAddress); DosHeader = GetDosHeader(dwPid); PrintDosHeader(&DosHeader); NTHeader = GetNTHeader(dwPid); PrintNTHeader(&NTHeader); }
int CmdProcessing() { if (!_tcscmp(cmdTokenList[0], _T("exit"))){ return TRUE; } else if (!_tcscmp(cmdTokenList[0], _T("pwd"))) { TCHAR cDIR[MAX_STR_LEN]; GetCurrentDirectory(MAX_STR_LEN, cDIR); _tprintf(_T("%s\n"), cDIR); } else if (!_tcscmp(cmdTokenList[0], _T("cls"))) { _tsystem(_T("cls")); } else if (!_tcscmp(cmdTokenList[0], _T("start"))) { StartProcess(_T("windows")); } else if (!_tcscmp(cmdTokenList[0], _T("list"))) { if (!PrintProcessList()) { return -1; } } else if (!_tcscmp(cmdTokenList[0], _T("cd"))) { ChangeCurrentDirectory(); } else if (!_tcscmp(cmdTokenList[0], _T("kill"))) { if (!KillProcess()) { return -1; } } else if (!_tcscmp(cmdTokenList[0], _T("dir"))) { if (!PrintFileList()) { return -1; } } else if (!_tcscmp(cmdTokenList[0], _T("mkdir"))) { if (!MakeDirectory()) { return -1; } } else if (!_tcscmp(cmdTokenList[0], _T("rmdir"))) { if (!RemoveDirectory()) { return -1; } } else if (!_tcscmp(cmdTokenList[0], _T("del"))) { if (!DeleteFile()) { return -1; } } else if (!_tcscmp (cmdTokenList[0], _T("ren"))) { if (!RenameFile()) { return -1; } } else if (!_tcscmp(cmdTokenList[0], _T("help"))) { _tprintf(_T("pwd\t현재 디렉토리를 보여줍니다.\n")); _tprintf(_T("cls\t화면을 지웁니다.\n")); _tprintf(_T("help\t명령어 목록을 보여줍니다.\n")); _tprintf(_T("exit\t프로그램을 종료합니다.\n")); _tprintf(_T("echo\t문자열을 출력합니다.\n")); _tprintf(_T("start\t프로그램을 실행합니다.\n")); _tprintf(_T("list\t실햄중인 프로세스 목록을 보여줍니다.\n")); _tprintf(_T("kill\t프로세스를 강제로 종료시킵니다. \n")); _tprintf(_T("dir\t현재 디렉토리 하위의 파일 목록을 보여줍니다. \n")); _tprintf(_T("mkdir\t현재 디렉토리 하위에 새 디렉토리를 생성합니다. \n")); _tprintf(_T("rmdir\t현재 디렉토리 하위의 지정한 디렉토리를 삭제합니다. \n")); _tprintf(_T("del\t현재 디렉토리 하위의 지정한 파일을 삭제합니다. \n")); _tprintf(_T("ren\t현재 디렉토리 하위의 지정한 파일 이름을 변경합니다.\n")); _tprintf(_T("cd\t현재 디렉토리를 변경합니다.\n")); _tprintf(_T("history\t지금까지 입력한 명령어 목록을 보여줍니다.\n")); _tprintf(_T("type\t파일의 내용을 화면에 출력합니다.\n")); _tprintf(_T("sort\t입력한 문자열을 정렬하여 출력합니다.(Ctrl+Z로 종료)\n")); _tprintf(_T("!(명령어)\t가장 최근에 수행한 (명령어)를 수행합니다.\n")); _tprintf(_T("!!\t바로 전에 수행한 명령어를 실행합니다.\n")); } else if (!_tcscmp(cmdTokenList[0], _T("echo"))) { EchoString(); } else if (!_tcscmp(cmdTokenList[0], _T("type"))) { TypeTextFile(); } else if (!_tcscmp(cmdTokenList[0], _T("sort"))) { SortString(); } else if (!_tcscmp(cmdTokenList[0], _T("history"))) { PrintHistory(); } else { StartProcess(cmdTokenList[0]); } return 0; }
/* * * Function: SortProcessList * * Purpose: Sorts a given Glist of processess by the giver parameter * * Parameters: * input A pointer to the start of the list and a paramenter * of how its going to be sorted * * output A Glist pointer to the start of the ordered list * */ GList * SortProcessList(GList *processList, enum OPTION param) { GList *orderedList = NULL, *i, *j; process *temp, *tempNext; int elements = 0; for (i = processList; i != NULL; i = i->next) { // Iterates over the linked list temp = i->data; //Choses the criteria to sort int criteria; if (param == 0 ) { criteria = temp->arrival_time; } else if (param == 1) { criteria = temp->cpu_burst; } else if (param == 2) { criteria = temp->priority; } else if (param == 3) { criteria = temp->timeleft; } int added = 0; if (elements>0) { // Is there a element in the new list yet? for (j = orderedList; j != NULL; j = j->next) { // Iterate the ordered list tempNext = j->data; int comparison; if (param == 0 ) { comparison = tempNext->arrival_time; } else if (param == 1) { comparison = tempNext->cpu_burst; } else if (param == 2) { comparison = tempNext->priority; } else if (param == 3) { comparison= tempNext->timeleft; } if ((criteria < comparison) && (added == 0)) { // If your parameter is smaller than the next one, you found your place orderedList = g_list_insert_before(orderedList, j, temp); added = 1; } } if (added == 0) { // If you are the biggest one, add in th end orderedList = g_list_append(orderedList, temp); } } else { // Add first element in the new list orderedList = g_list_append(orderedList, temp); } elements++; } #ifdef DEBUG printf("Unordered list\n"); PrintProcessList(processList); printf("\nordered list by %d\n",param); PrintProcessList(orderedList); printf("\n"); #endif //g_list_free_timeSummation(processList); return orderedList; }