HackChang

[CodeEngn] Basic RCE L20 문제 풀이 본문

W4RG4M3/R3V3RS1NG

[CodeEngn] Basic RCE L20 문제 풀이

HackChang 2019. 12. 18. 15:48

Basic RCE L20 문제

Basic RCE L20

이 프로그램은 Key파일을 필요로 하는 프로그램이다.
'Cracked by: CodeEngn!' 문구가 출력 되도록 하려면 crackme3.key 파일안의 데이터는 무엇이 되어야 하는가
Ex) 41424344454647
(정답이 여러개 있는 문제로 인증시 맞지 않다고 나올 경우 Contact로 연락주시면 확인 해드리겠습니다)

 

드디어 Basic의 마지막 문제입니다.

프로그램을 실행하면 위와같은 화면이 나옵니다.

따로 기능은 없는 것으로 보입니다.

PEID에 파일을 올려봤습니다.

 

PEID를 통해 어셈으로 제작된 프로그램인 것을 알 수 있었습니다.

올리디버거를 통해 프로그램을 열어봤습니다.

 

보게되면, CreateFile을 통해 CRACKME3.KEY이 있는 경우에 18바이트만큼 문자를 읽는 것을 볼 수 있었습니다.

18바이트 크기의 CRACKME3.KEY파일(123456789012345678)을 같은 폴더에 만들고 다시 올리디버거에 올려봤습니다.

ReadFile을 통해 키파일을 불러온 것을 볼 수 있었습니다.

 

F8로 진행하다 키값이 바뀌는 것을 볼 수 있었습니다.

또한, CRACKKEY3.KEY파일은 돌아와서 4020F9의 값 4바이트와 0x12345678을 XOR연산하는 것을 볼 수 있습니다.

마지막 4바이트는 바뀌지 않은 것을 확인할 수 있었고, 401311에 들어가봤습니다.

XOR연산을통해 ECX와 EAX를 0으로 초기화 시키는 것을 볼 수 있었습니다.

ESI에 키값(123456789012345678)을 넣고, BL에 41을 넣는 것을 볼 수 있습니다.

반복문 분석

- ESI중 1바이트만 AL에 넣습니다.

- BL과 AL을 XOR시킵니다.

- XOR시킨 AL의 값을 ESI의 1바이트에 넣습니다.

- ESI를 1증가 시킵니다.

- BL을 1증가 시킵니다.

- 4020F9의 값에 EAX값을 더합니다.

- 0과 AL을 비교합니다.

- 값이 같으면 00401335(반복문끝)으로 점프합니다.

- CL을 1증가 시킵니다.

- 4F(10진수 : 79)와 BL을 비교합니다.

- 같지않으면 40131B(반복문처음)으로 이동한다.

반복문이 종료되면, ECX를 402149의 값에 넣고, 함수를 종료합니다.

 

즉, BL(41)을 증가시키면서, CRACKME3.KEY의 키값 한 글자씩 읽어봐 XOR연산을 하는 것을 알 수 있다.

 

위의 값의 점프문을 바꾸어 성공적으로 메세지박스가 뜨도록 바꾸고, 키(123456789012345678)를 넣었을 때의

메세지 박스를 확인했습니다.

 

위의 메세지 박스를 확인할 수 있었고, 앞의 14글자가 XOR연산을 하고 !가 붙여 나오는 것을 볼 수 있었습니다.

메세지 박스에 Cracked by: CodeEngn!가 나와야 하므로, CodeEngn의 Hex코드를 찾아봤습니다. (!는 하지않아도 메세지에 출력됨.)

CodeEngn의 Hex코드는 43 6F 64 65 45 6E 67 6E 이고,

 

간단하게 C로 작성한 코드와 결과입니다.

HxD를 통해 KEY파일을 고쳤습니다.

다시 올리디버거로 열어봤습니다.

XOR연산을 통해 CodeEngn이라는 우리가 원하는 문자를 만들었지만

12345678과 4020F9의 XOR연산 값을 알아야해서 4020F9의 데이터값을 확인해봤습니다.

마지막 4바이트는 7B 55 34 12인 것을 알 수 있었고, HxD를 통해 아래와 같이 KEY를 수정했습니다.

수정 후 프로그램을 키게되면 아래와 같은 메세지박스를 볼 수 있습니다.

 

인증방식에 맞게 인증을 하면 인증이 됩니다.

Comments