# TAMUCTF WRITEUP ## 1. Reveille Petter * Ta được 1 file game `reveille-petet.exe`, Nếu quăng vào IDA phân tích file này thì sẽ rất lớn và không khả thi. * Ở đây ta có 2 cách 1 là ta có thể dùng `cheat engineer` để buff score và lấy flag còn 2 là strings để lấy code bên trong file .exe, Vì mình đã từng làm một bài tương tự trên `Rootme` nên sẽ quyết định thử cách 2 xem sao ![Screenshot from 2024-04-11 20-35-53](https://hackmd.io/_uploads/B1IHEsveA.png) * Ta thấy biến var_encrypted gán strings bằng `hfdlzs2w^0r^btu2 |`, mình sẽ quăng lên `Cyberchef` để brute xor ![image](https://hackmd.io/_uploads/r1j9NiwxR.png) * Ta được flag ở key 1 `igem{r3v_1s_cut3!!}` ## 2. Resistant * Ta được 1 file ELF, chạy thử bên máy ảo thì ta thấy chương trình yêu cầu user nhập pass và check như các chall khác ![Screenshot from 2024-04-11 20-35-53](https://hackmd.io/_uploads/S17YL6wxA.png) * Load vào IDA để check main ta thấy đơn giản như sau ![image](https://hackmd.io/_uploads/Sy0A0xdlR.png) * Ta thấy hàm `check debug` ngay đầu mình sẽ đặt breakpoint để debug bypass hàm này * Ở bên dưới có thêm hàm decrypt_func và auth_len khá đáng nghi và ta không thấy được chương trình call các hàm get string, hàm decrypt_func thực hiện một vòng lặp qua từng byte trong vùng nhớ được truyền vào. Mỗi byte được thực hiện phép XOR với một byte từ func_key (được trỏ đến bởi &func_key + (i & 0xF)) để giải mã dữ liệu. * Mình sẽ debug thử ![image](https://hackmd.io/_uploads/rkuuGbOe0.png) * Ta sẽ setIP để bypass hàm `check_debug` ở đây, ta cũng thấy sau khi check_debug chương trình sẽ decrypt password và call hàm `auth()`, từ việc ta không thấy hàm dùng để scan chuỗi input giống như lức chạy chương trình thì có lẽ lệnh đã được wrap trong hàm `auth()` này mình sẽ f7 vào hàm để check ![image](https://hackmd.io/_uploads/S14WvbugA.png) * Đúng như mình nghĩ, nó gen ra hàm nhận input của chứng ta * hàm này sẽ nhận input và cmp với một const nếu đúng sau đó sẽ mở file flag.txt để đọc flag mình sẽ đặt breakpoint để lấy const ra ![image](https://hackmd.io/_uploads/HkqX_-Ox0.png) * Const string là `N0tUrM0msP4sswd!`, ta đã lấy được const sau đó sẽ dùng để nhập lên server ssl mà đề cho để get flag > gigem{a_b4ttl3_4_th3_hist0ry_b00ks}