# AntiDebug Đầu tiên, để làm được bài này thì ta cần kiến thức cơ bản về assembly Khi đọc dòng đầu tiên ta thấy dòng code : `void __cdecl ENC(int a1, int a2, int a3, int a4)` Trước tiên hãy tìm hiểu xem cdecl là gì? Search trên google thì ra được đường link này: (https://learn.microsoft.com/vi-vn/cpp/cpp/cdecl?view=msvc-170) Hãy để ý bảng này: ![](https://i.imgur.com/CuPBYWt.png) Mình thấy được rằng đối số được truyền từ phải qua trái nên mình kết luận `(int a1, int a2, int a3, int a4)` sẽ tương ứng với `(0xAB12DF34, 0x7B, 0x2D, 0x43)` Sau khi đọc các dòng code tiếp theo, mình có code lại thành 1 chương trình C sau khi chạy thì nó trả ra kết quả này: ![](https://i.imgur.com/agBCsNV.png) > Ta có flag là : `KCSC{0xfd376061}` -------------------------------------------------------- # Merger Xor Sau khi đọc source code thì mình hiểu được chương trình đã làm gì. Cơ bản thì chương trình chia từng kí tự của flag thành 2 phần, ghép nối phần đuôi của kí tự này với phần đầu của kí tự sau đó. Minh họa đơn giản như ảnh sau ![](https://i.imgur.com/jNFWYJc.png) Thực hiện lặp lại 4 lần thì ta có được output như file stdout.txt. Mình sẽ phải dùng đến cách brute-force để tìm ra flag. Thông thường thì sẽ phải viết chương trình đảo ngược nhưng mình ngu cái đấy nên quyết định brute-force bằng mắt để tìm từng kí tự trong flag. Vì đã biết định dạng ban đầu của flag là `KCSC{` nên mình sẽ bắt đầu tìm kiếm từ ký tự thứ 6. Ví dụ như ở đây, ta có thể thấy rằng ở số hex thứ 4 giữa stdout và kết quả trả ra của chương trình có 1 byte giống nhau là '9' nên mình kết luận kí tự thứ 6 là 'h' ![](https://i.imgur.com/MbqOZ38.png) Sau khi xác định được kí tự thứ 6 là 'h' rồi thì mình tiếp tục tìm tiếp kí tự thứ 7 thì mình tìm được kí tự tiếp theo là 't'. Cứ tiếp tục như vậy vừa ngồi tìm vừa đoán thì mình nhận ra tác giả của bài này đưa flag là 1 đường link Youtube. Qua đó giúp mình giảm thiểu được kha khá thời gian tìm. Cuối cùng thì chương trình trả ra kết quả như sau KCSC{https://www.youtube.com/watch?v=ueDH4iL7060} > Ta có flag: `KCSC{https://www.youtube.com/watch?v=ueDH4iL7060}` -------------------------------------------------------- # No Ad Đọc đề bài thì mình có search trên google. Nó trả ra đường link sau (https://woshub.com/run-program-without-admin-password-and-bypass-uac-prompt/) mình có thực hiện theo các bước như link hướng dẫn. Sau đó nó sẽ tạo ra 1 file `NoAd.exe` mới và đổi tên file gốc thành `NoAd_original.exe`. Mình chạy file `NoAd.exe` thì nó sẽ thay đổi hình nên thiết bị và flag ở trên hình. Chỉ có vậy thôi :V > Ta có flag là: KCSC{K0r3_9A_UnM31_D3Su} --------------------------------------------------------- # Cat Mính ném file vào DIE thì thấy nó là file 64bit. Sau đó mình ném file vào dia64 thì thấy được Đọc ida thì nhận thấy `user_name = 'KCSC_4dm1n1str4t0r'` `passswd = 'wh3r3_1s_th3_fl4g'` GDB thì nhận thấy flag được lưu trong vị trí của input = 512 Ghi đè 512 kí tự -> mất đi kí tự (null) trước flag -> `printf("Saving secret \"%s\"...\n", secret);` sẽ in ra 512 kí tự mình vừa nhập vào và cả flag Mình viết 1 tool như sau: ![](https://i.imgur.com/vLBqxQ9.png) Sau khi chạy tool thì nó in ra màn hình như sau: ![](https://i.imgur.com/mS4DsQ0.png) > Ta có flag: `KCSC{w3ll_d0n3_y0u_g0t_my_s3cr3t_n0w_d04942f299}` -------------------------------------------------------- # Treasure Mình ném file vào DIE thì thấy rằng đây là file 64bit. Mình ném vào ida64 sau đó đọc ida thì nhận thấy Part 1: Sau khi đọc qua các hàm trong ida -> KCSC{ Part 2: Ida hay gdb đều hiện thị mã hex cho part 2 (trong gdb hiển thị luôn string) -> 4_t1ny_tr34sur3 Part 3: Mở hex-view lên xem tìm kiếm được thêm gì không thì tìm được part 3 -> _27651d2df78e1998} > Ta có flag: `KCSC{4_t1ny_tr34sur3_27651d2df78e1998}` -------------------------------------------------------- # Overthewrite Mình ném file vào DIE thì thấy rằng đây là file 64bit. Mình ném vào ida64 sau đó đọc ida thì nhận thấy ![](https://i.imgur.com/mitXOFu.png) v9 == 0x13371337 v8 == 0xdeadbeefcafebabe v7 == 0x215241104735f10f s1 == 'Welcome to KCSC' Khai thác lỗi Bufferoverflow Input từ vị trí int64 buf[4]; // [rsp+0h] [rbp-50h] BYREF -> Ghi đè theo thứ tự là: s1, v7, v8, v9 Do strcmp(s1, "Welcome to KCSC") nên s1 ta phải thêm ký tự (NULL) ở cuối Mình viết 1 tool như sau: ![](https://i.imgur.com/sJ6UqXD.png) Nhưng lúc đấy sập server nên mình có Ping với tác giả là anh Trí để check thì anh Trí gửi lại mình như này: ![](https://i.imgur.com/8qfzpd3.png) > Ta có flag: KCSC{y0ur_wr1t3_g4v3_y0u_th1s_fl4g_afc4185ea6} -------------------------------------------------------- # Tet_is_ya_best Sau khi tải file về thì mình đoán đây là kiểu mã hóa bằng cách thay thế chữ cái. Nên mình lên (https://www.boxentriq.com/code-breaking/cryptogram) sau đó ném đoạn văn bản được mã hóa vào đó rồi thấy được flag luôn :V ![](https://i.imgur.com/SBxzpO4.png) > Ta có flag: `KCSC{tet_tet_tet_tet_den_roi__chuc_cac_ban_nam_moi_that_nhieu_suc_khoe__luv_from_luluuuuuuuuuuuu}`