<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Ye0ngJae</title>
    <link>https://ye0ngjae.tistory.com/</link>
    <description>공부 노트</description>
    <language>ko</language>
    <pubDate>Thu, 7 May 2026 04:00:03 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Ye0ngJae</managingEditor>
    <image>
      <title>Ye0ngJae</title>
      <url>https://tistory1.daumcdn.net/tistory/4973918/attach/0e864fafce204489a4f9412468de5e05</url>
      <link>https://ye0ngjae.tistory.com</link>
    </image>
    <item>
      <title>[알고리즘] 백준 1931번 회의실 배정(Python)</title>
      <link>https://ye0ngjae.tistory.com/142</link>
      <description>&lt;h2&gt;문제&lt;/h2&gt;
&lt;p&gt;한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.&lt;/p&gt;
&lt;h2&gt;입력&lt;/h2&gt;
&lt;p&gt;첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0이다.&lt;/p&gt;
&lt;h2&gt;출력&lt;/h2&gt;
&lt;p&gt;첫째 줄에 최대 사용할 수 있는 회의의 최대 개수를 출력한다.&lt;/p&gt;
&lt;h2&gt;예제 입력 1&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;예제 출력 1&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;4&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;풀이&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;회의가 끝나는 시간을 기준으로 정렬한다.&lt;/li&gt;
&lt;li&gt;회의가 끝나는 시간이 같다면 시작하는 시간을 기준으로 정렬한다.&lt;/li&gt;
&lt;li&gt;회의가 끝나는 시간이 가장 빠른 회의부터 시작한다.&lt;/li&gt;
&lt;li&gt;회의가 끝나는 시간이 같다면 시작하는 시간이 가장 빠른 회의부터 시작한다.&lt;/li&gt;
&lt;li&gt;회의가 끝나는 시간이 같고 시작하는 시간이 같다면 회의 번호가 작은 회의부터 시작한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import sys

arr = []
count = 1
tmp = 0

T = int(sys.stdin.readline())
for i in range(T):
    a,b = map(int, sys.stdin.readline().split())
    arr.append([a,b])

arr.sort(key=lambda x: (x[1], x[0]))

tmp = arr[0][1]
for i in range(1,T):
    if tmp &amp;lt;= arr[i][0]:
        count += 1
        tmp = arr[i][1]
    else:
        continue

print(count)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>Ye0ngJae</author>
      <guid isPermaLink="true">https://ye0ngjae.tistory.com/142</guid>
      <comments>https://ye0ngjae.tistory.com/142#entry142comment</comments>
      <pubDate>Sat, 12 Oct 2024 19:47:18 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘] 백준 11286번 절대값 힙(Python)</title>
      <link>https://ye0ngjae.tistory.com/141</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;절댓값 힙은 다음과 같은 연산을 지원하는 자료구조이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;배열에 정수 x (x &amp;ne; 0)를 넣는다.&lt;/li&gt;
&lt;li&gt;배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다.&lt;br /&gt;프로그램은 처음에 비어있는 배열에서 시작하게 된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 연산의 개수 N(1&amp;le;N&amp;le;100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 절댓값이 가장 작은 값을 출력하고 그 값을 배열에서 제거하는 경우이다. 입력되는 정수는 $$ -2^31 $$보다 크고, $$ 2^31 $$보다 작다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력에서 0이 주어진 회수만큼 답을 출력한다. 만약 배열이 비어 있는 경우인데 절댓값이 가장 작은 값을 출력하라고 한 경우에는 0을 출력하면 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;/h2&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;18
1
-1
0
0
0
1
1
-1
-1
2
-2
0
0
0
0
0
0
0&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;/h2&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;-1
1
0
-1
-1
1
1
-2
2
0&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;heapq 모듈을 사용하여 풀이한다.&lt;/li&gt;
&lt;li&gt;heapq 모듈은 최소 힙을 지원한다.&lt;/li&gt;
&lt;li&gt;절대값을 기준으로 최소 힙을 구현하기 위해 (abs(x), x)를 힙에 넣는다.&lt;/li&gt;
&lt;li&gt;x가 0이면 힙이 비어있지 않다면 절대값이 가장 작은 값을 출력하고, 그 값을 힙에서 제거한다.&lt;/li&gt;
&lt;li&gt;x가 0이 아니면 (abs(x), x)를 힙에 넣는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sas&quot;&gt;&lt;code&gt;import heapq
import sys

heap = []

N = int(sys.stdin.readline().strip())

for _ in range(N):
    x = int(sys.stdin.readline().strip())
    if x == 0:
        if heap:
            print(heapq.heappop(heap)[1])
        else:
            print(0)
    else:
        heapq.heappush(heap, (abs(x), x))
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>Ye0ngJae</author>
      <guid isPermaLink="true">https://ye0ngjae.tistory.com/141</guid>
      <comments>https://ye0ngjae.tistory.com/141#entry141comment</comments>
      <pubDate>Sat, 12 Oct 2024 18:11:46 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ] 18870번 &amp;quot;좌표 압축&amp;quot; 파이썬 풀이</title>
      <link>https://ye0ngjae.tistory.com/140</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Xi를 좌표 압축한 결과 X'i의 값은 Xi&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;gt; Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 N이 주어진다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;첫째 줄에 X'&lt;/span&gt;1&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;, X'&lt;/span&gt;2&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;, ..., X'&lt;/span&gt;N&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;을 공백 한 칸으로 구분해서 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력 예시&lt;/h2&gt;
&lt;pre id=&quot;code_1711633113583&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;5
2 4 -10 4 -9&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1711633121145&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;6
1000 999 1000 999 1000 999&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력 예시&lt;/h2&gt;
&lt;pre id=&quot;code_1711633125815&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;2 3 0 3 1&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1711633131350&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1 0 1 0 1 0&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;답안&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1711633141562&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

N = int(sys.stdin.readline().strip())

a = list(map(int, sys.stdin.readline().strip().split()))

mid = sorted(a)[len(a)//2]

b = sorted(set(a))

def binary_search(arr, target):
    left = 0
    right = len(arr) - 1

    while left &amp;lt;= right:
        mid = (left + right) // 2

        if arr[mid] == target:
            return mid
        elif arr[mid] &amp;lt; target:
            left = mid + 1
        else:
            right = mid - 1

    return -1

for num in a:
    index = binary_search(b, num)
    print(index, end=' ')&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>알고리즘/파이썬</category>
      <author>Ye0ngJae</author>
      <guid isPermaLink="true">https://ye0ngjae.tistory.com/140</guid>
      <comments>https://ye0ngjae.tistory.com/140#entry140comment</comments>
      <pubDate>Thu, 28 Mar 2024 23:27:54 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ] 2563번 &amp;quot;색종이&amp;quot; 파이썬 풀이</title>
      <link>https://ye0ngjae.tistory.com/139</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccwm30/btsF9A0VOee/Tk7yGCmX57Xj2HueEo6mR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccwm30/btsF9A0VOee/Tk7yGCmX57Xj2HueEo6mR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccwm30/btsF9A0VOee/Tk7yGCmX57Xj2HueEo6mR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fccwm30%2FbtsF9A0VOee%2FTk7yGCmX57Xj2HueEo6mR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;536&quot; height=&quot;430&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력 예시&lt;/h2&gt;
&lt;pre id=&quot;code_1711553027410&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;3
3 7
15 7
5 2&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력 예시&lt;/h2&gt;
&lt;pre id=&quot;code_1711553042124&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;260&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;답안&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1711553000419&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

num = int(sys.stdin.readline().strip())

board = [[0 for _ in range(100)] for _ in range(100)]

for i in range(num):
    N, M = map(int, sys.stdin.readline().strip().split())

    for j in range(M, M+10):
        for k in range(N, N+10):
            board[j][k] = 1

result = 0
for i in range(100):
    result += board[i].count(1)
print(result)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 조건에 따라 색종이가 붙은 영역의 넓이를 구하는 문제입니다. 주어진 입력으로부터 색종이의 위치를 받고, 해당 위치에 색종이가 붙었다고 가정하여 2차원 배열(도화지)에 표시합니다. 색종이의 크기는 10x10이므로, 각 색종이가 붙는 위치에서부터 가로와 세로로 10칸씩 해당 영역을 1로 표시하여 검은색 영역을 나타냅니다. 이때, 색종이의 넓이를 1과 0으로 표현하기 때문에 만일 색종이가 겹치더라도 넓이를 추가로 계산하는 일은 없습니다.&amp;nbsp; 모든 색종이를 2차원 배열에 표시한 후에 1로 표시된 칸의 수를 세어 검은색 영역의 넓이를 계산합니다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;입력&amp;nbsp;받기:&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;줄에서&amp;nbsp;색종이의&amp;nbsp;수를&amp;nbsp;입력받고,&amp;nbsp;이후&amp;nbsp;각&amp;nbsp;색종이의&amp;nbsp;위치를&amp;nbsp;입력받습니다. &lt;br /&gt;도화지&amp;nbsp;초기화:&amp;nbsp;100x100&amp;nbsp;크기의&amp;nbsp;2차원&amp;nbsp;배열을&amp;nbsp;생성하고,&amp;nbsp;모든&amp;nbsp;값을&amp;nbsp;0으로&amp;nbsp;초기화합니다.&amp;nbsp;여기서&amp;nbsp;0은&amp;nbsp;흰색&amp;nbsp;영역을,&amp;nbsp;1은&amp;nbsp;검은색&amp;nbsp;영역을&amp;nbsp;나타냅니다.&lt;/li&gt;
&lt;li&gt;색종이&amp;nbsp;붙이기:&amp;nbsp;각&amp;nbsp;색종이의&amp;nbsp;위치에&amp;nbsp;따라&amp;nbsp;해당&amp;nbsp;영역을&amp;nbsp;1로&amp;nbsp;변경합니다.&amp;nbsp;색종이의&amp;nbsp;위치(N,&amp;nbsp;M)를&amp;nbsp;기준으로&amp;nbsp;가로와&amp;nbsp;세로로&amp;nbsp;10칸씩&amp;nbsp;1로&amp;nbsp;값을&amp;nbsp;변경합니다.&lt;/li&gt;
&lt;li&gt;넓이&amp;nbsp;계산:&amp;nbsp;2차원&amp;nbsp;배열&amp;nbsp;전체를&amp;nbsp;순회하며&amp;nbsp;1의&amp;nbsp;값을&amp;nbsp;가진&amp;nbsp;칸의&amp;nbsp;수를&amp;nbsp;세어&amp;nbsp;넓이를&amp;nbsp;계산합니다. &lt;br /&gt;결과 출력: 계산된 넓이를 출력합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 설명:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;num&amp;nbsp;=&amp;nbsp;int(sys.stdin.readline().strip()):&amp;nbsp;색종이의&amp;nbsp;수를&amp;nbsp;입력받습니다.&lt;/li&gt;
&lt;li&gt;board&amp;nbsp;=&amp;nbsp;[[0&amp;nbsp;for&amp;nbsp;_&amp;nbsp;in&amp;nbsp;range(100)]&amp;nbsp;for&amp;nbsp;_&amp;nbsp;in&amp;nbsp;range(100)]:&amp;nbsp;100x100&amp;nbsp;크기의&amp;nbsp;2차원&amp;nbsp;배열을&amp;nbsp;생성하고,&amp;nbsp;0으로&amp;nbsp;초기화합니다.&lt;/li&gt;
&lt;li&gt;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;range(num):&amp;nbsp;입력받은&amp;nbsp;색종이의&amp;nbsp;수만큼&amp;nbsp;반복합니다.&lt;/li&gt;
&lt;li&gt;N,&amp;nbsp;M&amp;nbsp;=&amp;nbsp;map(int,&amp;nbsp;sys.stdin.readline().strip().split()):&amp;nbsp;색종이의&amp;nbsp;왼쪽&amp;nbsp;변과&amp;nbsp;아래쪽&amp;nbsp;변&amp;nbsp;사이의&amp;nbsp;거리를&amp;nbsp;입력받습니다.&lt;/li&gt;
&lt;li&gt;for&amp;nbsp;j&amp;nbsp;in&amp;nbsp;range(M,&amp;nbsp;M+10)와&amp;nbsp;for&amp;nbsp;k&amp;nbsp;in&amp;nbsp;range(N,&amp;nbsp;N+10):&amp;nbsp;색종이의&amp;nbsp;위치에서&amp;nbsp;가로와&amp;nbsp;세로로&amp;nbsp;10칸씩&amp;nbsp;해당&amp;nbsp;영역을&amp;nbsp;1로&amp;nbsp;변경합니다.&lt;/li&gt;
&lt;li&gt;result&amp;nbsp;+=&amp;nbsp;board[i].count(1):&amp;nbsp;2차원&amp;nbsp;배열&amp;nbsp;전체를&amp;nbsp;순회하며&amp;nbsp;1의&amp;nbsp;값을&amp;nbsp;가진&amp;nbsp;칸의&amp;nbsp;수를&amp;nbsp;세어&amp;nbsp;result에&amp;nbsp;더합니다.&lt;/li&gt;
&lt;li&gt;print(result):&amp;nbsp;최종&amp;nbsp;계산된&amp;nbsp;검은색&amp;nbsp;영역의&amp;nbsp;넓이를&amp;nbsp;출력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>알고리즘/파이썬</category>
      <author>Ye0ngJae</author>
      <guid isPermaLink="true">https://ye0ngjae.tistory.com/139</guid>
      <comments>https://ye0ngjae.tistory.com/139#entry139comment</comments>
      <pubDate>Thu, 28 Mar 2024 00:27:35 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ] 2720번 &amp;quot;세탁소 사장 동혁&amp;quot; 파이썬 풀이</title>
      <link>https://ye0ngjae.tistory.com/138</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;미국으로 유학간 동혁이는 세탁소를 운영하고 있다. 동혁이는 최근에 아르바이트로 고등학생 리암을 채용했다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동혁이는 리암에게 실망했다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;리암은 거스름돈을 주는 것을 자꾸 실수한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;심지어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;0.5달러를 줘야하는 경우에 거스름돈으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;5달러를 주는것이다!&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;어쩔수 없이 뛰어난 코딩 실력을 발휘해 리암을 도와주는 프로그램을 작성하려고 하지만, 디아블로를 하느라 코딩할 시간이 없어서 이 문제를 읽고 있는 여러분이 대신 해주어야 한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;거스름돈의 액수가 주어지면 리암이 줘야할 쿼터(Quarter,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;0.25)의 개수, 다임(Dime,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;0.10)의 개수, 니켈(Nickel,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;0.05)의 개수, 페니(Penny,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;0.01)의 개수를 구하는 프로그램을 작성하시오. 거스름돈은 항상&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;5.00 이하이고, 손님이 받는 동전의 개수를 최소로 하려고 한다. 예를 들어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;1.24를 거슬러 주어야 한다면, 손님은 4쿼터, 2다임, 0니켈, 4페니를 받게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 거스름돈 C를 나타내는 정수 하나로 이루어져 있다. C의 단위는 센트이다. (1달러 = 100센트) (1&amp;lt;=C&amp;lt;=500)&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;각 테스트케이스에 대해 필요한 쿼터의 개수, 다임의 개수, 니켈의 개수, 페니의 개수를 공백으로 구분하여 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력 예시&lt;/h2&gt;
&lt;pre id=&quot;code_1711552474469&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;3
124
25
194&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력 예시&lt;/h2&gt;
&lt;pre id=&quot;code_1711552463530&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;4 2 0 4
1 0 0 0
7 1 1 4&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;답안&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1711552435985&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

money = [25, 10, 5, 1]

N = int(sys.stdin.readline().strip())

for i in range(N):
    num = int(sys.stdin.readline())

    for j in range(len(money)):
        if num &amp;gt;= money[j]:
            print(num // money[j], end=' ')
            num %= money[j]
        else:
            print(0, end=' ')&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 주어진 거스름돈을 가장 효율적으로 동전으로 바꾸는 것입니다. 이를 위해 우리는 가장 큰 단위의 동전부터 차례로 거스름돈에 맞게 교환해 나가야 합니다. 주어진 동전의 종류는 쿼터($0.25), 다임($0.10), 니켈($0.05), 페니($0.01)로, 각각의 가치를 센트로 환산하면 25센트, 10센트, 5센트, 1센트입니다. 문제에서는 거스름돈 C가 센트 단위로 주어지므로, 이를 이용해 계산할 수 있습니다. &lt;br /&gt;&lt;br /&gt;각&amp;nbsp;테스트&amp;nbsp;케이스마다&amp;nbsp;주어진&amp;nbsp;거스름돈에&amp;nbsp;대해&amp;nbsp;순서대로&amp;nbsp;쿼터,&amp;nbsp;다임,&amp;nbsp;니켈,&amp;nbsp;페니를&amp;nbsp;최대한&amp;nbsp;많이&amp;nbsp;사용하여&amp;nbsp;거슬러&amp;nbsp;줄&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;개수를&amp;nbsp;계산합니다.&amp;nbsp;이때,&amp;nbsp;각&amp;nbsp;동전을&amp;nbsp;사용한&amp;nbsp;후에는&amp;nbsp;남은&amp;nbsp;거스름돈을&amp;nbsp;업데이트해야&amp;nbsp;합니다.&amp;nbsp;남은&amp;nbsp;거스름돈은&amp;nbsp;현재&amp;nbsp;거스름돈에서&amp;nbsp;현재&amp;nbsp;동전의&amp;nbsp;가치를&amp;nbsp;곱한&amp;nbsp;개수를&amp;nbsp;뺀&amp;nbsp;값이&amp;nbsp;됩니다.&amp;nbsp;이&amp;nbsp;과정을&amp;nbsp;모든&amp;nbsp;동전에&amp;nbsp;대해&amp;nbsp;반복하면,&amp;nbsp;각&amp;nbsp;동전의&amp;nbsp;최적&amp;nbsp;개수를&amp;nbsp;구할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;코드를 살펴보면 아래와 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;money 배열은 각 동전의 센트 단위 가치를 저장합니다.&lt;/li&gt;
&lt;li&gt;외부&amp;nbsp;루프(for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;range(N))는&amp;nbsp;각&amp;nbsp;테스트&amp;nbsp;케이스를&amp;nbsp;순회합니다.&lt;/li&gt;
&lt;li&gt;내부&amp;nbsp;루프(for&amp;nbsp;j&amp;nbsp;in&amp;nbsp;range(len(money)))는&amp;nbsp;각&amp;nbsp;동전의&amp;nbsp;종류를&amp;nbsp;순회하며,&amp;nbsp;현재&amp;nbsp;거스름돈에서&amp;nbsp;해당&amp;nbsp;동전으로&amp;nbsp;거슬러&amp;nbsp;줄&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;최대&amp;nbsp;개수를&amp;nbsp;계산합니다.&amp;nbsp;이때,&amp;nbsp;num&amp;nbsp;//&amp;nbsp;money[j]는&amp;nbsp;현재&amp;nbsp;동전으로&amp;nbsp;거슬러&amp;nbsp;줄&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;최대&amp;nbsp;개수를&amp;nbsp;구하고,&amp;nbsp;num&amp;nbsp;%=&amp;nbsp;money[j]는&amp;nbsp;사용한&amp;nbsp;후&amp;nbsp;남은&amp;nbsp;거스름돈을&amp;nbsp;업데이트합니다.&lt;/li&gt;
&lt;li&gt;각&amp;nbsp;동전의&amp;nbsp;개수는&amp;nbsp;공백으로&amp;nbsp;구분하여&amp;nbsp;출력합니다.&amp;nbsp;만약&amp;nbsp;현재&amp;nbsp;동전으로&amp;nbsp;거슬러&amp;nbsp;줄&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;경우(num&amp;nbsp;&amp;lt;&amp;nbsp;money[j]),&amp;nbsp;0을&amp;nbsp;출력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/파이썬</category>
      <author>Ye0ngJae</author>
      <guid isPermaLink="true">https://ye0ngjae.tistory.com/138</guid>
      <comments>https://ye0ngjae.tistory.com/138#entry138comment</comments>
      <pubDate>Thu, 28 Mar 2024 00:22:21 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스][SQL] &amp;quot;인기있는 아이스크림&amp;quot; 문제 풀이</title>
      <link>https://ye0ngjae.tistory.com/135</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FIRST_HALF 테이블은 아이스크림 가게의 상반기 주문 정보를 담은 테이블입니다.FIRST_HALF 테이블 구조는 다음과 같으며, SHIPMENT_ID, FLAVOR, TOTAL_ORDER는 각각 아이스크림 공장에서 아이스크림 가게까지의 출하 번호, 아이스크림 맛, 상반기 아이스크림 총주문량을 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 40.3488%; height: 124px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;NAME&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;TYPE&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;NULLABLE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SHIPMENT_ID&lt;/td&gt;
&lt;td&gt;INT(N)&lt;/td&gt;
&lt;td&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FLAVOR&lt;/td&gt;
&lt;td&gt;VARCHAR(N)&lt;/td&gt;
&lt;td&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TOTAL_ORDER&lt;/td&gt;
&lt;td&gt;INT(N)&lt;/td&gt;
&lt;td&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상반기에 판매된 아이스크림의 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 SQL 문을 작성해주세요. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;예시&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를&amp;nbsp;들어&amp;nbsp;FIRST_HALF&amp;nbsp;테이블이&amp;nbsp;다음과&amp;nbsp;같을&amp;nbsp;때&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 48.6047%; height: 421px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;SHIPMENT_ID&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;FLAVOR&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;TOTAL_ORDER&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;chocolate&lt;/td&gt;
&lt;td&gt;3200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;102&lt;/td&gt;
&lt;td&gt;vanilla&lt;/td&gt;
&lt;td&gt;2800&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;103&lt;/td&gt;
&lt;td&gt;mint_chocolate&lt;/td&gt;
&lt;td&gt;1700&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;104&lt;/td&gt;
&lt;td&gt;caramel&lt;/td&gt;
&lt;td&gt;2600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;105&lt;/td&gt;
&lt;td&gt;white_chocolate&lt;/td&gt;
&lt;td&gt;3100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;106&lt;/td&gt;
&lt;td&gt;peach&lt;/td&gt;
&lt;td&gt;2450&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;107&lt;/td&gt;
&lt;td&gt;watermelon&lt;/td&gt;
&lt;td&gt;2150&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;108&lt;/td&gt;
&lt;td&gt;mango&lt;/td&gt;
&lt;td&gt;2900&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td&gt;strawberry&lt;/td&gt;
&lt;td&gt;3100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td&gt;melon&lt;/td&gt;
&lt;td&gt;3150&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;111&lt;/td&gt;
&lt;td&gt;orange&lt;/td&gt;
&lt;td&gt;2900&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;td&gt;pineapple&lt;/td&gt;
&lt;td&gt;2900&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;상반기 아이스크림 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같은 경우 출하 번호를 기준으로 오름차순 정렬하면 chocolate, melon, white_chocolate, strawberry, mango, orange, pineapple, vanilla, caramel, peach, watermelon, mint_chocolate 순서대로 조회되어야 합니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 15.814%; height: 429px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;FLAVOR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;chocolate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;melon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;white_chocolate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;strawberry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;mango&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;orange&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;pineapple&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;vanilla&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 13px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 13px;&quot;&gt;caramel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;peach&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;watermelon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 17px;&quot;&gt;mint_chocolate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;답안&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1709036193379&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
    FLAVOR
FROM
    FIRST_HALF 
ORDER BY
    TOTAL_ORDER DESC,
    SHIPMENT_ID ASC;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;아이스크림 맛을 &lt;/span&gt;총주문량을 기준으로 내림차순 정렬하고 총주문량이 같은 경우 출하 번호를 기준으로 오름차순 정렬하라고 문제에 나와 있기 때문에, 해당 기준에 맞추어 FLAVOR을 TOTAL_ORDER을 기준으로 내림차순, SHIPMENT_ID로 오름차순하는 SQL 코드를 작성하면 됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/SQL</category>
      <category>SQL</category>
      <category>프로그래머스</category>
      <author>Ye0ngJae</author>
      <guid isPermaLink="true">https://ye0ngjae.tistory.com/135</guid>
      <comments>https://ye0ngjae.tistory.com/135#entry135comment</comments>
      <pubDate>Tue, 27 Feb 2024 21:20:33 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ] 11659번 &amp;quot;구간 합 구하기 4&amp;quot; C언어 풀이</title>
      <link>https://ye0ngjae.tistory.com/132</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btRh75/btsdIH7pb9l/YReLqDXSMBuRwKIDZO9hlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btRh75/btsdIH7pb9l/YReLqDXSMBuRwKIDZO9hlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btRh75/btsdIH7pb9l/YReLqDXSMBuRwKIDZO9hlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtRh75%2FbtsdIH7pb9l%2FYReLqDXSMBuRwKIDZO9hlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1171&quot; height=&quot;235&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;235&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다.&amp;nbsp;셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력 예시&lt;/h2&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;bash&quot; style=&quot;background-color: #f7f7f9; color: #333333; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;5 3
5 4 3 2 1
1 3
2 4
5 5&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력 예시&lt;/h2&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;bash&quot; style=&quot;background-color: #f7f7f9; color: #333333; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;12
9
1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;답안&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1683030093134&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#pragma warning(disable: 4996)
#define _CRT_SECURE_NO_WARNINGS

int main() {
	
	int arr[100000];
	int sum[100000] = { 0 };
	int n, m, a, b;

	scanf(&quot;%d %d&quot;, &amp;amp;n, &amp;amp;m);

	for (int k = 0; k &amp;lt; n; k++) {
		scanf(&quot;%d&quot;, &amp;amp;arr[k]);
		sum[k + 1] = sum[k] + arr[k];
	}
	
	for (int i = 0; i &amp;lt; m; i++) {
		scanf(&quot;%d %d&quot;, &amp;amp;a, &amp;amp;b);
		printf(&quot;%d\n&quot;, sum[b] - sum[a-1]);
	}

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그저 단순하게 입력 받은 배열을 가지고 바로 뒤 배열 값과 현재 배열까지 더한 값을 가지고 있는 값의 배열을 하나 더 생성하는 것이다. 이렇게 되면 N과 M구간을 일일이 더하지 않아도 N과 M의 값만 알고 있으면 sum 배열에서 바로 값을 구할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>알고리즘/C언어</category>
      <author>Ye0ngJae</author>
      <guid isPermaLink="true">https://ye0ngjae.tistory.com/132</guid>
      <comments>https://ye0ngjae.tistory.com/132#entry132comment</comments>
      <pubDate>Tue, 2 May 2023 22:56:35 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ] 14465번 &amp;quot;소가 길을 건너간 이유 5&amp;quot; C언어 풀이</title>
      <link>https://ye0ngjae.tistory.com/131</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8I9wl/btsdG9wtOyJ/lO8OerzUZJpBwZvgF86tqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8I9wl/btsdG9wtOyJ/lO8OerzUZJpBwZvgF86tqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8I9wl/btsdG9wtOyJ/lO8OerzUZJpBwZvgF86tqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8I9wl%2FbtsdG9wtOyJ%2FlO8OerzUZJpBwZvgF86tqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1160&quot; height=&quot;209&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;209&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;background-color: #ffffff; color: #0076c0; text-align: start;&quot; href=&quot;https://www.acmicpc.net/problem/14468&quot;&gt;농부 존의 농장에 원형 길이 있다&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;고 했지만, 길은 그뿐만이 아니다. 그 옆에 일자형 길이 있는데, 1번부터 N번까지의 번호가 붙은 횡단보도 N (1 &amp;le; N &amp;le; 100,000)개로 이루어져 있다. 교통사고를 방지하기 위해 존은 각 횡단보도에 신호등을 설치해 놓았다. 그러던 어느 날, 강력한 뇌우로 인해 몇몇 신호등이 망가졌다. 존은 연속한 K개의 신호등이 존재하도록 신호등을 수리하고 싶다. 이번에도 우리가 존을 도와주자.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;첫 줄에 N, K, B (1 &amp;le; B,K &amp;le; N)가 주어진다. 그 다음 B줄에는 고장난 신호등의 번호가 하나씩 주어진다&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;정상적으로 작동하는 연속 K개의 신호등이 존재하려면 최소 몇 개의 신호등을 수리해야 하는지 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력 예시&lt;/h2&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;bash&quot; style=&quot;background-color: #f7f7f9; color: #333333; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;10 6 5
2
10
1
5
9&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력 예시&lt;/h2&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;bash&quot; style=&quot;background-color: #f7f7f9; color: #333333; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;1&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;답안&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드&lt;/h3&gt;
&lt;pre id=&quot;code_1683026148167&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#pragma warning(disable: 4996)
#define _CRT_SECURE_NO_WARNINGS

int main() {

	int arr[100001] = { 0 };
	int N, K, B, num, count = 0, min = 1000000;
	
	scanf(&quot;%d %d %d&quot;, &amp;amp;N, &amp;amp;K, &amp;amp;B);
	
	for (int i = 0; i &amp;lt; B; i++) {
		scanf(&quot;%d&quot;, &amp;amp;num);
		arr[num] = 1;
	}
	for (int i = 1; i+K-1 &amp;lt;= N; i++) {
		count = 0;
		for (int j = i; j &amp;lt; i + K; j++) {
			if (arr[j] == 1)
				count++;
		}
		if (count &amp;lt; min)
			min = count;	
	}
	printf(&quot;%d&quot;, min);

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;첫 줄에 횡단보도의 갯수(신호등의 갯수), 연속해야하는 신호등의 갯수, 고장난 신호등의 번호가 주어진다.&amp;nbsp; 두 번째 줄 부터는 고장난 신호등의 번호가 주어진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 우리는 반복문을 돌면서 각 인덱스 마다 연속해야하는 신호등의 갯수를 충족하기 위해서는 얼마나 필요한지 계산을 하게 된다. 그렇게 반복문을 돌면서 연속해야하는 신호등의 갯수를 충족하기 위해 수리해야하는 횟수를 count에 저장한다. 그리고 count의 값이 min 값보다 작으면 min 값을 count 값으로 업데이트 한다. 이를 배열 끝까지 반복한 후 min 값을 출력한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>알고리즘/C언어</category>
      <author>Ye0ngJae</author>
      <guid isPermaLink="true">https://ye0ngjae.tistory.com/131</guid>
      <comments>https://ye0ngjae.tistory.com/131#entry131comment</comments>
      <pubDate>Tue, 2 May 2023 21:19:05 +0900</pubDate>
    </item>
    <item>
      <title>2022 임베디드 소프트웨어 경진대회(ESW) 틴스타트업 부분 후기</title>
      <link>https://ye0ngjae.tistory.com/130</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9oJ8t/btrXamZu3ZH/Eg4l2MKx1yT080Ove7Fk41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9oJ8t/btrXamZu3ZH/Eg4l2MKx1yT080Ove7Fk41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9oJ8t/btrXamZu3ZH/Eg4l2MKx1yT080Ove7Fk41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9oJ8t%2FbtrXamZu3ZH%2FEg4l2MKx1yT080Ove7Fk41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;552&quot; height=&quot;159&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 SUNSEC이라는 팀명을 달고 대회에 나가 우수상(성균관대학교총장상)을 받았다. 심사 중간에 인터넷이 끊긴다던지, 중간에 하드웨어 전원이 나간다던지 하는 여러 문제가 있었긴 했지만, 그래도 결과를 보자면 매우 좋다고 본다. 그렇게 원하던 상도 받고... 대회 중간에 AVALVE라는 스타트업에서 우리 작품에 관심이 있다고 해서 회사에 놀러 가서 여러 이야기도 나눴다. 일단 후기를 작성하기는 하지만 몇 개월 동안 조금씩 나누어 쓰는 관계로 글에 두서가 없을 수 있으니 양해바란다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1434&quot; data-origin-height=&quot;1075&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBnYOh/btsdBOHcHfI/gW9SXXjutN8ZSBiskdw3h1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBnYOh/btsdBOHcHfI/gW9SXXjutN8ZSBiskdw3h1/img.png&quot; data-alt=&quot;회사에 놀러가서 찍은 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBnYOh/btsdBOHcHfI/gW9SXXjutN8ZSBiskdw3h1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBnYOh%2FbtsdBOHcHfI%2FgW9SXXjutN8ZSBiskdw3h1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1434&quot; height=&quot;1075&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1434&quot; data-origin-height=&quot;1075&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회사에 놀러가서 찍은 사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;717&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bT2phM/btrXbsY5ecO/9cn0OWpn0QXDEkNQVpkew0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bT2phM/btrXbsY5ecO/9cn0OWpn0QXDEkNQVpkew0/img.png&quot; data-alt=&quot;(대회에 다시 나갈 수 있다는 사실에 기뻐하는 팀원들)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bT2phM/btrXbsY5ecO/9cn0OWpn0QXDEkNQVpkew0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbT2phM%2FbtrXbsY5ecO%2F9cn0OWpn0QXDEkNQVpkew0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;548&quot; height=&quot;717&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;717&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(대회에 다시 나갈 수 있다는 사실에 기뻐하는 팀원들)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 그래도 대회 초반은 많이 힘들었다. 우리 팀은 예선 탈락팀이었는데 다행히도 본선 진출 10팀 중에서 1팀이 중도포기를 하여 운이 좋게도 우리팀이 본선에 올라가게 되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;959&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGhVHZ/btsdGoHOoWf/4p0oqGukN1lq5jOMHBLcO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGhVHZ/btsdGoHOoWf/4p0oqGukN1lq5jOMHBLcO0/img.png&quot; data-alt=&quot;노션 페이지 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGhVHZ/btsdGoHOoWf/4p0oqGukN1lq5jOMHBLcO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGhVHZ%2FbtsdGoHOoWf%2F4p0oqGukN1lq5jOMHBLcO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1590&quot; height=&quot;959&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;959&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;노션 페이지 사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예선에 떨어지면서 노션 페이지를 날려버린 관계로 다시 새로 노션 페이지를 파고 개발을 바로 진행하기 시작했다. 소프트웨어를 개발하는 데에는 큰 문제가 발생하지 않았지만 대회 주최 측에서 재료비를 지원해주지 않는 다는게 매우 큰 흠이었다. 대회를 하면서 지원해주는 금액이라곤 교통비 밖에 없었는데 이마저도 수도권의 경우 하루 1만원이라 인천에서 강남 코엑스까지 온 나는 손해였다... 일단 내가 소속된 학교에서 재료비를 지원해준다고 해서 재료비를 어떻게든 조달받아 하드웨어를 만들기 시작했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;1111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KWDSS/btsdJhHr4gG/HMXfKNECsw7YSXsPY4tDB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KWDSS/btsdJhHr4gG/HMXfKNECsw7YSXsPY4tDB1/img.png&quot; data-alt=&quot;결선 진행 부스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KWDSS/btsdJhHr4gG/HMXfKNECsw7YSXsPY4tDB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKWDSS%2FbtsdJhHr4gG%2FHMXfKNECsw7YSXsPY4tDB1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;1111&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;1111&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결선 진행 부스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결선에 올라온 모든 참가자들은 강남 코엑스에서 부스를 운영한다. 부스를 운영하면서 일반인들에게 작품을 설명하고 홍보하다가 심사위원이 오면 심사위원한테 설명하는 방식으로 이루어진다. 이렇게 설명을 하면서 1차로 평가가 되고, 2차로는 따로 발표장에 가서 ppt로 발표와 질의응답을 진행한다. 심사 시간이 아니면 자유롭게 돌아다녀도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;2220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jrom7/btsdKlv5XKN/rrkWKVStCcB0shxZgh2dkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jrom7/btsdKlv5XKN/rrkWKVStCcB0shxZgh2dkk/img.png&quot; data-alt=&quot;사람이 오길 기다리며 부스에서 놀고 있는 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jrom7/btsdKlv5XKN/rrkWKVStCcB0shxZgh2dkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJrom7%2FbtsdKlv5XKN%2FrrkWKVStCcB0shxZgh2dkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;2220&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;2220&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사람이 오길 기다리며 부스에서 놀고 있는 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솔직히 상은 받았지만 그렇게 잘 받은 것 같지는 않다. 들어가는 돈이며, 시간을 생각하면 가성비는 좋지 않다. 또,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하필이면 대회 결선 기간이 기말고사 기간이라 기말 고사 기간에 학교를 빼고 3일동안 코엑스에 가서 대회를 진행해야 한다;; 만약 자신이 돈이나 시간이 흘러 넘치고 성적을 상관하지 않는다면 추천한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발하면서 쓴 github과 유튜브 링크는 아래에 남긴다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Contest-Sunsec&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/Contest-Sunsec&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674628161377&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;profile&quot; data-og-title=&quot;Contest-Sunsec&quot; data-og-description=&quot;Contest-Sunsec has 5 repositories available. Follow their code on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Contest-Sunsec&quot; data-og-url=&quot;https://github.com/Contest-Sunsec&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bw2pLt/hyRoLC6jeR/ew34zMaKwswK1eNPJD7QIk/img.png?width=280&amp;amp;height=280&amp;amp;face=0_0_280_280,https://scrap.kakaocdn.net/dn/xm1z9/hyRoJeb48P/IqonOkyWaW0oX8Q6OMWbNk/img.png?width=3000&amp;amp;height=1400&amp;amp;face=0_0_3000_1400&quot;&gt;&lt;a href=&quot;https://github.com/Contest-Sunsec&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Contest-Sunsec&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bw2pLt/hyRoLC6jeR/ew34zMaKwswK1eNPJD7QIk/img.png?width=280&amp;amp;height=280&amp;amp;face=0_0_280_280,https://scrap.kakaocdn.net/dn/xm1z9/hyRoJeb48P/IqonOkyWaW0oX8Q6OMWbNk/img.png?width=3000&amp;amp;height=1400&amp;amp;face=0_0_3000_1400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Contest-Sunsec&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contest-Sunsec has 5 repositories available. Follow their code on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/@farmsert722&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/@farmsert722&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674628214759&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;profile&quot; data-og-title=&quot;Farmsert&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.youtube.com&quot; data-og-source-url=&quot;https://www.youtube.com/@farmsert722&quot; data-og-url=&quot;https://www.youtube.com/channel/UC4_5DPmOPqyiQn-NcbuUFAA&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/O9SaQ/hyRoKjRuKq/0QkOpBxGlOyAXkhrcTw0Kk/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900,https://scrap.kakaocdn.net/dn/vJBdb/hyRoMosgTJ/bDnKkWG7urihbzLnSHfNVK/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900&quot;&gt;&lt;a href=&quot;https://www.youtube.com/@farmsert722&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.youtube.com/@farmsert722&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/O9SaQ/hyRoKjRuKq/0QkOpBxGlOyAXkhrcTw0Kk/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900,https://scrap.kakaocdn.net/dn/vJBdb/hyRoMosgTJ/bDnKkWG7urihbzLnSHfNVK/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Farmsert&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.youtube.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <author>Ye0ngJae</author>
      <guid isPermaLink="true">https://ye0ngjae.tistory.com/130</guid>
      <comments>https://ye0ngjae.tistory.com/130#entry130comment</comments>
      <pubDate>Wed, 25 Jan 2023 14:54:15 +0900</pubDate>
    </item>
    <item>
      <title>문서형 악성코드 분석과 제작</title>
      <link>https://ye0ngjae.tistory.com/129</link>
      <description>&lt;h1&gt;문서형 악성코드 분석과 제작&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Layer7 프로젝트와 학교 정보보안프로젝트 소수전공 프로젝트로 진행한 프로젝트로써 실제 공격에 사용된 문서형 악성코드 분석과 분석 결과를 토대로 실제로 제작을 해 보았다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;팀소개&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;남영재(팀장)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://th3-b3st-h4ck3r.tistory.com/&quot;&gt;이수현&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로젝트 주제 선정 동기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 들어 북한이 여러 문서형 악성코드를 이용한 특정 분야 전문가에 대한 공격이 급증하는 가운데 관련 피해도 증가하고 있다. 굳이 북한뿐만 아니라 Virus Total에서 제공하는 통계자료인 Virus Total File Types 통계자료를 살펴보면 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btWbYA/btsFlSBsX3x/FFvZNbIA9Nd6GQCFv9ATk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btWbYA/btsFlSBsX3x/FFvZNbIA9Nd6GQCFv9ATk1/img.png&quot; data-alt=&quot;[그림 1] Virus Total File Types Stat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btWbYA/btsFlSBsX3x/FFvZNbIA9Nd6GQCFv9ATk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtWbYA%2FbtsFlSBsX3x%2FFFvZNbIA9Nd6GQCFv9ATk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;569&quot; height=&quot;152&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1] Virus Total File Types Stat&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통계를 살펴보면 가장 많이 보고되는 악성 파일의 Type은 exe(실행파일)이지만, 문서형 악성코 드인 PDF, DOCX, DOC 비중이 다른 파일 타입에 비교하여 그리 낮지 않으며, 점차 증가하고 있다. 이에 우리는 이렇게 점차 증가하고 있는 문서형 악성코드의 동작 원리와 문서 프로그램의 존재하던 어떠한 취약점을 이용하여 실제 공격을 진행하는지 궁금증이 생겨 주제를 선정하게 되었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 문서형 악성코드란?&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLGJKj/btsFir5EuyR/Cw2AYGBcHHVKNO8S27Wopk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLGJKj/btsFir5EuyR/Cw2AYGBcHHVKNO8S27Wopk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLGJKj/btsFir5EuyR/Cw2AYGBcHHVKNO8S27Wopk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLGJKj%2FbtsFir5EuyR%2FCw2AYGBcHHVKNO8S27Wopk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;103&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pdf, hwp, docx와 같은 전자 문서 파일을 악용하여 개인정보 탈취, 파일 암호화 등 악성 행위 를 하는 것을 문서형 악성코드라고 할 수 있다. 문서형 악성코드는 타 악성코드처럼 실행파일로 되어있는 것이 아니라 일반적인 전자 문서의 형태로 되어있다. 문서파일의 존재 자체로 컴퓨터에 해를 가하는 것이 아니라 사용자가 해당 문서를 열람함으로써 문서 내부에 숨겨져 있던 악성코드가 실행된다는 점에서 기존의 악성코드와는 다르다. 기존 악성 코드는 파일을 실행하면서 다른 전용 프로그램이 필요하지 않지만, 문서형 악성코드는 해당 문서 확장자에 따른 전용 프로그램이 필요하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-1. 문서형 악성코드 종류&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 현재 MS Word / 한글 문서 작성 프로그램에서 문서 프로그램 자체의 취약점으로 흔히 쓰이는 문서형 악성코드 유형이다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;VBA 매크로&lt;/b&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/db5PCg/btsFoJjbMFA/7Anxm2ovk6CwadM5E0tr8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/db5PCg/btsFoJjbMFA/7Anxm2ovk6CwadM5E0tr8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/db5PCg/btsFoJjbMFA/7Anxm2ovk6CwadM5E0tr8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdb5PCg%2FbtsFoJjbMFA%2F7Anxm2ovk6CwadM5E0tr8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;304&quot; height=&quot;191&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
MS Word에서 기본적으로 제공하는 매크로 기능을 이용하여 스크립트를 실행시키는 방식이다. MS Word의 매크로 입력 창에 사전에 작성한 악성 스크립트를 입력하면 문서가 처음 실행되었 을 때 자동적으로 매크로를 실행하여 공격자가 사전에 심어놓은 스크립트에 따라 행동을 하게 된 다. 가장 간단한 악성 스크립트인 만큼 바이러스 백신에 가장 쉽게 걸리는 매크로이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;OLE(Object Linking and Embedding)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cK5nIU/btsFitPUQWb/Krk3Xk5BFZ43d2Ck6IRJPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cK5nIU/btsFitPUQWb/Krk3Xk5BFZ43d2Ck6IRJPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cK5nIU/btsFitPUQWb/Krk3Xk5BFZ43d2Ck6IRJPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcK5nIU%2FbtsFitPUQWb%2FKrk3Xk5BFZ43d2Ck6IRJPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;304&quot; height=&quot;191&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MS Word에서 지원하는 OLE은 문서와 기타 객체에 연결과 삽입을 도와주는 연결규약이다. 링 크와 임베드를 지원하고 있는데, 링크의 경우 기타 언어의 포인터와 비슷한 역할을 하며 소스 파 일의 데이터가 변경될 시 변경 내용에 문서에 반영된다. 임베드된 오브젝트는 소스 파일 데이터 복사본이다. 소스 파일의 데이터가 변경된다고 하더라도 변경사항이 문서에 반영되지 않는다. 링크 방식을 이용하여 외부에 악성 스크립트가 작성된 외부 문서를 자신의 문서로 불러와 해당 문서에 포함된 스크립트를 실행하는 방식이다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;DDE&lt;/b&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mz6ZF/btsFnYOtEcV/6JRkEhFRK1rE0Y3GelLp4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mz6ZF/btsFnYOtEcV/6JRkEhFRK1rE0Y3GelLp4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mz6ZF/btsFnYOtEcV/6JRkEhFRK1rE0Y3GelLp4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmz6ZF%2FbtsFnYOtEcV%2F6JRkEhFRK1rE0Y3GelLp4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;304&quot; height=&quot;191&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DDE란 윈도우 응용 프로그램 간에 정보를 공유하도록 허용하는 방법이다. OLE과 비슷한 기능 을 한다고 생각하면 편하다. 공격자는 도형이나 사진 등에 DDE 기능을 이용하여 악성 스크립트 가 작성된 타 문서를 삽입하여 해당 문서에 포함되어있는 악성 스크립트를 실행하는 기법이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 문서형 악성코드 공격 동향&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서형 악성코드의 경우 북한의 해커들이 미국, 한국 등의 북한 관련 인물, 군사&amp;middot;과학 연구 관련 분야 종사자들을 대상으로 지속해서 공격해오고 있고, 최근 들어 점점 증가하고 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lZNsI/btsFipUhUIw/wik2EdInRruh3ALokqiKG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lZNsI/btsFipUhUIw/wik2EdInRruh3ALokqiKG0/img.png&quot; data-origin-width=&quot;1029&quot; data-origin-height=&quot;1174&quot; data-is-animation=&quot;false&quot; width=&quot;250&quot; height=&quot;285&quot; style=&quot;width: 49.2489%; margin-right: 10px;&quot; data-widthpercent=&quot;49.83&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lZNsI/btsFipUhUIw/wik2EdInRruh3ALokqiKG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlZNsI%2FbtsFipUhUIw%2Fwik2EdInRruh3ALokqiKG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1029&quot; height=&quot;1174&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o9Swn/btsFmiUbOfv/vKQioBnc7XqdI8ChcrSLTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o9Swn/btsFmiUbOfv/vKQioBnc7XqdI8ChcrSLTk/img.png&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;1311&quot; data-is-animation=&quot;false&quot; width=&quot;250&quot; height=&quot;283&quot; data-widthpercent=&quot;50.17&quot; style=&quot;width: 49.5883%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o9Swn/btsFmiUbOfv/vKQioBnc7XqdI8ChcrSLTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo9Swn%2FbtsFmiUbOfv%2FvKQioBnc7XqdI8ChcrSLTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1157&quot; height=&quot;1311&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 문서형 악성코드 분석&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 악성코드 샘플 제공 사이트에서 제공하는 표본들을 분석한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-1. 424-xpl&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 널리 퍼진 문서형 악성코드의 작성 방식과 다르게 본 파일은 CVE-2017-11882를 사용하는 문서이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-1-1. 파일정보&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IES7G/btsFhf5IFxQ/CnYlaK2FkLxea2JabCJrZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IES7G/btsFhf5IFxQ/CnYlaK2FkLxea2JabCJrZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IES7G/btsFhf5IFxQ/CnYlaK2FkLxea2JabCJrZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIES7G%2FbtsFhf5IFxQ%2FCnYlaK2FkLxea2JabCJrZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;466&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-1-2. 동작 흐름&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;- &lt;b&gt;424-xpl.docx&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1866&quot; data-origin-height=&quot;1051&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWvz1V/btsFh8kZqC9/LHqZCkkyzJqQAnOVMekGtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWvz1V/btsFh8kZqC9/LHqZCkkyzJqQAnOVMekGtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWvz1V/btsFh8kZqC9/LHqZCkkyzJqQAnOVMekGtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWvz1V%2FbtsFh8kZqC9%2FLHqZCkkyzJqQAnOVMekGtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1866&quot; height=&quot;1051&quot; data-origin-width=&quot;1866&quot; data-origin-height=&quot;1051&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;1054&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF7JTS/btsFlWRkGAK/QCBD8t18qENM39KTLjRwx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF7JTS/btsFlWRkGAK/QCBD8t18qENM39KTLjRwx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF7JTS/btsFlWRkGAK/QCBD8t18qENM39KTLjRwx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF7JTS%2FbtsFlWRkGAK%2FQCBD8t18qENM39KTLjRwx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1868&quot; height=&quot;1054&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;1054&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1961&quot; data-origin-height=&quot;1175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W9s4O/btsFiP6zLo8/kpe1yFWFEoitNKNJFcyqh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W9s4O/btsFiP6zLo8/kpe1yFWFEoitNKNJFcyqh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W9s4O/btsFiP6zLo8/kpe1yFWFEoitNKNJFcyqh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW9s4O%2FbtsFiP6zLo8%2Fkpe1yFWFEoitNKNJFcyqh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1961&quot; height=&quot;1175&quot; data-origin-width=&quot;1961&quot; data-origin-height=&quot;1175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;- &lt;b&gt;__00______00__.doc&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1773&quot; data-origin-height=&quot;996&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LF1PR/btsFhUUCsQt/OEIEVJdQwnC7Ocim2lw2kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LF1PR/btsFhUUCsQt/OEIEVJdQwnC7Ocim2lw2kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LF1PR/btsFhUUCsQt/OEIEVJdQwnC7Ocim2lw2kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLF1PR%2FbtsFhUUCsQt%2FOEIEVJdQwnC7Ocim2lw2kK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1773&quot; height=&quot;996&quot; data-origin-width=&quot;1773&quot; data-origin-height=&quot;996&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2051&quot; data-origin-height=&quot;1219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8EuOU/btsFlPSf3WL/ZxPAwG06pXOKgCYi4aqZlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8EuOU/btsFlPSf3WL/ZxPAwG06pXOKgCYi4aqZlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8EuOU/btsFlPSf3WL/ZxPAwG06pXOKgCYi4aqZlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8EuOU%2FbtsFlPSf3WL%2FZxPAwG06pXOKgCYi4aqZlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2051&quot; height=&quot;1219&quot; data-origin-width=&quot;2051&quot; data-origin-height=&quot;1219&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;- &lt;b&gt;간단한 진행도&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;424.docx -&amp;gt; _00_______00__.doc -&amp;gt; vbc.exe&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 00____00__.doc 파일에서 vbc.exe라는 실행 파일을 다운로드 받는 것을 확인할 수 있었다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-1-3. 실행파일 구조&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;940&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rq4X5/btsFlUFZqnv/v01vcJwzRsdqPkexufZOX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rq4X5/btsFlUFZqnv/v01vcJwzRsdqPkexufZOX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rq4X5/btsFlUFZqnv/v01vcJwzRsdqPkexufZOX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frq4X5%2FbtsFlUFZqnv%2Fv01vcJwzRsdqPkexufZOX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;279&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;940&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 vbc.exe 실행파일에서 중요한 함수 몇 가지만을 살펴보자.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;- wWinMain&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1737&quot; data-origin-height=&quot;1069&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KTXkV/btsFkHz8fvv/yJgtBAo6i4Psd4nc1hkjj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KTXkV/btsFkHz8fvv/yJgtBAo6i4Psd4nc1hkjj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KTXkV/btsFkHz8fvv/yJgtBAo6i4Psd4nc1hkjj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKTXkV%2FbtsFkHz8fvv%2FyJgtBAo6i4Psd4nc1hkjj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;369&quot; data-origin-width=&quot;1737&quot; data-origin-height=&quot;1069&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부에서 호출되는 함수 같은 경우 WinAPI를 제외하고 vsprintf, scanf, remove, abort, sub_402EE9 함수가 호출되는 것을 확인할 수 있다. abort로 프로그램을 비정상적으로 종료하는 것으로 보아 dwBytes가 3이면 안 되는 것 같다. 어쨌든 dwBytes가 3이 아니면 조건문을 건너뛰고, sub_402EE9 함수로 넘어가게 된다. &lt;br /&gt;&lt;b&gt;- sub_402C34&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;1212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D6Dyz/btsFkH1kciC/i8ulxj8QSxKIYl0xZne6D0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D6Dyz/btsFkH1kciC/i8ulxj8QSxKIYl0xZne6D0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D6Dyz/btsFkH1kciC/i8ulxj8QSxKIYl0xZne6D0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD6Dyz%2FbtsFkH1kciC%2Fi8ulxj8QSxKIYl0xZne6D0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;480&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;1212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;- sub_402C34&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;1214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CPTTz/btsFoDi06X9/QYBBwSlYdjOaXzyvG54941/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CPTTz/btsFoDi06X9/QYBBwSlYdjOaXzyvG54941/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CPTTz/btsFoDi06X9/QYBBwSlYdjOaXzyvG54941/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCPTTz%2FbtsFoDi06X9%2FQYBBwSlYdjOaXzyvG54941%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;688&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;1214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sub_402EE9 내부에 존재했던 sub_402B88 함수를 보면 처음에 SetDefaultCommConfigW로 통신 프로그램을 구성하고 있는데, 이를 통해 공격자에게 무언가를 보낼 거란 걸 추측할 수 있고, 이는 sub_402C34 함수에서 얻었던 컴퓨터 정보일 확률이 높다. 이런 일련의 과정이 끝나면, 다시 sub_402EE9로 돌아와 드라이브 정보, 파일 위치, 정보 등을 수정하고 스레드를 종료한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 결국 vbc.exe 실행 파일은 피해자의 pc에 다운로드 되어 피해자의 pc에 대한 각종 정보를 획득하고 이를 공격자의 서버로 전송하는 프로그램임을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-2. [붙임] 약력 양식.docx, 법제처 국가법령정보센터.doc&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[붙임] 약력 양식.doc과 법제처 국가법령정보센터.doc이 같은 형식의 파일이었기 때문에 하나의 파일만 분석하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-2-1. 파일정보&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;법제처 국가법령정보센터.doc&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVqnBj/btsFmlcibXf/VmjGORvcdplWl3fyyGPYU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVqnBj/btsFmlcibXf/VmjGORvcdplWl3fyyGPYU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVqnBj/btsFmlcibXf/VmjGORvcdplWl3fyyGPYU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVqnBj%2FbtsFmlcibXf%2FVmjGORvcdplWl3fyyGPYU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;127&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-2-2. 동작 흐름&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;531&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDz4og/btsFmi7Mjxa/WqHFzilb73OJnjTBHp2JFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDz4og/btsFmi7Mjxa/WqHFzilb73OJnjTBHp2JFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDz4og/btsFmi7Mjxa/WqHFzilb73OJnjTBHp2JFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDz4og%2FbtsFmi7Mjxa%2FWqHFzilb73OJnjTBHp2JFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;531&quot; height=&quot;267&quot; data-origin-width=&quot;531&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VBA 매크로를 이용하여 동작하는 매크로임을 알 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-2-3. 실행코드&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A9e2P/btsFiPSXDdU/NTbZP3Ij0syZ6mpA5m0jA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A9e2P/btsFiPSXDdU/NTbZP3Ij0syZ6mpA5m0jA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A9e2P/btsFiPSXDdU/NTbZP3Ij0syZ6mpA5m0jA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA9e2P%2FbtsFiPSXDdU%2FNTbZP3Ij0syZ6mpA5m0jA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;447&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MS Word에서는 VBA 매크로 부분이 암호화되어 코드 확인이 불가능 하였기 때문에, 따로 DOCX 문서에서 VBA 매크로를 추출하는 툴을 이용하여 추출하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 VBA 매크로 함수를 살펴보면 무엇인가 암호화된 글자로 가득한 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드를 자세히 살펴 보면 변수에 문자열을 할당하고, 그 문자열에 있는 모든 부분문자열 &amp;ldquo;eila&amp;rdquo;에 대해 &amp;ldquo;&amp;rdquo; 으로 replace하고 있다. 또한 여러 문자열을 치환하여 일종의 암호화를 진행하고 있는데, 해당 코드를 다시 복호화 하여 주면 아래와 같은 코드가 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1734&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bN3wJB/btsFlUMLVWj/4Zer4b7fVcmHMVu267aAW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bN3wJB/btsFlUMLVWj/4Zer4b7fVcmHMVu267aAW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bN3wJB/btsFlUMLVWj/4Zer4b7fVcmHMVu267aAW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbN3wJB%2FbtsFlUMLVWj%2F4Zer4b7fVcmHMVu267aAW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;154&quot; data-origin-width=&quot;1734&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 링크를 통하여 파일 하나를 다운로드 받는 스크립트임을 확인할 수 있다. 분석 당시에는 해당 서버가 운영중이었기 때문에 해당 서버에 접속하여 악성코드가 다운로드 받는 코드를 수집하였다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;yn.txt&lt;/b&gt;&lt;br /&gt;yn.txt 파일 내부에 중요 함수는 다음과 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://media.discordapp.net/attachments/789505880307400748/1063833410788921446/image.png&quot; width=&quot;500px&quot; height=&quot;250px&quot; /&gt;&lt;img src=&quot;https://media.discordapp.net/attachments/789505880307400748/1063831372747243640/image.png?width=983&amp;amp;height=671&quot; width=&quot;600px&quot; height=&quot;450px&quot; /&gt;&lt;img src=&quot;https://media.discordapp.net/attachments/789505880307400748/1063831446923517962/image.png?width=815&amp;amp;height=671&quot; width=&quot;600px&quot; height=&quot;550px&quot; /&gt;&lt;img src=&quot;https://media.discordapp.net/attachments/789505880307400748/1063831579526430790/image.png?width=1342&amp;amp;height=671&quot; width=&quot;600px&quot; height=&quot;350px&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yn.txt 코드 내에선, 계속해서 사용자의 로그 정보를 탈취하고 그걸 base 64로 인코딩해 post.php라는 이름의 파일로 올리고 있다. 또, 로그를 얻을 땐 del.php라는 프로그램을 내려받아 그 프로그램을 decode 함수대로 디코딩 하여 실행시킨 다음 그 결과 값을 반환하고 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;post.php&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://media.discordapp.net/attachments/789505880307400748/1063833739219701820/image.png?width=1263&amp;amp;height=671&quot; width=&quot;600px&quot; height=&quot;350px&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;post.php 안에는 result와 거기에 들어가는 base 64로 인코딩된 문자열이 있었다. 해당 문자열 을 base 64 방식으로 decode 해주면&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://media.discordapp.net/attachments/789505880307400748/1063833884149686282/image.png?width=1273&amp;amp;height=671&quot; width=&quot;600px&quot; height=&quot;350px&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피해자 PC의 Log로 보이는 여러 항목이 post.php에 인자로 전달되고 있다. 이를 통해 미루어 보아 피해자 PC의 로그를 공격자의 서버로 전송하는 것 같다. 계속해서 분석하여 보자. 위에 yn.txt 파일을 보면 post.php 뿐만 아니라 del.php 파일도 호출하고 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;del.php&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://media.discordapp.net/attachments/789505880307400748/1063834252858363934/image.png?width=405&amp;amp;height=671&quot; width=&quot;600px&quot; height=&quot;1000px&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yn.txt의 decode 함수대로 decode를 해보니 본래의 php 코드가 나타났다. 해당 코드를 살펴 보면 사용자가 입력한 키보드값을 로그로 남겨 &amp;ldquo;Ahnlab.hwp&amp;rdquo;에 저장하고 있다. 따라서 이 악성코드가 실행되면 사용자가 입력한 키보드 정보와 프로세스 정보가 계속해서 공격 자의 서버로 올라가고 이로써 피해자 PC의 취약한 정보를 쉽게 얻어낼 수 있게 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 문서형 악성코드 제작&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;1031&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAhHGO/btsFm1Lt0a8/4EZiJyl3lzEit4yf8yf1U1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAhHGO/btsFm1Lt0a8/4EZiJyl3lzEit4yf8yf1U1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAhHGO/btsFm1Lt0a8/4EZiJyl3lzEit4yf8yf1U1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAhHGO%2FbtsFm1Lt0a8%2F4EZiJyl3lzEit4yf8yf1U1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;1031&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;1031&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본교 신입생 자기소개서 양식 파일을 MS WORD로 변환한 후 MS WORD의 매크로 기능을 이용하여 특정 주소의 포트로 reverse shell을 여는 악성 스크립트를 문서에 삽입하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1042&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DvrRy/btsFiNt9kQS/8K7i6uWIjQWUsKOXSxBNr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DvrRy/btsFiNt9kQS/8K7i6uWIjQWUsKOXSxBNr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DvrRy/btsFiNt9kQS/8K7i6uWIjQWUsKOXSxBNr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDvrRy%2FbtsFiNt9kQS%2F8K7i6uWIjQWUsKOXSxBNr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;1042&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1042&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AutoOpen()과 Document_Open() 함수를 이용하여 문서를 열람할 시 자동적으로 main 함수의 매크로가 실행되도록 하였다. powershell에서이용하여 reverse shell을 여는 스크립트를 삽입하였다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;시연영상&lt;/b&gt; :&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/FQqH4QJ2exI&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 대응방안&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;OS 및 문서 작성 소프트웨어를 항상 최신 버전으로 업데이트한다.&lt;/li&gt;
&lt;li&gt;신뢰할 수 없는 출처의 파일은 실행하지 않는다.&lt;/li&gt;
&lt;li&gt;중요한 파일 같은 경우 백업하고 물리적으로 분리하여 둔다.&lt;/li&gt;
&lt;li&gt;PC에 바이러스 백신 등을 설치하고 항상 최신 버전으로 업데이트한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;어려웠던 점 및 해결 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 진행하던 중 악성코드 표본 수집과 Visual Basic을 이용하여 작성된 악성 스크립트 분석에 어려움을 겪었다. 악성코드 표본 수집의 경우 app.any.run 사이트와 VirusTotal 등의 사이트를 통하여 악성코드 표본 등을 수집할 수 있었다. Visual Basic을 이용하여 작성된 악성코드 분석의 경우 팀원들끼리 서로 논의하며 Visual Basic 문서를 보며 분석하였다. 이렇게 나온 Visual Basic 악성코드는 상당 부분이 이미 C&amp;amp;C 서버가 폐쇄되어 확인할 수 없거나 표본을 제공하는 측에서 일부 값을 삭제하고 주어서 분석하는 데 어 려움을 겪었으나 다른 코드를 참고하면서 해당 코드가 어떠한 역할을 하는지 분석하였다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 참고 자료&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;- 개념 참고 자료&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://csrc.kaist.ac.kr/blog/2021/06/15/%EB%AC%B8%EC%84%9C%ED%98%95-%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%96%B4%EB%96%A0%ED%95%9C-&quot;&gt;https://csrc.kaist.ac.kr/blog/2021/06/15/%EB%AC%B8%EC%84%9C%ED%98%95-%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%96%B4%EB%96%A0%ED%95%9C-&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://csrc.kaist.ac.kr/blog/2021/06/15/%EB%AC%B8%EC%84%9C%ED%98%95-%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%96%B4%EB%96%A0%ED%95%9C-%ED%8A%B9%EC%A7%95%EC%9D%B4-%EC%9E%88%EC%9D%84%EA%B9%8C/&quot;&gt;https://csrc.kaist.ac.kr/blog/2021/06/15/%EB%AC%B8%EC%84%9C%ED%98%95-%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%96%B4%EB%96%A0%ED%95%9C-%ED%8A%B9%EC%A7%95%EC%9D%B4-%EC%9E%88%EC%9D%84%EA%B9%8C/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.somansa.com/wp-content/uploads/2022/04/north2021.11.pdf&quot;&gt;https://www.somansa.com/wp-content/uploads/2022/04/north2021.11.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wogh8732.tistory.com/425&quot;&gt;https://wogh8732.tistory.com/425&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://csrc.kaist.ac.kr/blog/2021/09/16/%ED%95%9C%EA%B8%80-%EB%AC%B8%EC%84%9C-%EA%BC%AD%EA%BC%AD-%EC%88%A8%EC%96%B4%EB%9D%BC-%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C-%EB%B3%B4%EC%9D%BC%EB%9D%BC/&quot;&gt;https://csrc.kaist.ac.kr/blog/2021/09/16/%ED%95%9C%EA%B8%80-%EB%AC%B8%EC%84%9C-%EA%BC%AD%EA%BC%AD-%EC%88%A8%EC%96%B4%EB%9D%BC-%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C-%EB%B3%B4%EC%9D%BC%EB%9D%BC/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;- 기사 출처&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.boannews.com/media/view.asp?idx=110379&amp;amp;page=1&amp;amp;kind=1&quot;&gt;https://www.boannews.com/media/view.asp?idx=110379&amp;amp;page=1&amp;amp;kind=1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.boannews.com/media/view.asp?idx=109227&amp;amp;page=2&amp;amp;kind=1&quot;&gt;https://www.boannews.com/media/view.asp?idx=109227&amp;amp;page=2&amp;amp;kind=1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;- 악성코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[붙임] 약력 양식&lt;/b&gt; &amp;ndash; &lt;a href=&quot;https://app.any.run/tasks/696b92bb-46d5-48be-9370-f04b247e5f68/&quot;&gt;https://app.any.run/tasks/696b92bb-46d5-48be-9370-f04b247e5f68/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;attacker1.doc&lt;/b&gt; &amp;ndash; &lt;a href=&quot;https://app.any.run/tasks/3900be5e-b901-485f-9ddb-e4b3ac87f4f2/#&quot;&gt;https://app.any.run/tasks/3900be5e-b901-485f-9ddb-e4b3ac87f4f2/#&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;424-xpl.doc&lt;/b&gt; &amp;ndash; &lt;a href=&quot;https://app.any.run/tasks/30bb546b-036b-43fc-878d-00dfd1d12671/&quot;&gt;https://app.any.run/tasks/30bb546b-036b-43fc-878d-00dfd1d12671/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 링크 열람에 유의할 것&lt;/p&gt;</description>
      <category>프로젝트</category>
      <author>Ye0ngJae</author>
      <guid isPermaLink="true">https://ye0ngjae.tistory.com/129</guid>
      <comments>https://ye0ngjae.tistory.com/129#entry129comment</comments>
      <pubDate>Sat, 14 Jan 2023 14:28:18 +0900</pubDate>
    </item>
  </channel>
</rss>