<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Kw0n5an.log</title>
        <link>https://velog.io/</link>
        <description>티스토리로 옮김</description>
        <lastBuildDate>Mon, 16 Mar 2026 07:19:40 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Kw0n5an.log</title>
            <url>https://velog.velcdn.com/images/is_kwonhan_ok/profile/2aa114c4-1753-461e-97be-2cc32b979b51/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. Kw0n5an.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/is_kwonhan_ok" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[디지털 포렌식 정보 수집 (진짜로 정보 수집용)]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EB%94%94%EC%A7%80%ED%84%B8-%ED%8F%AC%EB%A0%8C%EC%8B%9D-%EC%A0%95%EB%B3%B4-%EC%88%98%EC%A7%91-%EC%A7%84%EC%A7%9C%EB%A1%9C-%EC%A0%95%EB%B3%B4-%EC%88%98%EC%A7%91%EC%9A%A9</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EB%94%94%EC%A7%80%ED%84%B8-%ED%8F%AC%EB%A0%8C%EC%8B%9D-%EC%A0%95%EB%B3%B4-%EC%88%98%EC%A7%91-%EC%A7%84%EC%A7%9C%EB%A1%9C-%EC%A0%95%EB%B3%B4-%EC%88%98%EC%A7%91%EC%9A%A9</guid>
            <pubDate>Mon, 16 Mar 2026 07:19:40 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>국과수 </p>
<ul>
<li>석사 이상 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/dee8749e-8878-4138-af90-ad5231365717/image.png" alt=""></li>
<li>한능검 2급 이상 가점 </li>
<li>영어 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/b86645b0-dc70-4810-9e33-b6c50dcf574c/image.png" alt=""> <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/775fcf82-27ce-4437-8146-fe0de4e14de7/image.png" alt=""></li>
</ul>
</li>
<li><p>지엠디 소프트, FRA Korea</p>
</li>
</ul>
<hr>
<h3 id="담당-업무">담당 업무</h3>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/61384218-c821-4d2b-9cd1-c09806e6c32a/image.png" alt=""> <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/fc159769-96f8-4a76-b0e7-3afbcd911468/image.png" alt=""> <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/cd6cfc69-c311-471a-ae6d-53787ef3ee3b/image.png" alt=""></p>
<h3 id="자격요건">자격요건</h3>
<ul>
<li>리버스 엔지니어링 분석</li>
<li>도구 사용 경험<ul>
<li>IDA, 기드라, GDB, 프리다 </li>
<li>포렌식 하드웨어, EnCase, AXIOM, X-Ways, FTK</li>
</ul>
</li>
<li>python, C, java</li>
<li>Linux, Windows 환경에 대한 기본적인 이해</li>
<li>파일 시스템 구조 &amp; OS 아티팩트에 대한 기초 지식 </li>
</ul>
<h3 id="우대사항">우대사항</h3>
<ul>
<li>시스템 해킹 관련 CTF</li>
<li>관련 자격증 <ul>
<li>포렌식전문가</li>
<li>정보처리기사</li>
<li>정보보안기사</li>
</ul>
</li>
<li>이디스커버리 (미국 민사소송 증거개시방법?)<ul>
<li>...</li>
</ul>
</li>
</ul>
<hr>
<p>생각보다 문서작성 능력이 중요한듯... </p>
<ul>
<li>대학원 </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[디지털 증거 데이터 수집 및 분석]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EB%94%94%EC%A7%80%ED%84%B8-%EC%A6%9D%EA%B1%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%88%98%EC%A7%91-%EB%B0%8F-%EB%B6%84%EC%84%9D-%EB%94%94%EC%8A%A4%ED%81%AC-%EC%9D%B4%EB%AF%B8%EC%A7%95-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%8D%A4%ED%94%84</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EB%94%94%EC%A7%80%ED%84%B8-%EC%A6%9D%EA%B1%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%88%98%EC%A7%91-%EB%B0%8F-%EB%B6%84%EC%84%9D-%EB%94%94%EC%8A%A4%ED%81%AC-%EC%9D%B4%EB%AF%B8%EC%A7%95-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%8D%A4%ED%94%84</guid>
            <pubDate>Wed, 11 Mar 2026 16:40:17 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>❗ 이 글은 Dreamhack의 &#39;Digital Forensics Specialist&#39;과정과 Inflearn의 &#39;기초부터 따라하는 디지털포렌식&#39; 강의를 바탕으로 공부하며 정리한 것입니다.</p>
</blockquote>
<h1 id="디스크-이미징">디스크 이미징</h1>
<p>FTK Imager 실행 후 Create Disk Image &gt; Physical Drive </p>
<blockquote>
</blockquote>
<ul>
<li>Physical Drive : 물리적인 드라이브(디스크)</li>
<li>Logical Drive : 논리적인 드라이브(드라이브)</li>
<li>Image File : 디스크 이미지 파일<blockquote>
<blockquote>
<p>💡 디스크와 드라이브 
Disk : 물리적으로 형태를 지닌 저장매체. HDD, SSD...
Drive : 논리적으로 구분되는 저장공간. C드라이브, D드라이브... 하나의 디스크가 여러개의 드라이브를 가지기도함</p>
</blockquote>
</blockquote>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/2bed1c7f-9658-4c94-aaf9-cb4f61a400bd/image.png" alt=""> 디스크 전체를 스캔뜨는 것이기 때문에 용량 작은 쪽이 시간이 덜걸린다고 해서 USB를 사용해줬다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/f75e1f93-0f6d-42b1-b4f2-61d8230ef502/image.png" alt=""> Add를 눌러서 이미지 타입을 정해주는데 보통 <strong>Raw</strong>타입이나, <strong>E01</strong>을 많이 쓰는 편이다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/f4199410-c46b-41b4-b586-ac2e44f0413a/image.png" alt=""> Image Fragment Size를 0으로 설정해준다. 이미지 파일이 크기 때문에 쪼개어 저장할 수 있는데, 이 값이 0이라면 쪼개지 않겠다는 뜻이다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c7eca93f-5b23-45a7-b4bc-8d45a06c551b/image.png" alt=""> 25분정도 걸렸다. 이미지는 같은 드라이브에는 저장이 되지 않으니 주의하자.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/344c65cf-0a4f-4275-b978-512864f87b34/image.png" alt=""> 완료 되었다!
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/a37442cd-7d4d-4f4f-af5d-3a707ab078ac/image.png" alt=""></p>
<h2 id="디스크-이미징-vs-디스크-복제-vs-복사">디스크 이미징 vs 디스크 복제 vs 복사</h2>
<ul>
<li><p>디스크 이미징 
: 디스크 이미지 파일이 생성됨. 저장매체 단위로 데이터를 옮김</p>
</li>
<li><blockquote>
<p>원본의 물리적 섹터를 내용 그대로 사본 물리섹터로 똑같이 복사하는 것. 슬랙공간과 비할당 영역도 복사되기 때문에 삭제된 데이터 복구 가능.
이미징은 파일형태기에 배포 및 검증이 쉽다. </p>
</blockquote>
</li>
<li><p>디스크 복제 
: 원본 저장매체와 동일한 디지털 데이터를 가지는 복사본 저장매체를 만드는 것. 복사본 저장매체가 생성됨. 저장매체 단위로 데이터를 옮김. 파일의 내용 + 기본정보 + 추가적인 정보(파일이 저장된 섹터 번호...)까지 옮김</p>
</li>
<li><blockquote>
<p>원본 내 물리적인 섹터를 내용 그대로 사본 물리섹터로 똑같이 복사하는 것. 원본과 <strong>똑같이</strong> 복사되기에 삭제된 데이터 복구 가능(슬랙공간, 지워진 데이터도 포함) *Wiping </p>
</blockquote>
</li>
<li><p>복사 
: 파일/폴더 단위의 디지털 데이터를 별개의 저장매체에 복사하는 것. 저장매체 중 일부의 데이터만을 옮기는 방법. 단순히 <strong>파일의 내용</strong>과 기본 정보만 옮김 (파일명, 내용, 용량...)
<em>-&gt; 드래그 앤 드롭 그거 맞다. 파일 내용만 복사하기에 삭제된 데이터는 복구 못한다</em></p>
</li>
</ul>
<blockquote>
<p>❓ 슬랙 공간과 비할당 영역 </p>
</blockquote>
<ul>
<li>슬랙공간은 데이터가 클러스터 단위로 저장되면서 발생하는 낭비 공간이다. 클러스터 단위를 4KB라고하자. 파일크기가 1KB여도 클러스터를 할당해주는데, 남는 3KB의 공간이 슬랙공간이다. 파일시스템은 &#39;파일이 점유중(사용중)&#39;으로 인식한다. 이전에 해당 클러스터를 사용했던 파일의 파편이 그대로 남아있을 수 있다.</li>
<li>비할당 영역은 할당되지 않은 영역이다. 파일을 삭제했거나 저장된 것이 없는 공간인데, 이 구역에 새파일을 저장하게 되면 덮어쓰기가 일어난다. 파일을 삭제해도 실제 데이터는 덮어쓰기 전까지 지워지지 않기 때문에 삭제된 파일의 데이터가 남아있을 수 있다.</li>
</ul>
<h1 id="디스크-마운트">디스크 마운트</h1>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/ff7acb41-e1f3-44cc-86b3-5a4849fa3edd/image.png" alt=""> 마운트를 한 모습이다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/35e20897-e71b-42e3-912e-674fd554dbbf/image.png" alt=""></p>
<blockquote>
<p>마운트 : 디스크 이미지를 컴퓨터에 붙이는 것. 하나의 파일을 하나의 드라이브처럼 인식하게끔 컴퓨터에 붙임 </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/7307fca9-e4bc-44bb-8bd0-395c50646658/image.png" alt=""> Add Evidence에서 마운트한 디스크를 추가할 수 있다. </p>
<h1 id="메모리-덤프">메모리 덤프</h1>
<p>메모리 덤프는 메모리에 저장된 휘발성 데이터를 <strong>비휘발성 데이터</strong>로 저장한 데이터. 
메모리 덤프를 수행한 시각에 메모리에 저장된 데이터만이 메모리 덤프의 결과가 됨
→ 메모리 덤프는 사건 발생 이후 최대한 빨리 하는 것이 중요</p>
<blockquote>
<p>💡 비휘발성 데이터만 저장되는 것은 아니다.</p>
</blockquote>
<p>메모리 덤프 파일에서 데이터를 분석하는 것을 <strong>메모리 포렌식</strong>이라고함.</p>
<pre><code class="language-bash">.\winpmem_mini_x64_rc2.exe mem.raw</code></pre>
<p>를 통해서 메모리 덤프를 수행할 수 있다. cmd는 관리자 권한으로 실행하고, exe가 있는 디렉토리에서 command를 입력해야한다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/ed0474ef-23ce-48c5-85ff-23c80adc17a6/image.png" alt=""> 덤프가 완료되면 파일은 exe가 있는 디렉토리에 생성된다. </p>
<blockquote>
<p>덤프파일의 크기가 장착된 RAM보다 큰 이유
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/d9509214-39ec-4ab6-ade0-6ca8409fcfc2/image.png" alt=""> <code>win + R</code>에서 <code>msinfo32</code>를 찾아 들어가면 메모리 크기를 볼 수 있다. 메모리 덤프는 일반적으로 가상 주소 공간의 전 영역을 읽어와 하나의 파일로 만드는 것이기에 RAM용량보다 크기가 크다. (크기는 도구에 따라 다를 수 있음)</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/b64b5ec6-23e8-4a02-9357-5f309b35d5bb/image.png" alt=""> HxD에서 파일을 열어서 아까 쳐두었던 단어를 찾으면 아까 쳤던 내용을 확인할 수 있다. </p>
<hr>
<h1 id="해시-함수">해시 함수</h1>
<p>HashCalc를 사용해도 되지만, 한번에 하나의 파일만 가능하다. 
Powershell을 사용할 수 있는데, 여러 파일 선택을 지원한다. </p>
<pre><code class="language-bash">Get-FileHash &lt;FileName&gt; -Algorithm &lt;Algorithm&gt; | Format-List</code></pre>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/0f179b5b-17a4-4224-9076-75112fbd3525/image.png" alt=""></p>
<blockquote>
<p>💡 디지털 포렌식 과정에서 수집한 데이터에 대한 해시값 계산 시, 안전한 해시 함수를 사용하지 않으면, 추후 법정에서 무결성을 증명할 때 걸림돌이 될 수 있다.</p>
</blockquote>
<h2 id="md5">MD5</h2>
<ul>
<li>가장 간단하면서 많이 사용. 다른 함수들에 비해 값이 짧은 편인데, 이는 곧 그만큼 안정성이 떨어지며 충돌 저항성이 낮다는 것이다. </li>
<li>출력값은 128bit(16byte)이다. 보고서 작성 시 MD5를 사용하는 것은 권장하지X<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/f1d4f255-4042-4432-b2e8-e9cccba92274/image.png" alt=""><blockquote>
<p>💡 16byte 해시값만 보고 해시 함수를 유추해야 하는 경우가 있기에, 각 해시 함수의 출력 길이를 알 필요가 있다. </p>
</blockquote>
</li>
</ul>
<h2 id="shasecure-hash-algorithm">SHA(Secure Hash Algorithm)</h2>
<ul>
<li>MD5 이후 활발하게 쓰인 해시함수는 SHA-1</li>
<li>현재 가장 많이 사용되는 해시함수는 SHA-2 계열의 함수로, 출력 길이에 따라 SHA224, SHA256, SHA384, SHA512가 있음</li>
</ul>
<hr>
<h1 id="디지털-데이터">디지털 데이터</h1>
<h2 id="리틀-엔디언">리틀 엔디언</h2>
<p>컴퓨터가 데이터를 저장할 때는 빅 엔디언(Big Endian)방식과 리틀 엔디언(Little Endian) 방식이 존재. 
리틀 엔디언은 작은 비트의 바이트부터 메모리에 저장하는 방식이다. *str문자열은 엔디언 형식에 상관없이 동일 
-&gt; <code>0x01234567</code> 을 메모리에 저장한다면 0x67 0x45 0x23 0x01 순으로 저장됨</p>
<ul>
<li>Windows 운영체제에서는 대부분 Intel기반 CPU아키텍쳐로 구성되어있고, Intel등 상당수의 CPU아키텍쳐가 리틀엔디언 방식을 따름 </li>
<li>파일 시스템/파일 구조를 분석할 때 리틀 엔디언 표현 방식으로 값을 읽는 경우가 많음 <blockquote>
<p>💡 파일 헤더 시그니처 영역은 예외적으로 리틀 엔디언을 적용하지 않고 보이는 대로 읽음</p>
</blockquote>
</li>
</ul>
<h2 id="ascii-인코딩">ASCII 인코딩</h2>
<p>ASCII 테이블에 따라 값을 문자로 변환하는 인코딩. 
HxD로 파일을 열어보면 우측 Decoded text 영역에서 파일과 관련한 정보를 얻을 수도 있음 </p>
<ul>
<li>줄바꿈 : <code>0xA</code>, <code>0xD</code> (Windows <code>0xD 0xA</code>, Linux/macOS <code>0xA</code>)</li>
<li>숫자 : <code>0x30 ~ 0x39</code> (0~9)</li>
<li>영어 대문자 : <code>0x41 ~ 0x5A</code> (A~Z)</li>
<li>영어 소문자 : <code>0x61 ~ 0x7A</code> (a~z. 대소문자 각각 0x20차이)</li>
</ul>
<h2 id="base64-인코딩">Base64 인코딩</h2>
<p>바이너리 데이터를 미리 지정된 64개의 문자를 이용해 문자 표현.
패딩으로 사용되는 <code>=</code>를 제외하고 64개의 문자만 사용
-&gt; <code>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=</code> (64 + 1)</p>
<h2 id="utf-8-인코딩">UTF-8 인코딩</h2>
<p>입력 값이 존재하는 범위에 따라 인코딩 결과를 표시하는 바이트 수가 달라지는 가변길이 인코딩방식이다. UTF-8인코딩을 수행하면 3한글은 3바이트의 크기를 가지게된다. </p>
<hr>
<h1 id="디지털-장치">디지털 장치</h1>
<p><a href="https://velog.io/@is_kwonhan_ok/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0">컴퓨터 구조 참고</a> </p>
<h2 id="저장장치">저장장치</h2>
<h3 id="메모리-ram--주기억장치">메모리 RAM (= 주기억장치)</h3>
<ul>
<li><strong>휘발성</strong> 메모리를 저장 → 컴퓨터가 켜져있는 상태에서 데이터 획득(꺼지면 날라감)</li>
<li>CPU에서 접근속도가 빠르다.<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/860b5f9f-50a5-4796-8761-0b7dec67730d/image.png" alt=""></li>
</ul>
<h3 id="하드디스크-hdd">하드디스크 HDD</h3>
<ul>
<li>일반적으로 저장장치라고 불리는 장치</li>
<li>비휘발성 데이터 저장 (바탕화면, C드라이브의 파일...). 대용량 저장이 필요한 경우 자주 사용. 충격에 약함 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/714c2841-1408-49bc-a84d-6b0819cf3085/image.png" alt=""></li>
</ul>
<h3 id="ssd-solid-state-drive">SSD (Solid-state drive)</h3>
<ul>
<li>반도체로 데이터 저장. HDD보다 높은 속도와 안정성</li>
<li>연결되는 인터페이스 종류 따라서 모양 달라짐 </li>
</ul>
<h3 id="usb-universal-serial-bus-플래시-드라이브">USB (Universal Serial Bus) 플래시 드라이브</h3>
<ul>
<li>머릿속에 떠오르는 그 USB가 맞다</li>
<li>디지털 포렌식에서는 반드시 수집해야 할 저장장치!!!</li>
</ul>
<h3 id="sd-card">SD Card</h3>
<ul>
<li>디지털카메라, 내비게이션, 블랙박스.. 소형기기에 사용. PC, 노트북에 포트가 있다면 직접 장착도 가능 </li>
</ul>
<h2 id="저장장치-인터페이스">저장장치 인터페이스</h2>
<p>인터페이스 Interface 
: 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면 (사전)
: 수집한 저장장치를 어떻게 연결해 데이터를 읽어올 수 있는가 (디지털포렌식 관점)</p>
<h3 id="ide--ata-pata">IDE (= ATA, PATA)</h3>
<ul>
<li>Integrated Drive Electronics. Advanced Technology Attachment. Parallel ATA</li>
<li>하드디스크 연결을 위해 제작된 표준 인터페이스 규격 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/02fb3f2b-19ab-4749-8a1d-d23cce4a7433/image.png" alt=""> 왼쪽이 power, 오른쪽에 IDE커넥터 연결 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/85a0d1e8-8814-46bd-913b-b1b01af2e917/image.png" alt=""> IDE 커넥터. 40핀의 규격으로 리본케이블이라고도 부름 </li>
</ul>
<h3 id="sata">SATA</h3>
<ul>
<li>Serial ATA. 직렬(Serial) 전송 방식을 이용. 기존 IDE방식보다 더 빠른 속도와 높은 안정성 </li>
<li>현재까지도 데스크탑에서 많이 이용됨 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/e6213371-2c2e-434d-8a95-b267ebb591bf/image.png" alt=""> 짧은쪽이 데이터, 긴쪽이 POWER 연결이다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/35b218a9-14fc-4dd6-8820-342edfb172bf/image.jpg" alt=""> 데이터 커넥터 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/57bfb29c-b8a8-4e75-9006-5977a0c3cdd1/image.png" alt=""> 파워 커넥터 </li>
</ul>
<h3 id="pci--pcie">PCI / PCIe</h3>
<ul>
<li>Peripheral Component Interconnect Bus, PCI-express(속도 더 빠르고 다양한 크기 가짐)</li>
<li>컴퓨터 메인 보드에 주변 장치를 장착하기 위한 컴퓨터 버스의 일종이자 인터페이스 </li>
<li>PCI/PCIe는 주로 그래픽카드(GPU) 연결에 이용. SSD가 연결되는 경우도 있음 <ul>
<li>M.2 연결단자 이용하는 SSD를 PCI/PCIe 단자에 연결할 수 있도록 변환하는 어댑터 사용</li>
<li>SSD 자체에서 직접 PCI/PCIe에 연결하는 것 지원 </li>
</ul>
</li>
<li>디지털 포렌식을 수행하는 입장에서 분석대상시스템의 저장장치에 대한 다양한 변동들이 존재하기에 알아두면 좋음 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/17b84f7f-1e4b-4ecf-b1a4-a0993f1a33cd/image.png" alt=""> PCIe는 말 그대로 다양한 크기를 가지고 있는 것을 확인할 수 있음 </li>
</ul>
<h3 id="m2">M.2</h3>
<ul>
<li>M dot Two</li>
<li>소형 커넥터 <strong>규격</strong>. 소형 커넥터 규격 중 가장 많이 사용됨 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/248eed3c-14c4-4e0f-8ef0-1a5181c0f064/image.png" alt=""> M.2가 적용된 SSD</li>
</ul>
<h3 id="usb">USB</h3>
<ul>
<li>장치와 장치를 연결하는 인터페이스의 규격이자, 데이터를 전송하는 프로토콜 </li>
<li>USB 인터페이스는 여러 타입이 존재. 일반적으로 가장많이 쓰는 건 A타입(키보드, 마우스, 동글...). 과거에는 B타입(디지털카메라, 프린터...). 최근엔 C타입(머리에 떠오르는 그 C타입이 맞다) <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/ebfc0944-8152-400c-ab42-841ebcd103be/image.png" alt=""></li>
<li>USB 프로토콜은 2.0과 3.0이 있음. 파란색이 3.0 
각 버전에 맞게 연결해주는게 좋다. (이론상 호환이나, 작동하지 않는 경우도 존재)<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/078e9746-3820-4b78-9d7e-a771f3887d6f/image.png" alt=""> </li>
</ul>
<h2 id="디지털-포렌식-도구">디지털 포렌식 도구</h2>
<h3 id="하드웨어-장비">하드웨어 장비</h3>
<ul>
<li>디스크 이미지 장비 <ul>
<li>Logicube사의 Falcon : 디스크 이미징/복제. 저장장치 연결해 복제본 획득. <a href="https://www.forensicfocus.com/articles/how-to-multitask-with-logicubes-forensic-falcon-neo/">사용법</a> <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/856405c3-ad54-4e90-9f61-cb4a8a2e393e/image.png" alt=""> </li>
</ul>
</li>
<li>쓰기 방지 장치 (Write-Blocker) : 저장매체에 접속해 데이터 살펴볼 때 데이터 쓰기 방지 → 변조 막음 (저장장치의 데이터는 단순 컴퓨터 부팅만으로 내용이 변하고, 해시값이 달라져 증거로 사용하기 어려워질수도있음) <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/0a8d83d7-533c-46a4-a6f9-992a66f1ca0a/image.png" alt=""></li>
<li>패러데이 (Faraday) : 전자기파 차단 → 외부와의 통신 차단 → 불필요한 무선통신으로 데이터가 변조되지 않도록함 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/38204f89-989c-464f-91e1-6c021b18598a/image.png" alt=""> <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/42d7b6ae-a648-4a5f-9345-25fc33cf4489/image.png" alt=""></li>
</ul>
<h3 id="소프트웨어-도구">소프트웨어 도구</h3>
<ul>
<li>비휘발성 데이터 수집 및 분석 도구 <ul>
<li>FTK Imager </li>
<li>KAPE (Kroll Artifact Parser And Extractor) : <a href="https://ericzimmerman.github.io/#!index.md">Eric Zimmerman의 도구</a>들을 이용해 데이터 수집부터 분석까지 한 번에 수행할 수 있는 통합 플랫폼 </li>
</ul>
</li>
<li>휘발성 데이터 수집 및 분석 도구 
: 시스템을 불필요하게 변형하지 않기 위해 CLI기반의 도구들을 선호<ul>
<li>Dumplt : 메모리 수집 </li>
<li>WinPmem : 메모리 수집 </li>
<li>Volatility : 수집한 메모리 덤프 분석</li>
</ul>
</li>
<li>통합 포렌식 도구 
: 디스크 이미지 파일을 입력하면 프로그램이 주요파일분석, 의심파일추출, 사용자행위 추출 → <ul>
<li><a href="https://www.youtube.com/watch?v=g0UTQTPYFvM">Magnet AXIOM</a> (유료) ; 기업에서 주로 사용 </li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2026_S1] 1, 2주차 활동 정리]]></title>
            <link>https://velog.io/@is_kwonhan_ok/2026S1-1-2%EC%A3%BC%EC%B0%A8-%ED%99%9C%EB%8F%99-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@is_kwonhan_ok/2026S1-1-2%EC%A3%BC%EC%B0%A8-%ED%99%9C%EB%8F%99-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 11 Mar 2026 14:46:44 GMT</pubDate>
            <description><![CDATA[<p><a href="https://velog.io/@is_kwonhan_ok/2026S1-Digital-Forensics-Basics">디지털 포렌식 입문</a></p>
<p><a href="https://velog.io/@is_kwonhan_ok/DH-Digital-Forensics-Specialist-Path-%EC%9B%8C%EA%B2%8C%EC%9E%84-%ED%92%80%EC%9D%B4">Digital Forensics Specialist Path 워게임 풀이1</a></p>
<p><a href="https://velog.io/@is_kwonhan_ok/DH-%ED%8F%AC%EB%A0%8C%EC%8B%9D-Lv.1-%EB%AA%A8%EC%9D%8C">Steg-Pack</a></p>
<p><a href="https://velog.io/@is_kwonhan_ok/%EB%94%94%EC%A7%80%ED%84%B8-%EC%A6%9D%EA%B1%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%88%98%EC%A7%91-%EB%B0%8F-%EB%B6%84%EC%84%9D-%EB%94%94%EC%8A%A4%ED%81%AC-%EC%9D%B4%EB%AF%B8%EC%A7%95-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%8D%A4%ED%94%84">디지털 증거 데이터 수집 및 분석 (디스크 이미징, 메모리 덤프)</a></p>
<p><a href="https://velog.io/@is_kwonhan_ok/FAT-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C">파일시스템 - FAT32구조, NTFS구조</a></p>
<hr>
<p>💭 <strong>1주차</strong>
디지털 포렌식은 내가 &#39;보안&#39;이라는 분야에 관심을 가지게 된 계기였다. 
중학교 2학년때 나의 꿈은 프로파일러였는데, 어느 도서관에나 하나쯤은 있을 만한 진로 도서 시리즈의 날개페이지에서 마주치고 &#39;디지털 포렌식 수사관&#39; 이라는 직업에 관심을 가지게 되었다. 당시 처음 마주쳤을때는 인터넷에 자료가 많이 없었는데, 조금 찾아보고 머리에서 밀어냈었다. 디지털 포렌식을 찾다가 해킹이라는 멋져보이는 말을 마주쳤었기 때문이다... 그 이후로 대학에 입학하기까지 한 건 없지만,,, 막연히 정보보안전문가가 되고싶다고 생각했었다. 놀랍게도 디지털 포렌식이라는 말은 새카맣게 잊고 있었다. </p>
<p>동아리 활동으로 어린 시절의 꿈을 마주치게 되니까 너무 좋았다. 디지털 포렌식이라는게 머리속에서 자리를 모두 차지해버렸다. 동아리 활동이 기대되어서 며칠동안 이 생각밖에 안했다. 활동 공지가 나기 전에 자료를 찾아보고, 약간 찍먹도 해보았다. 활동이 시작되고나서는 바로 포렌식 분야를 공부하기로 결정했다. 흥미가 있는 것에 대해 공부하는 건 정말 꿈만 같은 일이다. 하고 싶은 공부를 마음껏 할 수 있다니 이렇게 행복해도 되는건가... 라는 생각이 최근 든다. 살아있다는 실감이 난다,,</p>
<p>디지털 포렌식이라는 것이, 법과 굉장히 밀접하다는 것을 알게 되었고, 최근 짬날때마다 증거법과 관련한 법률들을 읽는 중이다. (&#39;판례로 본 디지털증거법&#39;이라는 책도 읽고있다) 법률에도 관심이 있었기에 2배로 재미가 있다. 공부를 시작한지 얼마되지 않아 지식이 얕아서 그런지 공부할수록 툴 딸각 게임이라는 생각이 들긴 하지만,, 파일 시그니처라던가 평소에는 그냥 사용하던 것들에 대해 더 알게되었다. 가장 간단한 것이지만, 파일 안에 파일을 넣는 기법이라는 것이 너무 신기했다. 알게되고 나서는 이런것도 실제로 쓰이는건가? 했지만 책을 읽다보니 정말 이런 사례가 있었어서 신기했다. 
최근들어 디지털 포렌식 분야를 전문으로 하고싶다고 생각했는데, 막상 직업을 이쪽으로 잡으려니 떠오르는 기업?기관?도 별로 없어서 정말 취업문이 좁을 것 같아서 정말 이쪽으로 가봐도 되나 라는 생각이 들었다. 나중에 직업과 관련해서 조금 더 찾아볼 필요가 있겠다.</p>
<p>💭 <strong>2주차</strong>
2주차에는 디지털 증거 데이터의 수집 및 분석 방법과 파일시스템에 대해 공부했다. 디지털 장치 부분을 공부하면서 HDD와 SATA는 집에서 찾았지만, 나머지 PCI, M.2의 실물이 있었으면 좋았을 것 같다는 생각이 들었다. 실물을 보고 만지지 못하니 감이 잘 오지 않았다. 
파일 시스템을 공부하면서 작년에 동아리 활동이 멈춰버려서 개인적으로 운영체제에 공부했었는데, 다 잊어버린 것 같아 다시 공부를 해야겠다고 생각했다. (겨울방학 브레인 리셋의 힘...) MBR부분에서 디스크를 HxD로 분석할 수 있는 것이 신기했다. 뭔지 하나도 모르겠는 코드들에 그런 많은 의미들이 담겨있었다니요. 약간 16진수 공포증처럼 16진수를 마주칠 때 마다 머리가 복잡했었는데, 어떤 방식인지 알게되니 조금은 16진수와 친해진 기분이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[스테가노그래피 Steganography]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EC%8A%A4%ED%85%8C%EA%B0%80%EB%85%B8%EA%B7%B8%EB%9E%98%ED%94%BC</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EC%8A%A4%ED%85%8C%EA%B0%80%EB%85%B8%EA%B7%B8%EB%9E%98%ED%94%BC</guid>
            <pubDate>Wed, 11 Mar 2026 00:34:33 GMT</pubDate>
            <description><![CDATA[<h1 id="스테가노그래피">스테가노그래피</h1>
<p>Steganography. 정보를 암호를 사용하는 것보다 더 은밀하게 숨기는 방법. 
정보를 은닉하는 기법으로, 파일, 이미지, 오디오 등 다양한 매체를 통해 <strong>전달하고자 하는 정보를 눈에 띄지 않게 숨기는 기술</strong>이며 외부적으로는 정상적인 파일로 보인다.</p>
<h2 id="이미지-스테가노그래피">이미지 스테가노그래피</h2>
<p>이미지 안에 정보를 숨기는 기법.
컴퓨터가 이미지를 숫자로 저장할 때 이미지를 구성하는 값들은 일반적으로 RGB로 구성되어있다. 각 색은 0~255의 숫자로 표현된다. (234, 50, 60) -&gt; (234, 50, 61) 로 변경하면 육안으로는 변화를 구분하기 쉽지않다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/a44c7ebf-f791-46e6-ab0e-bc8f6aeb5cdf/image.png" alt=""><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/9ffdb1e2-3e6f-474d-a69c-b1638399cadb/image.png" alt=""></p>
<h3 id="lsb--rgb값-일부를-변경하여-메시지-숨기기">LSB : RGB값 일부를 변경하여 메시지 숨기기</h3>
<p>Least Significant Bit. 워터마킹과 같은 위/변조 방지 기술로도 사용된다.</p>
<ul>
<li>Openstego, Steghide, Audacity, StegoOnline 등을 사용해 분석 </li>
</ul>
<h3 id="파일-시그니처를-이용해-이미지-안에-이미지-숨기기">파일 시그니처를 이용해 이미지 안에 이미지 숨기기</h3>
<p>파일 시그니처 글에 정리해뒀다. 
<a href="https://velog.io/@is_kwonhan_ok/%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EA%B7%B8%EB%8B%88%EC%B2%98#%EC%9D%80%EB%8B%89-%ED%8C%8C%EC%9D%BC-%ED%83%90%EC%A7%80">https://velog.io/@is_kwonhan_ok/%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EA%B7%B8%EB%8B%88%EC%B2%98#%EC%9D%80%EB%8B%89-%ED%8C%8C%EC%9D%BC-%ED%83%90%EC%A7%80</a></p>
<h2 id="오디오-스테가노그래피">오디오 스테가노그래피</h2>
<p>오디오 파일에 정보를 숨기는 기법. 주로 오디오 파형을 이용해 정보 저장.</p>
<p>컴퓨터가 소리를 저장하는 단계는 1. 소리를 디지털신호로 변환 2. 변환된 디지털 데이터를 컴퓨터에 저장 이다. </p>
<ol>
<li>소리 -&gt; 디지털 신호 의 과정에서 공기의 진동을 받은 뒤 ADC라는 장치를 거쳐 아날로그(연속적 전기신호)로 변환한다. </li>
</ol>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/157eac4d-c0a1-4477-b7a6-33d1a02d6614/image.png" alt=""> 생성된 오디오 파일을 시각화하면 물결같은 그래프를 확인할 수 있는데, 이를 <strong>파형Waveform</strong>이라고 한다. 이 파형을 <strong>조작</strong>하여 정보를 숨기는 것이 오디오 스테가로그래피에서 자주 사용되는 기법이다.</p>
<p>숨기고자 하는 메시지를 파형으로 변환한 뒤, 이것을 소리로 바꾸어 오디오 스테가노그래피를 할 수 있다. (파형변환기법)</p>
<h3 id="스펙트로그램-spectrogram">스펙트로그램 Spectrogram</h3>
<p>소리의 <strong>주파수와 진폭변화</strong>를 시간에 따라 보여주는 시각화 방식.
파형은 시간에 따른 소리의 진폭 변화만 보여주지만, 스펙트로그램은 주파수와 진폭을 동시에 보여준다.
메시지를 심을 때 생긴 비정상적 패턴/형태가 눈에 띄게 나타날 수 있기에 오디오 스테가노그래피 탐지를 시도할 때 가장 먼저 확인하는 것이 좋다.</p>
<h2 id="문서-스테가노그래피">문서 스테가노그래피</h2>
<p><code>.hwpx</code>, <code>.docx</code>, <code>.pptx</code> 등 문서파일에 정보를 은닉한 뒤 전달.
특히 이메일, 공공 배포 문서, 보고서 등 <strong>의심하기 어려운 파일</strong>에 정보를 숨기면 타인이 이를 인지하지 못할 가능성이 큼. </p>
<ul>
<li>숨겨진 텍스트 삽입 (글자색 = 배경색)</li>
<li>메타데이터에 정보 삽입 (제목, 작성자, 키워드...)</li>
<li>비가시적 객체 (보이지 않는 이미지, 오브젝트...) 활용</li>
<li>매크로 코드, 하이퍼링크 삽입 </li>
</ul>
<h2 id="네트워크-스테가노그래피">네트워크 스테가노그래피</h2>
<p>TCP/IP 프로토콜 헤더의 사용하지 않는 필드에 정보를 삽입해 전송.
VoIP 프로토콜에서 지연되거나 손상된 패킷에 정보를 삽입.</p>
<h2 id="비디오-스테가노그래피">비디오 스테가노그래피</h2>
<p>동영상 내 특정 프레임의 LSB를 수정하여 메시지를 삽입. 
특정 프레임 사이의 픽셀을 미세한 변화로 정보를 전달.</p>
<p>참고 : <a href="https://blog.naver.com/sknbiz070/223070314195">https://blog.naver.com/sknbiz070/223070314195</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2026_S1] 디지털 포렌식 입문]]></title>
            <link>https://velog.io/@is_kwonhan_ok/2026S1-Digital-Forensics-Basics</link>
            <guid>https://velog.io/@is_kwonhan_ok/2026S1-Digital-Forensics-Basics</guid>
            <pubDate>Tue, 10 Mar 2026 11:01:37 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>❗ 이 글은 Dreamhack의 &#39;Digital Forensics Specialist&#39; 강의를 바탕으로 공부하며 정리한 것입니다.</p>
</blockquote>
<h1 id="디지털-포렌식"><a href="https://velog.io/@is_kwonhan_ok/%EB%94%94%EC%A7%80%ED%84%B8-%ED%8F%AC%EB%A0%8C%EC%8B%9D-%EA%B8%B0%EC%B4%88">디지털 포렌식</a></h1>
<hr>
<p>해야할 일</p>
<ol>
<li><code>Evidence.E01</code> 파일 분석 -&gt; 단서가 될 파일 모두 확인</li>
<li>범죄와 관련된 단서 찾아내기</li>
<li>디지털 포렌식 보고서 작성 </li>
</ol>
<blockquote>
<p>💡 파일 분석
파일 내부 구조, 포맷, 데이터 배치 방식까지 분석하는 과정. 도구를 이용해 이진수 수준의 저수준 데이터까지 분석하기도하고, 필요에 따라서 CPU의 레지스터, 메모리 구조까지 분석하기도 함. </p>
</blockquote>
<blockquote>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/00cd6c3f-d666-47a2-9d57-48a2923862b0/image.png" alt=""> </p>
</blockquote>
<ul>
<li>중앙 : 파일 내부의 데이터가 16진수 값으로 표시됨</li>
<li>Offset : 16진수 값이 파일 내에서 어느 위치에 저장되어있는지 <strong>상대적인 위치</strong> 표현 </li>
<li>Decoded Text : 16진수 값을 사람이 읽을 수 있는 문자열(ANSI코드)로 변환하여 보여줌<blockquote>
<blockquote>
<p><span style = "color : SlateGrey">ANSI와 ASCII는 유사한 인코딩 방식으로 일반적으로 파일분석시 두 인코딩 방식 혼용해도 관계없음</span></p>
</blockquote>
</blockquote>
</li>
</ul>
<blockquote>
<p>💡 오프셋 Offset
: 16진수 값의 위치. 파일 내 특정 데이터가 어디에 위치하는지 나타내는 주솟값 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/196eaf2d-04f9-438c-aa51-6ce9e80c5190/image.png" alt=""></p>
</blockquote>
<h1 id="이미지-파일-disk-image-file">이미지 파일 Disk Image File</h1>
<p><code>.jpg</code>, <code>.png</code>가 아닌, <strong>저장장치 전체를 디지털로 그대로 복제한 디스크 이미지 파일</strong>
단순히 장치 내 파일 목록만 복사하는 것이 아닌, <strong>빈공간, 삭제된 파일, 파일 시스템 구조, 메타데이터</strong> 등을 포함하여 물리적 저장장치를 바이트 단위로 그대로 복제한 결과물 (= 원본 디지털 저장장치를 복제 파일)</p>
<ul>
<li>RAW 형식 : <code>.dd</code>. 가장 기본 포맷, 무압축, 비트 단위 복사</li>
<li>EWF 형식 : <code>.E01</code>, <code>.Exx</code>. 메타데이터(이미지 생성일시, 생성자정보, 주석, 사건번호) 및 해시 포함, 법정 증거에 적합, 압축 지원으로 파일 크기 축소 가능 </li>
<li>Split RAW 형식 : <code>.001</code>, <code>.002</code>. 대용량 이미지 여러 조각으로 분할 저장 </li>
</ul>
<blockquote>
<p>💡 이미지 파일을 분석하는 이유?
원본 상태 유지, 반복 분석 가능, 삭제 파일 &amp; 히든 영역(숨겨진파티션, 슬랙공간, 빈공간) 분석의 이유 때문에 실제 수사에서는 저장장치를 직접 분석하지 않음. </p>
</blockquote>
<h1 id="파일-시스템-file-system">파일 시스템 File System</h1>
<p>운영체제가 <strong>파일을 어떻게 저장하고 관리</strong>할지 정의한 <strong>구조</strong>.
폴더와 파일의 구조 정의, 파일의 시작 위치와 크기, 수정 시간 등을 기록, 삭제된 파일의 흔적까지 포함, 메타데이터 저장 -&gt; 파일이 어떻게 저장되고 지워졌는지 추적 가능 </p>
<h2 id="종류">종류</h2>
<ul>
<li>FAT32 : USB, SD카드 등 이동식 장치. 단순한 구조로 분석 용이, 삭제된 파일 복구가 용이</li>
<li>NTFS : Windows 내부 저장장치. 권한/복구/로그 기능 탑재</li>
<li>exFAT : 대용량 USB, 외장 SSD. FAT단점 보완, macOS/windows 모두 호환</li>
<li>HFS+ : masOS 구형 시스템. 애플 디바이스 전용, 저널링 지원</li>
<li>APFS : macOS 최신 시스템. 스냅샷, 압호화 기능 강력</li>
<li>ext4 : Linux 기반 시스템. IoT, 서버에서 많이 사용</li>
</ul>
<blockquote>
<p>💡 서로 다른 시스템에서 포맷된 저장장치는 기본적으로 읽히지 않음. 
저장장치 삽입 시 포맷 요구하는 메시지 나타날 수도</p>
<blockquote>
<p><em>*Windows에서 포맷한 USB - NTFS, macOS에서 읽기전용
macOS에서 포맷한 USB - HFS+, Windows에서 인식 불가
exFAT, FAT32 포맷 - macOS/Windows 양쪽 모두에서 호환 가능</em></p>
</blockquote>
</blockquote>
<p>-&gt; 어떤 운영체제에서 사용되었는지 추론하는 단서가 될 수 있음</p>
<h1 id="autopsy-사용법">Autopsy 사용법</h1>
<p>New Case로 새로운 케이스를 생성, Case Name에 내부 폴더 명으로 사용될 이름을 지정, Base Directory에 케이스가 저장될 경로 지정. 
Optional Information은 실제 수사과정에서 분석자 정보 기록하기 위해 사용됨. </p>
<p>New Case가 생성되면 Add Data Source가 자동으로 뜬다. Next로 다음으로 넘어가고 Disk Image or VM File을 선택한다. 4. Configure Ingest에서 분석범위와 사용할 모듈을 설정할 수 있다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/e790505c-3ab9-4c98-93f5-90e4779fc418/image.png" alt=""> 
모듈은 아래처럼 존재한다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/0b6635da-74ec-445d-89f2-cce07bc7b2e9/image.png" alt=""> <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c4f85391-6bb1-400d-a9b2-7cf1be9e2f4b/image.png" alt=""></p>
<h2 id="인터페이스-구성">인터페이스 구성</h2>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/27369a5d-2889-4905-80f7-af7b672beae1/image.png" alt=""> </p>
<ol>
<li><p>🟥 Tree Viewer (탐색트리)</p>
<ul>
<li>분석할 전체 데이터를 트리 구조로 표시 </li>
<li>데이터소스, 파일뷰, 삭제 파일, 메타데이터 등 분석 카테고리 확인 가능</li>
</ul>
</li>
<li><p>🟩 Result Viewer</p>
</li>
</ol>
<ul>
<li>선택한 항목의 분석 결과 목록을 표 형식으로 표시</li>
</ul>
<ol start="3">
<li>🟦 Content Viewer</li>
</ol>
<ul>
<li>결과 창에서 선택한 파일의 실제 내용 확인 영역</li>
<li>텍스트/이미지/HEX/메타데이터 등 여러 방식으로 확인 가능. 하단 탭에서 보기 형식 전환 가능</li>
</ul>
<ol start="4">
<li>🟪 Status Area</li>
</ol>
<ul>
<li>현재 진행 중인 분석 작업의 진행 상황과 상태 표시</li>
</ul>
<ol start="5">
<li>🟨 Keyword Search</li>
</ol>
<ul>
<li>텍스트 기반 단서를 찾는 영역. 특정 이름/메일주소/코드조각 등 문자열 입력하면 일치하는 데이터 위치 찾아줌 </li>
<li>Analysis Result -&gt; Keyword Hits버튼으로 결과 조회 가능. 문서/메타데이터/로그 속 숨겨진 단어 탐색 시 유용</li>
</ul>
<h2 id="data-sources">Data Sources</h2>
<p>분석 대상이 어떤 구조로 구성되어 있는지 보여주는 영역 </p>
<blockquote>
<p>💡 볼륨 Volume 
한 저장장치 안에서 파일시스템이 구성된 독립적 논리 영역. <span style = "color : gray"><em>Windows의 C:드라이브, D:드라이브</em></span>
저장장치의 공간은 볼륨이라는 단위로 쪼개며, 각 볼륨 안에서 구조를 나누고 그 안에 내용을 저장.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/84f2df06-d629-41f7-8241-693fe26d6cbe/image.png" alt=""> 분석 대상에는 3개의 볼륨이 존재하는데, vol1, vol3에는 Unallocated로 비할당 영역, 즉 비어있거나 사용되지 않는다. 
vol2는 FAT32 파일 시스템을 사용하는 영역으로 사용자의 데이터가 들어있는 것으로 추측된다. </p>
<ul>
<li><code>$OrphanFiles</code>, <code>$RECYCLER.BIN</code>, <code>$Unalloc</code> 등 : 시스템이 자동 생성하거나 삭제된 파일과 관련된 디렉토리</li>
<li><code>System Volume Information</code> : 시스템 복원 관련 정보(보통 분석 제외)</li>
<li><code>code.pptx</code>등.. : 사용자 파일 </li>
<li>실제 사용자 파일은 주로 아래쪽에 정렬되어있다. </li>
</ul>
<blockquote>
<p>💡 비할당영역 Unallocated Space</p>
</blockquote>
<ul>
<li>시스템이 현재 사용중이 아니라고 표시한 공간. 파일이 이미 삭제되거나 포맷되어 더 이상 파일시스템에 의해 활성화되지 않은 영역</li>
<li>파일을 삭제한다면, 시스템이 파일에게 할당된 영역을 &#39;사용가능&#39;한 것으로 표시한다. 삭제된 파일의 데이터는 새파일이 해당 공간을 덮어쓸 때 까지 존재한다. -&gt; 메타데이터가 남아있기 때문에 삭제된 파일 복구가 가능</li>
</ul>
<h2 id="file-views">File Views</h2>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/b9a97534-57e4-4e95-8158-9d4f42737b82/image.png" alt=""></p>
<ol>
<li>File Type </li>
</ol>
<ul>
<li>파일 타입(형식)별로 자동 분류</li>
<li>By Extention은 확장자 기준으로, By MIME Type은 파일의 실제내용(시그니처..)를 기준으로 확인 가능</li>
<li>후자는 파일의 실질적 내용을 분석하기 때문에, 확장자가 위장되어 있어도 정확하게 분류 가능 </li>
</ul>
<ol start="2">
<li>Deleted Files </li>
</ol>
<ul>
<li>파일 시스템 상에서 삭제되었으나, 흔적이 남은 파일들을 보여줌</li>
</ul>
<ol start="3">
<li>File Size</li>
</ol>
<ul>
<li>용량이 큰 파일만 추려 살펴보는 등 분석 우선순위 정할 때 유용 </li>
</ul>
<h2 id="keyword-search">Keyword Search</h2>
<ul>
<li>삭제된 텍스트파일, 문서, 메타데이터 등에서 특정 단어/문장의 존재 탐지 가능 -&gt; 수사 초기 단서 확보에 유용<blockquote>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/542f10bc-9b09-4ac5-abb7-3e6e517e52a6/image.png" alt=""></p>
</blockquote>
</li>
</ul>
<ol>
<li>키워드 입력</li>
<li>어떤 조건으로 일치해야 검색되는지 필터. 정확히 일치 / 일부 단어만 포함되어도 ok / 정규표현식 활용</li>
</ol>
<h2 id="export-추출">Export 추출</h2>
<p>필요한 파일들을 외부로 Export하는 기능이다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/682baee5-89b0-439a-aae5-68120595f8aa/image.png" alt=""> 항목을 우클릭하여 Extract File(s)를 클릭하면 추출할 수 있다. </p>
<h1 id="파일-시그니처">파일 시그니처</h1>
<p><a href="https://velog.io/@is_kwonhan_ok/%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EA%B7%B8%EB%8B%88%EC%B2%98">파일 시그니처 정리</a></p>
<h1 id="스테가노그래피">스테가노그래피</h1>
<p><a href="https://velog.io/@is_kwonhan_ok/%EC%8A%A4%ED%85%8C%EA%B0%80%EB%85%B8%EA%B7%B8%EB%9E%98%ED%94%BC">스테가노그래피 정리</a></p>
<h1 id="파일-확장자">파일 확장자</h1>
<p>Filename extension. 파일의 형식이나 종류를 구분하기 위해 <code>. + 알파벳</code>의 형식으로 표기하는 것</p>
<blockquote>
</blockquote>
<ul>
<li>압축 : <code>.zip</code>, <code>.rar</code>, <code>.7z</code>, <code>.tar</code>, <code>.gz</code></li>
<li>문서 : <code>.pdf</code>, <code>.doc / .docx</code>, <code>.ppt / .pptx</code>, <code>.xls / .xlsx</code>, <code>.hwp / .hwpx</code></li>
<li>그림 : <code>.png</code>, <code>.jpg / .jpeg</code>, <code>.gif</code></li>
<li>오디오 : <code>.mp3</code>, <code>.wav</code></li>
<li>비디오 : <code>.mp4</code>, <code>.avi</code></li>
<li>텍스트 및 코드 : <code>.txt</code>, <code>.json</code>, <code>.xml</code>, <code>.js</code>, <code>.cpp</code></li>
<li>Windows 프로그램 : <code>.exe</code> (응용프로그램. 실행파일), <code>.dll</code> (라이브러리), <code>.lnk</code> (바로가기), <code>.tmp</code> (임시파일)</li>
</ul>
<h2 id="ooxml">OOXML</h2>
<p>확장자 맨 뒤에 &#39;x&#39;가 달린 형식을 Office Open XML 형식 이라고 한다. 줄여서 OOXML. ex).pptx
.zip형태로 압축된 XML 기반의 포맷이다. </p>
<blockquote>
<p>XML은 데이터를 전공하고 저장하기 위한 Markup언어이다.
마크업 언어는 태그(&lt; &gt;)를 사용하여 문서나 데이터의 구조, 서식, 배치 등을 기술하는 언어이다. </p>
</blockquote>
<p>XML, 이미지, 미디어파일 등이 .zip형태로 압축되어 만들어진 것이기에, .zip의 파일 구조와 동일하다. 
-&gt; OOXML 형식의 확장자를 가진 파일은 .zip파일로 변환이 가능하다. 여기서 zip파일로의 변환은 별도의 압축과정이 아닌, &#39;이름바꾸기&#39;로 가능하다는 것이다. </p>
<h1 id="수사-보고서-작성">수사 보고서 작성</h1>
<p>디지털 포렌식 수사관으로서 증거분석 만큼 중요한 일은 <strong>법정에서 사용할 수 있는 증거로 제시하는 것</strong>이다. 
결정적인 단서일지라도, 단서를 획득하기까지의 과정과 근거가 명확히 설명되지 않으면 재판에서는 증거로서의 힘을 잃는다. 보고서 작성이 증거로서의 가치를 갖추게 하는 작업이다. 
어떤 자료를 어디서 어떻게 확보했는지, 위/변조 가능성은 어떻게 통제했는지, 어떤 절차로 수행했고 동일한 결과가 재현되는지 등의 분석 결과를 법원이 이해할 수 있는 형태로 구조화하고 그에 대한 신뢰성을 뒷받침하는 근거를 제시한다. </p>
<p>양식은 다음의 링크에서 확인할 수 있다. 
<a href="https://www.cfpa.or.kr/bbs/board.php?bo_table=pds_study&amp;wr_id=12&amp;sca=%EC%88%98%EC%82%AC%EC%96%91%EC%8B%9D&amp;sst=wr_datetime&amp;sod=asc&amp;sop=and&amp;page=1">KCFPA</a></p>
<hr>
<h2 id="goal1--이미지-파일에서-usb-소유자의-이름-알아내기">Goal1 : 이미지 파일에서 USB 소유자의 이름 알아내기</h2>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/6bb0ed2c-6b7f-486f-9d32-226c5c80f0eb/image.png" alt=""> By Extention의 Images는 5개인데 By MIME Type의 image는 4개의 항목이 뜬다. 대조해 봤을때 <code>signature(1).png</code> 항목이 수상하다. Content Viewer에 뜨는 걸로는 잘 모르겠다. </p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/50e804ca-3923-4c6c-b5ef-8218f16d4964/image.png" alt=""> 삭제된 파일은 항상 수상하니까~ <code>USB_OWNER.txt</code>라는 문서가 있고 &#39;The owner of this USB is Nando&#39; 라는 내용이 담겨있다. 이 USB의 주인이 Nando라는 사람인가보다. </p>
<h2 id="goal2--사진-파일에서-조직도와-조직명-획득하기">Goal2 : 사진 파일에서 조직도와 조직명 획득하기</h2>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/22035ed6-25d0-451e-af63-3ee0b5e4eda1/image.png" alt=""> <code>signature(1).png</code> 파일을 HxD로 열어보면 헤더 시그니처가 PDF(<code>25 50 44 46</code>)인 것을 확인할 수 있다. 푸터는 .png의 푸터다. 헤더 시그니처의 값을 png시그니처로 수정을 해보자. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/23caf363-43df-418d-9056-43945ff3a2d6/image.png" alt=""> 수정하고 저장해주자 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/4d0207e6-041c-4984-bc86-2d4496fb691d/image.png" alt=""> 이런 이미지가 나왔다. 전체 조직도는 아니지만 조직도의 일부를 발견한 듯 하다. 조직명은 &#39;Blue Hack&#39;이라고 한다. </p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/da7a4633-515c-44df-a524-04e23f791159/image.png" alt=""> <code>signature(2).jpg</code> 도 HxD로 열어보자. 정상적인 jpg의 헤더 시그니처다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/4bf88a99-fa95-4c64-b6f0-ae01ddd1c4a9/image.png" alt=""> 하지만 푸터 시그니처 <code>ff d9</code> 를 <code>ctrl+F</code>로 찾아보니 3개나 나온다. <strong>파일 시그니처는 딱 한 번씩만 나와야 정상</strong>이다. 이 결과를 통해 이미지가 붙어있을 수 있다는 것을 추측할 수 있다. </p>
<blockquote>
<p><code>ctrl+E</code> 또는 &#39;편집 &gt; 블록선택&#39; 을 통해 원하는 오프셋의 범위를 지정할 수 있다. </p>
</blockquote>
<p>2A9AB ~ 3A2FF, 3A300 ~ 491F6까지 잘라서 각각 새파일을 만들고 확장자를 지정해 저장해주면 아래와 같이 남은 조직도 조각을 얻을 수 있다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/d9eea514-3718-4afc-8c68-24c2325bc4f6/image.png" alt="">  <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/a32cca8e-01ff-4219-bea1-7da7624d7ee8/image.png" alt=""></p>
<h2 id="goal3--멀티미디어-파일에서-다음-범죄-발생-장소-시각-알아내기">Goal3 : 멀티미디어 파일에서 다음 범죄 발생 장소, 시각 알아내기</h2>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/606260f8-9c97-4b04-ac95-125f5b443ebc/image.png" alt=""> 파일의 이름과는 다르게, <code>location_B2.png</code> 파일에는 고양이 그림이, <code>time.wav</code> 에는 알 수 없는 치지직 소리가 담겨있다. 무언가 숨겨져 있을 것이라 의심할 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/7f44161d-abbc-4d8e-b27c-7873af04a8c3/image.png" alt=""> 먼저 png파일을 분석하기 위해 파일을 불러오면 위와 같은 화면이 나타난다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/ba8a8ebb-5728-4720-8aff-d94663547dbb/image.png" alt=""> Browse Bit Planes 버튼을 클릭하면 위와 같은 이미지로 바뀐다. RGB값의 정도를 변경하면서 사진을 확인할 수 있다.<br><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c2f0e239-14f8-4864-be7b-cf4e127f2aee/image.png" alt=""> 이미지에 B2라는 것이 적혀있었으므로, RGB 값 변환 정도를 의미하는 게 아닐까 추측할 수 있다. Blue 2(Blue:채널, 2:2nd Bit)옵션이 있다. 서울역 6번 출구라는 장소 정보를 획득할 수 있다. </p>
<blockquote>
<p><strong>무차별 대입 Brute-Force</strong>
: 모든 조합을 하나씩 검사하는 방식. 시간이 오래 걸리지만, 결국 정답을 찾을 수 있으므로 실제 암호나 PW를 풀기 위한 공격 기법으로 자주 사용됨</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/81c034d1-005b-4b00-aa6f-5ad9f917e283/image.png" alt=""> Audacity에서 파일을 올린 후 스펙트로그램을 클릭하면 메시지를 확인할 수 있다. (왼쪽 영역 우클릭)
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/b08e02b9-0010-4cd9-ae45-429442d6f306/image.png" alt=""> April Fools 만우절(4월1일)을 뜻한다. &#39;만우절 자정&#39;이 범행 시각이라고 예측할 수 있다.</p>
<h2 id="goal4--pptx-파일에서-접선-암호-알아내기">Goal4 : .pptx 파일에서 접선 암호 알아내기</h2>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/6ea8c2d4-2eaf-4c1d-99dc-9f483cc57432/image.png" alt=""> <code>code.pptx</code> 에는 알 수 없는 슬라이드 하나만 덩그러니 있다.
CODE(()<em>is</em>()_in()) 이라는 함수 비스무리 한 것과 마침 3가지 색의 텍스트가 있다. </p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/15c95356-4bd2-4e36-9725-281df939b0d9/image.png" alt=""> 빨간 글자를 드래그해보면 튀어나온 부분이 있는 것을 확인할 수 있다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/b0513cb6-9a0e-4104-94a5-cb70dce7ac62/image.png" alt=""> 따로 드래그하여 글자색과 크기를 키워주면 <code>James</code>라는 단어를 확인할 수 있다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/d132f7cc-67ac-458d-9269-93b186fae155/image.png" alt=""> 파란색은 Advanced Properties다. 고급속성을 왜 적어뒀을까? 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/a138304e-260c-4721-a8c8-59e3c0709b4b/image.png" alt=""> 파일 &gt; 정보 &gt; 속성을 클릭하여 고급속성 창으로 들어갈 수 있다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/1b02a88b-d1e0-4488-8f66-95d77b6cf34b/image.png" alt=""> 메모칸에 <code>Interested</code> 라는 단어가 있다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/38dce4ec-7ac5-4433-b01a-1b6838d7a1a2/image.png" alt=""> 녹색은 글자가 아니라 이미지파일이다. ppt파일의 확장자가 pptx다. pptx는 OOXML로 zip형식으로 변환할 수 있다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/b61ac9fd-fd68-438c-98ad-218ad1dfaee3/image.png" alt=""> 변환하여 압축을 해제하면 폴더는 위와 같이 구성된다. 아까 본 녹색 이미지의 위치는 <code>/ppt/media</code>에 있다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/cdf1e694-493d-4a25-b803-9287863411ab/image.png" alt=""> 이미지는 jpg로 적혀있지만 확장자가 png이다. 어딘가 거슬린다. HxD에 일단 넣어보자. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/d2e3d204-fdba-4e6b-afd9-0eb7e23df724/image.png" alt=""> 헤더는 png가 맞다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c52e68a6-505b-4c08-80b0-dfa236e8ccd0/image.png" alt=""> 푸터도 png가 맞다. 하지만 뒤에 무언가가 더 존재한다. <code>FF D8 FF E0</code>이 있는 것으로 보아 jpg이다. 푸터도 마저 찾아보자. 마지막에 있는 걸 보니 다른 건 뭐가 더 없는 듯 하다. ff d8 부터 복사해서 새파일로 만들고 .jpg파일로 지정해주면 Chemistry를 얻을 수 있다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/978cf326-f338-4550-ae9d-f37dfe934656/image.png" alt=""> 최종적으로 CODE는 James is Interested in Chemistry. </p>
<hr>
<h1 id="워게임">워게임</h1>
<p><a href="https://velog.io/@is_kwonhan_ok/DH-Digital-Forensics-Specialist-Path-%EC%9B%8C%EA%B2%8C%EC%9E%84-%ED%92%80%EC%9D%B4">https://velog.io/@is_kwonhan_ok/DH-Digital-Forensics-Specialist-Path-%EC%9B%8C%EA%B2%8C%EC%9E%84-%ED%92%80%EC%9D%B4</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[윈도우 서치 Window Search]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%84%9C%EC%B9%98-Window-Search</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%84%9C%EC%B9%98-Window-Search</guid>
            <pubDate>Mon, 09 Mar 2026 14:25:20 GMT</pubDate>
            <description><![CDATA[<p>드림핵의 포렌식 기본 문제를 풀이하다가 윈도우 서치에 관해 알게 되었다. </p>
<hr>
<p>Windows + S로 실행되는 윈도우 기본기능이다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/45656869-f1c6-4dd6-8cea-cc8e91537b76/image.png" alt=""></p>
<p>Window Indexing은 미리 Indexing을 해두는 것이다. 파일 이름과 전체 파일 경로를 포함한 파일의 모든 속성이 인덱싱된다. </p>
<p><code>Windows.edb</code>에는 Windows Search에 사용학하기 위한 정보가 저장되어있다. 
<code>C:\ProgramData\Microsoft\Search\Data\Applications\Windows</code> 관리자 권한이 필요하므로 Data까지 입력하고 찾아들어가면 확인할 수 있다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/504e307f-a724-47b1-aeef-446d2c45e3b0/image.png" alt=""> </p>
<p>edb파일은 WinSearchDBAnalyzer 혹은 ESEDatabaseView를 사용하여 분석할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[트리 순회 - 인오더(Inorder), 프리오더(Preorder), 포스트오더(Postorder)]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EC%9D%B8%EC%98%A4%EB%8D%94Inorder-%ED%94%84%EB%A6%AC%EC%98%A4%EB%8D%94Preorder-%ED%8F%AC%EC%8A%A4%ED%8A%B8%EC%98%A4%EB%8D%94Postorder</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EC%9D%B8%EC%98%A4%EB%8D%94Inorder-%ED%94%84%EB%A6%AC%EC%98%A4%EB%8D%94Preorder-%ED%8F%AC%EC%8A%A4%ED%8A%B8%EC%98%A4%EB%8D%94Postorder</guid>
            <pubDate>Mon, 09 Mar 2026 13:39:13 GMT</pubDate>
            <description><![CDATA[<h1 id="인오더-inorder--중위순회">인오더 Inorder = 중위순회</h1>
<p>left -&gt; root -&gt; right
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/cab3eba9-1ba5-429a-9e72-6e4e2485469a/image.png" alt=""></p>
<h1 id="프리오더-preorder--전위순회">프리오더 Preorder = 전위순회</h1>
<p>root -&gt; left -&gt; right
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/59ba7d11-fa17-45a6-8874-ce531121b43e/image.png" alt=""></p>
<h1 id="포스트오더-postorder--후위순회">포스트오더 Postorder = 후위순회</h1>
<p>left -&gt; right -&gt; root 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/d5f33e5c-d5e7-41ce-b6b4-2e7a21beec0f/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[치트엔진 Tutorial step8 : Multilevel Pointers]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EC%B9%98%ED%8A%B8%EC%97%94%EC%A7%84-Tutorial-step8-Multilevel-Pointers</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EC%B9%98%ED%8A%B8%EC%97%94%EC%A7%84-Tutorial-step8-Multilevel-Pointers</guid>
            <pubDate>Sun, 08 Mar 2026 11:14:45 GMT</pubDate>
            <description><![CDATA[<hr>
<p>(PW=525927)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[치트엔진 Tutorial step7 : Code Injection]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EC%B9%98%ED%8A%B8%EC%97%94%EC%A7%84-Tutorial-step7-Code-Injection</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EC%B9%98%ED%8A%B8%EC%97%94%EC%A7%84-Tutorial-step7-Code-Injection</guid>
            <pubDate>Sun, 08 Mar 2026 10:50:36 GMT</pubDate>
            <description><![CDATA[<p>코드 인젝션은 말 그대로 코드의 프로세스에 코드를 주입하고, 주입한 코드를 실행하도록 실행경로를 변경하는 것이다. </p>
<p>이번 미션은 누를때마다 1씩 감소하는 버튼을 2씩 증가하는 버튼으로 수정하는 것이다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/507b1cd2-92ef-4749-bfa3-7420b099c552/image.png" alt=""> 우선 value부터 찾아준다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c1675497-2fe8-4199-ab81-31997387c156/image.png" alt="">
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/02b97b69-1595-4f93-a1b9-8a616caeadb2/image.png" alt="">
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/559f7e54-5799-4dd1-bbc1-78871c62cfec/image.png" alt="">
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/0034e713-f950-40b2-ba2a-e4ae7f123229/image.png" alt=""> 오리지널 코드 삭제
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/97c01d9a-e43b-4031-a092-79e1642ad971/image.png" alt="">
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/099babec-8cf8-48f6-9cf3-cd398e77c89b/image.png" alt=""> 코드가 수정된 것을 확인할 수 있다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/6c3627c8-153a-4449-a00a-c7ff70677151/image.png" alt="">
어라?</p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/59c044cf-b9d8-4a9c-856f-8e504e61cf90/image.png" alt=""> 오류가 나길래 Memory Viewer에서 바로 수정 해줬다. </p>
<hr>
<p>(PW=013370)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[치트엔진 Tutorial step6 : Pointers]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EC%B9%98%ED%8A%B8%EC%97%94%EC%A7%84-Tutorial-step6-Pointers</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EC%B9%98%ED%8A%B8%EC%97%94%EC%A7%84-Tutorial-step6-Pointers</guid>
            <pubDate>Sun, 08 Mar 2026 10:20:34 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c91a7240-9e46-47ad-aac0-66a830159237/image.png" alt=""> Change value 버튼과 Change pointer 버튼이 주어진다. 
(이미 한번 눌러서 진행한 상태라서 이미지에는 저렇게 뜬다)
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c6d5581b-396f-4cdd-b365-18c2f73b1f21/image.png" alt=""> value에 100을 입력해주고 Change value를 눌러서 값의 주소를 찾는다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/0139095c-4588-4236-a441-1b3b3431ace6/image.png" alt=""> 우클릭으로 find out what accesses this address를 클릭 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/baba5c35-1c7a-488b-84e0-d0754750a110/image.png" alt=""> change value를 한 번 더 클릭하면 리스트에 뭔가 보여질거다. 
빨간 표시를 해둔 곳은 value의 주소다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/fc4dcac0-8a0a-48e9-b058-c7f45a0ce420/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/2a98be47-8cf6-4df0-8e08-e64375b71da6/image.png" alt=""> 8Bytes로 변경하고 헥스 박스를 체크, value의 주소를 입력하면 주소가 녹색으로 표시되어 뜬다. value 항목에는 아까 보았던 주소가 적혀있는 것을 확인할 수 있다. *static address
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/41fa4240-8668-42f2-9fe1-1d0f17c0f963/image.png" alt=""> 더블클릭으로 아래의 창에 고정?된 항목의 adress부분을 다시 더블클릭하면 창이 하나 나온다. Address부분의 내용을 복사해주자. 이 컴퓨터에서는 <code>&quot;Tutorial-x86_64.exe&quot;+34EC70</code>이 복사된다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/78e180f0-5adc-411d-a1b2-2c13811a2c15/image.png" alt=""> Add Address Manually를 눌러 pointer박스를 체크, 아래에 방금 복사했던 것을 붙여넣어준다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/172c812b-1c49-4bbb-beb7-550b98d7c933/image.png" alt=""> 현재 값과 일치하는 것을 확인할 수 있다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/da0f5bfb-f3fb-4a74-b3b5-c0a048c2dce1/image.png" alt=""> change pointer를 누르면 방금 추가한 포인터가 가리키는 값은 튜토리얼 페이지의 값과 일치하지만, 처음 고정한 주소의 값은 튜토리얼 페이지의 값과 다른 것을 확인할 수 있다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/1ee7cac9-9f31-4e32-9bd9-51cf58c10735/image.png" alt=""> 다음 단계로 넘어가기 위해서는 Active를 클릭하여 고정하고 값을 5000으로 수정해주면 된다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[파일 시그니처 File Signature ]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EA%B7%B8%EB%8B%88%EC%B2%98</link>
            <guid>https://velog.io/@is_kwonhan_ok/%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EA%B7%B8%EB%8B%88%EC%B2%98</guid>
            <pubDate>Sat, 07 Mar 2026 16:23:15 GMT</pubDate>
            <description><![CDATA[<h1 id="파일-시그니처-file-signature">파일 시그니처 File Signature</h1>
<p>(= 파일 매직 넘버)
파일의 내부 형식을 식별할 수 있게 해주는 <strong>고유한 바이트 패턴</strong>
운영체제나 분석도구는 파일 시그니처를 기준으로 <strong>파일의 형식 판단</strong></p>
<h2 id="헤더-시그니처-header-signature">헤더 시그니처 Header Signature</h2>
<ul>
<li>파일의 <strong>가장 첫 부분</strong>. 파일 형식을 인식할 때 가장 먼저 참고하는 부분</li>
<li>특정한 확장자 명을 가졌다는 것을 알려주는 Hex값
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/304fe5f6-a89c-4a21-9e08-e4ff39bc95da/image.png" alt=""></li>
</ul>
<h2 id="이미지-데이터">이미지 데이터</h2>
<ul>
<li>헤더와 푸터 시그니처 사이에 존재하는 Hex값. 실제 파일을 구성하는 정보</li>
</ul>
<h2 id="푸터-시그니처-footer-signature-trailer">푸터 시그니처 Footer Signature (Trailer)</h2>
<ul>
<li>파일의 <strong>가장 마지막 부분</strong></li>
<li>이미지, 문서 등의 포맷에서는 헤더 시그니처와 푸터 시그니처로 <strong>파일의 끝 명확히 식별</strong>, 푸터 시그니처가 존재하지 않을 수도 있음</li>
<li>삭제파일복구/손상파일분석 시, 푸터 시그니처까지 갖춰져 있어야 복구 가능성이 높음 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/61b1015e-55cc-49cf-9937-d7c7698b8613/image.png" alt=""></li>
</ul>
<h1 id="파일-시그니처의-활용">파일 시그니처의 활용</h1>
<h2 id="파일-임베딩--그림-안에-그림-숨기기">파일 임베딩 : 그림 안에 그림 숨기기</h2>
<ul>
<li>File Embedding. 이미지/오디오...같은 일반 파일에 <strong>다른 파일을 몰래 포함</strong>시키는 기법.</li>
<li>이미지의 모양이나 색을 바꾸는 것이 아닌, <strong>파일의 끝부분</strong>이나 <strong>특정 구조를 활용해 다른 데이터를 덧붙이</strong>는 방식이다. </li>
<li><blockquote>
<p>대부분의 파일 형식은 <strong>파일 끝(푸터 시그니처)에 데이터가 더 붙더라도 무시</strong>한다. 때문에, 이미지가 깨지지 않으면서도 다른 파일을 몰래 추가할 수 있다. </p>
</blockquote>
</li>
</ul>
<blockquote>
<p>실제 범죄에서는 공격자가 악성 실행파일을 <code>.jpg</code> 확장자로 위장해 침투시키는 경우가 많다. </p>
</blockquote>
<h2 id="파일-카빙--삭제-파일-복구">파일 카빙 : 삭제 파일 복구</h2>
<ul>
<li>File Carving. 분석 대상 디스크 이미지에서 특정 파일 시그니처를 기준으로 시작과 끝을 탐색해 파일을 추출하는 기법. 메타데이터가 없어도 동작.</li>
<li>foremost, scalpel, photorec 등의 도구 사용</li>
</ul>
<blockquote>
<p>Carving : 디스크/메모리덤프에서 메타데이터 없이 <strong>데이터 조각 자체만으로 파일을 복구</strong>하는 기법</p>
</blockquote>
<h2 id="은닉-파일-탐지">은닉 파일 탐지</h2>
<p>숨겨진 파일을 찾기 위해서는 시그니처가 중간에 반복되는지 확인해야함. jpg인 파일에서 뜬끔없이 <code>50 4B 03 04</code> 라는 zip파일의 시그니처가 발견된다면, 또 다른 파일이 숨어있다는 증거가 된다. </p>
<h2 id="자동-분류-및-증거-필터링">자동 분류 및 증거 필터링</h2>
<p>실제 포렌식 도구는 내부 시그니처를 기반으로 문서, 이미지, 실행파일 등으로 자동 분류/필터링
ex) <code>.doc</code> 확장자를 가진 파일들 중 실행파일(<code>4D 5A</code>)인 경우만 걸러내 우선 분석하는 방식</p>
<hr>
<h1 id="자주-보는-파일-시그니처들">자주 보는 파일 시그니처들</h1>
<h3 id="png">PNG</h3>
<p>헤더 : <code>89 50 4E 47 0D 0A 1A 0A</code> (P N G)
푸터 : <code>49 45 4E 44 AE 42 60 82</code> (I E N D)
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/9bb099dd-7c4e-416d-8e7d-29628c4f8827/image.png" alt=""> <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/8eeb9cc3-a0a1-472c-9d45-b0740d8414e6/image.png" alt=""></p>
<h3 id="jpeg">JPEG</h3>
<p>헤더 : <code>FF D8 FF E0</code> (J F I F)
푸터 : <code>FF D9</code></p>
<h3 id="pdf">PDF</h3>
<p>헤더 : <code>25 50 44 46</code> (% P D F)
푸터 : <code>25 25 45 4F 46</code> (% % E O F)</p>
<h3 id="zip-문서docx-xlsx-pptx">ZIP, 문서(DOCX, XLSX, PPTX)</h3>
<p>헤더 : <code>50 4B 03 04</code> (P K)
푸터 : <code>50 4B 05 06</code> or <code>50 4B 06 06</code></p>
<hr>
<p><a href="https://filesig.search.org/">https://filesig.search.org/</a>
<a href="https://en.wikipedia.org/wiki/List_of_file_signatures">https://en.wikipedia.org/wiki/List_of_file_signatures</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준 2839] 설탕 배달 / 파이썬]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EB%B0%B1%EC%A4%80-2839-%EC%84%A4%ED%83%95-%EB%B0%B0%EB%8B%AC-%ED%8C%8C%EC%9D%B4%EC%8D%AC</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EB%B0%B1%EC%A4%80-2839-%EC%84%A4%ED%83%95-%EB%B0%B0%EB%8B%AC-%ED%8C%8C%EC%9D%B4%EC%8D%AC</guid>
            <pubDate>Sat, 07 Mar 2026 15:20:06 GMT</pubDate>
            <description><![CDATA[<p>사탕가게에 설탕을 정확하게 Nkg 배달해야한다. 설탕은 3kg봉지와 5kg봉지가 존재하며, 최대한 적은 봉지를 가지고 배달을 간다. 
Nkg 배달할 경우 봉지 몇 개를 가지고 가면 되는가?(정확하게 만들 수 없는 경우 -1을 출력한다) 가 문제이다.</p>
<p>먼저 5로 나누고 나머지를 3으로 나누게끔 코드를 짰다.</p>
<pre><code class="language-python">n = int(input())

count = n // 5
n %= 5
if n % 3 == 0:
    count += n // 3
    if n % 3 != 0:
        print(-1)
    else:
        print(count)
print(-1)</code></pre>
<p>6kg같은 경우 5로 나누게되면 나머지가 1로 실패하지만 3kg짜리 두 개를 들고간다는 정답이 존재한다. 그냥 이상하다. 내가 왜 이렇게 코드를 짠거지??... print도 중복으로 출력을 한다. 뇌빼고 짰나보다... if문안에 있는 저 if문은 정체가 뭐냐며...</p>
<p>5로 나누어 떨어진다면 개수를 출력해서 반복문을 빠져나가고, 아니라면 -3씩 빼서 개수를 1씩 더한다. while-else문은 while문이 중단 없이 끝나는 경우(break) 실행하는 코드다. </p>
<pre><code class="language-python">while n &gt;= 0:
    if n % 5 == 0:
        count += n // 5
        print(count)
        break
    n -= 3
    count += 1
else:
    print(-1)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준 1003] 피보나치 함수 / 파이썬]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EB%B0%B1%EC%A4%80-1003-%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%ED%95%A8%EC%88%98-%ED%8C%8C%EC%9D%B4%EC%8D%AC</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EB%B0%B1%EC%A4%80-1003-%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%ED%95%A8%EC%88%98-%ED%8C%8C%EC%9D%B4%EC%8D%AC</guid>
            <pubDate>Sat, 07 Mar 2026 15:14:50 GMT</pubDate>
            <description><![CDATA[<p>N번째 피보나치를 구하는 코드에서 0과 1이 몇 번 출력되는지 구하는 프로그램을 작성하라고 한다.</p>
<p>아는게 많이 없어서 그런가 시한 제한이 있는 문제는 감이 잘 오지 않는다.
count0, count1를 전역변수로 선언하여 카운팅한다.
fibo함수에서는 n이 0, 1이면 count0, count1을 증가시키고 0, 1리턴한다. 이외의 숫자라면 다음 계산을 진행한다. </p>
<pre><code class="language-python">import sys
input = sys.stdin.readline

def fibo(n):
    global count0, count1
    if n == 0:
        count0 += 1
        return 0
    elif n == 1:
        count1 += 1
        return 1
    else:
        return fibo(n - 1) + fibo(n - 2)

for _ in range(int(input())):
    n = int(input())
    count0, count1 = 0, 0
    fibo(n)
    print(count0, count1)</code></pre>
<p>시간 오버가 나온다.
짜면서도 그럴 것 같았다. </p>
<p>힌트는 n이 40보다 작거나 같은 자연수 또는 0이라는 멘트다.</p>
<pre><code class="language-python">import sys
input = sys.stdin.readline

count0 = [0] * 41
count1 = [0] * 41

count0[0], count1[1] = 1, 1
for i in range(2, 41):
    count0[i] = count0[i - 1] + count0[i - 2]
    count1[i] = count1[i - 1] + count1[i - 2]

for _ in range(int(input())):
    n = int(input())
    print(count0[n], count1[n])

import sys
input = sys.stdin.readline

x = int(input())

count = [0] * 1000001

for i in range(2, x + 1):
    count[i] = count[i - 1] + 1
    if i % 2 == 0:
        count[i] = min(count[i], count[i // 2] + 1)
    if i % 3 == 0:
        count[i] = min(count[i], count[i // 3] + 1)
print(count[x])</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[파일시스템, FAT32]]></title>
            <link>https://velog.io/@is_kwonhan_ok/FAT-NTFS-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C</link>
            <guid>https://velog.io/@is_kwonhan_ok/FAT-NTFS-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C</guid>
            <pubDate>Fri, 06 Mar 2026 16:07:33 GMT</pubDate>
            <description><![CDATA[<h1 id="file-system">File System</h1>
<p>파일시스템에 대해서는 <a href="https://velog.io/@is_kwonhan_ok/07.-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C">여기</a>를 참고 </p>
<blockquote>
<p>💡 파일시스템과 디지털 포렌식</p>
</blockquote>
<ol>
<li>파일시스템에 대한 정보 없이는 데이터의 저장 위치 알아내기 어려움</li>
<li>데이터의 위치를 알아냈더라도, 메타데이터는 파일의 데이터와 따로 저장됨 
→ 메타데이터를 알아내기 위해 파일시스템 구조에 대한 이해가 필요</li>
<li>파일의 변경 이력을 가져오거나 삭제된 파일 복구하는 일이 가능해짐 
→ 대부분의 파일시스템은 저널링 기능을 지원. 저널링 과정에서 생성된 로그는 디지털 포렌식의 주요분석대상 </li>
</ol>
<blockquote>
<p>💡 파일시스템 공부의 필요성  </p>
</blockquote>
<ol>
<li>새 공격기법에 대한 심츠적 분석 가능 </li>
<li>도구를 온전히 신뢰할 수 없음. 파일시스템 분석을 통해 도구에서 찾아내지 못한 흔적을 발견할지도</li>
<li>다른 아티팩트를 분석할 때에도 큰 도움이 될 수 있음 </li>
</ol>
<h3 id="파일-시스템-종류">파일 시스템 종류</h3>
<table>
<thead>
<tr>
<th align="center">운영체제</th>
<th align="center">파일시스템</th>
<th align="center">특징</th>
</tr>
</thead>
<tbody><tr>
<td align="center">Windows</td>
<td align="center">NTFS</td>
<td align="center">Windows NT 3.1 이후부터 현재까지 사용중</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">ReFS</td>
<td align="center">NTFS 대체 위한 차세대 파일시스템</td>
</tr>
<tr>
<td align="center">Linux</td>
<td align="center">EXT4</td>
<td align="center">Linux에서 2006부터 사용중</td>
</tr>
<tr>
<td align="center">Unix</td>
<td align="center">UFS</td>
<td align="center">Unix계열 운영체제에서 사용</td>
</tr>
<tr>
<td align="center">macOS</td>
<td align="center">HFS+ / APFS</td>
<td align="center">Apple 구형 / 신형 파일시스템</td>
</tr>
<tr>
<td align="center">공통</td>
<td align="center">FAT / FAT32</td>
<td align="center">초기 Windows가 사용. 현재는 USB에 주로 씀</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">exFAT</td>
<td align="center">FAT32의 크기 단점 개선</td>
</tr>
</tbody></table>
<blockquote>
<p>NTFS (New Technology File System)
ReFS (Resilient File System)
EXT4 (Extended File System4)
UFS (Unix File System)
HFS+ (Hierarchical File System Extended)
APFS (Apple File System)
FAT32 (File Allocation Table)
exFAT (Extended File Allocation Table)</p>
</blockquote>
<h1 id="mbr과-vbr">MBR과 VBR</h1>
<ul>
<li>볼륨의 가장 기본을 이루는 구조</li>
<li>컴퓨터 부팅 과정에서 사용되는 데이터. 
_메인보드의 BIOS가 POST(Power On Self-Test) &amp; 기본적인 하드웨어 점검 끝내면 MBR내 부트코드 호출 _</li>
</ul>
<h2 id="mbr">MBR</h2>
<ul>
<li><p>Master Boot Record. <strong>디스크</strong>의 가장 <strong>첫 섹터</strong>(512바이트)에 저장되는 데이터</p>
<blockquote>
<p>💡 섹터 : 디스크 최소 기억 단위. 전통적 HDD에서 512바이트</p>
</blockquote>
</li>
<li><p>저장장치 파티션 정보, 각 파티션에 설치된 볼륨 정보 가지고있음</p>
<ul>
<li>MBR부트코드는 이 정보를 바탕으로 부팅가능한 볼륨 식별, 해당 볼륨의 부트코드로 실행흐름 넘김</li>
<li>VBR부트코드는 실행 흐름 넘겨받아 해당 볼륨에서 컴퓨터 부팅되도록 부트로더&amp;커널 로드 <pre><code>            ↑ → → → → → → → → ↓
BIOS - POST → MBR | MBR Slack | VBR | Volume Data </code></pre><blockquote>
<p>💡Slack 슬랙
: 파일시스템/데이터 구조의 빈 공간을 의미. 파일슬랙, RAM슬랙 등 다양한 슬랙 존재 </p>
</blockquote>
</li>
</ul>
</li>
</ul>
<h3 id="mbr-구조">MBR 구조</h3>
<p>*HxD를 관리자 권한으로 실행 후 <code>도구 &gt; 디스크 열기</code> 로 확인가능 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/76de90d3-3aef-451a-a471-1f8a7dad3ae0/image.png" alt=""></p>
<ul>
<li><p>부트코드 <code>0x0 - 0x1BD</code> : 부팅과정에서 이용되는 코드 </p>
</li>
<li><p>파티션 테이블 엔트리 #1 ~ #4 <code>0x1BE - 0x1CD</code>, <code>0x1CE - 0x1DD</code>, <code>0x1DE - 0x1ED</code>, <code>0x1EE - 0x1FD</code> : 각 파티션 정보(16바이트) </p>
<ul>
<li>부트플래그 <code>0x0 - 0x0 (1)</code> : 부팅불가<code>0x00</code>, 부팅가능<code>0x80</code></li>
<li>CHS 시작주소 <code>0x1 - 0x3 (3)</code> : CHS방식 기반 시작 주소(섹터)</li>
<li>파일시스템 타입 <code>0x4 - 0x4 (1)</code> : NTFS<code>0x07</code>, FAT32<code>0x0C</code>...</li>
<li>CHS 끝 주소 <code>0x5 - 0x7 (3)</code> : CHS방식 기반 끝 주소(섹터)</li>
<li>LBA 시작주소 <code>0x8 - 0xB (4)</code> : LBA방식 기반 시작 주소(섹터)</li>
<li>파티션 총 섹터 개수 <code>0xC - 0xF (4)</code> : 섹터개수 * 512 = 전체 섹터 크기 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/eacd9454-eb8b-4bab-a14f-3569d8f64d09/image.png" alt=""></li>
</ul>
</li>
<li><p>시그니처 <code>0xFE - 0x1FF</code> : <code>0x55 0xAA</code></p>
</li>
</ul>
<blockquote>
<p>💡 CHS(Cylinder-Head-Sector)와 LBA(Logical Block Addressing)
HDD 안에서 주소 표현 방식. </p>
</blockquote>
<ul>
<li>CHS : HDD의 실린더, 헤드, 섹터라는 물리적 특성 이용해 표기 (현재는 거의 사용X)</li>
<li>LBA : 저장장치 내의 모든 <strong>섹터</strong>들을 <strong>일차원적으로 배열</strong>해 순서대로 숫자 지정해 주소 계산 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/542db5b5-2e5d-4957-bb59-080571e84459/image.png" alt=""></li>
</ul>
<h2 id="vbr">VBR</h2>
<ul>
<li>Volume Boot Record. <strong>볼륨</strong>의 가장 <strong>첫 섹터</strong>에 저장되는 데이터. 하나 이상의 섹터로 구성 </li>
<li>파일 시스템마다 구조가 모두 다르다</li>
</ul>
<h1 id="fat32">FAT32</h1>
<p><strong>F</strong>ile <strong>A</strong>llocation <strong>T</strong>able : 파일이 저장되는 위치를 기록한 테이블 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/87c3de5d-00a5-4d1c-ad85-a16d73de61a3/image.png" alt=""></p>
<h2 id="reserved-area">Reserved Area</h2>
<ul>
<li><p>32개의 섹터</p>
</li>
<li><p>구성</p>
<ul>
<li><p>Boot Sector : 0번섹터(원본), 6번섹터(백업) <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/cfdd02ae-8745-4b91-89ab-bf2e5c4eb0f1/image.png" alt=""></p>
<ul>
<li><p>Jump Command <code>0x0 - 0x2</code> : 부트코드로 점프</p>
<blockquote>
<ul>
<li>FAT32 파일시스템을 가진 것이 USB밖에 없어서, 저장용도로 사용하던 USB를 사용했다. 
<code>0x00-0x03</code>값이 <code>EB 00 90</code>인데, 이는 굳이 점프해서 부트코드를 실행하지 않아도 된다는 뜻이다. 운영체제 부팅을 위한 용도는 <code>EB 58 90</code>으로 시작할텐데, 이는 현재위치에서 0x58만큼 즉 88바이트만큼 점프하라는 소리이다. </li>
<li></li>
</ul>
</blockquote>
</li>
<li><p>BPB(Bios Parameter Block) <code>0x3 - 0x5A</code> : 볼륨 전반적인 설정 저장. 디스크의 신분증 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/6c4b0764-e3b0-41a0-a0d0-b7d2e4f8022d/image.png" alt=""></p>
<blockquote>
<ul>
<li>OEM ID : 포맷을 수행한 운영체제나 도구의 이름 적는 옵션 영역. FAT32의 경우 <code>MSDOS5.0</code>으로 고정(윈도우 탐색기로 포맷)
<span style = "color:gray">*공장 출고시 자체툴로 초기화하거나, 서드파티 둘, 리눅스, AOS에서 포맷 시 다른 값이나 공백일 수도 있다.</span></li>
<li>Reserved Sector : <code>0x12</code>. FAT영역 이전에 존재하는 섹터 수. FAT영역은 0x12 * 0x200 = <code>0x2400</code>에 위치</li>
<li>Total Sector 32 : <code>0x394DFE0</code>. 볼륨 총 섹터 수 </li>
<li>FAT Size 32 : <code>0x3947</code>. FAT Area 1개의 크기. 0x3947 * 0x200 = <code>0x728E00</code></li>
<li>Volume Serial Number :<code>0xEED5492B</code>. 볼륨 식별하는 4바이트로 구성된 숫자 </li>
<li>Voulme Label : <code>NO NAME</code>. 사용자가 볼륨에 붙인 이름 </li>
<li>File System Type : <code>FAT32</code></li>
</ul>
</blockquote>
</li>
<li><p>부트코드 :<code>0x5B - 0x1FD</code> : 볼륨 부트 코드 </p>
</li>
<li><p>시그니처 <code>0x1FE - 0x1FF</code> : <code>0x55 0xAA</code></p>
</li>
</ul>
</li>
<li><p>FSINFO : 1번섹터(원), 7번섹터(백)</p>
</li>
<li><p>Boot Strap : 2번섹터(원), 8번섹터(백)</p>
</li>
<li><p>Reserved Sector : 일반적으로 빈 공간. 나머지 섹터들에 해당</p>
</li>
</ul>
</li>
</ul>
<h2 id="fat-area">FAT Area</h2>
<p>FAT Table 2개(FAT#1, FAT#2)가 연속으로 존재하는 영역. FAT Table은 파일시스템에 존재하는 파일 및 폴더에 대한 메타데이터를 저장하는 공간이다. 
*2개인 이유는 원본과, 백업</p>
<pre><code>FAT Area 오프셋 = VBR 오프셋 + Reserved Sector * 섹터크기(FAT#1)</code></pre><p>(FAT#2는 FAT#1섹터 + FAT Size로 이동해 접근할 수 있음)</p>
<ul>
<li><p>여러개의 엔트리로 구성되며, 각각의 엔트리는 Data Area 클러스터의 할당상태를 나타냄 </p>
<blockquote>
<p>💡 <strong>엔트리</strong> Entry</p>
</blockquote>
<ul>
<li>&#39;항목&#39;이나 &#39;기록&#39; (사전적 정의)</li>
<li>디스크의 각 방(클러스터)이 현재 어떤 상태인지 적어놓은 장부의 한 칸</li>
</ul>
</li>
<li><p><strong>4바이트</strong>마다 1개의 엔트리를 구성. 0, 1번 엔트리는 사용하지 않는다(시스템에 의해 사용되는 특별한 엔트리).</p>
</li>
<li><p>Data Area의 클러스터는 0x1000바이트 크기를 가지고, FAT Area의 *<em>하나의 엔트리가 하나의 클러스터와7 1:1대응 *</em> (FAT에서는 엔트리번호 == 클러스터 번호)</p>
</li>
<li><p><code>0x00 00 00 00</code> : Unassigned
<code>0x(Entry Number)</code> : Allocated (다음에 읽을 엔트리 넘버)
<code>0xFF FF FF 0F</code> : End of Marker 
<code>0xFF FF FF F7</code> : Bad Cluster 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/26558c96-290c-4777-9701-70d2ee68cdbf/image.png" alt=""></p>
</li>
</ul>
<h2 id="data-area">Data Area</h2>
<ul>
<li><p>FAT Area 주소에서 FAT크기 2개를 더한 값</p>
<pre><code>Data Area Offset 
= VBR Offset + Reserved Sector * Sector size + FAT size * Sector size * 2 </code></pre><p>→ FAT32의 루트 디렉토리가 위치. 2번 클러스터이며, FAT 테이블의 2번 엔트리에 대응 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/aa9d60ce-595c-449e-b8a2-d22914e5c317/image.png" alt=""> <em>0 + 0x12 * 0x200 + 0x3947 * 0x200 * 2 = 0xE54000</em></p>
</li>
<li><p>Root Directory에는 Directory Entry라는 구조가 반복되어 저장된다. 이미지는 Directory Entry의 구조이다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/6e36a0e0-6ea4-49bf-aad9-103179d87e1a/image.png" alt=""> <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c6e1fb43-00e6-41ce-aad3-194ba0d6c0b4/image.png" alt=""></p>
<ul>
<li>SFN에서 Attributes의 역할은 속성을 의미한다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/22ac5f3d-4d9f-448d-a7e9-7bda9893932d/image.png" alt=""> ＊LFN의 경우 0, 1, 2, 3번 비트를 모두 켜 <code>0x0F</code> 고정이다. LFN조각이라는 신호가 된다. </li>
<li>Reserved영역의 0x0D오프셋은 Creation Time ms의 역할을 하기도 한다. 즉 파일 생성 시간을 10ms 단위로 기록. (0x82 = 130이므로 1300ms = 1.3s시점에 생성됨을 뜻함)</li>
<li>Create Time 영역의 값은 2진수로 변환하여 Hour(5), Minute(6), Second(5) 순서로 잘라 10진수로 계산한다. 5비트로는 0~31을 저장할 수 있기에 FAT파일 시스템은 초를 2초 단위로 저장한다. 따라서 초는 * 2를 해주어야한다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/7211ae80-20eb-4787-b777-68ef2adf5ec7/image.png" alt=""> </li>
<li>Create Date 영역의 값은 2진수로 변환하여 Year(7), Month(4), Date(5)로 잘라서 계산한다. 년도는 <strong>1980년</strong>을 기준으로 더해서 계산한다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/aca0b3fa-9bf5-4256-ab95-e5c9dc4ee6f6/image.png" alt=""></li>
<li>Accessed Date, Written Time, Written Date도 위와 동일하게 계산하면 된다.</li>
<li>FAT에서는 마지막 접근에 대해 날짜 정보만 유지하기에 MAC시간(Modified, Accessed, Created) 정보는 완벽히 표현하지 못한다. </li>
</ul>
</li>
<li><p>디렉토리 엔트리는 이름을 표현할 수 있는 필드가 8바이트이다. 첫번째 바이트는 파일이 파일시스템 상에 존재할 경우 이름을 표현하기 위해 사용되고, 삭제되었을 경우 0xE5로 파일이 삭제되었음을 나타낸다. </p>
<ul>
<li>파일의 이름이 8바이트를 초과할 경우 Long File Name(<strong>LFN</strong>) 엔트리라는 구조를 사용해 표현한다. 하나의 LFN엔트리는 13문자까지 표현가능하기에, 13문자를 초과한다면 하나 이상의 LFN이 사용된다. 
→ 여러개의 엔트리가 사용될 경우 Offset 0번의 Seq Num으로 순서를 구분한다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/85c6f6cd-9710-4740-b719-a7ccb1f9549b/image.png" alt=""> <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/89d1e70b-cf3d-4265-b428-ac07b9488ed2/image.png" alt=""> <ul>
<li>긴 파일이름을 저장할 때 LFN아래에 SFN이 반드시 붙는다. LFN엔트리가 SFN엔트리와 관련 있는 것이 맞는지 확인해야하는데, 그 방법이 체크섬 Checksum(Chesum)이다. 모든 LFN엔트리의 0x0D 위치에 똑같이 적어둔다. <blockquote>
<p>💡 체크섬 생성은 SFN의 11바이트(이름8+확장자3)을 이용한다.</p>
</blockquote>
<ol>
<li>sum = 0</li>
<li>sum의 비트를 오른쪽으로 비트 회전하여 한 문자의 아스키값을 더한다. </li>
<li>2번을 반복하며 11개를 다 돌리고 남은 최종 1바이트가 체크섬이 된다.</li>
</ol>
</li>
</ul>
</li>
</ul>
</li>
<li><p>Data Area 찾아가기</p>
<pre><code>원본 데이터 주소 : Root Directory + 클러스터 크기 * (클러스터 번호 - 2)</code></pre><blockquote>
<p>💡 <code>Ctrl + G</code> : 오프셋 이동</p>
</blockquote>
<ul>
<li>CAN0226 폴더 - First Cluster High&amp;Low가 각각 0x001B, 0x1863이므로 원본은 <code>0x1B1863</code>번째 클러스터에 있다. (상위2바이트가 0x0000인 경우 클러스터 번호가 작아 하위2바이트만으로 충분히 표현 가능한 것이다.) 
<em>0xE54000 + 0x4000 \</em> (0x1B1863 - 2) = 0xE54000 + 0x6C6184000 = 0x6C6FD8000*<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/77a2bbd2-b90c-4b9e-a2ec-3754115c5df3/image.png" alt=""></li>
</ul>
</li>
</ul>
<pre><code>forensic-LFNname.txt 파일 - 0x50006번 클러스터에 위치. 
*0xE54000 + 0x4000 \* (0x50006 - 2) = 0xE54000 + 0x140010000 = 0x140E64000* ![](https://velog.velcdn.com/images/is_kwonhan_ok/post/d393a69f-7ea8-4a55-b42c-67da29721fb7/image.png)</code></pre><blockquote>
<p>❓
    1. 왜 SFN엔 무조건 대문자로 저장이되는가?
    -&gt; SFN은 옛날방식, LFN은 최근방식을 따른다. 옛날 방식에서는 대소문자를 굳이 구별해서 저장할 여유가 없었기에 시스템적으로 파일 이름은 무조건 대문자로 처리했다. (대소문자를 구분하려면 &#39;a&#39;인지 &#39;A&#39;인지 매번 검사해야함)
    2. 0x00이 왜 사이사이에 존재하는가?
    -&gt; 유니코드를 이용하기 때문에 U+0066을 저장해 둔 것이다. 반면 SFN은 아스키를 사용하기에 빈틈없이 붙어서 보인다.
    3. 왜 SFN위에 LFN이 위치하지?
    -&gt; OS가 디렉토리를 읽을 때 SFN바로 위에 있는 LFN들을 역순으로 수집하여 이름을 완성하기 때문이다.<br>    4. 두번째 LFN의 값이 0x42인 이유?
    -&gt; 두번째라는 0x02에 마지막 조각이라는 신호인 0x40이 합쳐진 것이다.</p>
</blockquote>
<blockquote>
<p>❓ 한글 이름의 파일명일 경우 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/dbaf065e-4615-4792-ae10-68f997dfbdf8/image.png" alt=""> 파일 추가해줬다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/8b8c7f6d-a90d-4b2e-8225-c004be2729fe/image.png" alt=""> 0xE543C0이 추가한 한국어 파일인듯 하다... (확장자:TXT, 두줄위에 01, 두줄위에 42)
디렉토리 엔트리에서는 완성형 한글코드 값을 사용한다。 
안 0xBEC8, 녕 0xB3E7, 하 0xC7CF, 세 0xBCBC, 요 0xBFE4, 반 0xB9DD, 갑 0xB0A9, 습 0xBDC0, 니 0xB4CF, 다 0xB4D9 <a href="https://kkamagui.tistory.com/234">완성형 한글코드</a> <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/e2185a9f-77df-4cee-8f6e-4ce5e55f9f62/image.png" alt=""> 안녕하～TXT 로 저장되는 것 같다.(리틀엔디언 아님. 기본적으로 1바이트씩 순서대로읽음) <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/f6b51ff0-27a3-4eca-87a5-47affb5313b5/image.png" alt=""> LFN은 유니코드다. (리틀엔디언 적용된다. <code>48 C5</code>는 U+C548로 해석) <a href="https://seb.kr/unicode/">유니코드 디코더</a></p>
</blockquote>
<h1 id="ftk-imager-동작원리">FTK Imager 동작원리</h1>
<p>이미지 분석 도구들은 파일시스템 구조를 하나하나 분석해 사용자에게 보여줌.</p>
<h2 id="메타데이터-추출">메타데이터 추출</h2>
<p>FTK Imager로 파일을 추출하면 데이터 뿐만 아니라 메타데이터까지 싯템에서 추출하여, 추출된 파일에 삽입해줌</p>
<blockquote>
<p>❗ 시간 값이 차이날 수 있는데, FTK Imager의 시간은 UTC+0시간이고, Windows탐색기는 사용자의 설정에 따른 시간을 보여주므로, 한국의 유저인 경우 UTC+9로 보여주어 FTK Imager의 값보다 9시간 더 빠르다. </p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[디지털 포렌식 기초]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EB%94%94%EC%A7%80%ED%84%B8-%ED%8F%AC%EB%A0%8C%EC%8B%9D-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EB%94%94%EC%A7%80%ED%84%B8-%ED%8F%AC%EB%A0%8C%EC%8B%9D-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Thu, 05 Mar 2026 14:29:00 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>❗ 이 글은 Dreamhack의 &#39;Digital Forensics Specialist&#39;강의를 바탕으로 공부하며 정리한 것입니다.</p>
</blockquote>
<h1 id="디지털-증거">디지털 증거</h1>
<p><em>디지털 증거란 범죄와 관련하여 디지털 형태로 저장되거나 전송되는 증거로서의 가치가 있는 정보를 말한다. (대검찰청 &lt;디지털 증거의 수집∙분석 및 관리 규정&gt;)</em></p>
<h2 id="특성">특성</h2>
<ul>
<li><p><strong>매체 독립성</strong> 
: 정보는 값이 같다면 어느 매체에 저장되었던지 동일한 가치 지님</p>
</li>
<li><blockquote>
<p>원본과 사본의 구별 불가능 </p>
</blockquote>
</li>
<li><p><strong>비가시성, 비가독성</strong> 
: 대부분 눈에 보이지 않음
-&gt; 적절한 도구 필요
-&gt; 디지털 증거를 다룰 때는 컴퓨터 및 프로그램이 신뢰할 수 있는지, 조작하는 사람이 충분한 전문성을 가지고 있는지 검증해야 함</p>
</li>
<li><p><strong>휘발성</strong> 
: 전원 공급이 중단될 경우 기억된 내용이 없어지는 성질. 꺼지면 사라짐
-&gt; 수집하고자 하는 데이터가 휘발성인 RAM 메모리에 저장된다면 전원이 꺼지면 데이터가 날아가기때문에 신속한 수집이 요구 
-&gt; 현장에는 데이터를 가진 많은 기기들이 존재, <strong>가장 휘발성이 높은 데이터부터 수집</strong>해야함. 
-&gt; 하나의 PC에서 데이터를 수집할 경우, <strong>휘발성이 높은 RAM 메모리부터</strong> 수집해야함_ (실행중이던 프로세스 정보, 사용자가 입력한 PW, 암호화 키 등...중요 데이터 다수 저장)</p>
</li>
<li><p><strong>변조 용이성(취약성)</strong> : 복사/수정/삭제 등 변조 쉬움. 여기서의 변조는 &#39;수사기관&#39;이 행하는 변조를 의미</p>
</li>
<li><blockquote>
<p>수집∙분석 과정에서 조작되지 않았다는 증명이 필요
💡 <strong>해시함수 Hash function</strong></p>
</blockquote>
<ul>
<li>변조 용이성을 극복하기 위해 사용.</li>
<li>임의 길이의 데이터를 고정된 길이의 데이터(해시값, Hash value)로 매핑하는 함수. 
ex) SHA-256 해시함수는 어떤 입력이든 256bit의 결과가 나온다. </li>
<li>입력값이 1bit만 바뀌어도 완전히 다른  값이 출력<blockquote>
<hr>
<p>💡 <strong>해시함수를 이용한 무결성 입증</strong></p>
</blockquote>
</li>
</ul>
</li>
<li><p>무결성 : (증거수집시점부터 법정공판까지 디지털 증거가) 변조되지 않았음</p>
<ol>
<li>데이터를  수집할 때에 해시값 계산</li>
<li>수집한 파일 목록과 각각의 해시값을 압수 대상자에게 확인</li>
<li>(법정에서) 수집한 파일을 증거로 이용할 때 해시값 재계산, 두 해시값을 비교하여 무결성 입증 <blockquote>
</blockquote>
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/3777c69f-1b0f-4ab6-bf2a-ba2379b42b6e/image.png" alt=""> 해시값이 원본과 서로 다르면 법정에서는 증거가 임의로 조작되었다고 판단할 수 있다. <blockquote>
<hr>
<p>💡 해시값 추출 </p>
</blockquote>
</li>
</ol>
<ul>
<li>CMD로 해시값 추출하기 (이외에도 여러 도구들이 존재)<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/a69adc8d-8de5-4266-ba32-0bd601beffe6/image.png" alt=""> *SHA-n의 경우 SHA-n이 아니라 SHAn로 입력해야한다.</li>
</ul>
</li>
<li><p><strong>복제 용이성</strong> 
: 쉽게 복제 가능, 복제할 경우 원본과 동등한 가치 지님
-&gt; 디지털 증거를 압수할 경우 정보를 출력하거나 복제하여 제출받는 것이 원칙. 그렇지 못한 경우 정보저장매체를 압수하는 것이 예외</p>
</li>
<li><p><strong>대규모성</strong> 
: 방대한 양의 데이터 저장 가능
-&gt; 대량의 데이터에서 필요한 증거 추출을 위해 전문적인 분석 도구와 기술이 요구
-&gt; 수사과정에서 사생활 침해 문제를 최소화하기위해, 피의자를 참여권을 보장하는 등 절차상 피의자에게 권리 부여. 적절하게 보장해주지 않는다면 디지털 증거는 법정에서 사용 불가 </p>
</li>
<li><p><strong>초국경성</strong> 
: 증거 위치가 국경을 초월할 수 있음
  -&gt; 해외서버의 도움을 받아 데이터를 받아야 하는 경우나 데이터의 저장 위치가 명확하게 식별되지 않는 경우 등의 문제가 많음 
-&gt; 관할권 인정에 대해 국제적인 문제가 되기도 함</p>
<blockquote>
<p>_ ex) A사무실에서 정보를 압수한다는 영장을 사용, A사무실의 PC를 조작하다보니 구글드라이브에 중요한 정보가 저장된 것을 발견. A사무실 내의 컴퓨터로 접속은 되지만, 엄격하게 데이터가 저장된 위치는 해외이기에 압수할 수 없음._ </p>
</blockquote>
</li>
</ul>
<h1 id="디지털-포렌식-digital-forensics">디지털 포렌식 Digital Forensics</h1>
<ul>
<li><p>디지털 증거를 수집/보존/분석/현출하는데 적용되는 과학기술 및 절차(대검찰청 예규 제3조 제3항)</p>
</li>
<li><blockquote>
<p>디지털 포렌식을 수행하기 이전에 특정한 사실관계를 파악하고 싶다는 명확한 목적이 존재해야함</p>
</blockquote>
</li>
<li><p>법정에서 무결성과 증거 능력을 유지할 수 있도록 디지털 증거를 수집하고 분석하는 프로세스. 포렌식 과학(법과학)의 한 분야로 사이버 범죄를 조사하는데 사용되지만, 형사 및민사 수사에도 도움이 될 수 있음.(IBM)</p>
</li>
<li><p>컴퓨터 범죄와 관련해 디지털 장치에서 발견되는 자료를 복구하고 조사하는 법과학의 한 분야. 디지털 기기의 데이터를 수집/분석/보존/해석하여 법적 증거로 활용할 수 있도록 하는 과학적 수사기법.</p>
</li>
<li><blockquote>
<p>디지털 범죄와 관련하여 누가, 언제, 무엇을, 어떻게 했는지 밝혀내는 과정</p>
</blockquote>
</li>
<li><blockquote>
<p>컴퓨터, 스마트폰, 서버, USB, 클라우드 등에서 사용자의 흔적을 찾아내는 것이 주목적</p>
</blockquote>
</li>
</ul>
<blockquote>
<p><strong>포렌식</strong> : Forensic Science. 법과학. 과학적 방법을 이용한 범죄 수사 기법.  </p>
</blockquote>
<blockquote>
<p>💡 <strong>디지털 포렌식이 중요한 이유</strong>
공격자가 자신의 흔적을 지우기 위해 로그 기록, 레지스트리 등의 증거를 없애거나, 각종 암호화 기법을 통해 증거를 은닉한다. 하지만 디지털 세계에서는 반드시 흔적이 남고, 이 흔적을 추적해 사건의 실체를 밝혀내어 범인을 특정하는 것이 디지털포렌식 수사관이다. </p>
</blockquote>
<hr>
<p>  💡 <strong>디지털 포렌식 수사관?</strong>
디지털 상에 남아있는 정보를 수집하고 분석해 디지털 범죄에 대한 단서를 찾음 
-&gt; 범행과 관련된 단서, 기록을 특정해 법적 증거자료로 만듦. 삭제/은닉한 데이터를 복구해 증거로 만들기도핢.
-&gt; 확보한 자료가 법정에서 증거로 채택될 수 있도록 신뢰성을 확보하고, 유지∙보관하여 법정에 제출</p>
<h2 id="종류">종류</h2>
<ul>
<li><p>디스크 포렌식 Disk Forensic
: 컴퓨터 저장장치(SSD, HDD...)에 저장된 데이터 분석. 디스크 내부 파일시스템의 구조 분석부터 디스크에 저장된 사용자 데이터까지 폭 넓은 분야를 통칭.</p>
</li>
<li><blockquote>
<p>HDD, SSD, USB, C드라이브... (윈도우, 리눅스, MacOS / 개인, 서버, 클라우드)</p>
</blockquote>
</li>
<li><p>메모리 포렌식 Memory Forensic
: 컴퓨터의 휘발성 메모리(RAM)에 저장된 데이터 분석. 암호화키를 발견하거나 주요 사용자의 정보를 획득할 수 있음. 최근 중요성 증가.</p>
</li>
<li><p>모바일 포렌식 Mobile Forensic
: 모바일 기기(스마트폰...)에 저장된 데이터 분석. 현재 실무적으로 비중이 가장 크고 중요. 스마트폰 보안이 강화되면서 데이터 획득 기술의 난도가 점차 증가. IoT의 경우도 큰 범주에서 모바일 포렌식 분야로 봄</p>
</li>
<li><p>네트워크 포렌식 Network Forensic
: 기업 내부의 네트워크 구조 파악/수집된 패킷 분석해 공격행위 파악... 네트워크와 관련된 디지털 포렌식을 수행. </p>
</li>
</ul>
<blockquote>
<p>증거 추출(EE)의 영역에서는 절차적인 부분들이 굉장히 중요. <strong>엄격한 절차</strong></p>
</blockquote>
<ul>
<li>침해사고 대응 Incident Response(IR)
: 침해사고가 발생할 시 신속한 대응을 통해 해커의 침입 경로 파악 및 악성코드 잔존 여부 파악 등 침해사고와 관련된 디지털 포렌식 수행. -&gt; 타임라인 구성, 조치 ...</li>
</ul>
<blockquote>
<p>*침해사고 : 
  [정보통신망 이용촉진 및 정보보호 등에 관한 법률 제2조 제7항]
  “침해사고”란 다음 각 목의 방법으로 정보통신망 또는 이와 관련된 정보시스템을 공격하는 행위로 인하여 발생한 사태를 말한다.
  가. 해킹, 컴퓨터바이러스, 논리폭탄, 메일폭탄, 서비스거부 또는 고출력 전자기파 등의 방법
  나. 정보통신망의 정상적인 보호ㆍ인증 절차를 우회하여 정보통신망에 접근할 수 있도록 하는 프로그램이나 기술적 장치 등을 정보통신망 또는 이와 관련된 정보시스템에 설치하는 방법</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[이진탐색(=이분탐색, 이분검색), 합병정렬]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EC%9D%B4%EC%A7%84%ED%83%90%EC%83%89%EC%9D%B4%EB%B6%84%ED%83%90%EC%83%89-%EC%9D%B4%EB%B6%84%EA%B2%80%EC%83%89-%ED%95%A9%EB%B3%91%EC%A0%95%EB%A0%AC</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EC%9D%B4%EC%A7%84%ED%83%90%EC%83%89%EC%9D%B4%EB%B6%84%ED%83%90%EC%83%89-%EC%9D%B4%EB%B6%84%EA%B2%80%EC%83%89-%ED%95%A9%EB%B3%91%EC%A0%95%EB%A0%AC</guid>
            <pubDate>Wed, 04 Mar 2026 14:19:01 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이전 글들에도 내용이 있지만 다시 한번 짚어봅시다.</p>
</blockquote>
<ul>
<li>정렬되지 않은 리스트에서 주어진 키 찾기 -&gt; 순차 탐색</li>
<li>정렬된 리스트에서 주어진 키 찾기 -&gt; 이진 탐색</li>
</ul>
<h2 id="분할정복-divide-and-conquer-알고리즘-설계-기법">분할정복 Divide and Conquer 알고리즘 설계 기법</h2>
<ol>
<li>S의 정가운데 원소와 x를 비교해 같다면 해당 위치 리턴, 다르면 -&gt;</li>
<li>Divide : 정가운데 원소를 기준으로 S를 두 개의 리스트로 분할 </li>
<li>Conquer : x가 정가운데 원소보다 크면 오른쪽, 작으면 왼쪽 재귀 호출</li>
<li>Obtain : 선택한 리스트에서 얻은 답 리턴 </li>
</ol>
<h3 id="이진-탐색--재귀로-구현">이진 탐색 ; 재귀로 구현</h3>
<pre><code class="language-python">def binsearch(S, low, high):
    if (low &gt; high): 
        return 0
    else:
        mid = (low + high) // 2
        #print(low, mid, high)
        if (x == S[mid]):
            return mid
        elif (x &lt; S[mid]):
            return binsearch(S, low, mid - 1)
        else:
            return binsearch(S, mid + 1, high)

S = [-1, 10, 12, 13,14, 18, 20, 25, 27, 30, 35, 40, 45]
x = 18
loc = binsearch(S, 0, len(S) - 1)
print(&#39;S = &#39;, S)
print(&#39;x = &#39;, x)
print(&#39;loc = &#39;, loc)</code></pre>
<h3 id="합병정렬">합병정렬</h3>
<ol>
<li>Divide : 원소가 n개인 S를 반으로 분할</li>
<li>Conquer : 왼쪽 리스트와 오른쪽 리스트 각각 재귀적으로 합병 정렬</li>
<li>Combine : 각각 정렬된 두 개의 리스트를 정렬된 하나의 리스트로 합병해 리턴 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c28661c3-4b9b-4d7d-bd1a-0652387f168a/image.png" alt=""><pre><code class="language-python">def merge(U, V):
 S = []
 i = j = 0
 while i &lt; len(U) and j &lt; len(V):
     if U[i] &lt; V[j]:
         S.append(U[i])
         i += 1
     else:
         S.append(V[j])
         j += 1
 if i &lt; len(U):
     S += U[i:]
 else:
     S += V[j:]
 return S
</code></pre>
</li>
</ol>
<p>def mergesort(S):
    n = len(S)
    if n &lt;= 1:
        return S
    else:
        mid = n // 2
        U = mergesort(S[:mid]) #0<del>mid-1
        V = mergesort(S[mid:n]) #mid</del>n-1
        # print(&#39;U:&#39;, U, &#39;V:&#39;, V)
        return merge(U, V)</p>
<p>S = [27, 10, 12, 20, 25, 13, 15, 22]
print(&#39;Before:&#39;, S)
X = mergesort(S)
print(&#39;After:&#39;, X)</p>
<pre><code>
```python
def merge(S, low, mid, high):
    U = []
    i = low
    j = mid + 1
    while i &lt;= mid and j &lt;= high:
        if S[i] &lt; S[j]:
            U.append(S[i])
            i += 1
        else:
            U.append(S[j])
            j += 1
    if i &lt;= mid:
        U += S[i:mid + 1]
    else:
        U += S[j:high + 1]
    for k in range(low, high + 1):
        S[k] = U[k - low]

def mergesort(S, low, high):
    if low &lt; high:
        mid = (low + high) // 2
        mergesort(S, low, mid)
        mergesort(S, mid + 1, high)
        #print(S[low:high + 1])
        merge(S, low, mid, high)

S = [27, 10, 12, 20, 25, 13, 15, 22]
print(&#39;Before:&#39;, S)
mergesort(S, 0, len(S) - 1)
print(&#39;After:&#39;, S)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[알고리즘의 효율성, 분석과 차수 - 시간복잡도, 빅오 표기법 ]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%98-%ED%9A%A8%EC%9C%A8%EC%84%B1-%EB%B6%84%EC%84%9D%EA%B3%BC-%EC%B0%A8%EC%88%98</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%98-%ED%9A%A8%EC%9C%A8%EC%84%B1-%EB%B6%84%EC%84%9D%EA%B3%BC-%EC%B0%A8%EC%88%98</guid>
            <pubDate>Tue, 03 Mar 2026 14:42:15 GMT</pubDate>
            <description><![CDATA[<h2 id="알고리즘">알고리즘</h2>
<p>어떤 문제를 컴퓨터로 풀기 위한 <strong>효율</strong>적 절차. 풀이의 <strong>단계별 절차</strong>를 <strong>명확</strong>하게 기술</p>
<blockquote>
</blockquote>
<h3 id="순차-탐색">순차 탐색</h3>
<ul>
<li>문제 : 어떤 수 x가 n개의 수로 구성된 리스트 s에 존재하는가?</li>
<li>해답 : x가 존재하면 x의 인덱스, 존재하지 않으면 0</li>
<li>파라미터 : 정수n(&gt;0), 리스트S, 원소x</li>
<li>입력사례 : S = [0, 10, 7, 11, 5, 13, 8], n = 6, x = 5</li>
<li>입력사례에 대한 해답 : location = 3</li>
<li>알고리즘 : 모든 S에 대해 x의 인덱스를 찾아주는 단계별 절차<ol>
<li>S의 첫째 원소에서 시작해 x를 찾을 때까지 각 원소를 차례대로 x와 비교(없다면 끝까지 비교)</li>
<li>x를 찾으면 x의 인덱스 리턴, 찾지 못했다면 0리턴 <pre><code class="language-python">def seqsearch(n, S, x):
loc = 1
while loc &lt;= n and S[loc] != x:
   loc += 1
if loc &gt; n:
   return 0
return loc
&gt;
S = [0, 10, 7, 11, 5, 13, 8]
x = 5
location = seqsearch(len(S) - 1, S, x)
print(&quot;location =&quot;, location)</code></pre>
=&gt; n번 비교</li>
</ol>
</li>
</ul>
<h2 id="알고리즘의-효율성">알고리즘의 효율성</h2>
<p>알고리즘의 성능 : <strong>시간</strong>과 <strong>공간</strong>사용의 효율. 컴퓨터의 실행속도나 메모리의 가격에 무관
ex) 순차탐색(정렬되지 않은 경우) vs 이분검색(정렬된 경우)</p>
<blockquote>
</blockquote>
<h3 id="이분-검색">이분 검색</h3>
<ol>
<li>리스트 s와 어떤수 x가 주어짐</li>
<li>x를 리스트 중앙의 원소와 비교. 같다면 알고리즘 종료</li>
<li>x가 그 원소보다 작으면 x는 왼쪽에 위치할 것. 왼쪽 리스트에 대해 이진탐색 시행
x가 그 원소보다 크면 x는 오른쪽에 위치할 것. 왼쪽 리스트에 대해 이진탐색 시행</li>
<li>더 이상 찾을 원소가 없으면 종료 <pre><code class="language-python">def binsearch(n, S, x):
 low = 1
 high = n
 loc = 0
 while low &lt;= high and loc == 0: #loc이 0이 아니라면 발견함
     mid = (low + high) // 2
     print(low, mid, high)
     if x == S[mid]:
         loc = mid
     elif x &lt; S[mid]:
         high = mid - 1
     else:
         low = mid + 1
 return loc
&gt;
S = [-1, 5, 7, 8, 10, 11, 13] #-1은 쓰레기값. 인덱스가 1부터 시작하도록 설정
x = 2
location = binsearch(len(S) - 1, S, x)
print(&quot;S = &quot;, S[1:])
print(&quot;x = &quot;, x)
print(&quot;location = &quot;, location)</code></pre>
=&gt; logn + 1 (lgn + 1으로도 표기. 밑이 2인 로그)</li>
</ol>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c82e534d-e037-43ed-a1a6-fb84a968cbb0/image.png" alt=""></p>
<ul>
<li>재귀적 정의를 이용하는 것은 작성하기 쉽고 이해하기도 쉽지만 같은 계산을 여러번 하는 경우 비효율적이다. (이미 계산한 것을 계산)
=&gt; 이미 계산된 것은 리스트에 저장해서 꺼내쓰면 됨</li>
</ul>
<p>ex) 피보나치 수열 구현 </p>
<pre><code class="language-python"># 재귀 함수를 사용한 피보나치
def fib(n):
    if n &lt;= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

for i in range(11):
    print(fib(i), end=&#39; &#39;)</code></pre>
<pre><code class="language-python"># 중복 계산을 개선한 피보나치 
def fib(n):
    f = [0] * (n + 1) #리스트 컴프리헨션. 배열 초기화
    if n &gt; 0:
        f[1] = 1
        for i in range(2, n + 1):
            f[i] = f[i - 1] + f[i - 2]
    return f[n]

for i in range(11):
    print(fib(i), end=&#39; &#39;)</code></pre>
<blockquote>
<p>💡 리스트f를 사용하지 않고 반복문으로 피보나치항 구하기</p>
</blockquote>
<h2 id="알고리즘의-분석">알고리즘의 분석</h2>
<ul>
<li>정확성 분석 : 모든 입력 사례에 대해 정확한 해답을 찾는다는 것을 증명</li>
<li><strong>효율성</strong> 분석 : 입력 크기가 커지는 정도에 따른 성능의 변화량 증명 <ul>
<li>*<em>시간 복잡도 *</em>time complexity : 시간 기준 알고리즘 효율성 분석</li>
<li>공간 복잡도 space complexity : 공간 기준 알고리즘 효율성 분석 (빅데이터의 경우 상당한 신경이 필요)</li>
</ul>
</li>
</ul>
<h3 id="알고리즘의-성능-분석">알고리즘의 성능 분석</h3>
<ul>
<li>퍼포먼스 측정 : 실행 시간 직접 측정 or 실행 명령 숫자 세기 -&gt; 컴퓨터 성능/언어 따라 달라짐</li>
<li>복잡도 분석 : 입력 크기에 따른 단위 연산 실행 횟수 세기 -&gt; 컴퓨터나 언어와 무관<ul>
<li>입력 크기 : 문제가 가진 파라미터(입력 사례의 크기. input size)</li>
<li>단위 연산 : 알고리즘 실행의 기본이 되는 명령어들의 집합(Basic Operation)<ul>
<li>for문은 항상 n번 실행 : T(n) = n<pre><code class="language-python">def sum(S):
n = len(S)
res = 0
for i in range(n):
    res += S[i] # 단위 연산. n번 반복하므로 f(n) = n
return res</code></pre>
</li>
<li>교환정렬 : <pre><code class="language-python">def exchange(S):
n = len(S)
for i in range(n - 1): #n - 1번 (0~n-2)
  for j in range(i + 1, n): #n, n-1, ... 2, 1 -&gt;  
      if S[i] &gt; S[j]: # 단위 연산. T(n) = (n - 1)n / 2
          # (swap은 무조건 하는 것이 아니므로 정확한 실행속도 알아내기 부적절)
          S[i], S[j] = S[j], S[i]</code></pre>
</li>
<li>행렬곱셈 : <pre><code class="language-python">def matrixmult(n, A, B): #입력크기 n
C = [[0] * n for _ in range(n)]
for i in range(n): #n회
  for j in range(n): #n회
      for k in range(n): #n회
          C[i][j] += A[i][k] * B[k][j] #단위 연산. +보다는 *이 더 무거운 연산임</code></pre>
</li>
</ul>
</li>
<li>입력 사례에 따른 시간 복잡도 분석<ul>
<li>일정 시간 복잡도 : 입력 사례에 따라 달라지지 않는 경우 </li>
<li><strong>최악worst-case</strong>, 최적best-case, <strong>평균average-case</strong> 시간 복잡도 : 입력 사례에 따라 달라지는 경우<blockquote>
<p>순차탐색의 시간 복잡도 분석
- 최악 : W(n) = n
- 최적 : B(n) = 1
- 평균 : x가 k번째에 있다면 k번 비교 <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/79298708-15d8-4026-aa7d-0059be859b47/image.png" alt="">\</p>
</blockquote>
<h3 id="더-빠른-알고리즘">더 빠른 알고리즘</h3>
</li>
</ul>
</li>
</ul>
</li>
<li>시간 복잡도 : <strong>입력크기(n)에 대한 단위 연산 횟수의 함수 f(n)</strong>
ex) f1(n)=n, f2(n)=n^2라면, f1이 f2보다 궁극적으로 더 빠름<h4 id="차수-order--알고리즘의-궁극적인-성능-분류---u궁극적u으로-빠름을-알고-싶다">차수 Order : 알고리즘의 궁극적인 성능 분류 -&gt; <u>궁극적</u>으로 빠름을 알고 싶다.</h4>
=&gt; 모든 1차 시간 알고리즘은 궁극적으로 2차 시간 알고리즘보다 빠름
=&gt; $n^2+bn+c$의 함수는 $n^2$함수로 분류
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/7fd908c1-b0e3-48fa-bbdc-7ad91c83e803/image.png" alt=""></li>
</ul>
<h2 id="빅오o-표기법">빅오(O) 표기법</h2>
<p>: 복잡도 함수의 <strong>점근적 상한</strong>(upperbound) 표기(성능은 이 위는 넘어서지 않음)<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/fd9e010e-4b32-48dc-a9a1-c985cb0ca93c/image.png" alt=""></p>
<blockquote>
<p>점근적 표기법 : $O, \Theta, \Omega$</p>
</blockquote>
<ul>
<li><strong>오메가 표기법$\Omega$</strong> : 복잡도 함수의 점근적 하한 표기(적어도 이 밑으로 떨어지지는 않음)<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/59c059a9-5f8f-49a2-bf1e-9482d81139e2/image.png" alt=""></li>
<li>쎄타 표기법$\Theta$ : 복잡도 함수의 점근적 상한과 하한을 동시에 만족<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/f8fac3b6-828b-45f5-918c-243e0d38ba25/image.png" alt=""></li>
</ul>
<blockquote>
<p>순차탐색의 차수</p>
</blockquote>
<ul>
<li>최악 : W(n) = n ∈ $\Theta(n)$</li>
<li>최적 : B(n) = 1 ∈ $\Theta(1)$</li>
<li>평균 : A(n) = (n + 1) / 2 ∈ $\Theta(n)$</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[알고리즘] 허프만 알고리즘]]></title>
            <link>https://velog.io/@is_kwonhan_ok/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%97%88%ED%94%84%EB%A7%8C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@is_kwonhan_ok/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%97%88%ED%94%84%EB%A7%8C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Mon, 02 Mar 2026 12:21:15 GMT</pubDate>
            <description><![CDATA[<h2 id="이진코드-binary-code">이진코드 binary code</h2>
<p>데이터 파일을 이진코드로 인코딩하여 저장.
길이가 고정된 fixed-length 이진코드와 길이가 변하는 variable-length 이진코드가 있다.
가장 많이 사용되는 문자의 비트가 가장 짧도록 설정해주면 압축 효율이 올라간다.</p>
<blockquote>
<p>사용하는 문자가 {a, b, c}인 경우 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/a0a92385-828e-43ba-8644-93d6cf75eb04/image.png" alt=""> 왼쪽이 fixed 오른쪽이 variabe이다. </p>
</blockquote>
<h3 id="최적-이진코드-문제-optimal-binary-code">최적 이진코드 문제 optimal binary code</h3>
<p>주어진 파일에 있는 문자들을 이진코드로 표현할 때 필요한 비트의 개수가 최소가 되는 이진코드?</p>
<blockquote>
<p>전치 코드 prefix code
: 길이가 변하는 이진코드의 특수한 형태. 한 문자의 코드워드가 다른문자의 코드워드 앞부분이 될 수 없음 (01이 &#39;a&#39;라면 011은 &#39;b&#39;가 될 수 없음)
-&gt; 모든 전치코드는 리프노드가 코드문자인 이진트리로 표현가능하다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/9541c6a4-2c7b-4848-9823-c09a66521246/image.png" alt=""> code1은 비효율적(fixed: 자주 나오는 문자를 우대하지 않음) </p>
</blockquote>
<h2 id="허프만-알고리즘-huffmans-algorithm">허프만 알고리즘 Huffman&#39;s Algorithm</h2>
<p>허프만 코드에 해당하는 최적의 이진트리를 구축하는 그리디 알고리즘 </p>
<blockquote>
<p>허프만 코드 : 허프만 알고리즘에 의해 생성된 최적의 이진코드 </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/4877e343-c3e0-4d12-b1fa-733c2b1dcd3a/image.png" alt=""></p>
<p>수도코드로 나타내면 아래와 같다.</p>
<blockquote>
</blockquote>
<p>허프만 알고리즘 구현</p>
<pre><code>n : 문자 개수
PQ : 빈도수가 낮은 노드 선리턴 (우선순위큐)
&gt;
for i in [1..n-1]:
    remove(PQ, p)
    remove(PQ, q)
    r = 새 노드
    r-&gt;left = p #p를 왼쪽노드로 설정
    r-&gt;right = q #q를 오른쪽노드로 설정
    r-&gt;빈도 = p-&gt;빈도 + q-&gt;빈도
    insert(PQ, r)
remove(PQ, r) #모든 노드가 제거되면 r리턴 
return r</code></pre><p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/384a747c-b881-4adc-83f1-37bfed117a4b/image.png" alt=""> <a href="https://velog.io/@is_kwonhan_ok/%EC%9D%B8%EC%98%A4%EB%8D%94Inorder-%ED%94%84%EB%A6%AC%EC%98%A4%EB%8D%94Preorder-%ED%8F%AC%EC%8A%A4%ED%8A%B8%EC%98%A4%EB%8D%94Postorder">인오더, 프리오더, 포스트오더</a></p>
<pre><code class="language-python">class HuffNode:        #문자  빈도수
    def __init__(self, symbol, freq):
        self.symbol = symbol
        self.freq = freq
        self.left = None
        self.right = None

    def preorder(self):
        print(self.freq, end=&#39; &#39;)
        if self.left is not None:
            self.left.preorder()
        if self.right is not None:
            self.right.preorder()

    def inorder(self):
        if self.left is not None:
            self.left.inorder()
        print(self.freq, end=&#39; &#39;)
        if self.right is not None:
            self.right.inorder()

def huffman(n, PQ):
    for _ in range(n - 1): #0~n-2
        p = PQ.get()[1]
        q = PQ.get()[1]
        r = HuffNode(&#39; &#39;, p.freq + q.freq) #새노드 생성, 중간노드는 문자 필요 없음-&gt; 공백
        r.left = p
        r.right = q
        PQ.put((r.freq, r))
    return PQ.get()[1] #마지막노드

codes = [&#39;b&#39;, &#39;e&#39;, &#39;c&#39;, &#39;a&#39;, &#39;d&#39;, &#39;f&#39;]
freq = [5, 10, 12, 16, 17, 25]

from queue import PriorityQueue

PQ = PriorityQueue()
for i in range(len(codes)):
    node = HuffNode(codes[i], freq[i])
    PQ.put((node.freq, node))

root = huffman(len(codes), PQ)

print(&#39;preorder :&#39;, end=&#39;&#39;)
root.preorder()
print(&#39;\ninorder :&#39;, end=&#39;&#39;)
root.inorder()</code></pre>
<p>-&gt; encoding, decoding을 하는 연습을 해보는게 좋다(함수로 만들어보기)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DH] 포렌식 Lv.1 모음]]></title>
            <link>https://velog.io/@is_kwonhan_ok/DH-%ED%8F%AC%EB%A0%8C%EC%8B%9D-Lv.1-%EB%AA%A8%EC%9D%8C</link>
            <guid>https://velog.io/@is_kwonhan_ok/DH-%ED%8F%AC%EB%A0%8C%EC%8B%9D-Lv.1-%EB%AA%A8%EC%9D%8C</guid>
            <pubDate>Mon, 02 Mar 2026 10:44:13 GMT</pubDate>
            <description><![CDATA[<p>아는게 없는 상태에서 타플랫폼의 문제를 몇개 풀다가 근자감이 솟아나서 풀이 많은 순으로 풀어보았다. </p>
<h2 id="basic_forensics_1-0302">Basic_Forensics_1 (0302)</h2>
<p>사진을 하나 주는데, 이미지 파일 안에 히든 메세지가 있다고 한다. 
HxD를 켜서 시그니처를 확인해 보았다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/da3a5e89-02a8-4aa0-97df-f4e5ceb1e073/image.png" alt=""><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/88e2379f-698d-4fb3-92f7-c1efb9a24e6a/image.png" alt=""> 별 문제 없어보인다. </p>
<p>그럼 뭐지? 해서보니, 다른 분이 아래에 작성하신 Q&amp;A에 스테가노그래피를 방향으로 잡아보라고 하신다. 
방금 방법도 스테가노그래피일텐데... 다른 툴을 써야하는건가?했다. 
마침 찾다가 나온 스테가노그래피 해독 사이트가 있어서 이미지를 먹여주니 플래그가 얻어진다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/2dd4cd4a-754c-4a2e-8994-671b40792e80/image.png" alt=""></p>
<h2 id="snowing-0305">Snowing! (0305)</h2>
<p>혹시나 앞 문제와 같을까? 해서 스테가노그래피를 우선 돌려봤다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/3530886b-e279-4b2c-8919-dec1a1109824/image.png" alt=""> 이 접근은 아닌듯
HxD로 일단 읽어준다.
이미지 파일은 jpeg형식인데 헤더시그니처는 <code>FF D8 FF E0</code> 혹은 <code>FF D8 FF E8</code>, 푸터시그니처는 <code>FF D9</code>이다. 
아래는 각각 헤드, 푸터 시그니처 확인 결과이다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/84c6609e-432d-4eea-8976-d96d65b1d0ea/image.png" alt=""><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c522ffc7-e7b9-46d7-aede-4d89ebb7ff34/image.png" alt=""> 잘 있는 것을 확인했다. 
이로써 알고 있는 방법은 모두 소진했다. 뭘 해야하지?...</p>
<p>같이 있던 flag.txt파일은 어디다 쓰는걸까
fake flag가 들어있는 듯 한데, 수상하게 Enter가 많이 쳐져있다. 원래 이런가 해서 메모장에서 새파일을 만들어봤는다. 역시 아니다. 
그럼 이 파일에 뭔가 있을 수도 있겠다. </p>
<p>HxD에서 파일을 열어보니 Decoded text에서 눈이 내린다.
문제 설명에 있던 상황이 이걸 의미하는 것이었을까?</p>
<p>0x20 0x09 0x0A가 많이 보인다. 공백, TAB, LF(개행)이다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/6c679dbc-cea6-463d-9b88-c09193b14c8b/image.png" alt=""> 하지만 모르겠는건 여전하다. .....</p>
<p>구글링 해보니 whitespace steganography라는 유형의 문제인 듯 하다. 
이 스테가노그래피를 풀기 위한 <a href="https://darkside.com.au/snow/index.html">SNOW</a>라는 툴을 다운받아준다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/623b32f2-5d6b-4f14-9e84-6418e05b1cf0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/bc134039-52a0-4dfd-9ca4-2e6e159806a8/image.png" alt=""> 쓰는 방법은 위와 같다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/eace9095-e6e7-417b-ad8a-54b80566f05d/image.png" alt=""> <code>#아니근데이거왜안되는거에요</code>
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/40db1048-b713-4fc8-81a3-c76bc1b7b9cf/image.png" alt="">
어찌저찌 성공
Download폴더에서 다운받은 폴더 안에 그대로 뒀는데 이거 때문인가?... 실행파일을 Download폴더로 이동시키고 실행해줬는데 잘 되네묘..</p>
<blockquote>
<p>💡 윈도우 cmd에서는 폴더 경로를 구분할 경우 역슬래시(\)를 사용. 
커맨드에서 폴더 경로는 윈도우OS가 해석하기 때문에 앞부분에 오는 경로는 &#39;&#39;를 써야한다.
반면 내부옵션의 경우 프로그램(여기선 SNOW.EXE)이 해석하기에 프로그램에서 정해진 방법으로 사용하면 된다.<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/22fbe520-d572-4890-895d-43042d9888cb/image.png" alt=""></p>
</blockquote>
<h2 id="windows-search-0306">Windows Search (0306)</h2>
<p>윈도우 서치라는 문제. 문제 파일을 다운받으면 Windows.edb파일을 준다. </p>
<blockquote>
<p>edb </p>
</blockquote>
<p>WinSearchDBAnalyzer이라는 프로그램을 받아주고 Windows.edb파일을 open해준다. 
선택하면 시간을 고르라고 나오는데, Incheon은 +9에 위치한다. 
ALL파일을 열어서 파일명순으로 정렬하면 flag.txt를 찾을 수 있다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/8b2dc417-255d-495e-9ed1-812b2c3ab4af/image.png" alt=""></p>
<h2 id="lolololologfile-0306">lolololologfile (0306)</h2>
<p>누군가가 flag가 담긴 pdf파일을 삭제했다. 복구할 수 있을까? 가 문제다. 문제 파일로는 <code>Image.E01</code> 이라는 것을 준다.</p>
<p>E01 파일이 무엇인지부터 알아보자. <strong>E01</strong>은 포렌식에서 가장 범용적으로 쓰이는 포맷으로 <strong>저장 매체를 이미징 할 때 사용하는 표준 포맷</strong>이다. 압축을 지원하기에 파일크기를 줄일 수 있다. 확장자가 E01이 아니라 E02, E03으로 늘어나면서 저장되는 포맷이다.</p>
<p>디스크 이미지 파일이라는 것 같으니 FTK Imager로 열 수 있지 않을까?
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/a3f0f25c-c032-446d-a73e-7f7b808984c7/image.png" alt=""> 마운트하면 이런 디렉토리가 열린다. </p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c6d630aa-abb5-47a2-841f-2917ebdf2cca/image.png" alt=""> File - Add Evidence Item 에서 logical Drive을 선택하면 해당 드라이브를 열 수 있다. 
root 디렉토리에서 파일들을 하나씩 클릭하다 보면 seg1, 2, 3, 4파일이 있는데 이 파일들은 클릭해도 정보가 뜨지 않는다. 얘네들이 삭제된 파일인가?</p>
<p>삭제된 파일 복구에 대해 찾아봅시다~</p>
<blockquote>
<p>삭제된 파일을 우클릭하여 Export Files. Export Results가 0인 경우 복원에 실패한 것. </p>
</blockquote>
<p>엥... 이게끝?
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c186b60c-5522-4c29-a18f-b84b7b732d2b/image.png" alt=""> 그럴리 없지! 어김없이 실패했나보다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/47702529-1909-4f3e-9e58-fe28e4e047eb/image.png" alt=""> Evidence Tree에 unallocated space라는 디렉토리가 있어서 구글링해보았다. 
할당되지 않은 공간. 즉, 사용하지 않는 공간으로 윈도우 디스크 관리에서 &#39;할당되지 않음&#39; 공간으로 파일이 덮어쓰기가 되기 이전까지 복구할 수 있는 공간이다. <a href="https://threat.media/definition/what-is-unallocated-space/">https://threat.media/definition/what-is-unallocated-space/</a></p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/44232646-b94b-47fa-a479-04c5daf4bded/image.png" alt=""> PDF파일이 하나 있는 것을 확인했다. 파일을 추출해주자. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/19f5f0ff-652b-4a42-b774-aa83dcd19193/image.png" alt=""> 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/f2b0338d-80c9-406d-8935-4bc25549ab87/image.png" alt=""> 아 HxD - 도구 - 연결로 복구를 했는데 문서를 로드라지 못했다고 뜬다...</p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/8ed93eef-99fe-419f-87e3-5fae644bb7f0/image.png" alt=""> unallocated space의 파일 전체를 추출하고 연결하면서 순서를 맞추었더니 드디어 열렸다.</p>
<blockquote>
<p>00 으로만 데이터가 이루어진 06615, 17130, 42730은 추출하지 않아도 무방하다. </p>
</blockquote>
<blockquote>
<p>❓ 00 으로만 이루어진 파일이 왜 이렇게 큰건지 생각해 보았다. 가장큰 170130 파일을 HxD로 열면 063FFFF0이 마지막 주소인데 이를 10진수로 변환하면 104857584바이트이다. 마지막줄의 16바이트를 더하면 104857600바이트가 된다. </p>
</blockquote>
<h2 id="ffffaaaattt-0307">FFFFAAAATTT (0307)</h2>
<p>HxD로 우선 다운받은 파일을 열어보았다. 초심자인 나에겐 너무 가혹하다!... 디스크를 고치라고 한다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/374216e3-1d1a-47f1-a29b-799a6f892ae6/image.png" alt=""> 확장자 없는 파일 하나만 딸랑 있어서 도저히 감이 안왔기에 Q&amp;A게시판을 좀 훔쳐봤다. FAT이라는 파일 시스템이 존재하나보다. 
<a href="https://velog.io/@is_kwonhan_ok/FAT-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C">FAT에 대해 정리해두었다</a></p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/f70291da-8526-4669-863b-2058f63b3a17/image.png" alt=""> 스크롤 하다보니 FAT32라는 글자를 찾을 수 있었다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/cfd34ac5-1111-42a3-a7a3-7f702ef3e7eb/image.png" alt=""> 이런 메시지도 있었다. </p>
<p>FAT32의 백업본은 6번 섹터에 존재한다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/68276fe2-7ea3-4496-aff7-fbe319057328/image.png" alt=""> 헤더가 남아있는 것을 
0번 섹터에 덮어씌워주고, FTK Imager로 열어줬다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/17191fec-4d87-4496-8e2d-4eec867b15c0/image.png" alt="">
noway!라는 zip파일에 플래그가 있는 것을 확인할 수 있다. 
압축파일과 함께 있는 이미지들을 보니 GG.PNG파일 하나만 열리지 않는다. 
이럴땐 뭐다? HxD다~
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/fe764e59-7977-44d7-a94a-7d4c514cfecd/image.png" alt=""> 뭔가 더 있을 줄 알았는데 그냥 냅다 PW 알려준다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/de0e3c94-ccaa-4071-815b-0807dbb8a648/image.png" alt=""> 파일 두 개 중 하나는 훼이크였다. 함께 있는 다른 파일을 열어보면 flag를 얻을 수 있다. </p>
<h2 id="grand-theft-auto-0309">Grand Theft Auto (0309)</h2>
<p><em>2주전에 학교에서 VECTOR사에서 진행하는 특강을 들을 기회가 있었다. 자동차 해킹에도 관심이 있었기에 냉큼 갔다. CAN통신과 CALF에 대해 강의해주셨는데, 문제에도 CAN통신이 나오는 듯 해서 괜히 반가웠다.</em></p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/5261c86c-c502-4839-9e22-3922a1704e6a/image.png" alt=""> 힌트라고 준 링크에 접속하여 읽어보던 도중 문제의 txt파일에서 보았던 <code>F1 90</code>이 보였다. VIN 데이터 식별자라고, 읽기 서비스에서 차량 제조업체의 특정ECU 하드웨어의 번호를 참조하는데 사용된다. 차량 제조업체마다 다르다. </p>
<blockquote>
<p>VIN(Vehicle Infomation Number) : 차대 번호
전세계 공통 17자리. 제작연도, 차종, 생산공장, 배기량 등의 정보가 담겨있다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/36305a10-756b-47e6-8a27-05d33181fa4f/image.png" alt=""></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/ac37685c-b95a-424d-9f6f-5d777bf3fdb8/image.png" alt=""> </p>
<blockquote>
</blockquote>
<ul>
<li>can0은 채널. CAN인터페이스의 이름이다. </li>
<li>7E0, 7E8은 각각 CAN ID. &#39;어디에서 보냈는지&#39;가 되겠다.</li>
<li>[8]은 데이터 길이. 8byte</li>
</ul>
<p><a href="https://m.blog.naver.com/PostView.naver?blogId=suresofttech&amp;logNo=222850407600&amp;proxyReferer=">여길 참고했다</a></p>
<ol>
<li>can0  7E0   [8]  03 22 F1 90 00 00 00 00<ul>
<li><code>0x03</code> : 0 -&gt; 나는 싱글 데이터다. 3 -&gt; 3바이트의 유효데이터가 뒤에 온다 예고</li>
<li><code>0x22</code> : RDBI서비스. 데이터를 읽겠다는 요청</li>
<li><code>0xF190</code> : VIN</li>
</ul>
</li>
<li>can0  7E8   [8]  10 14 62 F1 90 57 44 44<ul>
<li><code>0x1014</code> : 0x10 -&gt; 지금부터 긴 데이터를 보낼거다. 이건 First Frame이다. 0x14 -&gt; 20byte보낼거다. </li>
<li><code>0xF190</code> : VIN</li>
<li><code>57 44 44</code> : 데이터. VIN 17자리중 3자리 차지. 남은 받아야 할 데이터는 15byte</li>
</ul>
</li>
<li>can0  7E0   [8]  30 00 00 00 00 00 00 00 <ul>
<li><code>0x30</code> : 3 -&gt; 흐름제어. 0 -&gt; 마저 데이터를 보내라</li>
<li>&#39;00 00&#39; : 각각 한꺼번에 다 보내라, 지연시간 없이 최대한 발리 보내라</li>
</ul>
</li>
<li>can0  7E8   [8]  21 48 46 35 47 42 35 42<ul>
<li><code>21</code> : 데이터의 순서</li>
<li>나머지 : 데이터</li>
</ul>
</li>
<li>can0  7E8   [8]  22 41 32 37 30 38 36 36<ul>
<li><code>22</code> : 데이터의 순서</li>
<li>나머지 : 데이터</li>
</ul>
</li>
</ol>
<blockquote>
<p>데이터의 순서
연속 프레임에 대한 약속. <code>21</code>에서 앞자리(2)는 이전에 보낸 First Frame에 이어지는 조각임을 뜻한다. 뒷자리(1)은 순서 번호이다. 21, 22, ... 2F, 20... 순환한다. </p>
</blockquote>
<p>따라서 데이터를 조합해보면 <code>57 44 44 48 46 35 47 42 35 42 41 32 37 30 38 36 36</code>이 VIN이 된다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c8fa0ea7-731a-4a17-805b-d5857b54cd06/image.png" alt=""> <a href="https://www.faxvin.com/">여기서 차량을 조회할 수 있다</a>
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/816c9584-efe2-4969-8af1-9bdbf81430d8/image.png" alt=""> </p>
<h2 id="steg-pack-0312">Steg-Pack (0312)</h2>
<p>가짜 flag를 피해서 진짜 flag를 찾으라고 한다. HxD를 이용해 먼저 파일을 열어보자. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/fe24141d-c544-4e86-bb53-41fd95b11773/image.png" alt=""> png의 헤더 시그니처다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/0741998e-395e-4ac1-bd80-c64b55f042d4/image.png" alt=""> 푸터 시그니처 뒤에 뭔가 있는 것을 확인할 수 있다. <code>pass = 99999</code> 뭔가 쓰일 수 있을지도. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/d03e3a48-caf2-42db-87e9-495496692e39/image.png" alt=""> 쭉 내리다가 이런 것을 발견했다. 뒷 부분을 어떻게 하며 flag를 찾을 수 있을 것 같다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/762b866f-e53a-477e-be4b-1647e643acff/image.png" alt=""> <code>50 4B 03 04</code> 는 ZIP파일의 헤더 시그니처다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/08e22a9c-a3e6-4491-b602-2348f5cdfa22/image.png" alt=""> 푸터 시그니처 뒤에도 뭔가 있는데... 일단 zip파일부터 생성하여 해제해보자. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/9f690ad5-7cc9-4128-b11a-f32cbdd72279/image.png" alt="">
flag는 Pictures 아래에 있는 듯 하다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/dcbd8a54-7901-48b9-bd64-4dbb1102cc30/image.png" alt=""> flag를 획득할 수 있다. </p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/c170be0a-9072-471a-b608-bc91b6159961/image.png" alt=""> 푸터 시그니처 부분까지만 복사하여 ZIP파일을 생성하니, 압축해제했을 때 바로 flag가 위치한 Pictures에서 열린다. 뒷부분은 무슨 역할을 하는거지?...</p>
</blockquote>
<blockquote>
<p>zip 파일 구조 </p>
</blockquote>
<h2 id="audio-steganography-0313">Audio Steganography (0313)</h2>
<p>WAV 파일을 재생해보면 신호하는 듯한 알 수 없는 소리가 재생된다. <img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/a6b5adfe-4f21-48b6-b213-0a16dfa96b6d/image.png" alt="">
Audacity를 이용해 wav파일을 열어주고 스펙트로그램을 해주면 플래그를 얻을 수 있다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[H4CKING GAME] 포렌식 맨땅에 헤딩해보기 1~4]]></title>
            <link>https://velog.io/@is_kwonhan_ok/H4CKING-GAME-%ED%8F%AC%EB%A0%8C%EC%8B%9D-%ED%97%A4%EB%94%A9%ED%95%B4%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@is_kwonhan_ok/H4CKING-GAME-%ED%8F%AC%EB%A0%8C%EC%8B%9D-%ED%97%A4%EB%94%A9%ED%95%B4%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Mon, 02 Mar 2026 05:28:26 GMT</pubDate>
            <description><![CDATA[<h2 id="-paint"># Paint</h2>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/db014c1c-c79c-49a6-b9cf-ca9c09cc7c18/image.png" alt="">
윈도우 사진으로 수정하다가 글자 해독이 안되어서 포렌식 도구를 찾으러 돌아다니다 발견한 Forensucally라는 이미지 수정 사이트가 있어서 적용해보았다. 이미지를 수정하면 플래그를 얻을 수 있다. </p>
<hr>
<h2 id="-easy"># Easy</h2>
<p>에디터에서 선이 잘 보이게끔 수정 후 아래 사이트에 집어넣으면 플래그를 획득할 수 있다. 
<a href="https://merri.cx/qrazybox/?source=post_page-----f67eb8493455--------------------------------">https://merri.cx/qrazybox/?source=post_page-----f67eb8493455--------------------------------</a></p>
<hr>
<h2 id="-linefeed"># LineFeed</h2>
<p>앞의 문제들처럼 간단한 이미지 수정으로는 어찌할 수 없는 듯 하다..
왜 파일의 이름이 linefeed일까? 검색해본 바로는 line feed가 줄바꿈을 뜻한다고 한다. 
문제에는 Something is broken. 이라고 주어진다. </p>
<p>힌트를 종합해보았을 때 사이즈가 문제가 아닐까 라는 생각이 들었다.</p>
<p>우선 HxD로 파일을 열어보았다. (파일의 시그니처에 대한 글은 따로 더 공부하면서 써둬야겠다)
보라색으로 라인된 부분이 이미지의 W와 H가 담긴 부분이다. 
각각 복사해서 변환기에 넣어보면 496x416이 나온다.
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/6f366b6d-f2c1-4f91-84f2-8f2c14b67a09/image.png" alt=""> 사이즈는 이미지의 속성탭에서도 확인할 수 있다. 496x416이라고 한다. 
<img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/984fab46-189d-4888-aca2-c794161f6d57/image.png" alt=""> 크기 문제가 아닐까 했으니 500x500으로 한번 늘여본다.
흔적이라도 보이면 이 방법이 맞을 것이다.<br>플래그를 성공적으로 얻었다. </p>
<hr>
<h2 id="-cat"># cat</h2>
<p>이번엔 jpg파일이다. 
고양이 사진을 하나 던져주는데, 문제는 고양이는 귀엽다 라고한다.
그렇다 고양이는 귀엽다. 인정이고 말고</p>
<p>외관으로는 그냥 평범한 고양이 사진이다. 
HxD
JPG파일의 헤더시그니처는 <code>FF D8 FF E0 xx xx 4A 46 49 46</code>, 푸터시그니처는 <code>FF D9</code> 이다.</p>
<blockquote>
<p>스테가노그래피의 방법 중에서는 파일의 <strong>끝을 알리는 시그니처(EOI)의 뒤에 데이터를 넣는 방법</strong>이 존재한다. <strong>EOI뒤의 데이터는 무시</strong>되기에, 이를 이용해 푸터 시그니처 뒤에 원하는 파일을 삽입할 수 있다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/39373a9a-42bc-4aa4-82ad-0528426476d1/image.png" alt=""> 헤더 시그니처는 정상이다. </p>
<p><img src="https://velog.velcdn.com/images/is_kwonhan_ok/post/4acffe6f-825a-4a26-b78f-733b436610a0/image.png" alt=""> 푸터 시그니처를 찾으러 맨 아래로 가면 <code>FF D9</code> 의 뒤에 숫자들이 더 있는 것을 확인할 수 있다. 이상하다. 얘네가 문제와 관련이 있는 친구들이겠다. </p>
<p>복사해서 16진수 텍스트 변환기를 돌려주면 플래그를 얻을 수 있다. </p>
]]></description>
        </item>
    </channel>
</rss>