본문 바로가기

My Study/Crack Me

2012 PCTF simple

대회 기간이랑 캡스톤 중간 발표랑 딱 시간이 겹쳐서 제대로 문제를 풀진 못했지만 유일하게 열심히 풀어본 문제;; ㅎ

리버싱 문제이기 때문에.. 열심히.. ㅎ 할줄아는게 이것밖에?! ㅠㅠ

하지만 -_-;; 뭔가 감이 잡힐락 말락한 상황에서 그만둬버린..;


낼부턴 또.. 캡톤 최종발표 + 레포트 + 기말 셤 준비를 하려면.. 바빠질 것 같아 시간 있을 때 아쉬운 마음을 다시 꺼내 문제를 풀어보았다.


일단 문제파일.. 해보고 싶으신 분은 먼저 풀어보길 바랍니다.


simple


일단 ELF 파일이므로 우분투를 켜서 실행을 시켜보았다.


단순히 문자열을 하나 입력받고 맞으면 Wrong이 아닌 문자열을 뱉을 것이라 생각된다.


해당 파일을 IDA로 열게되면.. 뭔가  일반적으로 돌아가는 ELF 파일이 아니다. 문제 만든이가 어셈으로 코드를 다 짰나..? 보다라는 생각이 든다.


아무튼 문제의 전체 코드는 짧은 편이다.


어짜피 ELF 파일이라 IDA로 원격 디버깅 한다고해도 한계가 있고.. 봐도 잘 먼말인지 모르므로 그냥 저정도는 C로 재구성해서 VS로 디버깅 하면서 보는게 스트레스를 덜 받는 방법이다.



코드를 보면 scanf 부분에서 하나의 문자를 입력받고 printf 부분에서 Wrong을 한글자씩 출력 할 것이다.

근데 저 코드를 아무리 디버깅 해봐도 답이 안나온다.. ㅠㅠ 


결국 지푸라기라도 잡는 심정으로 A~Z,a~b,0~9,!@#$%^&*등등... 이런 문자들을 가지고 루프를 몇번 도는지를 확인하기 위해 

13번째 줄에 있는 count라는 변수로 출력을 해보았다.


그 결과 특이한 부분이 나왔다.

대부분의 Count 값이 2995인데 영어 소문자 엘만 2975이고 그 다음 알바펫부터 z 까지는 2991 값이 출력이 되었다.

첫번째 글자의 유력 용의자는 소문자 엘로 볼 수 있겠다. 유일하게 다른 값이 나오므로!!


그러면 첫번째 글자는 엘로 고정을 시켜놓고 두번째 글자도 첫번째 글자 찾듯이 찾겠습니다.

몇 개의 다른 값이 나오지만 유일하게 하나의 값만 나오는 값을 뽑는 것입니다.


이번에도 역시 숫자 3만이 3753으로 다른 값이 나왔네요.

그러면 두번째 글자 유력 용의자는 숫자 3입니다.


이런식으로 한글자 한글자 찾아가는겁니다.


그 결과 답을 찾았습니다.


굿이네요.


열심히 답 찾아간 코드입니다.



data.h


simple.cpp


data.h에 있는 값은 문제파일인 simple 에서 뽑아낸 것입니다.


'My Study > Crack Me' 카테고리의 다른 글

Codegate 2014 Clone  (0) 2014.03.15
Codegate 2011 B500 writeup  (12) 2012.01.18
Defcon 2010 예선 바이너리 3번  (0) 2010.06.02
Defcon 2010 예선 바이너리 2번  (0) 2010.06.02
Defcon 2010 예선 바이너리 1번  (8) 2010.05.23