본문 바로가기

[Wargame Write-up]/CodeEngn Challenges

[CodeEngn Challenges] Basic RCE 07



참조하는 문자열로 인증 분기점까지 와서, 어떠한 문자열을 비교하는지 알아본다. GetDlgItemTextA로 저장한 입력값과, GetVolumeInformationA로 드라이브 이름을 저장한 후, 약간의 변환을 거친 문자열을 비교하는 것을 알 수 있다.




다음은 GetVolumeInformation 함수의 Parameter 정보이다(from MSDN)




이를 토대로 breakpoint를 걸고, GetVolumeInformationA까지 진행한다. 40225C에 Volume Name을 저장하는 것을 알 수 있다. 현재 기본 이름인 “로컬 디스크”라 이렇게 저장된 듯 한데, 문제에서 요구한 CodeEngn으로 바꾸겠다.




40225C에서부터 00 전까지 묶은 후, Ctrl+E를 눌러 ASCII 부분에 CodeEngn을 입력하고 남은 부분은 null 문자(00)로 채운다.

  



이제 실행하여 CMP 전까지의 경과를 지켜본다. 이 문자열 뒤에 특정 문자열을 붙이고, CodeEngn 중 앞 4글자, “Code“의 각 글자를 전치시킨다. 


그 후 이 문자열 앞에 또 다른 특정 문자열을 붙이고 입력한 값과 비교한다.