해킹 썸네일형 리스트형 쉘코드(Shellcode) 기초(1) 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 쉘코드(Shellcode) 쉘코드란 보안 취약점이 있는(실행흐름을 악의적으로 조작할 수 있는) 프로그램에서 실행 시킬 실질적인 실행 코드를 말한다.예를들어 이는 포트를 여는 것 일 수도 있고, 악의적인 서버에 본인의 개인정보 파일을 업로드하게 하는 것 일 수 도있으며,해커가 원하는 실질적인 모든 행동을 수행하는 코드를 말한다. 보안 취약점이 있는 프로그램의 공격에 성공하여 실행흐름을 조작하여 공격자가 원하는 특정주소를 실행시킬 수 있는 데 이때 CPU는 흐름이 바뀐 메모리에서 직접 코드를 읽기에 CPU가 해석할 수 있는 기계어 코드로 이뤄져야한다. 좋은 쉘코드의 조건신뢰성 - 공격자가 원하는 행위를 .. 더보기 메모리의 동적 할당 ◇ 메모리의 동적 할당 함수의 반환형은 void형 포인터고 인자는 정수가 들어간다. 예시로 int main(void){void * ptr1 = malloc(4); // 4바이트가 힙 영역에 할당void * ptr2 = malloc(12); // 12바이트가 힙 영역에 할당 . . . . free(ptr1); // ptr1이 가리키는 4바이트 메모리 공간 해제free(ptr2); // ptr2이 가리키는 4바이트 메모리 공간 해제 . . . . } 다음과 같은 소스코드에서 malloc함수의 활용을 확인해보자. malloc(4);malloc(12); 함수는 힙 영역위의 메모리 공간에 4바이트 만큼의 공간을 확보하고 확보된 메모리 공간의 주소값을 반환한다. 힙 영역위의 메모리 공간에 12바이트 만큼의 공간을 .. 더보기 컴퓨터 프로그래밍 설계 과제#3_HW03 #include #include #include int main(void) { float f_num = 0.0f; int arr[4]; int binary_arr[32] = {0,}; //배열을 0으로 초기화한다. int test_num = 0; unsigned char *ucp; int iCnt; int i=0; int j=0; while(1) { for(i=0 ; i 더보기 컴퓨터 프로그래밍 설계 과제#3_HW02 #include #include int main(void){ int sign = 0; double decimal_num = 0.0; double abs_decimal_num = 0.0; while(1){ //printf("Enter a fixed-point decimal number (0 for exit) : "); scanf("%lf", &decimal_num); fflush(stdin); //버퍼 비우기 sign = (decimal_num >= 0.0 ? 0 : 1); //0이면 양수, 1이면 음수 abs_decimal_num = (decimal_num > 0.0 ? decimal_num : -decimal_num); if(decimal_num==0.0){ break; } if( abs_decimal.. 더보기 컴퓨터 프로그래밍 설계 과제#3_HW01 #include #include #include double getAngle(int hour, int min); void getStraightTime(int hour); int main(void){ int hour = 0, minute = 0; while(1){ printf("Enter two integer numbers (hour[0~11] & minute[0~59]): "); scanf("%d %d", &hour, &minute); fflush(stdin); //버퍼 비우기 if( hour==0 && minute==0){ break; } if( !((0 더보기 컴퓨터 프로그래밍 설계 과제#2_HW03 #include #include #include #include int main(void){ int i = 0; int j = 0; //실행횟수에 관한 변수 int hit = 0; double probability = 0.0; int flag = 0; //이중루프 탈출을 위한 플래그 char input_char; while(1){ srand((unsigned int)time(NULL)); //Seed를 집어넣음 몇번째 숫자열을 쓸지 srand(양수) printf("Enter a trial number (1 ~ 10000) : "); scanf("%d", &j); fflush(stdin); //버퍼 비우기 printf("\n"); //문제 조건(2)에 의한 개행 if(j 더보기 컴퓨터 프로그래밍 설계 과제#2_HW02 #include #include #include int isSquarenumber(int num); //제곱 수 체크함수의 선언 int main(void){ int num = 0; int flag = 0; //이중루프 탈출을 위한 플래그 char input_char; while(1){ int check = 0; printf("Enter an integer: "); scanf("%d", &num); fflush(stdin); //버퍼 비우기 printf("\n"); //문제 조건(2)에 의한 개행 check = isSquarenumber(num); //제곱 수일 경우 1반환, 아닐경우 0 반환 if(check == 1) {//제곱 수 일때 printf("Next square number : %d \n", .. 더보기 컴퓨터 프로그래밍 설계 과제#2_HW01 #include #include int isHarshad(int num); //하샤드 수 체크함수의 선언 int main(void){ int num = 0; int flag = 0; //이중루프 탈출을 위한 플래그 char input_char; while(1){ printf("Enter a positive number : "); scanf("%d", &num); fflush(stdin); //버퍼 비우기 printf("\n"); //문제 조건(2)에 의한 개행 if(num 0){ rest = num % 10; sum = sum + rest; num = num/10; } //printf("각자릿수의 합 : %d\n", sum); if( (original_num%sum) == 0 ) { return 1; }.. 더보기 이전 1 2 3 4 5 다음