728x90
주어진 프로그램의 OEP를 구하는 문제입니다.
먼저 exeinfope로 까보면
UPX로 패킹이 되어있는 상태입니다. 패킹이 되어있으면 원래 프로그램의 OEP와 달라집니다.
그러므로 프로그램을 직접 분석해서 원래 OEP를 알아내야 합니다.
x32dbg로 동적분석해보겠습니다.
우선 실행해보면
다음과 같이 pushad에서 EP가 걸렸습니다.
이 다음부터는 여러게의 루프문이 나옵니다. 이런 코드가 많이 나오는 이유는 UPX에서 패킹했던 파일들을
언패킹해주는 작업을 한뒤 하나씩 불러와서 프로그램을 실행시켜야 하기 때문이다.
원래 OEP를 확인하려면 pushad 이후에 나오는 popad를 찾아야 합니다.
이것을 찾기 위해서 푸쉬된 스택의 주소를 하드웨어 중단점을 설정해줘야 합니다.
그러면 스택을 pop 할때, 원래 푸쉬했던 스택의 주소를 다시 불러와야하기 때문에, pop할때 중단점에 걸리기 때문입니다.
그렇기 때문에 우선 F8을 눌러서 한단계 진행시키고
스택 최상단에 push된 주소에 하드웨어 중단점을 설정해 줍니다.
그런다음, F9로 실행하면
다음과 같이 popad 에서 중단점에 걸린것을 확인할수 있습니다.
이제 여기서 원래의 OEP를 알수있는데, 밑에보이는 jmp 구문에 있는 주소가 바로 OEP 입니다.
이 주소를 따라가보면 원래 프로그램을 찾을수 있습니다.
답: 1012475
728x90
'워게임 > CodeEngn' 카테고리의 다른 글
[CodeEngn] Basic RCE L10 (0) | 2022.07.02 |
---|---|
[CodeEngn] Basic RCE L09 (0) | 2022.05.19 |
[CodeEngn] Basic RCE L07 (0) | 2022.05.12 |
[CodeEngn] Basic RCE L06 (0) | 2022.05.12 |
[CodeEngn] Basic RCE L05 (0) | 2022.05.08 |