이제는 고인이 된 Gary mooore..
락블루스 음악의 거장..
고등학교때부터 수도 없이 들은 나의 전설..
그의 인생과 같은 음악을 하고 싶다.
CD 와 CP, RP 란 무엇일까? (0) | 2011.07.24 |
---|---|
채권이란 무엇일까? (0) | 2011.07.24 |
펀드란 무엇인가? ( 용어편 ) (0) | 2011.07.18 |
CD 와 CP, RP 란 무엇일까? (0) | 2011.07.24 |
---|---|
채권이란 무엇일까? (0) | 2011.07.24 |
환매란 무엇일까? (0) | 2011.07.18 |
1. 윈도우 패스워드의 특성
- 기본적으로 윈도우의 패스워드 구조 자체가 취약하다.
- 윈도우 패스워드는 특이하게 패스워드의 길이에 관계없이 8바이트가 하나의 블록을 형성한다.
- 이 중 1바이트는 패스워드 블록에 대한 정보를 담고 있으므로, 실질적으로 패스워드 문자열을 저장하는 것은 7바이트다.
- 따라서 비밀번호가 qwer1234 일 경우 모두 8개의 문자이므로 두 개의 블록을 형성하게 된다.
- 지금까지 발매된 윈도우는 기본적으로 위와 같은 형태이며, 하나의 패스워드 블록은 별도로 운영된다.
- 따라서 하나의 패스워드 블록의 길이인 7 글자를 크래킹하는데 걸리는 노력이면, 아무리 긴 패스워드라도 풀 수 있는 것이다.
- qwer1234 일 경우 qwer123 과 4 로 저장이 되며, qwer123은 쉽게 크랙킹 하기 어렵겠으나, 뒤에 4 는 몇 초도 안되는 사이에 - 크래킹 할 수 있다. 그러므로 사실 상 7개의 글자나 8개의 글자나 패스워드의 강도는 같다고 봐도 무방하다.
- 즉 윈도우에서는 14개 문자 길이의 패스워드를 크래킹 하는 것은 7개의 패스워드를 2개 크래킹 하는 것이다.
하지만 다행히도 이러한 패스워드 강도는 공격자가 SAM 파일을 획득한 경우에만 해당되는 경우며,
원격에서 공격을 시도할 경우에는 윈도우에서도 리눅스처럼 글자수에 따라 강도가 커지게 된다.
SAM 파일을 획득해야만 7글자의 패스워드 블록 단위로 패스워드 크래킹이 가능하기 때문이다.
- 윈도우 패스워드 크래킹을 위한 툴
1. NAT ( NetBIOS Auditing Tool )
- nat -u userlist.txt -p dic.txt "ip주소"
2. pwdump3
pwdump3 "\\아이피주소" sam_file administrator
3. LC4
- GUI 툴이며, import -> import From PWDUMP File 메뉴에서 사용한다.
윈도우의 인증 구조 (0) | 2011.07.18 |
---|---|
파일시스템 : FAT 과 NTFS (0) | 2011.07.18 |
윈도우의 주요 서비스 (0) | 2011.07.18 |
윈도우의 부팅 순서 (0) | 2011.07.16 |
윈도우의 패스워드 구조 (0) | 2011.07.18 |
---|---|
파일시스템 : FAT 과 NTFS (0) | 2011.07.18 |
윈도우의 주요 서비스 (0) | 2011.07.18 |
윈도우의 부팅 순서 (0) | 2011.07.16 |
윈도우의 패스워드 구조 (0) | 2011.07.18 |
---|---|
윈도우의 인증 구조 (0) | 2011.07.18 |
윈도우의 주요 서비스 (0) | 2011.07.18 |
윈도우의 부팅 순서 (0) | 2011.07.16 |
중지하면 안되는 주요 서비스들
1. Network Connections
- 시스템에 관련된 모든 네트워크 및 전화 접속 연결에 대한 서비스를 제공하며, 상태를 표시한다.
이 서비스를 중지 시킬 경우 네크워크에 대한 모든 접속이 불가능해진다.
2. Plug and Play
- 하드웨어에 대한 자동 인식과 설정을 도와주는 서비스이며, 중지시킬 경우 시스템이 불안정해진다.
3. Security Accounts Manager (SAM)
- 인증에 관련된 서비스로 중지시킬 경우 다른 시스템이 해당 시스템에 접근할 수 없게 된다.
4. Windows Management Instrumentation ( WMI )
- 시스템의 관리 정보를 제공하는 서비스다. 응용 프로그램과 서비스가 생성하는 관리 이벤트를 포함하여
응용 프로그램 서비스에 접근 정보를 제공한다. 또한 SNMP 와도 호환된다.
5. Application Management
- 응용 프로그램의 설치, 제거와 같은 서비스를 제공하며, 중지시킬 경우 응용 프로그램을 추가/삭제하지 못한다.
6. Remote Procedure Call ( RPC )
- RPC 에 관련된 서비스를 제공한다. 서비스를 끄면 해당 컴퓨터가 부팅되지 않는다!!
7. Server
- RPC 지원 및 파일, 인쇄 등을 위한 자원 공유를 제공한다.
다음은 선택 사항의 서비스들에 대해 알아보자.
1. COM+ ( an extension to the Component Object Model) Event System
- COM 은 프로그램의 컴포넌트 객체들을 개발하고 지원하기 위한 하부 기반 구조로, COBRA ( Common Object Request Broker Architecture ) 에서 정의된 수준의 기능 제공을 목표로 한다. 마이크로소프트의 OLE 가 사용자가 화면에서 볼 수 있는 복합 문서를 위한 서비스를 제공하는 반면에, COM 은 인터페이스 교섭과 언제쯤 객체가 시스템에서 제거될 수 있는지를 판단하며, 라이센스 및 이벤트 서비스 등을 제공한다. COM+ 는 이러한 COM 구성요소에 이벤트를 자동으로 배포한다. COM + 이벤트는 COM + 프로그래밍 모델을 확장하여 게시자/가입자와 이벤트 시스템 사이의 이벤트나 메소드 호출을 지원한다.
2. Computer Browser
- 네트워크에 있는 컴퓨터의 최신 목록을 유지하고, 요청하는 프로그램에게 목록을 제공한다.
이 서비스는 네트워크 도메인과 리소스를 보아야 할 윈도우 컴퓨터에게 사용한다. 브라우저로 지정된 컴퓨터는 해당 네트워크에서 사용되는 모든 공유 리소스를 포함하는 찾아보기 목록을 유지한다.
3. Distributed Link Tracking (DLT) Client
- 네트워크 도메인의 여러 컴퓨터에 걸쳐 있거나, 하나의 컴퓨터에 있는 NTFS 파일 시스템 사이의 링크를 유지 및 관리한다.
DLT 클라이언트 서비스를 사용하면 대상 파일의 이름이 바뀌거나 이동 된 후에도 바로 가기와 OLE 링크가 계속 작동한다.
4. File Replication
- 자동 파일 복제 서비스다. 여러 서버에 존재하는 파일을 복사 및 관리하고 동기화 시켜준다.
또한 내결함성이 있는 DFS ( Distributed File System )과 관련된 대체 대상 사이에서 파일을 동기화하도록 이 서비스를 구성할 수 있으며, 도메인 컨트롤러의 경우 이 서비스를 중지시킬 경우 심각한 손상이 발생할 수 있다.
5. Internet Authentication Service ( IAS )
- VPN , RAS 장비 또는 무선 및 LAN, WAN 네트워크에 접속하는 사용자의 인증, 권한 부여, 감사 및 계정 작업을 수행한다.
6. Intersite Messaging (ISM)
- 윈도우 서버간에 메시지를 주고 받을 수 있다.
윈도우의 패스워드 구조 (0) | 2011.07.18 |
---|---|
윈도우의 인증 구조 (0) | 2011.07.18 |
파일시스템 : FAT 과 NTFS (0) | 2011.07.18 |
윈도우의 부팅 순서 (0) | 2011.07.16 |
NTDETECT 가 문제없이 작동하면 레지스트리에 하드웨어 키를 만드는데, 이 키는 HKEY_LOCAL_MECHINE 에 있다.
컴퓨터를 부팅할 때마다 레지스트리의 해당 부분이 만들어지기 때문에 항상 현재의 하드웨어 구성을 반영하게 된다.
6. ntoskrnl.exe (NT OS Kernel)
- ntoskrnl 은 Hardware Abstraction Layer (HAL.DLL) 을 로드한다.
- 다음은 4단계의 로드 단계다.
(1) 커널 로드 단계
- 운도우 2000은 시스템 설정을 로드하고, 이것을 HKEY_LOCAL_MACHINE\System\CurrentControlset\Services 에 저장한다.
윈도우 2000은 이 정보를 확인하고 로드할 드라이브와 그 순서를 결정한다.
(2) 커널 초기화 단계
- 드라이버에 대한 현재의 제어 세트를 검사하고 작업을 시작한다.
(3) 서비스 로드 단계
- Session ManagerSubSystem(smss.exe)와 Win32 서브 시스템을 로드한다.
(4) 서브시스템 시작 단계
- 윈도우 서브시스템이 초기화된다. Win32 서브 시스템은 로그인에 대한 처리를 하고 winlogon.exe 를 시작한다.
- 컨트롤 + 알트 + DEL 키를 누르면 로그인 창이 활성화되고, 계정과 패스워드를 입력받아 로컬 보안 인증서버
(lsass.exe) 에 보낸다. 로컬 보안 인증 서버는 보안 계정 관리자( SAM) 에 저장되어 있는 정보와 비교하여
일치하면 userinit.exe 프로세스가 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogn 의 셀 값에서 참조되는 셸을 실행한다.
이상 윈도우의 부팅 과정에 대해 알아보았다.
윈도우의 패스워드 구조 (0) | 2011.07.18 |
---|---|
윈도우의 인증 구조 (0) | 2011.07.18 |
파일시스템 : FAT 과 NTFS (0) | 2011.07.18 |
윈도우의 주요 서비스 (0) | 2011.07.18 |
SBCS 기반 함수 | WBCS 기반 함수 |
strlen | size_t wcslen 1 |
strcpy | wcscpy |
strncpy | wcsncpy |
strcat | wcscat |
SBCS 기반 함수 | WBCS 기반 함수 |
printf | int wprintf |
scanf | int wscanf |
fgets | wchar_t * fgetws |
fputs | int fputws |
커널 오브젝트의 두 가지 상태 (0) | 2011.08.12 |
---|---|
메일슬롯과 IPC 에 대한 고찰 (0) | 2011.08.12 |
메일슬롯 (MailSlot) 의 예 (0) | 2011.08.12 |
IPC 란? (Inter - Process - Communication) (0) | 2011.08.12 |
커널 오브젝트와 Usage Count 란? (0) | 2011.08.12 |
---------------------------클라이언트---------------------------------------------------
//데이터 통신에 사용할 변수
char buf[BUFSIZE+1]; 1
int len; 2
while(1)
{
//데이터 입력
ZeroMemory(buf, sizeof(buf)); 3
printf("\n[보낼 데이터]"); 4
if(fgets(buf, BUFSIZE+1, stdin) == NULL) 5
break; 6
//\n 문자 제거
len = strlen(buf); 7
if(buf[len-1] =='\n') 8
buf[len-1] = '\0'; 9
if(strlen(buf) == 0) 10
break; 11
//데이터 보내기 12
retval = send(sock,buf,strlen(buf), 0);
if(retval == SOCKET_ERROR)
{
err_display("send()");
break;
}
printf("[TCP 클라이언트] %d 바이트를 보냈습니다! \n", retval);
//데이터 받기 13
retval = recvn(sock,buf,retval,0);
if(retval == SOCKET_ERROR)
{
err_display("recv()");
break;
}
else if(retval==0)
break;
//받은 데이터 출력
buf[retval] = '\0'; 14
printf("[TCP 클라이언트] %d 바이트를 받았습니당! \n" , retval);
printf("[받은 데이터] %s\n", buf);
}
-----------------------------------------------------------------------------------
---------------------------서버-----------------------------------------------------
//여기서 사용한 소켓( client_sock ) 은 accept() 함수의 리턴값으로 생성된 것임을 유의하도록 하자.
char buf[BUFSIZE+1]; 15
//클라와 데이터 통신
while(1) 16
{
retval = recv(client_sock,buf,BUFSIZE,0); 17
if(retval == SOCKET_ERROR)
{
err_display("recv()");
break;
}
else if(retval == 0)
{
break;
}
//받은 데이터 출력
buf[retval] = '\0'; 18
printf("[TCP/%s:%d] %s\n",
inet_ntoa(clientaddr.sin_addr),
ntohs(clientaddr.sin_port ), buf);
//데이터 보내기
retval = send(client_sock,buf,retval,0);
if(retval == SOCKET_ERROR)
{
err_display("send()");
break;
}
}
데이터 전송 함수 및 소켓 데이터 구조체 (0) | 2011.07.16 |
---|---|
TCP Client 분석 (0) | 2011.07.15 |
TCP Server 분석 (0) | 2011.07.15 |
TCP Server / Client (0) | 2011.07.15 |
send(), recv() 사용 분석 (0) | 2011.07.16 |
---|---|
TCP Client 분석 (0) | 2011.07.15 |
TCP Server 분석 (0) | 2011.07.15 |
TCP Server / Client (0) | 2011.07.15 |
send(), recv() 사용 분석 (0) | 2011.07.16 |
---|---|
데이터 전송 함수 및 소켓 데이터 구조체 (0) | 2011.07.16 |
TCP Server 분석 (0) | 2011.07.15 |
TCP Server / Client (0) | 2011.07.15 |
send(), recv() 사용 분석 (0) | 2011.07.16 |
---|---|
데이터 전송 함수 및 소켓 데이터 구조체 (0) | 2011.07.16 |
TCP Client 분석 (0) | 2011.07.15 |
TCP Server / Client (0) | 2011.07.15 |
1. Client Source
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#define BUFSIZE 512
//소켓 함수 오류 출력 후 종료
void err_quit(char *msg)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM ,
NULL,
WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,0,NULL);
MessageBox(NULL,(LPTSTR)lpMsgBuf,msg,MB_ICONERROR);
LocalFree(lpMsgBuf);
exit(-1);
}
//소켓 함수 오류 출력
void err_display(char *msg)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf, 0, NULL);
printf("[%s] %s",msg,(LPCTSTR)lpMsgBuf);
LocalFree(lpMsgBuf);
}
//사용자 정의 데이터 수신 함수
int recvn(SOCKET s, char *buf, int len, int flags)
{
int received;
char *ptr = buf;
int left = len;
while( left > 0 )
{
received = recv(s,ptr,left,flags);
if(received == SOCKET_ERROR)
return SOCKET_ERROR;
else if(received == 0)
break;
left -= received;
ptr += received;
}
return (len - left);
}
int main(int argc, char* argv[])
{
int retval;
//윈속 초기화
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2) , &wsa) != 0)
return -1; // 0이 아닐 시 -1리턴
//socket()
SOCKET sock =socket(AF_INET,SOCK_STREAM,0);
if(sock == INVALID_SOCKET) err_quit("socket()");
//connect()
SOCKADDR_IN serveraddr;
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(9000);
serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
retval = connect(sock, (SOCKADDR *) &serveraddr, sizeof(serveraddr));
if(retval == SOCKET_ERROR ) err_quit("connect()");
//데이터 통신에 사용할 변수
int len;
char buf[BUFSIZE+1];
while(1)
{
//데이터 입력
ZeroMemory(buf, sizeof(buf));
printf("\n[보낼 데이터]");
if(fgets(buf, BUFSIZE+1, stdin) == NULL)
break;
//\n 문자 제거
len = strlen(buf);
if(buf[len-1] =='\n')
buf[len-1] = '\0';
if(strlen(buf) == 0)
break;
//데이터 보내기
retval = send(sock,buf,strlen(buf), 0);
if(retval == SOCKET_ERROR)
{
err_display("send()");
break;
}
printf("[TCP 클라이언트] %d 바이트를 보냈습니다! \n", retval);
//데이터 받기
retval = recvn(sock,buf,retval,0);
if(retval == SOCKET_ERROR)
{
err_display("recv()");
break;
}
else if(retval==0)
break;
//받은 데이터 출력
buf[retval] = '\0';
printf("[TCP 클라이언트] %d 바이트를 받았습니당! \n" , retval);
printf("[받은 데이터] %s\n", buf);
}
//closesocket()
closesocket(sock);
//윈속 종료
WSACleanup();
return 0;
}
2. Server Source
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#define BUFSIZE 512
//소켓 함수 오류 출력 후 종료
void err_quit(char *msg)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM ,
NULL,
WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,0,NULL);
MessageBox(NULL,(LPTSTR)lpMsgBuf,msg,MB_ICONERROR);
LocalFree(lpMsgBuf);
exit(-1);
}
//소켓 함수 오류 출력
void err_display(char *msg)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf, 0, NULL);
printf("[%s] %s",msg,(LPCTSTR)lpMsgBuf);
LocalFree(lpMsgBuf);
}
int main(int argc, char* argv[])
{
int retval;
//윈속 초기화
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2) , &wsa) != 0)
return -1; // 0이 아닐 시 -1리턴
//socket()
SOCKET listen_sock =socket(AF_INET,SOCK_STREAM,0);
if(listen_sock == INVALID_SOCKET) err_quit("socket()");
//bind()
SOCKADDR_IN serveraddr;
ZeroMemory(&serveraddr, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(9000);
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
retval = bind(listen_sock, (SOCKADDR *) &serveraddr, sizeof(serveraddr));
if(retval == SOCKET_ERROR ) err_quit("bind()");
//listen
retval = listen(listen_sock, SOMAXCONN);
if(retval == SOCKET_ERROR ) err_quit("listen()");
//데이터 통신에 사용할 변수
SOCKET client_sock;
SOCKADDR_IN clientaddr;
int addrlen;
char buf[BUFSIZE+1];
while(1)
{
//accept
addrlen = sizeof(clientaddr);
client_sock = accept(listen_sock, (SOCKADDR*) &clientaddr , &addrlen);
if(client_sock == INVALID_SOCKET )
{
err_display("accpet()");
continue;
}
printf("\n[TCP 서버] 클라이언트 접속 : IP 주소 : %s, 포트번호 : %d\n",
inet_ntoa(clientaddr.sin_addr),
ntohs(clientaddr.sin_port ));
//클라와 데이터 통신
while(1)
{
retval = recv(client_sock,buf,BUFSIZE,0);
if(retval == SOCKET_ERROR)
{
err_display("recv()");
break;
}
else if(retval == 0)
{
break;
}
//받은 데이터 출력
buf[retval] = '\0';
printf("[TCP/%s:%d] %s\n",
inet_ntoa(clientaddr.sin_addr),
ntohs(clientaddr.sin_port ), buf);
//데이터 보내기
retval = send(client_sock,buf,retval,0);
if(retval == SOCKET_ERROR)
{
err_display("send()");
break;
}
}
//closesocket()
closesocket(client_sock);
printf("\n[TCP Server] 클라이언트 종료 : IP 주소 : %s , 포트번호 : %d\n",
inet_ntoa(clientaddr.sin_addr),
ntohs(clientaddr.sin_port ));
}
//closesocket()
closesocket(listen_sock);
//윈속 종료
WSACleanup();
return 0;
}
send(), recv() 사용 분석 (0) | 2011.07.16 |
---|---|
데이터 전송 함수 및 소켓 데이터 구조체 (0) | 2011.07.16 |
TCP Client 분석 (0) | 2011.07.15 |
TCP Server 분석 (0) | 2011.07.15 |
CBR600RR..
내가 가장 사랑하는 모델이고 가장 사고 싶은 기종이다.
혼다의 내구성과 성능은 이미 말하지 않아도 누구나 다 알
정도로 이 차 또한 혼다의 장점을 갖추고 있는 차량이다.
천만원이 넘어가지만, 그래도 너무 갖구싶다..ㅠ.ㅠ
알차를 타보지 않은사람은 왜 위험하게 바이크를 타냐고 하지만
그건 잘 몰라서 하는 애기이다..
알차의 매력은 차와는 비교할 수가 없다.
차와는 비교할 수 없는 엄청난 가속력과 최고속, 코너링, 투어링..
물론 개인취향이고,, 또한 사고의 위험성이 높은것두 인정하지만..
한번 맛을 알게되면 헤어나올 수 없을 것이다.
ZXR 400RR (0) | 2011.08.12 |
---|