← 목록으로

크랙미(Crackme) 실습 방법론

[Rev] 리버싱 · 작성: 2026-07-19 19:34:18 · 조회 4

크랙미(Crackme)는 리버싱 연습을 위해 일부러 만들어진 프로그램이다. 보통 "정답을 입력하면 성공 메시지를 보여준다"는 단순한 목표를 갖고 있고, 실제 소프트웨어의 라이선스 체크 로직을 축약해놓은 형태가 많다. 앞선 글들에서 다룬 정적/동적 분석 기법을 실전처럼 연습하기 가장 좋은 대상이다.

크랙미를 푸는 표준 절차

1. 실행해서 겉모습부터 확인

무슨 입력을 받는지, 성공/실패 시 어떤 메시지가 나오는지 먼저 눈으로 확인한다.

2. strings로 단서 찾기

strings ./crackme | grep -iE "correct|wrong|success|fail|password"

실패/성공 메시지 문자열을 찾으면, 그 문자열이 어디서 참조되는지가 다음 단계의 목표 지점이 된다.

3. 디스어셈블러에서 문자열 역추적

Ghidra/IDA에서 해당 문자열을 더블클릭하면 "이 문자열을 참조하는 코드 위치(cross-reference)"로 바로 이동할 수 있다. 그 근처의 cmp/조건분기가 정답 체크 로직일 가능성이 높다.

4. 정답 체크 방식 파악

비교 방식은 대체로 세 가지 패턴 중 하나다.

5. 동적으로 검증

정답이라고 생각하는 값을 실제로 입력해서 성공 메시지가 뜨는지 확인한다. 안 되면 3~4단계를 다시 반복한다.

두 가지 접근: 패치 vs Keygen

입문 단계에서는 패치부터 익숙해지고, 익숙해지면 같은 문제를 Keygen 방식으로 다시 풀어보는 걸 권한다 — 같은 문제를 다른 목표로 다시 보면 놓쳤던 부분이 보인다.

연습할 곳

막혔을 때

같은 지점에서 오래 막힌다면, 정적 분석과 동적 분석 중 한쪽에만 의존하고 있지 않은지 점검해본다. 디컴파일된 의사코드만 계속 보고 있었다면 실제 값을 디버거로 찍어보고, 반대로 디버거로 브레이크포인트만 걸고 있었다면 전체 구조를 디컴파일러로 한 번 넓게 훑어보는 식으로 방식을 바꿔보는 게 도움이 된다.

리버싱 카테고리의 글 (9/11)

  1. 리버싱이란 무엇인가: 정적 분석 기초
  2. 어셈블리어 읽기 기초 (x86-64)
  3. 동적 분석: 디버거로 실행 흐름 추적하기
  4. 안티 디버깅 / 안티 리버싱 기법과 우회
  5. 패킹과 언패킹: 실행 파일을 압축/암호화해서 숨기기
  6. Frida로 동적 계측/후킹하기
  7. 안드로이드 앱 리버싱: APK 분석 기초
  8. iOS 앱 리버싱 기초
  9. 크랙미(Crackme) 실습 방법론
  10. PE 포맷 내부 구조: Windows 실행 파일 뜯어보기
  11. 코드 난독화 해제: Control Flow Flattening 분석하기
← iOS 앱 리버싱 기초 PE 포맷 내부 구조: Windows 실행 파일 뜯어보기 →