티스토리 뷰

CodeEngn Basic RCE의 9번 문제입니다.






해당 프로그램의 StolenByte를 구하는 문제입니다.


※StolenByte란?


패커가 위치를 이동시킨 코드로써 보호된 프로그램 코드의 윗부분입니다. 이동된 코드들은 OEP 주소로 점프하기 전에 PUSH 됩니다. 이 부분의 명령어는 할당받은 메모리 공간에서 실행됩니다. 만약 StolenByte를 복구하지 못하고 덤프한다면 실행 파일이 작동하지 않을 수 있습니다.


먼저 파일을 다운로드 받아보겠습니다.






'09.exe'라는 이름의 파일입니다.


실행시켜보면..







위와 같은 메시지를 띄웁니다.


이제 프로그램 분석을 시작하겠습니다.


먼저 PEID로 파일의 정보를 보겠습니다.






UPX로 패킹 되어 있군요.


UPX 언패킹 툴로 언패킹 한 뒤 실행시켜보겠습니다.






StolenByte를 복구하지 않고 언패킹하여 실행했기 때문에 오류가 나타나는군요.


이제 StolenByte를 복구하기 위해 언패킹 되지 않은 파일을 올리디버거로 분석하겠습니다.






OEP 주소로 이동을 했는데 OEP 주소 위가 비어있군요.


저곳이 StolenByte가 있어야 하는 위치인 것으로 보입니다.


StolenByte는 OEP 주소로 이동하기 전에 PUSH가 되므로 OEP 주소로 이동하기 전 위치로 가서 확인해보겠습니다.






OEP 주소로 이동하는 점프문위에서 3개가 나란히 PUSH가 되고 있군요.


저것들이 StolenByte로 보입니다.


이제 StolenByte를 복구해보겠습니다.






StolenByte를 복구했습니다.


이제 올리덤프를 이용해서 덤프하겠습니다.






앞에서 OEP 주소가 1000으로 변경되었으니 수정하고 덤프를 합니다.






이제 올바르게 실행이 됩니다.


코드엔진 사이트에 StolenByte를 인증해주면...








'Reversing > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE - Level 11 풀이  (109) 2017.11.08
[CodeEngn] Basic RCE - Level 10 풀이  (107) 2017.11.07
[CodeEngn] Basic RCE - Level 08 풀이  (126) 2017.11.03
[CodeEngn] Basic RCE - Level 07 풀이  (121) 2017.11.03
[CodeEngn] Basic RCE - Level 06 풀이  (108) 2017.11.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함