외로운 Nova의 작업실
creackme 시리즈 - 1(crackme6.exe) 본문
리버싱 입문에서 다루지 않은 crackme 시리즈를 리버싱 및 크랙해보려합니다.
- 문제인식
password를 입력하라고합니다. 윗부분에 오직 숫자라고 합니다. 1234를 입력해보겠습니다.
wrong으로 나옵니다. 아무래도 이번문제는 password를 알아내는 문제인 것 같습니다.
- 리버싱
이 프로그램은 아마 우리가 입력한 패스워드를 cmp 한후 값에따라 jmp할 것입니다. 따라서 문자열 wrong을 찾고 jmp문 부분을 추적해서 패스워드를 비교하는 cmp문을 찾아보도록 하겠습니다.
search for -referenced string을 통해 wrong을 찾았습니다. 한번 들어가보겠습니다.
실제가서 jmp문을 추적해보면 0040155c 주소에서 dmp문을 실행해서 wrong으로 가게됩니다.그위에 00401555 주소에 cmp 부분이 있는 것으로 확인됩니다. 이 부분이 바로 패스워드를 확인하는 부분인 것을 알 수 있습니다. 확인을 위해 JNE 부분에 bp를 걸고 zero 플래그를 1로 둔다음 correct 문자열이 나오는지 보겠습니다.
가정이 맞다는 것을 확인할 수 있습니다. 그렇다면 cmp문을 분석해보겠습니다.
CMP DWORD PTR SS:[EBP-4],7F97E56C
지역변수 하나를 7F97E56C와 비교하는 것을 알 수 있습니다. EBP-4 값이 뭔지 한번 확인해보겠습니다.
16진수 4D2는 10진수 1234 인것을 확인할 수 있습니다. 지역변수는 우리가 입력한 값임을 알 수 있습니다. 그렇다면 16진수 7F97 E56C는 10진수 몇일까요? 2,140,661,100 입니다. 이 숫자를 한번 입력해보겠습니다.
correct로 맞다고 뜹니다. 이제 크랙해봅시다.
- Crack
JNE 다르면 점프하는 것을 JE로 같으면 점프하는 것으로 변경해줍니다. 저장후 실행해보겠습니다.
'Computer App Penetesting > Reversing' 카테고리의 다른 글
C++와 어셈블리어 (0) | 2023.01.23 |
---|---|
리버싱 엔지니어링 바이블 - 1(함수 호출 규약) (0) | 2023.01.18 |
리버싱 입문 - 11(공부 종료) (0) | 2022.12.27 |
리버싱 입문 - 10(shellcode injection) (0) | 2022.12.22 |
리버싱 입문 - 9(rena 20강) (1) | 2022.12.22 |