وبلاگ مصطفی ستاری

یک وبلاگ برنامه نویسی دیگر

یک وبلاگ برنامه نویسی دیگر

حل استگانوگرافی تیم باقالی (LookMore#1)

چند وقت پیش یکی از دوستان سی‌تی‌اف باز (TMT) از تیم باقالی، یک استگانو طراحی کرد و ما رو دعوت به حلش کرد.

امضای فایل حامل، هیچ فایل مشخصی رو نشون نمی‌ده. وقتی فایل رو با یک هگز ادیتور باز می‌کنیم می‌بینیم که هیچ بایت NULL ای نداره. در عوض تعداد زیادی بایت 0x09 داره.

بعد از XOR کردن فایل یک فایل عکس به دست می‌یاد که توش نوشته Baghali. (تصویر بزرگ شده)

خوب توی توضیحات چلنج گفته شده بود که جواب Baghali نیست پس هنوز کار تموم نشده.

پیکسل‌های رنگی فایل، رنگ سبزشون متغیره و بقیه رنگها ثابت هستند(0xFF). اگر هیستوگرام این فایل رو بگیریم می‌بینیم که شبیه یه رشته بیتی می‌شه.

پس از تبدیل این رشته بیتی به اسکی به فلگ که FlagIs:Stego.Can.Be.Hard.Baghal می‌رسیم.

البته انجام این روند به صورت دستی کار حوصله بری هست، بنابراین ما برای انجام کل عملیات کد زدیم.

قسمت اصلی برنامه که تبدیل عکس به هیستوگرام هست به شکل زیر است:

        public static long[] GetHistogram(Bitmap picture)
        {
            var histogram = new long[256];
 
            for (int i = 0; i < picture.Size.Width; i++)
                for (int j = 0; j < picture.Size.Height; j++)
                {
                    Color c = picture.GetPixel(i, j);
                    histogram[c.G]++;
                }
 
            return histogram;
        }

در نهایت برنامه کامل که همه این کارها را از ابتدای XOR انجام می‌دهد:


public static void Main(string[] args)
        {
            var file = File.ReadAllBytes(args[0]);
 
            for (int i = 0; i < file.Length; i++)
            {
                file[i] = (byte) (file[i] ^ 9);
            }
 
            var picture = new Bitmap(new MemoryStream(file));
            var histogram = new long[256];
            for (int i = 0; i < picture.Size.Width; i++)
                for (int j = 0; j < picture.Size.Height; j++)
                {
                    Color c = picture.GetPixel(i, j);
                    histogram[c.G]++;
                }
 
            var sb = new StringBuilder();
            foreach (long t in histogram)
            {
                sb.Append(t > 0 ? 1 : 0);
            }
            var list = new List<Byte>();
 
            for (int i = 0; i + 8 < sb.Length; i += 8)
            {
                String t = sb.ToString().Substring(i, 8);
                list.Add(Convert.ToByte(t, 2));
            }
            var flag = Encoding.ASCII.GetString(list.ToArray());
            Console.WriteLine(flag);
        }

  • مصطفی ستاری

Bitmap

CTF

استگانوگرافی

Histogram

نظرات  (۲)

کاش رایت آپ های بیشتری ازت میدیدیم . چون رایت های خوب و فنی مینویسی .
  • ندا عباسی
  • خیلی فنی بود کارت  عالی بود 

    ارسال نظر

    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی