프로그래밍 썸네일형 리스트형 쉘코드(Shellcode) 기초(1) 이 포스팅은 서적 '윈도우 시스템 해킹 가이드 : 버그헌팅과 익스플로잇'을 기반으로 작성한 포스팅입니다. 쉘코드(Shellcode) 쉘코드란 보안 취약점이 있는(실행흐름을 악의적으로 조작할 수 있는) 프로그램에서 실행 시킬 실질적인 실행 코드를 말한다.예를들어 이는 포트를 여는 것 일 수도 있고, 악의적인 서버에 본인의 개인정보 파일을 업로드하게 하는 것 일 수 도있으며,해커가 원하는 실질적인 모든 행동을 수행하는 코드를 말한다. 보안 취약점이 있는 프로그램의 공격에 성공하여 실행흐름을 조작하여 공격자가 원하는 특정주소를 실행시킬 수 있는 데 이때 CPU는 흐름이 바뀐 메모리에서 직접 코드를 읽기에 CPU가 해석할 수 있는 기계어 코드로 이뤄져야한다. 좋은 쉘코드의 조건신뢰성 - 공격자가 원하는 행위를 .. 더보기 관망해석 프로그램 Hardy-Cross 관망 계산법 Hardy-Cross 관망 계산법을 이용한 프로그램을 만들어봤다. 단순한 재미로 만들었기에 폐합회로가 1개인 경우에 해당하며 무수한 노가다를 방지하기위해 오차범위를 0.001%이 내일 경우 반복문을 종료하는 형태로 프로그램을 만들었다. 더보기 JAVA 기반 TCP/IP 다중 채팅 프로그램 자바(JAVA)로 작성한 콘솔 기반 TCP/IP 다중 채팅 프로그램 프로젝트 구조 소스코드 ChatClient.javaimport java.net.*; import java.io.*; import java.util.*; public class ChatClient { String ipAddress; static final int port=6000; Socket client=null; BufferedReader read; PrintWriter oos; BufferedReader ois; String sendData; String receiveData; String user_id; ReceiveDataThread rt; boolean endflag=false; public ChatClient(String id.. 더보기 JAVA 기반 Echo Server 및 Client ◇소개 JAVA를 기반으로 한 다중채팅의 기반이 되는 Echo Server 및 Client ◇소스코드 EchoServer.java /* * Client가 Server 로 메시지 전송(한번) * Client 는 접속 시 IP, Port번호 입력 후 접속 가능하며, 메시지 한번 보내고 종료 * Server 는 계속 실행상태, Client 가 보내온 메시지 Client 로 보내기 !!!!!! * EchoServer4 와 EchoClient4 가 한 묶음 */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.Out.. 더보기 메모리의 동적 할당 ◇ 메모리의 동적 할당 함수의 반환형은 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바이트 만큼의 공간을 .. 더보기 함수 포인터 ◇ 함수 포인터의 이해 변수만 메모리 공간에 저장되는 것이 아니다. 프로그램의 실행의 흐름을 구성하는 함수들도 바이너리 형태로 메모리 공간에 저장되어서 호출 시 실행이된다. 이렇게 메모리상에 저장된 함수의 주소 값을 저장하는 포인터 변수가 '함수 포인터 변수'이다. 배열의 이름이 배열의 시작 주소값을 의미하듯, 함수의 이름도 함수가 저장된 메모리 공간의 주소값을 의미한다. 이러한 함수의 주소 값 저장을 위한 포인터 변수를 별도로 선언할 수 있으며, 이러한 용도로 선언된 포인터 변수를 가리켜 '함수 포인터 변수'라 한다. ◇ 함수 포인터 변수의 선언 함수 int SimpleFunc(int num) { . . . . } 위 함수의 반환형과 매개변수 선언은 각각 다음과 같다. · 반환형 int · 매개변수 선.. 더보기 두 가지 형태의 문자열 표현 ◇ 두 가지 형태의 문자열 표현 char str1[ ] = "My String"; char *str2 = "Your String"; str1은 그 자체로 문자열 전체를 저장하는 배열 str2는 메모리상에 "Your String"을 저장하고 첫번째 문자를 가리키는 포인터 변수이다. 배열이름 str1은 계속해서 문자 M이 저장된 위치를 가리키는 상태이어야 하지만 포인터 변수 str2는 다른위치를 가리킬수 있다. ◇ 두 가지 형태의 문자열 표현의 예시 #include int main (void) { char str1[ ] = "My String"; //변수 형태의 문자열 char *str2 = "Your String"; //상수 형태의 문자열 printf("%s %s \n", str1, str2); str2 .. 더보기 BAEKJOON 2839번 #include int main(void) { int a=0; int b=1000; int N=0; int sum = 0; scanf("%d", &N); //printf("%d\n", N); for(b=1000; b>=-1; b--){ //printf("%d\n",b); if(N-5*b 더보기 이전 1 ··· 3 4 5 6 7 다음