GDB를 이용한 바이너리 분석 실습에 대해서 정리한다.
- 바이너리 분석 실습( 패스워드 찾기 )
1). 예제 프로그램
#> wget http://192.168.4.200/password1
2). 패스워드 찾기
- 기계어를 -> C 코드로 변환
[ 어셈블리 코드 ]
- 분석을 할때는 언제 얼만큼의 메모리를 할당해서 사용하는지를 정확하게 파악해야 한다.
- 어셈블리 상태에서는 해당 분기문이 if 같은 그냥 조건문인지 아니면 while이나 for 같은 반복문인지를 한줄만 보고는
판단할 수 없기 때문에 섣부르게 판단하지 않도록 한다!!
[ c언어 코드 ]
#include <stdio.h>
char password[] = "th3p4ssw0rd";
int main()
{
// 1036 byte
char buffer[1024]; // ebp - 1024
// 12 byte
char *p; // ebp - 1028
char *q; // ebp - 1032
int len; // ebp - 1036
printf("Input password: ");
// char *fgets(char *s, int size, FILE *stream );
fgets( buffer, 1024, stdin );
len = strlen( buffer );
if( len > 0 && buffer[len-1] == '\n' ) {
buffer[len-1] = 0;
}
p = buffer;
q = password;
while( *p != 0 && *q != 0 && *p == *q ) {
p++;
q++;
}
if( *p == 0 && *q == 0 ) {
printf("Conguratulations! You got it!\n");
} else {
printf("Oops! wrong password! :-P\n");
}
return 0;
}
댓글