$bash

'$bash'에 해당되는 글 180건

  1. 1학기 기말고사 범위
  2. C언어 for 의문증?
  3. Hello, W W D C 16.
  4. C 언어 프로그래밍 문제점
  5. C - 배열과 포인터
  6. C - 포인터
  7. C - 배열
  8. C - 함수
  9. 서버보안구축과목 - 기말고사
  10. Suninatas.kr - 18 Forensic

1학기 기말고사 범위

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

C언어 for 의문증?

0x0200 : 검색은 생활화

그러하다.

'0x0200 : 검색은 생활화' 카테고리의 다른 글

개굴개굴개굴개굴  (7) 2016.08.29
갓오핫 행님 퍄퍄  (0) 2016.08.05
오잉 hack-me 상태가?  (0) 2016.07.28
sfp ??  (0) 2016.06.12
Wargame 정리 파일.  (2) 2016.06.07

Hello, W W D C 16.

0x0100 : 놀고싶다


보고 자야지..


'0x0100 : 놀고싶다' 카테고리의 다른 글

15th 해킹캠프 - 후기  (0) 2017.02.22
14회 차 해킹캠프 후기?  (0) 2016.08.29
Cheat Engine 개꿀잼  (0) 2016.07.08
2016 코드게이트 - 대회, 컨퍼런스  (0) 2016.06.07
공부해야되네  (0) 2016.06.07

C 언어 프로그래밍 문제점

0x0000 : Me

기말 준비겸 다시 프로그래밍 공부 다질겸 해서 함수부터 포인터와 배열까지 쭉 정리 를 해봤는데..

프로그래밍 쪽에서 오타도 많고, 내용적인 측면도 부실한 감이 적지 않아 있다.


이후 서술할 내용은 좀 더 세부적으로 작성하자.


// 시스템해킹쪽은 기말 끝나고 준비.

// 내용적인거 서술은 전처럼 배운거 정리 기준으로.


'0x0000 : Me' 카테고리의 다른 글

나우 유 씨미 2 리뷰??  (2) 2016.07.24
개인 중간 정검.  (0) 2016.07.19
narnia 근황.  (0) 2016.07.19
BOB 신청끝.  (0) 2016.06.12
새상은 미쳐따.  (0) 2016.06.09

C - 배열과 포인터

0x0300 : Study/0x0304 : Programming


배열과 포인터

배열명 - int ary[3];

   - ary == &ary[0];

배열명 + 정수 - int ary[3];

 ary + 1;

배열명과 포인터는 같다. - int ary[3];

 int *pa = ary;

 pa[1] =10;

배열명과 포인터는 다르다. - ary ++; (틀림)

     pa ++ ; (맞음)



배열명의 정체

배열명은 컴파일 과정에서 첫 번째 배열 요소 주소로 변환

// 배열- 자료형이 같은 변수 메모리에 연속 할당


배열명이 주소인지 확인 해주는 코딩이다.

배열명은 따로 지정이 안했기 때문에 첫번째 값과 두번째 주소값이 같게 나오는 것을 확인 할 수 있다.

배열명이 요소와 첫번째 요소의 값 또한 요소가 가리키는 것이 첫번째 배열 이기 때문에 쉽게 찾을 수 있다.


배열명으로 배열 요소 사용

// 주소는 정수처럼 보이지만 자료형에 대한 정보를 갖고 있는 특별한 값이다.

// 정해진 연산만 가능


배열명에 정수 연산을 수행하여 배열 요소를 사용하는 방법 이다.


// ary[1] = *(ary + 1)

// ary[2] = ary + 2


배열명 역활을 하는 포인터

포인터가 배열명 저장하면 배열명처럼 사용 가능.


배열명처럼 사용되는 포인터이다. 


// pa[2] = pa[0] + pa[1]

// *(ary + 2) =  *(ary + 0) + *(ary + 1)

// 둘다 같음을 알 수 있다.


배열명과 포인터의 차이

sizeof 함수 사용 결과의 차이

//배열명에 사용시 배열 전체의 크기를 나타냄

// 포인터에 사용하면 포인터 하나의 크기를 나타냄


변수와 상수의 차이

// 포인터는 그 값을 바꿀 수 있음

// 배열명은 상수이므로 값을 바꿀 수 없음


포인터를 이용한 배열의 입출력 과정이다.


포인터의 뺄샘과 관계 연산

포인터의 뺄셈

// 포인터 - 포인터 > 값의 차 >> 가리키는 자료형의 크기


관계 연산자로 포인터의 대소관계 확인 가능


포인터의 뺄셈과 관계 연산을 코딩을 한 예제이다.


배열의 입출력을 처리하는 함수

주소를 데이터로 주면 해결


호출 - int ary[5] = {10, 20, 30, 40, 50};

 print_ary(ary, 5);


정의 - void print_ary(int *pa, int size)

 {

  printf("%d", pa[i]);

 }


배열의 값을 출력하는 함수

배열의 값 확인하기 위해 수시로 출력해야 한다면?

// 그 기능을 함수로 만들어 호출

// 함수 호출할 때는 배열명을 주고, 함수의 매개변수로 포인터 선언

// 함수 안에서 포인터를 배열명처럼 사용


배열의 값을 함수를 정의해 출력해주는 내용이다.


// print_ary 함수에서는 배열명인 ary를 사용할 수 없다. 따라서 pa값으로 반복문을 처리한 것이다.


배열 요소의 개수가 다른 배열도 출력하는 함수

배열 요소 수가 달라도 원하는 배열 출력 가능한 예제

// 함수 호출 할 때 배열명과 함께 배열 요소 수도 인자로 넘김


크기가 다른 배열을 출력하는 함수이다. 


// 매개변수 size는 배열의 요소 수를 받아 저장하고 그만큼 반복을 한다.

// 출력할 배열 요소수가 바뀌어도 그에 맞춰 모든 배열 요소의 값이 출력이 가능하다는 것이다.


배열에 값을 입력하는 함수

입력 함수는 데이터를 저장할 배열의 위치가 필요하다.

// 배열에 값 입력하는 함수는 함수 안에서 포인터 직접 사용.


배열에 값을 입력하는 함수이다.

'0x0300 : Study > 0x0304 : Programming' 카테고리의 다른 글

Cpp 기초 (A+B 응용화)  (0) 2017.05.24
NASM - LD 컴파일 후 실행  (0) 2017.05.13
C - 포인터  (0) 2016.06.13
C - 배열  (0) 2016.06.13
C - 함수  (0) 2016.06.13

C - 포인터

0x0300 : Study/0x0304 : Programming

포인터

변수의 메모리 주소 저장하는 변수

// 변수?

/ 메모리 상의 저장공간

/ 그 위치를 알면 사용할 수 있음


//위치값 - 주소


포인터와 연산자

주소 연산자 - int a;

     &a;

포인터 - char *pc;

              int *pi;

      double *pd;

간접 참조 연산자 - *pi = 10;


주소연산자

프로그램이 사용하는 메모리에는 바이트 별로 주소값 존재

// 0부터 시작하고 바이트 단위로 1씩 증가

// 2바이트 이상의 크기를 갖는 변수는 여러 개의 주소값에 걸쳐 할당


이러한 코딩으로 변수의 메모리 주소를 확인 할 수 있다.


포인터와 간접참조 연산자

예시로 포인터에 대해 설명해보자.


포인터는 '*' 를 앞에 붙이며 저것은 포인터를 의미하는 표기이다.


int *pa;

int는 주소를 구한 변수의 형태를 의미하며 *는 포인터의 기호, pa 는 포인터의 이름이다.


간접참조 연산자를 사용한 예시로.

대입 연산자 왼쪽 

변수 a사용 // a = 10; 

포인터 pa 사용 // *pa = 10;

대입 연산자 오른쪽

변수 a사용 // b = a;

포인터 pa 사용 // b = *pa;

피연산자

변수 a사용 // a + 20;

포인터 pa 사용 // *pa + 20;

출력

변수 a사용 // printf("&d", a);

포인터 pa 사용 // printf("%d", *pa);

입력

변수 a사용 // scanf("%d", a);

포인터 pa 사용 // scanf("%d", &*pa);

 // scanf("%d", pa);


여러 가지 포인터

// 다양한 포인터의 사용법


포인터를 사용한 두 정수의 합과 평균 계산을 하는 코딩이다.

위처럼 가리키는 변수의 형이 같은 경우 포인터 연속 선언이 가능하다.

포인터의 선언과 동시에 초기화 하는 것 또한 가능한 것을 확인 할 수 있다.


const를 사용한 포인터

// 포인터에 const함수를 사용해보자.


포인터에 const 함수를 사용하여 만든 코딩의 예시이다.


const가 일반 변수 처럼 포인터 값을 고정시킨다면 9행에서 pa는 다른 변수의 주소를 저장 할 수 없다.

pa는 const의 사용과는 무관하게 변수 b 주소 저장, 그 값 간접 참조하여 출력한다.

// 에러 발생 :: l-value 가 const 개체를 지정합니다.


포인터와 주소의 차이

주소는 변수에 할당된 메모리 저장 공간 시작 주소값 자체이다.


포인터는 그 값 저장하는 또 다른 메모리 공간

// 특정 변수의 주소값은 바뀌지 않음

// 포인터는 다른 주소 대입하여 그 값을 바꿀 수 있음


예시로

int a, b;    // 일반 변수 선언

int *p;      // 포인터 선언

p = &a;    // p가 a를 가리키도록 설정

p = &b;    // p가 변수 b를 가리키도록 바꿈


이러한 예시 뿐만 아니라 두 포인터를 한 주소로 저장 할 수 있다.

int a;

int *pa, *pb;

pa = pb = &a;


// 자세한 설명은 생략한다.


주소와 포인터의 크기

모든 주소와 포인터는 같은 크기

// 저장할 주소의 크기에 따라 결정

// 크기가 클수록 더 넓은 범위의 메모리 사용 가능

// 포인터의 크기는 컴파일러에 따라 다를 수 있음


sizeof 연산자를 가지고 주소와 포인터의 크기를 출력하는 코딩이다.

3가지의 변수의 주소 크기는 4로 일정하며, 포인터의 크기 또한 4 로 일정하다.

하지만 각각의 포인터가 가리키는 변수의 크기는 char가 1,  int가 4, double이 8로 나타난다.


포인터의 대입 규칙

크기가 모두 같으므로 대입 연산 쉽게 생각 할 수 있다.

// 포인터는 가리키는 변수의 형태가 같을 때만 대입

// 포인터끼리 대입 연산 수행

/ 여러 개의 포인터로 같은 데이터 다루는 것이 가능

위의 코딩은 허용되지 않은 포인터의 대입이다.


포인터가 필요한 EU

변수 사용하는 가장 쉬운 방법은 이름을 쓰는 것

// 포인터를 사용하려면 추가적인 변수 선언 필요

// 각종 연산 수행해야 하므로 필요한 곳에만 사용


포인터를 사용한 두 변수의 값 교환이다.

swap이라는 이름으로 매개변수로 포인터를 선언하여 두 변수의 값을 바꿨다.


포인터 없이 두 변수의 값 바꾸기

swap 함수에서 main함수의 a,b를 이름으로 직접 사용하는 방법


이 과정에서 a, b를 이름으로 직접 사용하는 방법을 사용했기 때문에 선언되지 않는 식별자로 에러가 뜬다.


// 그래도 기본적인 배열에서 교환하는 것 이랑 비슷비슷해서 .. 자세한건 생략!


'0x0300 : Study > 0x0304 : Programming' 카테고리의 다른 글

Cpp 기초 (A+B 응용화)  (0) 2017.05.24
NASM - LD 컴파일 후 실행  (0) 2017.05.13
C - 배열과 포인터  (0) 2016.06.14
C - 배열  (0) 2016.06.13
C - 함수  (0) 2016.06.13

C - 배열

0x0300 : Study/0x0304 : Programming

배열?

각 저장 곤간을 이름과 index로 구분.

메모리에 저장 공간 한꺼번에 확보.

사용할 때는 하나씩 떼어 쓰는 방식으로 구현


선언과 초기화 그리고 요소의 사용


선언 - int ary[5];

초기화 - int ary[5] = {1, 2, 3, 4, 5};

요소 사용  - ary[0], ary[1], ary[2], ary[3], ary[4]..


배열의 기본적인 예시이다.


int a, b, c, d, e; 를 예시로 들어보자.

여기서는 a , b , c .. 각각의 변수에 4바이트씩 공간이 주어져 있다.


int ary[5]; 는

메모리에 공간이 연속적으로 20바이트가 할당되어 있다.


배열의 초기화

최초 할당된 저장 공간에는 쓰레기값 존재.

// 배열이 선언과 동시에 원하는 값 갖도록 하려면 초기화.


배열은 중괄호로 묶어서 초기화

// 반드시 선언과 동시에 초기화

// 선언하고 난 후에 값 저장하려면 배열 요소에 하나 씩 값 대입



배열과 반복문

배열은 같은 형태의 변수가 많이 필요할 때 쉽게 저장 공간 할당, 초기화 가능한 장점 가짐


모든 배열 요소를 일일이 하나씩 사용하는 것은 번거로움


성적 처리 프로그램을 예시로 반복문과 배열을 조합한 코딩을 할 수 있다.


위에서 보면 알 수 있는데

for (int i = 0; i < 5; i++)

{

printf("%5d\n", score[i]);

}

에서 for에서의 i는 score의 i 를 배열의 첨자로 활용 가능하다.


Sizeof 연산자를 활용한 배열 처리

배열은 보통 많은 양의 데이터 처리

// 반복문 사용 필수


배열 요소 수가 바뀌는 경우?

// 배열 처리 반복문을 모두 수정해야 하는 부담

// 배열 요소 수를 직접 계산 하여 반복문에 사용하면 편리


배열 요소 수 = sizeof (배열명) / sizeof (배열 요소)


sizeof 연산자를 사용한 배열의 예시이다.


cnt = sizeof(score) / sizeof(score[0]);

cnt는 배열 요소 수 (5) 가 되고 score은 배열 전체 크기인 20바이트 이며 배열 요소 하나의 크기는 score[0]이 4바이트로 주어진다.


char 형 배열선언과 초기화

문자열은 문자의 연속

// 문자열 저장할 때는 char형 배열 사용


가장 기본적인 예시이다.


문자열 끝에 널 문자가 없는 경우가 있다

이러한 경우는 쓰레기 값을 문자열로 출력 하기도 한다...


이처럼 뒤에 빈공간이 있다면 글자가 이상한 쓰레기 값이 출력 되는 것을 확인 할 수 있다.

// 물론 테스트는 하지 않았습니다 ^ㅡ^...


문자열 대입

char형 배열은 문자열 저장하는 변수의 역할을 한다.

// 초기화 된 이후에도 새로운 문자열 저장이 가능

// 문자열의 길이가 다를 수 있음


strcpy함수를 활용한 문자열 대입하는 배열 예제이다.


문자열 입출력 함수로 gets, puts가 있다.



'0x0300 : Study > 0x0304 : Programming' 카테고리의 다른 글

Cpp 기초 (A+B 응용화)  (0) 2017.05.24
NASM - LD 컴파일 후 실행  (0) 2017.05.13
C - 배열과 포인터  (0) 2016.06.14
C - 포인터  (0) 2016.06.13
C - 함수  (0) 2016.06.13

C - 함수

0x0300 : Study/0x0304 : Programming

함수? 

선언 - 정의 - 호출 로 세 가지의 상태로 사용할 수 있다.


//

선언 int add ( int a, int b );

정의 int add ( int a, int b );

       {

return a + b ;

}

호출 add ( 10, 20 );

//


함수의 정의를 내려보자!


2개의 함수로 만든 프로그램이다.

주석을 보면 알듯 2가지의 함수가 쓰여 계산되는 과정을 알 수 있다.


add라는 함수로 예시를 들어 보자. add라는 함수는 두 값을 저장한것을 temp라는 곳에 저장을 하는 함수이다.

이처럼 따로 계산을 처리시키는 함수를 생성 할 수 있다.


int add ( int x , int y )

{

// 함수의 내용 !

}


앞부터 int는 반환형 이며 다음 붙게 되는 add는 함수명이다.

int x , int y 는 매개변수이며 이후 안에 내용이 함수를 처리하게 될 내용이다.


함수유형?!

함수에는 다양한 함수 형태가 있다.

매개변수가 없을때나 반환형이 없거나 매개변수와 반환형 모두가 없을 경우가 있으며,


매개변수가 없는 경우 - int get_pos(void); 또는 int get_pos()

// 호출할 때 인수 없이 괄호만 사용한다.



반환형 변수가 없는 경우 - void print_char(char ch, int cnt);

// 반환할 때 return문을 쓰지않거나 return문만 사용한다 !

// 호출문장을 수식의 일부로 쓸 수 없다.



둘다 없따 ! - void print_title(void);

// 두가지의 특징이 포함됨.



이렇게 선언과 특징을 알 수 있다.



재귀 호출함수가 또 있는데 이는


void rec_func() {  .... rec_func (); .... }

// 함수 안에 재귀 호출을 멈추는 조건이 있어야 한다.




이러한 선언과 특징을 가진다.


// 어디까지나 선언문은 예시일 뿐이다.



'0x0300 : Study > 0x0304 : Programming' 카테고리의 다른 글

Cpp 기초 (A+B 응용화)  (0) 2017.05.24
NASM - LD 컴파일 후 실행  (0) 2017.05.13
C - 배열과 포인터  (0) 2016.06.14
C - 포인터  (0) 2016.06.13
C - 배열  (0) 2016.06.13

서버보안구축과목 - 기말고사

0x0600 : 학교 노잼

하드디스크 추가 RAID

ide 나 scsi 차이점? 

RAID : 여러 개의 하드 디스크에 일부 중복된 데이터를 나눠서 저장하는 기술이다


백업

정확히 해야될 내용을 모르겠음. 백업의 이유와 내용적인거 쓰면 될듯.


dns (도메인 네임 시스템)

아이피 값이 역방향 , www.naver.com이 정방향

Forward Zone(도메인 이름 → IP)과 Reverse Zone(IP → 도메인 이름)을 가진다. 주로 Forward Zone에는 도메인을 구성하는 호스트에 대한 정보를, Reverse Zone에는 DNS 서버 자기 자신에 대한 정보를 기록한다.


SQL injection? = 풀이참고.

LoS 이나 webhacking.kr 문제 참고.


DHCP(동적 호스트 구성 프로토콜) : ip 주소를 자동으로 할당 해주는 것이다

그림 처럼 DHCP 서버 컴퓨터가 클라이언트로 ip를 할당해준다.


서버가 가지고 있다가 클라이언트가 켜지면서 나한테 ip주소를 하나만 달라고 네트워크에 브로드캐스트를 뿌린다.

그럼 서버는 그 요청을 받아 클라이언트에게 자신이 관리하는 ip주소중 한개를 준다.

이렇게 되면 네트워크 관리자가 따로 ip주소를 배정해줄 필요가 없고 또 사용자들도 자신의 ip를 몰라도 된다.


그렇기 때문에 회사에서 부서이동을 하더라도 ip주소를 따로 바꿀 필요가 없다.


PPT내용중 필요 숙지내용?

보안 정책

정보 보안의 3요소

기밀성 : 허가된 사용자에 한해서만 특정 자원의 접근을 허용

무결성 : 허가된 사용자가 어떤 행동을 했을 때, 그 행동에 대한 결과라는 것을 보장하는 요소

가용성 : 사용자가 원할 때 원하는 자원에 접근 가능하다는 것을 보장하는 요소


// 정책 ? - 어떤 목적을 달성하기 위해 마련하는 방책 또는 방침


모니터링

= 서버에 설치한 기능이 잘 작동하고 있는지 확인하는 작업


방목현상 : 모니터링 시 특히 서버에 발생하는 병목현상의 근본 원인을 찾아내 조치하는 것이 중

튜닝 : 특정 부분의 성능이 저하되는 원인을 파악하여 개선하는 작업


// 작업관리자 내용 숙지?


IIS 설정?


설정 하기

서버관리자 > 관리 > 역활 및 기능 추가 > 서버역활중 IIS관리 콘솔 > 기능에서 net framework 기능 설치 > 설치 완료 !

웹페이지 생성

관리도구 > iis(인터넷 정보 서비스) 관리자 > 새로운 사이트 생성 > 사이트 설치 마법사를 세팅 > 이후 html 파일을 마법사로 설정된

폴더에 넣는다. > 루프백 ip 입력하면 나옴. ( http://loaclhost )


'0x0600 : 학교 노잼' 카테고리의 다른 글

2학기_기말-기술능력  (0) 2016.12.06
2학기 중간 기술능력평가  (0) 2016.10.16
언제 쓸지 모르는 파일...  (0) 2016.09.11
1학기 기말고사 범위  (0) 2016.06.14

Suninatas.kr - 18 Forensic

0x0400 : Wargame/0x0406 : Suninatas.com

Suninatas 의 18번 포렌식 문제이다. 이곳에는 여러 장르가 있는데.. 일단 포렌식 공부를 하려고 하기 때문에 먼저

포렌식 관련 문제를 풀어보고 중간중간 다른 문제도 풀어보자.


시작을 하면 다음과 같이 숫자가 나온다.

아무래도 86..71..107 식으로 진행되는 값이 아스키코드가 떠오른다. 아스키코드로 변환해보자.


코딩노예.jyp


디버깅을 하여 값을 출력해보니 ..


다음과 같이 나와있다. 

VG9kYXkgaXMgYSBnb29kIGRheS4gVGhlIEF1dGhLZXkgaXMgVmVyeVZlcnlUb25nVG9uZ0d1cmkh

가만보니 base64 로 암호화 된거 같다. Webhacking.kr로 가서 디코딩을 봤다.



'0x0400 : Wargame > 0x0406 : Suninatas.com' 카테고리의 다른 글

Suninatas.kr - 19 Forensic  (0) 2016.09.01