Rootme ch25 C++ Basic

2018. 5. 3. 00:530x02 Reverse Engineer/0x03. Etc

728x90

c++ 관련 문제를 며칠전에 풀고 rootme에서 c++문제를 풀어보기로 하였다.

시간 소요 : 15분

(브레이크포인트를 검증하기 위해 걸지 않고 하니 시간이 오래 걸렸다. 대회에서는 이렇게 하지 않아야 겠다.)


루틴이 비교적 쉬운 문제였다고 본다.


전체적인 흐름은 다음과 같다.

1. 매개변수 argc!=2이면 프로그램이 종료된다.

2. 입력된 매개변수 argv[1]이 있으면 정상적인 흐름을 진행할 수 있다.

3. 입력된 매개변수와 상관없이 string객체에 생성된 문자열의 길이를 체크한다.

4. 문자열은 힙에 할당된다.


메인함수부분이다.

argc!=2가 아니면 실패 관련 구문으로 분기하게 된다.



실패 구문


매개변수가 2개 들어갔을 경우 


allocator와 string클래스가 눈에 보인다. 

string으로 무엇인가를 할당하겠다는 뜻이겠다.



입력 값 검증 후 나누어 지는 분기문


유심히 살펴본 함수


plouf (퐁당퐁당)의 의미다. 

c++함수인가 싶어서 검색을 해보았는데, 나오지 않았다. 그래서 게씽상 루틴이 퐁당퐁당 돌을 던졌을 때 튕겨나간다고 추측을 하였고 

분명 입력 값에 대한 검증이 있을거라고 확신과 함께 접근하게 되었다. 


해당 루프가 반복 되게 된다. 


조금 더 상세한 곳은 여기다.


operator+=(char)을 만나게 되면, 검증하는 문자가 한 바이트씩 ECX에 반환 되게 된다. 

그 후 할당 되어있는 heap에 복사된다. 


모든 루틴을 돌게 되면, 힙에 모든 플래그가 들어오게 된다.




'0x02 Reverse Engineer > 0x03. Etc' 카테고리의 다른 글

ROOTME FAKE INSTRUCTION  (0) 2018.05.19
KISA Diary 문제풀이 및 상세분석  (0) 2018.05.18
Simple Crack Me Writeup  (0) 2018.04.28
BruteForce is Wonderful!  (0) 2018.04.02
XOR IT'S FUN  (0) 2018.04.02