전체 글

전체 글

    Data Structure - Sorting ( Quick Sort )

    Data Structure - Sorting ( Quick Sort )

    Quick Sort quick sort는 불안전 정렬 알고리즘의 하나로, 평균적으로 매우 빠른 수행 속도를 자랑하는 비교 정렬에 속합니다. 분할 정복 알고리즘의 하나로, 평균적으로 매우 빠른 속도를 자랑하는 정렬 방법입니다. 합병 정렬(merge sort)와 달리 퀵 정렬은 리스트를 비균등하게 분할합니다. 분할 정복(divide and conquer)방법 문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략입니다. 분할 정복 방법은 대개 순환 호출을 이용해서 구현합니다. 과정 설명 리스트 안에 있는 한 요소를 선택합니다. 이렇게 고른 원소를 피벗(pivot)이라고 합니다. 피벗을 기준으로 피벗보다 작은 요소들은 모두 피벗의 왼쪽으로 옮겨지고 피벗보다 큰 요소..

    Data Structure - Sorting ( Insertion Sort )

    Data Structure - Sorting ( Insertion Sort )

    sequential Search sequential search는 리스트 레코드를 left-to-right order로 비교하면서 하나의 값을 찾는 것입니다. /sequentialSort.c #include #include int seqSearch(int a[], int k, int n) { int i; for (i = 1; i = n) return -1; return i; } int main(void) { int sortArr[100] = {0}; int count = 0; FILE *fp_read = fopen("sort.txt", "r"); while ((fscanf(fp_read, "%d", sortArr + count) != EOF)) {..

    [ Reverse Engineering ] - ABOUT

    [ Reverse Engineering ] - ABOUT

    리버스 엔지니어링이란 엔지니어링이란 완성품과 이를 구성하는 부품들의 기능과 설계를 고안하고 제작하는 과정을 말합니다. 이와 대비되는 리버스 엔지니어링(Reverse Engineering)은 용어의 '리버스'가 의미하듯, 위 과정을 거꾸로 하는 행위를 말합니다. 완성된 제품을 해체하고 분석하여 구조와 기능, 디자인을 파악합니다. 책에 따라 이를 '역공학'이라고 지칭하기도 합니다. 이를 '리버스 엔지니어링' 또는 '리버싱'이라고도 합니다. 리버싱에도 여러 분야가 있습니다. 야의 성분을 분석하는 것, 자동차의 주행 원리를 이해하는 것, 전자 제품의 회로를 분석하는 것 등에는 각각 생명공학, 기계공학, 전자 공학에 대한 리버싱 기술이 적용됩니다. 이 외데도 대부분의 공학 분야에서는 그에 대응되는 리버싱 기술이 ..

    [ Web Hacking ] - CSRF

    [ Web Hacking ] - CSRF

    CSRF CSRF는 임의 이용자의 권한으로 임의 주소에 HTTP요청을 보낼 수 있는 취약점입니다. 공격자는 임의 이용자의 권한으로 서비스 기능을 사용해 이득을 취할 수 있습니다. CSRF공격에 성공하기 위해서는 공격자가 작성한 악성 스크립트를 이용자가 실행해야 합니다. 이는 공격자가 이용자에게 메일을 보내거나, 게시판에 글을 작성해 이용자가 이를 조회하도록 유도하는 방법이 있습니다. 여기서 말하는 악성 스크립트는 HTTP요청을 보내는 코드로, 아래에서 요청을 보내는 스크립트를 작성하는 방법에 대해 알아보도록 하겠습니다. CSRF공격 스크립트는 HTML또는 JavaScript를 통해 작성할 수 있습니다. 위 Figure5는 HTML으로 작성된 스크립트입니다. 이미지를 불러오는 img태그를 사용하거나 웹 페..

    [ Web Hacking ] - XSS Bypass

    1. 세미콜론(;)이 필터링될 때 2. document.cookie에서 .가 필터링될떄 3. location.href로 이동되는 값을 임의로 변조할 때 또한 -를 이용해 alert함수 실행 후 ^1&&을 통해 리다이렉트 가능 4. ()괄호를 필터링할 경우 (백틱)사용

    [ Web Hacking ] - XSS Bypass

    1. 세미콜론(;)이 필터링될 때 2. document.cookie에서 .가 필터링될떄 3. location.href로 이동되는 값을 임의로 변조할 때 또한 -를 이용해 alert함수 실행 후 ^1&&을 통해 리다이렉트 가능 4. ()괄호를 필터링할 경우 (백틱)사용

    [ Web Hacking ] - XSS

    [ Web Hacking ] - XSS

    XSS XSS는 클라이언트 사이드 취약점 중 하나로, 공격자가 웹 리소스에 악성 스크립트를 삽입해 이용자의 웹 브라우저에서 해당 스크립트를 실행할 수 있습니다. 공격자는 해당 취약점을 통해 특정 계정의 세션 정보를 탈취하고 해당 걔정으로 임의의 기능을 수행할 수 있습니다. 예를 들어, 드림핵 웹 페이지에서 XSS취약점이 존재하면 https://dreamhack.io내에서 오리진 권한으로 악성 스크립트를 삽입합니다. 이후에 이용자가 악성 스크립트에 포함된 페이지를 방문하면 공격자가 임의로 삽입한 스크립트가 실행되어 쿠키 및 세션이 탈취될 수 있습니다. 해당 취약점은 SOP보안 정책이 등장하면서 서로 다른 오리진에서는 정보를 읽는 행위가 이전에 비해 힘들어 졌습니다. 그러나 이를 우회하는 다양한 기술이 소개..

    [ Web Hacking ] - Mitigation: Same Origin Policy

    [ Web Hacking ] - Mitigation: Same Origin Policy

    Same Origin Policy (SOP) Cookie & Session 에서 쿠키에는 인증 상태를 나타내는 민감한 정보가 보관되며, 브라우저 내부에 저장된다고 했습니다. 그리고 브라우저가 웹 서비스에 접속할 때 브라우저는 자동으로 쿠키를 헤더에 포함시켜 요청을 내보낸다고 했습니다. 이 덕분에 우리는 포털 사이트, SNS와 같은 웹 서비스에 한 번 로그인한 후 일정 기간은 로그인하지 않고도 바로 서비스를 사용할 수 있습니다. 하지만 이용자가 악의적인 페이지를 접속했을 떄, ㅇ페이지가 자바스크립트를 사용해 이용자의 SNS웹 서비스로 요청을 보낸다면 어떻게 될까요? 우리가 이해한 대로라면, 브라우저는 요청을 보낼 때 헤더에 해당 웹 서비스 쿠키를 포함시킬 것입니다. 따라서 자바스크립트로 요청을 보낸 페이지..

    Data Structure - Graph ( AOV, AOE Network )

    Data Structure - Graph ( AOV, AOE Network )

    AOV Network AOV는 Activity On Vertex의 약자입니다. 즉 정점이 Activity 작업을 나타내고, 간선이 작업간의 우선순위 관계를 나타내는 방향 그래프입니다. 위의 그래프의 각 정점이 작업을 나타내다고 해 봅시다. 1번 작업이 끝나면 3, 4번 작업을 할 수 있고, 3, 4번 작업이 끝나야 5번 작업을 할 수 있고, 2번 작업이 끝나야 6번 작업을 할 수 있고, 마지막으로 5, 6번 작업이 끝나면 7번을 할 수 있는 식입니다. predecessor는 어떤 작업을 하기 전에 해야하는 작업을 의미하고, successor는 어떤 작업을 하고 나서 해야 할 작업을 의미합니다. 앞에 immediate가 붙으면 바로 전, 바로 후의 작업을 의미합니다. AOV네트워크에서 중요한 것은 어떤 순..

    Data Structure - Graph ( Floyd-Warshall Algorithm && Transitive Closure )

    Data Structure - Graph ( Floyd-Warshall Algorithm && Transitive Closure )

    Floyd-Warshall Algorithm 플로이드-워셜 알고리즘이란 모든 최단 경로를 구하는 알고리즘으로서 정점을 기준으로 하는 알고리즘을 말합니다. 다익스트라는 하나의 정점에서 다른 모든 정점까지의 최단 거리를 구하는 알고리즘이였다면, 플로이드-워셜 알고리즘은 한 번 실행하여 모든 노드 간 최단 경로를 구할 수 있습니다. 모든 노드 간의 최단거리를 구해야 하므로 2차원 adjacent matrix를 구성합니다. 알고리즘은 여러 라운드로 구성됩니다. 라운드마다 각 경로에서 새로운 증간 노드로 사용할 수 있는 노드를 선택하고, 더 짧은 길이를 선택하여 줄이는 과정을 반복해야 합니다. 이를 간단한 코드로 짜보면 다음과 같을 수 있겠습니다. ... for(int k = 0; i < n; k++) { for..