[WannaOne UIT 2021 - Rev] Dad And Son
Giải UIT qua cũng lâu nhưng giờ thi xong mới có dịp làm lại, tiện kiếm 20k tiền viết bài. Bài này lại sử dụng anti debug của linux bằng cách dùng fork vào ptrace để giao tiếp tiến trình cha con. Tiến trình con thực thi 1 đoạn shellcode lưu ở loc_40a0, xem thử nó là gì Còn tiến trình cha sẽ là đoạn switch với các case là các signals mà tiến trình con gửi cho cha. Mình có comment trong Ida rồi, tý mình sẽ gửi file idb của mình. Sau một lúc debug thì tóm tắt luồng như sau: 1. Nhập input với 64 ký tự. 2. Ở địa chỉ 0x40c3 có phép idiv ecx, mà ecx bằng 0 nên sinh ra Signal SIGFPE là case 8. Trong case 8 nó gọi PTRACE_GETREGS rồi lưu vào mảng v7, suy ra được v7[0] đang chứa thanh ghi r15. Sao mình đoán dc r15, thì mọi người lên search cách sử dụng PTRACE_GETREGS, trong đó v7 là struct user_regs_struct, struct đó như sau Mọi người có thể dùng kỹ thuật hook hoặc debug bằng gdb thì sẽ thấy lúc này r13 của thằng con đang trỏ tới input và r15 đang chứa 4 byte đầu của input. Suy ra v7[0...