Simple Crack Me | 워게임 | Dreamhack
Simple Crack Me
Description Exercise: Simple Crack Me에서 실습하는 문제입니다. 이 문제는 사용자에게 숫자를 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너
dreamhack.io
1. 시작 단계
프로젝트를 생성해준다. 생성하지 않으면 Tool Chest에 용 그림이 뜨지 않는다.
들어오면 처음에는 프로젝트 폴더가 비어있을 텐데, File에서 Import File을 해서 simple_crack_me를 해준다.
처음엔 여기서 불러오기가 안되길래 Ghidra를 처음부터 다시 깔았는데 꼭 User 폴더에 생성해야한다.
그 이유는 나도 모르겠다;;
2. 문자열 찾기
아마 이 파일을 리눅스에서 실행해보면 비밀번호를 틀렸을 때 나오는 문자열이 있을거다.
그 문자열을 찾아서 메인함수로 이동하는 것이 목표이다.
Search 에서 For Strings...를 눌러주고 Minimum Length를 10으로 늘려준다.
그럼 이런 화면이 뜰 텐데, 그 중 운이 좋게도 가운데에 바로 보이는
"%x is wrong x(\n"을 한 번 클릭해주고 창을 닫는다.
그러면 문자열이 존재하는 위치로 코드가 이동해있다.
3. 참조
오른쪽을 눌러서 맨 밑의 References를 눌러 Show References To Address 를 누른다.
그러면 이런 화면으로 이동하게 되는데
오른쪽 화면을 보면 메인 함수가 디컴파일 된 것을 볼 수 있을 것이다.
4. 메인함수 분석
코드를 분석하면 알 수 있다 시피 입력 값이 local_14에 저장이 되는데
이 값과 0x13371337과 비교한 값이 같으면 bVar1에 true가 저장되면서
"Correct!"가 출력되는 구조로 설계되어 있다는 것을 알 수 있다.
그러면 16진수를 오른쪽 버튼으로 눌러 십진수 형태의 플래그를 발견할 수 있다.
322376503 인 것을 확인할 수 있다.