linux startup deamon, 리눅스 시작 서비스 관리
- 리눅스 시작 서비스 추가/삭제
$ sudo update-rc.d -f apache2 remove
$ sudo update-rc.d apache2 defaults
- 리눅스 실행중인 서비스 확인
$ service --status-all
Read more
$ sudo update-rc.d -f apache2 remove
$ sudo update-rc.d apache2 defaults
- 리눅스 실행중인 서비스 확인
$ service --status-all
메모리 확인, 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
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 파일을 만들어줘야 한다. 보통 컴파일러를 사용하면 전처리기가 해주는 작업을 비스무리하게 직접하여 .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의 구조체 인자로 받으면 받아지지 않는다.
컴퓨터 사양 확인
Posted by cr3denza on 5/19/2015
/ with No Comments
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
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형,
없는데 인터넷이 된다면 내장형이다
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)
Read more
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
5. _dl_fixup
edi : puts의 offset
esi : &.strlab
eax : &"puts"
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함수)로 넘어감
--------------------------------------------------------------------------------------------
6. _dl_lookup_symbol_x
SYMTAB주소 얻음
lib의 주소 얻음
7. _dl_fixup
edi : puts의 offset
esi : &.strlab
이 두개를 이용해 SYMTAB에서 실제 주소 구해서 GOT에 write
8. _dl_runtime_resolve
puts의 공유라이브러리(실제 puts함수)로 넘어감
--------------------------------------------------------------------------------------------
피드 구독하기:
글 (Atom)
Categories
- programming (17)
- security (46)
- study (22)
- system (35)
Recent 7 Days Popular Posts
-
fedora 원정대 core 3 hell_fire -> evil_wizard evil_wizard.c hint 를 보면 GOT overwritting이 써있다. GOT overwritting 공격을 시도하여 쉘을 얻을 수 있다. ...
-
METASPLOIT 사용법 Metasploit 은 펄스크립트를 사용하는 침투테스트도구이다 . 1. METASPLOIT 경로 metasploit 은 Kali Linux 에 기본적으로 설치되어 있다 . Kali 기준으로 경로는...
-
puts@plt + 0에 puts@plt + 6의 주소가 들어있어서 호출되면 puts@plt+6의 코드가 실행 puts@plt + 11 에서 점프하면 pushl, jmp로 분기된다. pushl로 GOT+4의 주소를 스택에 넣고 GOT+8의 주소로...
-
라이브러리 로딩 - ld.so.conf 라이브러리란 무엇인가? 프로그램에서 공통으로 사용할 수 있는 기능을 포함하고 있는 오브젝트 파일이다. 동적 라이브러리란 무엇인가? 프로그램을 컴파일하여 생성되는 바이너리에 포함하지 않고 바이너리가...
-
프로그램은 실행하면서 많은 함수를 호출한다. 함수가 호출되고 호출받은 함수가 실행되려면 레지스터와 스택을 사용해야 한다. 버퍼오버플로우 공격을 공부하면서 호출된 함수가 어떻게 esp (스택을 관리하는 레지스터)를 백업하는지 어떻게 스택을 독립적으로 ...














