seKUrity_Study : System & Reversing14 [system] crackme 4 이 문제를 풀기 위해서는 1. 값이 들어가는 주소 2. 결과를 결정하는 분기 (주소) 3. 값을 결정하는 주소 4. 시리얼 값이 담겨있는 주소 2023. 4. 6. [System] 함수의 에필로그 프롤로그 함수의 프롤로그와 에필로그를 알아보기 전에 몇 가지를 짚고 넘어가 보자! 먼저, 스택 프레임이란? 한 함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 주소, 함수에서 선언된 지역변수 등이 저장되는데, 그 영역을 그 함수의 스택 프레임이라 한다. 이 스택 프레임들은 함수가 종료되면 스택에서 제거되고 저장해놓았던 '함수를 호출한 지점(RET)'으로 돌아가는데, 미리 말하자면, 이를 에필로그라고 한다. 그림에 있는 EBP와 ESP는 뭘까?? EBP는 스택 상의 한 데이터의 주소가 저장되어 있는 레지스터로, 그 데이터 위부터 한 함수가 실행된 이후의 값들이 쌓인다. 즉, 그 함수의 시작 지점이라고 생각할 수 있으며, 따라서 함수가 종료되지 않는 한 EBP 값은 변하지 않는다. ESP는 스택의 .. 2023. 3. 27. [system 실습] crackme3 해당 위치에서 프로그램 생성 해당 부분에서 창 생성 아무 글자나 넣어서 잘못된 걸 표기하기위해 아무 값이나 asdfasdf 를 넣어주었다. 해당 부분에서 무한 루트를 타는것을 봐서는 여기서 일정 문자열과 맞는지 비교하는 부분인 것 같다. 해당 부분에서 계속 무한루프가 걸려있는걸 확인하고 실행창을 보니 다음과같이 Wrong word!!!가 뜬것을 볼수 있다. 그럼 밑에 문자열인 infinity가 의심스러워 넣어본다면 어떨까? 다음과 같이 maxmin이 뜨는것을 볼 수 있다. 그럼 infinity를 임의의 값으로 수정해서 넣으면 똑같이 maxmin 이 출력될것인가? 다음과같이 똑같이 maxmin이 출력되는걸 확인하였고, infinity가 문제와 관련된 값이라는걸 알 수 있다. 2023. 3. 27. [system] Buffer Overflow Buffer Overflow 란? 버그의 일종. 또는 이를 이용한 공격 방법. 프로그램이 실행될 때 입력받는 값이 버퍼를 가득 채우다 못해 넘쳐흘러 버퍼 이후의 공간을 침범하는 현상. 쉽게 말해 양동이(버퍼)에 물(값)을 받을 때(입력 받기) 물을 너무 많이 받아 바닥에 흘러 넘쳐버리는 것이라고 생각하면 된다. 주로 프로그램이 사용자에게 데이터(주로 문자열)을 입력받을 때 사용자가 말을 곧이곧대로 듣지 않고 이미 준비된 버퍼보다 더 많은 양의 데이터를 입력할 때 발생하나, 해커가 임의로 프로그램의 메모리의 값을(주로 스택) 변조할 때에도 쓰인다. 주로 이 문제는 스택에서 발생하기 때문에 '스택 오버플로(Stack Overflow)'라고도 부른다. Buffer Overflow 공격의 개념 기본적인 버퍼 오.. 2023. 3. 19. [system] x86, x64 register X86 Architecture Intel x86 프로세서는 CISC 아키텍처를 사용합니다. 따라사 고사양 작업이 용이합니다. x86 Registers eax Accumulator 누산기, 산술 연산에 사용 ebx Base register 기본 레지스터, 데이터의 주소를 가리키는 포인터로 사용 ecx Counter register 카운터 레지스터, 시프트/회전 연산과 루프에서 사용 edx Data register 데이터 레지스터 - I/O 포트 엑세스 및 산술 함수에 사용 가능 esi Source index register 원본 인덱스 레지스터, 스트림 명령에서 소스를 가리키는 포인터로 사용 edi Destination index register 대상 인덱스 레지스터, 스트림 명령에서 도착점을 가리키는 포.. 2023. 3. 19. [system 실습] CrackMe2.exe 다음 위치에서 프로그램 시작 해당 부분에서 모듈 등이 불러오면서 프로그램이 시작되는 부분 여기서 창 생성됨 ok를 누를시 아무 반응이 없었고 exit를 누르니 다음과 같은 주소로 오게됨 처음부터 다시 살펴보자는 생각으로 맨 위부터 분석하던 도중 버튼과 관련된 부분을 발견 조금 더 아래로 내려와보니 아스키코드로 다음과같은 문자열이 등장해 정답이 아닐까 하고 삽입해 봄 그랬더니 다음과 같이 SEP 정답이 표시 여기도 스위치와 관련된 단어들이 많이 있는것으로 보아 위에서 특정 스위치를 건들여서 발동시키는 데에는 hackfun이 필요했으며. 눌렀을때의 결과는 sep이 나오는 것으로 추측하고 있음 2023. 3. 19. [system 실습] abex crackme #1.exe abex crackme #1.exe를 올리디버거로 실행시키면 다음과 같이 나온다 여기서 집중할 부분은 오른쪽 위에 cpu들이 연산해나가는 어셈블리어 목록을 집중하면 된다. f8을 누르며 분석하였을때 저렇게 실행되었었다 생각해보니 00401055를 불러올때 d드라이브를 인식했다는 메시지박스를 뛰우는 주소를 대입한다면 가능하지 않을까? 라고 생각하여 다음과 같이 진행하였다. 다음과 같이 실행에 성공한 모습을 볼 수 있다. 정답 파일: \ 2023. 3. 19. [system] Assembly handray 어셈블리 핸드레이에 대해 공부하고 싶어서 구글링한 결과 출처 : https://shayete.tistory.com 3. 핸드레이 & 기본 어셈블리 명령어 Shayete입니다. 3번째 강의는 어셈블리 핸드레이에 대해 포스팅하도록 하겠습니다. 어셈블리 핸드레이는 어셈블리어를 C언어로 복원시키는 걸 의미합니다. C에서 어셈블리어로도 복원시킬 수 있 shayete.tistory.com 여기에 자세하게 설명되어 있어 많이 참고했다. 1. 어셈블리 핸드레이 (Assembly handray) 란 무엇인가? 어셈블리 핸드레이는 어셈블리어를 c언어로 복원시키는 것을 의미합니다. 즉, 핸드레이를 하려면, 기본적인 어셈블리어 명령어를 알아야 합니다 2. 기본적인 어셈블리어 명령어 (intel 형식) push와 pop은 스택.. 2023. 3. 11. [ system ] 여러가지 용어 정리 1. 함수 프롤로그란 함수 프롤로그(Function Prologue)란 함수가 실행될 때 함수의 진입점에서 수행되는 일련의 과정을 말합니다. 함수 프롤로그는 보통 다음과 같은 작업을 수행합니다. 스택 프레임 생성: 함수가 실행될 때 스택에 새로운 스택 프레임이 생성됩니다. 이 스택 프레임에는 함수에서 사용하는 지역 변수, 매개 변수, 복귀 주소 등이 저장됩니다. 이전 프레임 포인터 저장: 이전 스택 프레임의 주소를 저장합니다. 이전 프레임 포인터를 사용하면 함수가 반환될 때 스택 프레임을 제거하고 호출한 함수로 복귀할 수 있습니다. 반환 주소 저장: 함수가 호출될 때 호출한 함수의 반환 주소를 스택에 저장합니다. 이후에 함수가 반환될 때 이 반환 주소를 사용하여 호출한 함수로 복귀합니다. 레지스터 저장:.. 2023. 3. 10. 이전 1 2 다음