반응형
문제:
이 프로그램은 몇 밀리세컨드 후에 종료 되는가 |
밀리세컨드에 대한 내용이므로 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 |