메모리 확인, ASLR 설정

- 메모리 보기

/proc/$pid/map

- ASLR 설정하기

임시로 끄기
/proc/sys/kernel/randomize_va_stace0: OFF 1: ON(stack only) 2: ON(stack, heap)
영구적 끄기
sysctl -w kernel.randomize_va_space=0

Read more

c로 작성된 python module 만들기

c로 작성된 python module 만들기

C로 작성된 함수를 파이썬에서 import 해서 사용하기 위해서는 C로 작성된 프로그램 코드를 파이썬이 import할 수 있는 라이브러리 파일로 변환해 주어야 한다. (ubuntu 환경에서 할거임)

swig(Simplified Wrapper and Interface Generator)라는 툴을 사용하면 간단히 라이브러리파일로 만들어 낼 수 있다. swig는 파이썬뿐만 아니라 다른 언어에서도 C코드를 사용가능하게 라이브러리를 만들어주는 툴이다. 

설치
sudo apt-get install swig 
공식 홈페이지
www.swig.org


위의 간단한 코드를 라이브러리로 만들어서 파이썬에서 실행 시켜보자.
ex.c파일을 이용해서 ex.i 파일을 만들어줘야 한다. 보통 컴파일러를 사용하면 전처리기가 해주는 작업을 비스무리하게 직접하여 .i파일을 만들어 줘야 한다.

첫 번째 줄에는 %(module name)이 들어가고
%{
이 부분에는 사용하는 함수들의 선언, 전역변수(구조체)의 선언, define, 헤더파일을 extern으로 선언해준다.
%}
그리고 그 밑에는 그냥 한 번 더써준다. 


ex.c 파일과 ex.i 파일이 준비가 되었다. 이제 swig를 이용해서 만들면 된다.
swig -python ex.i
명령어를 실행하면 ex_wrap.c와 life.py가 생성된다. life는 모듈이름이고 ex는 c코드 파일명이다.
gcc -fpic -c ex.c ex_wrap.c -I/usr/include/python2.7
object 파일 두 개(ex.o ex_wrap.o)가 생성되었다. -I뒤에는 Python.h 를 참조할수 있게 파이썬이 설치된 경로를 넣으면 된다. 나머지 옵션은 man gcc에 들어가면 확인할 수 있다.
ld -shared ex.o ex_wrap.o -o _life.so
_life.so 파일을 뽑아준다. .so 파일이름은 반드시 _(module name)으로 해야한다.
python 을 실행하고 import 해서 사용할 수 있다.
굳~

C로 작성된 함수에서 인자로 포인터를 받는 경우 그냥 느낌에 맞게 넣자(char * 는 string형으로)
ctype의 (c_char_p) 이런걸로 형 맞춰줘도 되지 않는다.

unsigned char * 같은 걸 넘겨주려면 string (char *)으로 넘겨주고 C코드 안에서 인자를 받자마자 강제 형변환을 해버리니 잘 된다. 
ex) argv[1] = (unsigned char *)argv[1]

함수의 결과 값을 return으로 받지 않고 argv의 구조체 인자로 받으면 받아지지 않는다.
Read more

컴퓨터 사양 확인

CPU-Z 라는 프로그램을 사용하여 컴퓨터 사양 조사

CPU-Z 프로그램은 32비트 컴퓨터용과 64비트 컴퓨터용으로 나뉜다. 자신의 컴퓨터에 맞는 버전을 다운로드 받은 후 실행 한다.

내 컴퓨터의 비트는 내컴퓨터 아이콘에서 마우스 오른쪽을 클릭한 후 속성을 클릭하면 확인 할 수 있다.



64비트 운영 체제가 써있으면 64비트다.

CPU-Z_32_DOWNLOAD
CPU-Z_64_DOWNLOAD

CPU-Z를 실행 시킨다






이름에 Intel Core I5-2500K 가 써있다. CPU다.



CPU 칸에 알맞게 받아쓰기 해준다.



Memory 탭으로 이동하면 크기가 보인다. 이것이 총 RAM 이다.



RAM에서 /의 앞의 부분에 받아쓰기 해준다. 이제 RAM의 슬롯 개수를 알아보자. 이것도 물론 어렵지 않다.



SPD 탭으로 가면 메모리 슬롯 선택 부분이 있다. 위 그림의 빨간 박스를 클릭해보면 슬롯의 개수를 알 수 있다.

Slot #1

클릭했는데 이렇게 나온다면 슬롯은 1개가 있는 것이고

Slot #1
Slot #2

이렇게 나온다면 슬롯은 2개가 있는 것이다. 물론 어렵지 않다. 슬롯의 개수를 잘 기억해서 엑셀에 다시 작성해 보자. 확인 결과 나는 슬롯이 2개가 있었고 4G씩 꽃혀 있었다.




CPU-Z로 확인 할 수 있는 사항은 다 확인하였다. 힘든 여정이였다. 이제 좀 더 난이도를 높여 컴퓨터 사양을 확인해본다.

HDD 의 총 용량을 알아 보기 위해 WIN + E 를 누른다. WIN은 윈도우 운영체제를 사용하는 컴퓨터의 키보드에있는 윈도우마크 모양의 키다. 일반적으로는 좌측 컨트롤키와 좌측 알트키의 사이에 존재한다.




우와우 많은 아이콘들이 나와서 머리가 아프려한다. 여기서 우리가 확인할 것은 빨간 네모가 쳐있는 아이콘들이다. 위의 구성은 컴퓨터 마다 전부 다르다!!

기본 구성을 알아보기 위해서는 먼저 USB, 외장하드, 핸드폰등 컴퓨터에 연결된 모든 것들을 전부 뺀다.(전원이나 모니터 선을 빼면 안된다) 그리고 위에서 배운 단축키(WIN + E)를 누른다. 여기서 용량이 표시되는 것들을 더하면 HDD의 총 용량이 된다.
나의 경우 465 + 417 + 49 = 대충 1TB
간단한 수학이다 겁먹지 말자




모델명은 컴퓨터의 케이스에 있는 모든 글들을 읽어보자
삼보가 써있는 컴퓨터 / 삼보가 써있지 않은 컴퓨터로 분류될 것이다
삼보가 써있다면 삼보를 안써있다면 조립을 작성하자

컴퓨터를 다시 탐색해보자.



이런 생김새의 안테나가 USB 에 꽃혀 있다면 USB형,
없는데 인터넷이 된다면 내장형이다




Read more

plt로 got 채우기

puts@plt + 0에 puts@plt + 6의 주소가 들어있어서 호출되면 puts@plt+6의 코드가실행

puts@plt + 11 에서 점프하면 pushl, jmp로 분기된다.
pushl로 GOT+4의 주소를 스택에 넣고 GOT+8의 주소로 분기하는데 여기에는_dl_runtime_resolve의 주소가 있다.
_dl_runtime_resolve 에서 _dl_fixup 을 호출한다.

_dl_fixup 함수에서는 edi에 puts의 offset을 넣고 esi에 .strtab의 주소를 넣는다

(.strtab + offset = 'puts' 문자열이 들어가있다.)
eax에는 'puts'문자열의 주소를 넣고 _dl_lookup_symbol_x 함수를 호출한다.

_dl_lookup_symbol_x 함수에서는 SYMTAB의 주소와 lib의 주소를 얻고 _dl_fixup 함수로 나와서 SYMTAB에서 아까전에 넣어논 esi(.strtab), edi(offset)응 이용해 실제 주소를 구하고 GOT에 write하고 _dl_runtime_resolve 함수로 다시와서 puts함수로 넘어가게 된다.

이런식으로 한번 dynamic linker가 주소를 받아오는 과정을 거치게 되면 다음번에는_dl_runtime_resolve함수로 들어가지 않고 바로 puts@plt에서 바로 실제 puts함수의 코드로 들어가게 된다.
--------------------------------------------------------------------------------------------
1. puts@plt
2. puts@plt+6
3. puts@plt+11
4. _dl_runtime_resolve(GOT+8)
 실행 전에는 GOT+8이 0임, 메모리에 올라가면 GOT+8에 _dl_runtime_resolve의 주소가 들어감
5. _dl_fixup
 edi : puts의 offset
 esi : &.strlab
 eax : &"puts"
 <이놈들을 조작할 수 있으면 원하는 함수를 실행 할 수 있다.>
6. _dl_lookup_symbol_x 
 SYMTAB주소 얻음
 lib의 주소 얻음
7. _dl_fixup
 edi : puts의 offset
 esi : &.strlab
 이 두개를 이용해 SYMTAB에서 실제 주소 구해서 GOT에 write
8. _dl_runtime_resolve
 puts의 공유라이브러리(실제 puts함수)로 넘어감
--------------------------------------------------------------------------------------------
Read more