URL : https://ch.codeengn.com/
실행파일 하나가 보인다.
더블 클릭해서 실행 하자
아마 시리얼 키를 입력해서 푸는 문제인 것 같다.
틀리면 나오는 문구이다.
확인을 클릭하면 프로그램이 종료된다.
문제에서 컴퓨터 C 드라이브의 이름이 CodeEngn 일 경우라고 했으니
드라이브 이름을 'CodeEngn'으로 바꿔보자
이제 'OllyDbg' 도구를 이용해 07.exe 파일을 뜯어보자
main을 찾는 방법이 2가지 있다.
첫번째 방법은 함수를 찾는 방법이다.
어셈블리코드 우클릭 -> Search for -> All intermodular calls
함수를 살펴보면 GetVolumeInformationA 함수를 볼 수 있다.
GetVolumeInformation 함수는 지정된 볼륨 정보를 가져오는 함수입니다.
VolumeNameBuffer를 통해 드라이브 명을 가져오는 것을 확인할 수 있다.
00401099 주소에 BP를 걸로 확인을 해보았더니
0040225C에 C드라이브 볼륨명을 PUSH 했다는 것을 알 수 있다.
lstrcatA 함수를 지나고 나면 4562-ABEX 와 CodeEngn 이 합쳐짐을 알 수 있다.
이 코드를 해석하면 DL에 2를 넣어주고 40225C~40225F를 +1 연산을 하며, 총 2회 후 빠져나간다
1회 진행
2회 진행
그리고 실행 하면서 이상한게 보인다.
1회를 실행할 때 "Code"글자가 "Dpef"로 바뀌는 것을 확인할 수 있었다.
2회를 실행할 때 "Dpef" 글자가 " Eqfg" 로 바뀌는 것을 확인할 수 있었다.
코드를 실행하다 보니 사용자가 입력했던 값 String2 그리고 "L2C-5781EqfgEngn4562-ABEX" 값 String1로 되는 것을 알 수 있었다.
lstrcmpiA 함수를 통해 String1과 사용자의 임의의 시리얼 입력 값이었던 "Enter your serial"와 비교 후
일치하지 않으면 점프하지 않고 실패 MessageBoxA를 호출한다.
값이 일치한다면 00401117로 점프하여 성공 구문인 MessageBoxA를 호출한다.
두 번째 방법은 실패 구문을 찾는 것이다.
어셈블리코드 우클릭 -> Search for -> All referenced text strings
실패 문구를 찾아 더블 클릭해서 들어가 보자
위로 올려다 보면 GetVolumeInformationA 함수를 볼 수 있다.
'【 리버싱 】 > [ CodeEngn ] Basic RCE 문제 풀이' 카테고리의 다른 글
[ CodeEngn ] Basic RCE 9 문제 풀이 (0) | 2021.07.25 |
---|---|
[ CodeEngn ] Basic RCE 8 문제 풀이 (0) | 2021.07.23 |
[ CodeEngn ] Basic RCE 6 문제 풀이 (0) | 2021.07.21 |
[ CodeEngn ] Basic RCE 5 문제 풀이 (0) | 2021.07.19 |
[ CodeEngn ] Basic RCE 4 문제 풀이 (0) | 2021.07.19 |