본문 바로가기

분류 전체보기45

BOF 정리 BOF란? Buffer Overflow 의 약자로 버퍼보다 큰 데이터를 입력했을때 발생하는 취약점이다. 원리를 설명하자면, 공격자가 버퍼를 넘어서는 크기로 입력하여 메모리 임의의 위치에 원하는 값을 써넣는 기법이다. 예를들면 버퍼에 쉘코드를 넣고 ret에 버퍼의 주소를 쓸 수도 있다. pwnable.kr 의 bof 문제를 풀어보겠다. pwnable.kr 에서 받아온 bof.c 의 내용이다. 메인함수에서 func를 호출하고 인자로 0xdeadbeef를 넘겨주고, 우리가 gets로 입력하여 인자로 넘긴 key의 값을 cafebabe로 변조하면 풀리는 문제인 것 같다. bof 를 gdb로 열어보겠다. main을 디스어셈블한 코드인데, 딱히 별 것 없고 func를 호출하는 것 같다. func를 디스어셈블 한 코.. 2016. 7. 17.
어셈블리, 메모리 구조, 함수 생성 및 파기 과정 메모리 구조 어셈블리어mov : Source에서 Destination으로 데이터를 복사한다.add : Destination에 Source의 값을 더해서 Destination에 저장한다.sub : Destination에 Source의 값을 빼서 Destination에 저장한다.push : 스택에 값을 넣는다. ESP의 값이 4만큼 줄어들고 이 위치에 새로운 값이 채워진다.pop : ESP 레지스터가 가리키고 있는 위치의 스택 공간에서 4byte 만큼을 Destination 피연산자에 복사하고 ESP 레지스터의 값에 4를 더한다. 레지스터eax : 산술, 논리연산을 수행한 값이 저장되며 함수의 리턴값이 저장됨.eip : 다음에 실행하여야 할 명령어가 존재하는 메모리 주소가 저장됨.ebp : 스택의 시작지점 .. 2016. 6. 14.
Lower bound Upper bound Lower bound 선형구조의 부분탐색인 이진탐색은 찾고자 하는 값이 없으면 실패한다. 하지만, Lower bound는 찾고자 하는 값보다 이상인 값이 처음 나타나는 위치이다, Lower bound는 같은 원소가 여러개 있어도 상관 없다. 위치를 찾기위해, 이진탐색에서 조금만 바꾸면 된다. 1234567891011121314151617181920212223242526272829303132333435#include int find(int arr[], int f, int s, int e); int main(void){ int i; int f; int n; int arr[10000] = {}; int check = 0; scanf("%d", &n); for (i = 0; i 0) { m = (s + e) /.. 2016. 5. 10.
인접 행렬 그래프, 깊이 우선탐색 (DFS), 너비 우선탐색(BFS) 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816.. 2016. 5. 10.