Using objdump. Disassembly. Diassembly 위는 간단한 C 소스이고, 컴파일한 바이너리 = [ Object file and 실행 파일 ] 파일이 있을 때, 이 바이너리 파일을 Disassembly할 때 objdump를 사용하면 된다. $gcc -c -g hello.c ==> -c로 object 파일만 생성하면서, 소스 코드를 같이 보기 위해 -g 옵션으로 디버그 정보를 추가해서 컴파일한다. $objdump -d -S hello.o ==> -d는 disassemble을 하겠다는 옵션이고, -S는 가능하면 소스와 같이 출력하라는 뜻. 컴파일할 떄 -g 옵션으로 컴파일하지 않았다면, 소스는 출력되지 않는다. ==> -S 대신 -I 옵션으로 사용할 수 있는데, 소스 코드 대신 소스 코..
#Tip
Create a shellcode. 쉘 코드란 함수의 return address를 임의의 주소로 변경할 경우 임의의 주소에 있는 프로그램을 실행시킬 수 있다.임의의 주소에 프로그램이 있으려면 프로그램이 실행되어 있어야 한다.그 중 가장 강력한 기능을 가지는 shell을 실행시키는 작은 프로그램들을 일반적으로 shellcode라고 한다. 쉘 코드 생성하는 과정. 1. C코드의 구조를 이해.2. 함수의 사용법 확인.3. 함수의 사용법에 따라 어셈블리어 코드 작성.4. Object 목적 코드를 작성.5. 실행 파일을 작성.6. objump 프로그램을 이용해 OP code를 추출. 7. 16진수로 문자열을 변경해서 쉘 코드를 작성. 물론 이 순서대로 할 필요는 물론 없지만, 개인적으로는 이 순서를 정형화시키는 ..
Vim plugin. 주로 language의 syntax highlight 및 편집 기능 같은 것 사용하다가,연관된 것 있나 검색하다가 플러그인을 알게 되었다. 사용하는 언어 선택 후 generate 버튼 눌러주면 generate.vim 파일을 다운받을 수 있다.이거를 홈 디렉터리(linux 기준)로 복사한 후 이름을 .vimrc로 변경해주면 사용할 수 있다.그다음 vim 명령 실행하면 자동적으로 플러그인 설치가 진행한다. cf) 이전에 플러그인을 설치한 적이 없거나, curl이 깔려있지 않다면,sudo apt-get install curl로 curl 설치해주면 된다. 아래 링크로 들어가면 된다. https://vim-bootstrap.com/
About malloc() and free(). malloc(10)이라는 호출은 '최소' 10byte의 공간을 확보하고, 확보된 공간의 첫 주소를 반환한다.따라서 malloc이 리턴한 주소가 1000이라면, 1000부터 1009번지까지는 안전하게 사용할 수 있다고 보장할 수 있다. 단, 1010번지 이후의 주소에 대한 접근은 안전이 보장되지 않는다.물론, 보통의 경우는, malloc()계열의 함수는 일정크기의 memory chunk 단위로 할당을 수행한다. 즉, malloc(1) 이라는 호출이 있을 때, 1바이트 만을 할당하는 것은 비효율적이기 때문에 환경에 따라 다르지만, 예를 들어, chunk의 크기가 64바이트라면, 그 미만의 크기는 64바이트로 일괄적으로 할당하곤 한다. 즉, 안전하게 접근할 수 ..
Socket Programming Concepts. 소켓 프로그래밍은 네트워크 프로그래밍에서 나온 것으로 네트워크 프로그래밍이란 원격지의 데이터를 주고 받을 수 있는 프로그램을 만드는 것을 뜻한다.소켓(Socket)은 원격지의 두 호스트간 연결의 매개체가 되는 소프트웨어 차원의 개념을 말한다.이 연결의 매개체가 되는 소켓을 만들어주는 것이 바로 소켓 프로그래밍이라고 할 수 있다.일단 소켓 프로그래밍에 사용되는 함수들은 아래와 같다. =========================================socket => 소켓 생성.bind => 주소 부여.listen => 대기.accept => 연결 확인 및 수신.connect => 접속.read => 읽기.write => 쓰기. 서버 측 소켓 프로그..
GDB simple usage. gdb를 사용하는 목적은 메모리를 살펴보기 위해서다.일단 메모리를 살펴보는 방법을 알아보자. gdb에서는 x(examine) 명령을 이용해서 메모리를 살펴볼 수 있다.x/(옵션들의 조합) 데이터를 8진법으로. x => 데이터를 16진법으로 [자주 쓰인다]. u => 데이터를 10진법으로. t => 데이터를 2진법으로. 2) 데이터를 보여주는 단위를 결정하는 옵션.b => 1바이트 단위로 보여준다. (Byte) [기본]h => 2바이트 단위로 보여준다. (half word)w => 4바이트 단위로 보여준다. (word)g => 8바이트 단위로 보여준다. (giant) 3) Etc....i => 역셈블된 명령어의 명령 메모리를 보여준다.c => 아스키 표의 바이트를 자동으로 ..
Assembly Handle Foundation. 어셈블리 핸드레이 => 어셈블리어를 C언어로 복원시키는 것.보통 바이너리를 디버거로 실행하면 바이너리에 대한 어셈블리 코드가 나온다.어셈블리 코드는 경험이 많은 사람이 아니면 파악하기 힘들다.그래서 보통 IDA를 사용해서 IDA의 강력한 기능 중에 하나인 Hexray 기능을 이용해서 수월하게 진행할 수 있다.근데 IDA도 완벽하지는 않고, 수작업을 통해 변환된 코드를 수정할 일이 많이 필요하므로,결국 어셈블리 핸드레이에 익숙해져야 한다. 기본적인 어셈블리 명령어.Push => 스택에 특정 값을 넣고, esp-4.Pop => 특정 값에 esp가 가리키는 값을 넣고 esp+4.nop ==> 아무것도 하지 않는다. 메모리에 빈 공간이 없게 해야 시스템에서 바이..
Installing pwntools. apt-get install python2.7 python2.7-dev python-pip. pip install pwntools. apt-get install libcapstone-dev.