> For the complete documentation index, see [llms.txt](https://exploitminder.gitbook.io/write-ups/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://exploitminder.gitbook.io/write-ups/htb/htb-xorxorxor.md).

# 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)
