문제 : 이 프로그램은 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로 바꿔주고 실행시켜보겠다.
[Write-up] CodeEngn Basic RCE 19 (0) | 2020.01.22 |
---|---|
[Write-up] CodeEngn Basic RCE 18 (0) | 2020.01.20 |
[Write-up] CodeEngn Basic RCE 17 (0) | 2020.01.20 |
[Write-up] CodeEngn Basic RCE 16 (0) | 2020.01.20 |
[Write-up] CodeEngn Basic RCE 15 (0) | 2020.01.20 |
댓글 영역