Information Security Study
[CodeEngn] Basic RCE L19 본문
문제: 이 프로그램은 몇 밀리세컨드 후에 종료 되는가
파일을 실행했을 때의 모습이다.
몇 초뒤에 종료된다.
언패킹되어있다.
CFF로 언패킹해주었다.
우클릭>search for>all intermodular calls를 선택해서 모든 명령들을 확인했다.
F9를 눌러보면 제대로 실행이 되지 않는데 함수 목록을 살펴보면 IsDebuggerPresent 함수를 확인할 수 있고, 이 함수 때문에 디버깅이 제대로 되지 않는 것을 확인할 수 있다.
IsDebuggerPresent 함수를 찾았다.
안으로 들어가봤다.
TEST EAX, EAX를 CMP EAX, EAX로 고쳐서 IsDebuggerPresent 함수가 제대로 동작하지 못하도록 했다.
디버깅이 이제 제대로 되므로 프로그램의 실행 시간과 관련 있는 함수들을 탐색해보았다.
timeGetTime 함수는 프로그램의 실행 시간을 구하는 함수이다.
우클릭 > set breakpoint on every call to timeGetTime으로 모든 timeGetTime 함수에 bp를 걸어주었다.
Disassembly 부분을 살펴보니 CALL EDI만 다른 값을 갖는 것을 확인했다. 이것을 더블 클릭했다.
F8로 하나씩 실행하다 보면 이 부분을 반복하는 것을 볼 수 있다.
이 부분이 프로그램의 실행 시간과 관련이 있는 부분이다.
0044D3A까지 내려가면 CMP 명령어를 볼 수 있다.
우클릭>Follow in Dump>Memory address를 클릭했다.
70 2B라는 값을 확인할 수 있다.
이 값을 10진수로 변환하면 11120이라는 값을 얻을 수 있다. 이 값이 프로그램의 실행 시간이 된다.
'Reversing > CodeEngn' 카테고리의 다른 글
[CodeEngn] Advance RCE L01 (0) | 2023.05.23 |
---|---|
[CodeEngn] Basic RCE L18 (0) | 2023.05.18 |
[Codeengn] Basic RCE L17 (0) | 2023.05.18 |
[CodeEngn] Basic RCE L10 (0) | 2023.05.16 |
[CodeEngn] Basic RCE L09 (0) | 2023.05.16 |