# (Write-up) Reversing.Kr: Easy Keygen
# ****🤔O****verview
Khi giải nén file thử thách thì nhận được hai file là ****Easy Keygen.exe**** và **ReadMe.txt.**

Chạy file **exe**, nhập tên và serial sau đó enter thì không có gì xảy ra.
Miêu tả của chall này được đề cập trong file **ReadMe.txt**
# 💻Problem

Trong chall này, vấn đề cần giải quyết là phải tìm **Name (**cũng chính là key**)** phù hợp với **Serial** được cho ****là **5B134977135E7D13.**
# 🚩Let’s go
Mở file **exe** trong **IDA** và tìm nơi có nhiệm vụ chuyển đổi **Name** nhập vào thành **Serial.**
Chuyển sang mã giả để dễ dàng phân tích hơn thì mình tìm thấy đoạn này xử lý việc chuyển đổi thành **Serial:**

Vậy là **Serial** được sinh ra từ đoạn code:
```c
for ( i = 0; v3 < (int)strlen(v8); ++i )
{
if ( i >= 3 )
i = 0;
sprintf(Buffer, "%s%02X", Buffer, v8[v3++] ^ v7[i - 1]);
}
```
(**v8** chính là **Name** được người dùng nhập vào)
Xem giá trị của **v7** ở assembly:

Vậy giá trị của **v7** là **[0x10, 0x20, 0x30]**
Dựa trên những dữ kiện trên, mình code lại đoạn mã **Python** để đảo ngược từ mã **Serial** trở lại thành **Name:**
```python
v8 = "5B134977135E7D13"
v8 = bytes.fromhex(v8)
v7 = [0x10, 0x20, 0x30]
key = ""
for i in range(8):
key += chr(v8[i] ^ v7[i%3])
print("Key: " + key)
```
Và kết quả nhận được khi chạy chương trình trên là:

Vậy key của chall này là: **`K3yg3nm3`**