---
# System prepended metadata

title: BabyRE

---

# BabyRE

chạy thử chương trình, thì chương trình yêu cầu ta nhập vào 1 key bất kì. e có thử thử tên mình vào thì nó in ra như sau

![](https://i.imgur.com/GaXusBM.png)

thấy nó khá lạ nên e đã đọc asm + mã giả ida

![](https://i.imgur.com/c1pSvyN.png)

ở mã giả, e thấy v8 là con trỏ trỏ đến từng kí tự của chuỗi. đọc tiếp thì e thấy nó xuất hiện hàm `scanf("%hhd", &key[i])`. thì thực chất hàm yêu cầu t nhập vào với định dạng là 1 số dạng thập phân 5 lần, tức là key mình phải nhập 5 lần số thập phân mới đúng định dạng key nếu sai sẽ in ra như trên. đọc tiếp xuống vòng for bên dưới, e thấy rằng v5 là con trỏ lại trỏ đến giá trị của con trỏ v8 và với j có bước nhảy bằng 2 thì con ta sẽ lấy mỗi lần 2 kí tự của chuỗi. khi đó thì ta sẽ xor kí tự thứ 1 tức `v5[0]` với `key[j%u]`. còn với ký tự thứ 2 tức `v5[1]` sau khi biến đổi 1 loạt những thứ rắc rối kia thì nó còn như sau `v5[1] ^= key[(j+1)%5]`.
chung quy lại chương trình sẽ yêu cầu ta nhập 5 lần vào sau đó sẽ xor cái key với chuỗi cho trước và kết quả sẽ là flag. như vậy ta chỉ cần xor ngược lại 5 ký tự đầu của chuỗi cho trước với `flag{` thì sẽ ra được key cần tìm :>
sau khi xor ngược lại thì ta ra được kết quả lần lượt là `4, 8, 15, 23, 42`
![](https://i.imgur.com/CsYkkfJ.png)

chạy lại chương trình thì với key với tìm được

![](https://i.imgur.com/XGBYzhP.png)

> flag is : flag{easy_baby_challenge}
