본문 바로가기

분류 전체보기

(26)
[리버싱] PEViewer로 메모장 분석하기 DOS Header 주요 멤머 변수로는 e_magic 멤버면수와 e_Ifanew 멤버변수가 있습니다. e_magic 멤버변수는 DOS Signature로 PE파일을 나타내는 첫 바이트입니다. e_Ifanew 멤버변수는 NT Header가 시작되는 위치의 옵셋을 뜻합니다. e_Ifanew 값이 가리키는 위치에 NT Header 구조체가 존재해야합니다. 앞에 2바이트(e_magic변수)를 봤을 때 4D 5A가 먼저 적힘을 보아 little Endian을 통해, 시작점이 5A4D임을 확인할 수 있습니다. e_Ifanew를 봤을때 NT_Header의 시작점이 0X000000F0임을 알 수 있습니다. DOS Stub DOS 환경에서 실행되는 코드를 가진 영역, 일종의 옵션으로 없어도 파일 실행에 문제는 없습니다...
[리버싱]X86 Assembly X64 어셈블리 언어 기본구조는 명령어와 피연산자로 구성됩니다 ex) move eax, 3 여기서 move가 명령어, eax와 3가 각각 피연산자1, 2 입니다. move는 피연산자1에 피연산자2의 값을 대입하라는 명령어입니다. 피연산자에는 상수(Immediate Value), 레지스터(Register), 메모리(Memory) 총 3종류가 올 수 있습니다. 메모리 피연산자는 []로 둘러싸인 것으로 표현되며 앞에 크기 지정자(Size Directive) TYPE PTR이 추가될 수 있습니다. 타입의 종류 BYTE 1바이트 WORD 2바이트 DWORD 4바이트 QWORD 8바이트 X86-64 어셈블리 명령어 데이터 이동 move dst, src src의 값을 dst에 옮김 lea dst, src src의 유..
[리버싱] Hello World! 어셈블리어 .LC0: .string "Hello World!" main: push rbp // 스택 최상단에 rbp의 값을 쌓음 mov rbp, rsp //rsp의 값을 rbp에 대입 mov edi, OFFSET FLAT:.LC0 // 문자열의 주소를 edi에 저장 mov eax, 0 // eax에 0을 대입 call printf // printf 함수를 호출 mov eax, 0 // eax에 0을 대입 pop rbp // 스택 최상단의 값을 꺼내서 rbp에 대입 ret // 함수 종료
프로그래머스 코딩테스트 입문 DAY12 첫번째 - 모음제거 영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요. 입출력 예 my_string result "bus" "bs" "nice to meet you" "nc t mt y" #include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. char* solution(const char* my_string) { // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요. char* answer = (char*)mallo..
프로그래머스 코딩테스트 입문 DAY11 첫번째 - 주사위의 개수 머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요. 입출력 예 box n result [1, 1, 1] 1 1 [10, 8, 6] 3 12 #include #include #include // box_len은 배열 box의 길이입니다. int solution(int box[], size_t box_len, int n) { int answer = 1; int i; for(i=0;i
프로그래머스 코딩테스트 입문 DAY10 첫번째 - 점의 위치 구하기 사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다. x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다. x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다. x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다. x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다. x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요. 입출력 예 dot result [2, 4] 1 [-7, 9] 2 #include #include #include // ..
프로그래머스 코딩테스트 입문 DAY9 첫번째 - 개미군단 개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요. 입출력 예 hp result 23 5 24 6 999 201 #include #include #include int solution..
프로그래머스 코딩테스트 입문 DAY8 첫번째 - 배열 자르기 정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요. 입출력 예 number num1 num2 result [1, 2, 3, 4, 5] 1 3 [2, 3, 4] [1, 3, 5] 1 2 [3, 5] #include #include #include // numbers_len은 배열 numbers의 길이입니다. int* solution(int numbers[], size_t numbers_len, int num1, int num2) { // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게..
프로그래머스 코딩테스트 입문 DAY7 첫번째 - 특정 문자 제거하기 문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요. 입출력 예 my_string letter result "abcdef" "f" "abcde" "BCBdbe" "B" "Cdbe" #include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. char* solution(const char* my_string, const char* letter) { // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요. char* ans..
프로그래머스 코딩테스트 입문 DAY6 첫번째 - 문자열 뒤집기 문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요. 입출력 예 my_string return "jaron" "noraj" "bread" "daerb" #include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. char* solution(const char* my_string) { // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요. int len = strlen(my_string); char* answer = (char*)malloc(1); ch..