Assembly

    Attack Lab Solution  Phase_1 ~ Phase_5

    Attack Lab Solution Phase_1 ~ Phase_5

    - Code Injection Attacks : CTARGET %rsp를 0x38 만큼 빼주는 것으로 보아 buffer의 크기는 0x38bytes임을 알 수 있습니다. Phase1은 touch1을 호출만 하면 되므로 입력에 0x38bytes 만큼 dummy값을 준 후 touch1함수가 존재하는 주소인 40 18 c5 값을 리틀-엔디안 방식으로 입력해주었습니다. Answer : - Code Injection Attacks : CTARGET Touch2를 실행하고 %edi값과 Cookie값을 비교해서 같은 경우에 통과합니다. Touch2함수를 실행하기 전에 %rdi 레지스터에 Cookie값을 넣어주고 Touch2 함수를 실행해야 합니다. Buffer공간을 0x38만큼 할당 받은 후의 %rsp위치를 보니 0x..

    SystemSoftware - Buffer OverFlow #2

    SystemSoftware - Buffer OverFlow #2

    SystemSoftware - Buffer OverFlow #1 Buffer OverFlow 배열에 할당된 메모리 사이즈를 초과해서 사용하는경우 발생 보안 측면에서 가장 빈번하게 일어나는 이슈 중 하나 대표적인 상황 : input string의 길이를 체크하지 않을 때 가지고 있 hyeo-noo.tistory.com buffer overflow는 무슨 문제를 일으키는지 어셈블리어를 통해 좀 더 자세하게 알아보자 // echo 00000000004006cf : 4006cf: sub $0x18, %rsp 4006d3: mov %rsp, %rdi 4006d6: callq 400680 4006db: mov %rsp, %rdi 4006de: callq 400520 4006e3: add $0x18, %rsp 400..

    Bomb Lab Solution Phase_1 ~ secret_phase

    Bomb Lab Solution Phase_1 ~ secret_phase

    - string comparision 0x555555556a50 에 있는 문자열이 “All your base are belong to us.” 이고, strings_not_equal함수에 해당 문자열을 넘겨주고 입력 받은 문자열과 해당 문자열을 비교해서 같으면 retq로 넘어감을 알 수 있었습니다. Answer : All your base are belong to us. - loops 6개의 숫자를 입력 받고 가장 먼저 입력 받은 수(%rsp)와 1을 비교해서 같지 않다면 bomb입니다. 따라서 첫 번째 숫자는 1임을 알 수 있었습니다. %rsp(입력 받은 배열의 첫 부분)을 %rbx에 넘겨주고 %rbp 에는 배열의 마지막 주소값을 넘겨줍니다. Loop 부분입니다. %rbx는 입력 받은 배열의 현재 in..

    SystemSoftware - Machine data(Assembly) #2

    SystemSoftware - Machine data(Assembly) #2

    구조체가 메모리에 기록되는 방식을 알아보고 어셈블리어가 어떻게 작동하는지 알아보자 struct rec{ int a[4]; size_t i; struct rec *next; }; Linked List의 메모리 구성과 어셈블리 struct rec{ int a[4]; int i; struct rec *next; }; void set_val(struct rec *r, int val){ while(r){ int i = r->i; r->a[i] = val; r = r->next; } } set_val 함수의 while문에 대한 어셈블리어를 알아보자 // %rdi = r // %rsi = val .L11: moveslq 16(%rdi), %rax// %rax에 i값(시작주소 r에서 16만큼 떨어진) 을 넣어준다 mo..

    SystemSoftware - Machine data(Assembly) #1

    SystemSoftware - Machine data(Assembly) #1

    C언어에서 다루었던 포인터연산을 통한 변수 값 참조와 다차원 배열의 특정 위치의 값을 참조하는 방식을 어셈블리어를 통해 깊게 알아보자 int val[5]; 라는 정수형 배열이 있다고 생각해보자 주소값 x x + 4 x + 8 x + 12 x + 16 값 1 5 2 1 3 배열의 메모리 값까지 생각 한다면 위와 같이 구성 되어있을 것이다 x = 배열의 시작주소 예제 1) Reference Type Value val[4] int 3 val int * x val + 1 int * x + 4 &val[2] int* x + 8 val[5] int - *(val+1) int 5 C to Assembly 1. int pnu[5] = {1, 5, 2, 1, 3}; int get_digit(int z[], int id)..