728x90
반응형

어셈블리어 6

[크래프톤 정글 5기] week03 알고리즘 주차 스무번째 날, 프로시저, 리턴주소, 함수호출, 디스어셈블 코드 실행추적

프로시저(procedure) - 제공되는 인수(parameter)에 따라서 특정 작업을 수행하는 서브루틴 - 프로그래밍에서의 함수(function)과 같다. 또는 메소드, 서브루틴, 핸들러 등.. 모두 프로시저라고 한다. - 소프트웨어에서의 주요 추상화이다. 내부 동작을 숨기고, 프로시저를 통해 사용자가 쉽게 기능을 사용할 수 있게 한다. 프로시저가 실행될 때 처리되어야 하는 많은 과정들 프로시저 P가 프로시저 Q를 호출하고, Q가 실행된 후에 P로 리턴한다고 가정 - 제어권 전달 : 프로그램 카운터는 진입할 때 Q 코드의 시작주소로 설정된다. 리턴할 때는 P에서 Q를 호출하는 인스트럭션 다음의 인스트럭션으로 설정되어야 한다. - 데이터 전달 : P는 하나 이상의 매개변수를 Q에 제공할 수 있어야 하고,..

[크래프톤 정글 5기] week03 알고리즘 주차 열아홉번째 날, CS, 어셈블리어, 레지스터, 오퍼랜드, 메모리 주소, 스택 포인터

Byte : 8bit Word : 16bit Double Word : 32bit Quad Word : 64bit CPU의 16개 범용 레지스터 - 각 범용 레지스터의 크기는 64bit이다. - 16개의 레지스터에 있는, 여러 크기의 하위 바이트 데이터에 대해 연산이 가능하다. - %rsp : 스택 포인터이며, 런타임 “스택의 끝 부분(Top)”을 가리킨다. 레지스터의 역사 8086 - 8개의 16비트 레지스터 - %ax ~ %sp IA32 - 32비트로 확장 - %eax ~ %esp x86-64 - 기존의 8개의 레지스터가 64비트로 확장 (%rax ~ %rsp) - 8개의 새로운 레지스터 추가 (%r8 ~ %r15) 레지스터는 1, 2, 4, 8 바이트 단위로 사용할 수 있다. 8바이트를 사용하는 경우..

IOLI CrackMe 0x02

IOLI CrackMe 0x02 입니다. 리버싱을 통해, 프로그램 password를 알아내야 하는 문제입니다. 저는 리버싱을 위해 radare2 프로그램을 사용하겠습니다. radare 실행 후 aaaa 명령어로 프로그램을 분석해 주었습니다. 함수목록입니다. 특별한 함수는 보이지 않아 main 기준으로 분석하겠습니다. main함수 입니다. 위쪽에서 프로그램 실행 시 문자열을 출력하고 있고, 844e 부분에서 var_ch 위치의 값과 eax값을 비교하고 있습니다. 8451 부분에선 두 값이 일치할 경우, 점프하지 않고 그대로 진행하고 있습니다. (일치하지 않으면 지정된 위치로 점프) 두 값이 일치할 경우의 프로그램 진행입니다. Password OK 문자열을 출력하고 있는데요, 이것을 보아 위쪽 cmp 비교구..

IOLI CrackMe 0x01

IOLI CrackMe 0x01 입니다. 저번 레벨과 마찬가지로 password를 알아내는 문제입니다. r2 -d crackme0x01 -> radare2 프로그램 디버깅 모드로 문제파일 실행 aaaa -> 프로그램 분석 afl -> 함수목록 출력 특별히 보이는 함수는 main 뿐입니다. main함수 기준으로 분석해 보도록 합시다. pdf @ main main 함수입니다. 8400, 8407 : 프로그램 시작 문자열 출력 840c, 8413 : "Password: "문자열 출력 8426 : 사용자로부터 입력받는 부분 842b : 어떤 숫자 2개를 비교하고 있음 8432 : 점프구문, 앞의 비교구문에서 두 값이 동일할 경우 지정된 위치로 점프함 대략 이런 구조입니다. 제가 봤을땐 842b 부분의 cmp d..

IOLI CrackMe 0x00

IOLI CrackMe 0x00 입니다. 리버싱 연습하기 좋은 문제이며, 0x00 부터 0x09 까지 있습니다. 0x00 문제를 실행해 보았습니다. Password 입력을 요구해서 "1234"를 입력하였으나 인증에 실패했습니다. 리버싱을 통해, Password값을 알아내야 합니다. r2 : radare2 프로그램 실행 명령어 -d : 디버깅 모드로 실행 리버싱엔 radare2 프로그램을 사용하겠습니다. aaaa 명령어로 프로그램 분석 후, afl 명령어로 함수 리스트를 출력하였습니다. 눈에 띄는 함수가 main 밖에 없군요. main함수를 기준으로 분석해 보도록 하겠습니다. pdf @ main main 함수입니다. 분석해 보도록 합시다. 이 부분을 보시면, 프로그램 실행 시 출력문이 저장된 부분이란 것을..

IOLI CrackMe 0x03

IOLI CrackMe 0x03 입니다. 리버싱은 한번도 해본 적 없었습니다만.. Leviathan 1번 문제가 리버싱 문제였기에, 리버싱을 공부하기 위해 풀어본 문제입니다. 문제 파일 링크입니다. https://github.com/mattetti/IOLI-crackme GitHub - mattetti/IOLI-crackme: crackme exercises with instructions to learn in a safe environment crackme exercises with instructions to learn in a safe environment - GitHub - mattetti/IOLI-crackme: crackme exercises with instructions to learn i..

728x90
반응형