본문 바로가기

CAT-Security/미분류

[Defcon 21 ctf] policebox





 

 분석지점

 

int __cdecl main()
{
  signed int v1; // [sp+1Ch] [bp-4h]@5

  if ( !isatty(ttyfd) )
    perror("not on a tty");
  if ( tcgetattr(ttyfd, &orig_termios) < 0 )
    perror("can't get tty settings");
  atexit(tty_exit);
  tty_raw();
  v1 = 0;
  printf("The key is: ");
  while ( v1 <= 63 )
  {
    if ( (unsigned __int8)getchar() == 13 )
    {
      puts("\r");
      return 0;
    }
    ++v1;
  }
  return 0;
}







  if ( !isatty(ttyfd) )

    perror("not on a tty");


Isatty : 파일 지정자가 터미널을 사용하는지 검사한다.

출처 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/3/isatty


perror 

출처 : http://itguru.tistory.com/53


#include <stdio.h> // C++ 에서는 <cstdio>

void perror ( const char * str );


인자 str

C 형식 문자열로 시스템 오류 메세지 다음에 이어서 출력할 사용자 정의 메세지이다. 
만일 널 포인터라면, 시스템 오류 메세지 다음에 어떠한 메세지도 출력되지 않는다.
관습적으로 프로그램의 이름이 인자로 주로 사용된다. 


오류 메세지를 출력한다.
전역 변수 errno 의 값을 해석하여 이에 해당하는 시스템 오류 메세지를 표준 오류 출력 스트림(standard error output stream, stderr) 에 출력한다. 보통 stderr 은 화면이다. 또한 추가적으로 전달하고자 하는 사용자 정의 메세지를 str 인자에 담아 출력할 수 도 있다. 
errno 는 정수형 변수로 이전의 라이브러리 함수에 의해 발생한 오류에 대한 정보를 가지고 있다. 이 때, errno 에 값에 따라 perror 함수에 의해 출력되는 시스템 오류 메세지는 플랫폼이나 컴파일러에 따라 달라질 수 있다.
만일 str 이 널 포인터가 아니라면 사용자 정의 메세지가 시스템 오류 메세지 이전에 출력된다. 이 때 두 개의 메세지는 ": " 로 구분된다. 그리고 str 이 널 포인터인지 아닌지에 상관 없이 맨 마지막에는 개행 문자('\n')가 출력된다. 
perror 은 오류가 발생한 바로 다음에 호출되어야 한다. 그렇지 않을 경우 다른 함수들의 호출에 의해 출력 결과가 달라질 수 있다.





  if ( tcgetattr(ttyfd, &orig_termios) < 0 )

    perror("can't get tty settings");


 함수 : int tcgetattr(int filedes, struct termios *termios_p)

이 함수는 파일기술자 filedes와 연관된 터미널 디바이스의 속성을 시험하는데 사용된다. 그 속성은 구조체 termios_p가 가리키는 곳으로 반환된다.
만일 성공하면, tcgetattr 은 0을 반환하고, 실패하면 -1을 반환한다.  
다음의 errno는 이 함수를 위해 정의된 에러상황이다.
EBADF : filedes 인수가 유용한 파일기술자가 아니다.
ENOTTY : filedes 가 터미널과 연관이 없다.

if (tcgetattr (desc, &settings) < 0) {
perror ("error in tcgetattr");
return 0;
}




 atexit(tty_exit);



음과 같음 함수를 실행 한다.




tty_raw();










'CAT-Security > 미분류' 카테고리의 다른 글

[Secuinside2013] beist_attack_game_150  (0) 2014.05.02
gdb 명령어 요약집  (0) 2014.04.28
Python 예외처리  (0) 2014.01.09
리버싱의 기초 정리  (0) 2013.07.23
MBR 덤프해서 16비트 어셈블리 코드로 보는방법  (0) 2013.07.22