문제:
이 프로그램은 Key파일을 필요로 하는 프로그램이다.
'Cracked by: CodeEngn!' 문구가 출력 되도록 하려면 crackme3.key 파일안의 데이터는 무엇이 되어야 하는가
Ex) 41424344454647
(정답이 여러개 있는 문제로 인증시 맞지 않다고 나올 경우 Contact로 연락주시면 확인 해드리겠습니다)
일단 CRACKME3.KEY 라는 파일이 필요한 듯 하다.
그리고 그 key 파일이 18(12)만큼의 바이트가 있는지 확인하는 듯 하다.
이렇게 저장을 하고 실행해보니 잘 읽음을 확인했다.
다음과 같은 알고리즘이 나왔다.
ESI와 BL값을 세팅함을 확인할 수 있었다.
- BL에 0x41 값 저장
- ESI의 1byte를 AL 레지스터에 저장
- AL과 BL를 XOR하고 AL에 저장
- AL 값을 파일 내용이 저장된 공간에 저장
- ESI, BL 값 1 증가
- EAX 레지스터의 값을 0x4020F9의 주소에 있는 값에 더한다.
- AL 값이 0이면 반복문 종료
- CL 값 +1
- BL과 0x4F 비교(BL 레지스터의 값이 0x41부터 시작하므로 최대 15번 수행됨을 알 수 있다.)
하고 같지 않다면 반복
이 알고리즘은 CRACKME파일 안에 있는 문자열을 A-O까지 XOR연산을 한뒤에 연산값을 누적시킨다
이 값하고 나머지 4자리 값하고 같아야 한다고 한다.
그리고 리턴후에 여기로 온다.
여기서 CRACKME3.KEY 파일의 마지막에 0x12345678와 어떠한 연산을 한다고 한다.
DWORD가 있는 것을 보니 4바이트로 함을 알 수 있다.
여기서 문제를 다시 생각해보면, 결과가 CodeEngn이 되도록
CRACKME3.KEY 파일의 내용을 바꿔줘야 한다.
위의 알고리즘을 c언어로 코드를 짜 실행시켜 보면 정답 문자열을 얻을 수 있다.
이에 따라 KEY의 값을 바꿔준다.
이제 Ollydbg를 또 실행해보면 4020F9 덤프창 내용이 바뀌었음을 알 수 있다.
이에 따라 뒤의 4글자도 바꾸면 된다.
'리버싱' 카테고리의 다른 글
[codeengn]코드엔진 Advance RCE L02 (0) | 2020.08.13 |
---|---|
[codeengn]코드엔진 Advance RCE L01 (0) | 2020.08.12 |
[Reversing.kr]Easy crack 1번 (0) | 2020.08.07 |
[codeengn]코드엔진 Basic RCE L19 (0) | 2020.08.06 |
[codeengn]코드엔진 basic RCE L17 (0) | 2020.08.05 |