본문 바로가기

리버싱

[CodeEngn]코드엔진 Basic RCE L20

반응형

문제:

이 프로그램은 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