메모리 동적 할당

i2sec/Secure C 2014. 4. 23. 21:08

1.메모리 동적 할당이란?

내가 원하는 만큼의 공간을 Heap 이라는 곳에 할당하여 사용하는 것


2.선언 방법

기본형 : void* malloc(size_t size);

->size_t = typedef unsigned int size_t => 부호가 없는 정수 즉, 양수를 선언하는 자료형이다.

->인자 부분에는 양수 형태로 만들고자 하는 공간의 크기를 입력

->자료형이 "void*" 형이기 때문에 사용시 캐스팅을 사용해야 한다.


* malloc(); 함수는 할당한 공간의 주소를 리턴한다.


3.사용하는 이유

1.원하는 만큼 공간을 사용할 수있다.

2.메모리 관리가 효율적이다.

ex) char stu[100]; 이라고 '100'크기의 공간을 선언했다.

그러나 실질적으로는 '30'만큼의 공간만 사용한다. 그러면 '70'이라는 공간이 남게 되어 메모리가 낭비된다.

그러므로 메모리 동적 할당으로 필요한 만큼만 할당해서 사용한다.




4.메모리 동적 할당 사용

1.헤더파일

malloc();함수를 사용 하기 위해서는 <stdlib.h> / <malloc.h> 헤더파일이 필요하다(둘 중에 하나 선택 사용)

2.free(); 함수

메모리를 할당하고 사용 후 pc에게 공간 사용을 종료하겠다고 이야기 해주는 기능

사용 형태 : free(할당된 공간의 시작 주소);

#include <stdio.h>

#include <stdlib.h>


int main(void)

{

int *ptmp = malloc(10);    -예제1

int *ptmp = (int*) malloc(10);    -예제2

  free(ptmp);    -예제3

return 0;

}

(예제1)

이 코드를 실행하면 ERROR가 난다.

이유는 malloc(); 함수는 "void*"형태이기 때문에 캐스팅을 하고 사용해야 되는데 캐스팅을 하지 않았기 때문이다.


(예제2)

malloc();함수의 올바른 사용이다.

캐스팅 할때에는 할당한 공간에 담을 data의 형태에 맞게 캐스팅한다.

만약 포인터 연사자 '*'을 뺄 경우 할당된 공간의 주소가 아니라 값이 전달되므로 ERROR가 난다.


(예제3)

인자로 ptmp를 넣은 이유는 ptmp가 할당한 공간의 시작주소를 가지고 있기 때문이다.


*"free();"함수로 같은 공간을 두번 닫았을 경우

처음 'A'라는 공간을 할당하여 사용 후 종료했다.

그리고 'B'라는 공간을 할당하고 'A'가 있던 공간에 할당 되었다

'B' 공간을 사용 중에 'A'라는 공간을 종료하지 않았다고 착각해서 'A'공간을 닫았을때 

'A'공간이 아니라 'B'공간이 닫히게 되어서 ERROR가 발생한다.



5.메모리 동적 할당 사용2

<예제 코드>

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

int i = 0;

int *ptmp = (int*) malloc(10);

char *pch = (char*) malloc(20);

ptmp[0] = 10;

ptmp[1] = 20;

printf("Sum = %d\n",ptmp[0] + ptmp[1]);

for(i ; i<10 ; i++)

{

pch[i] = 0x61 + i ;

}

printf("%s\n",pch);

free(ptmp);

free(pch);

return 0;

}


<실행 결과>






*문자열 뒤에 이상한 값이 나오는 이유

 ->문자열 출력시 NULL문자까지 출력한다. 그런데 NULL문자는 "pch"맨끝에 존재 하고 나는 pch[0] ~ pch[9]까지 입력 하였다.

   그러면 pch[10] ~ pch[18]까지는 쓰레기 값이 들어 있으므로 이상한 값이 출력된다.

 ->해결방법

   1.pch[10]에 0을 입력해준다 => pch[i] = 0;(for문이 끝나면 i의 값은 10을 가지고 있기때문에)

   2.공간을 크기 조정 => char *pch = (char*)malloc(10);


*공간의 낭비를 없애기 위한 방법

지금 내가 필요한 만큼의 공간을 할당해서 사용하고 있지만 ptmp가 가르키는 곳에는 2byte, pch가 가르키고 있는 곳에는 10byte가 낭비되고 있다.

이것을 없애기 위해서는 malloc();함수의 인자값을 변경할 필요가 있다.


인자 : 자료형의 크기 * 데이터의 갯수

malloc(sizeof(int)*2);   /    malloc(sizeof(char)*10);


(그냥 처음 인자는 8, 두번째 인자는 10을 넣으면 안되냐는 생각을 할 수도 있지만 만약에 세월이 지나서 자료형의 크기가 변하게 되서 이 코드를 사용하면 제대로 동작하지 않는다

그런데 이렇게 코드를 작성하면 자료형의 크기가 변해되더라도 사용가능 하다.)


*ptmp[3] = 30; 이라고 소스를 추가 했을때

현재 ptmp가 가르키고 있는 곳의 크기는 10byte이다. 그 곳에는 현재 4byte 짜리 ptmp[0], ptmp[1] 2개가 존재해서 8byte를 사용중이다.

그런데 ptmp[3]을 추가하게 되면 남은 공간은 2byte데 4byte를 추가할려고 하므로 ERROR가 발생한다.


*할당한 공간 늘리기 -> realloc();

->사용 형태 : realloc(늘릴 곳의 주소, 변경할 크기);

->공간 늘림 : 원래 입력되어 있던 값은 그대로 있고 공간만 늘어남

<소스 추가>

  realloc(ptmp, sizeof(int)*5);

realloc(pch, sizeof(char)*20);

<실행 결과>



->공간 줄임 : 원래 있던 값 중 공간안에 있을 수 있는 만큼만 남고 없어짐 

<소스 추가>

realloc(ptmp, sizeof(int));

realloc(pch, sizeof(char)*5);

<실행 결과>








출처 == i2sec

'i2sec > Secure C' 카테고리의 다른 글

14.04.28 21:10  (0) 2014.04.28
2014-04-23 AM12:46  (0) 2014.04.23
주의 사항!!!  (0) 2014.04.18
하... 역시나...  (0) 2014.03.31
START...  (0) 2014.03.28

네트워크 해킹 시작..

i2sec/Network hacking 2014. 4. 23. 19:41

오늘부터 네트워크 해킹이 시작되었다.

첫 시간이라 네트워크에 대한 간단한 개요 설명과 앞으로 학습 방향 같은 것만 이야기 했다.

재일 자신있고 기대되는 분야이기도 하다.

이제부터는 그날 배운건 그날 바로 포스팅 하자!!!

'i2sec > Network hacking' 카테고리의 다른 글

day04 - 네트워크 이론  (0) 2014.04.28
TCP/IP  (0) 2014.04.25
Network + OSI 7 Layer  (0) 2014.04.25
정보통신  (0) 2014.04.25

2014-04-23 AM12:46

2014. 4. 23. 00:53

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

패스워드 크래킹

i2sec/System hacking 2014. 4. 23. 00:38

1.패스워드 크래킹이란?

공격 대상이 이미 ID를 알고 있다는 가정 하에 비밀번호를 알아내는 해킹 기법이다.                                                    이 기법은 해킹 기법중 난이도는 낮은 편이나 가장 강력한 공격이다.


2.취약한 패스워드 분류

1. 길이가 너무 짧거나 아예 패스워드를 설정하지 않은 경우                                                                                   2. 사전에 나오는 단어나 이들의 조합                                                                                                                3. 키보드 자판의 나열                                                                                                                                      4. 사용자 계정 정보에서 유추가능한 단어


3.패스워드의 안전성 확인

입력문자 

7자리 

8자리 

영문 소문자(26문자) 

 45분

20시간 

 영문 소문자 + 숫자(36문자)

 8일

13일 

 영문 대문자 + 숫자(62문자)

25일 

4년반 

 영문 대소문자 + 숫자 + 특수문자(94문자)

437일 

114년 

<출처 : 정보보호뉴스>

우리가 평균적으로 사용하고 있는 영문소문자 +숫자로 구성된 8자리 패스워드는 13일이면 해킹당할 수 있다.                  13일이라는 시간을 들여 일반인의 패스워드를 크래킹하는 경우는 잘없겠지만 공공기관이나 주요 직책의 사람들의 것일 경우는 이야기가 달라진다. 점점 높아지는 컴퓨터 사양으로 인해 이시간은 점차 쭐어들 것으로 보인다.                         이러한 문제점을 해결하기 위한 가장 빠르고 정확한 해결방안은 사용자 본인이 경각심을 느끼고 패스워드 관리에 좀더 신경을 쓰는 것이라고 생각한다.


위 프로그램은 kisa에서  제공하는 패스워드 안전성검사 프로그램이다.                                                                   현재 자신의 패스워드의 안정성을 표시해준다.(스스로의 패스워드를 진단해보길 바란다)

*안전한 패스워드                                                                                                              1. 2가지 변수 + 10가지 이상의 길이                                                                                                                2. 3가지 변수 + 8가지 이상의 길이                                                                                                                 (변수 : 영문대문자, 영문소문자, 숫자, 특수문자(4가지))

4.패스워드 크래킹의 종류

고전기법과 현대기법이 있지만, 암묵적인 의미에서 현대기법(자동화된 툴이용)만 사용

이되고 있고, 아래와 같은 종류가 있다.

고전 기법

1. Shoulder Sniffing

누구나 한번쯤 타인의 비밀번호를 어깨너머로 훔쳐본 적 있을것이다. 

이 기법은 단어 뜻 그대로 어깨넘어로 훔쳐 본다는 의미를 가진 크래킹 기법 이다.


2. Dumpster Diving 

영화에 가끔 등장하는 장면 중 하나인 쓰레기통을 뒤져 서류나 메모를 찾아 정보를 얻는 장면을 볼수 있다.

그렇게 무심결에 버려진 정보들을 찾아서 정보를 훔치는 기법이다.


3. Social Engineering

사회 공학 기법이라고도 하며 요즘 크게 문제가 되고 있는 보이스 피싱, 스미싱과 같이

사람들을 속여 정상 보안 절차를 깨트리기 위한 비기술적 침입 수단을 뜻하는 기법이다.


현대 기법

1.Dictionary attack(사전 공격)  

사전 대입 공격으로 미리 사전파일을 만들어 놓고 그 내용을 하나하나 대입하는 기법이다. 

이 기법은 용량이 크면 클수록 좋다. 해외에서 공격이 잦다.

(사전파일 안에 내용이 중요)(ex-한글)


2.hybrid attack : 

앞선 사전 공격 보다 진화(혼합 공격)

 guessig 이 첨가된 부분이 크기 때문에 경험이 높은 사용자의 경우에는 효과가 높지만,

 경험이 미비한 사용자의 경우에는 역효과

 단점:추측을 잘못하면 더오래걸릴수있다


3.brute force attack : 

무차별 대입 공격으로 암호를 풀기 위해 가능한 모든 경우의 값을 대입하여 암호를 해독하는 기법

언젠가는 뚤리지만, 정확히 언제인지는 알 수 없다. 관제서비스에서 필터링 되어 질  확률이 높다.

장점:가장 정확하다.

단점:오래 걸림


5.사전 공격을 위한 사전 파일 정보 수집 -> "구글링"

site : 해당 도메인 내에서 검색

ex>kr, jp,cn....

inurl : url 내에서 포함된 문자열 검색

ex>www.i2sec.co.kr <-- 개인정보 및 취약점 노출확인가능


intitle : <title> </title> 내에 포함된 문자열 검색


filetype : exe, pdf, xls, hwp와 같은 파일 확장자를 검색

ex>filetype:ppt 제안서

  이력서와 같은 민감한 파일들이 노출된다.


사전파일 찾는 요령 : inurl:dictionary.txt 및 password.txt

            filetype:txt,doc



6.Dictionary attack(사전 공격)


사전 공격을 위해 Unsecure이란 툴을 사용



공격을 위한 사전파일이 툴과 같은 폴더에 들어 있어야 한다. 

툴 사용법

1.Computer name and IP - 패스워드 크래킹할 PC나 서버의 IP주소 입력

2.Port - 접속 방식의 포트 번호 입력(ex-21:ftp, 22:ssh, 23:telent)

3.Username : 패스워드 크래킹 할 ID 입력

4.Dictionary file : 준비된 사전 파일 이름을 입력

5.Attack options : 사용할 공격을 설정하는 부분 (Dictionary attack 선택)

6.Connect 클릭!

7.사전 파일을 비교하고 맞는 암호가 있으면 출력! (사전파일이 많을수록 시간이 오래걸린다)


*간단하고 쉬운 공격같아 보이지만 상대방의 IP와 ID만 알면 누구나 쉽게 공격할 수 있는 무서운 공격이다.

직접 실습해본 결과 사전파일의 양보다는 역시 질이 중요한 것 같다.

아무리 많은 경우의 수를 가지고 있더라도 모두 다 틀린답인 경우 결과는 모르는 상황과 같다.

많은 추리, 추측과 경험이 요구되는 기법인 것 같다.

하지만 이러한 것이 갖춰졌을때 무엇보다도 무서운 공격이 될꺼 같다.

또다시 비밀번호의 중요성을 느끼는 시간이 되었다.


출처 == I2sec


'i2sec > System hacking' 카테고리의 다른 글

백도어 탐지  (0) 2014.04.27
백도어(Backdoor)  (0) 2014.04.27
SetUID  (0) 2014.04.27
Unix & Windows 인증 구조  (0) 2014.04.27
Windows 단축키 및 주요 프로세스  (0) 2014.04.21

Windows 단축키 및 주요 프로세스

i2sec/System hacking 2014. 4. 21. 11:50

1.알면 편한 단축키

   윈도우 + R = 실행

   윈도우 + D = 바탕화면 바로가기

   alt+tap    = 작업표시줄

   alt+shift+tap = 작업표시줄 역방향

   ctrl + a  = 전체지정

   shift + 방향키 or home or end = 텍스트 범위 지정

   윈도우 + e : 내컴퓨터


실행 : msconfig, calc, mstsc, control, regedit



2. 윈도우 주요 프로세스

레지스터리 : 윈도우의 설정값들이 저장되는 데이터베이스

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

- alg.exe : 인터넷 연결 공유 응용프로그램과 인터넷 연결 방화벽에

            대한 써드 파티 프로토콜 플러그인들을 지원함.

            #써드 파티 : 주개발사와 사용자 외의 개발사

- ctfmon.exe : 고급텍스트 서비스 , 필기, 음성인식과 같이 보다

               향상된 입력방법을 제공

- csrss.exe : 윈도우 콘솔 , 쓰레드 생성/삭제

- dllhost.exe : dll에 기초를 둔 어플리케이션을 관리 담당

- explorer.exe : 우리가 보는 화면 작업표시줄, 바탕화면을 지원.

- lsass.exe : 윈도우 보안 메커니즘 핸들링

- mstask.exe : 시스템 백업이나 업데이트 작업

- services.exe : 윈도우즈 서비스를 관리

- smss : 시스템 변수를 설정하고, winlogon 및 csrss.exe 프로세스를 구동함


- spoolsv : 프린터의 작업을 저장하고, 프린터가 저장되었을때 해당 작업들을 프린터로

               포워딩 하는 서비스 담당

- svchost : DLL에 의해 실행되는 프로세스의 기본 프로세스로 한 시스템에 여러개의                svchost가 존재하고, 여러개의 svchost 프로세스가 있음

- system : 대부분의 커널 모드 스레드의 시작점이 됨

- system idle process : cpu의 잔여 프로세스 처리량을 %로 나타낸 값

- taskmgr : 작업관리자

- wdfmgr.exe : 윈도우 미디어 플레이어 10 이상 설치했을때 생성됨

- winlogon.exe : winnt 기반 프로세스 사용자 로그온과 로그오프를 관리함

#winnt : 2000,xp 같은 운영체제를 Winnt라 한다.  (NT는 Network)




3.레지스트리 

-윈도우의 설정값들이 저장된느 데이터베이스

-HKEY_CURRENT_USER\Software\microsoft\Windows\CurrentVersion\Run

-HKEY_LOCAL+MACHINE\SOFTWARE\Microsoft\windows\Currentversion\Run


출처 == 12sec



'i2sec > System hacking' 카테고리의 다른 글

백도어 탐지  (0) 2014.04.27
백도어(Backdoor)  (0) 2014.04.27
SetUID  (0) 2014.04.27
Unix & Windows 인증 구조  (0) 2014.04.27
패스워드 크래킹  (0) 2014.04.23

주의 사항!!!

2014. 4. 18. 22:04

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

하... 역시나...

2014. 3. 31. 22:30

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

START...

2014. 3. 28. 19:56

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