일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c언어 알고리즘
- abex crack me 1번
- 레나 리버싱
- 오버워치
- abex crack me 2번 문제풀이
- 리버싱
- sa 계정 비밀번호 변경
- 배열
- 빅엔디언
- 리틀엔디언
- 마인크래프트
- C언어
- 배열 정렬
- react native
- abex crack me 5번문제
- UDP daytime
- Reverse Me
- 프론트엔드 개발자
- 알고리즘
- 구조체 함수
- 네트워크 관리사 2급 필기
- 덧셈
- 메이플스토리 M 사전예약
- 안드로이드 백도어
- 1.9.2
- 재밌는 모바일게임
- 암호화폐
- 배열 탐색
- 프로그래밍 언어론
- 구조체
- Today
- Total
Gyejoong's Information
레나 리버싱 - Key file Reverse Me 본문
7번 문제를 실행한 결과입니다. 평가 기간이 만료 되어서 새로운 라이선스를 구매하라는
메시지입니다. 분석을 해보도록 하겠습니다.
위 그림에서 첫 번째로 확인해야 할 것은 CMP 구문입니다. 이 구문에 breakpoint를 설정하고
디버깅을 실행하겠습니다.
EAX값과 -1을 비교하는 것을 확인 할 수 있습니다. EAX는 FFFFFFF입니다. 즉, -1이기 때문에
같은 값이므로 0을 리턴 합니다.
JNZ 구문은 0이 아니면 점프하라는 의미이기 때문에 점프하지 않고 다음구문인 실패 메시지창을 출력하는 구문으로 이동합니다. 위 그림에서 확인할 수 있는 점은 Keyfile.dat 파일을
생성한다는 점입니다. Keyfile.dat을 생성하고 다시 디버깅을 실행해보도록 하겠습니다.
Keyfile.dat을 생성하고 난뒤에는 EAX값이 44인 것을 확인 할 수 있습니다. CMP구문에서
0이 아닌 값을 리턴하기 때문에, 0040109A주소로 점프하게 됩니다.
ReadFile을 통하여 파일을 읽어서 값을 비교하여 일치한지 비교하는 것을 확인 할 수 있습니다. keyfile.dat에 'A‘라는 값을 넣고, 디버깅을 해보겠습니다.
위 그림과 같이 CMP DWORD PTR DS:[402173], 10에서 00402173의 값이 1인 것을
보아, keyfile.dat파일의 개수를 비교하는 것을 확인할 수 있습니다. 16진수로 10이니까 A를 16개 넣고 다시 디버깅을 해보겠습니다.
AL과 16진수 47('G')을 비교하는 구문입니다. 위 AL이 G랑 같으면 ESI를 1증가 시키는
구문입니다. 그리고, CMP ESI 8 구문의 뜻은 G가 8개이상 이여야 성공이라는 뜻이 됩니다.
총 정리하면, 문자의 개수가 16개이고, G의 개수가 8개이면 성공입니다. 값을 넣고 테스트
해보겠습니다.
keyfile의 값을 넣은 결과 성공한 모습입니다.
'Study > 리버싱' 카테고리의 다른 글
abex crack me 5번 문제풀이 (0) | 2017.05.20 |
---|---|
레나 리버싱 Part10.Tut Reverse Me 문제풀이 (1) | 2017.05.20 |
abex - crack me 2번 문제풀이 (0) | 2017.05.20 |