본문 바로가기

전체

(242)
리버싱 예제 2 이번 예제는 PE 파일 내에 존재하지 않는 Windows API를 호출하는 문제이다. Tiny_PE.exe를 실행시키면 아래와 같은 메세지 박스가 화면에 출력된다. 이 때 두 버튼 중 하나를 선택해 클릭하면 프로그램이 바로 종료된다. 첨부한 Tiny_PE.exe 파일을 이용하여 아래와 같이 Program Flow로 실행되는 exe파일을 작성하도록 한다. 우선 Tiny_PE 파일을 DeRox를 이용해 코드를 확인한다. 위와 같이 작동하는 응용프로그램을 개별적으로 제작하여 어셈블코드가 어떻게 작성해야하는지 알아본다. #include //--------------------------------------------------------------------------- INT WINAPI WinMain(HI..
PE파일 데이터 암호화 실행파일을 메모리에 올려주는 작업을 PE로더라한다. 검증작업을 걸쳐서 실행파일이 맞으면 메모리에 올려준다. 예를들어 MZ라는 단어가 있어야만 실행이 된다. 실행파일을 보면 보통 최소 4키로바이트이다. 우리는 이런 이유가 클러스터 크기가 4KB이기 때문에 그렇다고 생각하지만 실행파일은 실제 4KB에 가깝다. 왜냐하면 실행에 관련된 필요한 정보 같은 것이 담겨있기 때문이다. 그래서 한 때 실행파일을 최소로 줄이는 대회가 있었다. 그 때 97B로 그 크기를 줄일 수 있었다고 한다. PE파일이 메모리에 로딩되면 거의 그대로 올라간다. 하지만 바뀌는 것이 존재한다. 파일의 오프셋-> 메모리에 올라오는 주소가 바뀌게 되는데 실행파일의 이러한 alignment는 대게 0x1000이다. 악성행위자는 이런 남는 공간을 ..
알고리즘 과제 #4 (그래프 최소 경로 구하기) 문제 : 무선 센서 네트워크에서 감시 노드들의 집합 구하기 무선 센서 네트워크에서 센서들은 서로 교신하며 일을 해야 하므로 네트워크 공격에 취약한데 이러한 공격을 막기 위해 보통 사용하는 기법이 행위 기반 탐지이다. 특별한 감시 노드들이 이웃 노드들이 합법적인지를 알기 위해 이웃의 교신을 감청하고, 공격이 탐지되면 경고 메시지를 감시 노드들만으로 이루어진 경로를 따라 관리를 담당하는 싱크 노드로 전달하게 된다. 무선 센서 네트워크는 그래프 G = (V, E)로 표현할 수 있는 데, 여기서 V는 센서 노드들의 집합이고 E는 통신 링크들의 집합이다. 임의의 노드 u에 대해 A(u)를 u와 인접한 노드들의 집합이라 한다. X를 노드들의 집합이라 할 때 X와 인접한 노드들의 집합 A(X) = A(u)이다. 싱크..
알고리즘 과제 #3 (정렬 및 속도 비교) 문제 : 정렬 알고리즘의 실행시간 비교 1. Exchange sort, Merge Sort와 Quick Sort 알고리즘들을 구현하고, key를 비교한 횟수, key가 move된 횟수, 실행시간을 측정하여 비교한다. (clock 함수 사용) 2. 원소 개수가 다른 3가지 정렬된 데이터(S[i] = i, 1≤ i ≤n)를 생성하여 Exchange sort와 Quick Sort를 비교한다. 단, n은 실행시간이 충분한 유효 숫자를 가질 수 있도록 각자 정한다. 3. 원소 개수가 다른 3가지 임의의 데이터를 생성하여 Merge Sort와 Quick Sort를 비교한다. 각 경우에 대해 (원소 개수가 같은) 5개의 데이터를 생성하여 평균값을 구한다. 데이터는 프로그램 안에서 생성한다. 4. 측정된 실행시간과 이..
알고리즘 과제 #2 (인접한 노드 그래프 생성) 문제 : 센서 네트워크 생성 무선 센서 네트워크는 물리적이나 환경적인 상태 즉 온도, 소리, 진동, 압력, 움직임, 또는 오염 정도를 관찰하기위해 공간적으로 분포되어 있는 독립적인 기능을 수행하는 센서들로 이루어져 있다. 무선 센서 네트워크는 그래프 G = (V, E)로 표현할 수 있는 데, 여기서 V는 센서 노드들의 집합이고 E는 통신 링크들의 집합이다. 두 개의 센서 노드는 전송 범위 안에 있으면 서로 교신을 할 수 있는데 이 경우에 두 노드를 간선으로 연결한다. m x m 정방형 필드에 n개의 센서 노드를 임의로 배치하고, 두 센서 노드의 거리가 t보다 작거나 같으면 간선으로 연결된 그래프의 인접행렬을 출력하는 프로그램을 작성하라. 입력 형식 입력 파일의 이름은 input.txt이다. 첫째 줄에는 ..
알고리즘 과제 #1 (이진 트리 높이 구하기) 문제 :이진트리의 높이 구하기 이진트리의 높이를 구하는 알고리즘을 작성하시오 위의 예에서 이진트리의 높이는 6이다 입력 형식 입력 파일의 이름은 input.txt이다. 여러 개의 테스트 데이터가 입력될 수 있다. 첫째 줄에는 테스트 데이터의 개수가 입력된다. 둘째 줄에는 첫 번째 데이터의 노드의 개수를 나타내는 정수 이 주어진다. 다음 개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다. 노드들의 번호는 1부터 까지로 주어진다. 자식이 없는 경우에는 자식 노드의 번호가 -1로 주어진다. 루트 노드의 번호는 1이다. 그 다음 줄부터 나머지 데이터가 같은 방식으로 주어진다. 출력 형식 데이터마다 한줄 씩 이진트리의 높이를 순서대로 출력한다. 입력 예..
운영체제 과제 #3 (mmap() 시스템콜 성능) 목표 : 표준 파일 I/O의 성능과 memory-mapped I/O의 성능을 비교한다. memory-mapped I/O: 파일의 내용을 메모리에 사상하는 mmap()시스템 콜을 사용 표준 파일 I/O: read() 시스템 콜을 사용하여 비교한다. 방법 : 성능 비교를 하기 위해 파일 이름을 command line argument를 사용한다. 파일에서 출력 가능한 문자들과 공백 문자들의 수를 계산한다. 이를 위해 두 가지 함수 isprint()와 isspace()를 사용한다. 만약 해당 파일을 찾을 수 없을 때에는 에러메시지를 출력하고 종료한다. #include #include #include #include #include #include #include #include #include #include ..
운영체제 과제 #2 (뮤텍스와 세마포어 사용하기) Producer/Consumer 문제를 해결하는 프로그램을 작성 하라. - 자료를 저장할 큐를 만들고 Pthread를 사용하여 Producer/Consumer thread를 생성한다. Producer thread는 큐의 자료를 1로 계속 채우고, Consumer thread는 큐의 자료를 소모하여 0으로 만든다. 이때, Consumer thread는 큐의 가장 오래된 자료부터 소모하고, Producer thread는 큐의 가장 최근에 자료를 생성했던 다음 빈자리부터 자료를 채운다. (최초의 자료 생성시 큐의 가장 왼쪽부터 생성하고, 큐의 가장 오른쪽에 도달 시 큐의 가장 왼쪽으로 이동한다.) Consumer thread가 자료를 소모하거나 Producer thread가 자료를 생성하는 것을 각각 1번의 ..