반응형 분류 전체보기304 프로세스 리스트 얻기 -프로세스 리스트를 얻어와 프로세스 리스트를 구조체에 저장한다. -PLIST : 프로세스 경로, PID 값을 가지는 간단한 이중 연결리스트 구조체 -DeleteProcessList : 프로세스 리스트를 제거한다. -GetProcessList_TI : TlHelp32를 이용한 프로세스 리스트 획득 함수 (히든 프로세스 탐지 불가능) -GetProcessList_BF : Psapi를 이용한 프로세스 리스트 획득 함수 (Brute Force식 PID 탐색을 통한 히득 프로세스 탐지 가능) #include #include #include #define BUFSIZE 512 /** 프로세스 리스트 저장 구조체 **/ struct _PLIST{ char path[BUFSIZE]; int pid; struct _PL.. 2011. 7. 4. 프로세스 제거하기 -인자로 전달된 PID를 가지는 프로세스를 종료한다. #include int KillProcess(int pid){ HANDLE hProc; hProc=OpenProcess(PROCESS_TERMINATE,FALSE,pid); if(!hProc){ return GetLastError(); } TerminateProcess(hProc,0); CloseHandle(hProc); return 0; } 2011. 7. 4. 프로세스 생성하기 -인자로 전달된 파일을 실행시킨다. #include void createPS(char* path){ STARTUPINFO si; PROCESS_INFORMATION pi; int state=0; si.cb=sizeof(STARTUPINFO); si.lpReserved=NULL; si.lpReserved2=NULL; si.cbReserved2=NULL; si.lpDesktop=NULL; si.lpTitle=NULL; si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; si.dwX=0; si.dwY=0; si.dwFillAttribute=0; si.wShowWindow=SW_HIDE; state=CreateProcess(NULL,path,NULL,NULL,TRUE.. 2011. 7. 4. 레지스트리 삭제하기 -RegDeleteValue로 레지스트리 값 제거가 가능하고 RegDeleteKey로 레지스트리 키 제거가 가능하다. #include int main(){ HKEY hkey; int result=0; RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&hkey); //레지스트리 값 삭제 if(RegDeleteValue(hkey,"StartUPProgram") == ERROR_SUCCESS){ result++; } //레지스트리 키 삭제 if(RegDeleteKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\SafeBoot\\Minimal\\SVCWI.. 2011. 7. 4. 레지스트리 값 출력하기 -인자로 전달된 레지스트리 키의 하위 키와 값들을 출력한다. ex:)PrintReg(HKEY_LOCAL_MACHINE,"\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"); //HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 하위키와 값들을 출력한다. #include #include #define MAX_KEY_SIZE 512 #define MAX_VALUE_SIZE 512 BOOL PrintReg(HKEY root,char* key){ HKEY hkey; TCHAR key[MAX_KEY_SIZE]=""; TCHAR value[MAX_VALUE_SIZE]=""; DWORD keysize=MAX.. 2011. 7. 4. 윈도우 서비스 제거하기 -인자로 전달된 서비스명의 윈도우 서비스를 제거한다. #include #define BUFSIZE 512 void RemoveService(char* sc_name){ SC_HANDLE hManager; SC_HANDLE hService; SERVICE_STATUS sStat; char path[BUFSIZE]; hManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); hService=OpenService(hManager,sc_name,SERVICE_ALL_ACCESS); if(hService){ //서비스 실행 중지 ControlService(hService,SERVICE_CONTROL_STOP,&sStat); while(QueryServiceStatus(h.. 2011. 7. 4. 파일 탐색하기 -인자로 전달된 디렉토리 경로로부터 파일을 탐색한다. ex:)SearchFile("C:\\*.*"); //C드라이브의 모든 파일을 탐색한다. #include #include #include #define BUFSIZE 512 void SearchFile(char* pPath){ struct _finddatai64_t c_file; intptr_t hFile; char dirPath[BUFSIZE]; char tempPath[BUFSIZE]; int i; //디렉토리 경로명만 추출하는 작업(현재 경로명에서 *.* 제거) strncpy(dirPath,pPath,BUFSIZE-1); i=strlen(dirPath)-4; dirPath[i]=0; //파일 탐색 시작 hFile=_findfirsti64(pPath.. 2011. 7. 4. 호스트 IP 주소 얻기 -인자로 전달한 문자열 포인터에 호스트 IP 주소를 저장한다. #include #include void GetHostIP(char* ip){ WORD wVersionRequested; WSADATA wsaData; char name[255]; PHOSTENT hostinfo; wVersionRequested = MAKEWORD(2,0); if(WSAStartup(wVersionRequested,&wsaData) == 0){ if(gethostname(name,sizeof(name)) ==0){ if((hostinfo = gethostbyname(name)) != NULL){ strcpy(ip,inet_ntoa(*(struct in_addr*)*hostinfo->h_addr_list)); } } } WSA.. 2011. 7. 4. 파일 다운로드 하기 -인자로 전달받은 URL로부터 파일을 다운로드 받습니다. ex:)GetFile("http://localhost/file.exe","c:\\file.exe"); //http://localhost/file.exe 에서 파일을 다운받아 c:\file.exe에 저장 #include #include BOOL GetFile(char* url,char* dstPath){ HRESULT hr; hr=URLDownloadToFile(NULL,url,dstPath,0,NULL); if(hr == S_OK){ return TRUE; } return FALSE; } 2011. 7. 4. 시스템 드라이브 목록 얻기 -현재 시스템의 드라이브 목록을 얻습니다. #include #include int main(){ int cnt; int i; int drvType; char drvRoot[104]; char path[7]="A:/*.*"; //드라이브 목록을 불러옴 cnt=GetLogicalDriveStrings(104,drvRoot); for(i=0;i 2011. 7. 4. 운영체제 정보 얻기 -현재 실행중인 운영체제의 정보를 얻습니다. #include #include void printOSInfo(){ OSVERSIONINFO info; info.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); GetVersionEx(&info); printf("Major : %d\n",info.dwMajorVersion); printf("Minor : %d\n",info.dwMinorVersion); printf("ServicePack : %s\n",info.szCSDVersion); } 2011. 7. 4. 콘솔 텍스트 출력하기 -콘솔의 원하는 위치에 텍스트를 출력합니다. ex:) printText("Hello World!!",3,DEFAULT,RIGHT); //오른쪽 정렬로 우측 3칸을 비우고 현재 라인에 문자열 출력 #include #include //텍스트 출력 정렬 #define LEFT -1 #define CENTER 0 #define RIGHT 1 //기본 좌표 #define DEFAULT -1 void printText(char* buffer,int x,int y,int align){ COORD cr; CONSOLE_SCREEN_BUFFER_INFO info; int width; //콘솔 너비 int height; //콘솔 높이 GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPU.. 2011. 7. 4. 콘솔 창 숨기기 -현재 실행중인 콘솔 창을 보이지 않게 숨긴다. #include #define BUFSIZE 512 int main(){ HWND hwnd; char title[BUFSIZE]="My Title"; SetConsoleTitle(title); //타이틀 설정 hwnd=FindWindow(NULL,title); //타이틀에 해당하는 윈도우 핸들 얻기 ShowWindow(hwnd,SW_HIDE); //숨김 옵션 설정 return 0; } 2011. 7. 4. Win32.Backdoor.Worm.IRCBot.23552 [2011/06/10 Version 1.1] -실행 속도 개선 -인터페이스 개선 -실행 결과 출력 [2011/06/09 Version 1.0] -로컬 디스크,이동식 디스크,램 디스크 등에 남아있는 IRCBot 파일 검색 및 제거 -히든 프로세스로 구동중인 IRCBot 프로세스 제거 -관련 레지스트리 제거 -관련 서비스 제거 2011. 6. 10. [상세]Win32.Backdoor.Worm.IRCBot.23552 ※잘못된 내용은 지적해주시면 감사하겠습니다. PDF 파일 : 악성코드 분석 보고서 7z 파일 : 악성코드 샘플 (암호 : sample) ※이 악성코드는 분석 및 학습용으로 공유하는 것이기 때문에 악용을 금합니다!! 2011. 5. 10. 파일 관련 API GetCurrentDirectory -현재 실행중인 파일의 경로를 리턴한다. GetModuleFileName -현재 실행중인 파일의 경로와 파일명을 리턴한다.(2번째 인자 이용) SetFilePointer(hfile,IDistanceToMove,IDistanceToMoveHigh,dwMoveMethod) -파일 포인터의 위치를 설정한다. ▶hfile : 파일 핸들러 ▶IDistanceToMove : 주소 지정 ▶IDistanceToMoveHigh : 64bit 주소 지정에 사용 ▶dwMoveMethod : 움직일 방향 (시작 지점) -FILE_BEGIN : 파일 시작 지점 (0) -FILE_CURRENT : 현재 포인터 위치 (1) -FILE_END : 파일 마지막 지점 (2) ReadFile(hFile.. 2011. 5. 10. 2011.02.19 메모 http://ha.ckers.org/xss.html 2011. 2. 19. 2011.01.05 간략 메모 WebZIP : 웹사이트 긁어오는 프로그램 인터넷 연결이 불가한 환경에서 어쩔 수 없이 긁어와야하니 ㅇㅅ ㅇ 가끔 애용할 예정 2011. 1. 5. 세그먼테이션 (Segmentation) 코드가 있는 메모리 영역과 데이터가 있는 메모리 영역을 혼합하여 사용하면 일반 데이터를 인스트럭션 등으로 해석해버리는등의 문제가 발생할 소지가 다분하다. 따라서 코드 영역, 데이터 영역등을 구분하여 사용하는데 이것을 세그먼테이션이라고 한다. 페이징과는 달리 한 구획의 크기가 일정하지 않고 단순히 크기대로 자르는 대신 사용 용도에 따라 나누어지기 때문에 프로그래머는 세그먼트 레지스터만 설정하면 절대 주소 체계로 프로그래밍이 가능하고 사용용도 또한 논리적으로 제약이 가능해 메모리 액세스에 대한 차등 권한을 줄 수 있다. 실제로는 세그먼테이션과 페이징의 장점을 결합하여 사용된다. CPU가 생성한 논리주소는 세그먼트 레지스터(16bit)와 오프셋(32bit)으로 구성되고 세그먼트 레지스터의 인덱스를 사용하여 세.. 2010. 12. 28. 페이징 (Paging) 공간구역성 -프로세스가 특정메모리 위치에 접근을 하면 그 주변 메모리에 접근할 확률이 높음 시간구역성 -최근 액세스한 메모리는 다시 액세스 될 확률이 높음 문맥 교환이 일어날 때 프로세스 전체를 스와핑 하지 않고 액세스가 발생한 일정한 작은 영역에 한해서 스와핑한다. 이렇게 페이징을 사용하면 잦은 스와핑으로 인한 처리 지연 문제도 해결되고 한 영역의 크기를 일정하게 (일반적으로 4kb) 나누어 사용하면 외부 단편화가 발생하지 않는 대신 내부단편화가 발생할 수 있는데 마지막 한 페이지 등에 매우 한정적으로 발생하기때문에 크게 문제되지 않는다. 나누어진 실제 메모리 구획 : 프레임 나누어진 프로세스 구획 : 페이지 하지만 페이지가 메모리에 로드된 순서대로 프레임에 배치되면 코드가 뒤죽박죽이 되고 프로세스의 .. 2010. 12. 28. 이전 1 ··· 6 7 8 9 10 11 12 ··· 16 다음 반응형