| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- AWS 3 Tier Architecture
- Database
- 드림핵
- 운영체제
- sql
- AWS 보안 아키텍처 분석
- 악성코드분석
- programmers
- C
- 파일 시스템
- reversing.kr
- crackme
- network
- reversing
- dreamhack
- AWS 사고 사례 분석
- 악성코드 분석
- 리버싱
- Amazon S3
- 프로그래머스
- 버퍼 오버플로우
- operating system
- AWS 침해사고 사례 분석
- terraform
- 네트워크
- AWS 침해 사고 사례 분석
- TryHackMe
- CrackMe 문제
- python
- AWS
- Today
- Total
lhywk 님의 블로그
[실습] crackme2_find_number 본문
문제 바이너리를 실행한다.

패스워드를 입력하는 란이 나오고 아무 패스워드(12345)를 입력하면 wrong이라는 문자열 출력 후 프로그램을 종료한다.
x64디버거로 해당 바이너리를 분석해 본다.

아까 프로그램을 실행했을 때 터미널에 출력된 문자열을 참조하기 위해 따라가 본다.

터미널에서 본 문자열들을 확인할 수 있고 성공했을 때는 correct, good job! :) 명령어가 출력되는 것 같다.
모든 문자열에 중단점을 걸고 실행해 본다.

crackme_find_number.4010C6을 call하고 있는데 특징이 보인다.
문자열을 push하고 call하여 터미널에 찍어내는데 이것은 printf 함수라는 것을 유추해 볼 수 있다.

Enter 입력 후 shift+: 을 하여 레이블을 설정할 수 있고 printf로 등록한다. 그 후 -을 눌러 이 전 명령줄로 돌아온다.

정상적으로 printf 함수 레이블이 등록된 것을 확인할 수 있다.
이제 패턴을 알았으니 401066 이 전까지의 중단점은 해제하고 패스워드 검증 로직을 살펴본다.

add esp, 4 : 직전 push인 printf 인자를 정리한다.
lea eax, [ebp-4]: 입력값 저장할 변수 주소 -> eax 저장
push eax: 2번째 인자: &변수
push "%d": 1번째 인자: 포맷 문자열
이 3개의 어셈블리를 보면 우리의 입력값을 저장할 변수 주소와 포맷 문자열을 입력받는다는 것은 scanf 함수로 생각해 볼 수 있다.
call 4010AF: 2개의 인자를 가지고 scanf 함수를 호출한다.
add esp, 8: 인자 2개 스택 정리
cmp 문에 정답이 있다.
cmp [ebp-4], 7E97E56C: 는 우리가 입력한 변수에 들어있는 값과 7F97E56C(10진수 2140661100)를 비교한다.
다르면 wrong으로 분기하고 같다면 밑에 Correct를 출력할 것이다.

'Malware Analysis' 카테고리의 다른 글
| [실습] crackme4_find_password_type (0) | 2026.07.09 |
|---|---|
| [실습] crackme3_find_input_key (0) | 2026.07.09 |
| [악성코드 분석] Procmon 동적분석 (0) | 2026.07.08 |
| [악성코드 분석] 프로세스/코드 인젝션 (0) | 2026.06.24 |
| [악성코드 분석] 메모리 공격 기법 (0) | 2026.06.24 |