CTF 9

리버싱 입문 Day 15 - strlen + i 연산 + XOR 구조에서 역산 실수 정리

어제까지 XOR과 index 연산 구조를 계속 반복하면서 익숙해졌다고 생각했는데,오늘 문제에서는 역산 과정에서 실수가 발생했다.단순한 구조였지만,한 번 틀리고 다시 전체 흐름을 확인하면서 이해가 더 명확해진 문제였다.1. 문제 구조전체적인 흐름은 기존과 동일했다.입력을 받는다check 함수로 전달조건 만족 시 Correct기드라에서 확인한 핵심 부분은 다음과 같다. CALL strlenCMP RAX, 0x6 입력 길이는 6으로 고정되어 있다.2. key 값메모리에서 key 값은 다음과 같이 확인된다. MOV dword ptr [RBP + local_13], 0x4f4d4745MOV word ptr [RBP + local_f], 0x5b51 리틀엔디안 기준으로 정리하면:0x45, 0x47, 0x4d, 0x..

카테고리 없음 2026.04.27

리버싱 입문 Day 14 - XOR + index + offset 구조 정리

어제 문제에서 XOR과 index 연산이 섞인 구조를 한 번 정리했고,오늘은 비슷하지만 조금 다른 형태의 문제를 하나 더 풀어봤다. 겉보기에는 거의 동일한 구조인데,막상 분석해보니 헷갈리는 포인트가 하나 더 추가된 형태였다.1. 문제 구조이번 문제 역시 기본 흐름은 크게 다르지 않았다.입력을 받는다check 함수로 전달조건 만족 시 Correct이제는 구조 자체는 거의 자동으로 보이는 수준이다.기드라로 확인한 부분은 다음과 같다.CALL strlenCMP RAX, 0x8 이번에는 입력 길이가 8로 고정되어 있었다.2. key 값문자열 형태로 key가 바로 보였다."lbh#qf~m" 이제는 key 찾는 것도 크게 어렵지 않은 단계까지 온 것 같다.3. 핵심 연산이번 문제의 핵심은 아래 부분이었다.ADD E..

카테고리 없음 2026.04.25

리버싱 입문 Day 13 - XOR + index 구조의 CTF 문제 분석

어제에 이어서 오늘도 CTF 스타일의 간단한 Crackme 문제를 하나 더 풀어봤다.어제 문제에서 느꼈던 핵심은“단순한 구조를 끝까지 밀고 가는 것” 이었고,오늘은 그 연장선에서 XOR과 index 연산이 섞인 형태를 직접 확인해보는 과정이었다. 1. 문제 구조 이번 문제 역시 기본적인 구조는 동일했다.main에서 입력을 받는다check 함수로 전달된다조건을 만족하면 Correct 출력문제를 c로 나타내면 다음과 같은 구조 기드라로 분석해보니 전체 흐름은 익숙한 형태였다.CALL strlenCMP RAX, 0x9 즉, 이번에도 입력 길이는 9자리로 고정되어 있었다.이 부분은 이제 거의 자동으로 보이는 수준이다. 2. 키값 확인이번 문제에서도 key는 코드 내부에 고정된 값으로 존재..

카테고리 없음 2026.04.24

리버싱입문 Day 12 - CTF Crackme와 유사한 구조 분석

지금까지 Ghidra를 이용한 정적 분석을 계속 진행해왔다.처음에는 어셈블리어를 전부 이해하려 하기보다는중요해 보이는 흐름 위주로 따라가는 방식으로 접근했는데,분석을 반복하다 보니 포인터 이동이나 메모리 흐름도조금씩 눈에 들어오기 시작했다.다만, 단순 비교문이 아니라중간에 값이 변형되는 구조(XOR, ADD 등)가 나오면흐름을 한 번에 이어서 보는 게 쉽지 않았다.그래서 기초 패턴을 먼저 정리하면서 접근하고 있었고,오늘은 실제 CTF 문제를 통해그 흐름이 얼마나 적용되는지 확인해보려고 했다.1. 첫 CTF 문제오늘 풀었던 문제는 문자열 검증 구조였다.기드라로 코드를 분석하기 위해 얻은 C언어 프로그램은 (그림)과 같다. 기드라로 분석해보니 구조는 기존에 분석하던 virus와 유사한 파일들과는 달리굉장히 ..

카테고리 없음 2026.04.23

리버싱입문 Day 11 - 첫 CTF 문제, 그리고 놓쳤던 한 가지

[리버싱] Day X - 첫 CTF 문제, 그리고 놓쳤던 한 가지지금까지 Ghidra를 이용한 정적 분석을 계속 진행해왔다.처음에는 어셈블리어를 전부 이해하려 하기보다는중요해 보이는 흐름 위주로 따라가는 방식으로 접근했는데,분석을 반복하다 보니 포인터 이동이나 메모리 흐름도조금씩 눈에 들어오기 시작했다.다만, 단순 비교문이 아니라중간에 값이 변형되는 구조(XOR, ADD 등)가 나오면흐름을 한 번에 이어서 보는 게 쉽지 않았다.그래서 기초 패턴을 먼저 정리하면서 접근하고 있었고,오늘은 실제 CTF 문제를 통해그 흐름이 얼마나 적용되는지 확인해보려고 했다.첫 CTF 문제오늘 풀었던 문제는 문자열 검증 구조였다.처음 접근은 평소 하던 방식 그대로였다.입력 → 분기 → 함수 호출 → 결과 출력이 흐름을 따라가..

카테고리 없음 2026.04.22

리버싱 입문 Day 10 - CTF 입문 및 BOF 기본 개념 정리

지금까지 기드라를 이용한 정적 분석을 계속 진행해왔다.처음에는 어셈블리어를 전부 이해하려 하기보다는중요해 보이는 흐름 위주로 따라가는 방식으로 접근했는데,실제로 분석을 계속하다 보니 포인터의 이동이나메모리에서 값을 넣고 빼는 부분들이 생각보다 쉽게 눈에 들어오지 않았다.특히 단순한 비교문이 아니라중간에 값이 변형되는 구조(XOR, ADD 등)가 섞이기 시작하면흐름을 한 번에 이어서 보는 게 쉽지 않았다.그래도 기드라 정적 분석 자체는 계속 이어갈 생각이지만,조금 더 빠르게 CTF에 적응하기 위해서는기초적인 패턴을 먼저 정리할 필요가 있다고 판단했다.어차피 실제 문제를 풀게 되면 지금처럼 막히는 구간은 계속 나오겠지만,직접 문제를 풀고 성취감을 쌓으면서 접근하는 것이오히려 정적 분석 실력을 더 빠르게 올릴..

카테고리 없음 2026.04.21

리버싱 입문 Day2 - 조건 시점과 역산 흐름으로 crackme 분석하기

어제 리버싱 기초 구조와 helper, 역산 개념을 정리한 상태에서 오늘은 실제로 문제를 풀면서 그 개념들이 어떻게 적용되는지 확인하는 단계로 넘어왔다. 단순히 이해하는 것과 직접 문제를 풀어보는 것은 생각보다 차이가 컸고, 오늘은 그 차이를 느끼는 하루였다. 어제까지만 해도 helper를 식으로 정리하고 역산하면 된다고 생각했는데, 실제 문제를 풀다 보니 그보다 더 중요한 포인트가 하나 있었다. 바로 “조건이 어디에 걸리는가”였다. 처음에는 단순히 input 값이 조건을 만족하면 된다고 생각했지만, 문제를 분석해보니 조건은 대부분 helper 연산 중간 단계의 값에 걸려 있었다. 예를 들어 t = t + 2 이후 t = t ^ 0x20 상태에서 조건이 걸리는 경우, 우리가 확인해야 하는 값은 최종 결과..

카테고리 없음 2026.04.11

리버싱 입문 Day1 - helper와 역산으로 crackme 풀기

약 일주일 정도 리버싱 기초를 공부하면서 이제 막 CTF 문제 풀이에 들어가기 직전 단계까지 왔다. 너무 기초적인 내용들은 따로 정리하기 애매해서, 실제 문제를 풀기 시작하는 시점부터 블로그에 기록을 남기기로 했다. 아직 어셈블리어가 완벽하게 읽히는 수준은 아니지만, 반복해서 보다 보니 코드의 전체 흐름은 어느 정도 눈에 들어오기 시작했다. 오늘 공부하면서 느낀 가장 큰 특징은, 리버싱 문제들이 겉보기에는 복잡해 보이지만 실제 구조는 상당히 단순하다는 점이었다. 대부분의 문제는 입력값을 받아서 특정 연산을 거친 뒤, 조건을 통과하면 최종적으로 key와 비교하는 방식으로 구성되어 있었다. 이 흐름을 정리하면 “input → helper → 조건 → key 비교”라는 하나의 틀로 묶을 수 있고, 실제로 풀어..

카테고리 없음 2026.04.10

리버싱 공부 1주차 정리 – CTF 직전 단계 (Reversing Study Week 1 – Before CTF)

약 일주일 동안 리버싱 기초 공부를 진행했다.처음에는 어셈블리어가 거의 이해되지 않는 수준이었지만, 반복해서 보다 보니 지금은 완전히 해석할 수는 없어도 흐름 정도는 어느 정도 보이기 시작했다.레지스터나 mov, cmp 같은 아주 기초적인 내용들은 따로 기록하지 않았다.지금 단계에서는 개념을 외우는 것보다 전체 흐름을 이해하는 것이 더 중요하다고 판단했기 때문이다. 그래서 오늘을 기준으로 CTF에 들어가기 직전 단계부터 블로그에 기록을 남기기로 했다.현재까지 이해한 흐름지금까지 공부하면서 느낀 리버싱 문제의 기본 구조는 거의 비슷했다.input → 처리(helper) → 조건 → key 비교이 구조를 기준으로 보면 코드가 훨씬 덜 복잡하게 느껴진다. 대부분의 경우 입력값을 한 글자씩 처리하면서, 특정 연..

카테고리 없음 2026.04.09