본문 바로가기

Layer7

(45)
어셈블리어로 별찍기 section .data STAR db '*' SPACE db ' ' EMPTY db 0x0asection .text global _start_start: mov rax, 1 mov rdi, 1 mov rdx, 1 mov r10, 5 call _print_triangle_done: mov rax, 60 xor rdi, rdi syscall_print_triangle:_print_line: mov r8, 5 sub r8, r10 mov r9, r10_print_spaces: test r8, r8 jz _print_stars mov rsi, SPACE syscall dec r8 jmp _print_spaces_print_stars: test r9, r9 jz _new..
[Dreamhack]Simple-Crack-Me Writeup start 함수의 디컴파일 된 코드이다. 문자열 검색을 했는데 start함수에 나와있는 함수명이 보인다. 들어가서 디컴파일을 진행해본다. 플래그 형식에 맞춰서 입력하면 끝.
[Dreamhack]rev-basic-3 WriteUp main함수에 F5를 눌러 분석 해 본다. 분기문 분석을 위해 sub_140001000를 열어본다. 연산식을 복사해놓고 여기서도 분기문 분석을 위해 byte_140003000을 열어본다. 값들을 이용해 C언어로 코드를 짠다. #include int main() { unsigned char byte_140003000[] = { 0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0xA5, 0x9D }; unsigned char result[24]; for (int i = 0..
[Dreamhack]rev-basic-2 WriteUp 다시 main 함수에 무지성 F5 분기문을 분석하기 위해 sub_140001000함수를 분석해본다. 여기도 분기문이 있는것을 볼 수 있다. 분기문의 값(&aC)  모든 문자를 조합 해 보면 플래그가 나온다.
[Dreamhack]rev-basic-1 WriteUp ida로 rev-basic-1을 연 사진이다. 무지성 F5(PseudoCode)를 눌러본다. 분기문을 분석하기 위해 안에 들어있는 sub_14 ~를 열었다. 무수히 많은 아스키코드들이 보인다. 모두 정리해서 cyberchef를 돌린다. 익스 성공
x86, x64 Calling Convention(함수 호출 규약) 차이점 정리 32비트 함수 호출 규약 cdeclC언어에서 사용되는 방식으로 call하는 쪽에서 스택을 정리한다. stdcallcdecl과 반대로 호출된 함수에서 스택을 정리한다. fastcallstdcall 방식과 같되 함수에 전달하는 파라미터 일부를 스택이 아닌 레지스터를 이용한다. 64비트 함수 호출 규약fastcall 방식 하나만을 이용한다.다만 변형된 fastcall 방식으로 함수 파라미터 4개까지 레지스터에 저장하여 전달한다.
x86_64 함수 호출 규약 프롤로그, 에필로그 정리 스택 프레임이란 함수가 호출되었을 때 그 함수가 가지는 공간 구조이다. 함수가 동작을 종료하고 복귀 주소로 돌아갈 때 스택 프레임은 소멸된다. ESP 레지스터는 스택 포인터 역할을 하고, EBP 레지스터는 베이스 포인터 역할을 한다. ESP 레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 어려워진다. 따라서 어떤 기준 시점 (함수 시작) 의 ESP 값을 EBP에 저장하고 이를 함수 내에서 유지해주면, ESP 값이 아무리 바뀌어도 EBP 를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있게 된다. 1. 함수가 사용할 파라미터를 스택에 넣고 함수 시작지점으로 점프 (함수 호출) 한..
어셈블리어로 Hello World 12번 출력하기 section .data msg db "Hello World", 0ahsection .text global _start_start: mov rax, 1 mov rdi, 1 mov rsi, msg mov rdx, 12 mov r10, 1again: cmp r10, 13 je done syscall mov rax, 1 inc r10 jmp againdone: mov rax, 60 mov rdi, 0 syscall
[LOS]darkelf WriteUp 들어가면 or과 and를 필터링하는것을 알 수 있다. 그냥 wolfman 문제와 똑같이 익스하면 될 것 같다. or -> ||로 치환해서 pw=1'||id='admin 익스 성공
[LOS]wolfman WriteUp 코드를 보면 이전과는 다르게 공백을 필터링하는걸로 보인다. or -> ||로 치환해서 문제를 풀면 될 것 같다. 너무 빠르게 풀었나 싶을정도로 익스 성공