<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Securing Keys</title>
    <link>https://secure-key.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 25 Aug 2026 12:28:15 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>GRACE_MJ</managingEditor>
    <image>
      <title>Securing Keys</title>
      <url>https://tistory1.daumcdn.net/tistory/3112267/attach/7fa1759f34ef409ba01c7a1dfafdd2db</url>
      <link>https://secure-key.tistory.com</link>
    </image>
    <item>
      <title>Claude Code Remote Control &amp;mdash; 이제 원격으로 클로드 코드 사용 가능?  ️</title>
      <link>https://secure-key.tistory.com/64</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;오늘 아침, Claude Code 에서 꽤 재밌는 업데이트를 내놨다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;바로&amp;nbsp;&lt;b&gt;Remote Control&lt;/b&gt;&amp;nbsp;기능!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이름 그대로, 터미널에서 돌리던 Claude Code 세션을 폰이나 다른 브라우저에서 이어받을 수 있는 기능이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;말로만 들으면 &quot;그게 뭐가 대단해?&quot; 싶을 수도 있는데, 설명을 읽어보니 생각보다 꽤 쓸만해보였다  &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;앞서 포스팅했던 OpenClaw   를 견제하여 내놓은 기능이지 않을까 싶다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://secure-key.tistory.com/63&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2026.02.07 - [IT/AI] - 가장 핫한 개인 AI 비서 | OpenClaw (ClawdBot / MoltBot) 설치하기&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&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-origin-width=&quot;792&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IWSsK/dJMcadOzaGq/7xzoxsKjx1l8l6JLMVRfZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IWSsK/dJMcadOzaGq/7xzoxsKjx1l8l6JLMVRfZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IWSsK/dJMcadOzaGq/7xzoxsKjx1l8l6JLMVRfZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIWSsK%2FdJMcadOzaGq%2F7xzoxsKjx1l8l6JLMVRfZ0%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;629&quot; height=&quot;354&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Claude Code, 코딩에 특화되어 있기도 하고 mcp 가 워낙 편리하고 강력하다보니 나 또한 가장 잘 사용하는 AI 툴이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;근데 기존 Claude Code 는 터미널에 딱 붙어있어야 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;코드 리팩토링 태스크 하나 던져놓고 잠깐 자리를 비운다해도, 결국 노트북 앞으로  &amp;zwj;  다시 왔어야 했던 것.&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;Remote Control 은 이걸 해결해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;로컬에서 돌아가는 Claude Code 세션을, &lt;b&gt;폰이나 다른 기기에서 그대로 이어받을 수 있는 동기화 레이어&lt;/b&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;폰은 그냥 &quot;창구&quot; 역할일 뿐이고, &lt;b&gt;실제 연산은 내 노트북 안에서 그대로 돌아간다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;파일시스템, MCP 서버, 프로젝트 설정, 전부 로컬 그대로!!&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용 조건&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Remote Control은 Pro 및 Max 플랜에서 연구 미리보기로 제공됩니다. Team 또는 Enterprise 플랜에서는 사용할 수 없습니다.&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Claude Max 플랜 ($100 ~ $200/월)&lt;/b&gt; - Pro 는 곧 지원 예정 &lt;span style=&quot;color: #9d9d9d;&quot;&gt;('26.02.25. 기준)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Claude Code 최신 버전 (v2.1.52 이상)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;/login 으로 claude.ai 인증 완료 상태&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;방법 1) 새 세션으로 바로 시작&lt;/h4&gt;
&lt;pre id=&quot;code_1772023973473&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;claude remote-control
# 또는 줄여서
claude rc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;방법 2) 이미 돌아가고 있는 세션에서 전환&lt;/h4&gt;
&lt;pre id=&quot;code_1772024024326&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/remote-control
# 또는 줄여서
/rc&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;이렇게 명령어를 치면 터미널에서 세션 URL 이랑 QR 코드가 뜨고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폰으로 QR 을 찍거나, claude.ai/code 에서 세션 목록을 열어서 들어가면 바로 연결된다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음부터는 터미널, 폰, 브라우저 어디서든 동시에 채팅 가능 ✅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude 가 뭐 하고 있는지 실시간 확인도 가능 ✅&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;h3 data-ke-size=&quot;size23&quot;&gt;알아두면 좋은 것들&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;터미널 프로세스가 종료되면 세션도 종료 &lt;span style=&quot;color: #9d9d9d;&quot;&gt;(슬립은 괜찮으나, 터미널 창이 닫히면 안 됨. 걱정되면 tmux 깔아두는 것 추천.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;세션 URL = CREDENTIAL &lt;span style=&quot;color: #9d9d9d;&quot;&gt;(URL 이 있는 사람은 누구나 그 세션에 접근해서 파일 변경 승인까지 가능. 링크 관리 주의 ⚠️)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;세션 이름 설정은 /rename 으로 &lt;span style=&quot;color: #9d9d9d;&quot;&gt;(이름 지정해서 여러 세션 구분하기 위함.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;모든 세션을 자동으로 켜고 싶다면, Claude Code 에서 /config 통해 &lt;i&gt;Enable Remote Control for all sessions&lt;/i&gt; 를 &lt;i&gt;true&lt;/i&gt; 로 설정&lt;/li&gt;
&lt;/ul&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;회의 들어가야 할 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;산책 나가고 싶을 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진짜로 &quot;잠깐만&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;아직 Max 플랜만 Research Preview 상태이고, Pro 는 곧 지원한다고 하니 기다려보면 될 것 같다 :)&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;a href=&quot;https://code.claude.com/docs/ko/remote-control&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://code.claude.com/docs/ko/remote-control&lt;/a&gt;&lt;/p&gt;</description>
      <category>IT/AI</category>
      <category>Ai</category>
      <category>Anthropic</category>
      <category>Claude</category>
      <category>claude code</category>
      <category>Clawbot</category>
      <category>openclaw</category>
      <category>rc</category>
      <category>remote control</category>
      <category>remote-control</category>
      <category>원격</category>
      <author>GRACE_MJ</author>
      <guid isPermaLink="true">https://secure-key.tistory.com/64</guid>
      <comments>https://secure-key.tistory.com/64#entry64comment</comments>
      <pubDate>Wed, 25 Feb 2026 22:02:17 +0900</pubDate>
    </item>
    <item>
      <title>가장 핫한 개인 AI 비서 | OpenClaw (ClawdBot / MoltBot) 설치하기</title>
      <link>https://secure-key.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;최근 전 세계적으로 가장 핫한 토픽을 꼽으라하면 AI 가 나올 수 밖에 없을 것 같다.&lt;br /&gt;정말 핫함 그 자체  &lt;br /&gt;매일매일 AI 관련 새로운 소식이 올라오고, 이에 발맞춰가기 쉽지 않다는 생각이 들면서도&lt;br /&gt;최근 들어 이렇게 흥미있던 주제가 있었나 싶기도 할 정도로 매일 새롭고 재밌다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;그 중에서도 &lt;b&gt;OpenClaw&lt;/b&gt;. 현재 오픈소스 세상을 거의 휩쓸고 있다시피한 프로젝트.&lt;br /&gt;초반에는 ClawdBot 이라는 이름으로 소개되었다가, MoltBot 에 이어 지금은 OpenClaw 라는 이름으로 정착한 듯하다.&lt;br /&gt;단순 AI 를 넘어서 &lt;b&gt;사용자의 디지털 삶을 자동화하고, 스스로 판단하고 행동하는 강력한 도구   &lt;/b&gt;로 주목받고 있다.&lt;br /&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;1806&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xyy0x/dJMcachG1XV/bfWNtTLtSV4K85QiJ6VV8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xyy0x/dJMcachG1XV/bfWNtTLtSV4K85QiJ6VV8K/img.png&quot; data-alt=&quot;https://openclaw.ai&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xyy0x/dJMcachG1XV/bfWNtTLtSV4K85QiJ6VV8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXyy0x%2FdJMcachG1XV%2FbfWNtTLtSV4K85QiJ6VV8K%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;1806&quot; height=&quot;786&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;786&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://openclaw.ai&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;기존 AI 는 사용자의 input 을 필요로 했다.&lt;br /&gt;정확히 말하자면, 사용자가 시키는 일만 할 줄 알았던 것이다.&lt;br /&gt;그러나 OpenClaw 는 실시간으로 24시간 내내 캘린더 관리, 이메일 분류, 스마트 홈 제어 등등 &lt;b&gt;선제적 자율 에이전트 역할&lt;/b&gt;을 수행하고,&lt;br /&gt;사용자 기기에 직접 self-hosted 가능하기 때문에, &lt;b&gt;데이터에 대한 완전한 통제권  ️ &lt;/b&gt;을 가질 수 있다.&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;그리고 &lt;b&gt;확장성 ⛓️&amp;zwj;  &lt;/b&gt;이 매우 좋다. Telegram, WhatsApp, Discord 등과 네이티브하게 연결 가능해서, &lt;br /&gt;Mac mini 를 상시 구동 서버로 사용하고, OpenClaw 와 소통하기 위한 창구로 Telegram 을 사용하는 사람이 많다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;아 그리고 또 ChatGPT 와 Claude 같은 경우는 창을 종료하면 사용자와의 대화 내역이 사라지지만 (저장되지 않지만) &lt;br /&gt;OpenClaw 는 모두 &lt;b&gt;메모리화   &lt;/b&gt;한다는 점도 또다른 강점이다.&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&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;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lB3lv/dJMb99SNoS1/kvKd7MUeKrarDGNcBUiKR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lB3lv/dJMb99SNoS1/kvKd7MUeKrarDGNcBUiKR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lB3lv/dJMb99SNoS1/kvKd7MUeKrarDGNcBUiKR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlB3lv%2FdJMb99SNoS1%2FkvKd7MUeKrarDGNcBUiKR0%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-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;그러나!&lt;br /&gt;위와 같은 장점들 때문에   &lt;b&gt;보안 관점에서는 매우 위험&lt;/b&gt;하다.&lt;br /&gt;갑자기 OpenClaw 가 내 신용카드로 마구잡이로 결제를 진행할 수도 있는거고,&lt;br /&gt;내 연락처에 있는 모든 사람들에게 내가 원치않는 문자를 보낼 수도 있는 것이다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;그래서 나는 기존에 사용하던 Mac mini 에   &lt;b&gt;Apple 계정을 추가 생성&lt;/b&gt;해서 논리적으로 아예 분리를 시켜놓고자 했다.&lt;br /&gt;Mac mini 를 사람들이 많이 사용하는데, 그 이유는 Mac mini 는 절전 모드 없이 지속적으로 실행 가능하기도 하고 Apple 생태계 이점도 활용할 수 있기 때문이다.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Mac Mini 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 새로운 Apple 계정을 생성해서 &quot;관리자&quot; 가 아닌 &quot;표준 사용자&quot; 로 OpenClaw 를 위한 환경을 마련하려 했다.&lt;br /&gt;그러나 실제로 시도해보니, 표준 사용자로는 설치 및 제어 등 제약사항이 너무 많아,&lt;br /&gt;결국 Mac Mini 를 포맷하고 OpenClaw 만을 위한 공간으로 사용하고자 했다.&lt;br /&gt;✅ 이때, 항상 OpenClaw 를 구동하기 위해 &lt;i&gt;시스템 설정 &amp;gt; 에너지&lt;/i&gt; 에서 &lt;i&gt;저전력 모드 &lt;/i&gt;Off, &lt;i&gt;정전 후 자동으로 시작하기 &lt;/i&gt;On, &lt;i&gt;Amphetamine&lt;/i&gt;&lt;span style=&quot;color: #344054;&quot;&gt; 설치를 한다.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #344054;&quot;&gt;2. API Key 확보&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #344054;&quot;&gt;나는 Claude 를 연동하고자 했었기 때문에 &lt;/span&gt;&lt;a href=&quot;https://platform.claude.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #344054;&quot;&gt;https://platform.claude.com/&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #344054;&quot;&gt; 에서 API Key 를 확보해두었다.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #344054;&quot;&gt;3. Telegram 봇 토큰 확보&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #344054;&quot;&gt;Telegram 을 열어서 @BotFather 을 통해 /newbot 생성하여 token 확보&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #344054;&quot;&gt;4. OpenClaw 설치&lt;/span&gt;&lt;/h2&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;curl -fsSL https://openclaw.ai/install.sh | bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color: #344054;&quot;&gt;설치 후 이것저것 물어보는데 개개인에 맞춰서 대응하면 된다. 내 경우 아래와 같이 설정하였다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Onboarding mode: QuickStart&lt;/li&gt;
&lt;li&gt;Default model: anthropic/claude-haiku-4-5-20251001 (나는 과금방지 및 시범용으로 일시적으로 이걸 선택했다.)&lt;/li&gt;
&lt;li&gt;Channel: Telegram&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 Telegram 쪽에서 /start 하면 user id 와 Pairing code 를 제공하는데, 아래 명령어를 통해 페어링 코드를 OpenClaw 에 전달한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;openclaw pairing list telegram
opencalw pairing approve telegram [페어링 코드]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&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;1206&quot; data-origin-height=&quot;773&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bO1oEi/dJMcahQQmAi/4Pp4xadAzGsRRWTpIgqky0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bO1oEi/dJMcahQQmAi/4Pp4xadAzGsRRWTpIgqky0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bO1oEi/dJMcahQQmAi/4Pp4xadAzGsRRWTpIgqky0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbO1oEi%2FdJMcahQQmAi%2F4Pp4xadAzGsRRWTpIgqky0%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;500&quot; height=&quot;320&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;773&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;그럼 이렇게 Telegram 으로 OpenClaw (Mac mini) 를 제어할 수 있게 된다!&lt;br /&gt;&amp;nbsp;&lt;br /&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;1206&quot; data-origin-height=&quot;1753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nvEFl/dJMcabb0EzD/SLABw60F5WxQ60oZukF7l1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nvEFl/dJMcabb0EzD/SLABw60F5WxQ60oZukF7l1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nvEFl/dJMcabb0EzD/SLABw60F5WxQ60oZukF7l1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnvEFl%2FdJMcabb0EzD%2FSLABw60F5WxQ60oZukF7l1%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;500&quot; height=&quot;727&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;1753&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;누워서 OpenClaw 에게 이것저것 설치하라고 할 수도 있는 것이고,&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;결국 이젠 누가 얼만큼 AI 도구를 잘 활용하는가, 먼저 선점하는가, 누가 더 번뜩이는 아이디어를 갖고 있는가가 관건이 될 것 같다.&lt;/p&gt;</description>
      <category>IT/AI</category>
      <category>Ai</category>
      <category>Claude</category>
      <category>Clawdbot</category>
      <category>Moltbot</category>
      <category>openclaw</category>
      <category>telegram</category>
      <category>비서</category>
      <category>인공지능</category>
      <category>크롤링</category>
      <author>GRACE_MJ</author>
      <guid isPermaLink="true">https://secure-key.tistory.com/63</guid>
      <comments>https://secure-key.tistory.com/63#entry63comment</comments>
      <pubDate>Sat, 7 Feb 2026 13:49:35 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] pwnable.kr random 풀이</title>
      <link>https://secure-key.tistory.com/62</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2r0fB/btryjGgoGAU/hj6VqoCX4nVkKAKGarS4Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2r0fB/btryjGgoGAU/hj6VqoCX4nVkKAKGarS4Fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2r0fB/btryjGgoGAU/hj6VqoCX4nVkKAKGarS4Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2r0fB%2FbtryjGgoGAU%2Fhj6VqoCX4nVkKAKGarS4Fk%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;234&quot; height=&quot;312&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;792&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hj5Bl/btryd8snkzE/BkhlfyfUdjyOyyboPnpKxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hj5Bl/btryd8snkzE/BkhlfyfUdjyOyyboPnpKxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hj5Bl/btryd8snkzE/BkhlfyfUdjyOyyboPnpKxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHj5Bl%2Fbtryd8snkzE%2FBkhlfyfUdjyOyyboPnpKxK%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;1196&quot; height=&quot;792&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;792&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2128&quot; data-origin-height=&quot;788&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N3SBd/btrygunFZ6w/41dyGkZvUpLsnNFRuEGIlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N3SBd/btrygunFZ6w/41dyGkZvUpLsnNFRuEGIlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N3SBd/btrygunFZ6w/41dyGkZvUpLsnNFRuEGIlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN3SBd%2FbtrygunFZ6w%2F41dyGkZvUpLsnNFRuEGIlK%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;2128&quot; height=&quot;788&quot; data-origin-width=&quot;2128&quot; data-origin-height=&quot;788&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1876&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PuGfe/btrycjOkJ5y/eZpJxP0MefJJgzzZoF7io1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PuGfe/btrycjOkJ5y/eZpJxP0MefJJgzzZoF7io1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PuGfe/btrycjOkJ5y/eZpJxP0MefJJgzzZoF7io1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPuGfe%2FbtrycjOkJ5y%2FeZpJxP0MefJJgzzZoF7io1%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;1876&quot; height=&quot;684&quot; data-origin-width=&quot;1876&quot; data-origin-height=&quot;684&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스코드를 확인해보니 rand() 함수를 통해 받은 랜덤값과, 입력값을 xor 한 결과가 0xdeadbeef일 경우, 플래그값을 출력해주는 것으로 확인된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2092&quot; data-origin-height=&quot;1154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmXZlU/btryetIUOA8/woOsFXBMZH9Z7w97p1Jink/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmXZlU/btryetIUOA8/woOsFXBMZH9Z7w97p1Jink/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmXZlU/btryetIUOA8/woOsFXBMZH9Z7w97p1Jink/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmXZlU%2FbtryetIUOA8%2FwoOsFXBMZH9Z7w97p1Jink%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;2092&quot; height=&quot;1154&quot; data-origin-width=&quot;2092&quot; data-origin-height=&quot;1154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gdb를 통해 rand() 함수의 리턴값이 무엇인지를 확인해보고자 rand() 실행 직후 *main+18에 브레이크를 걸었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2128&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tXPL8/btrye4pwgls/swKxCYokrY1cqSHBMJHNhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tXPL8/btrye4pwgls/swKxCYokrY1cqSHBMJHNhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tXPL8/btrye4pwgls/swKxCYokrY1cqSHBMJHNhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtXPL8%2Fbtrye4pwgls%2FswKxCYokrY1cqSHBMJHNhk%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;2128&quot; height=&quot;362&quot; data-origin-width=&quot;2128&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;랜덤값은 1804289383이었고, 0xdeadbeef와 xor한 값은 3039230856이므로, 입력값으로 3039230856을 넣어주면 플래그값을 확인할 수 있겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2036&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/90KXC/btryg497vo4/PuHPVqkGP9XVNB9NCI3igK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/90KXC/btryg497vo4/PuHPVqkGP9XVNB9NCI3igK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/90KXC/btryg497vo4/PuHPVqkGP9XVNB9NCI3igK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F90KXC%2Fbtryg497vo4%2FPuHPVqkGP9XVNB9NCI3igK%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;2036&quot; height=&quot;144&quot; data-origin-width=&quot;2036&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT/Linux</category>
      <category>GDB</category>
      <category>Linux</category>
      <category>pwnable</category>
      <category>pwnable.kr</category>
      <category>RAND</category>
      <category>랜덤</category>
      <category>리눅스</category>
      <category>포너블</category>
      <author>GRACE_MJ</author>
      <guid isPermaLink="true">https://secure-key.tistory.com/62</guid>
      <comments>https://secure-key.tistory.com/62#entry62comment</comments>
      <pubDate>Sun, 3 Apr 2022 02:50:33 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] pwnable.kr passcode 풀이</title>
      <link>https://secure-key.tistory.com/61</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R50Ml/btryguus3e7/w5RAooPR0bgvuaOrWyFTt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R50Ml/btryguus3e7/w5RAooPR0bgvuaOrWyFTt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R50Ml/btryguus3e7/w5RAooPR0bgvuaOrWyFTt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR50Ml%2Fbtryguus3e7%2Fw5RAooPR0bgvuaOrWyFTt1%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;201&quot; height=&quot;276&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;524&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pwnable.kr 다섯번째 단계: passcode 풀이를 시작하겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;790&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SJeVT/btryhOssGbO/vELO4uVjf6Tnhgh2tzBqFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SJeVT/btryhOssGbO/vELO4uVjf6Tnhgh2tzBqFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SJeVT/btryhOssGbO/vELO4uVjf6Tnhgh2tzBqFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSJeVT%2FbtryhOssGbO%2FvELO4uVjf6Tnhgh2tzBqFk%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;1194&quot; height=&quot;790&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;790&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2066&quot; data-origin-height=&quot;788&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RRTiF/btryjECQ6uB/VS1m5P9tjOoZxyPB3yY2NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RRTiF/btryjECQ6uB/VS1m5P9tjOoZxyPB3yY2NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RRTiF/btryjECQ6uB/VS1m5P9tjOoZxyPB3yY2NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRRTiF%2FbtryjECQ6uB%2FVS1m5P9tjOoZxyPB3yY2NK%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;2066&quot; height=&quot;788&quot; data-origin-width=&quot;2066&quot; data-origin-height=&quot;788&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1960&quot; data-origin-height=&quot;1588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjbDra/btryjGm9d2f/bL9HAdkpoIbFxNDLnMqpa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjbDra/btryjGm9d2f/bL9HAdkpoIbFxNDLnMqpa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjbDra/btryjGm9d2f/bL9HAdkpoIbFxNDLnMqpa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjbDra%2FbtryjGm9d2f%2FbL9HAdkpoIbFxNDLnMqpa1%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;1960&quot; height=&quot;1588&quot; data-origin-width=&quot;1960&quot; data-origin-height=&quot;1588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스코드를 보면, passcode1과 passcode2를 scanf를 통해 입력값으로 받아들이는데, 입력값을 각 변수의 주소값에 저장하고, 이들은 초기화되어 있지 않기 때문에 문제에서 제시한 것과 같이 오류가 날 수 밖에 없다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1894&quot; data-origin-height=&quot;1010&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P7xqx/btryd80cdK7/mL0Rxg6dBCTMzI2mDyOmbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P7xqx/btryd80cdK7/mL0Rxg6dBCTMzI2mDyOmbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P7xqx/btryd80cdK7/mL0Rxg6dBCTMzI2mDyOmbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP7xqx%2Fbtryd80cdK7%2FmL0Rxg6dBCTMzI2mDyOmbK%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;1894&quot; height=&quot;1010&quot; data-origin-width=&quot;1894&quot; data-origin-height=&quot;1010&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;welcome() 함수를 확인해보면 기존에 이름을 입력받는 scanf는 -0x70(%ebp)에 입력값을 저장하고 있고,&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;2232&quot; data-origin-height=&quot;1470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMAWN0/btrygZ8qr2w/B8f4LkF9LjVKkYSbg1s2s1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMAWN0/btrygZ8qr2w/B8f4LkF9LjVKkYSbg1s2s1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMAWN0/btrygZ8qr2w/B8f4LkF9LjVKkYSbg1s2s1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMAWN0%2FbtrygZ8qr2w%2FB8f4LkF9LjVKkYSbg1s2s1%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;2232&quot; height=&quot;1470&quot; data-origin-width=&quot;2232&quot; data-origin-height=&quot;1470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;login() 함수를 살펴보면 passcode1을 입력받는 scanf는 -0x10(%ebp)에 입력값을 저장하고 있음을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1936&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mxBwo/btrye3RA5GY/bT8eEkh5AtKz5EvKiWqUak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mxBwo/btrye3RA5GY/bT8eEkh5AtKz5EvKiWqUak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mxBwo/btrye3RA5GY/bT8eEkh5AtKz5EvKiWqUak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmxBwo%2Fbtrye3RA5GY%2FbT8eEkh5AtKz5EvKiWqUak%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;1936&quot; height=&quot;76&quot; data-origin-width=&quot;1936&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-0x70(%ebp) 에서 -0x10(%ebp)까지는 96byte만큼 차이가 나기 때문에 여기는 A로 채워주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 여기서 멈추는 것이 아니라, 그 이후에 수행되는 함수가 fflush이기 때문에 이걸 login 함수 밑에 있는 system 함수의 시작주소로 변경까지 해줘야 우리가 원하는 플래그를 확인할 수 있을 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1996&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AOo6f/btryd8MGdsU/ixHqls28nx74WOkCWJljAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AOo6f/btryd8MGdsU/ixHqls28nx74WOkCWJljAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AOo6f/btryd8MGdsU/ixHqls28nx74WOkCWJljAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAOo6f%2Fbtryd8MGdsU%2FixHqls28nx74WOkCWJljAK%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;1996&quot; height=&quot;142&quot; data-origin-width=&quot;1996&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fflush의 0x8048430을 확인해보니 0x804a004로 jump 시키는 것을 확인할 수 있었다. 따라서 여기에 system 함수의 시작주소를 넣어주도록 하겠다. 앞서 login 함수에서 봤다시피 system의 시작주소는 0x80485e3이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsWcuX/btryfZIfTNV/rudK0HyBz8oqGzlWFpKAJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsWcuX/btryfZIfTNV/rudK0HyBz8oqGzlWFpKAJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsWcuX/btryfZIfTNV/rudK0HyBz8oqGzlWFpKAJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsWcuX%2FbtryfZIfTNV%2FrudK0HyBz8oqGzlWFpKAJk%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;2002&quot; height=&quot;72&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0x80485e3은 정수로 134514147이므로&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1956&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTNlaO/btrygvfOhK9/votSlch8qatKXupqAwza9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTNlaO/btrygvfOhK9/votSlch8qatKXupqAwza9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTNlaO/btrygvfOhK9/votSlch8qatKXupqAwza9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTNlaO%2FbtrygvfOhK9%2FvotSlch8qatKXupqAwza9k%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;1956&quot; height=&quot;184&quot; data-origin-width=&quot;1956&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 passcode를 실행해주면 플래그값을 얻을 수 있다.&lt;/p&gt;</description>
      <category>IT/Linux</category>
      <category>flag</category>
      <category>GDB</category>
      <category>Got</category>
      <category>Linux</category>
      <category>pwnable</category>
      <category>pwnable.kr</category>
      <category>scanf</category>
      <category>리눅스</category>
      <category>포너블</category>
      <author>GRACE_MJ</author>
      <guid isPermaLink="true">https://secure-key.tistory.com/61</guid>
      <comments>https://secure-key.tistory.com/61#entry61comment</comments>
      <pubDate>Sun, 3 Apr 2022 02:38:11 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] pwnable.kr flag 풀이</title>
      <link>https://secure-key.tistory.com/60</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RlcLE/btryeuHQMcF/CbQv1iKVNOCkwLMfDCHZfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RlcLE/btryeuHQMcF/CbQv1iKVNOCkwLMfDCHZfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RlcLE/btryeuHQMcF/CbQv1iKVNOCkwLMfDCHZfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRlcLE%2FbtryeuHQMcF%2FCbQv1iKVNOCkwLMfDCHZfK%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;246&quot; height=&quot;345&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pwnable.kr 4단계: flag 풀이를 하도록 하겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;792&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b56Qsw/btrycioljIK/X2AxjWj87zBggL7zjWufRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b56Qsw/btrycioljIK/X2AxjWj87zBggL7zjWufRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b56Qsw/btrycioljIK/X2AxjWj87zBggL7zjWufRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb56Qsw%2FbtrycioljIK%2FX2AxjWj87zBggL7zjWufRK%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;1194&quot; height=&quot;792&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;792&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 flag 바이너리만 갖고 리버싱하는 문제이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O04VJ/btryd2SmYL7/rlyrKWdtkIZ1EYxmtKrAA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O04VJ/btryd2SmYL7/rlyrKWdtkIZ1EYxmtKrAA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O04VJ/btryd2SmYL7/rlyrKWdtkIZ1EYxmtKrAA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO04VJ%2Fbtryd2SmYL7%2FrlyrKWdtkIZ1EYxmtKrAA1%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;1714&quot; height=&quot;246&quot; data-origin-width=&quot;1714&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IDA를 통해 flag 바이너리를 열어서 strings 확인을 해보니 확인되는 문자열이 위와 같았고, //upx.sf.net $\n 을 통해 UPX 패킹이 되어 있지 않을까 하는 추측을 해볼 수 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1972&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boovRR/btryd9Sksoz/RTfHZWMK4OuSRJZVvH1WKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boovRR/btryd9Sksoz/RTfHZWMK4OuSRJZVvH1WKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boovRR/btryd9Sksoz/RTfHZWMK4OuSRJZVvH1WKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboovRR%2Fbtryd9Sksoz%2FRTfHZWMK4OuSRJZVvH1WKK%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;1972&quot; height=&quot;354&quot; data-origin-width=&quot;1972&quot; data-origin-height=&quot;354&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;&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;1902&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rV0mh/btryiGno6ah/j8NSeKkkOgc4QNxClHR4qK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rV0mh/btryiGno6ah/j8NSeKkkOgc4QNxClHR4qK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rV0mh/btryiGno6ah/j8NSeKkkOgc4QNxClHR4qK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrV0mh%2FbtryiGno6ah%2Fj8NSeKkkOgc4QNxClHR4qK%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;1902&quot; height=&quot;758&quot; data-origin-width=&quot;1902&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 상태로 gdb를 통해 디스어셈블 해보니 메인 함수를 확인할 수 있었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힌트로써 I will malloc() and strcpy the flag there. take it. 이라고 출력해주는 것 또한 확인 가능했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 확인해보면 100byte만큼 malloc하고 있고, strcpy로 추측되는 함수가 호출되고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0x6c2070이 가리키고있는 곳을 확인하면 flag를 알 수 있을 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kZxOw/btryf0mRdST/JR9euejcviyePCl7XHaVxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kZxOw/btryf0mRdST/JR9euejcviyePCl7XHaVxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kZxOw/btryf0mRdST/JR9euejcviyePCl7XHaVxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkZxOw%2Fbtryf0mRdST%2FJR9euejcviyePCl7XHaVxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1868&quot; height=&quot;146&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0x6c2070이 가리키고 있는 것은 0x496628이고, 여기의 문자열을 확인하면 플래그값을 얻을 수 있다.&lt;/p&gt;</description>
      <category>IT/Linux</category>
      <category>Linux</category>
      <category>pwnable</category>
      <category>pwnable.kr</category>
      <category>Reversing</category>
      <category>strings</category>
      <category>upx</category>
      <category>리눅스</category>
      <category>리버싱</category>
      <category>언패킹</category>
      <category>포너블</category>
      <author>GRACE_MJ</author>
      <guid isPermaLink="true">https://secure-key.tistory.com/60</guid>
      <comments>https://secure-key.tistory.com/60#entry60comment</comments>
      <pubDate>Sun, 3 Apr 2022 02:02:01 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] pwnable.kr bof 풀이</title>
      <link>https://secure-key.tistory.com/59</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;378&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bie8Fy/btryfj0fKmO/p8coBATOY7VmvwAtPCpkfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bie8Fy/btryfj0fKmO/p8coBATOY7VmvwAtPCpkfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bie8Fy/btryfj0fKmO/p8coBATOY7VmvwAtPCpkfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbie8Fy%2Fbtryfj0fKmO%2Fp8coBATOY7VmvwAtPCpkfK%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;202&quot; height=&quot;290&quot; data-origin-width=&quot;378&quot; data-origin-height=&quot;542&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pwnable.kr 세번째 단계: bof 를 풀어보도록 하겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;798&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQ7TuM/btryetPyD60/ro7xs4RVjcFMfepuyDIDdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQ7TuM/btryetPyD60/ro7xs4RVjcFMfepuyDIDdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQ7TuM/btryetPyD60/ro7xs4RVjcFMfepuyDIDdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQ7TuM%2FbtryetPyD60%2Fro7xs4RVjcFMfepuyDIDdK%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;1196&quot; height=&quot;798&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;798&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 문제는 Buffer Overflow에 관한 문제인 것으로 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 실행파일 bof와 이에 대한 코드인 bof.c 를 다운로드 받는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4WwN7/btryguno1vl/cXFvY5rgNuEovL3IHgn4P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4WwN7/btryguno1vl/cXFvY5rgNuEovL3IHgn4P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4WwN7/btryguno1vl/cXFvY5rgNuEovL3IHgn4P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4WwN7%2Fbtryguno1vl%2FcXFvY5rgNuEovL3IHgn4P0%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;1726&quot; height=&quot;646&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;646&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드는 위와 같고, bof 실행파일은 다운로드 받아서 실행 및 디스어셈블할 준비를 마쳤다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 확인해보니 func() 내에서 gets() 함수로 값을 받아들이는데, func()의 인자값이 0xcafebabe와 동일한지 확인함으로써 쉘을 실행해줌을 확인할 수 있다. 따라서 gets()를 오버플로우시켜서 key에 0xcafebabe를 overwrite 하면 쉘을 실행할 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bof 실행파일을 다운로드 받았으니 이를 디스어셈블하여 key에 도달하기까지 얼만큼의 바이트가 필요한지 확인할 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1974&quot; data-origin-height=&quot;974&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnBidT/btrye4CYU2a/sYv752PmQMYkqMPTtPI0H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnBidT/btrye4CYU2a/sYv752PmQMYkqMPTtPI0H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnBidT/btrye4CYU2a/sYv752PmQMYkqMPTtPI0H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnBidT%2Fbtrye4CYU2a%2FsYv752PmQMYkqMPTtPI0H0%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;1974&quot; height=&quot;974&quot; data-origin-width=&quot;1974&quot; data-origin-height=&quot;974&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gdb를 통해 bof 실행파일을 디스어셈블한 후, bof.c 소스코드에서 확인했던 if (key == 0xcafebabe) 부분과 gets(overflowme); 부분을 확인하고자 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 key의 위치는 *func+40 에서 볼 수 있다 시피 0x8($ebp)에 위치해 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 overflowme가 위치해있는 주소만 확인하면 되는데, overflowme는 gets() 함수에서 사용되고 있으므로, 이를 힌트로 삼아 call 되는 함수를 일대일 대응하면 -0x2c($ebp)에 overflowme가 위치해있음을 유추할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1928&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMaYra/btryeyxxsXu/5529pQw2LrFEOqsDyI7LI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMaYra/btryeyxxsXu/5529pQw2LrFEOqsDyI7LI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMaYra/btryeyxxsXu/5529pQw2LrFEOqsDyI7LI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMaYra%2FbtryeyxxsXu%2F5529pQw2LrFEOqsDyI7LI0%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;1928&quot; height=&quot;212&quot; data-origin-width=&quot;1928&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 overflowme로부터 key까지는 52byte 만큼 떨어져 있는 것이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;52byte만큼의 자리만 채워준 뒤에 0xcafebabe를 이어서 덧붙여주면 key 자리에 0xcafebabe가 overwrite될 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBJIma/btrydAuYDme/mwP0kqM54kKnKcy0TX9Xvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBJIma/btrydAuYDme/mwP0kqM54kKnKcy0TX9Xvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBJIma/btrydAuYDme/mwP0kqM54kKnKcy0TX9Xvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBJIma%2FbtrydAuYDme%2FmwP0kqM54kKnKcy0TX9Xvk%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;1914&quot; height=&quot;368&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>IT/Linux</category>
      <category>BOF</category>
      <category>Buffer overflow</category>
      <category>disassembly</category>
      <category>GDB</category>
      <category>Linux</category>
      <category>pwnable</category>
      <category>pwnable.kr</category>
      <category>리눅스</category>
      <category>버퍼오버플로우</category>
      <category>포너블</category>
      <author>GRACE_MJ</author>
      <guid isPermaLink="true">https://secure-key.tistory.com/59</guid>
      <comments>https://secure-key.tistory.com/59#entry59comment</comments>
      <pubDate>Sun, 3 Apr 2022 01:26:13 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] pwnable.kr collision 풀이</title>
      <link>https://secure-key.tistory.com/58</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CJ6i6/btrygweqZxW/74CrKjSxFW8BJ1HmBabI5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CJ6i6/btrygweqZxW/74CrKjSxFW8BJ1HmBabI5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CJ6i6/btrygweqZxW/74CrKjSxFW8BJ1HmBabI5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCJ6i6%2FbtrygweqZxW%2F74CrKjSxFW8BJ1HmBabI5K%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;238&quot; height=&quot;324&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 두번째 단계: collision을 풀어보도록 하겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;794&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DDKiE/btryezQr524/2myRcXBTKv0CvKStfUYgB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DDKiE/btryezQr524/2myRcXBTKv0CvKStfUYgB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DDKiE/btryezQr524/2myRcXBTKv0CvKStfUYgB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDDKiE%2FbtryezQr524%2F2myRcXBTKv0CvKStfUYgB0%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;1196&quot; height=&quot;794&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;794&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제를 확인해보면 위와 같다. MD5 Hash collision 에 관한 문제임을 힌트로써 얻을 수 있었다.&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;b&gt;Collision Attack&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;In&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Cryptography&quot;&gt;cryptography&lt;/a&gt;, a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;collision attack&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;on a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Cryptographic_hash&quot;&gt;cryptographic hash&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;tries to find two inputs producing the same hash value, i.e. a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Hash_collision&quot;&gt;hash collision&lt;/a&gt;. This is in contrast to a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Preimage_attack&quot;&gt;preimage attack&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;where a specific target hash value is specified.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;There are roughly two types of collision attacks:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Classical collision attackFind two different messages&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;m&lt;/i&gt;1&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;m&lt;/i&gt;2&lt;span&gt;&amp;nbsp;&lt;/span&gt;such that&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;hash&lt;/i&gt;(&lt;i&gt;m&lt;/i&gt;1) =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;hash&lt;/i&gt;(&lt;i&gt;m&lt;/i&gt;2).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;More generally:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Chosen-prefix collision attackGiven two different prefixes&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;p&lt;/i&gt;1&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;p&lt;/i&gt;2, find two appendages&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;m&lt;/i&gt;1&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;m&lt;/i&gt;2&lt;span&gt;&amp;nbsp;&lt;/span&gt;such that&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;hash&lt;/i&gt;(&lt;i&gt;p&lt;/i&gt;1&lt;span&gt;&amp;nbsp;&lt;/span&gt;∥&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;m&lt;/i&gt;1) =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;hash&lt;/i&gt;(&lt;i&gt;p&lt;/i&gt;2&lt;span&gt;&amp;nbsp;&lt;/span&gt;∥&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;m&lt;/i&gt;2), where&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;∥&lt;/i&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;denotes the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Concatenation&quot;&gt;concatenation&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;operation.&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;Collision Attack에 대해 찾아보니 위와 같은 사실을 알 수 있었고, 결론적으로 충돌 공격이란 해시 충돌이 일어나는 (해시값이 동일한) 서로 다른 두 입력값을 찾는 공격이다.&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;2076&quot; data-origin-height=&quot;794&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yjLhh/btryhOllRqn/k1OwxuP7ubsfwuUYzKYR51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yjLhh/btryhOllRqn/k1OwxuP7ubsfwuUYzKYR51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yjLhh/btryhOllRqn/k1OwxuP7ubsfwuUYzKYR51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyjLhh%2FbtryhOllRqn%2Fk1OwxuP7ubsfwuUYzKYR51%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;2076&quot; height=&quot;794&quot; data-origin-width=&quot;2076&quot; data-origin-height=&quot;794&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉘에 접속하여 확인해보니 col 실행파일과 코드가 담겨져 있는 col.c, 그리고 궁극적으로 읽어야 하는 flag 파일이 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1954&quot; data-origin-height=&quot;1152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuyWXp/btryezwakaT/zyI4HHkbaOBVEcFhKXA6Ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuyWXp/btryezwakaT/zyI4HHkbaOBVEcFhKXA6Ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuyWXp/btryezwakaT/zyI4HHkbaOBVEcFhKXA6Ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuyWXp%2FbtryezwakaT%2FzyI4HHkbaOBVEcFhKXA6Ok%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;1954&quot; height=&quot;1152&quot; data-origin-width=&quot;1954&quot; data-origin-height=&quot;1152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;col.c 파일을 읽어보니, col 실행 시 인자가 한 가지 필요했고, 이는 20 byte 이상이어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력된 인자는 check_password() 함수의 인자로써 다시 사용되는데, 해당 함수의 결과값이 0x21DD09EC와 동일하면 플래그값을 읽을 수 있을 것으로 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 상에서 다섯번에 나눠서 리턴값을 도출하는 것으로 보아, 합이 0x21DD09EC가 되게끔만 4byte 짜리 다섯등분을 하여 이를 입력값으로 넣어주면 될 것으로 보인다. 결과적으로 어떻게 다섯등분을 하는지는 상관이 없기 때문에 앞서 문제에서 MD5 Hash Collision 이라는 힌트를 준 것으로 보인다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1964&quot; data-origin-height=&quot;394&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sfua3/btrye4pdSin/ufdt1yR6iPKpoXyF89r5C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sfua3/btrye4pdSin/ufdt1yR6iPKpoXyF89r5C1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sfua3/btrye4pdSin/ufdt1yR6iPKpoXyF89r5C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsfua3%2Fbtrye4pdSin%2Fufdt1yR6iPKpoXyF89r5C1%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;1964&quot; height=&quot;394&quot; data-origin-width=&quot;1964&quot; data-origin-height=&quot;394&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0x21DD09EC를 만들어줘야하기 때문에 우선 이를 5로 나누었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5로 나눈 값은 정수로 113626824였고, 그렇게 했을 때 남는 나머지는 4였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2006&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJRPFI/btryeAaNOc6/rurtsnB5DsQQXzEe8yxKW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJRPFI/btryeAaNOc6/rurtsnB5DsQQXzEe8yxKW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJRPFI/btryeAaNOc6/rurtsnB5DsQQXzEe8yxKW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJRPFI%2FbtryeAaNOc6%2FrurtsnB5DsQQXzEe8yxKW1%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;2006&quot; height=&quot;106&quot; data-origin-width=&quot;2006&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 5로 나눈 몫을 hex로 표현하면 0x6C5CEC8이니, 처음 16 byte는 0x06C5CEC8 로 네 번 채우면 될 듯 하고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1974&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EmfRJ/btryhN7PIUl/2aAkLNGQEpe636Qjmme0Hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EmfRJ/btryhN7PIUl/2aAkLNGQEpe636Qjmme0Hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EmfRJ/btryhN7PIUl/2aAkLNGQEpe636Qjmme0Hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEmfRJ%2FbtryhN7PIUl%2F2aAkLNGQEpe636Qjmme0Hk%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;1974&quot; height=&quot;74&quot; data-origin-width=&quot;1974&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 4 byte는 앞서 나눈 나머지인 4를 더하여 hex로 표현한 0x06C5CECC로 채울 것이다.&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;이제 이걸 리틀 엔디언 방식으로 col 실행파일에 인자로써 넣어줄 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\xc8\xce\xc5\x06 4번과 \xcc\xce\xc5\x06 1번으로 인자로써 넣어준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2020&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n7Grz/btrydJMQ8uV/X6ymUJ4OLKPyO3klk71Z90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n7Grz/btrydJMQ8uV/X6ymUJ4OLKPyO3klk71Z90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n7Grz/btrydJMQ8uV/X6ymUJ4OLKPyO3klk71Z90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn7Grz%2FbtrydJMQ8uV%2FX6ymUJ4OLKPyO3klk71Z90%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;2020&quot; height=&quot;74&quot; data-origin-width=&quot;2020&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 결과적으로 플래그 값을 확인할 수 있다.&lt;/p&gt;</description>
      <category>IT/Linux</category>
      <category>collision attack</category>
      <category>HEX</category>
      <category>Linux</category>
      <category>MD5</category>
      <category>pwnable</category>
      <category>pwnable.kr</category>
      <category>리눅스</category>
      <category>충돌 공격</category>
      <category>포너블</category>
      <author>GRACE_MJ</author>
      <guid isPermaLink="true">https://secure-key.tistory.com/58</guid>
      <comments>https://secure-key.tistory.com/58#entry58comment</comments>
      <pubDate>Sat, 2 Apr 2022 20:47:44 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] pwnable.kr fd 풀이</title>
      <link>https://secure-key.tistory.com/57</link>
      <description>&lt;p style=&quot;text-align: left;&quot; 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-origin-width=&quot;396&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctm0pj/btrydhiIWtX/44eTBQNfGBk0hA2fojxcqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctm0pj/btrydhiIWtX/44eTBQNfGBk0hA2fojxcqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctm0pj/btrydhiIWtX/44eTBQNfGBk0hA2fojxcqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fctm0pj%2FbtrydhiIWtX%2F44eTBQNfGBk0hA2fojxcqK%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;193&quot; height=&quot;526&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;pwnable.kr 의 첫번째 단계: fd 를 풀어보도록 하겠다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FrZdV/btryfZA6qCZ/ckob3VhV6A6SWofdjeJuck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FrZdV/btryfZA6qCZ/ckob3VhV6A6SWofdjeJuck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FrZdV/btryfZA6qCZ/ckob3VhV6A6SWofdjeJuck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFrZdV%2FbtryfZA6qCZ%2Fckob3VhV6A6SWofdjeJuck%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;1194&quot; height=&quot;796&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;첫번째 단계인 fd를 클릭하면 위와 같이 문제가 표시된다&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;b&gt;File Descriptor&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;In&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Unix&quot;&gt;Unix&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Unix-like&quot;&gt;Unix-like&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;computer operating systems, a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;file descriptor&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(&lt;b&gt;FD&lt;/b&gt;, less frequently&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;fildes&lt;/b&gt;) is a unique identifier (&lt;a href=&quot;https://en.wikipedia.org/wiki/Handle_(computing)&quot;&gt;handle&lt;/a&gt;) for a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/File_(computing)&quot;&gt;file&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or other&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Input/output&quot;&gt;input/output&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/System_resource&quot;&gt;resource&lt;/a&gt;, such as a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Pipe_(Unix)&quot;&gt;pipe&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Network_socket&quot;&gt;network socket&lt;/a&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;File descriptors typically have non-negative integer values, with negative values being reserved to indicate &quot;no value&quot; or error conditions.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;File descriptors are a part of the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/POSIX&quot;&gt;POSIX&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Application_programming_interface&quot;&gt;API&lt;/a&gt;. Each Unix&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Process_(computing)&quot;&gt;process&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(except perhaps&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Daemon_(computer_software)&quot;&gt;daemons&lt;/a&gt;) should have three standard POSIX file descriptors, corresponding to the three&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Standard_streams&quot;&gt;standard streams&lt;/a&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Integer valueName&amp;lt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Unistd.h&quot;&gt;unistd.h&lt;/a&gt;&amp;gt;&amp;nbsp;symbolic constant[1]&amp;lt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Stdio.h&quot;&gt;stdio.h&lt;/a&gt;&amp;gt;&amp;nbsp;file stream[2]&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&gt;0&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Stdin&quot;&gt;Standard input&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;STDIN_FILENO&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;stdin&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Stdout&quot;&gt;Standard output&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;STDOUT_FILENO&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;stdout&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Stderr&quot;&gt;Standard error&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;STDERR_FILENO&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;stderr&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2880&quot; data-origin-height=&quot;1415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bucJhz/btrygZAoNs3/3jQ67MTJNjBjS4YGxu4gak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bucJhz/btrygZAoNs3/3jQ67MTJNjBjS4YGxu4gak/img.png&quot; data-alt=&quot;https://en.wikipedia.org/wiki/File_descriptor#/media/File:File_table_and_inode_table.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bucJhz/btrygZAoNs3/3jQ67MTJNjBjS4YGxu4gak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbucJhz%2FbtrygZAoNs3%2F3jQ67MTJNjBjS4YGxu4gak%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;2880&quot; height=&quot;1415&quot; data-origin-width=&quot;2880&quot; data-origin-height=&quot;1415&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://en.wikipedia.org/wiki/File_descriptor#/media/File:File_table_and_inode_table.svg&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;위키피디아를 통해 리눅스에서의 File Descriptor에 대해서 검색하면 위와 같은 내용을 확인할 수 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국어로는 &lt;b&gt;파일 서술자&lt;/b&gt;로 fd를 통칭하는 듯하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qAMIu/btryiHsIIH9/KuyFAxf8mRd2QBAejqdz1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qAMIu/btryiHsIIH9/KuyFAxf8mRd2QBAejqdz1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qAMIu/btryiHsIIH9/KuyFAxf8mRd2QBAejqdz1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqAMIu%2FbtryiHsIIH9%2FKuyFAxf8mRd2QBAejqdz1K%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;2000&quot; height=&quot;662&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제에서 알려준 쉘로 접속을 해보니, fd, fd.c, flag 파일이 존재하는 것을 확인할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fd는 SetUID가 걸려있는 실행파일이었고, fd.c는 fd 실행파일의 코드였으며, flag를 우리가 궁극적으로 읽고자 하는 플래그값이 되겠다.&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;2212&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O6JLJ/btryd7T9tXT/dG8E1PtBxZy2oTOaGzuhck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O6JLJ/btryd7T9tXT/dG8E1PtBxZy2oTOaGzuhck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O6JLJ/btryd7T9tXT/dG8E1PtBxZy2oTOaGzuhck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO6JLJ%2Fbtryd7T9tXT%2FdG8E1PtBxZy2oTOaGzuhck%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;2212&quot; height=&quot;212&quot; data-origin-width=&quot;2212&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flag를 그냥 읽으려 하면 권한이 없어 읽지 못하기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fd 실행파일을 통해 root 권한을 잠시 빌려서 flag 파일을 읽어야 할 것으로 보인다.&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;2136&quot; data-origin-height=&quot;794&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyJXC3/btrye4o94M1/aiMxXvUpDZQuadGJOGkdGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyJXC3/btrye4o94M1/aiMxXvUpDZQuadGJOGkdGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyJXC3/btrye4o94M1/aiMxXvUpDZQuadGJOGkdGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeyJXC3%2Fbtrye4o94M1%2FaiMxXvUpDZQuadGJOGkdGk%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;2136&quot; height=&quot;794&quot; data-origin-width=&quot;2136&quot; data-origin-height=&quot;794&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fd.c 코드를 확인해보니, fd 실행파일을 실행시킬 때 한 개의 인자를 필요로 하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 인자는 숫자로 0x1234와 동일한 값이어야지만이 read() 시 첫번째 인자로 0이 들어가서 standard input이 가능할 것으로 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 0x1234가 정수로 어떤 값인지만 알면 flag를 알아낼 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0x1234는 정수로 4660이기 때문에 fd를 실행 시 인자로 4660을 입력해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 4660만 입력해서는 안되고, 4660을 입력함으로써 read()가 standard input이 가능해진 상태이므로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값과의 비교대상이 &quot;LETMEWIN\n&quot; 이기 때문에 fd 실행 후 이어서 LETMEWIN을 입력해주어야 한다.&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;2162&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HqO8O/btryeunqOrT/lJTTQ7Fn2ym0RvDkUG8dJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HqO8O/btryeunqOrT/lJTTQ7Fn2ym0RvDkUG8dJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HqO8O/btryeunqOrT/lJTTQ7Fn2ym0RvDkUG8dJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHqO8O%2FbtryeunqOrT%2FlJTTQ7Fn2ym0RvDkUG8dJ0%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;2162&quot; height=&quot;148&quot; data-origin-width=&quot;2162&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 fd 실행파일을 실행해주면, flag 값을 읽고 출력해주게 되고 해당 플래그를 pwnable.kr에 입력해주면 된다.&lt;/p&gt;</description>
      <category>IT/Linux</category>
      <category>FD</category>
      <category>file descriptor</category>
      <category>flag</category>
      <category>Linux</category>
      <category>pwnable</category>
      <category>pwnable.kr</category>
      <category>READ</category>
      <category>리눅스</category>
      <category>파일서술자</category>
      <category>포너블</category>
      <author>GRACE_MJ</author>
      <guid isPermaLink="true">https://secure-key.tistory.com/57</guid>
      <comments>https://secure-key.tistory.com/57#entry57comment</comments>
      <pubDate>Sat, 2 Apr 2022 20:06:55 +0900</pubDate>
    </item>
    <item>
      <title>[DB] 맥북에 MySQL 설치 및 DB 생성하기</title>
      <link>https://secure-key.tistory.com/56</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Mac에 MySQL 서버 설치하기&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/downloads/mysql/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;dev.mysql.com/downloads/mysql/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1618235917311&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MySQL :: Download MySQL Community Server&quot; data-og-description=&quot;Select Operating System: Select Operating System&amp;hellip; Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris macOS FreeBSD Source Code Select OS Version: All Wind&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-source-url=&quot;https://dev.mysql.com/downloads/mysql/&quot; data-og-url=&quot;https://dev.mysql.com/downloads/mysql/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b5KlUu/hyJSnoQFeh/5mrpHvvLrxvwNDlw13FFKK/img.png?width=700&amp;amp;height=260&amp;amp;face=0_0_700_260&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/downloads/mysql/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.mysql.com/downloads/mysql/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b5KlUu/hyJSnoQFeh/5mrpHvvLrxvwNDlw13FFKK/img.png?width=700&amp;amp;height=260&amp;amp;face=0_0_700_260');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;MySQL :: Download MySQL Community Server&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Select Operating System: Select Operating System&amp;hellip; Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris macOS FreeBSD Source Code Select OS Version: All Wind&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;dev.mysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;위의 링크를 타고 들어가서 DMG Archive 버전으로 다운로드 받습니다.&lt;/p&gt;
&lt;p&gt;Download 버튼을 클릭하면 로그인하라는 멘트가 나오는데, 하단에 No thanks, just start my download 를 클릭하여 다운로드 받습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;설치 후 dmg 파일을 더블클릭하여 여느 Mac 소프트웨어를 다운받는 것과 마찬가지로 동일하게 설치를 진행해줍니다.&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;483&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NyvRW/btq2uasLP36/IODSqvtKzNTBP4C29aR9G1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NyvRW/btq2uasLP36/IODSqvtKzNTBP4C29aR9G1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NyvRW/btq2uasLP36/IODSqvtKzNTBP4C29aR9G1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNyvRW%2Fbtq2uasLP36%2FIODSqvtKzNTBP4C29aR9G1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;483&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Mac의 시스템 환경설정에 들어가면 MySQL이 있는데, Active한 상태, 즉 활성화되어 있는 상태이면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. MySQL 접속&lt;/h3&gt;
&lt;p&gt;Mac의 터미널로 MySQL에 접속할 것입니다. 저는 평소에 사용하던 iTerm을 사용하였습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1618238346628&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /usr/local/mysql/bin
./mysql -p&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;MySQL의 가장 베이스 디렉토리인 /usr/local/mysql 내에 bin 디렉토리에서 mysql 명령을 통해 실행시키면 됩니다.&lt;/p&gt;
&lt;p&gt;저의 경우, 초기 비밀번호는 저의 Mac 비밀번호였고, 그 뒤 Enter password라고 뜨는 문구에서 MySQL 비밀번호를 입력해주었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Database 생성&lt;/h3&gt;
&lt;p&gt;이제 데이터베이스를 생성해주었습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1618238597962&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE DATABASE [DB명];
show databases;&lt;/code&gt;&lt;/pre&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/GbWBr/btq2lCEAIKh/lIWTzgNo0wCi0DyHDgKqW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GbWBr/btq2lCEAIKh/lIWTzgNo0wCi0DyHDgKqW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GbWBr/btq2lCEAIKh/lIWTzgNo0wCi0DyHDgKqW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGbWBr%2Fbtq2lCEAIKh%2FlIWTzgNo0wCi0DyHDgKqW1%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;저는 fruit_brix라는 데이터베이스를 생성해주었고, 위와 같이 show databases; 명령어로 생성된 데이터베이스를 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1618238691415&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;use [DB명];&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;데이터베이스 내에서 테이블도 만들고 데이터도 추가할 것이기 때문에 위와 같이 사용할 데이터베이스를 선택해 주었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. Table 생성&lt;/h3&gt;
&lt;p&gt;생성한 데이터베이스 내에 테이블을 만들어주었습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1619282252487&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create table [테이블명] ( 
[컬럼명] [type],
[컬럼명] [type]
);&lt;/code&gt;&lt;/pre&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/EbBPB/btq3nTElhqZ/YtmYYCznBFwlfe9EUgPN50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EbBPB/btq3nTElhqZ/YtmYYCznBFwlfe9EUgPN50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EbBPB/btq3nTElhqZ/YtmYYCznBFwlfe9EUgPN50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEbBPB%2Fbtq3nTElhqZ%2FYtmYYCznBFwlfe9EUgPN50%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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1619282593658&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;show tables;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위의 명령을 통해 테이블이 잘 생성되었는지, 해당 데이터베이스 내에 있는 테이블들을 리스트로 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1619282408603&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;desc [테이블명];&lt;/code&gt;&lt;/pre&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/bOZdmv/btq3mcLUTcH/DJIoHACnQDfqgeh01vSMm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOZdmv/btq3mcLUTcH/DJIoHACnQDfqgeh01vSMm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOZdmv/btq3mcLUTcH/DJIoHACnQDfqgeh01vSMm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOZdmv%2Fbtq3mcLUTcH%2FDJIoHACnQDfqgeh01vSMm1%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;생성한 테이블은 위와 같이 desc 명령을 사용해서 전체적인 구조를 파악할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. Data 삽입&lt;/h3&gt;
&lt;pre id=&quot;code_1619282918179&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;insert into [테이블명] ([컬럼명], [컬럼명]) values ([데이터], [데이터]);&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1619282934492&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select * from [테이블명];&lt;/code&gt;&lt;/pre&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/up9EW/btq3otFosBo/dsnjvFfBvdKaSCcl0EeKL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/up9EW/btq3otFosBo/dsnjvFfBvdKaSCcl0EeKL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/up9EW/btq3otFosBo/dsnjvFfBvdKaSCcl0EeKL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fup9EW%2Fbtq3otFosBo%2FdsnjvFfBvdKaSCcl0EeKL0%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;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. Data 삭제&lt;/h3&gt;
&lt;pre id=&quot;code_1619283020773&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;delete from [테이블명] where [컬럼명]=[데이터];&lt;/code&gt;&lt;/pre&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/crN290/btq3oR68Gie/NnKOXodQKyNnywaR2tT5XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crN290/btq3oR68Gie/NnKOXodQKyNnywaR2tT5XK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crN290/btq3oR68Gie/NnKOXodQKyNnywaR2tT5XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrN290%2Fbtq3oR68Gie%2FNnKOXodQKyNnywaR2tT5XK%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;삭제는 위와 같이 delete 명령으로 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. Table 삭제&lt;/h3&gt;
&lt;pre id=&quot;code_1619282486461&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;drop table [테이블명];&lt;/code&gt;&lt;/pre&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/bskafI/btq3mOKuOTn/VpvKkf9t2KFgdpfFUae3WK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bskafI/btq3mOKuOTn/VpvKkf9t2KFgdpfFUae3WK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bskafI/btq3mOKuOTn/VpvKkf9t2KFgdpfFUae3WK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbskafI%2Fbtq3mOKuOTn%2FVpvKkf9t2KFgdpfFUae3WK%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;drop 명령을 통해 테이블을 삭제할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. Database 삭제&lt;/h3&gt;
&lt;pre id=&quot;code_1619282698598&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;drop database [DB명];&lt;/code&gt;&lt;/pre&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/qKbBY/btq3nUDdqDi/66OT2LjtiZBOh9PSm3E9sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qKbBY/btq3nUDdqDi/66OT2LjtiZBOh9PSm3E9sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qKbBY/btq3nUDdqDi/66OT2LjtiZBOh9PSm3E9sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqKbBY%2Fbtq3nUDdqDi%2F66OT2LjtiZBOh9PSm3E9sk%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;마찬가지로 drop 명령을 통해 데이터베이스도 삭제할 수 있습니다.&lt;/p&gt;</description>
      <category>IT/IoT</category>
      <category>Database</category>
      <category>db</category>
      <category>IOT</category>
      <category>iterm</category>
      <category>Mac</category>
      <category>MySQL</category>
      <category>mysql server</category>
      <category>데이터베이스</category>
      <category>맥북</category>
      <author>GRACE_MJ</author>
      <guid isPermaLink="true">https://secure-key.tistory.com/56</guid>
      <comments>https://secure-key.tistory.com/56#entry56comment</comments>
      <pubDate>Sun, 25 Apr 2021 01:51:30 +0900</pubDate>
    </item>
    <item>
      <title>[아두이노] 아두이노 프로 미니 - 컴퓨터 연결</title>
      <link>https://secure-key.tistory.com/55</link>
      <description>&lt;p&gt;소형 IoT 기기를 만들 때 사용하는 아두이노 프로 미니를 컴퓨터와 연결하는 과정이다.&lt;/p&gt;
&lt;p&gt;기기 구매 참고 사이트: &lt;a href=&quot;https://www.devicemart.co.kr/goods/view?no=1289321&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.devicemart.co.kr/goods/view?no=1289321&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1610351339318&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;아두이노 프로 미니 ATMEGA328P 3.3V/8M [SZH-EK066]&quot; data-og-description=&quot;아두이노 미니 버전으로 3.3V 시스템이며 8Mhz 부트로더가 동작하는 '호환보드' 입니다.&quot; data-og-host=&quot;www.devicemart.co.kr&quot; data-og-source-url=&quot;https://www.devicemart.co.kr/goods/view?no=1289321&quot; data-og-url=&quot;https://www.devicemart.co.kr/goods/view?no=1289321&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/JpXTP/hyIS6QM4xh/JsR8KA3OAYxZAYvLByZfCK/img.jpg?width=450&amp;amp;height=450&amp;amp;face=0_0_450_450,https://scrap.kakaocdn.net/dn/1ckM5/hyIS3s1tWB/IFs4pkohQOEsCPZSlpDYR1/img.jpg?width=450&amp;amp;height=450&amp;amp;face=0_0_450_450&quot;&gt;&lt;a href=&quot;https://www.devicemart.co.kr/goods/view?no=1289321&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.devicemart.co.kr/goods/view?no=1289321&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/JpXTP/hyIS6QM4xh/JsR8KA3OAYxZAYvLByZfCK/img.jpg?width=450&amp;amp;height=450&amp;amp;face=0_0_450_450,https://scrap.kakaocdn.net/dn/1ckM5/hyIS3s1tWB/IFs4pkohQOEsCPZSlpDYR1/img.jpg?width=450&amp;amp;height=450&amp;amp;face=0_0_450_450');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;아두이노 프로 미니 ATMEGA328P 3.3V/8M [SZH-EK066]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;아두이노 미니 버전으로 3.3V 시스템이며 8Mhz 부트로더가 동작하는 '호환보드' 입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.devicemart.co.kr&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/zpY2L/btqS3Igd0Gz/jZYQ0MDh5rx6LOXPhysdw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zpY2L/btqS3Igd0Gz/jZYQ0MDh5rx6LOXPhysdw0/img.png&quot; data-alt=&quot;아두이노 프로 미니 핀맵 (출처: Eduino)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zpY2L/btqS3Igd0Gz/jZYQ0MDh5rx6LOXPhysdw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzpY2L%2FbtqS3Igd0Gz%2FjZYQ0MDh5rx6LOXPhysdw0%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;아두이노 프로 미니 핀맵 (출처: Eduino)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아두이노 프로 미니의 스펙은 다음과 같다: (3.3V 기준)&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MCU: ATmega328&lt;/li&gt;
&lt;li&gt;동작 전압: 3.3V&lt;/li&gt;
&lt;li&gt;입력 전압: -3.35V ~ 12V&lt;/li&gt;
&lt;li&gt;Digital I/O 핀: 14개 (PWM 6개 포함)&lt;/li&gt;
&lt;li&gt;Analog 입력핀: 8개&lt;/li&gt;
&lt;li&gt;통신방식: UART / SPI / I2C 지원&lt;/li&gt;
&lt;li&gt;Memory: Flash memory 32KB (부트로더 2bk 사용) / SRAM 2KB / EEPROM 1KB&lt;/li&gt;
&lt;li&gt;Clock Speed: 8MHz&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;주의사항&lt;/span&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 style=&quot;color: #333333;&quot;&gt;정전압(3.3V)일 경우, VCC핀으로 전원 입력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;정전압이 아닌 경우, 레귤레이터가 있는 RAW 핀에 입력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;VCC, RAW 두 곳 동시에 전원 입력 시 보드 손상 초래&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아두이노 프로 미니의 경우 보드 상에 컴퓨터와 연결이 가능한 포트가 없기 때문에 USB to UART 모듈을 사용하여 코드를 업로드한다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;기기 구매 참고 사이트: &lt;a href=&quot;https://www.devicemart.co.kr/goods/view?no=1290042&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.devicemart.co.kr/goods/view?no=1290042&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1610351429238&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;FT232RL 아두이노 USB to UART 모듈 [SZH-EK072]&quot; data-og-description=&quot;FTDI FT232RL 칩셋 / Mini USB 포트 / 33 X 17mm&quot; data-og-host=&quot;www.devicemart.co.kr&quot; data-og-source-url=&quot;https://www.devicemart.co.kr/goods/view?no=1290042&quot; data-og-url=&quot;https://www.devicemart.co.kr/goods/view?no=1290042&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cgpcMD/hyIULxuMjD/KkZuvkPmZQB8RJWjwWVnRK/img.jpg?width=600&amp;amp;height=450&amp;amp;face=0_0_600_450&quot;&gt;&lt;a href=&quot;https://www.devicemart.co.kr/goods/view?no=1290042&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.devicemart.co.kr/goods/view?no=1290042&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cgpcMD/hyIULxuMjD/KkZuvkPmZQB8RJWjwWVnRK/img.jpg?width=600&amp;amp;height=450&amp;amp;face=0_0_600_450');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;FT232RL 아두이노 USB to UART 모듈 [SZH-EK072]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;FTDI FT232RL 칩셋 / Mini USB 포트 / 33 X 17mm&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.devicemart.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;해당 모듈은 그냥 PC에 연결할 경우 PC가 인식하지 못하기 때문에, FT232RL을 인식하기 위해서는 드라이버 다운로드가 필수이다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.ftdichip.com/Drivers/VCP.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://&lt;/span&gt;&lt;span&gt;www.ftdichip.com&lt;/span&gt;&lt;span&gt;/Drivers/&lt;/span&gt;&lt;span&gt;VCP.htm&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;위의 사이트에 들어가서 OS에 맞는 드라이버를 다운로드 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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/bUZzCQ/btqTfCFBVJO/EEczEYQHPi3EX8mwkLq1Ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUZzCQ/btqTfCFBVJO/EEczEYQHPi3EX8mwkLq1Ck/img.png&quot; data-alt=&quot;아두이노 프로 미니 - FTDI232 연결 예시 (출처: arduinoecia.com)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUZzCQ/btqTfCFBVJO/EEczEYQHPi3EX8mwkLq1Ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUZzCQ%2FbtqTfCFBVJO%2FEEczEYQHPi3EX8mwkLq1Ck%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;아두이노 프로 미니 - FTDI232 연결 예시 (출처: arduinoecia.com)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;준비가 완료 되었다면, 위의 그림과 같이 점퍼선 F-F를 통해 아두이노 프로 미니와 FTDI232를 연결한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;A7911DCC-47F3-42D6-8B60-7697BACBA3F9_1_105_c.jpeg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dm61cU/btqTkhudczn/SkHUlN5G8PKYvXZMA6jhuK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dm61cU/btqTkhudczn/SkHUlN5G8PKYvXZMA6jhuK/img.jpg&quot; data-alt=&quot;아두이노 프로 미니 - FTDI232 연결&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dm61cU/btqTkhudczn/SkHUlN5G8PKYvXZMA6jhuK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdm61cU%2FbtqTkhudczn%2FSkHUlN5G8PKYvXZMA6jhuK%2Fimg.jpg&quot; data-filename=&quot;A7911DCC-47F3-42D6-8B60-7697BACBA3F9_1_105_c.jpeg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&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;아두이노 프로 미니 - FTDI232 연결&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아두이노 소프트웨어를 켠 후,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;툴 &amp;gt; 보드 &amp;gt; Arduino Pro or Pro Mini&lt;/p&gt;
&lt;p&gt;툴 &amp;gt; 프로세서 &amp;gt; ATmega328P (3.3V, 8MHz)&lt;/p&gt;
&lt;p&gt;툴 &amp;gt; 포트 &amp;gt; [새로 생긴 포트 정보]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와 같이 설정을 해준 뒤,&lt;/p&gt;
&lt;p&gt;코드 업로드가 잘 되는지 확인하기 위해 아래의 코드를 업로드 하도록 하였다.&lt;/p&gt;
&lt;pre id=&quot;code_1610352177821&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void setup() {
  pinMode(LED_BUILTIN, OUTPUT);

}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(500);
  digitalWrite(LED_BUILTIN, LOW);
  delay(500);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;0.5초 간격으로 아두이노 프로 미니 내 LED가 켜졌다 꺼졌다를 반복하는 코드이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

            &lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
            &lt;/figure&gt;
        
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와 같이 0.5초마다 LED가 깜박인다면, 성공적으로 코드가 업로드 된 것이다&lt;/p&gt;</description>
      <category>IT/IoT</category>
      <category>arduino</category>
      <category>arduino pro mini</category>
      <category>FTDI232</category>
      <category>IOT</category>
      <category>사물인터넷</category>
      <category>아두이노</category>
      <category>아두이노 프로 미니</category>
      <author>GRACE_MJ</author>
      <guid isPermaLink="true">https://secure-key.tistory.com/55</guid>
      <comments>https://secure-key.tistory.com/55#entry55comment</comments>
      <pubDate>Mon, 11 Jan 2021 23:46:00 +0900</pubDate>
    </item>
  </channel>
</rss>