# WannaGame Freshman 2023 Welcome --- Description: I just want to welcome you to the WannaGame Freshman 2023!!! Author: dream **Solution** chạy thử file ta thấy: ![image](https://hackmd.io/_uploads/SkUknWZVT.png) vào trong IDA và tìm kiếm chuỗi ở trên ta đến được đây ![image](https://hackmd.io/_uploads/rkd83WZNT.png) mình thấy ở giữa chương trình lại call hàm exit trông khá khả nghi nên mình patched thử ![image](https://hackmd.io/_uploads/HJu1aWZVp.png) sau đó mình chạy lại file và lấy được flag ![image](https://hackmd.io/_uploads/B1Iz6-ZVT.png) flag : W1{YOU_DID_IT######WELCOME_TO_THE_WANNAGAME_FRESHMAN_2023!!!!!!} Rust Baby --- Level: medium Description: A baby rust challenge for you to warmup Author: dream **Solution** Đây là bài được cho sẵn source code nên ta cần đọc xem chương trình bắt ta phải làm gì ![image](https://hackmd.io/_uploads/S1nRpbb4a.png) Nhìn vài tên hàm ta hoàn toàn có thể đoán được là ta cần phải tìm ma trận A thoả mãn phương trình A*B=C Với B là ``` [1, 3, 3, 7, 3, 3, 7, 3] [3, 3, 7, 3, 3, 7, 3, 1] [3, 7, 3, 3, 7, 3, 1, 3] [7, 3, 3, 7, 3, 1, 3, 3] [3, 3, 7, 3, 1, 3, 3, 7] [3, 7, 3, 1, 3, 3, 7, 3] [7, 3, 1, 3, 3, 7, 3, 3] [3, 1, 3, 3, 7, 3, 3, 7] ``` Và C là ``` [2914, 3090, 2760, 2742, 2966, 2840, 2890, 3078] [3184, 3232, 3126, 3110, 3172, 3128, 3132, 3176] [3041, 3053, 3039, 2997, 3057, 3057, 2987, 3039] [3122, 3054, 3048, 3102, 3050, 3064, 3038, 3002] [3119, 3151, 3233, 3159, 3169, 3155, 3245, 3239] [3282, 3110, 3214, 3256, 3186, 3204, 3188, 3300] [3003, 3043, 2931, 2941, 3137, 3067, 3041, 2927] [2296, 2202, 2434, 2722, 2754, 2280, 2286, 2346] ``` Ta có thể dùng các công cụ trên mạng và dễ dàng tìm được A ![image](https://hackmd.io/_uploads/HkjhAZ-4a.png) Ta chuyển mảng này sang ascii và lấy flag flag : W1{Just_a_simple_flagchecker_chall_for_the_start_of_Freshman!!!} Ez Flag Checker 1 --- Level: medium Description: A simple flagchecker 1 Author: dream **Solution** Mở file python đề cho lên ``` def __(___, ____): _____ = [int(____[_:_+2],10) for _ in range(0,len(____),2)] ____ = [___[_] for _ in _____] ____ = ''.join(____) return ____ def _____(___): ____ = [] for _ in ___: ______ = bin(ord(_))[2:].zfill(8) ____.append(______) return ''.join(____) def _______(___): return ___.replace("0", "O").replace("1", "0") def ____(___): return ___.replace("0", "1").replace("O", "0") def _________(___): ____ = "" for _ in range(0, len(___), 8): _____ = ___[_:_+8] ______ = int(_____, 2) _______ = chr(______) ____ += _______ return ____ a = input("\t\t\t\t\tWELCOME TO THE FRIST FLAGCHECKER CHALLENGE!!!!!!!!!!!!!!\n\t\t\t\t\t\t\tPLEASE SUBMIT YOUR FLAG:\n\t\t\t\t\t").ljust(100,'0') b = "OO00O0O0OO00OOO0OO00OOOOOO00OO0OOO00OO00OO00OOO0OO00OOO0OO00O0OOOO00OOOOOO00O00OOO00OOO0OO000OO0OO00OOO0OO00OOO0OO00OO0OOO00O00OOO00OO0OOO00OO0OOO00OO00OO00O000OO00O0OOOO00OO0OOO00OO00OO00O00OOO00O0OOOO00O0OOOO00OOOOOO000OO0OO00O0OOOO000OOOOO00O0O0OO00O000OO00O0O0OO00OO00OO00O0OOOO00OOO0OO00O00OOO00OO00OO00OOOOOO00OO00OO00O0O0OO00OOOOOO00OOOOOO00OOO0OO00OO00OO000OOOOO00OO0OOO00OOOOOO00O0OOOO00O0O0OO00OO00OO00O0OOOO00OO00OO00OO00OO00OOO0OO000OOOOO00O0O0OO000OO0OO00OOO0OO00OOOOOO00O0O0OO00O0OOOO00OO0OOO00OO00OO00OOO0OO00OO0OOO00O0O0OO00O0O0OO00OOO0OO00O000OO00OOO0OO00OO00OO00OOOOOO00OOOOOO00OOO0OO00O0O0OO00OO0OOO00OOO0OO00O00OOO00OO0OOO00OO0OOO000OOOOO00OOOOOO00O0OOOO00O0O0OO000OOOOO00OO0OOO00O0O0OO00O0O0OO00OO0OOO00OO00OO00OOOOOO00OOO0OO00O00OOO00O0OOOO00O00OOO00O00OOO00OOO0OO00OOOOOO00O0O0OO00OO00OO00OO0OOO00OO0OOO00O000OO00OOOOOO000OOOOO00O0OOOO00OOOOOO00O0OOOO00OO00OO00OO0OOO00O0OOOO00OO00OO000OO0OO00O0OOOO00O000OO00O00OOO00OOOOOO00OO00OO00O0O0OO00O0O0OO00O00OOO00O0OOOO000OO0OO00OOOOOO00O000OO00OO0OOO000OO0" c = "O0000OO0O0000O00O00O0O00O000O0OOO000OO0OO00OOO00O0O0O00OO00O000OO00O00OOO00OO0OOO00OOO00O0O00000OO00OOO0O000OO00O00O0000O0OOO0O0O000O0O0O00O0OO0O00000O0O0OO0OO0O0O00000OO00OOO0O0OO0OO0O00O0OOOO000O0OOO00O0OO0O0O00000O0O00000O0O00000O00O0OO0O0O00000O00O00OOO00OO0O0O00OO0OOO000OO00O0O00000O0O0O000O0OO0OOOOO00O0OOOO000000O000O0OOO00O00O0O000OO00O0OOO0OOOO00OOOOO00O00O0O00O0OO0O0O00000O000O0OOO0O0OOOOOO00OO00OO0OO000O0O0OO00O00OO00OO000O0O0O0O00000O00OO00OO00OO00OOO00OOO0O0O0O0OOO00O0000O0O0OO0OO00OO0O0O0O00000" if (_______(_____(__(a,_________(____(b)))))) == c: print("\t\t\t\t\t\t\t\tCORRECT!") else: print("\t\t\t\t\t\t\t\tWRONG!") ``` Và wow sao toàn dấu _ thế này. Có vẻ input của chúng ta sẽ được đưa lần lượt vào các hàm và cuối cùng sẽ được so sánh với c. Ta sẽ phân tích xem từng hàm ở đây làm gì. ``` def _______(___): return ___.replace("0", "O").replace("1", "0") def ____(___): return ___.replace("0", "1").replace("O", "0") ``` 2 hàm trên chỉ đơn giản thay thế các ký tự trong string mà thôi, qua 2 hàm trên ta có thể đoán rằng string b và string c là 2 binary ``` def _________(___): ____ = "" for _ in range(0, len(___), 8): _____ = ___[_:_+8] ______ = int(_____, 2) _______ = chr(______) ____ += _______ ``` Hàm trên lấy lần lượt từng 8 bit của string b sau đó chuyển sang int rồi sau đó chuyển thành char. Vậy hàm trên sẽ chuyển từ 1 binary thành 1 string ``` def __(___, ____): _____ = [int(____[_:_+2],10) for _ in range(0,len(____),2)] ____ = [___[_] for _ in _____] ____ = ''.join(____) return ____ ``` Hàm trên sẽ tạo ra 1 mảng hoán vị dựa vào tham số thứ 2 truyền vào cũng chính là string b. Sau đó tham số thứ nhất cũng chính là input của chúng ta sẽ bị hoán vị dựa vào mảng hoán vị vừa được tạo ra. ``` def _____(___): ____ = [] for _ in ___: ______ = bin(ord(_))[2:].zfill(8) ____.append(______) return ''.join(____) ``` Hàm trên chỉ đơn giản là chuyển từ string sang binary Sau khi phân tích xong tất cả các hàm thì ta thấy input của chúng ta sẽ bị hoán vị lại sau đó bị chuyển thành binary và cuối cùng sẽ được so sánh với binary c. Vậy để tìm được flag ta chỉ cần lấy binary c và đảo ngược toàn bộ quá trình trên Đây là code của mình (mình code thẳng vào file source code): ``` def __(___, ____): _____ = [int(____[_:_+2],10) for _ in range(0,len(____),2)] print(_____) newa = [0]*100 for i in range(0,64): newa[_____[i]]=i ____ = [___[_] for _ in newa] ____ = ''.join(____) return ____ def _____(___): ____ = [] for _ in ___: ______ = bin(ord(_))[2:].zfill(8) ____.append(______) return ''.join(____) def _______(___): return ___.replace("0", "O").replace("1", "0") def doilai(a): return a.replace("0","1").replace("O","0") def ____(___): return ___.replace("0", "1").replace("O", "0") def _________(___): ____ = "" for _ in range(0, len(___), 8): _____ = ___[_:_+8] ______ = int(_____, 2) _______ = chr(______) ____ += _______ return ____ a = input("\t\t\t\t\tWELCOME TO THE FRIST FLAGCHECKER CHALLENGE!!!!!!!!!!!!!!\n\t\t\t\t\t\t\tPLEASE SUBMIT YOUR FLAG:\n\t\t\t\t\t").ljust(100,'0') b = "OO00O0O0OO00OOO0OO00OOOOOO00OO0OOO00OO00OO00OOO0OO00OOO0OO00O0OOOO00OOOOOO00O00OOO00OOO0OO000OO0OO00OOO0OO00OOO0OO00OO0OOO00O00OOO00OO0OOO00OO0OOO00OO00OO00O000OO00O0OOOO00OO0OOO00OO00OO00O00OOO00O0OOOO00O0OOOO00OOOOOO000OO0OO00O0OOOO000OOOOO00O0O0OO00O000OO00O0O0OO00OO00OO00O0OOOO00OOO0OO00O00OOO00OO00OO00OOOOOO00OO00OO00O0O0OO00OOOOOO00OOOOOO00OOO0OO00OO00OO000OOOOO00OO0OOO00OOOOOO00O0OOOO00O0O0OO00OO00OO00O0OOOO00OO00OO00OO00OO00OOO0OO000OOOOO00O0O0OO000OO0OO00OOO0OO00OOOOOO00O0O0OO00O0OOOO00OO0OOO00OO00OO00OOO0OO00OO0OOO00O0O0OO00O0O0OO00OOO0OO00O000OO00OOO0OO00OO00OO00OOOOOO00OOOOOO00OOO0OO00O0O0OO00OO0OOO00OOO0OO00O00OOO00OO0OOO00OO0OOO000OOOOO00OOOOOO00O0OOOO00O0O0OO000OOOOO00OO0OOO00O0O0OO00O0O0OO00OO0OOO00OO00OO00OOOOOO00OOO0OO00O00OOO00O0OOOO00O00OOO00O00OOO00OOO0OO00OOOOOO00O0O0OO00OO00OO00OO0OOO00OO0OOO00O000OO00OOOOOO000OOOOO00O0OOOO00OOOOOO00O0OOOO00OO00OO00OO0OOO00O0OOOO00OO00OO000OO0OO00O0OOOO00O000OO00O00OOO00OOOOOO00OO00OO00O0O0OO00O0O0OO00O00OOO00O0OOOO000OO0OO00OOOOOO00O000OO00OO0OOO000OO0" d=b c = "O0000OO0O0000O00O00O0O00O000O0OOO000OO0OO00OOO00O0O0O00OO00O000OO00O00OOO00OO0OOO00OOO00O0O00000OO00OOO0O000OO00O00O0000O0OOO0O0O000O0O0O00O0OO0O00000O0O0OO0OO0O0O00000OO00OOO0O0OO0OO0O00O0OOOO000O0OOO00O0OO0O0O00000O0O00000O0O00000O00O0OO0O0O00000O00O00OOO00OO0O0O00OO0OOO000OO00O0O00000O0O0O000O0OO0OOOOO00O0OOOO000000O000O0OOO00O00O0O000OO00O0OOO0OOOO00OOOOO00O00O0O00O0OO0O0O00000O000O0OOO0O0OOOOOO00OO00OO0OO000O0O0OO00O00OO00OO000O0O0O0O00000O00OO00OO00OO00OOO00OOO0O0O0O0OOO00O0000O0O0OO0OO00OO0O0O0O00000" c=__(_________(doilai(c)),_________(____(d))) print(c) ``` flag : W1{ImPreSsiVe_tHis_ch4ll_Dn’tmk3_iT_dIfficu1t_foR_y0u_doEs_1t?}