본문 바로가기

High Level Technique/Shellcoding

Libc, Nasm

Libc, Nasm


앞서  ASM 소스코드를 보면 레지스터에 값을 넣고 Syscall Number Table을 확인하여 작성했습니다. 상당히 저급언어에 가깝습니다.

조금 더 프로그래머의 입장에서 편하게 사용할 수 있는 방법이 Libc를 사용하는 방법입니다.




Libc


Libc는 C Library를 말합니다. Libc를 이용하면 조금 더 쉽게? 사실상 쉬운것도 아니지만 조금 더 편하게 작성할 수 있습니다.

문서: https://www.gnu.org/software/libc/manual/html_node/index.html


Libc는 모든 인자 값이 스택에 거꾸로 들어가게 됩니다.

예를 들어, call function(a, b, c, d) 라는 함수 호출을 할 때, push d, push c, push, b, push a 순으로 스택에 쌓여 호출하게 됩니다.

아니, 조금 더 자세하게 말하면 거꾸로 들어가져있는 값을 함수 호출할 때 전달받아 호출 합니다.



간단한 소스코드를 보도록 하겠습니다.





Libc를 사용하기 위해서는 extern을 이용합니다. 9줄을 보게 되면 출력하기 위해서 단순히 printf만을 작성했습니다.

그 전 소스코드는 Syscall Number Table을 확인하여 각 레지스터에 맞게 넣은 후 커널에 넘겨줬죠.


한결 간편해 졌습니다.


또한 printf에 인자를 넘겨줘야 하는데 push message만 하고 있습니다. 앞서 설명한 것처럼 스택에 쌓아두고 함수를 호출하면 된다는 것입니다.

그리고 컴파일 과정에서 조금 달라지는 부분이 있는데, nasm을 이용해 오브젝트 파일을 만든 후 gcc로 오브젝트 파일을 실행파일로 만듭니다.






'High Level Technique > Shellcoding' 카테고리의 다른 글

Hello World Shellcode  (0) 2016.03.13
Shellcoding  (0) 2016.03.13
Prologue, Epilogue  (0) 2016.03.11
Stack  (0) 2016.03.11
GDB 사용법  (0) 2016.03.11