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.
The Heap : How do use-after-free exploits work? 힙에서 UAF는 어떻게 작동하느냐는 뜻이다.일단 UAF(User After Free)는 다시 한 번 말하지만, 사용자가 Heap 영역을 잘못 다룰 때 발생하는 취약점으로,즉 Heap 영역을 사용한 후 Free하고 재사용(reallocation)할 경우 일어나는 취약점. Ex) 위의 파일을 실행해보면. Input value = 1234 One's address = 0x8444008 One's value = 1234 Two's address = 0x8444008c Two's value = 1234. 즉 malloc 함수를 통해 Heap 영역에 120만큼 one에 할당한다. 그리고 정수 값을 입력받는다. "1234"를 입력했..
Pwnable.Dragon 풀이. 내 동생을위한 RPG 게임을 만들었다.하지만 그를 속일거야. 나는 이기기가 불가능 해.그가 나에게 너무 화를 내지 않기를 바란다 : p! 라고 써 있다.다운로드 링크가 따로 있고, Running at에 있는 것을 봐서는 UAF과 같이 풀이 방식과 접근 방식이 비슷할 것이다. 일단 dragon 파일을 다운로드하고, 프로그램을 동작하면 영웅 두 종류를 선택할 수 있다. 프리스트와 나이트를 고를 수 있는데, 하나 선택하면 게임이 시작한다. 일단 1번 Priest를 선택하니 위의 화면과 동일하게 떴다.애기 드래곤이 등장했다. 아마 엄마 드래곤(=The Dragon)도 있는 거 같다.임의로 1번을 계속 선택하니까 패배했고, 애기 드래곤은 1판마다 HP를 회복한다.음..........
About IDA shortcut. IDA ShortCut.Names == Shift + F4.Functions == Shift + F3.Strings == Shift + F12.Segments == Shift + F7.Segment registers == Shift + F8.Signatures == Shift + F5.Type libraries == Shift + F11.Structures == Shift + F9.Enumerations == Shift + F10. Data Format OptionsASCII String Style == Alt + A.Setup Data Types == Alt + D. File OperationsParse C Header File == Ctrl + F9.Create A..