상세 컨텐츠

본문 제목

[Write-up] CodeEngn Basic RCE 20

Reversing Write-Up/02.CodeEngn Basic

by RACC8N 2020. 1. 22. 18:11

본문

문제 : 이 프로그램은 Key파일을 필요로 하는 프로그램이다.
'Cracked by: CodeEngn!' 문구가 출력 되도록 하려면 crackme3.key 파일안의 데이터는 무엇이 되어야 하는가

 

풀이 : 

프로그램을 실행시키면 다음과 같은 화면이 뜬다.

 

우선 key파일이 필요하다고 조건에 있으므로 Key파일을 하나 생성하겠다.

그리고 디버거를 켜보자.

 

CreateFileA 함수를 볼 수 있으며 여기서 파일명은 Crackme3.key임을 알 수 있다.

 

그리고 밑에 ReadFile로 key파일의 내용을 읽어옴을 예상할 수 있다.

 

Readfile 함수가 호출이 끝나면 cmp [4021A0] 0x12 으로 리턴값과 0x12를 cmp하게 된다.

 

이로인해 파일 안에 문자열이 18바이트 있어야 분기문을 통과할 수 있다는것을 알 수 있다.

 

분기문을 통과하면 다음 함수로 들어오게 된다. 

 

여기서는 Key파일을 읽어 안에있는 문자열을 변경하는 로직이 있다.

 

문자열 18개중 앞에서부터 14개의 문자에 대해 A부터 O까지 매칭시켜 (41~4F) XOR 연산을 하게 된다.

 

즉 첫번째 문자는 A 와 XOR, 두번째 문자는 B와 XOR 하게 된다.

 

XOR한 값들이 by : 뒤에 출력되는 것을 알 수 있다.

 

그럼 CodeEngn이 나오도록 XOR을 역 연산해서 값을 구해보자.

 

해당 값들을 구했고 CodeEngn을 제외한 나머지 6개 바이트는 아무것도 출력되지 않도록 XOR 연산에 똑같은 값을 넣어주었다.

 

내용을 변형시키고 성공할 때 뜨는 MessageBox를 호출하기 전의 분기문까지 갔다.

 

여기서 cmp al 0x1 이 성립해야 메세지를 띄울 수 있으므로 al을 0x1로 바꿔주고 실행시켜보겠다.

 

 

관련글 더보기

댓글 영역