<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Dork's port</title>
    <link>https://dork94.tistory.com/</link>
    <description>컴퓨터 공부하다 알아 가는 것들을 공유하는 블로그 입니다.
틀린 내용 지적해주시면 감사히 받겠습니다.</description>
    <language>ko</language>
    <pubDate>Thu, 10 Sep 2026 12:43:22 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Dork94</managingEditor>
    <image>
      <title>Dork's port</title>
      <url>https://tistory1.daumcdn.net/tistory/2820442/attach/2dc4c604771e4f909053e572c7a44f05</url>
      <link>https://dork94.tistory.com</link>
    </image>
    <item>
      <title>Mac OS(OSX) Mail 첨부파일 한글 깨짐</title>
      <link>https://dork94.tistory.com/288</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;defaults write com.apple.mail NSPreferredMailCharset &quot;UTF-8&quot;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 명령어를 터미널에 붙여넣기 한 후, 메일앱을 완전히 끄고(cmd + q) 재시작하면 된다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>Dork94</author>
      <guid isPermaLink="true">https://dork94.tistory.com/288</guid>
      <comments>https://dork94.tistory.com/288#entry288comment</comments>
      <pubDate>Tue, 17 Jan 2023 13:03:38 +0900</pubDate>
    </item>
    <item>
      <title>연락처 (Contact)</title>
      <link>https://dork94.tistory.com/notice/287</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;@line : +8210-8273-9870&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@email : espoirnoa09@gmail.com&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@facebook :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.facebook.com/espoirnoa09&quot;&gt;https://www.facebook.com/espoirnoa09&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1670673819018&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;로그인 또는 가입하여 보기&quot; data-og-description=&quot;Facebook에서 게시물, 사진 등을 확인하세요.&quot; data-og-host=&quot;www.facebook.com&quot; data-og-source-url=&quot;https://www.facebook.com/espoirnoa09/&quot; data-og-url=&quot;https://www.facebook.com/login/?next=https%3A%2F%2Fwww.facebook.com%2Fespoirnoa09%2F&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.facebook.com/espoirnoa09/&quot; data-source-url=&quot;https://www.facebook.com/espoirnoa09/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;로그인 또는 가입하여 보기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Facebook에서 게시물, 사진 등을 확인하세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.facebook.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <author>Dork94</author>
      <guid isPermaLink="true">https://dork94.tistory.com/notice/287</guid>
      <pubDate>Sat, 10 Dec 2022 21:03:50 +0900</pubDate>
    </item>
    <item>
      <title>minikube 설치 중 오류</title>
      <link>https://dork94.tistory.com/285</link>
      <description>&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;pre id=&quot;code_1662654216378&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;   Exiting due to PROVIDER_DOCKER_NEWGRP: &quot;docker version --format -&quot; exit status 1: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get &quot;http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version&quot;: dial unix /var/run/docker.sock: connect: permission denied&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;시도 1 &amp;nbsp;- 실패&lt;/p&gt;
&lt;pre id=&quot;code_1662654243037&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo usermod -aG docker $USER &amp;amp;&amp;amp; newgrp docker
setgroups: Operation not permitted
setgid: Operation not permitted&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;해결 방법&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;sudo chmod 666 /var/run/docker.sock&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;실행 결과&lt;/p&gt;
&lt;pre id=&quot;code_1662654276095&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@localhost: ~$ minikube start --driver=docker
   minikube v1.26.1 on Ubuntu 20.04
✨  Using the docker driver based on user configuration
   Using Docker driver with root privileges
   Starting control plane node minikube in cluster minikube
   Pulling base image ...
   Downloading Kubernetes v1.24.3 preload ...
    &amp;gt; preloaded-images-k8s-v18-v1...:  405.75 MiB / 405.75 MiB  100.00% 112.80
    &amp;gt; gcr.io/k8s-minikube/kicbase:  386.60 MiB / 386.61 MiB  100.00% 19.07 MiB
    &amp;gt; gcr.io/k8s-minikube/kicbase:  0 B [________________________] ?% ? p/s 16s
   Creating docker container (CPUs=2, Memory=7800MB) ...
   Preparing Kubernetes v1.24.3 on Docker 20.10.17 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
   Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
   Enabled addons: default-storageclass, storage-provisioner
   kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
   Done! kubectl is now configured to use &quot;minikube&quot; cluster and &quot;default&quot; namespace by default&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>Dork94</author>
      <guid isPermaLink="true">https://dork94.tistory.com/285</guid>
      <comments>https://dork94.tistory.com/285#entry285comment</comments>
      <pubDate>Fri, 9 Sep 2022 01:25:10 +0900</pubDate>
    </item>
    <item>
      <title>Nethunter on Ticwatch Pro 3</title>
      <link>https://dork94.tistory.com/284</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자료가 사라져서 우선 Arichve 자료 백업&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;a href=&quot;https://web.archive.org/web/20220617211727/https://www.kali.org/docs/nethunter/installing-nethunter-on-the-ticwatch-pro3/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://web.archive.org/web/20220617211727/https://www.kali.org/docs/nethunter/installing-nethunter-on-the-ticwatch-pro3/&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;a href=&quot;https://build.nethunter.com/contributors/re4son/catfish/TicWatch-Pro-3-files/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://build.nethunter.com/contributors/re4son/catfish/TicWatch-Pro-3-files/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1660902773555&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Index of /catfish/TicWatch-Pro-3-files/&quot; data-og-description=&quot;&quot; data-og-host=&quot;build.nethunter.com&quot; data-og-source-url=&quot;https://build.nethunter.com/contributors/re4son/catfish/TicWatch-Pro-3-files/&quot; data-og-url=&quot;https://build.nethunter.com/contributors/re4son/catfish/TicWatch-Pro-3-files/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://build.nethunter.com/contributors/re4son/catfish/TicWatch-Pro-3-files/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://build.nethunter.com/contributors/re4son/catfish/TicWatch-Pro-3-files/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Index of /catfish/TicWatch-Pro-3-files/&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;build.nethunter.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gitlab.com/yesimxev/kali-docs/-/tree/master/nethunter/installing-nethunter-on-the-ticwatch-pro3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gitlab.com/yesimxev/kali-docs/-/tree/master/nethunter/installing-nethunter-on-the-ticwatch-pro3&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1660904670178&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;nethunter/installing-nethunter-on-the-ticwatch-pro3 &amp;middot; master &amp;middot; yesimxev / kali-docs &amp;middot; GitLab&quot; data-og-description=&quot;Markdown format of www.kali.org/docs/&quot; data-og-host=&quot;gitlab.com&quot; data-og-source-url=&quot;https://gitlab.com/yesimxev/kali-docs/-/tree/master/nethunter/installing-nethunter-on-the-ticwatch-pro3&quot; data-og-url=&quot;https://gitlab.com/yesimxev/kali-docs/-/tree/master/nethunter/installing-nethunter-on-the-ticwatch-pro3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/clK33F/hyPuBKbRT7/HorJdqxHh9CnlEQDsKVsXK/img.png?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256,https://scrap.kakaocdn.net/dn/PU8L4/hyPuJ9hjfU/OqFcTX4mNcRnWrQ5I1ug8k/img.png?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256&quot;&gt;&lt;a href=&quot;https://gitlab.com/yesimxev/kali-docs/-/tree/master/nethunter/installing-nethunter-on-the-ticwatch-pro3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gitlab.com/yesimxev/kali-docs/-/tree/master/nethunter/installing-nethunter-on-the-ticwatch-pro3&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/clK33F/hyPuBKbRT7/HorJdqxHh9CnlEQDsKVsXK/img.png?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256,https://scrap.kakaocdn.net/dn/PU8L4/hyPuJ9hjfU/OqFcTX4mNcRnWrQ5I1ug8k/img.png?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256');&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;nethunter/installing-nethunter-on-the-ticwatch-pro3 &amp;middot; master &amp;middot; yesimxev / kali-docs &amp;middot; GitLab&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Markdown format of www.kali.org/docs/&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gitlab.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://forum.xda-developers.com/t/rom-official-kali-nethunter-for-the-ticwatch-pro-3-wearos.4456797/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://forum.xda-developers.com/t/rom-official-kali-nethunter-for-the-ticwatch-pro-3-wearos.4456797/&lt;/a&gt;&lt;/p&gt;</description>
      <category>Linux</category>
      <author>Dork94</author>
      <guid isPermaLink="true">https://dork94.tistory.com/284</guid>
      <comments>https://dork94.tistory.com/284#entry284comment</comments>
      <pubDate>Fri, 19 Aug 2022 18:42:38 +0900</pubDate>
    </item>
    <item>
      <title>Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local) 해결</title>
      <link>https://dork94.tistory.com/283</link>
      <description>&lt;p&gt;&lt;code&gt;$ /usr/sbin/softwareupdate --install-rosetta --agree-to-license&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ arch -x86\_64 /bin/bash -c &amp;quot;$(curl -fsSL [https://raw.githubusercontent.com/Homebrew/install/master/install.sh)](https://raw.githubusercontent.com/Homebrew/install/master/install.sh))&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;arch -x86\_64 brew install &amp;quot;package&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ref :  &lt;a href=&quot;https://stackoverflow.com/questions/64963370/error-cannot-install-in-homebrew-on-arm-processor-in-intel-default-prefix-usr&quot;&gt;https://stackoverflow.com/questions/64963370/error-cannot-install-in-homebrew-on-arm-processor-in-intel-default-prefix-usr&lt;/a&gt;&lt;/p&gt;</description>
      <category>Mac OS</category>
      <author>Dork94</author>
      <guid isPermaLink="true">https://dork94.tistory.com/283</guid>
      <comments>https://dork94.tistory.com/283#entry283comment</comments>
      <pubDate>Thu, 7 Jul 2022 10:22:34 +0900</pubDate>
    </item>
    <item>
      <title>git :  refusing to merge unrelated histories 에러 해결</title>
      <link>https://dork94.tistory.com/282</link>
      <description>&lt;pre id=&quot;code_1650947707631&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git pull origin master --allow-unrelated-histories&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Develop</category>
      <author>Dork94</author>
      <guid isPermaLink="true">https://dork94.tistory.com/282</guid>
      <comments>https://dork94.tistory.com/282#entry282comment</comments>
      <pubDate>Tue, 26 Apr 2022 13:35:18 +0900</pubDate>
    </item>
    <item>
      <title>frida no response 프리다 응답이 없는 경우</title>
      <link>https://dork94.tistory.com/281</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프리다를 실행한 후 어떤 에러 메세지도 없이 계속 대기 상태일 때가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그때 pip 으로 frida-tools를 install해주면 된다.&lt;/p&gt;</description>
      <category>frida-crackme</category>
      <author>Dork94</author>
      <guid isPermaLink="true">https://dork94.tistory.com/281</guid>
      <comments>https://dork94.tistory.com/281#entry281comment</comments>
      <pubDate>Sun, 13 Feb 2022 22:44:58 +0900</pubDate>
    </item>
    <item>
      <title>KakaoTV None DRM 프로토콜 분석 및 동영상 다운로드</title>
      <link>https://dork94.tistory.com/280</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;draft&lt;/p&gt;</description>
      <category>DRM</category>
      <author>Dork94</author>
      <guid isPermaLink="true">https://dork94.tistory.com/280</guid>
      <comments>https://dork94.tistory.com/280#entry280comment</comments>
      <pubDate>Wed, 2 Feb 2022 14:11:19 +0900</pubDate>
    </item>
    <item>
      <title>Wavve(웨이브) HLS 프로토콜 분석 및  None DRM 콘텐츠 핑거프린트 (워터마킹)분석 -2</title>
      <link>https://dork94.tistory.com/279</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.dork94.com/278&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.01.30 - [DRM] - Wavve(웨이브) HLS 프로토콜 분석 및 None DRM 콘텐츠 핑거프린트 분석 -1&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전&amp;nbsp;글에서&amp;nbsp;Wavve는&amp;nbsp;DRM이&amp;nbsp;적용되지&amp;nbsp;않은&amp;nbsp;미디어는&amp;nbsp;HLS&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼, 이번에는 그 주소를 통해 Wavve가 다운로드를 제공하지 않는 콘텐츠를 실제로 다운할 수 있는지, 다운이 된다면 핑거프린트가 적용되어 있는지 알아 보도록 하자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2022-01-31 at 1.14.46 PM.png&quot; data-origin-width=&quot;2716&quot; data-origin-height=&quot;1636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRZtUi/btrr2WR848u/Y658yez8ZU9W5Ncte1Xjo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRZtUi/btrr2WR848u/Y658yez8ZU9W5Ncte1Xjo1/img.png&quot; data-alt=&quot;다운로드가 되지 않는 동영상 중 하나인 검정고무신&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRZtUi/btrr2WR848u/Y658yez8ZU9W5Ncte1Xjo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRZtUi%2Fbtrr2WR848u%2FY658yez8ZU9W5Ncte1Xjo1%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;2716&quot; height=&quot;1636&quot; data-filename=&quot;Screen Shot 2022-01-31 at 1.14.46 PM.png&quot; data-origin-width=&quot;2716&quot; data-origin-height=&quot;1636&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;그 예제로 검정고무신을 다운받아 보도록 하자. 직접 주소로 일일히 다운받아 영상을 합치기는 정성이 너무 많이 필요하므로 간단한 PoC를 작성해서 실제로 다운로드 해 보았다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=m5uI7z6VnyI&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bXquPv/hyNgf2okOQ/LtKTlY9lkgvnxXW0BKq8X0/img.jpg?width=640&amp;amp;height=480&amp;amp;face=0_0_640_480&quot; data-video-width=&quot;640&quot; data-video-height=&quot;480&quot; data-video-origin-width=&quot;640&quot; data-video-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/m5uI7z6VnyI&quot; width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;검정고무신 1기 2화 다운로드 시연&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;다운로드를 제공하지 않는 콘텐츠에는 웨이브측의 어떤 사정이 있다고 생각하는데, 프로토콜 분석을 통해 다운로드를 제공하지 않는 영상에 대해서도 다운로드가 가능한것은 문제의 소지가 있어보인다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;사실, 이런 콘텐츠(OTT, Music streaming)들을 분석하면서 느낀점은, 프로토콜 분석을 통해 대부분의 미디어를 (허용하지 않음에도)다운 받을 수 있었는데, 왜 이럴 수 밖에 없을까 곰곰히 고민해본 결과는 아무래도 모든 미디어를 암호화 하거나 핑거프린팅을 적용하는데에 비용적인 측면이 큰 것 같다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼, 다음 스탭으로 넘어가도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드가 가능함을 알았으니, 차선책으로 할 수 있는 것은 미디어에 핑거프린팅이 적용되어 만일 유출되었을 경우에 유출한 사용자를 특정할 수 있다면 책임을 물을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 핑거프린팅에 대해 어떤 기법이 있고 그를 어떻게 찾을 수 있는지 잘 모른다. 스테가노그래피등은 CTF의 문제에서 접해보긴 했지만, 잘 안다고 할 수는 없다.&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;가정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 핑거프린팅을 하기 위해서는 동영상 데이터에 사용자 정보(credential, User ID 등)를 은닉해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 은닉이 되었다면 동영상 데이터에 미세하지만 변화가 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 핑거프린팅이 적용 되었다면 같은 동영상에 대해 hash 값을 비교했을데 다른 hash 값을 가질 것 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 가정에 따라 다운로드한 동영상에 대해 핑거프린팅이 적용 되었는지 테스트 해 볼것이며, 각각 다른 웨이브 계정으로 프로토콜 분석을 통해 마찬가지로 검정고무신을 다운로드 해 보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2022-01-31 at 2.12.36 PM.png&quot; data-origin-width=&quot;1716&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x5sNM/btrr9y9YXIa/JZF6SXt92h5HQB4nSUQkYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x5sNM/btrr9y9YXIa/JZF6SXt92h5HQB4nSUQkYk/img.png&quot; data-alt=&quot;각각 다른 계정을 이용해 다운로드한 None DRM 콘텐츠&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x5sNM/btrr9y9YXIa/JZF6SXt92h5HQB4nSUQkYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx5sNM%2Fbtrr9y9YXIa%2FJZF6SXt92h5HQB4nSUQkYk%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;1716&quot; height=&quot;314&quot; data-filename=&quot;Screen Shot 2022-01-31 at 2.12.36 PM.png&quot; data-origin-width=&quot;1716&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;각각 다른 계정을 이용해 다운로드한 None DRM 콘텐츠&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼, 이 둘의 데이터가 정확히 일치하는지 hash 알고리즘을 통해 알아보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2022-01-31 at 2.15.23 PM.png&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0FgDM/btrsc2iOLY0/dXmBa8h0g7aWt6Xvca5kX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0FgDM/btrsc2iOLY0/dXmBa8h0g7aWt6Xvca5kX1/img.png&quot; data-alt=&quot;두 파일의 MD5 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0FgDM/btrsc2iOLY0/dXmBa8h0g7aWt6Xvca5kX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0FgDM%2Fbtrsc2iOLY0%2FdXmBa8h0g7aWt6Xvca5kX1%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;1130&quot; height=&quot;144&quot; data-filename=&quot;Screen Shot 2022-01-31 at 2.15.23 PM.png&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;두 파일의 MD5 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 보는 바와 같이 같은 md5 결과 값을 가진다. 즉, 다른 계정을 통해 None DRM 콘텐츠를 다운로드 했음에도, 같은 데이터를 가지는 동영상 파일을 서버에서 제공하는 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;md5는 확률이 극악이긴 하지만&amp;nbsp;collision문제가 있을 수 있다. 따라서, sha를 통해 한번더 검증해보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2022-01-31 at 2.21.50 PM.png&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwW8MY/btrr7qkqGG3/Jkuh5LwIfLNUrIH8KjqW20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwW8MY/btrr7qkqGG3/Jkuh5LwIfLNUrIH8KjqW20/img.png&quot; data-alt=&quot;두 파일의 sha 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwW8MY/btrr7qkqGG3/Jkuh5LwIfLNUrIH8KjqW20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwW8MY%2Fbtrr7qkqGG3%2FJkuh5LwIfLNUrIH8KjqW20%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;1164&quot; height=&quot;142&quot; data-filename=&quot;Screen Shot 2022-01-31 at 2.21.50 PM.png&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;두 파일의 sha 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 동일한 sha 값을 가지는 것을 보아 이정도면 두 파일은 데이터가 완벽히 같은 파일이라고 볼 수 있다.&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;만일 어떤 사용자가 동영상을 다운받고 유포하여 금전적 이득을 취하거나, 간접적으로 웨이브의 수익을 감소시키는 행위를 하더라도 웨이브측에서 대응할 방법이 없을 것 같다.&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;1. HLS 프로토콜 분석 - O&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 다운로드가 불가능 한 콘텐츠의 다운로드 가능성 분석 - 다운로드가 불가능 한 콘텐츠 다운로드 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 다운로드 한 영상에 사용자의 정보(fingerprint)가 포함되어 콘텐츠가 유출되었을 경우 유출한 사람을 특정할 수 있는 가능성이 있는지 - 핑거프린팅 기법이 적용되어 있지 않아, 콘텐츠 유출시 책임추적성을 보장할 수 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 핑거프린팅의 경우 단순히 가설을 세우고 검증했기 때문에 올바른 결과가 아닐 수도 있다. 그럼 포스팅 끝!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상으로 포스팅을 마치도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 내용에 대해서는 마찬가지로 취약점 제보를 통해 개선될 수 있도록 할 예정이며, 프로토콜 분석을 통해 다운로드하고 유포하는 경우 책임이 있을 수 있습니다. 이를 통해서 어떻게 취약점을 개선할 수 있고 개선할 때에 일어날 수 있는 문제점에 대해 고민해 볼 수 있는 시간을 갖을 수 있을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DRM</category>
      <author>Dork94</author>
      <guid isPermaLink="true">https://dork94.tistory.com/279</guid>
      <comments>https://dork94.tistory.com/279#entry279comment</comments>
      <pubDate>Mon, 31 Jan 2022 13:00:42 +0900</pubDate>
    </item>
    <item>
      <title>Wavve(웨이브) HLS 프로토콜 분석 및  None DRM 콘텐츠 핑거프린트(워터마킹) 분석 -1</title>
      <link>https://dork94.tistory.com/278</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;저번에 DRM 콘텐츠 분석을 끝내고 일반 콘텐츠는 어떻게 동작을 하는지, 다운로드가 가능하다면 다운로드 한 파일에 대해 사용자에 대한 핑거프린트가 적용이 되어있는지 의문이 생겨 글 작성을 하려합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅의 목적은 3가지이며, 웨이브 동영상을 다운받고자 설명하려는 목적이 아님을 밝힙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. HLS 프로토콜 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 다운로드가 불가능 한 콘텐츠의 다운로드 가능성 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 다운로드 한 영상에 사용자의 정보(fingerprint)가 포함되어 콘텐츠가 유출되었을 경우 유출한 사람을 특정할 수 있는 가능성이 있는지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용이 많아 2개의 포스팅으로 나누었으며, 첫 번째 포스팅에는 웨이브 소개와 프로토콜 분석, 두 번째 포스팅에는 동영상 다운로드와 핑거프린팅 분석으로 나눠서 포스팅 하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래부터 편한 말로 작성을 하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 웨이브에는 이용권에는 다운로드 할 수 있는 기능이 존재한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2022-01-30 at 4.19.48 PM.png&quot; data-origin-width=&quot;2606&quot; data-origin-height=&quot;1558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RGlvl/btrr2zibUhA/DVmXBgGbFJK0bblAnJwj90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RGlvl/btrr2zibUhA/DVmXBgGbFJK0bblAnJwj90/img.png&quot; data-alt=&quot;웨이브의 다운로드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RGlvl/btrr2zibUhA/DVmXBgGbFJK0bblAnJwj90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRGlvl%2Fbtrr2zibUhA%2FDVmXBgGbFJK0bblAnJwj90%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;2606&quot; height=&quot;1558&quot; data-filename=&quot;Screen Shot 2022-01-30 at 4.19.48 PM.png&quot; data-origin-width=&quot;2606&quot; data-origin-height=&quot;1558&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;다운로드를 누르게 되면 해당 영상을 다운로드할 수 있는 링크가 주어지고, 이 링크를 통해 영상을 mp4 형식으로 다운로드할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이용권에 고지한 다운로드에 관련된 내용을 찾아보니 다음과 같다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;방송VOD 다운로드는 콘텐츠에 따라 다운로드가 제한될 수 있으며, 서비스 사정에 따라 다운로드 횟수가 제한될 수 있습니다.&lt;br /&gt;방송VOD 다운로드는 TV에서는 제공하지 않습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 다운로드 할 수 있는 콘텐츠가 제한되어 있고 횟수 또한 제한되어 있다는 뜻인데, 실제로 다운로드가 가능한 콘텐츠와 그렇지 않은 콘텐츠가 나뉘어 져 있는 것을 쉽게 찾을 수 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2022-01-30 at 4.32.10 PM.png&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LnBuu/btrr7pZFaTI/Ak3wIWNr67AUSF88j2FD0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LnBuu/btrr7pZFaTI/Ak3wIWNr67AUSF88j2FD0K/img.png&quot; data-alt=&quot;다운로드 가능 콘텐츠&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LnBuu/btrr7pZFaTI/Ak3wIWNr67AUSF88j2FD0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLnBuu%2Fbtrr7pZFaTI%2FAk3wIWNr67AUSF88j2FD0K%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;766&quot; height=&quot;306&quot; data-filename=&quot;Screen Shot 2022-01-30 at 4.32.10 PM.png&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;306&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2022-01-30 at 4.33.57 PM.png&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsOAo8/btrr16mYhT5/i6xtRJaybsDBNkSrnhK6k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsOAo8/btrr16mYhT5/i6xtRJaybsDBNkSrnhK6k0/img.png&quot; data-alt=&quot;다운로드 불가능 콘텐츠&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsOAo8/btrr16mYhT5/i6xtRJaybsDBNkSrnhK6k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsOAo8%2Fbtrr16mYhT5%2Fi6xtRJaybsDBNkSrnhK6k0%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;714&quot; height=&quot;322&quot; data-filename=&quot;Screen Shot 2022-01-30 at 4.33.57 PM.png&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;322&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;우선 웨이브에서 지원하는 다운로드에 대해 알았으니, 본격적으로 HLS 프로토콜에 대한 분석을 해보도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토콜 분석은 MacOS의 크롬 브라우저에서 진행되었다.&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;Screen Shot 2022-01-30 at 4.53.17 PM.png&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;974&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LIxq7/btrsaSfYfP1/4GmYm3fGlyIvqKDPQeOtv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LIxq7/btrsaSfYfP1/4GmYm3fGlyIvqKDPQeOtv0/img.png&quot; data-alt=&quot;웨이브 일반 콘텐츠 네트워크 프로토콜&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LIxq7/btrsaSfYfP1/4GmYm3fGlyIvqKDPQeOtv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLIxq7%2FbtrsaSfYfP1%2F4GmYm3fGlyIvqKDPQeOtv0%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;872&quot; height=&quot;974&quot; data-filename=&quot;Screen Shot 2022-01-30 at 4.53.17 PM.png&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;974&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;재생과 무관한 js, data 파일들을 제외 하면, 가장 먼저 발생하는 프로토콜은 GET 방식으로 &lt;a href=&quot;https://apis.wavve.com/fz/streaming&quot;&gt;https://apis.wavve.com/fz/streaming&lt;/a&gt;&amp;nbsp;주소에 파라미터와 함께 request가 발생한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1643529636311&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- https://apis.wavve.com/fz/streaming parameters --&amp;gt;
device: pc
partner: pooq
apikey: E5F3E0D30947AA5440556471321BB6D9
credential: Private information
pooqzone: none
region: kor
drm: none
targetage: all
contentid: C3601_C36000000023_01_0002.1
contenttype: vod
hdr: sdr
videocodec: avc
audiocodec: aac
issurround: n
format: normal
withinsubtitle: n
action: hls
protocol: hls
quality: auto
deviceModelId: Mac OS X
guid: ebda780c-17f4-11eb-a60c-12f21e1997c6
lastplayid: none
authtype: cookie
isabr: y
ishevc: n&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파라미터를 살펴보면, 사용자가 재생을 할 수 있는지 검증하기 위한 credential 값과 재생하는 재생하는 장치에 대한 정보를 비롯해서 프로토콜의 정보, 코덱정보, 콘텐츠 정보(id)가 파라미터로 사용되는 것을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특이한 점이라면, DRM이 적용된 콘텐츠에는 MPEG-DASH프로토콜이 사용되었는데, DRM이 적용되지 않은 콘텐츠는 HLS방식으로 스트리밍을 하는 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen_Shot_2022-01-30_at_5_05_14_PM.png&quot; data-origin-width=&quot;1820&quot; data-origin-height=&quot;1176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAHe1B/btrr9fbrwZc/SoAkI67DvuZyOzDkzu9nC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAHe1B/btrr9fbrwZc/SoAkI67DvuZyOzDkzu9nC0/img.png&quot; data-alt=&quot;https://apis.wavve.com/fz/streaming의 응답 값&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAHe1B/btrr9fbrwZc/SoAkI67DvuZyOzDkzu9nC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAHe1B%2Fbtrr9fbrwZc%2FSoAkI67DvuZyOzDkzu9nC0%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;1820&quot; height=&quot;1176&quot; data-filename=&quot;Screen_Shot_2022-01-30_at_5_05_14_PM.png&quot; data-origin-width=&quot;1820&quot; data-origin-height=&quot;1176&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://apis.wavve.com/fz/streaming의 응답 값&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;응답 값을 보면 해당 콘텐츠를 재생하기 위해 필요한 정보와 콘텐츠에 대한 정보가 json 형태로 오는것을 볼 수 있는데, DRM에서 분석한 것과 마찬가지로 aws cookie가 제공되며 이를 헤더 쿠키 값에 추가하여 이후에 발생할 프로토콜에 대해 콘텐츠 접근을 제어한 다는 것을 유추할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1643530350750&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- Response of https://apis.wavve.com/fz/streaming --&amp;gt;
{
   &quot;play&quot;:&quot;y&quot;,
   &quot;prerollad&quot;:{
      
   },
   &quot;authtype&quot;:&quot;cookie&quot;,
   &quot;playurl&quot;:&quot;https://vod.sdn.wavve.com/hls/C3601/C3601_C36000000023_01_0002.1/2/chunklist5000.m3u8&quot;,
   &quot;liveurl&quot;:&quot;&quot;,
   &quot;etcurl&quot;:&quot;https://vod.sdn.wavve.com/etc/C3601/C3601_C36000000023_01_0002.1/2/&quot;,
   &quot;awscookie&quot;:&quot;Policy=&quot;,
   &quot;subtitles&quot;:[
      
   ],
   &quot;issue&quot;:&quot;2022-01-30 16:53:01+0900&quot;,
   &quot;playid&quot;:&quot;00b2fed59e664d54af581830e250bf86&quot;,
   &quot;qualities&quot;:{
      &quot;ishevc&quot;:&quot;n&quot;,
      &quot;pagecount&quot;:&quot;5&quot;,
      &quot;count&quot;:&quot;5&quot;,
      &quot;mediatypes&quot;:[
         &quot;SDR&quot;
      ],
      &quot;list&quot;:[
         {
            &quot;id&quot;:&quot;1080p&quot;,
            &quot;name&quot;:&quot;FHD&quot;,
            &quot;marks&quot;:&quot;&quot;,
            &quot;filesize&quot;:&quot;1 GB&quot;
         },
         {
            &quot;id&quot;:&quot;720p&quot;,
            &quot;name&quot;:&quot;HD&quot;,
            &quot;marks&quot;:&quot;&quot;,
            &quot;filesize&quot;:&quot;642 MB&quot;
         },
         {
            &quot;id&quot;:&quot;480p&quot;,
            &quot;name&quot;:&quot;SD&quot;,
            &quot;marks&quot;:&quot;&quot;,
            &quot;filesize&quot;:&quot;357 MB&quot;
         },
         {
            &quot;id&quot;:&quot;360p&quot;,
            &quot;name&quot;:&quot;모바일화질&quot;,
            &quot;marks&quot;:&quot;&quot;,
            &quot;filesize&quot;:&quot;191 MB&quot;
         },
         {
            &quot;id&quot;:&quot;100p&quot;,
            &quot;name&quot;:&quot;오디오모드&quot;,
            &quot;marks&quot;:&quot;&quot;,
            &quot;filesize&quot;:&quot;0 MB&quot;
         }
      ]
   },
   &quot;quality&quot;:&quot;1080p&quot;,
   &quot;preview&quot;:{
      
   },
   &quot;chargedtype&quot;:&quot;y&quot;,
   &quot;pricetype&quot;:&quot;p&quot;,
   &quot;concurrencygroup&quot;:&quot;1&quot;,
   &quot;playtime&quot;:&quot;3600&quot;,
   &quot;onairvod&quot;:{
      
   },
   &quot;drmtype&quot;:&quot;&quot;,
   &quot;drm&quot;:{
      
   },
   &quot;previewtime&quot;:&quot;60&quot;,
   &quot;nexttriggerseconds&quot;:&quot;30&quot;,
   &quot;marketing&quot;:{
      
   },
   &quot;postscreen&quot;:&quot;recommend&quot;,
   &quot;country&quot;:&quot;KR&quot;,
   &quot;extraitem&quot;:&quot;&quot;,
   &quot;version&quot;:&quot;3.47 preview message2&quot;,
   &quot;from&quot;:&quot;azure&quot;,
   &quot;debug&quot;:{
      &quot;version&quot;:&quot;2.32a&quot;,
      &quot;process.env.deploystate&quot;:&quot;production&quot;
   },
   &quot;errormessage&quot;:&quot;서비스 연결이 지연되고 있습니다.\n잠시 후 이용해 주세요.&quot;,
   &quot;mediatype&quot;:&quot;SDR&quot;,
   &quot;bookmarkextra&quot;:{
      &quot;product&quot;:&quot;pk_1489=pass,&quot;,
      &quot;pca&quot;:&quot;y,cloudfront&quot;,
      &quot;origin&quot;:&quot;inside&quot;
   }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 응답 값에서 주목할 만한 부분은 playurl 인데, 이 주소를 통해 콘텐츠를 스트리밍 할때 사용되는 m3u8 포맷을 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 발생하는 네트워크 활동으로 &lt;a href=&quot;https://vod.sdn.wavve.com/hls/C3601/C3601_C36000000023_01_0002.1/2/chunklist5000.m3u8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://vod.sdn.wavve.com/hls/C3601/C3601_C36000000023_01_0002.1/2/chunklist5000.m3u8&lt;/a&gt;의 주소로 request가 발생하는 것을 볼 수 있었는데, 이 주소는 이전에 응답 값의 playurl 주소와 일치한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1643531174206&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- chunklist5000.m3u8 --&amp;gt;
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=249000,AVERAGE-BANDWIDTH=204507,CODECS=&quot;avc1.4D4015,mp4a.40.2&quot;,RESOLUTION=480x270,FRAME-RATE=30.00
150/chunklist.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=410592,AVERAGE-BANDWIDTH=300239,CODECS=&quot;avc1.4D4015,mp4a.40.2&quot;,RESOLUTION=480x270,FRAME-RATE=30.00
250/chunklist.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=867808,AVERAGE-BANDWIDTH=605301,CODECS=&quot;avc1.4D401E,mp4a.40.2&quot;,RESOLUTION=640x360,FRAME-RATE=30.00
500/chunklist.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1637856,AVERAGE-BANDWIDTH=1121595,CODECS=&quot;avc1.4D401F,mp4a.40.2&quot;,RESOLUTION=854x480,FRAME-RATE=30.00
1000/chunklist.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2865120,AVERAGE-BANDWIDTH=2090548,CODECS=&quot;avc1.4D401F,mp4a.40.2&quot;,RESOLUTION=1280x720,FRAME-RATE=30.00
2000/chunklist.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7521504,AVERAGE-BANDWIDTH=5174707,CODECS=&quot;avc1.4D4028,mp4a.40.2&quot;,RESOLUTION=1920x1080,FRAME-RATE=30.00
5000/chunklist.m3u8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;m3u8의 파일에는 재생을 위한 url이 있는 것이 아닌, 또다른 m3u8 파일을 참조하도록 구성되어있는데, 동영상 화질에 따라 각각 다른 m3u8 파일을 참조하도록 url이 구성되어 있는 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 여기까지 하고, 다음 네트워크 활동을 보도록 하자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2022-01-30 at 5.29.55 PM.png&quot; data-origin-width=&quot;1872&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddARkH/btrr2WYwWMM/TsRS4ufAE1sKfAxVhsxWk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddARkH/btrr2WYwWMM/TsRS4ufAE1sKfAxVhsxWk1/img.png&quot; data-alt=&quot;chunklist5000이후 네트워크 활동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddARkH/btrr2WYwWMM/TsRS4ufAE1sKfAxVhsxWk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddARkH%2Fbtrr2WYwWMM%2FTsRS4ufAE1sKfAxVhsxWk1%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;1872&quot; height=&quot;360&quot; data-filename=&quot;Screen Shot 2022-01-30 at 5.29.55 PM.png&quot; data-origin-width=&quot;1872&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;chunklist5000이후 네트워크 활동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 네트워크 활동으로는 또다른 m3u8 파일을 얻도록 요청을 보내는 것을 확인할 수 있는데, 이 주소는 이전의 m3u8파일 (chunklist5000)에서 얻어 왔다는 사실을 알 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 위의 네트워크에 대한 응답을 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1643532293179&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- chunklist.m3u8--&amp;gt;

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:2.067,
0/media_1.ts
#EXTINF:2.000,
0/media_2.ts
...
0/media_367.ts
#EXT-X-ENDLIST&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마침내 실제로 스트리밍할때 필요한 주소가 들어있는 m3u8파일을 얻을 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hls도 dash와 마찬가지로 미디어 파일을 여러개의 segment로 나누어서 스트리밍을 하는 것을 알 수 있으며, 각 segment의 uri 주소를 m3u8파일에 명시해줌으로서 스트리밍이 동작하게 하는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 이 네트워크 활동 이후에는 m3u8 파일에 명시되어있는 주소로 요청을 하나씩 보내는 것을 확인할 수 있었으며 응답으로는 실제 데이터(동영상)이 응답으로 오는 것을 알 수 있다.&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;Screen Shot 2022-01-30 at 5.47.48 PM.png&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QqA2t/btrr9fidYFH/2eUaxq7246kdssA2DyfAW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QqA2t/btrr9fidYFH/2eUaxq7246kdssA2DyfAW1/img.png&quot; data-alt=&quot;실제 동영상 데이터를 요청하는 uri와 응답&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QqA2t/btrr9fidYFH/2eUaxq7246kdssA2DyfAW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQqA2t%2Fbtrr9fidYFH%2F2eUaxq7246kdssA2DyfAW1%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;1530&quot; height=&quot;550&quot; data-filename=&quot;Screen Shot 2022-01-30 at 5.47.48 PM.png&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;실제 동영상 데이터를 요청하는 uri와 응답&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;1. 사용자 정보와 content id로 m3u8 주소 요청 -&amp;gt; 화질별 m3u8의 주소가 담겨있는 m3u8&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 원하는 화질의 m3u8 주소로 요청 -&amp;gt; 실제 동영상의 데이터를 받을 수 있는 m3u8&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3 m3u8에 있는 uri로 요청 -&amp;gt; 실제 동영상 데이터 &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, m3u8 파일을 2번 요청하게 되며 첫 번째 m3u8 파일은 화질별 m3u8의 uri 주소가 담겨있고, 두 번째 m3u8에 실제로 동영상 데이터를 얻을 수 있는 uri이 포함되어 있다. DASH 프로토콜과 다른점은 video와 audio가 나뉘어져있지 않고, uri가 파일안에 제공되는 것 같다. 파일의 크기나 네트워크 패킷의 수를 줄일때는 dash 방식이, 내가 알아볼땐 hls가 편한 느낌..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 프로토콜 분석은 끝났으니, 이를 이용해서 실제로 동영상을 다운받을 수 있는지, 그리고 프로토콜 분석을 통해 다운받은 동영상과 &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;&amp;nbsp;&lt;/p&gt;</description>
      <category>DRM</category>
      <author>Dork94</author>
      <guid isPermaLink="true">https://dork94.tistory.com/278</guid>
      <comments>https://dork94.tistory.com/278#entry278comment</comments>
      <pubDate>Sun, 30 Jan 2022 16:05:52 +0900</pubDate>
    </item>
  </channel>
</rss>