<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>KiRist's Blog</title>
    <link>https://kirist2357.tistory.com/</link>
    <description>정보보안에 관심 많은 미친 고등학생</description>
    <language>ko</language>
    <pubDate>Mon, 6 Apr 2026 05:39:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>KiRist</managingEditor>
    <image>
      <title>KiRist's Blog</title>
      <url>https://tistory1.daumcdn.net/tistory/3811166/attach/8eb42b71f8b44833ba80000a82debf2b</url>
      <link>https://kirist2357.tistory.com</link>
    </image>
    <item>
      <title>AST injection (1) - What is AST?</title>
      <link>https://kirist2357.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 &lt;a href=&quot;https://blog.p6.is/AST-Injection/&quot; target=&quot;_self&quot;&gt;&lt;span&gt;https://blog.p6.is/AST-Injection/&lt;/span&gt;&lt;/a&gt; 글의 번역글 입니다. 해당 사진 및 자료는 이 블로그에서 가져왔습니다.&lt;br&gt;번역 오류 및 수정 요청은 비밀댓글로 적어주시면 감사하겠습니다.&lt;br&gt;질문이 있으시다면, 댓글 또는 Discord DM(KiRist#0119)으로 질문해주시면 감사하겠습니다.&lt;br&gt;답변이 힘든 경우도 있으니, 조금 양해해주셨으면 합니다.&lt;br&gt; &lt;br&gt; &lt;br&gt;양이 너무 많아 읽기 힘드실 것 같기도 하며, 필요한 내용만 보고 싶으신 분들을 위해,&lt;br&gt;AST injection에 대해 3부작으로 나누어 제작하게 되었습니다.&lt;br&gt;참고해주세요.&lt;br&gt; &lt;/p&gt;
&lt;h1&gt;What is AST?&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AST는 Abstract syntax tree의 약자입니다.&lt;br&gt;구문 해석기라 불리며, 컴파일러 개발시에 가장 꼭 필요한 요소입니다.&lt;br&gt;&lt;a href=&quot;https://talkingaboutme.tistory.com/entry/Study-Abstract-Syntax-Tree-AST&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://talkingaboutme.tistory.com/entry/Study-Abstract-Syntax-Tree-AST&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[Study] Abstract Syntax Tree (AST)&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;이전 포스트 중에서 Left Recursive와 Right Recursive를 설명하면서 Parse Tree 라는 것을 잠깐 언급한 적이 있다. 말 그대로 해당 구문을 분석한 것이다. 그때 어떤 방향으로 분석하는지에 따라서 결과가 &quot; data-og-host=&quot;talkingaboutme.tistory.com&quot; data-og-source-url=&quot;https://talkingaboutme.tistory.com/entry/Study-Abstract-Syntax-Tree-AST&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lKshr/hyLFH7RkKt/6g8Jqa5rJUYZAmj6lkDzfk/img.png?width=800&amp;amp;height=558&amp;amp;face=0_0_800_558,https://scrap.kakaocdn.net/dn/bc6d9S/hyLFHfLddM/ejrdaiAmkl4vS5k3OsoqEk/img.png?width=800&amp;amp;height=558&amp;amp;face=0_0_800_558,https://scrap.kakaocdn.net/dn/4mM4H/hyLFDEogaF/gCM8EakldZKzrFDUTckuuK/img.png?width=968&amp;amp;height=676&amp;amp;face=0_0_968_676&quot; data-og-url=&quot;https://talkingaboutme.tistory.com/entry/Study-Abstract-Syntax-Tree-AST&quot;&gt;
 &lt;a href=&quot;https://talkingaboutme.tistory.com/entry/Study-Abstract-Syntax-Tree-AST&quot; target=&quot;_blank&quot; data-source-url=&quot;https://talkingaboutme.tistory.com/entry/Study-Abstract-Syntax-Tree-AST&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lKshr/hyLFH7RkKt/6g8Jqa5rJUYZAmj6lkDzfk/img.png?width=800&amp;amp;height=558&amp;amp;face=0_0_800_558,https://scrap.kakaocdn.net/dn/bc6d9S/hyLFHfLddM/ejrdaiAmkl4vS5k3OsoqEk/img.png?width=800&amp;amp;height=558&amp;amp;face=0_0_800_558,https://scrap.kakaocdn.net/dn/4mM4H/hyLFDEogaF/gCM8EakldZKzrFDUTckuuK/img.png?width=968&amp;amp;height=676&amp;amp;face=0_0_968_676')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;[Study] Abstract Syntax Tree (AST)&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;이전 포스트 중에서 Left Recursive와 Right Recursive를 설명하면서 Parse Tree 라는 것을 잠깐 언급한 적이 있다. 말 그대로 해당 구문을 분석한 것이다. 그때 어떤 방향으로 분석하는지에 따라서 결과가 &lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;talkingaboutme.tistory.com&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Abstract_syntax_tree&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://en.wikipedia.org/wiki/Abstract_syntax_tree&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;Abstract syntax tree - Wikipedia&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;For the trees used in linguistics, see Parse tree. An abstract syntax tree for the following code for the Euclidean algorithm:while b ≠ 0 if a &gt; b a&amp;nbsp;:= a − b else b&amp;nbsp;:= b − areturn a In computer science, an abstract syntax tree (AST), or just syntax&quot; data-og-host=&quot;en.wikipedia.org&quot; data-og-source-url=&quot;https://en.wikipedia.org/wiki/Abstract_syntax_tree&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ezrFbV/hyLFH08XZb/zD3hKVD2nYGheTNKvty8n1/img.png?width=1200&amp;amp;height=1354&amp;amp;face=0_0_1200_1354&quot; data-og-url=&quot;https://en.wikipedia.org/wiki/Abstract_syntax_tree&quot;&gt;
 &lt;a href=&quot;https://en.wikipedia.org/wiki/Abstract_syntax_tree&quot; target=&quot;_blank&quot; data-source-url=&quot;https://en.wikipedia.org/wiki/Abstract_syntax_tree&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ezrFbV/hyLFH08XZb/zD3hKVD2nYGheTNKvty8n1/img.png?width=1200&amp;amp;height=1354&amp;amp;face=0_0_1200_1354')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;Abstract syntax tree - Wikipedia&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;For the trees used in linguistics, see Parse tree. An abstract syntax tree for the following code for the Euclidean algorithm:while b ≠ 0 if a &amp;gt; b a&amp;nbsp;:= a − b else b&amp;nbsp;:= b − areturn a In computer science, an abstract syntax tree (AST), or just syntax&lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;en.wikipedia.org&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋습니다. 그러면 AST injecition에 대해 알아봅시다.&lt;br&gt; &lt;/p&gt;
&lt;h1&gt;AST Injection&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AST Injection은 해당 컴파일러의 구문 해석 취약점을 이용하여 Injection하는 방식입니다.&lt;br&gt;특히, 인터프리터 컴파일러에서의 구문 해석 취약점을 노리며, 웹같은 경우, NodeJS로 구성된 웹에서 해커가 원하는 대로 스크립트를 삽입해 목적 외의 동작을 이끌어 낼 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AST Injection in NodeJS&lt;/h2&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2076&quot; data-origin-height=&quot;996&quot; width=&quot;796&quot; height=&quot;382&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bawIVP/btrfFFNuUYX/u760q20M1lbtA35NM1xCYK/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bawIVP/btrfFFNuUYX/u760q20M1lbtA35NM1xCYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bawIVP/btrfFFNuUYX/u760q20M1lbtA35NM1xCYK/img.png&quot; data-alt=&quot;정상적인 AST 동작 과정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bawIVP/btrfFFNuUYX/u760q20M1lbtA35NM1xCYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbawIVP%2FbtrfFFNuUYX%2Fu760q20M1lbtA35NM1xCYK%2Fimg.png&quot; data-origin-width=&quot;2076&quot; data-origin-height=&quot;996&quot; width=&quot;796&quot; height=&quot;382&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bawIVP/btrfFFNuUYX/u760q20M1lbtA35NM1xCYK/img.png&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;figcaption&gt;정상적인 AST 동작 과정&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;NodeJS에서, AST는 JS의 탬플릿 엔진 또는 typescript등등과 같은 곳에서 가장 자주 쓰입니다.&lt;br&gt;이러한 탬플릿 엔진을 위해 AST는 위 사진과 같은 구조를 가지고 있습니다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2073&quot; data-origin-height=&quot;993&quot; width=&quot;839&quot; height=&quot;402&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bdiTrN/btrfG1JwbJR/YsjJdIXrjhOw01ghCxAPT0/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdiTrN/btrfG1JwbJR/YsjJdIXrjhOw01ghCxAPT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdiTrN/btrfG1JwbJR/YsjJdIXrjhOw01ghCxAPT0/img.png&quot; data-alt=&quot;AST injection이 된 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdiTrN/btrfG1JwbJR/YsjJdIXrjhOw01ghCxAPT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdiTrN%2FbtrfG1JwbJR%2FYsjJdIXrjhOw01ghCxAPT0%2Fimg.png&quot; data-origin-width=&quot;2073&quot; data-origin-height=&quot;993&quot; width=&quot;839&quot; height=&quot;402&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bdiTrN/btrfG1JwbJR/YsjJdIXrjhOw01ghCxAPT0/img.png&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;figcaption&gt;AST injection이 된 경우&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;자 그렇다면,&lt;br&gt;만약 prototype단에서의 취약점이 JS 어플리케이션에서 존재한다면 어떻게 될까요?&lt;br&gt;어느 AST든 Parser 또는 Compiler 프로세스 진행 도중에 삽입될 수 있고, 실행 시킬 수 있습니다.&lt;br&gt;여기 위 사진처럼, 당신이 Lexer 또는 parser에 의해 검증되지도 않은 입력값의 필터링도 없는 곳에서 AST를 삽입할 수 있다 가정해봅시다.&lt;br&gt;그렇다면, 우리는 컴파일러에 의도치 않은 입력을 주어, 임의적인 코드 실행을 발생시킬 수 있습니다.&lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt;다음 글에서는 어떻게 AST injection가 handlebars 와 pug 모듈에서 임의의 코드를 실행시키기 위해 사용되는지에 대해 알아봅시다.&lt;/p&gt;</description>
      <category>정보보안 공부/웹 해킹</category>
      <author>KiRist</author>
      <guid isPermaLink="true">https://kirist2357.tistory.com/26</guid>
      <comments>https://kirist2357.tistory.com/26#entry26comment</comments>
      <pubDate>Tue, 21 Sep 2021 16:30:43 +0900</pubDate>
    </item>
    <item>
      <title>HTB 글 삭제 사건 이후 - 태도 변화</title>
      <link>https://kirist2357.tistory.com/25</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;1146&quot; width=&quot;689&quot; height=&quot;891&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/dGip8h/btrea2LIpr5/VDotXIuWlc9zgz6rcKIxn0/img.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGip8h/btrea2LIpr5/VDotXIuWlc9zgz6rcKIxn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGip8h/btrea2LIpr5/VDotXIuWlc9zgz6rcKIxn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGip8h/btrea2LIpr5/VDotXIuWlc9zgz6rcKIxn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGip8h%2Fbtrea2LIpr5%2FVDotXIuWlc9zgz6rcKIxn0%2Fimg.png&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;1146&quot; width=&quot;689&quot; height=&quot;891&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/dGip8h/btrea2LIpr5/VDotXIuWlc9zgz6rcKIxn0/img.png&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 data-ke-size=&quot;size16&quot;&gt;저번 'htb 글 삭제 사건' 으로 부터 오랜 기간이 지났고 이제 말할떄가 온 것 같아 말하게 되었습니다.&lt;br&gt;아마 여러분들은 이런 궁금증이 있으셨을 것 같습니다.&lt;br&gt;&quot;담당자에게 물어보고 다시 올리면 될걸 이렇게 잠수타고 안올린다 선언한다고?&quot;&lt;br&gt;이제는 이 질문에 대해 답변해드리고자 다시 글을 써봅니다.&lt;br&gt; &lt;br&gt;당시, 저는 htb규정을 모르고 있었고, 이전까지 작성된 write-up에서 큰 문제가 없었기에 htb에서도 따로 write-up에 대한 제약이 없다고 생각하였습니다. 그래서 뭣도 모르고 글을 게시하였고, 이것이 이제 외국인 친구에게 조언을 해주게 되었습니다.&lt;br&gt;이런 경우를 처음 당해봐서 놀랐습니다. 의욕이고 뭐고 다 싹 날아가는 느낌이 들었고, '왜?' 라는 질문이 들 정도로 이해도 안가고 당황해서 진짜 이분이 그런말로 전달한건지도 번역기 돌려가면서하다가 이해 또 안되서 그게 어떤 말인지도 다시 물어보는 그런 상황까지 발생했습니다. 그래서 급급하게 머리만 굴리다가 귀찮다 라는 결론을 내리고 급하게 무마시킨점도 없지않아 있었습니다.&lt;br&gt;이건 좀 죄송하다는 생각이 듭니다. 정말 죄송합니다.&lt;br&gt; &lt;br&gt;해당 사진처럼 저렇게 팩트만 뚜둘겨 맞고 나서 제 생각을 고치게 되었습니다.&lt;br&gt;이제 앞으로 워게임 풀이 다시 올릴 겁니다. 다만, dreamhack은 이전 게시글에서 말했는지 모르겠지만 1단계 문제만,&lt;br&gt;그리고 hackthebox문제는 retired된 문제만 올릴 예정입니다. &lt;br&gt;(active된 문제와 dreamhack사이트 문제는 Notion에 복습용 또는 정리용으로 올릴거라 내리지는 않을 예정입니다. 다만, 이것 또한 문제가 발생한다면 개인 아카이브에 따로 보관을 할 생각입니다.)&lt;br&gt; &lt;br&gt;말 한마디로 이 블로그 방문해주시는 여러분께 피해를 끼치게 한점과 걱정을 끼쳐드렸단 점 정말 죄송합니다&lt;/p&gt;</description>
      <category>정보보안 공부</category>
      <author>KiRist</author>
      <guid isPermaLink="true">https://kirist2357.tistory.com/25</guid>
      <comments>https://kirist2357.tistory.com/25#entry25comment</comments>
      <pubDate>Tue, 7 Sep 2021 00:11:34 +0900</pubDate>
    </item>
    <item>
      <title>[공지] HTB 글 하나가 내려갔습니다.</title>
      <link>https://kirist2357.tistory.com/24</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 외국인 친구에게 DM을 받았었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1668&quot; data-origin-height=&quot;1394&quot; data-filename=&quot;스크린샷 2021-08-17 오후 10.45.10.png&quot; width=&quot;714&quot; height=&quot;597&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pn2p0/btrcs9Y5tla/LrhrJpbxRbE4fkIvkYI4gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pn2p0/btrcs9Y5tla/LrhrJpbxRbE4fkIvkYI4gK/img.png&quot; data-alt=&quot;영어 잘 못하는 길희&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pn2p0/btrcs9Y5tla/LrhrJpbxRbE4fkIvkYI4gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpn2p0%2Fbtrcs9Y5tla%2FLrhrJpbxRbE4fkIvkYI4gK%2Fimg.png&quot; data-origin-width=&quot;1668&quot; data-origin-height=&quot;1394&quot; data-filename=&quot;스크린샷 2021-08-17 오후 10.45.10.png&quot; width=&quot;714&quot; height=&quot;597&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;figcaption&gt;영어 잘 못하는 길희&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용인 즉, 현재 활성화 중인 HacktheBox 문제는 wirteup 및 walkthrough 글 작성이 불가하다는 겁니다.&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;그래서 당분간 HackTheBox쪽 워게임 글을 안 올릴까 합니다. 몇가지 두려운 점도 있고, 유저들끼리의 암묵적인 룰이 있는 것 같기도해, 어쩌면, 제가 파악할때까지만이라도 작성을 하지 않을까 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 해당 글을 본 방문객 모두에게 사과의 말씀을 드리며, 당분간 htb문제 write-up은 안 올라갈 예정입니다.&lt;/p&gt;</description>
      <category>정보보안 공부/워게임</category>
      <author>KiRist</author>
      <guid isPermaLink="true">https://kirist2357.tistory.com/24</guid>
      <comments>https://kirist2357.tistory.com/24#entry24comment</comments>
      <pubDate>Tue, 17 Aug 2021 22:52:25 +0900</pubDate>
    </item>
    <item>
      <title>심심한 길희 - 4. ENG notice</title>
      <link>https://kirist2357.tistory.com/21</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Hi! Welcome to my blog!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;These days, I found that many foreign visitors come to my blog.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;I'm so thankful to u guys. So, i decided to make a blog which is written by English.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Maybe it open at 7/20. (not sure, but I will try)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;If there any question, comment at this post if u have a tistory account. Or send me discord DM&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(my discord tag is KiRist#01119)&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;Thanks for reading this!&lt;/p&gt;</description>
      <category>뻘글</category>
      <author>KiRist</author>
      <guid isPermaLink="true">https://kirist2357.tistory.com/21</guid>
      <comments>https://kirist2357.tistory.com/21#entry21comment</comments>
      <pubDate>Tue, 13 Jul 2021 14:16:52 +0900</pubDate>
    </item>
    <item>
      <title>[pwnable.kr] BOF write-up</title>
      <link>https://kirist2357.tistory.com/19</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Source Code&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;558&quot; data-filename=&quot;스크린샷 2021-07-08 오전 12.02.08.png&quot; width=&quot;376&quot; height=&quot;352&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/07ehK/btq84vx1sUf/gtoP8I10CflFnQf8woIzl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/07ehK/btq84vx1sUf/gtoP8I10CflFnQf8woIzl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/07ehK/btq84vx1sUf/gtoP8I10CflFnQf8woIzl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F07ehK%2Fbtq84vx1sUf%2FgtoP8I10CflFnQf8woIzl0%2Fimg.png&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;558&quot; data-filename=&quot;스크린샷 2021-07-08 오전 12.02.08.png&quot; width=&quot;376&quot; height=&quot;352&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제로 더 이상의 소스코드는 없다. 다음 문제부터 binary file만 주어진다.&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;2. 필요 역량&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. netcat&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. python shell&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. binary file 리버싱&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. assembly 해석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Write-up&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;우선, 해당 바이너리 파일을 다운 받고, lldb를 사용해서 해당 바이너리의 Assembly 파일을 확인해보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1084&quot; data-origin-height=&quot;154&quot; data-filename=&quot;스크린샷 2021-07-07 오후 11.50.31.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHMODi/btq84LgnYj7/KotCGUqPWP154Z3BBGXgak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHMODi/btq84LgnYj7/KotCGUqPWP154Z3BBGXgak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHMODi/btq84LgnYj7/KotCGUqPWP154Z3BBGXgak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHMODi%2Fbtq84LgnYj7%2FKotCGUqPWP154Z3BBGXgak%2Fimg.png&quot; data-origin-width=&quot;1084&quot; data-origin-height=&quot;154&quot; data-filename=&quot;스크린샷 2021-07-07 오후 11.50.31.png&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;'dissassemble --name mian' 이란 명령어로 main 함수를 살펴보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;302&quot; data-filename=&quot;스크린샷 2021-07-07 오후 11.50.37.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l4MvV/btq89eiPGx9/gBHCgB62NtKpkp9XkKT7T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l4MvV/btq89eiPGx9/gBHCgB62NtKpkp9XkKT7T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l4MvV/btq89eiPGx9/gBHCgB62NtKpkp9XkKT7T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl4MvV%2Fbtq89eiPGx9%2FgBHCgB62NtKpkp9XkKT7T0%2Fimg.png&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;302&quot; data-filename=&quot;스크린샷 2021-07-07 오후 11.50.37.png&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 0x62c 의 주소에 있는 함수를 call하고 있다는 것을 알고 다음과 같이 명령어를 쳐 func함수의 어셈블리 코드를 보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;728&quot; data-filename=&quot;스크린샷 2021-07-07 오후 11.50.42.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RNGZf/btq9aevEkTY/dvn4ZcjG1padTN0fNYyGe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RNGZf/btq9aevEkTY/dvn4ZcjG1padTN0fNYyGe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RNGZf/btq9aevEkTY/dvn4ZcjG1padTN0fNYyGe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRNGZf%2Fbtq9aevEkTY%2Fdvn4ZcjG1padTN0fNYyGe1%2Fimg.png&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;728&quot; data-filename=&quot;스크린샷 2021-07-07 오후 11.50.42.png&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 나왔고, 이 코드가 위 소스코드의 func의 코드와 같다는 것을 파악했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 Buffer Overflow라는 공격을 통해, 해당 Key변수의 값을 덮어 우리가 원하는데로 동작하게 해야한다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;284&quot; data-origin-height=&quot;440&quot; data-filename=&quot;스크린샷 2021-07-08 오후 11.34.51.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwYvVF/btq89eC9EmZ/BIWvbVkeJtkUMaQl5pqDRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwYvVF/btq89eC9EmZ/BIWvbVkeJtkUMaQl5pqDRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwYvVF/btq89eC9EmZ/BIWvbVkeJtkUMaQl5pqDRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwYvVF%2Fbtq89eC9EmZ%2FBIWvbVkeJtkUMaQl5pqDRK%2Fimg.png&quot; data-origin-width=&quot;284&quot; data-origin-height=&quot;440&quot; data-filename=&quot;스크린샷 2021-07-08 오후 11.34.51.png&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 다음과 같은 스택 메모리를 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 overflowme변수에 값을 넣어 func SFP와 func RET를 넘어 KEY까지 갈려면 얼마나 덮어써야한다는 것인지 확인해보자.&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;우선 overflow가 저장된 곳은 edp로 부터 -0x2c, KEY는 +0x8이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 총 52byte를 넘겨야 KEY값에 도달할 수 있다는 것이다.&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;그러면 해당 값을 netcat으로 보내줄려면 파일형식으로 값을 묶어 전달해야하므로, 다음과 같이 shell을 작성후 넘겨주기만 하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;316&quot; data-filename=&quot;스크린샷 2021-07-08 오전 12.01.03.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IcEwX/btq9aFzKCMl/81ygq2kaqwWJkeuOwrzxy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IcEwX/btq9aFzKCMl/81ygq2kaqwWJkeuOwrzxy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IcEwX/btq9aFzKCMl/81ygq2kaqwWJkeuOwrzxy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIcEwX%2Fbtq9aFzKCMl%2F81ygq2kaqwWJkeuOwrzxy1%2Fimg.png&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;316&quot; data-filename=&quot;스크린샷 2021-07-08 오전 12.01.03.png&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보보안 공부/워게임</category>
      <author>KiRist</author>
      <guid isPermaLink="true">https://kirist2357.tistory.com/19</guid>
      <comments>https://kirist2357.tistory.com/19#entry19comment</comments>
      <pubDate>Thu, 8 Jul 2021 23:40:59 +0900</pubDate>
    </item>
    <item>
      <title>심심한 길희 3 - 블로그 통계 분석</title>
      <link>https://kirist2357.tistory.com/18</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;여기 블로그 통계를 항상 보면,&lt;br&gt;마크 플러그인 제작을 보고 이끌려온 사람이 많더군요&lt;br&gt;살짝 고민이 되었습니다.&lt;br&gt;&lt;br&gt;코틀린으로 마크 플러그인 제작 튜토리얼을 더 써야할지 고민이 되었습니다.&lt;br&gt;만약 하트수가 20개 넘는다면 지금 현재 나와있는 튜토리얼을 이어, 댓글에 써진 간단한 플러그인을 제작하는 튜토리얼 글을 써보겠습니다.&lt;br&gt;&lt;br&gt;거대하고 웅장한 그런건 하지 않을 생각입니다.&lt;br&gt;오히려, 제 주 개발인 코인개발 및 워게임 풀이에 영향을 미칠 것 같기 때문입니다.&lt;br&gt;&lt;br&gt;감사합니다&lt;/p&gt;</description>
      <category>뻘글</category>
      <category>KiRist</category>
      <category>길희</category>
      <author>KiRist</author>
      <guid isPermaLink="true">https://kirist2357.tistory.com/18</guid>
      <comments>https://kirist2357.tistory.com/18#entry18comment</comments>
      <pubDate>Fri, 25 Jun 2021 20:42:06 +0900</pubDate>
    </item>
    <item>
      <title>[pwnable.kr] collision write-up</title>
      <link>https://kirist2357.tistory.com/16</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 소스 코드&lt;/h2&gt;
&lt;pre id=&quot;code_1621471555462&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
unsigned long hashcode = 0x21DD09EC;
unsigned long check_password(const char* p){
	int* ip = (int*)p;
	int i;
	int res=0;
	for(i=0; i&amp;lt;5; i++){
		res += ip[i];
	}
	return res;
}

int main(int argc, char* argv[]){
	if(argc&amp;lt;2){
		printf(&quot;usage : %s [passcode]\n&quot;, argv[0]);
		return 0;
	}
	if(strlen(argv[1]) != 20){
		printf(&quot;passcode length should be 20 bytes\n&quot;);
		return 0;
	}

	if(hashcode == check_password( argv[1] )){
		system(&quot;/bin/cat flag&quot;);
		return 0;
	}
	else
		printf(&quot;wrong passcode.\n&quot;);
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;2. 문제에서 요구되는 것&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코드 해석&lt;/li&gt;
&lt;li&gt;argv[]에 값을 전달할 수 있는 능력&lt;/li&gt;
&lt;li&gt;형변환 시, 값의 변화와 크기의 변화&lt;/li&gt;
&lt;li&gt;데이터 정렬 방식(리틀 엔디안, 빅 엔디안)&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;3. 풀이&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;소스코드 해석&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main함수에서 명령어 창에서 argv[]를 받는다. 여기서 argv의 길이가 20바이트여야한다는 제한이 걸린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 check_password에 argv[]를 넘긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;check_password함수에서는 인자로 받은 argv[]를 int형으로 변환한다. 여기서 형변환 시, 1 바이트의 크기를 갖던 char가 4바이트의 크기를 갖는 int로 바뀌면서 20바이트의 char를 4바이트씩 끊어 갖는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;1440&quot; data-filename=&quot;New Project.png&quot; width=&quot;556&quot; height=&quot;313&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8wjhr/btq5fD09e8P/wdyDFlBhZPV60eNUszR3M0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8wjhr/btq5fD09e8P/wdyDFlBhZPV60eNUszR3M0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8wjhr/btq5fD09e8P/wdyDFlBhZPV60eNUszR3M0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8wjhr%2Fbtq5fD09e8P%2FwdyDFlBhZPV60eNUszR3M0%2Fimg.png&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;1440&quot; data-filename=&quot;New Project.png&quot; width=&quot;556&quot; height=&quot;313&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 5개의 int배열로 바뀌고 이를 다 더해서 hashcode와 같으면 패스워드를 출력하는 코드이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4바이트씩 5개를 더하는 것이므로 hashcode의 값을 우선 5로 나눠본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나눠보았을떄, 0x6C5CEC8라는 값이 나온다. 그런데 여기서 hashcode를 10진수로 바꿔서 다시 5로 나눠보면, 소수점자리까지 나온다는 것을 확인 할 수 있다. 이말은 나머지가 남는다는 것이다. 그렇다면, 0x6C5CEC8를 4번 곱했을떄와 hashcode의 차이를 확인하고 더해주면 된다. 차이는 계산해보니 0x6C5CECC가 나온다.&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 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_1621471702872&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;./col `python -c 'print &quot;\xC8\xCE\xC5\x06&quot; * 4 + &quot;\xcc\xce\xc5\x06&quot;'`&lt;/code&gt;&lt;/pre&gt;</description>
      <category>정보보안 공부/워게임</category>
      <author>KiRist</author>
      <guid isPermaLink="true">https://kirist2357.tistory.com/16</guid>
      <comments>https://kirist2357.tistory.com/16#entry16comment</comments>
      <pubDate>Thu, 20 May 2021 09:48:43 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 개발 중 에러 - 프로젝트의 빌드 버전 호완</title>
      <link>https://kirist2357.tistory.com/15</link>
      <description>&lt;p id=&quot;SE-be019b6f-5c83-47c8-b0bf-47b192fc50d4&quot;&gt;&lt;span&gt;가끔가다 깃허브에서 팀작업을 하거나, 오픈소스에 기여할때, 버전 호완 에러가 나는 경우가 종종 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-eef7bbda-de83-4890-ba46-b90622565896&quot;&gt;&lt;span&gt;여기서 가장 뒷목 잡히고 빌드조차 안되는 에러가 하나 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e6cac1dc-00f4-445a-a3b9-92a725d8f3fb&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-48d1f7cc-0776-413a-8f15-f0c1c9392d97&quot;&gt;&lt;span&gt;'&lt;/span&gt;&lt;span&gt;&lt;b&gt;빌드 버전 호완 에러'&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d3706a2d-1e9f-4522-a7d9-2bee8b4e55c1&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-94adf15a-ae44-4533-9a94-8514b345951c&quot;&gt;&lt;span&gt;이는 임포트파일부터 짜여진 코드 파일 모두 에러줄로 가득하게 만들어 버린다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-24ee4851-9a3e-48c5-888e-f81d4544b7d3&quot;&gt;&lt;span&gt;이거는 빌드를 해봐야할지 아니면 코드를 직접 자기가 다 호환버전에 맞는 코드로 바꾸어야하는지 의문이 들때가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-94952273-9200-4ae8-9530-3f12a3c488a0&quot;&gt;&lt;span&gt;그러자니 이 에러는 그렇게 줄에서 에러가 나면서 정작 모든 줄의 에러 원인인 임포트파일에 에러가 나는데도&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a11c18d1-e89e-43ef-9d44-a01648fc9662&quot;&gt;&lt;span&gt;명확한 에러메세지가 없어 답답할 뿐이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-45ce9d15-0544-4c17-8c41-1a93e13c6963&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b1abe9e1-4c5d-4e4f-9e0a-224a0be2a290&quot;&gt;&lt;span&gt;해결방법은&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-385e81d6-28b7-4f7a-960d-54511ba6cdf1&quot;&gt;&lt;span&gt;1. 우선 빌드해본다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-85dc1bae-f809-4788-9d1c-40885d8717e0&quot;&gt;&lt;span&gt;2. 빌드 에러 메세지를 읽는다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5a1e2a8f-d7c6-498d-a11c-2f3d4b27194b&quot;&gt;&lt;span&gt;3. 에러 메세지에 뜬 호환 가능한 버전을 찾아 다운로드해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-436c2578-dab0-408e-a669-466bd8c9d297&quot;&gt;&lt;span&gt;4. 빌드 구성을 다시 설정하고 빌드한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-74af08c7-89ed-4f8c-a9db-d9cef27875a6&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-bd6f4bd9-74f0-46f7-8a2f-6e1db247739f&quot;&gt;&lt;span&gt;로 요약할 수 있겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;SE-44cf8c56-a8b8-4a67-b450-f215be53fc31&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;1. 빌드 에러 메세지 읽은 후&lt;/span&gt;&lt;/h2&gt;
&lt;p id=&quot;SE-1c781fdf-87e6-477d-9670-1cf683faa8d8&quot;&gt;&lt;span&gt;우선, 빌드해본 후 에러 메세지를 읽었다는 가정 아래에 진행하겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b0c74ae8-63ec-496f-bae3-986577013039&quot;&gt;&lt;span&gt;왜냐면 사람마다 겪는 버전 호환 에러는 다 다를거고, 영어를 간단히 읽어봐도 답은 나오기 때문에 넘어가겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-71ad6d68-1ea8-44a3-ad75-6263f5054d73&quot;&gt;&lt;span&gt;필자는 29, 28 버전이 없어 겪게 되어서 29, 28 버전을 다운 받아주었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;86&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/celecw/btq1z3XhGwf/hCHQRWZBNNW56q3kUVovQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/celecw/btq1z3XhGwf/hCHQRWZBNNW56q3kUVovQk/img.png&quot; data-alt=&quot;버전 체크 및 다운&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/celecw/btq1z3XhGwf/hCHQRWZBNNW56q3kUVovQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcelecw%2Fbtq1z3XhGwf%2FhCHQRWZBNNW56q3kUVovQk%2Fimg.png&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;86&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;2. &lt;/span&gt;&lt;span&gt;build configuration 설정&lt;/span&gt;&lt;/h2&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/bIUxCm/btq1D1KUwas/NqwIokKeihB8rMrjLB4Lmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIUxCm/btq1D1KUwas/NqwIokKeihB8rMrjLB4Lmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIUxCm/btq1D1KUwas/NqwIokKeihB8rMrjLB4Lmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIUxCm%2Fbtq1D1KUwas%2FNqwIokKeihB8rMrjLB4Lmk%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;&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; 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/Y6CuT/btq1D1KUxgf/mXw3anescXW6Apic0a3i31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y6CuT/btq1D1KUxgf/mXw3anescXW6Apic0a3i31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y6CuT/btq1D1KUxgf/mXw3anescXW6Apic0a3i31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY6CuT%2Fbtq1D1KUxgf%2FmXw3anescXW6Apic0a3i31%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;&lt;span&gt;그러면 해당 창이 나타나게 되는데 필자처럼 compile SDK version, build Tools Version을 지원하는 버전으로 수정해서 넣어주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d632f7c9-5f2d-4a3b-aae1-91393767ce9a&quot;&gt;&lt;span&gt;그리고 다시 빌드해보자. 이제 코드가 임포트 파일이 정상적으로 잡히게 되며 대부분의 에러줄이 사라지게 될 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-011d44c4-a1ce-49fa-bac9-627732fe1db1&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0ff9d7da-3ed1-47c6-afa1-dfe5064941db&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0645aca4-1ef2-4325-89f1-caaec73fadaa&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4dbf1668-f52f-4f63-a3c4-5356ba3e8d3e&quot;&gt;&lt;span&gt;그러면 행복한 코딩이 되길 바란다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-dcbb9feb-84b8-488b-bb43-7920733cf6d8&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발/안드로이드</category>
      <author>KiRist</author>
      <guid isPermaLink="true">https://kirist2357.tistory.com/15</guid>
      <comments>https://kirist2357.tistory.com/15#entry15comment</comments>
      <pubDate>Thu, 1 Apr 2021 23:14:31 +0900</pubDate>
    </item>
    <item>
      <title>[Walking Feedback] 2. 전처리</title>
      <link>https://kirist2357.tistory.com/14</link>
      <description>&lt;p id=&quot;SE-fd5df5b8-7da5-403e-a182-9d50392bd90c&quot;&gt;&lt;span&gt;이전 그래프가 잘못 되었다는 지적이 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f8cfc798-503a-4037-a29e-ebca438543a0&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c827b5a1-317f-4627-b629-f2705057de96&quot;&gt;&lt;span&gt;잘못 된 이유는 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5e737fc1-dc90-45ad-bbe6-6ce93ad3de04&quot;&gt;&lt;span&gt;1. 테스트용으로 사인곡선을 그리게끔 자이로를 움직였지만, 곡선이 아니었던 점&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-dff9e801-d040-40b6-91a9-de919026631d&quot;&gt;&lt;span&gt;2. y축의 눈금이 보이지 않는다는 점&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e68ccb85-1cfe-4c28-8325-bb071a2ed021&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-83976186-d819-43f7-8e66-14f8a1cf75bf&quot;&gt;&lt;span&gt;이 2가지의 이유로 그래프가 잘못 되었다는 점이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e7901d7b-ac9e-4971-90c1-e22003c72073&quot;&gt;&lt;span&gt;생각해봐도 이 y축 부터 이상하다는 점이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-47349fa6-865d-4384-be4c-28d079febcd1&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5251418b-7023-4219-8b5f-155cc2f7d520&quot;&gt;&lt;span&gt;그런데, 찾아보니 예상치 못한 곳에서 실수를 저질렀던 점이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-22ffe481-882d-40ff-9c45-c52e62cc25ce&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href=&quot;https://pythonq.com/so/python/360927&quot;&gt;https://pythonq.com/so/python/360927&lt;/a&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; 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/wBj7d/btq0Nwr5Uar/COvhwKrh0yXm9pOmLIT9n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wBj7d/btq0Nwr5Uar/COvhwKrh0yXm9pOmLIT9n1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wBj7d/btq0Nwr5Uar/COvhwKrh0yXm9pOmLIT9n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwBj7d%2Fbtq0Nwr5Uar%2FCOvhwKrh0yXm9pOmLIT9n1%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;&lt;span&gt;y값으로 들어가는 모든 값이 string 타입이였다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d7e88c38-3e2a-474a-8464-c54161b05cc5&quot;&gt;&lt;span&gt;matplotlib는 float을 기반으로 그래프를 그리지 못해 y축의 눈금이 이상할정도로 안보인 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1955df80-62c6-4e03-8c6c-e1d249f2406b&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a5d55759-f509-45e3-8f69-bbc7bb3e3b10&quot;&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; 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/yy9tb/btq0MVsaVwc/ZT3p2Pqz6hs7mLkFgKF3Sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yy9tb/btq0MVsaVwc/ZT3p2Pqz6hs7mLkFgKF3Sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yy9tb/btq0MVsaVwc/ZT3p2Pqz6hs7mLkFgKF3Sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyy9tb%2Fbtq0MVsaVwc%2FZT3p2Pqz6hs7mLkFgKF3Sk%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;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/mMou1/btq0MT8WlF4/Z6l21X7LkfirKY8qkqDUBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mMou1/btq0MT8WlF4/Z6l21X7LkfirKY8qkqDUBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mMou1/btq0MT8WlF4/Z6l21X7LkfirKY8qkqDUBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmMou1%2Fbtq0MT8WlF4%2FZ6l21X7LkfirKY8qkqDUBk%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;&lt;span&gt;이렇게 모든 값들을 float으로 바꾸어 주었고, 그래프를 다시 그려보았다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;389&quot; data-origin-height=&quot;262&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZMRSi/btq0Nv7NEVk/aPSBgECzlgqOP2OQ2gkgPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZMRSi/btq0Nv7NEVk/aPSBgECzlgqOP2OQ2gkgPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZMRSi/btq0Nv7NEVk/aPSBgECzlgqOP2OQ2gkgPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZMRSi%2Fbtq0Nv7NEVk%2FaPSBgECzlgqOP2OQ2gkgPk%2Fimg.png&quot; data-origin-width=&quot;389&quot; data-origin-height=&quot;262&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;&lt;span&gt;성공이다. 약간의 탈선은 있지만 그럭저럭 어느 정도 봐줄 수준이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2f127a90-e089-41a0-bf78-09cf151334f6&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ac4bd554-b5e3-4434-8901-9d596a379872&quot;&gt;&lt;span&gt;이 다음엔 실제 값을 받아와 다시 분석을 하고 인공지능 모듈을 이용해 볼까 한다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로젝트/Walking Feedback</category>
      <author>KiRist</author>
      <guid isPermaLink="true">https://kirist2357.tistory.com/14</guid>
      <comments>https://kirist2357.tistory.com/14#entry14comment</comments>
      <pubDate>Tue, 23 Mar 2021 20:18:12 +0900</pubDate>
    </item>
    <item>
      <title>1. Firebase Realtime db접근 &amp;amp; 자료 추출하기</title>
      <link>https://kirist2357.tistory.com/13</link>
      <description>&lt;p&gt;다리에 부착된 아두이노로부터 값을 받아와 Firebase에 저장되어 있었다.&lt;/p&gt;
&lt;p&gt;이 값을 받아올려면 firebase의 저장소에 접근하기 위한 인증서파일이 필요하다. [프로젝트 설정] -&amp;gt; [서비스 계정] 으로 들어가주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;_2021-03-13__2.46.03.png&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;674&quot; width=&quot;579&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxtBAO/btqZ0s4BDKe/1K1jmHcxrCApC00UVmobuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxtBAO/btqZ0s4BDKe/1K1jmHcxrCApC00UVmobuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxtBAO/btqZ0s4BDKe/1K1jmHcxrCApC00UVmobuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxtBAO%2FbtqZ0s4BDKe%2F1K1jmHcxrCApC00UVmobuK%2Fimg.png&quot; data-filename=&quot;_2021-03-13__2.46.03.png&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;674&quot; width=&quot;579&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;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 위에 예시코드와 [새 비공개 키 생성]이란 버튼이 있는데 비공개 키로 데이터베이스를 접근하기 위해 버튼을 눌러 비공개키 json을 받아준다.&lt;/p&gt;
&lt;p&gt;그리고 colab을 이용해 파일을 불러 인증코드를 짜고 그다음에 아래와 같은 코드로 데이터베이스를 불러왔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;_2021-03-13__2.42.59.png&quot; data-origin-width=&quot;1404&quot; data-origin-height=&quot;226&quot; width=&quot;760&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxwrLc/btqZ4AAl7ds/fmroayuG0FCqET092PHNK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxwrLc/btqZ4AAl7ds/fmroayuG0FCqET092PHNK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxwrLc/btqZ4AAl7ds/fmroayuG0FCqET092PHNK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxwrLc%2FbtqZ4AAl7ds%2FfmroayuG0FCqET092PHNK1%2Fimg.png&quot; data-filename=&quot;_2021-03-13__2.42.59.png&quot; data-origin-width=&quot;1404&quot; data-origin-height=&quot;226&quot; width=&quot;760&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;/figure&gt;
&lt;/p&gt;
&lt;p&gt;처음엔 이게 list인줄 알았지만, type을 확인해보니 str였다.&lt;/p&gt;
&lt;p&gt;여기서 우리가 원하는 데이터를 뽑아내기 위해 정규식을 이용해주었다.&lt;/p&gt;
&lt;p&gt;우선 넘어오면서 x,y값으로 안들어온 애들 걸러야하니&amp;nbsp;&lt;b&gt;[+-]?[0-9]+[.]?[0-9]+,[+-]?[0-9]+[.]?[0-9]+&lt;/b&gt;&amp;nbsp;이란 정규식을 이용해 값을 뽑아주자.&lt;/p&gt;
&lt;p&gt;저 정규식으로 부호가 있는 실수 모두 뽑아낼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;_2021-03-13__3.21.30.png&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;312&quot; width=&quot;684&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmG1ue/btqZ1bn1jki/cUIVwgrTDBGQXzIK5QaPZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmG1ue/btqZ1bn1jki/cUIVwgrTDBGQXzIK5QaPZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmG1ue/btqZ1bn1jki/cUIVwgrTDBGQXzIK5QaPZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmG1ue%2FbtqZ1bn1jki%2FcUIVwgrTDBGQXzIK5QaPZ0%2Fimg.png&quot; data-filename=&quot;_2021-03-13__3.21.30.png&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;312&quot; width=&quot;684&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;/figure&gt;
&lt;/p&gt;
&lt;p&gt;정규식 api파일을 부르고 정규식을 통해 x,y로 잘라내었다.&lt;/p&gt;
&lt;p&gt;그리고, 다시 x,y로만 있는 값들을 위해 확인하기 위해 ,를 붙여주었으니 다시 잘라 x값에 y값에 넣어주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;_2021-03-13__3.22.59.png&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;262&quot; width=&quot;580&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C85A7/btqZZT9gFPb/2nSsPfdyf4g5ydicevXUxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C85A7/btqZZT9gFPb/2nSsPfdyf4g5ydicevXUxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C85A7/btqZZT9gFPb/2nSsPfdyf4g5ydicevXUxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC85A7%2FbtqZZT9gFPb%2F2nSsPfdyf4g5ydicevXUxk%2Fimg.png&quot; data-filename=&quot;_2021-03-13__3.22.59.png&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;262&quot; width=&quot;580&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;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;378&quot; data-filename=&quot;_2021-03-13__3.23.15.png&quot; width=&quot;572&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPGGcR/btqZ2c02zNj/6m5bGzszI6JwkQ7dA2F8x1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPGGcR/btqZ2c02zNj/6m5bGzszI6JwkQ7dA2F8x1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPGGcR/btqZ2c02zNj/6m5bGzszI6JwkQ7dA2F8x1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPGGcR%2FbtqZ2c02zNj%2F6m5bGzszI6JwkQ7dA2F8x1%2Fimg.png&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;378&quot; data-filename=&quot;_2021-03-13__3.23.15.png&quot; width=&quot;572&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;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 값들을 추출해내었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;근데 저렇게 해놨더니&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;526&quot; data-filename=&quot;Untitled.png&quot; width=&quot;392&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m7jUg/btqZWNopi3u/kaCEFZiwJ2NeGdfo79iv00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m7jUg/btqZWNopi3u/kaCEFZiwJ2NeGdfo79iv00/img.png&quot; data-alt=&quot;wtf&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m7jUg/btqZWNopi3u/kaCEFZiwJ2NeGdfo79iv00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm7jUg%2FbtqZWNopi3u%2FkaCEFZiwJ2NeGdfo79iv00%2Fimg.png&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;526&quot; data-filename=&quot;Untitled.png&quot; width=&quot;392&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;wtf&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이지경이 되었다.&lt;/p&gt;
&lt;p&gt;혹시나 싶어 프로젝트 담당자에게 물어보니&lt;/p&gt;
&lt;p&gt;저 locX는 그냥 허벅지의 자이로 센서중 x값, locY는 무릎의 x값을 모아서 만든 좌표값이다.&lt;/p&gt;
&lt;p&gt;즉, x값을 시간으로 놓아 시간에 따른 자이로 값으 변화를 나타내는 그래프였다.&lt;/p&gt;
&lt;p&gt;그래서 몇부분 수정하고, 다시 그래프를 나타내보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;248&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmB99P/btqZ1J5SA4d/9cSYnrIpycAt2RxJ5sHxjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmB99P/btqZ1J5SA4d/9cSYnrIpycAt2RxJ5sHxjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmB99P/btqZ1J5SA4d/9cSYnrIpycAt2RxJ5sHxjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmB99P%2FbtqZ1J5SA4d%2F9cSYnrIpycAt2RxJ5sHxjK%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;248&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.png&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;248&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ljb4D/btqZYmD5tlx/1Y9V7vpVk4p2EwsdHY0b30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ljb4D/btqZYmD5tlx/1Y9V7vpVk4p2EwsdHY0b30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ljb4D/btqZYmD5tlx/1Y9V7vpVk4p2EwsdHY0b30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fljb4D%2FbtqZYmD5tlx%2F1Y9V7vpVk4p2EwsdHY0b30%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;248&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;이렇게 그래프를 보니 자료의 간략화가 시급해보였다. 자료 간략화는 다음에 이어서 해봐야 할 것 같다.&lt;/p&gt;</description>
      <category>프로젝트/Walking Feedback</category>
      <author>KiRist</author>
      <guid isPermaLink="true">https://kirist2357.tistory.com/13</guid>
      <comments>https://kirist2357.tistory.com/13#entry13comment</comments>
      <pubDate>Sat, 13 Mar 2021 16:08:49 +0900</pubDate>
    </item>
  </channel>
</rss>