FLARE-On 2016

Thực ra tôi đã quá già và quá lười rồi, nghĩ đến việc cứ mỗi bài giờ lại phải làm lại từ đầu, chụp chiếc các kiểu là tôi chán luôn. Cho nên thường tôi không writeup nữa, trừ khi lâu lâu thấy chìm quá thì viết một bài để đánh bóng tên tuổi.

Bài này không phải là writeup, tôi phải nói trước thế, tôi viết vì tôi thích viết vậy thôi. Anh Kiên vừa có một bài tương tự, thành ra tôi cũng tự tin hơn. Nên chăng hãy chỉ coi nó như bao bài viết ủy mị khác, bạn đọc rồi bạn chẳng đọng lại được gì, chỉ toàn là nhung nhớ và tương tư. Đừng giận tôi…

challenge1

So với năm trước thì bài đầu tiên này không dễ. Thật may là tôi đã làm nhiều lần rồi (gần nhất hình như ở Whitehat), nên nhìn qua tôi biết ngay nó là base64 với custom alphabet. Tôi search code và decode như chính mình là người ra đề.

DudeLocker

Đọc code thì thấy thuộc dạng ransomware với key cố định. Tôi cũng định code lại bằng python nhưng sau đó nghĩ sẽ phải search xem thuật toán nó dùng là gì, thấy lười lắm. Thế là tôi chuyển qua cách patch trong lúc chạy, tức thay vì hàm CryptEncrypt trỏ đến advapi32_CryptEncrypt thì tôi patch cho nó trỏ đến advapi32_CryptDecrypt. Đoán vu vơ mà tên hàm cũng đúng luôn, kỳ diệu.

flareon3_02

Unknown

Bài này khó chắc ở chỗ xác định đường dẫn của file, vì đường dẫn này tham gia vào quá trình check key. Một cách khác là phải brute hash, mà 32bit thì vô vọng lắm. Người ra đề đã đổi tên file thành unknown, có lẽ cố tình, nhưng tiếc là tôi đã có tí kinh nghiệm. Trước khi dùng IDA, thực ra tôi là một dị nhân với kỹ năng reverse bằng Notepad siêu đẳng. 5 năm trước tôi từng dùng Notepad để crack Win XP, trong khoảng hơn 6 ngày. Tất nhiên là thành công vào mắt ah. Chém thôi chứ tôi dùng Notepad++, mở phát thấy ngay chuỗi C:\extraspecial.pdb, chứng tỏ đường dẫn đúng là C:\extraspecial.exe (hope so). Cái này bạn không thấy cũng không sao, nhưng muốn làm ra thì hơi khósweating-onion-head-emoticon

flareon2016challenge.dll

Guessing nên làm không thích lắm. Mặc dù từ đầu tôi đã hiểu đúng flow mà nó muốn tôi theo, nhưng hướng làm của tôi sai. Tôi cứ tìm cách patch cái hàm 51 để luồng thực thi thành một vòng tròn kín và hy vọng flag sẽ tự nhảy ra. Lúc làm xong rồi mới thấy suy luận thế hơi ngu. Hàm 50 nó cần 2 tham số mà mình không cách nào biết được, đâm đầu vào chẳng giải quyết được gì cả rap

smokestack

Trước khi giải này bắt đầu, tôi đã nghĩ kiểu gì cũng có một bài về VM. Xu thế mà. Hên sao bài này nhẹ nhàng, chứ VM mà như bình thường cả mấy chục hàm thì tôi ngại lắm, làm chắc vẫn làm được nhưng lười thôi what Tôi lúc đầu định lôi <censored> thần thánh của tôi ra dùng, nhưng nghĩ kỹ thì tool đó hơi quá tầm, chẳng nhẽ level 5 mà lại quăng vào tool rồi rẹt rẹt mấy giây ra flag? Thế là tôi đành làm bằng Notepad, à bằng IDA.

Bài này có người nghĩ đến việc brute force. Máy tính của tôi đã 3 năm tuổi rồi, tôi không bao giờ nghĩ rằng có thể brute được 10 ký tự. Vô cùng tủi thân khi biết rằng công nghệ đã thay đổi nhanh đến như thế cry

khaki

Thường nếu gặp pyc là tôi chỉ có mỗi hướng quăng vào decompiler, nhưng sau Labyrenth cộng với một vài bài CTF lâu lắc lâu lơ chẳng nhớ được, tôi có thêm skill đọc opcode nữa. Tự tin hơn hẳn. Bài này mấy tool tôi có chết sạch.

Chiều đó Sài Gòn mưa nhiều, tôi ngồi ngoài Hà Nội cũng tự cảm thấy u sầu, lạch cạch gõ những dòng code Python với bao thương nhớ về mối tình đầu, như muôn vàn những kẻ thất tình cuồng si chỉ muốn được thả hồn mình trôi đi vô thức. Khẽ mở mắt ra đã thấy flag nằm đó. Tôi chạnh lòng nhớ đến một bài hát đã lâu rồi không nghe, tim buồn man mác…

hashes

Đây là bài duy nhất mà tôi vẫn còn thắc mắc, tức tôi ra flag nhưng vẫn còn một chỗ mà tôi không hiểu, thật xấu hổ. May quá sau đó xem lại thì sáng tỏ rồi. Tôi brute giá trị khởi tạo bằng cách so 2 block cuối, do đã biết flag kết thúc bằng @flare-on.com. Mọi thứ đẹp như tranh. Tôi không brute hết 34^6 trường hợp với mỗi block vì máy tôi yếu, ngoài ra các block này đều có thể đoán được một phần, nên nhìn chung bài này không tệ lắm. Nếu ra đề dạng brute-force mà mất thời gian thì tôi ghét cực kỳ choler

CHIMERA

Màn đêm kéo xuống nhưng tôi vẫn quyết định níu kéo thêm một chút. Vì tôi nhớ giải này có 12 bài, mà đề càng về cuối càng khó nên tôi tính ngày đầu làm 8 bài, ngày sau làm nốt 4 bài vừa hay hết cuối tuần. Đen là bài này cũng guessing vãi nhái. Tôi mất vô số thời gian vào việc đoán xem đám byte còn lại ở section text với data sẽ được decrypt thế nào. Tôi cộng trừ nhân chia xor xiếc các kiểu luôn, vẫn íu ra. Đen. Sáng dậy vô twitter thì thấy có tin nhắn từ BTC, hint là xem kỹ phần header để biết file sẽ được thực thi thế nào. Thề là tôi không hỏi gì, tự dưng họ hint, lần đầu tiên tôi gặp trường hợp này. Tin nhắn từ đêm hôm qua mà tôi không biết, nhưng kệ đi vì thật ra tôi ngủ là chính mà. Thế là tôi lọ mọ phân tích, nhận ra chỗ Dos Stub có tí bất thường, thừa mấy byte thì phải. Phần sau đó là debug thôi nên cũng không có gì, tôi vừa loay hoay với DosBox Debugger vừa nghĩ xem nên tiếp tục cùng nó hay chuyển qua IDA thì tốt hơn. Kiểu sướng quen rồi giờ khổ không chịu được. May mà thuật toán bài này dễ hiểu sweat

GUI

Tôi nhớ ngày xưa về unpack, có bậc tiền nhân đã nói nếu không biết gì thì cứ F8 hoài là ra. Không biết nhớ nhầm hay không nhưng từ lúc tôi áp dụng thì quả nhiên là packer nào tôi cũng phải dùng tool để unpack sweating-onion-head-emoticon Cho đến bài này, tôi mất thời gian vớ vẩn vì chủ quan không xem xét mấy hàm getKey(), tại thấy giá trị trả về của nó đẹp quá. Thành ra lúc decrypt bị lỗi tôi cứ nghĩ là đề sai. Gấu tôi có truyền thụ kinh nghiệm là nếu làm bài tập về nhà mà làm mãi không ra thì cứ nghĩ là đề sai rồi sửa đề luôn đi. Nghe sao mà giang hồ quá, tôi thư sinh không dám bắt chước. Thế là tôi lật đật mở Visual Studio với Python, debug các kiểu, chẳng đi đến đâu. Mãi mới nhận ra sai lầm doubt

FLAVA

Hoàn toàn cạn lời. Đã có lúc tôi nghĩ tôi không bao giờ làm được bài này, và xin cảm ơn sâu sắc những người đã bên cạnh tôi lúc khó khăn. Anh Kiên có thể đã hiểu lầm tôi, tôi không hề có ý nói mấy bài trước dễ, tôi chỉ là quá xúc động khi làm được cái bài chết tiệt này. Tôi nói và tôi có bằng chứng too_sad

Holmes từng nói, khi ta loại bỏ đi những thứ không thể, thì những gì còn lại, dù khó tin đi chăng nữa cũng chính là sự thật. Một phương thức lý luận hoàn toàn dễ hiểu, nhưng do lỗi trong khâu áp dụng, tôi đã loại bỏ cmn luôn cả sự thật beat_shot Cứ thế, tôi mất nhiều ngày cho việc đi làm những điều không thể, mà suýt chút nữa, nó đã thành một nỗi buồn, giống như LabyREnth…

(bài viết chỉ mang tính giải trí, xin đừng nghĩ quá nhiều về vấn đề chuyên môn)
– thương, Chung Hán Lương –

 

4 Responses

  1. kienmanowar says:

    “Chỉ còn nhung nhớ và tương tư” … tựa như quả đất tròn, anh em mình vô tình bắt tay nhau ngay tại cái trung tâm thương mại vừa mới khai trương 🙂

    Thân mến!

    • yeuchimse says:

      Đang có CTF nhưng em trốn team đi chơi đấy, anh nói thế này lộ hết

  2. Viet Vu says:

    Lot dep hong chuyen

  3. limmerent says:

    bài viết hay quá

Leave a Reply to limmerentCancel reply