일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- bee-box
- network
- Webhaking
- reversing
- System
- 소프트웨어
- 웹
- 비박스
- 모의해킹
- ftz
- Web
- TCP
- 소프트웨어보안
- XSS
- dreamhack
- 해킹
- 순서도
- WarGame
- 알고리즘
- 네트워크보안
- 시스템
- 네트워크
- hacking
- 시스템해킹
- 워게임
- 웹해킹
- 드림핵
- webhacking
- CodeEngn
- 리버싱
- Today
- Total
목록Reversing/Wargame (35)
Without a Break

crackme4 실행 파일을 실행하면 시리얼을 입력하는 창이 나온다. 올바른 시리얼을 찾는 것임을 알 수 있다. 전체 모듈을 살펴보자 전체 모듈을 살펴보면 문자열을 비교하는 함수가 있는 것을 알 수 있다. 해당 위치로 이동하여 브레이크 포인트를 걸어주고, 엔트리 포인트로 돌아와 코드를 실행한다. 문자열에 아무거나 입력해주고, 계속 진행을 하다보면 브레이크 포인트의 위치로 온다. 이 때, 레지스터 값의 변화를 잘 보면 “2145440” 문자열과 비교하는 것을 알 수 있다. 이를 입력하면 올바른 시리얼임을 알 수 있다.

crackme#1을 실행하면 위와 같은 팝업창이 순서대로 뜬다. 실행하면 실패 문자열 "Nah... This is not a CD-ROM Drive!"이 뜨는데, 이를 성공 문자열로 바꾸는 게 이번 문제다. *어셈블리 명령어 참고 명령어 설명 PUSH 스택의 값을 입력 CALL 지정된 주소의 함수를 호출 INC 값을 1 증가 DEC 값을 1 감소 JMP 지정된 주소로 점프 CMP 주어진 두개의 operand 비교 - Sub 명령어와 동일하나 operand 값이 변경되지 않고 EFLAGS 레지스터만 변경됨 (두 operand의 값이 동일하다면 SUB 결과는 0이고 ZF=1로 세팅됨) JE 조건 분기(Jump if equal) - ZF=1이면 점프 디버거로 실행 파일을 열면 위와 같이 뜬다. 실행 흐름은 다..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.

문제 파일을 실행하면 팝업창이 뜬다. 임의로 시리얼을 입력하니 위와 같은 팝업창이 떴다. 문자열을 확인하니 성공 문자열을 확인할 수 있었다. 성공 문자열의 위치에서는 별 소득이 없었다. 모듈을 살펴보니 비교함수를 찾을 수 있었다. 해당 위치로 이동해서 BP를 걸어두고 코드를 다시 실행했다. 코드를 실행하니 해당 위치에서 시리얼을 발견할 수 있었다.

x32dbg로 문제 파일을 열어 줬다. 문자열을 확인해보니 아무것도 찾지 못해 시리얼은 입력한 상태로 확인해보기로 했다. 코드를 실행하면 위와 같이 팝업창이 뜬다. Name은 CodeEngn, 시리얼은 임의로 입력해줬다. Error창이 뜬다. 여기서 확인을 누르면 빈 화면이 되니 확인을 누르지 않고 코드를 살펴보자 성공 문자열을 발견할 수 있었다. 해당 위치로 이동하니 위쪽에 내가 입력한 시리얼과 정답을 비교하는 것을 발견할 수 있었다

문제 파일을 디버거로 실행 후, F8로 코드 진행을 하면 위와 같이 시리얼을 입력할 수 있는 팝업창이 뜬다. 문자열을 확인해보면 성공했을 때의 문자열을 볼 수 있다. 해당 위치로 이동해봤으나 별 소득은 없었다. 성공 문자열의 위치에서 위쪽을 살펴보니 ID가 3글자 이상이어야 한다는 것을 알 수 있다. 코드에서 큰 소득이 없었으니 일단 진행해보자. ID를 CodeEngn으로 입력하고, 시리얼은 임의로 입력해줬다. 정답이 아니라는 팝업창이 떴다. 확인을 누르고 다시 코드를 살펴봤다. 밑으로 내리다보니 내가 입력한 패스워드와 정답을 비교하는 것을 볼 수 있었다.