
3 Ball Mark
- Tôi mở file bằng IDA để thực xem mã code của bài này.

- Tiến hành đọc code ở hàm main thì tôi thấy chỉ có hàm
show_trylà hàm cần check, chỉ cần hàm này trả về đúng 10 lần tương ứng v7 == 10 thì sẽ pass bài này.

- Phân tích hàm này thì chỉ là nó đang so sánh giá trị nhập vào (1/2/3) tương ứng là vị trí của các giá trị bên trong
bagcó phải làYellowhay không thôi. - Tôi tiến hành debug để xem các giá trị của
bagthay đổi như nào.

- Ở mỗi lần nhập giá trị của bag lại thay đổi, và ta chỉ cần check đúng bị trí của
Yellowrồi nhập vào như thế 10 lần là ta sẽ có flag.
Flag
flag{742856a9af6264c3eed88587f09ed03b}Keypad
- Tôi mở file sal bằng Logic 2 của Saleae để xem bên trong nó có gì.

- Nó gồm các đường sóng nhìn khá rối.

- Dựa vào ảnh gợi ý của đề bài ở trên, tôi đoán 3 Channel (1, 2, 3) sẽ tương ứng với 3 cột của bàn phím số, và 4 Channel (4, 5, 6, 7) sẽ tương ứng với 4 hàng của bàn phím số.
- Bắt đầu phân tích, tôi thấy ở 3 nhịp đầu ở Channel 3 được kích hoạt, với Channel 4, 5, 6, 7 thì có Channel 4 là cột đơn còn lại Channel 5, 6, 7 thì là cột nối nhau nên tôi nghĩ nó là giấu hiện để nhận biết Channel nào đang được kích hoạt.
- Dựa vào đó ta có 3 nhịp đầu tương ứng với phím được ấn là
3 3 3. - Tôi tiến hành check 9 nhịp đầu thì thấy thứ tự các phím được ấn là
333 555 2 4 *, dựa vào tấm ảnh gợi ý còn lại của bài thì tôi biết được ấn 3 lần phím 3 sẽ được chữf, 3 lần phím 5 làl, 1 lần phím 2 làa, 1 lần phimms 4 làgvà tại sao lại có phím*, tôi xem lại đề bài thì biết được ký tự*sẽ là ký tự thay thế cho{và}vì phím số không có ký tự ngoặc này. - Từ đó đã có đủ dữ liệu của bài này nên tôi tiến hành giải nốt các ký tự còn lại và đã có được flag của bài này.
Flag
flag{26841590753139726481256783695801}lazycode1.0
- Tôi mở file exe bài cho bằng IDA để xem mã chương trình.

- Tôi nhận thấy bài này chỉ đơn giản là thực hiện xor
encrypted_flagvàxorsthôi. - Tôi lấy dữ liệu của 2 mảng đó ra và tạo một script python để xor nó lấy flag.
encrypted_flag = [ 0x15, 0x1F, 0x12, 0x14, 0x08, 0x10, 0x4A, 0x45, 0x43, 0x15, 0x46, 0x46, 0x46, 0x46, 0x47, 0x4B, 0x44, 0x42, 0x15, 0x16, 0x16, 0x17, 0x17, 0x44, 0x10, 0x40, 0x40, 0x12, 0x41, 0x43, 0x15, 0x11, 0x44, 0x40, 0x4A, 0x42, 0x4A, 0x0E, 0x73]
xors = [ 0x12, 0x2B, 0x47, 0x76, 0x66, 0x04, 0x0B, 0x36, 0x21, 0x6C, 0x37, 0x31, 0x1B, 0x5B, 0x13, 0x67, 0x43, 0x1E, 0x09, 0x27, 0x08, 0x79, 0x4B, 0x0D, 0x3D, 0x52, 0x5B]
for i in range(1, 1001): encrypted_flag = [x ^ xors[i % len(xors)] for x in encrypted_flag]
print("".join(chr(x) for x in encrypted_flag if x != 0))- Và tôi đã có được flag.
Flag
flag{c960f55554871feedd7c33a20fb73919}lazycode2.0
- Tôi mở file bài cho bằng IDA để xem mã chương trình.

- Tôi nhận thấy bài này chỉ đơn giản là thực hiện xor
encrypted_flagvàxorsgiống như lazycode1.0. - Tôi lấy dữ liệu của 2 mảng đó ra và tạo một script python để xor nó lấy flag.
encrypted_flag = [ 0x2A, 0x20, 0x2D, 0x2B, 0x37, 0x2E, 0x7F, 0x2A, 0x28, 0x2D, 0x78, 0x7D, 0x7A, 0x28, 0x2D, 0x29, 0x2E, 0x28, 0x29, 0x2A, 0x7B, 0x2D, 0x79, 0x28, 0x7B, 0x75, 0x28, 0x29, 0x2E, 0x7C, 0x7B, 0x2F, 0x78, 0x7F, 0x7F, 0x7B, 0x79, 0x31, 0x4C]
xors = [ 0x17, 0x2B, 0x57, 0x6F, 0x7A, 0x00, 0x21, 0x2D, 0x1D, 0x67, 0x2B, 0x56, 0x16, 0x63, 0x5B, 0x67, 0x38, 0x1D, 0x0B, 0x0A, 0x03, 0x70, 0x47, 0x12, 0x36, 0x0C, 0x63]
for i in range(1, 1001): encrypted_flag = [x ^ xors[i % len(xors)] for x in encrypted_flag]
print("".join(chr(x) for x in encrypted_flag if x != 0))- Và tôi đã có được flag.
Flag
flag{b3fda416daebdef7a5d79deb07c43375}