728x90
  • rev-basic #02

 

이전 예제들과 비슷한 유형으로 파일을 실행해 아무값을 입력해줬더니 wrong이 떴다.

 

 

 

IDA에 들어가면 main 화면에 이와 같이 나오고 문자열을 비교해 출력하게끔 하는 함수로 추정할 수 있는 sub_140001000 에 더블 클릭하게 되면 아래와 같은 화면이 나오게 된다.

 

 

 

분석하자면, 뭔가 rax와 12h를 비교해서 rax가 12보다 작지 않을때 jnb명령어를 통해 short loc_140001048 로 점프하는 것 같다. 

 

short loc_140001048에 더블 클릭을 하면 eax에 1을 넣는 다는 내용이 있다.

 

 

 

rax 값이 12를 넘지 않는 경우에는 어떻게 될 지 아래를 보니 위와 같은 화면을 보게 되었고, aC 배열 옆에 주석으로 "C" 있는 것을 보고 flag 값이 여기 있겠구나 싶었다. 

 

aC배열을 더블 클릭하니 위 같은 화면이 나와서 flag 값을 얻을 수 있었다.

 

입력값을 넣으니 correct 가 출력되었고, 문제를 풀었다.

 

https://dreamhack.io/wargame/challenges/16/

 

rev-basic-2

Reversing Basic Challenge #2 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출

dreamhack.io

 

 


  • easy unpack

 

 

처음에는 윈도우10에서 예제를 풀려고 했었는데, 보안 상의 이유로 가상머신에서 윈도우 7 환경에서 풀게 되었다.

 

다운받은 exe 파일을 실행해보니까 아무 내용도 없는 빈 창이 떴다. 

다운받은 파일에는 exe 파일과 메모장이 있는데, 메모장을 열어보니 이 예제는 OEP를 찾는 문제라는 것을 알았다. 

 

+ OEP란?

: OEP는 Orignal Entry Point로 EP는 엔트리 포인트이다. 엔트리 포인트는 운영체제가 사용자 프로그램으로 최초로 제어를 넘기는 지점으로 실행 코드가 최초로 실행되는 지점이라고 생각하면 된다.  

OEP는 실제 시작 지점으로  jmp문을 통해서 찾을 수 있다. 

 

 

 

OllyDbg를 통해 exe 파일을 열어 주었다. 

 

구글링을 하였을 때 일반적으로 OEP로 점프하는 코드 다음에는 옵코드 0으로 채워져 있는 경우가 있다고 하여 그러한 부분을 찾았더니 jmp 명령어가 있었다. 이부분에 브레이크포인트를 걸었다.

실행시켜 보면 OEP를 찾을 수 있다. 

 

http://reversing.kr/challenge.php

 

Reversing.Kr

Copyright © 2012-2022 Gogil All Right Reserved.

reversing.kr

 

+ Recent posts