문제:OEP를 찾으시오. Ex) 00401000 / Stolenbyte 를 찾으시오.
Ex) FF35CA204000E84D000000 정답인증은 OEP+ Stolenbyte
Ex ) 00401000FF35CA204000E84D000000
먼저 문제 파일을 실행시켜보겠습니다.
키파일이 있는지 확인하는 프로그램이라고 생각됩니다.
확인을 눌러보니 파일을 찾을 수 없다고 합니다.
이 문제에서 원하는 답은 OEP와 StolenByte를 찾는 것이므로 패킹이 되어있을 것으로 예상되지만 정확한 정보를 얻기 위해서 PEiD로 열어보겠습니다.
UPX로 패킹된 것을 확인할 수 있습니다.
패킹에 대한 내용은 여기를 참고해주세요.
https://brainfreeee.tistory.com/33
UPX언패킹 도구를 이용해서 패킹을 풀 수도 있지만 OllyDBG를 이용해서 직접 패킹을 풀고 OEP와 StolenByte를 구해보겠습니다.
먼저 PUSHAD를 실행시킵니다.
그리고 변경된 ESP의 값을 메모리의 주소로 해서 이동한 다음 그 주소에 HWBP를 걸어줍니다.
그리고 F9를 이용해서 실행시키면 POPAD 다음 줄에서 멈추게 됩니다.
메시지 창에서 봤던 문자열과 약간의 명령어들, OEP로 가는 JMP가 보입니다.
일단 JMP를 통해서 OEP로 가보겠습니다.
코드의 윗부분이 NOP으로 채워져 있는 것을 확인할 수 있습니다.
원래 저 자리는 OEP로 점프하기 이전에 있던 명령어들이 있어야 할 자리입니다.
이 상태로 덤프를 떠보겠습니다.
덤프와 언패킹에 대한 내용은 여기를 참고해주세요.
https://brainfreeee.tistory.com/34
플러그인을 실행시키면 이런 창이 뜹니다.
Entry Point의 값을 00001000으로 바꿔주고 "Dump" 버튼을 눌러줍니다.
경로는 적당히 지정해줍니다.
그리고 덤프 된 프로그램을 실행시키면 오류가 발생합니다.
오류를 해결하기 위해서 LordPE를 이용해보겠습니다.
"Rebuild PE" 버튼을 눌러줍니다.
그리고 덤프 된 프로그램을 선택합니다.
이제 프로그램을 실행시켜보겠습니다.
프로그램이 실행은 되지만 오류가 발생한 것을 알 수 있습니다.
그 이유는 이 프로그램에 StolenByte가 적용되어 있기 때문입니다.
StolenByte에 대한 내용은 여기를 참고해주세요.
https://brainfreeee.tistory.com/35
이 문제를 해결하기 위해서는 덤프를 뜨기 전에 OEP이전에 있던 PUSH들을 OEP로 옮겨야 합니다.
이 부분이 OEP로 옮길 코드들입니다.
NOP를 더블클릭하거나 스페이스바를 이용하면 코드를 수정할 수 있습니다.
코드를 수정하는 것을 완료했습니다.
이제 수정한 코드를 덤프 떠보겠습니다.
Entry Point의 값만 00001000으로 바꿔주시고 "Dump" 버튼을 누릅니다.
그리고 LordPE를 이용해서 오류가 발생하지 않게 해 줍니다.
이제 프로그램을 실행시키면 정상적으로 실행됩니다.
이 프로그램의 OEP는 00401000이고 StolenByte는 6A0068004020006812204000이므로 정답은 004010006A0068004020006812204000이 됩니다.
Flag: 004010006A0068002040006812204000
'CodeEngn Write Up > Basic' 카테고리의 다른 글
CodeEngn Basic RCE L13 Write Up (0) | 2022.03.11 |
---|---|
CodeEngn Basic RCE L12 Write Up (1) | 2022.02.21 |
CodeEngn Basic RCE L10 Write Up (1) | 2022.02.10 |
CodeEngn Basic RCE L09 Write Up (1) | 2022.01.05 |
CodeEngn Basic RCE L08 Write Up (1) | 2021.10.05 |