본문 바로가기

디지털포렌식(Digital forensic)/그림

[파일] JPG 파일 만드는 C# 코드

반응형

 

JPG 이미지 파일을 가지고

몇가지 포렌식 테스트를 하기 위해

먼저, C#으로 32(pixel) × 32(pixel)의 JPG 파일을 만들도록 한다.

0,0 픽셀부터 32,32 픽셀까지 픽셀의 데이터값이 순차적으로

증가되는 형태로 만든다.

 

Code는 C#이며, 코드는 아래에 첨부한다.

단, 코드를 Copy & Paste하기 전에 nuget에서 System.Drawing.Common을 설치하기 위해
이 패키지를 사전에 설치해주도록 한다.

 


 

각 패키지는 해당 소유자에 의해 사용이 허가되었습니다. NuGet은 타사 패키지에 대해 책임을 지지 않으며 라이선스를 부여하지도 않습니다. 일부 패키지에는 추가 라이선스에 의해 관리되는 종속성이 포함되어 있을 수 있습니다. 패키지 소스(피드) URL로 이동하여 종속성을 확인하십시오.

패키지 관리자 콘솔 호스트 버전 6.7.0.127

사용 가능한 모든 NuGet 명령을 보려면 'get-help NuGet'을 입력하십시오.

PM> Install-Package Systehttp://m.Drawing.Common -Version 7.0.0
C:\Users\sampl\source\repos\ConsoleApp2\ConsoleApp2.csproj의 패키지를 복원하는 중...
  GET https://api.nuget.org/v3-flatcontainer/system.drawing.common/index.json
  OK https://api.nuget.org/v3-flatcontainer/system.drawing.common/index.json 633밀리초
  GET https://api.nuget.org/v3-flatcontainer/system.drawing.common/7.0.0/system.drawing.common.7.0.0.nupkg
  OK https://api.nuget.org/v3-flatcontainer/system.drawing.common/7.0.0/system.drawing.common.7.0.0.nupkg 36밀리초
  GET https://api.nuget.org/v3-flatcontainer/microsoft.win32.systemevents/index.json
  OK https://api.nuget.org/v3-flatcontainer/microsoft.win32.systemevents/index.json 645밀리초
  GET https://api.nuget.org/v3-flatcontainer/microsoft.win32.systemevents/7.0.0/microsoft.win32.systemevents.7.0.0.nupkg
  OK https://api.nuget.org/v3-flatcontainer/microsoft.win32.systemevents/7.0.0/microsoft.win32.systemevents.7.0.0.nupkg 37밀리초
콘텐츠 해시 2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==을(를) 사용하여 https://api.nuget.org/v3/index.json에서 Microsoft.Win32.SystemEvents 7.0.0을(를) 설치했습니다.
콘텐츠 해시 KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==을(를) 사용하여 https://api.nuget.org/v3/index.json에서 Systehttp://m.Drawing.Common 7.0.0을(를) 설치했습니다.
NuGet 패키지 Systehttp://m.Drawing.Common 7.0.0을(를) 설치하고 있습니다.
자산 파일을 디스크에 쓰는 중입니다. 경로: C:\Users\sampl\source\repos\ConsoleApp2\obj\project.assets.json
C:\Users\sampl\source\repos\ConsoleApp2\ConsoleApp2.csproj을(를) 3.29초 동안 복원했습니다.
ConsoleApp2에 'Microsoft.Win32.SystemEvents 7.0.0'을(를) 설치했습니다.
ConsoleApp2에 'Systehttp://m.Drawing.Common 7.0.0'을(를) 설치했습니다.
Nuget 작업 실행 시간: 146밀리초
경과 시간: 00:00:03.4765250
PM>


 

 

설치가 끝나면 아래 코드를 복사해서 실행한다.

 

using System;
using System.Drawing;
using System.Drawing.Imaging;

class Program
{
    static void Main()
    {
        int width = 32;
        int height = 32;

        using (Bitmap bitmap = new Bitmap(width, height))
        {
            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    // 순차적으로 RGB 값을 증가시켜 픽셀 설정
                    Color pixelColor = Color.FromArgb(x, y, 0);
                    bitmap.SetPixel(x, y, pixelColor);
                }
            }

            // JPG 파일로 저장
            bitmap.Save("output.jpg", ImageFormat.Jpeg);

            Console.WriteLine("이미지가 생성되었습니다.");
        }
    }
}

 

실행하면 Output.jpg 파일이 생성된다.

(Ref. 나는 ConsoleApp2로 파일을 생성했다.)

 

생성된 Output.jpg 파일을 View로 보면 아래와 같다.

(민감하게 보지 않으면 Gray Color로만 보인다.)

 

 

32×32이므로 작게 보인다.

확대해서 다시 붙여보면 아래와 같다.

 

이미지 파일을 Hex Editor로 열어보면 아래와 같은 파일 구조가 나오는데.

이 구조에 대해서는 Next Chapter에서부터 구조를 천천히 분석해보도록 하자.

 

 

 

 

 

 

728x90