안경잡이 구루루

[ CodeEngn ] Basic RCE L03 본문

리버싱(Reversing Engineering)/CodeEngn ( 코드엔진 )

[ CodeEngn ] Basic RCE L03

구루루(gururu) 2020. 7. 3. 23:52
반응형

 

https://codeengn.com/challenges/

 

CodeEngn.com [코드엔진] - Challenges

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰

codeengn.com

위 링크를 통해 관련 문제를 다운 받을 수 있습니다.

 

# 준비물

ollydbug 

 

# 문제 풀이

우선 문제에서 구해야 하는 것은 아래와 같다.

다운 받은 파일을 올리디버그로 실행하게 되면

' 디버깅 당함 ' 이라는 문자열이 일정한 시간과 간격으로 무한정 출력된다. 

 

우선 ollydbug 를 살펴봤다.

문제에서 바라는 것은 디버깅인지 아닌지 판단하는 함수를 찾는 것이기 때문에 

Search For -> All intermodul calls 로 들어가서 실행파일에 사용된 모든 함수들을 확인한다.

 

엄청나게 무수히 많은 여러 함수들이 존재해서 뭐부터 확인할까 하면서 둘러 보던 와중 이름부터 수상한 함수 하나를  발견했다.

 

위의 함수가 우리가 찾는 함수라고 가정을 하고 이와 관련해서 Google에 검색을 해봤다.

그 결과 내가 찾던것이 맞다는 확신이 들었다.

그래서 코드엔진에 정답을 입력한 결과 문제를 해결할 수 있었다.

 

+)

위에서 알 수 있듯이 Msdn에 검색한 결과 반환값에 따라 결과가 달라진다고 해서 한번 바꿔보면서 좀 더 분석해보고자 한다.

 

아까 위에서 찾았던 함수를 좀더 자세히 살펴보고자 들어가보니 아래와 같은 화면이 나왔다.

실행 시켜 보니 예상대로 해당 함수에서 실행을 멈추었고 디버깅 하고있는지 아닌지 아직 판단이 안되므로 

실행프로그램에는 아무것도 뜨지 않았다.

아무것도 없쥬

디버깅인지 아닌지 판단을 해야하는 것을 알기 때문에 분명히 위 함수 다음에 구별하는 구문이 존재하다는 것을          예상할 수 있다.

CMP가 존재하고 이를 이용해 JZ, JMP로 계속 반복하는 것을 보니 아래와 같은 가정을 했다.

이후 TEST EAX, EAX까지 실행을 시켜 보았다.그 결과 EAX값이 1임을 확인 했다.

JZ는 활성화 되지 않고 PUSH 00431024 후 CALL 00408190 을 하니 아래와 같이 실행화면에 문자열이 출력된다.

 

결국 결과값이 저장되는 EAX 값에 따라 출력되는 문자가 다름을 확인 할 수 있었다.

EAX를 강제로 0으로 바꾸고 실행하면 어떤 결과가 일어날지 궁금해서 한번  해 보았다.

그 결과 JZ가 활성화 되고 PUSH 0043101C 후 CALL 00408190을 하니 

'정상' 이라는 문구를 출력하게 되었다.

 

아까 PUSH 했던 주소의 값들을 살펴본 결과 

' 정상 '  ,  ' 디버깅 당함 ' 을 나타낸다는 사실을 발견 할 수 있었다.

반응형

'리버싱(Reversing Engineering) > CodeEngn ( 코드엔진 )' 카테고리의 다른 글

[CodeEngn] Basic RCE L02  (0) 2020.07.03
[CodeEngn] Basic RCE L01  (0) 2020.06.22