# HTB-XORXORXOR

السلام عليكم، حبيت أشارككم رايت اب لأني أبي اجرب صراحة وبشوف إن جاز لي الوضع كان بها

(الحقيقة هي جالسة اجرب المواقع و احلل موقعي )  خلاص صدق ببدأ

&#x20;المنصة مثل ما هو موضح HackTheBox

Type: Cryptography&#x20;

Challenge: <https://app.hackthebox.com/challenges/191>

![صوره  لأني أبي اجرب أضيف صورة و شكرًا](/files/R0EGp4hhBLs1JwV1SpR0)

:thumbsup: طولتها وهي قصيره فكرته كالاتي يعطينا كود عشان يسوي انكربشن للفلاق&#x20;

```
#!/usr/bin/python3
import os
flag = open('flag.txt', 'r').read().strip().encode()

class XOR:
    def __init__(self):
        self.key = os.urandom(4)
    def encrypt(self, data: bytes) -> bytes:
        xored = b''
        for i in range(len(data)):
            xored += bytes([data[i] ^ self.key[i % len(self.key)]])
        return xored
    def decrypt(self, data: bytes) -> bytes:
        return self.encrypt(data)

def main():
    global flag
    crypto = XOR()
    print ('Flag:', crypto.encrypt(flag).hex())

if __name__ == '__main__':
    main()
```

زي ما هو موضح قدامكم الكود الهدف منه الآن تحللون شلون صار له انكربشن&#x20;

و للمعلومية ترى عطانا  ملف output.txt فيه الفلاق بعد الانكربشن&#x20;

&#x20;طريقة الحل المستخدمة فضلت تكون يدويًا، فيه ناس تكتب كود أسهل و أفضل &#x20;

أول خطوة كانت جبت الXOR table

![XOR table](https://blogs.plymouth.ac.uk/embedded-systems/wp-content/uploads/sites/94/2018/09/XOR-Truth-Table.png)

بعدين بديت أدور عن الkey ، وشفت أنه الkey بيكون متكون من أربعة كراكترز

&#x20;Process -> will be XORing each byte of the flag with each byte of the key.

```
def __init__(self):
        self.key = os.urandom(4)
```

و كلنا نعرف أن بداية أو صيغة الفلاق تكون HTB{  ، بناءً على المعطيات في الكود رحت جبت  الhex values حق الحروف و بحولها باينري عشان اقدر اسوي لها xor

![hex values table](https://miro.medium.com/max/575/0*UX60P5OK_sAARP7m)

<table><thead><tr><th width="230.66666666666666">Chars (Before Encryption)</th><th width="150">Hex</th><th>Encrypted Char</th></tr></thead><tbody><tr><td>H</td><td>48</td><td>13</td></tr><tr><td>T</td><td>54</td><td>4a</td></tr><tr><td>B</td><td>42</td><td>f6</td></tr><tr><td>{</td><td>7B</td><td>e1</td></tr></tbody></table>

&#x20; بعد ما طلعنا القيم من التيبل و طلعنا القيم المماثلة لها من الاوتبوت اللي بالملف:

*<mark style="background-color:orange;">134af6e1297bc4a96f----..for security..----46d84c5282dd7ef292dc9</mark>*

حولت الhex values إلى binary عشان اقدر اطلع الkey

![الحل يدوي](/files/FGOwo3kPNJRY59yn1lGF)

بعدها اخذت الkey و الoutput و استخدمت أونلاين ديكودر وانحلت&#x20;

&#x20; وبس كان ودي اشارككم الفلاق بس حبيت تجربون صراحة سهل وخفيف ✅

![](https://c.tenor.com/FzTVOM_ei4QAAAAC/brooklyn-nine-nine-gina-linetti.gif)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://exploitminder.gitbook.io/write-ups/htb/htb-xorxorxor.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
