<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>용팔이 세상,</title>
    <link>https://dragon82.tistory.com/</link>
    <description>주로 내가하는 생각들, IT지식, 자격증 관련 이야기들을 다루고 있습니다.</description>
    <language>ko</language>
    <pubDate>Fri, 3 Jul 2026 19:20:22 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>dragon82</managingEditor>
    <image>
      <title>용팔이 세상,</title>
      <url>https://t1.daumcdn.net/cfile/tistory/2110123C58197DA71D</url>
      <link>https://dragon82.tistory.com</link>
    </image>
    <item>
      <title>첫 걸음, 실행, 행동하다</title>
      <link>https://dragon82.tistory.com/66</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;저는 예전에도 그랬고 지금도 여전히 생각만 하는 사람입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;주식이 이정도면 많이 빠졌으니 지금 투자하면 수익이 날것 같은데???&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이제는 지방 부동산이 한번쯤 오를것 같은데??&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;운동을 하면 좋을것 같은데??&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각만 하고 바라기만하고 그냥 그렇게 하루하루 똑같이 살아갑니다.&lt;br /&gt;정작 생각만 하던 것들을 실행을 했으면??&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;캡처.PNG&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mrz4s/btsKNAujtME/BKahLKcRp9X3bcR7zzMON0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mrz4s/btsKNAujtME/BKahLKcRp9X3bcR7zzMON0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mrz4s/btsKNAujtME/BKahLKcRp9X3bcR7zzMON0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmrz4s%2FbtsKNAujtME%2FBKahLKcRp9X3bcR7zzMON0%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;670&quot; height=&quot;293&quot; data-filename=&quot;캡처.PNG&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;293&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리나라 1위 기업 삼성전자가 4만원 후반까지 떨어졌지만 투자할 생각만하고 행동에 옮기지 않았기에 7퍼센트 가량의 수익은 상상속에서만 끝났습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행동에 옮기지 않음으로써 수익도 못 얻었지만 투자금을 잃을까 전전긍긍하는 불안감도 느끼지 않습니다.&lt;br /&gt;몇년동안이나 전 이렇게 생각만하고 바라기만하고 정작 첫걸음도 떼지 않고 있었습니다. 저는 언제 바뀔까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이상합니다.&lt;br /&gt;저만 그런게 아니라 주변에 많은 사람들이 행동하지는 않고 있습니다.&lt;br /&gt;다들 그런거라고 자위하고 그냥 안주한다면 제 삶도 나아지지 않을뿐더러 앞으로 남은 내 인생이 불쌍하게 여겨집니다.&lt;br /&gt;&lt;br /&gt;꾸준히 모은 용돈중 일부로 부동산 멤버쉽을 신청했습니다.&lt;br /&gt;3개월간 강의도 듣고 오프라인 모임도 참석하고 앞으로 가능성이 있는 아파트 단지 리스트도 만들어보고&lt;br /&gt;해당 단지에 와이프와 함께 임장도 가고..실제로 매수하기위한 자금계획을 처음부터 끝까지 세워보고...&lt;br /&gt;&lt;br /&gt;그 결과 이번에 서울에 등기를 하게 되었습니다.&lt;br /&gt;지방 실거주 1채 포함하면 2주택이 되었네요.&lt;br /&gt;&lt;br /&gt;앞으로 제 삶을 변화시키기 위한 첫 걸음을 떼어 보았습니다.&lt;br /&gt;생각으로 머물던 것을 실제로 실행해보고 처음부터 마지막까지 결과를 내어보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나아지고자 하는 생각은 살아가는데 있어서 많은 도움을 줍니다.&lt;br /&gt;다만 생각으로만 그친다면 시간이 지남에도 변화되지 않는 자신을 보면서 힘들어하겠죠.&lt;br /&gt;노출되는것이 중요합니다.&lt;br /&gt;삶을 변화시키기 위한 여러가지 생각들에 많이 노출되고&amp;nbsp;&lt;br /&gt;노출이 되다보면 결국 언젠가는 행동을 하기 마련입니다.&lt;br /&gt;저는 반드시 제 삶이 앞으로 나아질거라고 생각합니다.&lt;br /&gt;왜냐면 대부분은 생각하지 않고 실행하지 않기때문입니다.&lt;br /&gt;&lt;br /&gt;그렇기때문에 생각하고 실행하기 시작한 저의 삶은 앞으로 확연하게 나아질것이라 확신하고 있습니다.&lt;br /&gt;&lt;br /&gt;다음에는 첫 부동산 매수 실패 경험과 두번째 서울 부동산 매수 경험을 올려보겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>그냥 내 생각</category>
      <author>dragon82</author>
      <guid isPermaLink="true">https://dragon82.tistory.com/66</guid>
      <comments>https://dragon82.tistory.com/66#entry66comment</comments>
      <pubDate>Sun, 17 Nov 2024 23:34:42 +0900</pubDate>
    </item>
    <item>
      <title>2023년 2회/4회 위험물산업기사 필기/실기 합격수기</title>
      <link>https://dragon82.tistory.com/62</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;올초 1회차 산업안전기사 필기/실기를 동차합격한 이후&lt;br /&gt;산업안전기사와 시너지가 좋은 위험물산업기사를 준비하게 되었습니다.&lt;br /&gt;위험물에 대해서는 문외한이었지만 이번 위험물산업기사를 준비하면서&lt;br /&gt;위험물을 알아가고 화학식 반응식도 이해하고 외우면서 나름 꽤 재밌었던 준비였다고 생각합니다.&lt;br /&gt;재밌게 준비한 결과 위험물산업기사 필기는 2회차에 합격했고 사정상 2회에 바로 실기를 공부하지는 못했고&lt;br /&gt;4회차에 실기를 준비해서 아직 합격발표는 나지 않았지만 가채점 73점이라 합격이라고 생각하고 있습니다.&lt;br /&gt;합격사진은 12월 3일 합격발표나면 올리도록 하겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 필기부터 공부방법을 말씀드릴게요&lt;br /&gt;CBT만 활용해서 공부하시는분들도 계시지만 저는 어떤 자격증이라도 최소한 교재비 정도는 투자해야한다고 생각해서&lt;br /&gt;필기교재를 구입했습니다.&lt;br /&gt;다만 두꺼운건 거부감이 들어 얇은 ㄹㅆ교재를 구매했습니다.&lt;br /&gt;필기 공부의 핵심은 기본서 이론을 보고 과년도 기출을 들어가는것이 아닌 &lt;br /&gt;&quot;기본서 이론을 공부하지 않고 바로 과년도 기출 회독을 한다&quot; 입니다.&lt;br /&gt;물론 위험물산업기사의 기본서 이론이 두껍지는 않지만 기본서의 내용을 핵심요약한 부분이 과년도 기출입니다.&lt;br /&gt;핵심요약본인 과년도 기출을 반복해서 진행했음에도 불구하고 특정 문제유형이나 개념에 대해서 부족하다고 생각이들면&lt;br /&gt;그때 기본서 이론이든 유투브든 찾아서 해당 내용을 공부하는겁니다.&lt;br /&gt;기본서 이론을 공부한 다음 과년도 기출을 들어가는것보다 공부시간을 효율적으로 사용할 수 있습니다.&lt;br /&gt;과년도 기출은 7년정도 회독하는것이 무난합니다.&lt;br /&gt;과목이 3과목이라 문제수가 60문제 밖에 되지 않기에 부담이 별로 없어요&lt;br /&gt;다만 일반화학이라는 과목이 있는데 비전공자 분들은 좀 어렵게 느껴지실거에요&lt;br /&gt;저도 화학을 처음 접했기때문에 제일 어렵게 다가온 과목이었는데&lt;br /&gt;마찬가지로 시간이 약입니다.&lt;br /&gt;정복할 대상, 과목, 양이 딱 정해져있기에 한번 두번 세번 읽다보면 이해되거나? 외워지거나? 둘중에 하나입니다.&lt;br /&gt;정리를 해보면&lt;br /&gt;1. 이론은 공부하지 않는다.&lt;br /&gt;2. 과년도 기출 최소 7개년을 회독한다.&lt;br /&gt;3. CBT 사이트에서 본인이 공부한 7개년에 대한 랜덤모의고사를 평균 85~90점 이상이 나올때까지 푼다.&lt;br /&gt;4. 3번이 충족이 되면 합격입니다.&lt;br /&gt;저는 위 공부방법을 활용해 시험시간 10분도 안걸려서&amp;nbsp; 문제를 다풀고 나왔고 합격을 하였습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;위험물필기합격.jpg&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EplTb/btsASt7VjGx/hkoqkTMIfoZ15J7xn0NIl1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EplTb/btsASt7VjGx/hkoqkTMIfoZ15J7xn0NIl1/img.jpg&quot; data-alt=&quot;위험물산업기사 필기 합격!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EplTb/btsASt7VjGx/hkoqkTMIfoZ15J7xn0NIl1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEplTb%2FbtsASt7VjGx%2FhkoqkTMIfoZ15J7xn0NIl1%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;542&quot; height=&quot;422&quot; data-filename=&quot;위험물필기합격.jpg&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;422&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위험물산업기사 필기 합격!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실기는 필기와는 다르게 과년도 기출 회독전에 사전에 암기해야할 부분이 있습니다.&lt;br /&gt;대다수의 분들이 필수 암기 반응식 80개 또는 100개를 외우지만&amp;nbsp;&lt;br /&gt;저는 그건 너무 공부의욕도 안나고 어렵다고 생각합니다.&lt;br /&gt;반응식을 따로 외우고 기출을 들어가지 않으셔도 됩니다.&lt;br /&gt;사전에 암기해야할 부분은 반응식이 아닌 &quot;1~6류 위험물의 특징, 품명, 물질명, 화학식, 지정수량, 위험등급&quot;입니다.&lt;br /&gt;과년도 기출 들어가시기전에 2~3일정도 저 부분을 미리 암기하고 과년도 들어가면 정말정말 편합니다.&lt;br /&gt;당연히 반응식도 외우고 가면 좋지만 그러기에는 너무 시간이 많이 들기때문에&lt;br /&gt;최소한 위에서 말씀드린 부분은 사전에 공부하시고 과년도 기출 회독하시면 됩니다.&lt;br /&gt;당연히 2~3일 암기하셔도 바로바로 안떠오를수도 있는데 저 부분은 실기 시작부터 끝까지 계속 틈틈히 보셔야합니다.&lt;br /&gt;우선 사전에 윗부분을 암기하셨으면 과년도 기출 회독을 시작합니다.&lt;br /&gt;처음에는 7개년정도 시작하시는게 좋고 7개년을 마스터하셨으면 1개년씩 1개년씩 늘려가는게 좋습니다.&lt;br /&gt;과년도 회독시 예를들어 7개년을 한다고 하면&lt;br /&gt;2016 -&amp;gt; 2017 -&amp;gt; 2018 ~~~~~2022년 순으로 과년도 회독하시는게 좋습니다.&lt;br /&gt;많은 분들이 최신회차부터 내려가는게 좋다고 하지만&amp;nbsp;&lt;br /&gt;위험물산업기사는 2020년 이전에는 실기시험 문제수가 보통 12문제고 많아야 13~14문제라서 금방금방 할 수 있기에&lt;br /&gt;공부에 대한 부담이 많이 들지않기때문에 이전회차부터 시작해서 최신회차로 가는걸 추천합니다.&lt;br /&gt;저 같은 경우는 16년도부터 시작해서 2022년 4회차까지 회독을 계속 진행했습니다.&lt;br /&gt;2023년 1,2회 같은 경우는 실기시험 일주일전에 모의고사겸 풀기위해서 아껴두었습니다.&lt;br /&gt;자 그러면 반응식은 언제, 얼마만큼의 양을 외우냐?&lt;br /&gt;&quot;기출을 회독하면서 나오는 반응식을 정리를 해서 그 반응식만 외웁니다&quot;&lt;br /&gt;저는 7개년으로 시작해서 최종적으로는 15개년을 공부했습니다.&lt;br /&gt;08년부터 2022년까지 (2023년은 모의고사겸 풀었기에 회독개년수에서 제외했습니다.)&lt;br /&gt;15개년치 나오는 반응식 (중복제외)을 A4지에 다 적었습니다.&lt;br /&gt;그래봤자 80개 조금 넘는 수준입니다.&lt;br /&gt;A4 4장정도에 적은 다음에 출퇴근시나 그럴때 짬날때 틈틈히 봤습니다.&lt;br /&gt;이게 좋은점은 반응식도 기출문제기 때문에 반응식을 보는것도 기출공부의 일종이라&lt;br /&gt;기출 회독의 속도가 기하급수적으로 빨라집니다.&lt;br /&gt;&lt;br /&gt;정리해보겠습니다.&lt;br /&gt;1. 1~6류 위험물의 특징, 품명, 물질명, 화학식, 지정수량, 위험등급을 2~3일 암기한다.&lt;br /&gt;2. 과거년도부터 최신년도까지 7개년정도를 먼저 회독한다.&lt;br /&gt;3. 2번이 어느정도 익숙해졌으면 1개년씩 추가해서 자기가 감당가능한 개년까지 회독을 한다.&lt;br /&gt;4. 회독하면서 나오는 반응식은 중복을 제외하고 따로 정리해서 출력해서 틈틈히 암기한다.&lt;br /&gt;5. 보면 바로 답나올정도로 기출 회독을 한다.&lt;br /&gt;6. 시험 일주일 또는 삼사일전에 가장 최신회차 2회차 정도 모의고사 친다.&lt;br /&gt;&lt;br /&gt;실기공부방법은 이렇게 마치도록 하겠습니다.&lt;br /&gt;사실 기사 자격증들의 중요한점은 시험장 가서 긴장하지 않는것입니다.&lt;br /&gt;긴장하지 않는다는것은 실수하지 않는다는것입니다.&lt;br /&gt;이번 2023년 4회차같은 경우 위험물산업기사 실기가 신출이 굉장히 많이 나왔는데도&lt;br /&gt;결국 기존 기출 공부를 잘했다면 신출을 다 버리더라도 합격점수가 나옵니다.&lt;br /&gt;근데 신출을 다 틀려도 기존기출에서 실수를 하면 합격을 할 수가 없습니다.&lt;br /&gt;그래서 시험 준비하시는분들은 시험장가셔서 긴장하지 마시고&amp;nbsp;&lt;br /&gt;실수를 최대한 하지않는다는 마음으로 잘 보고 오시면 좋을것 같습니다.&lt;br /&gt;다들 준비하시는 시험 합격하시길 기원하겠습니다.&lt;br /&gt;행복하세요~!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20240207_105742129.jpg&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxjAeb/btsEvyc52Sx/DRHdyZPglVhYIlWvZOeirk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxjAeb/btsEvyc52Sx/DRHdyZPglVhYIlWvZOeirk/img.jpg&quot; data-alt=&quot;위험물기사 실기 합격 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxjAeb/btsEvyc52Sx/DRHdyZPglVhYIlWvZOeirk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxjAeb%2FbtsEvyc52Sx%2FDRHdyZPglVhYIlWvZOeirk%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;501&quot; height=&quot;891&quot; data-filename=&quot;KakaoTalk_20240207_105742129.jpg&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위험물기사 실기 합격 사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>자격증 이야기 :o/위험물산업기사</category>
      <author>dragon82</author>
      <guid isPermaLink="true">https://dragon82.tistory.com/62</guid>
      <comments>https://dragon82.tistory.com/62#entry62comment</comments>
      <pubDate>Fri, 1 Dec 2023 23:13:44 +0900</pubDate>
    </item>
    <item>
      <title>2023년 1회 산업안전기사 필기/ 실기 합격수기</title>
      <link>https://dragon82.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;회사에서 안점담당을 맡게되어 업무를 진행하다보니 산업안전기사의 필요성을 느껴&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;올 1회차에 산업안전기사 필기/실기를 응시하게 되었고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;필기는 합격 , 실기는 필답형+작업형 합쳐서 가채점이 78점 가량되어 실수가 조금 있다하더라도&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;무난하게 합격할 것 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;007&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;제가 했던 필기공부방법 말씀드릴게요&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;산업안전기사 하면서 이론 공부하기에는 너무 시간도 오래걸리고 방향성에 맞지 않습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;과년도 기출책을 구매하시든 CBT를 통해서 바로 기출을 푸시든 2가지중에 한가지 방법으로&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;우선 5개년도 이상을 한번 쭉 풀어봅니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;당연히 많이 틀리고 머리속에 남는것도 별로 없을거에요&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다만 학교다닐때 도덕문제처럼 무조건 맞출수 있는 문제들이 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그런것들은 오답정리시 과감하게 재껴주세요.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;과년도 5개년 한번 풀었다면 오답을 따로 정리해주세요&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오답정리에 시간이 많이 소요됩니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오답정리가 5개년이 끝났다면 그 오답만 계속해서 봅니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저는 시험 3일전까지 오답만 봤던것 같아요&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그담 시험 3일전부터는 다시 과년도 기출을 보시는데 CBT를 통해서&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5개년이면 5개년, 7개년이면 7개년 이렇게 범위를 정해서 랜덤으로 문제가 나오도록 해서 풀어봅니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저는 이 단계에서 평균 90점정도 점수가 계속 나왔던것 같습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇게 계속 시험날까지 과년도 늘려가면서 저는 최종 7개년정도를 봤습니다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이론은 공부하지 않는다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;과년도는 5개년 이상&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오답 정리가 핵심이며 시험 3일전까지 오답정리본만 본다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시험 3일전부터는 CBT의 랜덤모의고사를 계속 풀어본다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위 방법으로 평균 74점대로 필기시험을 합격하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20230430_134534538.png&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;1346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c15AJO/btsddkfglKg/kwAkxOPfFEJPoMf7YTUY8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c15AJO/btsddkfglKg/kwAkxOPfFEJPoMf7YTUY8K/img.png&quot; data-alt=&quot;산업안전기사 필기 합격사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c15AJO/btsddkfglKg/kwAkxOPfFEJPoMf7YTUY8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc15AJO%2FbtsddkfglKg%2FkwAkxOPfFEJPoMf7YTUY8K%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;480&quot; height=&quot;616&quot; data-filename=&quot;KakaoTalk_20230430_134534538.png&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;1346&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;산업안전기사 필기 합격사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여기서부터는 실기공부 방법입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실기는 크게 필답형 , 작업형 2가지로 나뉘는데 필답시험을 치루는 날까지는 필답형만 공부하시면 됩니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;작업형도 양이 조금 있지만 이번에 시험을 쳐보니 추세가 작업형에 필답문제가 절반이상 출제되는 추세라서&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;필답형만 제대로 공부하면 합격에는 무리가 없다고 생각해서 필답에 무조건 집중을 하셔야 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저는 12개년이 있는 실기 과년도책을 구매를 했고 1회독때는 12년치를 하루에 1개년씩 외웠습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간 투자는 출퇴근시 각30분씩 , 그리고 주 3~4일정도는 퇴근후 1~2시간정도 공부를 따로 했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1회독때는 계산문제는 크게 신경안하고 풀었던것 같아요&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1회독을 마치고는 바로 2회독 진행하지는 않았고 한글파일에 12개년치를 중복제외하고 쭉 보기좋게 정리했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고 2회독때부터는 그 정리본을 가지고 계속 회독을 했고 나중에는 회독이 의미가 없을 정도로&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;모든 문제가 문제만 보면 바로 답이 튀어나올정도가 됐어요&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고 계산문제만 따로 푼적이 있었는데 하루 4시간정도 시간잡고 계산문제 전체를 다 풀었는데&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정말정말 계산문제는 쉽습니다. 거의 보너스라고 보시면 되요&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇게 필답을 잘 공부를 하신후에 모두CBT라는 어플의 랜덤모의고사 기능을 통해&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지속적으로 랜덤한 문제들을 계속 풀고 풀고 또 풀었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇게 공부하고 4월 23일 필답형 시험을 치고 가채점한 결과 55점 만점에 43점정도 득점을 했어요&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;필답을 치고나서 밤부터 작업형 공부를 시작했는데&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;제가 산 과년도책에 206문제 작업형 문제가 뒤에 따로 있어서 그것만 공부했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사실 매일 공부한것도 아니고 3일정도 공부했는데 206문제 2번정도 회독했어요&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고 4월 29일 작업형 시험을 치뤘는데 가채점결과 45점 만점에 35점 정도가 나와서&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;필답 + 작업형 합쳐서 78점가량 받아 합격은 확실해보입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실기 공부 요약은 아래와 같습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실기 과년도 책을 구매하고 12개년 1회독을 한다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2회독을 바로 하지않고 한글파일에 12개년을 보기좋게 잘 정리한다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정리본을 가지고 무한 회독한다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;모두 CBT의 랜덤모의고사 기능으로 랜덤으로 나오는 문제를 계속 푼다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;작업형은 필답형 끝나고 과년도책에 따로 수록되어 있는 것을 계속 본다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;작업형에 필답형 문제가 절반이상 출제되었기에 필답을 꼼꼼히 한다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 저는 다음으로 위험물산업기사를 공부할 예정입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여러분들도 제가 했던 방법대로 공부하시면 산업안전기사는 크게 어려운 자격증이 아니니만큼 수월하게 취득하실 수 있을거에요&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;6월 9일 합격발표 나면 합격사진은 추후 인증하겠습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그럼 위험물산업기사에서 또 봬요 :D&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20230619_231524548.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cISMZQ/btskDgaASuM/QV1ZE1hYfhrsxaks0XxrY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cISMZQ/btskDgaASuM/QV1ZE1hYfhrsxaks0XxrY1/img.png&quot; data-alt=&quot;산업안전기사 실기 합격사진 첨부합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cISMZQ/btskDgaASuM/QV1ZE1hYfhrsxaks0XxrY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcISMZQ%2FbtskDgaASuM%2FQV1ZE1hYfhrsxaks0XxrY1%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;480&quot; height=&quot;2640&quot; data-filename=&quot;KakaoTalk_20230619_231524548.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;산업안전기사 실기 합격사진 첨부합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>자격증 이야기 :o/산업안전기사</category>
      <author>dragon82</author>
      <guid isPermaLink="true">https://dragon82.tistory.com/61</guid>
      <comments>https://dragon82.tistory.com/61#entry61comment</comments>
      <pubDate>Mon, 1 May 2023 09:50:05 +0900</pubDate>
    </item>
    <item>
      <title>2022년 2회 전기기사 실기 최종 합격수기</title>
      <link>https://dragon82.tistory.com/59</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;IT에서 타 직종으로 이직을 한 후 벌써 4년 가까이 흘렀습니다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;이직을 하고 근무를 하면서 미래를 봤을때 전기기사 자격증이 꼭 필요했습니다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;다만 전기기사 자격증이 기사 자격증중에 가장 어렵다는 평이 많아&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;단순히 그냥 해볼까? 라는 마음으로 시작하기는 참 어려웠습니다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;그런 걱정과 고민을 넘어서 저는 작년초에 전기기사 필기시험 준비를 시작했습니다&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;전기기사 필기는 아래와 같이 5과목으로 구성되어 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;1. 회로이론 및 제어공학&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;2. 전기자기학&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;3. 전력공학&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;4. 전기기기&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;5. 전기설비기술기준 및 한국전기설비규정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20220801_100917166.jpg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;670&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XogAv/btrIH7IqIJJ/xyuosxkavFbmNvOCaNnKBk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XogAv/btrIH7IqIJJ/xyuosxkavFbmNvOCaNnKBk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XogAv/btrIH7IqIJJ/xyuosxkavFbmNvOCaNnKBk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXogAv%2FbtrIH7IqIJJ%2FxyuosxkavFbmNvOCaNnKBk%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;563&quot; height=&quot;262&quot; data-filename=&quot;KakaoTalk_20220801_100917166.jpg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;670&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;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전기기사 필기 첫 공부과목인 회로이론책의 첫장...첫장입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;처음보는 기호들이 나오고 수학공식이 나오는데 처음부터 자신감을 많이 잃었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하지만 이미 시작했고 주변에도 많이 알려놓은 상태라 그만둘수가 없었습니다.&lt;/span&gt;&lt;/blockquote&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공부 하면서 정말 괴로웠습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;많은 공식과 어려운 이론들을 강의로 접하고 복습하고 필기하고 다시 복습하고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇게 5과목 완강을 하고 부족한건 몇번씩 더 보고나니 2달반이 지나있었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;필기 시험이 1달앞으로 다가온 상태라 과년도 기출책을 구매해서 보기 시작했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;근 3달을 이론공부에 매달렸음에도 불구하고 1회차에 100문제인 기출문제중 제 실력으로 풀 수 있는건&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;고작 10문제 내외였습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저만 이런건지 다른사람들도 이런건지 제가 느린건지 부족한건지 정말 고민이 많았던 시기네요.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그냥 &quot;모두다 그렇다, 원래 이렇다, 이게 정상이다&quot; 이렇게 생각하기로 했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고 기출 과년도를 천천히 풀기 시작했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1회가 100문제였는데 이 100문제를 풀고 문풀 강의를 보고 오답을 정리하는 공부방법을 선택했고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 공부방법대로하니 하루에 1회차 정도가 제 한계였습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇게 1회차 1회차씩 진도를 나갔고 결국 7개년 정도 풀었을때 드디어 평균 60점이 넘었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;100문제중 60문제 이상을 맞춘거죠&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정말 보람있고 기뻣습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그 이후 100문제중 75~85문제 이상을 맞추는걸 목표로 하고 계속 풀었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;최종적으로 7개년(총 22회차)을 4회독했고 대부분 회차는 75~85점 이상이 나와서&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정말 어려운 회차가 아니라면 합격할 수 있겠다라는 생각을 하고 시험장으로 갔습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시험은 회로이론과 제어공학 과목을 제외하면 크게 어려운 과목은 없었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시험을 무사히 치르고 집에와서 가채점을 하니 회로이론 및 제어공학이 딱 과락을 면한 40점이었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시험장에서 답안 체크도 몇번 확인했고 40점중에서 크게 논란있는 문제가 없었기때문에&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;합격을 확신하였고 점심부터 숙성회와 맥주를 시켜 와이프와 장모님의 축하속에 맛있는 점심을 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20220801_103138627.jpg&quot; data-origin-width=&quot;1079&quot; data-origin-height=&quot;1230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5hPGw/btrIH6CLWKA/GJNiZ6kujxi8qkkIs5duE0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5hPGw/btrIH6CLWKA/GJNiZ6kujxi8qkkIs5duE0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5hPGw/btrIH6CLWKA/GJNiZ6kujxi8qkkIs5duE0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5hPGw%2FbtrIH6CLWKA%2FGJNiZ6kujxi8qkkIs5duE0%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;612&quot; height=&quot;698&quot; data-filename=&quot;KakaoTalk_20220801_103138627.jpg&quot; data-origin-width=&quot;1079&quot; data-origin-height=&quot;1230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;필기 최종 합격&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;가채점대로 회로이론과 제어공학은 딱 과락을 면한 40점을 받았습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;필기를 합격한 이후 첫 실기시험은 회사일이 바쁜 관계로 응시하지 못했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그래서 그 해 마지막 시험이었던 3회차 실기시험을 접수하고 공부를 시작했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공부방법은 실기이론 - 실기과년도 문제풀이 강의보면서 문제 유형체크 - 혼자 실기 과년도 20년치 풀어보기&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위와 같은 방법으로 실기 공부를 시작했고 역시 마찬가지로 처음 문제 유형 익히는것과 오답노트 만드는데 시간이 많이 걸렸습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다만 이렇게 처음 시간들여놓으면 이후 2회독 3회독때는 정말 수월하게 공부를 할 수 있기때문에 처음이 힘들더라도&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저는 위와 같은 방법으로 공부하였습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두달동안 20개년 과년도 기출을 총 5회독을 하고 시험장에 들어갔습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정말 합격할 자신감이 있었기 때문에 크게 긴장을 하지 않았지만&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시험 시작전 파본검사때 문제들을 확인하면서 완전히 달라졌습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;처음보는 문제들이 굉장히 많았고 그 문제들이 굉장히 어려워보였습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그때부터 굉장히 긴장되고 떨렸지만 침착하게 문제들을 풀었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하지만 가채점결과 50점초반으로 합격을 하지 못했고 실제 결과도 마찬가지였습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음시험은 22년 5월달이라 7개월 정도 후였고 그때문에 모든 계획히 7개월이 밀려서&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;굉장히 심적으로 힘들었습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;22년 첫시험은 5월 7일에 치뤄졌고 그 시험에 무조건 합격하기 위해 굉장히 많은 시간 공부에 투자했고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새로 바뀐 법령인 KEC도 굉장히 많은 부분들 공부하였습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;내가 합격 못하면 이건 말이 안되는거라고 생각하면서 시험을 치르고 나왔습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;치르고 나오면서 무조건 합격이라고 생각했지만&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;집에와서 가채점을 하면서 굉장히 실수를 많이했고&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;한문제에 당락이 결정되는 상황이 되었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시험 결과 발표까지 한달이상이 남았었고 그 한달이라는 시간동안 많은 커뮤니티를 오가며&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;합격일지 불합격일지 확인하고 고민하였습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;합격 발표일 9시 정각에 큐넷에 접속해서 결과를 확인했는데&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20220801_104947337.jpg&quot; data-origin-width=&quot;1064&quot; data-origin-height=&quot;1318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drXqXt/btrIBT5Nqqa/0KbpyBFfvKEk6HNW756RV0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drXqXt/btrIBT5Nqqa/0KbpyBFfvKEk6HNW756RV0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drXqXt/btrIBT5Nqqa/0KbpyBFfvKEk6HNW756RV0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrXqXt%2FbtrIBT5Nqqa%2F0KbpyBFfvKEk6HNW756RV0%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;611&quot; height=&quot;757&quot; data-filename=&quot;KakaoTalk_20220801_104947337.jpg&quot; data-origin-width=&quot;1064&quot; data-origin-height=&quot;1318&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;결과는 57점으로 불합격...&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;부분점수를 하나도 받지 못했다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이때 정말 나도 힘들었지만 와이프도 고생을 많이 했습니다..&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저당시 갓 7개월정도된 딸의 육아를 많이 도와주지 못했기에&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;와이프가 고생을 많이 했고 와이프도 결과에 실망을 많이 했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저도 저 자신에게 실망을 많이 했고 힘들었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전기기사가 뭐라고 작년부터 나를 이렇게 힘들게 할까?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;때려치고 싶지는 않았지만 정말 빨리 합격하고 치우고 싶었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다행히 한달 조금더 지나면 2회 전기기사 실기시험이 있었기에&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;딱 한달정도만 더 고생해보자 라는 마음으로 2회 실기시험을 준비하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이때는 공부방법을 바꿨습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 전기기사 실기 과년도 34개년 기출&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 전기산업기사 최근 6개년 기출 + 3회이상 출제되었던 기출&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. 새로 개정된 KEC 이론 및 예상문제&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위 범위를 한달동안 죽어라 반복했고&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2022년 7월 24일 치뤄진 2회 전기기사 실기시험 당일...&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오전 5시에 일어나서 샤워를하고 초코바 4개와 공부자료들을 챙겨서 독서실로 향했고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;독서실에서 기사가 아닌 산업기사 핵심문제들과 KEC 예상문제를 훑었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;7시 30분에 독서실에서 나와 실기시험장인 충남대로 향했고 가서 9시전까지 다시 이론을 훑었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;9시가 지나서 설명을 듣고 파본검사를 진행했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;초반부의 문제들은 신출이었고 시퀀스가 많이 나와 굉장히 당황했지만&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;뒷부분의 문제들은 대부분 익숙한 문제들이라 마음이 많이 안정이 되었고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실제 시험 시작인 9시 30분이되자마자 우선 뒷부분부터 보기 시작했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;제일 먼저 한건 확실히 풀수 있는 문제들의 점수가 총 합격점수인 60점이 넘는지 확인했고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;뒷부분부터 체크하니 확실히 풀수 있는 문제의 배점이 70점이 넘었고 때문에 차분히 문제를 풀 수 있었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지금은 가채점 후 결과발표를 기다리고 있으며 약 한달간 결과를 기다려야합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하지만 이번에는 가채점이 70점이 넘기때문에 합격이 확실시 되는 상황이라 마음이 좀 편합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이제 앞으로 전기공사기사를 공부해야할지 아니면 전기공사도면 공부를 지금부터 시작해야할지&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아니면 산업안전기사나 소방쌍기사를 따야할지 확실히 정하지는 않았지만&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;뭐가 됐든 드디어 전기기사를 땃다는 기쁨이 아직은 좀 큰거 같습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지금 전기기사 공부하시는 많은 수험생 분들이 계시겠죠&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전기기사는 어렵지만 포기하지 않고 꾸준히 치면 합격하는 시험입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시간이 지나감에 대해서 후회하지는 않지만 해야할 일을 하지 못하고 지나가버린 시간에 대해서는&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;굉장한 후회가 드는게 사실입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그런 후회를 하지 않도록 하루하루 최선을 다해서 기사 공부를 해나가길 응원하겠습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;9월 2일 전기기사 최종 합격 후 사진을 업데이트 하겠습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다들 감사합니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;전기기사실기스샷.png&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;1170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x7Rdt/btrLg0hvW15/0L4kLhv0BiEZkLWmk2k62K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x7Rdt/btrLg0hvW15/0L4kLhv0BiEZkLWmk2k62K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x7Rdt/btrLg0hvW15/0L4kLhv0BiEZkLWmk2k62K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx7Rdt%2FbtrLg0hvW15%2F0L4kLhv0BiEZkLWmk2k62K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;686&quot; data-filename=&quot;전기기사실기스샷.png&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;1170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전기기사 실기 합격하였습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;합격사진 업로드합니다.&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>자격증 이야기 :o/전기기사</category>
      <category>전기기사</category>
      <category>전기기사 실기</category>
      <category>전기기사 최종합격</category>
      <category>전기기사 필기</category>
      <author>dragon82</author>
      <guid isPermaLink="true">https://dragon82.tistory.com/59</guid>
      <comments>https://dragon82.tistory.com/59#entry59comment</comments>
      <pubDate>Mon, 25 Jul 2022 10:00:20 +0900</pubDate>
    </item>
    <item>
      <title>nvidia-docker 컨테이너에서 사용중인 Gpu 제거하기</title>
      <link>https://dragon82.tistory.com/53</link>
      <description>&lt;p style=&quot;FLOAT: none; TEXT-ALIGN: center; CLEAR: none&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 14pt;&quot;&gt;안녕하세요 :D&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 14pt;&quot;&gt;
&lt;/span&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 14pt;&quot;&gt;오늘은 지구에서 가장 핫한 IT키워드중 하나인 Docker를&amp;nbsp;주제삼아 포스팅 하려고&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 14pt;&quot;&gt;합니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;요즘 Docker로&amp;nbsp;개발환경을 구성하는 개발회사들이 굉장히 많아졌고&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;저희팀 또한 모든&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;개발환경이 Docker로&amp;nbsp;구성되어 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;즉 각각의 Docker Container에 서비스에 맞는 개발환경이 구성되어 있는거죠.&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 14pt;&quot;&gt;
&lt;/span&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 14pt;&quot;&gt;때문에 본의 아니게 Docker 삽질을 굉장히 많이 했습니다...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 14pt;&quot;&gt;IT의 매력중 하나는 삽질이니까 괜찮아요...하하&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Container는 Host와 매핑된 정보를 가지고 있습니다. 때문에 기동시에는&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;이 정보를 가지고 있는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;파일을 참조하게 됩니다.&amp;nbsp; 그렇다면&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;질문: GPU 4개를 사용중인 Docker Container는 GPU를 1개 제거한다면&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;기동이 될까요 안될까요?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;정답은&amp;nbsp;&lt;u&gt;&lt;b&gt;&quot;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;설정파일을 수정하지 않는 이상&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;기동이&lt;/span&gt; 안된다&lt;/span&gt;&quot;&lt;/b&gt;입니다.&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;테스트를 하기위해 4개중 1개의 GPU를 제거하고 Container를 기동했을때&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&quot;linux runtime spec devices: error gathering device information while adding&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;custom device /dev/nvidia3&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;이라는 에러메시지를 확인할 수 있었고 GPU를 제거하면서 /dev/nvidia3&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;디바이스에 대한 정보를&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;수집할 수 없기때문에 에러가 나는것으로 보여집니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;그렇다면 정상적으로 Container를 기동하기 위해서는 어떻게 해야&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;할까요?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;저는 우선 Container의 정보를 확인하기 위해 docker inspect &quot;컨테이너명&quot;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;이라는 명령어를 실행했습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;실행결과 JSON형식으로 Container의 정보가&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;쭉 나오는데 첫째로는 Container의 id를 확인했고 그 다음으로는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;아래와 같이&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;호스트에 매핑된 디바이스의 정보를 확인하였습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;FONT-SIZE: 11px; FONT-FAMILY: Consolas, '맑은고딕', monospace; WHITE-SPACE: pre; FONT-WEIGHT: normal; COLOR: #d4d4d4; LINE-HEIGHT: 25px; BACKGROUND-COLOR: #1e1e1e&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;PathOnHost&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;/dev/nvidia0&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;PathInContainer&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;/dev/nvidia0&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;CgroupPermissions&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;rwm&quot;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;PathOnHost&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;/dev/nvidia1&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;PathInContainer&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;/dev/nvidia1&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;CgroupPermissions&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;rwm&quot;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;PathOnHost&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;/dev/nvidia2&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;PathInContainer&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;/dev/nvidia2&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;CgroupPermissions&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;rwm&quot;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;PathOnHost&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;/dev/nvidia3&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;PathInContainer&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;/dev/nvidia3&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;CgroupPermissions&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 12pt;&quot;&gt;&quot;rwm&quot;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;!-- 중간 광고 삽입 --&gt;
&lt;br /&gt;
&lt;div id=&quot;abc&quot;&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;보이시나요? 에러메시지에서 나온&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 14pt;&quot;&gt;&quot;/dev/nvidia3&quot; &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;디바이스가 보입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 14pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;GPU 4개가 nvidia0 ~ 3 번으로 네이밍되서 존재하는거 같네요.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;GPU는 4개에서 3개가 되었기때문에 더이상&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 18.6667px;&quot;&gt;&quot;/dev/nvidia3&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이라는&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;디바이스는 존재하지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;따라서 Container에서 저&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(206, 145, 120); font-size: 18.6667px;&quot;&gt;&quot;/dev/nvidia3&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;이라는&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;디바이스에 대한 모든걸 지우면 Container를 기동할 수 있지&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;않을까 라는 생각을&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;했고,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;시도해보기 위해 Container id에 해당하는 폴더로 이동하였습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;아래의 그림에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;생성된 Container들에 대한 폴더가 Container id 형식으로&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;되어 있는걸 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div style=&quot;FONT-SIZE: 11px; FONT-FAMILY: Consolas, '맑은고딕', monospace; WHITE-SPACE: pre; FONT-WEIGHT: normal; COLOR: #d4d4d4; LINE-HEIGHT: 25px; BACKGROUND-COLOR: #1e1e1e&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;root@tensorflow01:&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;lib&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;containers&lt;/span&gt;&lt;span style=&quot;color: rgb(96, 139, 78); font-size: 12pt;&quot;&gt;# ls&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(181, 206, 168); font-size: 12pt;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;c7389693206f3593f77faebb8d1215ad9e06ee75b6a6517f84117c95c971e7c &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(181, 206, 168); font-size: 12pt;&quot;&gt;92&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;ec8766bc24a033e36a119c03357b48dbba4ca83b9eea29772b84463d81822e &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;d6a993a2acefd47c90c6ccdf0f8b312f1bf4d47fcfb95c524d554f0edd00bd27 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(181, 206, 168); font-size: 12pt;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;f69ad48485ffc78778dda9eb148c82b765bf3b4f2b7dd7f901c446030a2b267 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(181, 206, 168); font-size: 12pt;&quot;&gt;95&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;ca02b1ebb1d268f0e46a0edad37573a3c46761a4437c5cb925c5f639b99108 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;fd2523d96b4b7e05ddd5e6aef8dc3631a3e57f2a92b65754483f562e8e28a00e&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(181, 206, 168); font-size: 12pt;&quot;&gt;36&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;a6486dca688e4318aa4024a4b69c65a3fbfb2e474603480cd9fb04225d9360 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;aeee6be051b9d03b02a75f26e26b9f7857addbdb86450d72f6af29c5db077471&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(181, 206, 168); font-size: 12pt;&quot;&gt;43435870&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;ccd8c5013de396997d811d2e1ed6c0c6b270b87102389658e5040412 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;c684858e1fff035ea27632065aa15c4ccd159a08a8120c41f0e508395e87385c&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;실행불가였던 Container에 해당하는 폴더로 이동 후 내부에 존재하는 파일의&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;리스트를 확인해봅니다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;FONT-SIZE: 11px; FONT-FAMILY: Consolas, '맑은고딕', monospace; WHITE-SPACE: pre; FONT-WEIGHT: normal; COLOR: #d4d4d4; LINE-HEIGHT: 25px; BACKGROUND-COLOR: #1e1e1e&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;bfb2e474603480cd9fb04225d9360&lt;/span&gt;&lt;span style=&quot;color: rgb(96, 139, 78); font-size: 12pt;&quot;&gt;# ls&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;COLOR: #608b4e&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(181, 206, 168); font-size: 12pt;&quot;&gt;36&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;a6486dca688e4318aa4024a4b69c65a3fbfb2e474603480cd9fb04225d9360&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;json.log&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;checkpoints&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;config.v2.json&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;hostconfig.json&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;hostname&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;hosts&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;resolv.conf&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;resolv.conf.hash&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(212, 212, 212); font-size: 12pt;&quot;&gt;shm&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;여기서 hostconfing.json이라는 파일이 보이실텐데요. 바로 이 파일이 호스트와&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;컨테이너간의 매핑정보를 가지고&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;따라서 이 파일내에 &quot;/dev/nvidia3&quot; 디바이스의 정보만 삭제한다면 Container는&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;기동이 가능할꺼 같네요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;FONT-SIZE: 11px; FONT-FAMILY: Consolas, '맑은고딕', monospace; WHITE-SPACE: pre; FONT-WEIGHT: normal; COLOR: #d4d4d4; LINE-HEIGHT: 25px; BACKGROUND-COLOR: #1e1e1e&quot;&gt;&lt;div&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;Devices&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt; :[{&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathOnHost&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidiactl&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathInContainer&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidiactl&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;CgroupPermissions&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;rwm&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;},&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathOnHost&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia-uvm&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathInContainer&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia-uvm&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;CgroupPermissions&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;rwm&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;},&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathOnHost&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia-uvm-tools&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;Path InContainer&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia-uvm-tools&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;CgroupPermissions&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;rwm&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;},&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathOnHost&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia0&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathInContainer&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia0&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;CgroupPermissions&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;rwm&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;},&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathOnHost&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia1&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathInContainer&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia1&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;CgroupPermissions &quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;rwm&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;},&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathOnHost&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia2&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathInContainer&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia2&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;CgroupPermissions&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;rwm&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathOnHost&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia3&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;PathInContainer&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;/dev/nvidia3&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;CgroupPermissions&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;COLOR: #ce9178&quot;&gt;&quot;rwm&quot;&lt;/span&gt;&lt;span style=&quot;COLOR: #d4d4d4&quot;&gt;}],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&quot;Devices&quot; 라는 key의 Value들이 매핑된 디바이스의 정보인데요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&quot;/dev/nvidia3&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;에 해당하는 Value만 삭제한 후&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;hostconfig.json 파일을 저장하신 뒤 Container를&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&amp;nbsp;기동&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;하시면 Container가 잘 실행이 되는걸 확인하실 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;리소스 재분배 혹은 기타 다른 이유로 인해 GPU를 제거하는 경우가 그렇게 많지는&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;않으실테지만 만약 그런 설계가&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;필요하신 경우 이렇게 매핑된 디바이스의 정보를&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;삭제함으로써 기존의 Container를 사용하실 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;GPU를 새로 추가할때는 자동으로 config에 추가되는거 같은데, 제거할때는&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;그렇게 안되는거 같아요.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;이런식으로 Docker에 대한 삽질을 또 하나 끝냈습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;부디 이 정보로 도움을 받으시는분들이 계셨으면 좋겠어요. :)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>아이티 :D/Docker</category>
      <author>dragon82</author>
      <guid isPermaLink="true">https://dragon82.tistory.com/53</guid>
      <comments>https://dragon82.tistory.com/53#entry53comment</comments>
      <pubDate>Thu, 7 Sep 2017 17:57:48 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 Paramiko 모듈을 이용한 커스텀 SFTP모듈 만들기!</title>
      <link>https://dragon82.tistory.com/51</link>
      <description>&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, 맑은고딕, monospace; font-size: 15px; line-height: 25px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; os&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; sys&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; paramiko&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; threading&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; time&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;사용중인 logger가 있으시다면 아래 logger 변수에 할당해주시기 바랍니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;만약 없다면 applogger의 Logger를 디폴트로 사용합니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;logger = &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;&lt;/div&gt;&lt;div&gt;_loggerflag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; logger &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; applogger &lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; Logger&lt;/div&gt;&lt;div&gt;    _loggerflag = &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    logger = Logger(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;logtype&lt;/span&gt;=&lt;span style=&quot;color: #ce9178;&quot;&gt;'STREAM'&lt;/span&gt;,&lt;span style=&quot;color: #9cdcfe;&quot;&gt;loglevel&lt;/span&gt;=&lt;span style=&quot;color: #ce9178;&quot;&gt;'DEBUG'&lt;/span&gt;).UseLogger()&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;테스트를 위한 사용자정보 딕셔너리&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;(추후 다른 모듈과 연동될때는 DB든 JSON이든 사용자 정보를 아래와 같이 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;딕셔너리 형태로 받아옵니다.)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;info = {&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:{&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'hostname'&lt;/span&gt;:&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;, &lt;span style=&quot;color: #608b4e;&quot;&gt;# 스트링&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'port'&lt;/span&gt;: &lt;span style=&quot;color: #b5cea8;&quot;&gt;22&lt;/span&gt;, &lt;span style=&quot;color: #608b4e;&quot;&gt;# 인트&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'username'&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;, &lt;span style=&quot;color: #608b4e;&quot;&gt;# 스트링&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'password'&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;, &lt;span style=&quot;color: #608b4e;&quot;&gt;# 스트링&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'src'&lt;/span&gt;: [&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;], &lt;span style=&quot;color: #608b4e;&quot;&gt;# 리스트&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'dst'&lt;/span&gt;: [&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;] &lt;span style=&quot;color: #608b4e;&quot;&gt;# 리스트&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    },&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:{&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'hostname'&lt;/span&gt;:&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;, &lt;span style=&quot;color: #608b4e;&quot;&gt;# 스트링&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'port'&lt;/span&gt;: &lt;span style=&quot;color: #b5cea8;&quot;&gt;22&lt;/span&gt;, &lt;span style=&quot;color: #608b4e;&quot;&gt;# 인트&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'username'&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;, &lt;span style=&quot;color: #608b4e;&quot;&gt;# 스트링&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'password'&lt;/span&gt;: &lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;, &lt;span style=&quot;color: #608b4e;&quot;&gt;# 스트링&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'src'&lt;/span&gt;: [&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;], &lt;span style=&quot;color: #608b4e;&quot;&gt;# 리스트&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'dst'&lt;/span&gt;: [&lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;] &lt;span style=&quot;color: #608b4e;&quot;&gt;# 리스트&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;br /&gt;&lt;div&gt;}&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;UseSFTP&lt;/span&gt;(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;threading.Thread&lt;/span&gt;):&lt;/div&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;__init__&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;hostname&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;port&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;username&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;password&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;src&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;dst&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        threading.Thread.&lt;span style=&quot;color: #dcdcaa;&quot;&gt;__init__&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.hostname = hostname&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.port = port&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.username = username&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.password = password&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src = src&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.dst = dst&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;ConnectSFTP&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        원격지 SSH와 SFTP 클라이언트를 반환하는 함수&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        '''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        ssh = &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        sftp = &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            ssh = paramiko.SSHClient()&lt;/div&gt;&lt;div&gt;            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())&lt;/div&gt;&lt;div&gt;            ssh.load_host_keys(os.path.expanduser(os.path.join(&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;~&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;.ssh&quot;&lt;/span&gt;, &lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;known_hosts&quot;&lt;/span&gt;)))&lt;/div&gt;&lt;div&gt;            ssh.connect(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;hostname&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.hostname, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;port&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.port, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;username&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.username, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;password&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.password)&lt;/div&gt;&lt;div&gt;            sftp = ssh.open_sftp()&lt;/div&gt;&lt;div&gt;            &lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;except&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Exception&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;as&lt;/span&gt; e:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; _loggerflag &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                logger.warning(&lt;span style=&quot;color: #ce9178;&quot;&gt;'{}'&lt;/span&gt;.format(e))&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #569cd6;&quot;&gt;print&lt;/span&gt;(e)&lt;/div&gt;&lt;div&gt;            ssh = &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            sftp = &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; ssh, sftp        &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;GetFileSize&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;,&lt;span style=&quot;color: #9cdcfe;&quot;&gt;file&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        파일 사이즈 출력해주는 함수&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        '''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; file &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;str&lt;/span&gt;(file) + &lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;byte&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;elif&lt;/span&gt; file &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;*&lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;str&lt;/span&gt;(file/&lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;) + &lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;kbyte&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;elif&lt;/span&gt; file &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;*&lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;*&lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;str&lt;/span&gt;(file/&lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;/&lt;span style=&quot;color: #b5cea8;&quot;&gt;1024&lt;/span&gt;) + &lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;mbyte&quot;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;PrintSummury&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;,&lt;span style=&quot;color: #9cdcfe;&quot;&gt;hostname&lt;/span&gt;,&lt;span style=&quot;color: #9cdcfe;&quot;&gt;totaltime&lt;/span&gt;,&lt;span style=&quot;color: #9cdcfe;&quot;&gt;filesize&lt;/span&gt;,&lt;span style=&quot;color: #9cdcfe;&quot;&gt;filename&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        전송 정보 요약해서 출력해주는 함수, _loggerflag가 True일 경우에만 사용됩니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        '''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(filename) &amp;gt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(filename)):&lt;/div&gt;&lt;div&gt;                logger.info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'{} Transmission file: {}'&lt;/span&gt;.format(hostname,filename[i]))&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            logger.info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'{} Transmission file: {}'&lt;/span&gt;.format(hostname,filename))&lt;/div&gt;&lt;div&gt;        logger.info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'{} Transmission size: {}'&lt;/span&gt;.format(hostname,filesize))&lt;/div&gt;&lt;div&gt;        logger.info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'{} Transmission time: {} seconds'&lt;/span&gt;.format(hostname,totaltime))&lt;/div&gt;&lt;div&gt;        logger.info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'{} Transmission Complete'&lt;/span&gt;.format(hostname))&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;TransferDir&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        로컬에서 원격지로 디렉토리 전송을 담당하는 함수&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        '''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            error = &lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #608b4e;&quot;&gt;# 소스경로&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;] = os.path.abspath(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]) + &lt;span style=&quot;color: #ce9178;&quot;&gt;'/'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            parent = os.path.expanduser(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;])&lt;/div&gt;&lt;div&gt;            ssh, sftp = &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ConnectSFTP()&lt;/div&gt;&lt;div&gt;            totaltime = &lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            filesize = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            totalsize = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            fileindex = &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;][:&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;].rfind(&lt;span style=&quot;color: #ce9178;&quot;&gt;'/'&lt;/span&gt;)].rfind(&lt;span style=&quot;color: #ce9178;&quot;&gt;'/'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;            srcdir = &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;][fileindex:&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;].rfind(&lt;span style=&quot;color: #ce9178;&quot;&gt;'/'&lt;/span&gt;)]&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #608b4e;&quot;&gt;# 배포경로 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.dst[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;] = os.path.abspath(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.dst[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]) + srcdir&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #608b4e;&quot;&gt;# 배포경로 생성 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;            stdin, stdout, stderr = ssh.exec_command(&lt;span style=&quot;color: #ce9178;&quot;&gt;'mkdir -p %s'&lt;/span&gt; % &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.dst[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;])&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #608b4e;&quot;&gt;# exec_command가 non-blocking이라 blocking으로 ssh.exec_command의 결과를 대기&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            exit_status = stderr.channel.recv_exit_status()&lt;/div&gt;&lt;div&gt;            &lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #608b4e;&quot;&gt;# ssh.exec_command명령에서 에러가 발생한 경우에 진입&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; exit_status &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                error = &lt;span style=&quot;color: #ce9178;&quot;&gt;'exit_status is 1'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; flag, error&lt;/div&gt;&lt;div&gt;            &lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #608b4e;&quot;&gt;# ssh와 sftp가 이상없이 연결되었을 경우에 진입&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; ssh &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt; sftp &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                starttime = time.time()&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; dirpath, dirnames, filenames &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; os.walk(parent):&lt;/div&gt;&lt;div&gt;                    remote_path = os.path.join(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.dst[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;], dirpath[&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(parent):])&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                        sftp.listdir(remote_path)&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;except&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;IOError&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                        sftp.mkdir(remote_path)&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;except&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Exception&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;as&lt;/span&gt; e:&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; _loggerflag &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                            logger.warning(&lt;span style=&quot;color: #ce9178;&quot;&gt;'{}'&lt;/span&gt;.format(e))&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                            &lt;span style=&quot;color: #569cd6;&quot;&gt;print&lt;/span&gt;(e)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(filenames)):&lt;/div&gt;&lt;div&gt;                        filesize = filesize + os.path.getsize(dirpath+&lt;span style=&quot;color: #ce9178;&quot;&gt;'/'&lt;/span&gt;+filenames[i])&lt;/div&gt;&lt;div&gt;                        sftp.put(os.path.join(dirpath, filenames[i]), os.path.join(remote_path, filenames[i]))&lt;/div&gt;&lt;br /&gt;&lt;div&gt;                endtime = time.time()&lt;/div&gt;&lt;div&gt;                totaltime = &lt;span style=&quot;color: #ce9178;&quot;&gt;'%.02f'&lt;/span&gt; % (endtime - starttime)&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; _loggerflag &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.PrintSummury(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.hostname,totaltime,&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.GetFileSize(filesize),&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src)&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                error = &lt;span style=&quot;color: #ce9178;&quot;&gt;'SSH &amp;amp; SFTP CONNECTION is FAIL'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; flag, error&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;except&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Exception&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;as&lt;/span&gt; e:&lt;/div&gt;&lt;div&gt;            flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            error = e&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; flag, error&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;TrasferFiles&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        로컬에서 원격지로 파일 전송을 담당하는 함수&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        '''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        error = &lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #608b4e;&quot;&gt;# 소스경로&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.dst[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;] = os.path.abspath(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.dst[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]) + &lt;span style=&quot;color: #ce9178;&quot;&gt;'/'&lt;/span&gt;   &lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #608b4e;&quot;&gt;# ssh &amp;amp; sftp 클라이언트 연결     &lt;/span&gt;&lt;/div&gt;&lt;div&gt;        ssh, sftp = &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.ConnectSFTP()&lt;/div&gt;&lt;div&gt;        totaltime = &lt;span style=&quot;color: #ce9178;&quot;&gt;''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        filesize = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        totalsize = &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #608b4e;&quot;&gt;# 배포경로 생성 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;            stdin, stdout, stderr = ssh.exec_command(&lt;span style=&quot;color: #ce9178;&quot;&gt;'mkdir -p %s'&lt;/span&gt; % &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.dst[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;])&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #608b4e;&quot;&gt;# exec_command가 non-blocking이라 blocking으로 ssh.exec_command의 결과를 대기&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            exit_status = stderr.channel.recv_exit_status()&lt;/div&gt;&lt;br /&gt;&lt;div&gt;            &lt;span style=&quot;color: #608b4e;&quot;&gt;# ssh.exec_command명령에서 에러가 발생한 경우에 진입&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; exit_status &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                error = &lt;span style=&quot;color: #ce9178;&quot;&gt;'exit_status is 1'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; flag, error&lt;/div&gt;&lt;br /&gt;&lt;div&gt;            &lt;span style=&quot;color: #608b4e;&quot;&gt;# ssh와 sftp가 이상없이 연결되었을 경우에 진입&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; ssh &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt; sftp &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                starttime = time.time()&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #608b4e;&quot;&gt;# src 개수만큼 반복하면서 원격지에 파일 전송                &lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src)):&lt;/div&gt;&lt;div&gt;                    filesize = filesize + os.path.getsize(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[i])&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; os.path.isfile(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[i]):&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; _loggerflag &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                            logger.info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'No Such File...'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                            &lt;span style=&quot;color: #569cd6;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'No Such File...'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;elif&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(stderr.readlines()) == &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; _loggerflag &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                            logger.warning(&lt;span style=&quot;color: #ce9178;&quot;&gt;'No Such Directory...'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                            &lt;span style=&quot;color: #569cd6;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'No Such Directory...'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                        sftp.mkdir(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.dst[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;], &lt;span style=&quot;color: #9cdcfe;&quot;&gt;mode&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;511&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                        filename_index = &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[i].rfind(&lt;span style=&quot;color: #ce9178;&quot;&gt;'/'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                        filename = &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[i][filename_index+&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:]&lt;/div&gt;&lt;div&gt;                        sftp.put(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[i], &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.dst[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]+filename)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                error = &lt;span style=&quot;color: #ce9178;&quot;&gt;'SSH &amp;amp; SFTP CONNECTION is FAIL'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; flag, error&lt;/div&gt;&lt;br /&gt;&lt;div&gt;            endtime = time.time()&lt;/div&gt;&lt;div&gt;            totaltime = &lt;span style=&quot;color: #ce9178;&quot;&gt;'%.02f'&lt;/span&gt; % (endtime - starttime)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; _loggerflag &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.PrintSummury(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.hostname,totaltime,&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.GetFileSize(filesize),&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src)&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #c586c0;&quot;&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;except&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;IOError&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;as&lt;/span&gt; e:&lt;/div&gt;&lt;div&gt;            flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            error = e&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; flag, error&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;except&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Exception&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;as&lt;/span&gt; e:&lt;/div&gt;&lt;div&gt;            flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            error = e&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; flag, error&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;SendToRemote&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        파일전송인지 폴더전송인지 구분한 후 전송함수 호출을 담당하는 함수&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        '''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #608b4e;&quot;&gt;# 소스가 파일 전송일 경우&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; os.path.isfile(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]) &lt;span style=&quot;color: #569cd6;&quot;&gt;or&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src) &amp;gt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.TrasferFiles()&lt;/div&gt;&lt;div&gt;        &lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #608b4e;&quot;&gt;# 소스가 폴더 전송일 경우&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;elif&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; os.path.isfile(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src[&lt;span style=&quot;color: #b5cea8;&quot;&gt;0&lt;/span&gt;]) &lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.src) &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;2&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.TransferDir()&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;run&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        스레드 Run 담당하는 함수&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;        '''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.SendToRemote()&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;except&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Exception&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;as&lt;/span&gt; e:&lt;/div&gt;&lt;div&gt;            logger.warning(&lt;span style=&quot;color: #ce9178;&quot;&gt;'{}'&lt;/span&gt;.format(e))&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;GetInformation&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;info&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;    SFTP 전송관련 정보들을 담은 dict를 반환하는 함수&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;    '''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    infolist = []&lt;/div&gt;&lt;div&gt;    idx = &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(info)&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(idx):&lt;/div&gt;&lt;div&gt;        infolist.append(info[i])&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; infolist&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;Validation&lt;/span&gt;():&lt;/div&gt;&lt;br /&gt;&lt;div&gt;    flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    data = GetInformation(info)&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(data)):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'hostname'&lt;/span&gt;]) &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            logger.critical(&lt;span style=&quot;color: #ce9178;&quot;&gt;'%d hostname 입력되지 않았습니다'&lt;/span&gt; % i)&lt;/div&gt;&lt;div&gt;            flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'port'&lt;/span&gt;] &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            logger.critical(&lt;span style=&quot;color: #ce9178;&quot;&gt;'%d port 입력되지 않았습니다'&lt;/span&gt; % i)&lt;/div&gt;&lt;div&gt;            flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'username'&lt;/span&gt;]) &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            logger.critical(&lt;span style=&quot;color: #ce9178;&quot;&gt;'%d username 입력되지 않았습니다'&lt;/span&gt; % i)&lt;/div&gt;&lt;div&gt;            flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'password'&lt;/span&gt;]) &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            logger.critical(&lt;span style=&quot;color: #ce9178;&quot;&gt;'%d password 입력되지 않았습니다'&lt;/span&gt; % i)&lt;/div&gt;&lt;div&gt;            flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'src'&lt;/span&gt;]) &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            logger.critical(&lt;span style=&quot;color: #ce9178;&quot;&gt;'%d src 입력되지 않았습니다'&lt;/span&gt; % i)&lt;/div&gt;&lt;div&gt;            flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'dst'&lt;/span&gt;]) &amp;lt; &lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            logger.critical(&lt;span style=&quot;color: #ce9178;&quot;&gt;'%d dst 입력되지 않았습니다'&lt;/span&gt; % i)&lt;/div&gt;&lt;div&gt;            flag = &lt;span style=&quot;color: #569cd6;&quot;&gt;False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; flag, data&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;main&lt;/span&gt;():&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;    배포대상 서버의 수만큼 스레드가 생성되며 스레드를 시작시키는 메인함수&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;    self, hostname, port, username, src, dst)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;    '''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    flag, data = Validation()&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; flag &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;for&lt;/span&gt; i &lt;span style=&quot;color: #569cd6;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;range&lt;/span&gt;(&lt;span style=&quot;color: #dcdcaa;&quot;&gt;len&lt;/span&gt;(data)):&lt;/div&gt;&lt;div&gt;            clss = UseSFTP(data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'hostname'&lt;/span&gt;],&lt;/div&gt;&lt;div&gt;                            data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'port'&lt;/span&gt;],&lt;/div&gt;&lt;div&gt;                            data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'username'&lt;/span&gt;],&lt;/div&gt;&lt;div&gt;                            data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'password'&lt;/span&gt;],&lt;/div&gt;&lt;div&gt;                            data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'src'&lt;/span&gt;],&lt;/div&gt;&lt;div&gt;                            data[i][&lt;span style=&quot;color: #ce9178;&quot;&gt;'dst'&lt;/span&gt;])&lt;/div&gt;&lt;br /&gt;&lt;div&gt;            clss.start()&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;__name__&lt;/span&gt; == &lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;__main__&quot;&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #ce9178;&quot;&gt;'''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;    아래와 같이 메인함수를 호출하여 테스트 하시면 됩니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;    '''&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; _loggerflag &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        logger.info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'START SFTP Module :D'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'START SFTP Module :D'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;    main()&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; _loggerflag &lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        logger.info(&lt;span style=&quot;color: #ce9178;&quot;&gt;'END SFTP Module!!'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #c586c0;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #ce9178;&quot;&gt;'END SFTP Module!!'&lt;/span&gt;)&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>아이티 :D/Python</category>
      <author>dragon82</author>
      <guid isPermaLink="true">https://dragon82.tistory.com/51</guid>
      <comments>https://dragon82.tistory.com/51#entry51comment</comments>
      <pubDate>Tue, 11 Jul 2017 20:02:55 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 로깅모듈을 이용한 커스텀 logger 만들기</title>
      <link>https://dragon82.tistory.com/48</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Python logging 라이브러리를 활용해서 Custom Logger를 아래와 같이 간단하게 만들어보았습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;개발할때 중요한게 참 많지만 그중에서 디버깅과 로깅은 정말 중요하다고 할 수 있죠.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;적절한 로깅은 디버깅을 한결 편리하게 해주니 우리모두 로깅을 남발하지 말고 적절하게 사용합시다 :D..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Consolas, 맑은고딕, monospace; font-size: 15px; line-height: 25px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; __future__ &lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; absolute_import&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; os,sys&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; logging &lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; getLogger, StreamHandler, FileHandler, Formatter, DEBUG, INFO&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt; logging.handlers &lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt; TimedRotatingFileHandler&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4ec9b0;&quot;&gt;Logger&lt;/span&gt;(&lt;span style=&quot;color: #4ec9b0;&quot;&gt;object&lt;/span&gt;):&lt;/div&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;__init__&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;logtype&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;logname&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;loglevel&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;filename&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt; \&lt;/div&gt;&lt;div&gt;                                ,&lt;span style=&quot;color: #9cdcfe;&quot;&gt;rollover&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;interval&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;backupcount&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.logtype = logtype&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.logname = logname&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.loglevel = loglevel&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.filename = filename&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.rollover = rollover&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.interval = interval&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.backupcount = backupcount&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.defaultformat = Formatter(&lt;span style=&quot;color: #ce9178;&quot;&gt;'[%(asctime)s] %(process)d %(levelname)s in %(module)s: %(message)s'&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;    &lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;SetDefault&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.logtype == &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.logtype = &lt;span style=&quot;color: #ce9178;&quot;&gt;'ALL'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.logname == &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.logname = &lt;span style=&quot;color: #ce9178;&quot;&gt;'AppLog'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.loglevel == &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.loglevel = &lt;span style=&quot;color: #ce9178;&quot;&gt;'DEBUG'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.filename == &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.filename = &lt;span style=&quot;color: #ce9178;&quot;&gt;'LoggerApp.log'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.rollover == &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.rollover = &lt;span style=&quot;color: #ce9178;&quot;&gt;'m'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.interval == &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.interval = &lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.backupcount == &lt;span style=&quot;color: #569cd6;&quot;&gt;None&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.backupcount = &lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;FLogHandler&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;):        &lt;/div&gt;&lt;div&gt;        logpath = os.path.dirname(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;__file__&lt;/span&gt;) + &lt;span style=&quot;color: #ce9178;&quot;&gt;'/'&lt;/span&gt; + &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.filename&lt;/div&gt;&lt;div&gt;        logdir = os.path.dirname(logpath)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;not&lt;/span&gt; os.path.exists(logdir):&lt;/div&gt;&lt;div&gt;            os.makedirs(logdir)&lt;/div&gt;&lt;div&gt;        fhandler = TimedRotatingFileHandler(logpath, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;when&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.rollover \&lt;/div&gt;&lt;div&gt;                        ,&lt;span style=&quot;color: #9cdcfe;&quot;&gt;interval&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.interval, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;backupCount&lt;/span&gt;=&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.backupcount)&lt;/div&gt;&lt;div&gt;        fhandler.setFormatter(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.defaultformat)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; fhandler&lt;/div&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;SLogHandler&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;        shandler = StreamHandler()&lt;/div&gt;&lt;div&gt;        shandler.setFormatter(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.defaultformat)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; shandler&lt;/div&gt;&lt;br /&gt;&lt;div&gt;    &lt;span style=&quot;color: #569cd6;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #dcdcaa;&quot;&gt;UseLogger&lt;/span&gt;(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;self&lt;/span&gt;):&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #608b4e;&quot;&gt;# 사용자 입력값이 없다면 디폴트 설정으로 logger 적용&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.SetDefault()&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #608b4e;&quot;&gt;# getLogger객체 생성 및 logging level 설정&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        logger = getLogger(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.logname)&lt;/div&gt;&lt;div&gt;        logger.setLevel(&lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.loglevel)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #608b4e;&quot;&gt;# logtype에 따라 Handler 설정&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.logtype == &lt;span style=&quot;color: #ce9178;&quot;&gt;'FILE'&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            fhandler = &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.FLogHandler()&lt;/div&gt;&lt;div&gt;            logger.addHandler(fhandler)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;elif&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.logtype == &lt;span style=&quot;color: #ce9178;&quot;&gt;'STREAM'&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            shandler = &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.SLogHandler()&lt;/div&gt;&lt;div&gt;            logger.addHandler(shandler)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;elif&lt;/span&gt; &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.logtype == &lt;span style=&quot;color: #ce9178;&quot;&gt;'ALL'&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            fhandler = &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.FLogHandler()&lt;/div&gt;&lt;div&gt;            shandler = &lt;span style=&quot;color: #569cd6;&quot;&gt;self&lt;/span&gt;.SLogHandler()&lt;/div&gt;&lt;div&gt;            logger.addHandler(fhandler)&lt;/div&gt;&lt;div&gt;            logger.addHandler(shandler)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;        &lt;span style=&quot;color: #c586c0;&quot;&gt;return&lt;/span&gt; logger&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;__name__&lt;/span&gt; == &lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;__main__&quot;&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    logger = Logger(&lt;span style=&quot;color: #9cdcfe;&quot;&gt;rollover&lt;/span&gt;=&lt;span style=&quot;color: #ce9178;&quot;&gt;'H'&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;interval&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;, &lt;span style=&quot;color: #9cdcfe;&quot;&gt;backupcount&lt;/span&gt;=&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;).UseLogger()&lt;/div&gt;&lt;div&gt;    logger.debug(&lt;span style=&quot;color: #ce9178;&quot;&gt;'LOGGING TEST'&lt;/span&gt;)&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>아이티 :D/Python</category>
      <author>dragon82</author>
      <guid isPermaLink="true">https://dragon82.tistory.com/48</guid>
      <comments>https://dragon82.tistory.com/48#entry48comment</comments>
      <pubDate>Wed, 21 Jun 2017 15:15:33 +0900</pubDate>
    </item>
    <item>
      <title>PE format 상세분석</title>
      <link>https://dragon82.tistory.com/7</link>
      <description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;안녕하세요 :)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;저번 포스팅에서는 RVA to RAW 관련 개념들을 정리했었는데&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번 포스팅에선&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;PE file format을 상세분석 하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;사실 이 포스팅이 먼저였어야 하는데 말이죠!ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;아직까지도 PE에 대해서 초보지만 PE 분석하는 프로그램을 만들면서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하나하나 파싱해나가니깐 그래도 좀 친숙하게 PE가 다가오더라구여&lt;/p&gt;
&lt;p&gt;그래서 이번에도 자신감을 가지고 가보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;1. PE란 무엇인가?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;-Portable Executable의 약자로 Win32 운영체제가 돌아가는 시스템이면 어디서든 실행이 가능한 파일을&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp;말합니다.
&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;-PE 파일의 종
류는 아래와 같습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp;드라이브: SYS, 오브젝트파일: OBJ, 라이브러리: DLL, OCX, 실행파일: EXE, SCR&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;2. PE구조 한눈에 보기!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27042839545070682F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27042839545070682F&quot; width=&quot;640&quot; height=&quot;586&quot; filename=&quot;Windows____________________________________OCR_pdf_26_578페이지_.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; 출처 - &amp;lt;Windows 시스템 실행파일의 구조와 원리 8page&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;1) IMAGE_DOS_HEADER&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;2) DOS stub code&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;3) IMAGE_NT_HEADER&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;3-1) PE signature&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;3-2) IMAGE_FILE_HEADER&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;3-3) IMAGE_OPTIONAL_HEADER&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;4)&amp;nbsp;IMAGE_DATA_DIRECTORY&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;5) IMAGE_SECTION_HEADERS&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;5-1) IMAGE_SECTION_HEADER&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;5-2)&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;IMAGE_SECTION_HEADER&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;5-3)&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;IMAGE_SECTION_HEADER&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;5-4)&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;IMAGE_SECTION_HEADER&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;........&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;6) SECTION_DATA&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;PE구조는 간단히 위와같이 구성되어 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;그럼 지금부터 하나하나 살펴보도로 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;3. IMAGE_DOS_HEADER&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;- IMAGE_DOS_HEADER 구조체&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;typedef struct _IMAGE_DOS_HEADER {&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;b&gt;WORD e_magic;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_cblp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_cp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_crlc;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_cparhdr;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_minalloc;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_maxalloc;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_ss;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_sp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_csum;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_ip;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_cs;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_lfarlc;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_ovno;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_res[4];&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_oemid;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_oeminfo;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;WORD e_res2[10];&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;L&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;ONG e_lfanew;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;-IMAGE_DOS_HEADER 는 &quot;&lt;b&gt;64byte&lt;/b&gt;&quot;이며,&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;눈여겨 볼 필드는 아래와 같습니다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;1) WORD e_magic; = IMAGE_DOS_HEADER의 시그니쳐이자 식별자로써 ASCII&amp;nbsp;&quot;MZ&quot;로 고정.&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;&amp;nbsp;여기서 &quot;MZ&quot;는 도스를 설계한 사람중 한명인&amp;nbsp;&lt;span style=&quot;font-family: Batang; font-size: 10pt; line-height: 1.5;&quot;&gt;Mark Zbikowski의 이니셜입니다&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;&lt;span style=&quot;font-family: Batang; font-size: 10pt; line-height: 1.5;&quot;&gt;2) LONG e_lfanew; = IMAGE_NT_HEADER 의 시작 offset을 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 14em;&quot;&gt;&lt;span style=&quot;font-family: Batang; font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 개인적으로&amp;nbsp;PE 분석 프로그램 만들기 위해&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Batang; font-size: 10pt; line-height: 1.5;&quot;&gt;파싱할때&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 14em;&quot;&gt;&lt;font face=&quot;Batang&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이 값을 기준으로 잡을정도로 중요한 필드입니다!&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;font face=&quot;Batang&quot; size=&quot;2&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2444D24D54507CB032&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2444D24D54507CB032&quot; width=&quot;640&quot; height=&quot;117&quot; filename=&quot;MZ,elfanew.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 24em;&quot;&gt;&lt;font face=&quot;Batang&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;b&gt;&amp;lt;IMAGE_DOS_HEADER&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
		
	
	
		&lt;div class=&quot;page&quot; title=&quot;Page 5&quot;&gt;
			&lt;div class=&quot;layoutArea&quot;&gt;
				&lt;div class=&quot;column&quot;&gt;
					&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10.000000pt; font-family: 'Batang'&quot;&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
				&lt;/div&gt;
			&lt;/div&gt;
		&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;4. DOS stub code&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;- 별로 의미있는 부분은 아닙니다만은 설명을 하고 넘어 가자면 예전 DOS시절에 쓰였던 부분으로&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ASCHII 값으로 &quot;This program cannot be run in DOS mode.&quot; 라는 문장을 나타냅니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp;시작점에서 IMAGE_DOS_HEADER의 크기인 64byte만큼 떨어진 곳에서부터 시작이 되며&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 크기가 가변적이라&amp;nbsp;IMAGE_DOS_HEADER 구조체의 e_lfanew 필드를&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;참조하여 끝을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2203D94054507C092E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2203D94054507C092E&quot; width=&quot;640&quot; height=&quot;207&quot; filename=&quot;DOSSTUB.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 22em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;lt;DOS stub code&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;5.&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;IMAGE_NT_HEADER&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 22px;&quot;&gt;-&lt;span style=&quot;font-size: 9pt; line-height: 22px;&quot;&gt;IMAGE_NT_HEADER 구조
체&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;typedef struct _IMAGE_NT_HEADERS{&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;DWORD Signature;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;IMAGE_FILE_HEADER FileHeader;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;IMAGE_OPTIONAL_HEADER OptionalHeader;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;5-1) PE signature&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;DWORD signate; 필드를 나타내며, 4byte로 구성됩니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;PE를 나타내는 식별자이며, IMAGE_DOS_HEADER에 MZ와 마찬가지로&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;ASCHII값으로 &quot;PE\x00\x00&quot;의 고정값을 지닙니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;IMAGE_NT_HEADER의 시작점이자 식별자이며, 그렇기에 당연히 이전 e_lfanew 필드가 가르키는&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;값에서부터 4byte의 입니다!&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;아래 사진에서 0x000000D8 지점(e_lfanew값)이 DWORD signature의 시작지점이고 값은 PE인걸 확인&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2205674E545082691B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2205674E545082691B&quot; width=&quot;640&quot; height=&quot;327&quot; filename=&quot;PE.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 26em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&amp;lt;DWORD signature&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;!-- 중간 광고 삽입 --&gt;
&lt;br&gt;
&lt;div id=&quot;abc&quot;&gt;&lt;/div&gt;
&lt;br&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;5-2) IMAGE_FILE_HEADER&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;-&lt;span style=&quot;line-height: 20px; font-size: 9pt;&quot;&gt;IMAGE_FILE_HEADER 구조체&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;typedef struct _IMAGE_FILE_HEADER {&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&lt;b&gt;WORD Machin;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&lt;b&gt;WORD NumberOfSections;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;DWORD TimeDateStamp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;DWORD PointToSymbolTable;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;DWORD NumberOfSymbols;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;&lt;b&gt;WORD SizeOfOptionalHeader;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 14em;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&amp;nbsp; &amp;nbsp;&lt;b&gt;WORD Characteristics;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;b&gt;5-2-1) Machin&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;- 해당필드는 파일이 어떤 CPU에서 동작하고 있는지를 알려줍니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; 대표적으로 3가지만 살펴보겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; Intel386: 0x14c&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; Intel64: &amp;nbsp;0x0200&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; AMD64: 0x8664&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;b&gt;5-2-2) NumberOfSections&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;- 해당필드는 IMAGE_SECTION_HEADERS 구조체내의 섹션의 수를 나타냅니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; 그럼 확인 해볼까요?&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 599px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25320E3E5451D4CD1A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25320E3E5451D4CD1A&quot; width=&quot;599&quot; height=&quot;315&quot; filename=&quot;numberofsection.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em; text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em; text-align: center; clear: none; float: none;&quot;&gt;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 250px; font-size: 9pt; line-height: 1.5;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/223D654C5451D6041C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F223D654C5451D6041C&quot; width=&quot;250&quot; height=&quot;295&quot; filename=&quot;number.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;font-size: 9pt; line-height: 1.5;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 26em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&amp;lt;NumberOfSections&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;필드의 값은 4며,&amp;nbsp;PEview로 확인해본 결과 섹션의 개수도 4인걸 확인 할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;b&gt;5-2-3) SizeOfOptionalHeader&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;- 해당 필드는 IMAGE_FILE_HEADER 다음에 이어지는 IAMGE_OPTIONAL_HEADER&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; 구조체의 바이트 수를 알려줍니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; OBJ파일이면 해당값이 0이며, 실행 파일일 경우 32비트는 0xE0(224)byte&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; 64비트는 0xF0(240)byte입니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;b&gt;5-2-4) Characteristics&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;- 해당 필드는 파일의 특성을 알려줍니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; 특성의 종류에 대해서 아래에서 살펴보고 저희가 분석중인 calc.exe는 어떤 특성을 가지고&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; 있는지 알아보겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;WinNT.h 의 Characteristics 값&amp;gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;0x0001 &amp;nbsp;// Relocation info stripped from file. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x0002 &amp;nbsp;// File is executable &amp;nbsp;(i.e. no unresolved externel references). &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x0004 &amp;nbsp;// Line nunbers stripped from file. &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x0008 &amp;nbsp;// Local symbols stripped from file. &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x0010 &amp;nbsp;// Agressively trim working set &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x0020 &amp;nbsp;// App can handle &amp;gt;2gb addresses &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x0080 &amp;nbsp;// Bytes of machine word are reversed. &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x0100 &amp;nbsp;// 32 bit word machine. &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x0200 &amp;nbsp;// Debugging info stripped from file in .DBG file &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x0400 &amp;nbsp;// If Image is on removable media, copy and run from the swap file. &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x0800 &amp;nbsp;// If Image is on Net, copy and run from the swap file. &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x1000 &amp;nbsp;// System File. &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x2000 &amp;nbsp;// File is a DLL. &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x4000 &amp;nbsp;// File should only be run on a UP machine &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 16em;&quot;&gt;0x8000 &amp;nbsp;// Bytes of machine word are reversed. &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;그럼 calc.exe의 특성값을 확인해보겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 639px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/251535335451DE1B18&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F251535335451DE1B18&quot; width=&quot;639&quot; height=&quot;62&quot; filename=&quot;characteristics.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 32em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&amp;lt;calc.exe의 characteristics&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;0x0102의 값을 가지고 있고, 내용은 실행파일이며 32비트를 사용한다네요 :)&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;그럼 이제 다음으로 중요한 헤더인 IMAGE_OPTIONAL_HEADER로 가보겠습니다!!&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;5-3) IMAGE_OPTIONAL_HEADER&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;-IMAGE_OPTIONAL_HEADER 구조체&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;typedef struct _IMAGE_OPTIONAL_HEADER { &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; // &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; // ## Standard fields ##&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; // &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;b&gt; WORD &amp;nbsp; &amp;nbsp;Magic; &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; BYTE &amp;nbsp; &amp;nbsp;MajorLinkerVersion; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; BYTE &amp;nbsp; &amp;nbsp;MinorLinkerVersion; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; SizeOfCode; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; SizeOfInitializedData; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; SizeOfUninitializedData; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;DWORD &amp;nbsp; AddressOfEntryPoint; &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;b&gt; DWORD &amp;nbsp; BaseOfCode;&lt;/b&gt; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; BaseOfData; &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; // &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; // ## NT additional fields ##&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; // &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; ImageBase; &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; SectionAlignment; &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; FileAlignment; &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; WORD &amp;nbsp; &amp;nbsp;MajorOperatingSystemVersion; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; WORD &amp;nbsp; &amp;nbsp;MinorOperatingSystemVersion; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; WORD &amp;nbsp; &amp;nbsp;MajorImageVersion; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; WORD &amp;nbsp; &amp;nbsp;MinorImageVersion; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; WORD &amp;nbsp; &amp;nbsp;MajorSubsystemVersion; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; WORD &amp;nbsp; &amp;nbsp;MinorSubsystemVersion; &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; Win32VersionValue; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;b&gt; DWORD &amp;nbsp; SizeOfImage; &lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;DWORD &amp;nbsp; SizeOfHeaders; &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; CheckSum; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;WORD &amp;nbsp; &amp;nbsp;Subsystem; &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; WORD &amp;nbsp; &amp;nbsp;DllCharacteristics; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &lt;b&gt;&amp;nbsp; &lt;/b&gt;DWORD &amp;nbsp; SizeOfStackReserve; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; SizeOfStackCommit; &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; SizeOfHeapReserve; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; SizeOfHeapCommit; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; LoaderFlags; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; NumberOfRvaAndSizes; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;b&gt; IMAGE_DATA_DIRECTORY &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/b&gt; &amp;nbsp;&amp;nbsp;DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;b&gt;5-3-1) Magic&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;-해당 필드는 IMAGE_OPTIONAL_HEADER를 나타내는 시그니처 정보를 담고있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;32비트는 0x010B이며, 64비트는 0x020B입니다. ROM파일은 0x0107입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;b&gt;5-3-2,3) AddressOfEntryPoint, BaseOfCode&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;-해당 필드는 Entry Point의 RVA값을 나타냅니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;즉 프로그램에서 &quot;최초로 &lt;b&gt;실행되는 코드&lt;/b&gt;&quot;라고 생각하시면 편해요.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;여기서 코드의 시작점과 최초로 실행되는 코드는 다릅니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;최초의 코드는 아래에서 설명할 BaseOfCode필드인데 코드의 시작점이고,&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;최초로 실행되는 코드는 코드의 맨 처음은 아니지만 디버거 실행시 최초로 실행되는&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;코드입니다. 즉 디버거 실행시 젤 위에 있는 코드 주소값이 아래에서 설명 할&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;BaseOfCode이며, 디버거에서 Module Entry Point라고 지정되있는 최초 실행지점이&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;바로 AddressOfEntryPoint입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;근데 중요한게&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;AddressOfEntryPoint나, BaseOfCode 둘다&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;RVA 값이니깐&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;Imagebase값을 더해줘야 VA 값이 된다는 사실!!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;lt;이전 포스팅에서 RVA to RAW, VA, RVA, RAW등을 정리했습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;참고하시면 좋을 것 같아요..!&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;b&gt;5-3-4) Imagebase&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;-해당 필드는 가상 메모리에 로드된 파일의 시작주소로써, 즉 가상메모리에 PE파일이&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;mapping된 시작주소이자 RVA의 기준이되는 주소값입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;일반적으로 실행파일은 0x00400000의 값을 가지며 DLL은 0x10000000의 값을&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;가집니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;절대적인 값이 아니며, 링크 시 옵션 /BASE를 함으로써 변경 될&amp;nbsp;수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/265086485451F7E42A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F265086485451F7E42A&quot; width=&quot;640&quot; height=&quot;216&quot; filename=&quot;imageofbase.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &amp;lt;Imagebase&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;5-3-5) SectionAlignment&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;-&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&quot;Alignment&quot;라는 단어는 가지런함, 정렬의 의미를 지닙니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;즉 섹션을 정렬할것이다라고 필드명을 보고 추측할 수 있겠네요.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;메모리상에서 섹션 크기의 최소단위입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;아래에서 보면&amp;nbsp;&amp;nbsp;0x1000값을 가지는데 4096byte로 계속 정렬된다고 보면 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 630px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/262E09415451FC6823&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F262E09415451FC6823&quot; width=&quot;630&quot; height=&quot;234&quot; filename=&quot;section.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 28em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&amp;lt;SectionAlignment&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;5-3-6) FileAlignment&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;-해당 필드는 SectionAlignment와 비슷합니다. 하드디스크상에서 섹션크기의&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;최소단위 입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;5-3-7) SizeOfImage&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span style=&quot;font-size:9pt;&quot;&gt;-해당 필드는 PE 파일을 메모리에 로드할 때 확보 해야 할 크기를 나타냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;Imagebase가&amp;nbsp;&lt;/span&gt;가르기는&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;값에서 PE 파일의 마지막 섹션 끝까지의 크기이며, 혹 PE 파일이&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;메모리에 매핑될 때 크기가 조금씩 틀려질 수 있기 때문에 보통은 PE 파일의 크기보다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;크다. 그리고 이 필드의 값은 SectionAlignment 값의 배수가 되어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;5-3-8) SizeOfHeader&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px; font-size: 9pt;&quot;&gt;-해당 필드는 IMAGE_DOS_HEADER부터 Section_table들의 바이트를 모두 합친 값.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px; font-size: 9pt;&quot;&gt;&amp;nbsp;시작주소에서 이 필드의 값만큼 떨어진 곳에 첫번째 섹션의 데이터가 시작합니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px; font-size: 9pt;&quot;&gt;&amp;nbsp;이 필드의 값은 FileAlignment 값의 배수가 되어야 합니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;5-3-9) MajorSubsystemVersion, MinorSubsystemVersion&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;-해당 필드들은 PE를 실행할 때 필요한 subsystem의 최소 버전을 나타냅니다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;값이 4인데 window NT 4.0이상의 기반에서 PE가 돌아갈 수 있기때문입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;/SUBSYSTEM이라는 명령어로 해당 값을 변경 할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;5-3-10) Subsystem&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;-해당 필드는 PE파일이 어떤 기반인지를 알려줍니다. 3가지정도만 알면 되는데&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;0x01: .sys 류의 드라이파일&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;0x02: GUI&amp;nbsp;(그래픽 유저 인터페이스)&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp;0x03: CUI (콘솔 유저 인터페이스)&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;6.&amp;nbsp;IMAGE_DATA_DIRECTORY&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;-IMAGE_DATA_DIRECTORY 구조체&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;typedef struct _IMAGE_DATA_DIRECTORY { &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; VirtualAddress; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; Size; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES&amp;nbsp; &amp;nbsp; 16&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;이 구조체 배열의 엔트리는 16이며, 그 중에서 사용하는 엔트리는 15개입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;구조체를 보니 각 요소요소들은 주소값과 크기를 가지고 있겠네요 :)&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;-Directory Entries&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_EXPORT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; // Export Directory &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_IMPORT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; // Import Directory &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_RESOURCE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2 &amp;nbsp; // Resource Directory &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_EXCEPTION &amp;nbsp; &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; // Exception Directory &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_SECURITY &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4 &amp;nbsp; // Security Directory &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_BASERELOC &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;5 &amp;nbsp; // Base Relocation Table &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_DEBUG &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6 &amp;nbsp; // Debug Directory &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT &amp;nbsp; &amp;nbsp; &amp;nbsp; 7 &amp;nbsp; // (X86 usage) &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE &amp;nbsp;7 &amp;nbsp; // Architecture Specific Data &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR &amp;nbsp; &amp;nbsp; &amp;nbsp; 8 &amp;nbsp; // RVA of GP &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_TLS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;9 &amp;nbsp; // TLS Directory &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG &amp;nbsp; &amp;nbsp;10 &amp;nbsp; // Load Configuration Directory &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT &amp;nbsp;11 &amp;nbsp; // Bound Import Directory in headers &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_IAT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 12 &amp;nbsp; // Import Address Table &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT &amp;nbsp; 13 &amp;nbsp; // Delay Load Import Descriptors &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 &amp;nbsp; // COM Runtime descriptor &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;//중요한 몇몇 필드만&amp;nbsp;살펴보도록 하겠습니다. 이 배열의 엔트리들에 대해서는&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp; 차후에 좀 더 상세하게 포스팅 하도록 하겠습니다.//&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;6-1) IMAGE_DIRECTORY_ENTRY_EXPORT&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;-EXPORT_TABLE의 시작번지와 크기를 가지고 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;6-2) IMAGE_DIRECTORY_ENTRY_ IMPORT&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;-IMPORT_TABLE의 시작번지와 크기를 가지고 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;6-3) IMATE_DIRECTORY_ENTRY_RESOURCE&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;-RESOUSE_TABLE의 시작번지와 크기를 가지고 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;6-4)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;IMAGE_DIRECTORY_ENTRY_TLS&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font-family: gulim; line-height: 20px; background-color: rgb(250, 255, 169);&quot;&gt;&lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;position: absolute; opacity: 0;&quot;&gt;&lt;p style=&quot;margin: 11px 0px 7px; padding: 0px;&quot;&gt;&lt;a href=&quot;http://www.hacure.com/b/it_tip-101&quot; target=&quot;_blank&quot; style=&quot;color: rgb(0, 0, 0); text-decoration: underline;&quot;&gt;[출처] 하큐어 - http://www.hacure.com/b/it_tip-101&lt;/a&gt;ㅁㄴㅇㄴㅇㅁㄴㅇ&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 12em;&quot;&gt;-Thread Local Storage(TLS)섹션에 대한 포인터를 가지고 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;6-5) IMAGE_DIRECTORY_ENTRY_IAT&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;-IAT(Import Address Table)의 시작 번지를 가르킵니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;7.&amp;nbsp;IMAGE_SECTION_HEADER&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;-IMAGE_SECTION_HEADER 구조체&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;typedef struct _IMAGE_SECTION_HEADER { &amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;Name[IMAGE_SIZEOF_SHORT_NAME]; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; union { &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD &amp;nbsp; PhysicalAddress; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD &amp;nbsp; VirtualSize; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; } Misc; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; VirtualAddress; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; SizeOfRawData; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; PointerToRawData; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&amp;nbsp; &amp;nbsp; DWORD &amp;nbsp; PointerToRelocations; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWORD &amp;nbsp; PointerToLinenumbers; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WORD &amp;nbsp; &amp;nbsp;NumberOfRelocations; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WORD &amp;nbsp; &amp;nbsp;NumberOfLinenumbers; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWORD &amp;nbsp; Characteristics; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;-섹션헤더는 각 섹션들의 구체적인 정보들이 담긴 영역입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp;섹션의 개수는 앞에서도 알려드린 바와 같이&amp;nbsp;&amp;nbsp;IMAGE_FILE_HEADER안에 NumberOfSection의&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp;값으로 알 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp;이제 각각의&amp;nbsp;섹션테이블에 대해 알아보도록 하겠습니다!!&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;b&gt;7-1) &amp;nbsp;Name&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;-해당 필드는 섹션의 이름을 ASCII값으로 표현하고 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;이름을 나타내는 ASCII값은 8자로 제한이됩니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 538px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2755B64254521B2C0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2755B64254521B2C0A&quot; width=&quot;538&quot; height=&quot;288&quot; filename=&quot;text.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 18em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&amp;lt;Section Name&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;7-2) PhysicalAddress or&amp;nbsp;Virtual Size&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;-union이라는 사실에 주목을 해야합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;왜냐하면 PE파일인지 OBJ파일인지 두가지 경우에 따라서 값이 틀려지기 때문이죠&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;OBJ의 경우는 값이 0으로 고정되고, PE인 경우는 코드와 데이터의 실제 바이트 수를 담고 있는데&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;FileAlignment로 정렬되기 전의 실제 바이트 수를 담고 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;7-3) VirtualAddress&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;-해당 필드는 메모리상에 파일이 로드되었을때 섹션이 시작되는 주소를 RVA값으로 담고 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;제 파일에서는 0x00001000의 값을 가지고 있네요.&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 525px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/242DEC5054521FAD27&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F242DEC5054521FAD27&quot; width=&quot;525&quot; height=&quot;127&quot; filename=&quot;rva.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none; margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;7-4) PointerToRawData&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;-해당 필드는 파일상에서 해당 섹션이 시작하는 실제 Offset값입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;VirtualAddress가 가르기는 주소값과 같을 수도 다를 수도 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;그럼 실제로 파일상에서 해당 섹션의&amp;nbsp;offset이 맞는지 아래 그림에서 확인 해보겠습니다&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 627px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25431A5054521FAE04&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25431A5054521FAE04&quot; width=&quot;627&quot; height=&quot;276&quot; filename=&quot;point2.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 24em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&amp;lt;PointerToRawData&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 596px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/272C2E5054521FAE2D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F272C2E5054521FAE2D&quot; width=&quot;596&quot; height=&quot;198&quot; filename=&quot;point.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 22em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;lt;File상에서 실제 해당 섹션의 시작점&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;확인 결과 PointerToRawData가 가르키고 있는 주소 값이 파일 상에서 해당 섹션이 시작하는 주소값&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;과 동일하다는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;7-5) SizeOfRawData&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;-해당 필드는 파일상에서 섹션의 크기에 대한 정보를 가지고 있는데 7-2) 필드에서 살펴본&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;VirtualSize의 값은 FileAlignment로 정렬하지 않은 실제 데이터의 바이트 수를 나타낸거라면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;SizeOfRawData의 값은 Filealignment로 정렬한 값의&amp;nbsp;&lt;/span&gt;배수를&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;나타내고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;PE파일이 아닌 OBJ파일의 경우라면 값은 0으로 고정됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;b&gt;7-6) Characteristics&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;-해당 필드는 해당 섹션의 특성들을 나타내고 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;아래 그림에서&amp;nbsp;해당 필드의 값을 확인 해보겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 630px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/21171D3D545227B507&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F21171D3D545227B507&quot; width=&quot;630&quot; height=&quot;124&quot; filename=&quot;charac.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 20em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Characteristics&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;0x00000020 - IMAGE_SCN_CNT_CODE: 섹션에 코드가 포함되어 있다는것을 의미합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;0x20000000 - IMAGE_SCN_MEM_EXECUTE: 섹션이 실행 가능하다는 것을&amp;nbsp;의미합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;0x40000000 - IMAGE_SCN_MEM_READ: 섹션이 읽기가 가능하다는 것을 의미합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;이 특성들 이외에 전체를 알고 싶다면 아래 링크의 웹페이지 마지막 Characteristics를 확인하세요.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp;http://msdn.microsoft.com/en-us/library/windows/desktop/ms680341(v=vs.85).aspx&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;8. 상세분석을 바탕으로 만들어본&amp;nbsp;PEprint.exe&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;- 이론으로만 가지고 있으면 금방 까먹을 것 같아서 파이썬으로 간단하게 만들어봤습니다 :D&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 390px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2347284D545239120C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2347284D545239120C&quot; width=&quot;390&quot; height=&quot;563&quot; filename=&quot;1.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 389px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2335774D5452391330&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2335774D5452391330&quot; width=&quot;389&quot; height=&quot;641&quot; filename=&quot;2.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;9. 참고문헌&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;-Windows 시스템 실행파일의 구조와 원리 (이호동 저)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>아이티 :D/Reversing</category>
      <category>IT</category>
      <category>PE</category>
      <category>PE 정복</category>
      <category>PE구조</category>
      <category>reversing</category>
      <author>dragon82</author>
      <guid isPermaLink="true">https://dragon82.tistory.com/7</guid>
      <comments>https://dragon82.tistory.com/7#entry7comment</comments>
      <pubDate>Wed, 2 Nov 2016 14:55:04 +0900</pubDate>
    </item>
    <item>
      <title>RVA to RAW</title>
      <link>https://dragon82.tistory.com/6</link>
      <description>&lt;p&gt;PE 분석글을 쓰기에 앞서 RVA, RAW, VA에 대해서 포스팅을 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;컴퓨터는 한가지의 작업만 하는게 아니기에 메모리나 디스크의 주소공간들은 연속해서 사용되어지지 않습니다.&lt;/p&gt;
&lt;p&gt;때문에 사용가능한 주소공간들이 비연속적 (띄엄 띄엄) 존재하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 가상공간에 메모리를 만들어서 (32비트 환경에서는 4G의 크기를 가집니다) 거기서 연속된 주소공간을&amp;nbsp;&lt;/p&gt;
&lt;p&gt;재구성합니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;1. &amp;nbsp;VA (Virtual Address)&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;가상메모리상에서 연속된 주소공간을 가르킵니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;RVA + Imagebase 공식으로 구할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- Imagebase 값 (400000)&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em; text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 555px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27365B4D544F3B070F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27365B4D544F3B070F&quot; width=&quot;555&quot; height=&quot;147&quot; filename=&quot;imagebase.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- RVA 값 (1000)&lt;/p&gt;
&lt;p style=&quot;text-align: left; margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 357px; text-align: center; font-size: 9pt; line-height: 1.5;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2660CD37544F3B5820&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2660CD37544F3B5820&quot; width=&quot;357&quot; height=&quot;97&quot; filename=&quot;2.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center; font-size: 9pt; line-height: 1.5;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp; - RVA + Imagebase = VA 
값 (401000)&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em; text-align: left;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 571px; font-size: 9pt; line-height: 1.5; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/226C4736544F3B8823&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F226C4736544F3B8823&quot; width=&quot;571&quot; height=&quot;137&quot; filename=&quot;3.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;font-size: 9pt; line-height: 1.5; text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;2. RVA (Relative Virtual Address)&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;가상메모리에 로드된 파일에서의 상대적인 가상 주소값을 의미합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;물리메모리 =&amp;gt;&amp;nbsp;가상공간에&amp;nbsp;메모리를 할당해서&amp;nbsp;파일을 로드함 =&amp;gt;&amp;nbsp;가상메모리상의 로드된 파일에서 다시 0x00000000으로 시작하는 가상주소를 사용함&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;혹시 이해가 되실까요? .....ㅠㅠ&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;3. RAW&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;물리적인 장치속의 파일에서 주소값을 가르킵니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;RVA - VA + Point to raw data 가 구하는 공식입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;위 공식에서 VA + Point to raw data 는 section header속의 값입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;USER32.dll의 RAW값을 구해보겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;- RVA 값 (342EA)&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 638px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24504A33544F405733&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24504A33544F405733&quot; width=&quot;638&quot; height=&quot;91&quot; filename=&quot;4.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;- VA, Point to rawdata 값 (각 2d000)&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;해당 파일에서는 VA와 Point to raw data 값이 동일하네요.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;그리고 위 RVA값이 342EA인데, 해당값은 rdata 섹션내에 속하기 떄문에 rdata섹션에서&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;VA와 Point to raw data를 구했습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/23542333544F405730&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23542333544F405730&quot; width=&quot;640&quot; height=&quot;140&quot; filename=&quot;5.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;- RVA - VA + Point to raw data = RAW 값 (342EA)&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;해당 주소값에 USER32.dll이 존재하는걸 확인 할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 619px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/26573A33544F40572E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F26573A33544F40572E&quot; width=&quot;619&quot; height=&quot;39&quot; filename=&quot;6.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;!-- 중간 광고 삽입 --&gt;
&lt;br&gt;
&lt;div id=&quot;abc&quot;&gt;&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;4. PE파일의 Optional header 내에 Address of entry point 값은 무엇을 의미할까?&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;entry point 의 RVA값을 의미합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;5. 그렇다면 VA의 entry point를 구하려면?&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;Address of entrypoint + Imagebase가 구하는 공식입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;- Address of enrtypoint (28dca) + Imagebase (400000) = VA entrypoint(428dca)&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/22212741544F43611D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F22212741544F43611D&quot; width=&quot;640&quot; height=&quot;203&quot; filename=&quot;8.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp;- immunity debugger로 확인한 entry point값&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27150550544F430C0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27150550544F430C0F&quot; width=&quot;640&quot; height=&quot;123&quot; filename=&quot;9.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 524px; font-size: 9pt; line-height: 1.5;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25079850544F430C25&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25079850544F430C25&quot; width=&quot;524&quot; height=&quot;33&quot; filename=&quot;10.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;font-size: 9pt; line-height: 1.5;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;마무리&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;PE 상세분석중에 제가 개념들이 헷갈려서 정리를 하는 목적이 큽니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;PE분석기를 python으로 제작하고 있는데 상세분석하는 과정을 포스팅 할 예정입니다&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;순서를 보면 PE 상세분석중에 현재 포스팅이 올라왔어야 하는건데 ㅎㅎ&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;부족한 포스팅 읽어주셔서 매우매우 감사합니다 !&amp;nbsp;:)&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>아이티 :D/Reversing</category>
      <category>IT</category>
      <category>PE</category>
      <category>PE format</category>
      <category>PE구조</category>
      <category>RAW</category>
      <category>reversing</category>
      <category>RVA</category>
      <category>RVA to RAW</category>
      <category>System</category>
      <author>dragon82</author>
      <guid isPermaLink="true">https://dragon82.tistory.com/6</guid>
      <comments>https://dragon82.tistory.com/6#entry6comment</comments>
      <pubDate>Wed, 2 Nov 2016 14:54:45 +0900</pubDate>
    </item>
    <item>
      <title>Pcap 파싱하기</title>
      <link>https://dragon82.tistory.com/10</link>
      <description>&lt;p style=&quot;text-align: left;&quot;&gt;1. Pcap 파일이란 무엇인가?&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;-Packet capture의 약자로 네트워크 트래픽을 캡쳐하기 위한 API로 구성되어 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;윈도우 시스템에서는 Winpcap이며, 리눅스 시스템에서는 libpcap입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;네트워크 트래픽을 분석하기에 아주 용이한 라이브러리의 모음이라고 볼 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;-Pcap file format&lt;/p&gt;&lt;div style=&quot;margin-left: 2em; text-align: left;&quot;&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2410F540546C873A02&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2410F540546C873A02&quot; width=&quot;640&quot; height=&quot;22&quot; filename=&quot;스크린샷 2014-11-19 오후 9.00.40.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;[글로벌헤더]&amp;nbsp;+&amp;nbsp;[패킷헤더 + 패킷데이터] + [패킷헤더 + 패킷데이터] ......&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;[글로벌헤더]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/245EB633546C89A10D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F245EB633546C89A10D&quot; width=&quot;640&quot; height=&quot;131&quot; filename=&quot;스크린샷 2014-11-19 오후 9.08.52.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;*magic_number: pcap 시그니쳐이며, &quot;0xa1b2c3d4&quot;의 고정값을 가집니다. (32bit)&lt;/p&gt;
&lt;p&gt;*version_major, version_minor: pcap파일의 버전을 나타냅니다.(각 16bit)&lt;/p&gt;
&lt;p&gt;*thiszone:&amp;nbsp;GMT와 localT의 차이를 나타낸 필드. (32bit)&lt;/p&gt;
&lt;p&gt;*sigfig: 0으로 값이 고정되어 있습니다. (32bit)&lt;/p&gt;
&lt;p&gt;*snaplen: 캡쳐된 패킷의 길이를 나타냅니다. 보통은 65535값을 가집니다. (32bit)&lt;/p&gt;
&lt;p&gt;*network: 데이터 링크 타입을 나타냅니다 OSI7layer에서 2계층을 명시합니다. (32bit)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;[패킷헤더]&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/26161840546C8D921B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F26161840546C8D921B&quot; width=&quot;640&quot; height=&quot;91&quot; filename=&quot;스크린샷 2014-11-19 오후 9.09.03.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;*ts_sec: 패킷이 언제 캡쳐되었는지를 나타냅니다. (32bit)&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;*ts_usec: ts_sec을 microseconds로 나타낸 값입니다. (32bit)&lt;/p&gt;
&lt;p&gt;*incl_len: pcap에 저장된 패킷데이터의 길이를 나타냅니다. 이 값은 아래 설명 할 orig_len과&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp;글로벌헤더 내의 snaplen보다 결코 클 수 없습니다.&lt;/p&gt;
&lt;p&gt;*orig_len: 네트워크에서 캡쳐되었을때 패킷 데이터의 길이입니다. 만약 이 값과 incl_len의 값이 다르다면&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp;글로벌헤더 내의 snaplen의 값으로 패킷 사이즈가 결정됩니다.&lt;/p&gt;
&lt;p&gt;2. Pcap 파일을 알기위한 전초전&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;HxD를 이용하여 pcap속으로 들어가서 하나하나 살펴보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;pcap에서 첫번째 패킷데이터는 어디서부터 시작될까요?&lt;/p&gt;
&lt;p&gt;정답은 글로벌헤더+패킷헤더 만큼의 사이즈 이후부터 패킷데이터가 시작합니다.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px; text-align: center; font-size: 9pt; line-height: 1.5;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/261F2536546C95AC21&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F261F2536546C95AC21&quot; width=&quot;640&quot; height=&quot;153&quot; filename=&quot;s1.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center; font-size: 9pt; line-height: 1.5;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위 그림을 보시면 빨간 테두리로 둘러싸인 값들이 [글로벌헤더(24byte) + 패킷헤더(16byte)] 입니다.&lt;/p&gt;
&lt;p&gt;이 값 이후에 &quot; 00 1C 42 00 00 18 ......&quot; 시작되는 값들이 실제 패킷데이터 부분입니다.&lt;/p&gt;
&lt;p&gt;아래 그림에서 와이어샤크로 확인해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/22758E38546C98F52B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F22758E38546C98F52B&quot; width=&quot;640&quot; height=&quot;109&quot; filename=&quot;ㄴ3.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;[글로벌헤더(24byte) + 패킷헤더(16byte)] 이후에 나오는 값들과 위 그림에서 와이어샤크로 확인한 값과&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;동일한 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;text-align: center; font-size: 9pt; line-height: 1.5;&quot;&gt;즉 pcap file은 처음에 [글로벌헤더]가 나온이후&amp;nbsp;[패킷헤더 + 패킷데이터] + [패킷헤더 + 패킷데이터]의&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;text-align: center; font-size: 9pt; line-height: 1.5;&quot;&gt;과정을 반복하면서 마지막 패킷까지 이루어져 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;지금부터는 패킷데이터들을 살펴볼텐데 대표적으로&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;[Ethernet frame], [IP frame], [TCP frame]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;을 살펴보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-Ethernet frame: 데이터링크 계층에서 사용되는 대표적인 프로토콜&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/217AC843546C9C3C07&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F217AC843546C9C3C07&quot; width=&quot;640&quot; height=&quot;149&quot; filename=&quot;스크린샷 2014-11-19 오후 10.33.16.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*preamble: 호스트들과의 비트 동기화를 위해 존재합니다. 물리계층에서 추가되어졌습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*SFD: start of frame delimiter의 약자로 프레임의 시작을 알리는 필드입니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 다음 필드로 목적지주소 (DA)가 이어진다는 걸 알려줍니다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*Destination Address: 목적지 주소 입니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*Source Address: 출발지 주소 입니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*EtherType: 상위계층의 프로토콜 정보를 알려줍니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*Data: 데이터부분입니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*FCS: frame check sequence의 약자로 전송시에 수신측의 에러검출을 위해 존재합니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;color: rgb(123, 115, 102); font-family: 돋움, dotum, Tahoma, AppleGothic, sans-serif; line-height: 19px; margin-left: 2em; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;&lt;b&gt;// preamble, SFD, FCS는 패킷 캡쳐 범위 밖입니다.//&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: rgb(123, 115, 102); font-family: 돋움, dotum, Tahoma, AppleGothic, sans-serif; line-height: 19px; margin-left: 2em; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;&lt;b&gt;// DA , SA, EtherType은 Ethernet header부분에 해당됩니다//&lt;/b&gt;&lt;/p&gt;
&lt;!-- 중간 광고 삽입 --&gt;
&lt;br /&gt;
&lt;div id=&quot;abc&quot;&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p style=&quot;color: rgb(123, 115, 102); font-family: 돋움, dotum, Tahoma, AppleGothic, sans-serif; line-height: 19px; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: rgb(123, 115, 102); font-family: 돋움, dotum, Tahoma, AppleGothic, sans-serif; line-height: 19px; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: rgb(123, 115, 102); font-family: 돋움, dotum, Tahoma, AppleGothic, sans-serif; line-height: 19px; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;-IP frame: IP계층에서 사용되는 대표적인 프로토콜&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: rgb(123, 115, 102); font-family: 돋움, dotum, Tahoma, AppleGothic, sans-serif; line-height: 19px; margin-left: 2em; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;color: rgb(123, 115, 102); font-family: 돋움, dotum, Tahoma, AppleGothic, sans-serif; line-height: 19px; margin-left: 2em; text-align: center; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/23237C39546D73FC0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23237C39546D73FC0F&quot; width=&quot;640&quot; height=&quot;393&quot; filename=&quot;스크린샷 2014-11-19 오후 11.10.01.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*Version: 버전을 나타내는 필드로 현재는 4버전을 사용하고 있다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*Header Length: 헤더의 길이를 나타내는 필드로 20 ~ 60byte까지 가변적인 값을 가집니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;워드 단위로 헤더 길이를 표시합니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*Type Of Service: 서비스의 우선순위를 나타내는 필드이지만 IPv4에선 사용되지 않습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*Total Packet Length: IP패킷 전체의 길이를 바이트 단위로 나타냅니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;*Identifier: fragment 되었을때 어떤 원본 패킷에 일부인지를 확일 할 수 있는 식별자입니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Flags: 3비트의 크기를 가지는데 1번째 비트는 0으로 고정된 값을 가지며&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; 2번째 비트: 0과 1로 구분되며&amp;nbsp;0은 fragment 가능, 1은 fragment 불가능&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; 3번째 비트: 0과 1로 구분되며 0은 마지막 조각, 1은 뒤에 조각이 더 있음&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*fragment offset: 분할된 조각의 순서를 알려주는 필드이다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;분할된 조각의 시작점 위치에서 8을 나눈 값을 가지게 되는데 예를 들어&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;1500바이트의 패킷이 &amp;nbsp;512바이트의 패킷 3개로&amp;nbsp;fragment되었다고 가정할때&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;1번째 패킷은 0바이트 부터 시작하기에 fragment offset의 값이 0이되고&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;2번째 패킷은 512부터 시작하기에&amp;nbsp;512/8하면 fragment offset의 값이 64가 된다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Time to live: 간단하게 말하면 IP패킷의 수명으로 볼 수 있는데 , 1 ~ 255까지의 값을 가지며,&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp; 라우터를 지날 때 마다 1의 값이 감소한다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Protocol ID: 상위계층의 프로토콜 타입을 지정해주는 필드입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;1: ICMP&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;2: IGMP&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;6: TCP&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;17: UDP&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Header Checksum: 헤더에 대한 오류검출을 하는 필드입니다. 목적지에서 이 필드를 확인하여 결과가&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&amp;nbsp; &amp;nbsp;틀리다면 패킷을 버립니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Source IP Address: 출발지 IP주소입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Destination IP Address: 목적지 IP주소입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*IP Header Options: IP헤더의 필수적인 부분은 아닙니다. 그냥 옵션이 필요하다면 정의할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;// 별다른 옵션이 추가가 안된다면 기본적으로 20byte로 구성됩니다.//&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;-Tcp frame: 전송계층에서 사용되는 대표적인 프로토콜 중 하
나&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;IP가&amp;nbsp;목적지까지 패킷을 전송 후&amp;nbsp;TCP는&amp;nbsp;패킷의 누락&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;또는 순서의 정렬등을 책임집니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;때문에 Tcp는 신뢰성있는 프로토콜이라고 불리며, 연결지향적입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2734FE4D546D7E3E1E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2734FE4D546D7E3E1E&quot; width=&quot;640&quot; height=&quot;357&quot; filename=&quot;스크린샷 2014-11-20 오후 2.29.46.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;각 필드들을 설명하기 전에 MTU와 MSS에 대해서 간단히 설명하겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;//MTU: Maximum Transmission Unit의 약자로 한번의 프레임에 전송할 수 있는&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;최대크기의 데이터&amp;nbsp;또는 패킷이며, 보통은 1500의 크기를 가집니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;MSS: Maximum Segment size의 약자로 TCP가 한번에&amp;nbsp;전송 할 수 있는&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;최대크기의 데이터를 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; 이 값은 MTU값에 의해 좌우되는데 MSS = MTU - IPheader + Tcpheader 의 공식을 가집니다.//&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;각 필드들을 설명하겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Sourse Port: 출발지 포트주소입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Destination Port: 목적지 포트주소입니다.&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Sequence Number: 예로 1500byte 패킷을 전송할 때 MSS의 크기가 100이라고 하면 15개의&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;세그먼트로 쪼개져서 전송이 됩니다. 이때 Sequence Number가 각각의 세그먼트의&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;첫번째 바이트에 해당하는 값을 번호로 붙입니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;1번째 패킷은 0~99 까지니깐&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&quot;0&quot;, 2번째 패킷은 100~199니깐 &quot;100&quot; 3번째는 &quot;200&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Acknowledgement Number: 전송 받은 패킷에 대한 응답인데 위 예를 그대로 이어 가겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 14em;&quot;&gt;&amp;nbsp; &amp;nbsp; 1번째 패킷을 전송 받은 수신자는 0 ~ 99 까지의 데이터를 받았기때문에&lt;/p&gt;
&lt;p style=&quot;margin-left: 14em;&quot;&gt;&amp;nbsp; &amp;nbsp; 다음은 100 ~ 199까지의 데이터가 필요로 하게 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 14em;&quot;&gt;&amp;nbsp; &amp;nbsp; 그래서 100이라는 Ack Number를 응답패킷으로 보내게 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 14em;&quot;&gt;&amp;nbsp; &amp;nbsp; 즉 받은 패킷의 양 + 1의 값을 더하여 Ack number가 구성되는거죠&lt;/p&gt;
&lt;p style=&quot;margin-left: 14em;&quot;&gt;&amp;nbsp; &amp;nbsp; Sequence 와 Ack Number가 이해가 되셨나요??..되셨으면 좋겠어요&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*HLEN: TCP세그먼트의 길이를 나타냅니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Reserved: 예약필드인데 나중에 사용하기 위해 예약되어 있으며 0으로 세팅되어 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Codebits: 6개의 비트로 이루어져 있고 세그먼트의 용도와 내용을 결정하는 필드입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;URG: 긴급 데이터라는 뜻이며, 이 비트값이 채워지면 순서에 상관없이 먼저 송신됩니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;ACK: Ack number의 유무를 알리는 비트이며, 0은 Ack num이 없다는 뜻이며 1은 있다는 뜻&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;&amp;nbsp; 입니다.&amp;nbsp;SYN패킷 이후 세그먼트들은 전부 이 비트값이 1로 채워집니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;PSH: 이 비트값이 세팅되면 수신측은 받는 즉시 Application단으로 송신해야합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;RST: 연결장비에 문제가 생겼으므로 초기화를 진행해야 한다는 뜻이며, 이 값이 채워지면&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;&amp;nbsp; 연결이 종료됩니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;SYN: TCP연결을 할 때 양 호스트간 순서번호를 동기화 하는 목적으로 사용됩니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;FIN: 송신측이 데이터 송신을 마쳤다는 뜻이며 연결 종료를 요청한다는 뜻입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Window Size: 흐름제어를 위해 사용되는 필드로 상대편에게 자신의 여유 버퍼크기를 지속적으로&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&amp;nbsp; &amp;nbsp;알려주는 역할을 합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*CheckSum: 전송중에 Tcp segment 데이터는 훼손이나 변조가 될 수가 있는데 이를 확인하기 위한&lt;/p&gt;
&lt;p style=&quot;margin-left: 6em;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; 필드입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Urgent Pointer: Codebits의 URG비트와 같이 사용되며, 긴급데이터의 마지막 바이트 순서번호입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Option &amp;amp; Padding: Option 필드는 말그대로 Tcp 헤더에 옵션을 추가하는거고 Padding은&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;이 Option필드가 32의 배수가 되지 않으면 0을 추가하여 배수가 되도록 정렬하는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 10em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;역할을 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;// 별다른 옵션이 추가가 안된다면 기본적으로&amp;nbsp;20byte로 구성됩니다. //&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;3. Pcap parser 만들기!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;제가 만들 파일은 TCP에서 80port(http) 통신할때 전송하는 파일을 제가 원하는 폴더에&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;드랍시키는것입니다. 과정중에 각 패킷별로 Layer정보도 print 하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;그럼 하나하나 파싱을 시작해볼게요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;1) Layer2 information&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;Lay2는 Ethernet frame속의 Ethernet header 필드를 사이즈에 맞게 파싱합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;목적지주소(6byte) + 출발지주소(6byte) + 상위계층 프로토콜타입 (2byte) 입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;위에서도 설명했듯이 패킷데이터는 [글로벌헤더 + 패킷헤더] 다음에 존재합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;1번째 패킷은&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;[글로벌헤더 + 패킷헤더] + [해당 패킷 데이터의 길이] 만큼의 값을 가지겠네요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;2번째 패킷은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;[글로벌헤더 + 패킷헤더] + [1번째&amp;nbsp;패킷&amp;nbsp;데이터의 길이] 만큼의 값 다음에 존재하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/22593035546D9AFA29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F22593035546D9AFA29&quot; width=&quot;640&quot; height=&quot;204&quot; filename=&quot;스크린샷 2014-11-20 오후 4.40.16.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;//배열을 선언하여 각 패킷의 순서, 길이,&amp;nbsp;데이터를 구하는 코드입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;idx라고 표현한 값이 파일 사이즈보다 작을때까지 (즉 데이터사이즈가 파일사이즈보다 커지기 전까지)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;pkg_list()는 푸틴이 진행되면서 1번째 인자로 인덱스를, 2번째 인자로 길이를, 3번째 인자로 데이터를&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;저장하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;그리고&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;idx에는 idx + PKG_H_SIZE(패킷 헤더사이즈) + pkg_length(패킷 데이터길이)가&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;더해지면서 각 패킷의 순서를 매겨가게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27365638546D9E7737&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27365638546D9E7737&quot; width=&quot;640&quot; height=&quot;219&quot; filename=&quot;스크린샷 2014-11-20 오후 4.55.09.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;목적지주소:&amp;nbsp;data[0:6]&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;출발지주소:&amp;nbsp;data[6:12]&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;상위계층 프로토콜 타입: data[12:24]&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/236E463B546DA0941D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F236E463B546DA0941D&quot; width=&quot;640&quot; height=&quot;215&quot; filename=&quot;스크린샷 2014-11-20 오후 5.00.52.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/235BCB3B546DA09531&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F235BCB3B546DA09531&quot; width=&quot;640&quot; height=&quot;91&quot; filename=&quot;스크린샷 2014-11-20 오후 5.02.52.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;1번째 사진은 와이어샤크로 확인한 1번째 패킷의 이더넷 부분입니다.&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;목적지주소와 출발지주소 그리고 프로토콜 타입의 값들과 아래 사진에서 보시는&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;제가 파싱한 값과 일치하는걸 확인 할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;2) Layer 3 information&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;Lay3는 IP&amp;nbsp;frame속의 IP&amp;nbsp;header 필드를 사이즈에 맞게 파싱합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;IP정보는&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;[글로벌헤더 + 패킷헤더] + [Ehternet Size] 다음에 위치하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;여기서 Ethernet header는 위에서도 언급했듯이 패킷 데이터 =&amp;nbsp;Ethernet frame속의 Ethernet header필드입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;data[0:14]까지가 Ethernet 정보를 담고 있기때문에 data[14:34]까지가 IP 정보를 가지고 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;하지만 저희는 Total packet&amp;nbsp;length, protocol type, source ip, destination ip 필드만 &amp;nbsp;프린트하도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/260B864B546DAE7303&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F260B864B546DAE7303&quot; width=&quot;640&quot; height=&quot;426&quot; filename=&quot;스크린샷 2014-11-20 오후 6.03.08.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;Total Packet Length: data[ETHER_SIZE+2:ETHER_SIZE+4]&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;source IP: data[ETHER_SIZE+12:ETHER_SIZE+16]&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;destination IP: data[ETHER_SIZE+16:ETHER_SIZE+20]&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;protocol IP: data[ETHER_SIZE+9:ETHER_SIZE+10]&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/217D1A3A546DB20503&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F217D1A3A546DB20503&quot; width=&quot;640&quot; height=&quot;309&quot; filename=&quot;s1s1.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 628px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27570C4D546DAF1A10&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27570C4D546DAF1A10&quot; width=&quot;628&quot; height=&quot;167&quot; filename=&quot;스크린샷 2014-11-20 오후 6.04.39.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;Total Packet Length = 0x005f = int(95)&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;source IP = 0x0a.d3.37.03 = int(10.211.55.3)&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;destination IP = 0x6d.65.48.1b = int(109.101.72.27)&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;protocol ID = 0x11 &amp;nbsp;= int(17)&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;값들이 정확하게 파싱되었습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;참고로 위 IP들은 쉬프트연산을 이용하여 오른쪽으로 이동시켜줘야합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;왜냐면 0a.d3.37.03 으로 끊어서 형변환을 해서 프린트 하기 위함이죠&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;아니면 0x0ad33703이 한번에 변환되서 엄청난 값이 프린트될거에요.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;3) Layer 4 information&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;Lay4는 TCP정보를 파싱합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;TCP정보는&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;[글로벌헤더 + 패킷헤더] + [Ehternet Size] + [IP Size]&amp;nbsp;다음에 위치하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;source port, destination port, sequence number, code bits(flag information)필드를 프린트 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/243BAC34546DB93B2A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F243BAC34546DB93B2A&quot; width=&quot;640&quot; height=&quot;569&quot; filename=&quot;스크린샷 2014-11-20 오후 6.47.37.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;margin-left: 2em;&quot;&gt;source port: data[ETHER_SIZE+IP_SIZE:ETHER_SIZE+IP_SIZE+2]&lt;/div&gt;&lt;div style=&quot;margin-left: 2em;&quot;&gt;dst port: data[ETHER_SIZE+IP_SIZE+2:&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;ETHER_SIZE+IP_SIZE+4]&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;sequence number: 시퀀스 넘버는 와이어샤크상에서 특별한 값을 가집니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 10em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;보안상의 문제로 인하여 랜덤한 값 4바이트가 바이너리에 저장되게 되는데요&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 10em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;어차피 그래도 특정한 값은 들어가니깐 그 값을 기준으로 넥스트 시퀀스 넘버와&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 10em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;에크넘버를 구하면 됩니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 10em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;넥스트 시퀀스 넘버를 구하는 공식은 시퀀스넘버 + segment length 값입니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 10em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;와이어샤크로 확인해보겠습니다.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 10em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 2em; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px; text-align: center; font-size: 9pt; line-height: 1.5;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/22425D41546DC4E412&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F22425D41546DC4E412&quot; width=&quot;640&quot; height=&quot;249&quot; filename=&quot;1ㅂ.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center; font-size: 9pt; line-height: 1.5;&quot;/&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25292041546DC4E52E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25292041546DC4E52E&quot; width=&quot;640&quot; height=&quot;255&quot; filename=&quot;2ㅂ.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;첫번째&amp;nbsp;사진부터 살펴보시면 Tcp segment length가 &quot;604&quot;이고 Sequence Num이 &quot;1&quot;입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;그리고 Next Sequence Num은 &quot;605&quot;라고 되어있습니다. 바이너리 값을 한번 확인해주세요&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;시퀀스 넘버인 00 00 00 01이 아닌 c5 9a 86 9e 라는 랜덤한 값이 들어가 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;그럼 두번째 사진을 살펴보실까요?&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;2번째로 단편화된 패킷입니다. 시퀀스넘버가 &quot;605&quot;부터 시작되는걸 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;그리고 바이너리 값도 아까 첫번째 사진에서 본 값에서 헥스값으로 &quot;604&quot;만큼의 값이 증가한 걸&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;알 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;그럼 Ack Num은 어떻게 될까요?&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;1번째로 단편화된 패킷에서 시퀀스 넘버는 &quot;1&quot;, 당연히 Ack num은 &quot;0&quot;이겠죠?&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;Next Sequence값이 &quot;605&quot;이기 때문에 1번째 패킷을 받은 수신자측은 &quot;605&quot;의 Ack num을&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;응답 패킷에 담아 보내게 됩니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/273BE139546DC6AD12&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F273BE139546DC6AD12&quot; width=&quot;640&quot; height=&quot;266&quot; filename=&quot;3ㅂ.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&quot;605&quot;의 Ack num을 응답패킷으로 날리는걸 확인 할 수 있습니다.&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;바이너리상에 Ack num은 2번째 사진에서 Sequence Num인 &quot;605&quot;와 동일하겠죠?&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;동일하네요.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;아까 위 Tcp frame에서 확인 한 내용입니다. 하지만 실제로 이 부분이 제일 까다롭습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;단편화된 세그먼크들을 순서에 맞게 정렬하여 하나의 파일로 만드는 작업이 제일 시간도&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;많이 걸리고 고생했습니다..ㅠㅠ 제가 완전 초보라서 진짜 어떻게 해야 할지 막막했습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;Sequence 와 Ack number는 이렇게 넘길게요&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;Code bits(Flag information): data[ETHER_SIZE+IP_SIZE+13:ETHER_SIZE+IP_SIZE+14]&lt;/p&gt;
&lt;p style=&quot;margin-left: 14em;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;flags는&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;FIN &lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;= 0x01,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;SYN&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;= 0x02,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;RST&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;= 0x04,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;PSH&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;= 0x08&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 14em;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;ACK&amp;nbsp;= 0x10,&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;URG&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;= 0x20&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 14em;&quot;&gt;&amp;nbsp; &amp;nbsp; 이렇게 변수를 선언한 후 바이너리상에 저장된 flag의 합을 얻어와서&lt;/p&gt;
&lt;p style=&quot;margin-left: 12em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;위 변수 값들이 속해있으면 print 되도록 구성했습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24288D3F546DCCD629&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24288D3F546DCCD629&quot; width=&quot;640&quot; height=&quot;336&quot; filename=&quot;스크린샷 2014-11-20 오후 8.11.55.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;TCP정보를 포함하고 있는 패킷을 확인해보겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;flag값이 SYN 하나밖이네요. 아마 처음 시작하는 패킷인가 봅니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;그럼 Code bits 값이 0x02가 바이너리상에 저장되어 있겠네요 와이어샤크로 확인해보겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/274DA935546DCDE92C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F274DA935546DCDE92C&quot; width=&quot;640&quot; height=&quot;306&quot; filename=&quot;1ㅇ.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;와이어샤크에서 확인 한 결과 정확하게 SYN값이 저장되어 있네요.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이렇게해서 Layer4까지 파싱해서 print하는건 완료되었습니다.&lt;/p&gt;
&lt;p&gt;이젠 TCP 80port http상에서 전송중인 파일을 로컬로 저장시키는 작업을 진행하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;4. pcap상에서 전송되는 파일 로컬로 저장시키기!&lt;/p&gt;
&lt;p&gt;이번 작업에서는 아래 2가지를 중점으로 진행하겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 단편화된 세그먼트들 순서 정렬하여 하나의 파일로 합치기&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 각 파일의 시그니쳐를 저장하고 그 시그니쳐를 기반으로 파일의 종류를 결정하기&lt;/p&gt;
&lt;p&gt;http1.1에서는 커넥션이 끊어지지않고 연결되어있는데 그렇다면 본문내용이 얼마만큼인지,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;어디가 끝인지를 어떻게 확인할까요?&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;2가지 방식이 있는데 1번째는 Contents-Length를 보여주는 방식입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;1) 단편화된 세그먼트 정렬하여 하나의 파일로 합치기&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*단편화된 세그먼트들이 최종적으로 하나로 합쳐졌을때 Contents-Length 값은 단편화된 세그먼트들을&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;모두 합친값.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*헤더값을 제외하고 데이터만 뽑기 위해서는&amp;nbsp;&quot;\r\n\r\n&quot; 값 이후의 값들을 Dump합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;http헤더값을 제외한 후 진짜 데이터시작부분 (파일 시그니쳐 부분)부터 Dump해야&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;데이터만 추출되기 때문입니다. http헤더 마지막에 0d0a = &quot;\r\n&quot;이 나오고 파일시그니쳐 앞에&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;0d0a = &quot;\r\n&quot;이 한번더 나오는데 즉 2번연속 0d0a0d0a = &quot;\r\n\r\n&quot;값 이후로 파일시그니쳐가&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;바로 시작됩니다. 이 포인트를 기준으로 잡습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*len(dump)의 값을 변수로 잡아줍니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*Next Sequence Number를 구하는 공식은 아래와 같습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;현재 패킷의 Sequence Number + Total Packet Length - [글로벌헤더 + 패킷헤더]입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;즉 현재 패킷에서 Next Sequence Number를 구할 수가 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;와이어샤크상에선 표시되지만 정작 바이너리상에선 Next Seqence Number는 저장되어있지 않습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*패킷 카운트만큼 반복 루틴을 이용하여 현재 시퀀스 넘버와 넥스트시퀀스 넘버가 같다면&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;현재 dump file에 해당 찾은 패킷의 dump를 더하고 루틴을 계쏙해서 반복해나갑니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;언제까지 반복할까요?&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;Contents-Length와 l&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;en(dump)의 값이 같아질떄까지 반복합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;저 두 값이 같아졌다는 말은 단편화된 세그먼트들이 최종적으로 합쳐졌다는 의미입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;여기서 break문을 걸고 파일을 로컬로 저장하면 완료입니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27522833546DE0D716&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27522833546DE0D716&quot; width=&quot;640&quot; height=&quot;230&quot; filename=&quot;con-length.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;위 사진은 &amp;nbsp;단편화된 세그먼트들이 최종적으로 합쳐졌을때의&amp;nbsp;Contents-Length값입니다.&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;확인해보도록 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/26713834546DE16531&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F26713834546DE16531&quot; width=&quot;640&quot; height=&quot;738&quot; filename=&quot;스크린샷 2014-11-20 오후 8.51.04.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24049D34546DE1661E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24049D34546DE1661E&quot; width=&quot;640&quot; height=&quot;159&quot; filename=&quot;스크린샷 2014-11-20 오후 8.50.42.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;위 Content-Length값과&amp;nbsp;와이어샤크로 확인한 9992번째 패킷의 Contents-length값이 &quot;2059829&quot;로&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;동일한 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;넥스트 시퀀스 넘버를 가진 패킷을 찾으면 &quot;\r\n\r\n&quot;이후로 dump를 뜨고 기존의 dump에 더해주는 과정을 계속 반복합니다&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;Content length와 len(dump)값이 같아 질 때까지.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;같아지면 로컬에 파일을 저장합니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/254EA333546DE0D919&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F254EA333546DE0D919&quot; width=&quot;640&quot; height=&quot;132&quot; filename=&quot;RNRN.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;위 사진은 실제로 http헤더의 마지막에 &quot;\r\n\r\n&quot;이 존재하는 모습입니다 이후로 데이터만 존재하게 됩니다.&lt;/p&gt;
&lt;p&gt;2)file Signature&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;*&amp;nbsp;http://forensic-proof.com/archives/300 에서 파일시그니쳐들을 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/237BBC43546DE3A70D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F237BBC43546DE3A70D&quot; width=&quot;640&quot; height=&quot;685&quot; filename=&quot;스크린샷 2014-11-20 오후 9.12.17.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;예로 위의 시그니쳐들을 전역 변수로 선언하였습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/226BA343546DE3A92C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F226BA343546DE3A92C&quot; width=&quot;640&quot; height=&quot;386&quot; filename=&quot;스크린샷 2014-11-20 오후 9.49.51.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;시그니쳐를 찾는 함수입니다.&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&quot;\r\n\r\n&quot;을 분기점으로 이후에 바로 파일 시그니쳐가 나오기때문에 위와같이 코드를 작성하였습니다.&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;예로 png mp4 gif mp3 파일만 등록해놨습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이렇게 프로그램을 구성하고 최종적으로 pcap속의 파일들을 추출 해봤습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/23456641546DE4AF32&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23456641546DE4AF32&quot; width=&quot;640&quot; height=&quot;661&quot; filename=&quot;스크린샷 2014-11-20 오후 9.54.07.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;패킷속에 gif png파일들은 다 추출되네요..&lt;/p&gt;
&lt;p&gt;시그니쳐들을 더 추가하시면 그리고 패킷속에 해당 파일들이 존재한다면 다 추출이 될거같습니다.&lt;/p&gt;
&lt;p&gt;파일의 이름도 파일 종류별로 폴더에 정리하는것도 해주면 좋겠다는 생각이 듭니다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;여기까지 pcap파일의 구성과 각각의 내용을 파싱해보고 또 전송된 파일들을 로컬로 저장시키는것 까지&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;해보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;많이 부족하고 두서도없고 정리도 잘안되어있지만 열심히 했으니 혹시라도 정말&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이 포스팅을 보고 참고를 하는 분들이 계시다면 얼마나 감사할까요&lt;/p&gt;
&lt;p&gt;너무 허접해서 소스 전부를 못올리는점 양해부탁드리고&lt;/p&gt;
&lt;p&gt;이렇게 포스팅을 마치도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;감사합니다..^^&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 8em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;color: rgb(123, 115, 102); font-family: 돋움, dotum, Tahoma, AppleGothic, sans-serif; line-height: 19px; margin-left: 2em; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: rgb(123, 115, 102); font-family: 돋움, dotum, Tahoma, AppleGothic, sans-serif; line-height: 19px; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 26px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>아이티 :D/Network</category>
      <author>dragon82</author>
      <guid isPermaLink="true">https://dragon82.tistory.com/10</guid>
      <comments>https://dragon82.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 2 Nov 2016 14:54:07 +0900</pubDate>
    </item>
  </channel>
</rss>