본문 바로가기

리버싱

[codeengn]코드엔진 Basic RCE L19

문제:

이 프로그램은 몇 밀리세컨드 후에 종료 되는가

밀리세컨드에 대한 내용이므로 call을 확인하면 될 것이다.

이 파일을 Ollydbg로 열어 Search for->All intermodular calls를 확인한다.

맨 위로 올라가면 된다.

그럼 시간에 대한 함수가 있는데 이러한 모든 함수에 BP를 건다.

좀 내려보니까 isDebuggerPresent 함수가 보인다.

뭔가 단서가 있을 듯 하여 BP를 걸어주었다.

isDebugger가 있는 곳으로 이동해 JNE가 있어서 JE로 바꿔봤다.

-> JE로 바꿨는데 이게 꺼지는 지름길이었다.

일단 JNE로 다시 바꾸고, timeGetTime함수가 있는 곳으로 이동했다.

바로 밑에 CMP가 있다.

조금 수상쩍지만 그냥 진행해본다.

좀 내려가다보면 여기로 오는데, 여기에서 어디로 이동할 것임을 알 수 있다.

그럼 여기로 이동하는데,

CMP EAX, DWORD PTR DS:[EBX+0X4]인 것을 보아,

EBX+0x4에 있는 값 4바이트와 EAX를 비교한다.

같지 않으면 00444C71로 간다는 의미이다.

 

일단 레지스터창을 보면, EBX가 8AF878이다.

EBX의 덤프창을 확인한다.

아까 EBX의 위치로 오고 +4를 해준 위치를 보니

리틀엔디안을 통해

EBX+4의 값은 2B70이다.

한번 더 실행하여 미리 앞의 수를 봤는데

EAX가 0이 됨을 확인했다.

따라서 우리가 구한 2B70값과 0과 비교해서 JNE를 통해 종료되는 듯 하다.

2B70을 10진수로 바꾸면 11,120이다.

이 값을 이용해서 문제를 풀면 된다.

반응형

'리버싱' 카테고리의 다른 글

[CodeEngn]코드엔진 Basic RCE L20  (0) 2020.08.09
[Reversing.kr]Easy crack 1번  (0) 2020.08.07
[codeengn]코드엔진 basic RCE L17  (0) 2020.08.05
[CodeEngn]코드엔진 basic RCE L16  (0) 2020.07.30
[CodeEngn]코드엔진 Basic RCE L15  (0) 2020.07.29