Xxd से कुछ आउटपुट लेना और इसे हाथ से प्रयोग करने योग्य शेलकोड में बदलना कोई मज़ा नहीं है, इसलिए आपका काम प्रक्रिया को स्वचालित करना है।
नियम
आपका सबमिशन एक फंक्शन, लैम्ब्डा, स्क्रिप्ट, या उनमें से कोई भी उचित समतुल्य हो सकता है। आप परिणाम प्रिंट कर सकते हैं, या यदि आपका सबमिशन एक फंक्शन / लैम्ब्डा है तो आप इसे वापस भी कर सकते हैं।
आपको प्रोग्राम में तीन तर्क देने होंगे, पहला xxd के आउटपुट से युक्त एक स्ट्रिंग होना चाहिए, एक फ़ाइल नाम के अलावा कोई तर्क नहीं है, जैसे xxd some_file
:। यहां एक उदाहरण दिया गया है कि पहला तर्क कैसा दिखेगा:
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
आपकी ज़रूरत है कि बाइट्स वाले मध्य खंड (पहले 8 कॉलम :
) के बाद और इसे किसी भी व्हाट्सएप को हटाकर शेलकोड में बदल दिया जाए, फिर \x
प्रत्येक बाइट के पहले एक डाल दिया जाए ।
यहां इनपुट के लिए आउटपुट क्या होना चाहिए (किसी अन्य तर्क की अनदेखी):
\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e\x58\x58\x58\x58\x59\x59\x59\x59
आप मान सकते हैं कि पहला तर्क हमेशा एक वैध xxd आउटपुट होगा, फ़ाइल नाम के अलावा कोई तर्क नहीं दिया गया।
आपका आउटपुट एक स्ट्रिंग भी होना चाहिए जहां बैकस्लैश शाब्दिक बैकस्लैश हैं, जिनका उपयोग एस्केप वर्ण के रूप में नहीं किया जाता है। इसलिए जब मैं "\ x65" कहता हूं, तो मैं बाइट 0x65, या यहां तक कि पत्र "ए" के बारे में बात नहीं कर रहा हूं। कोड में, यह स्ट्रिंग "\ x65" होगा।
दूसरा तर्क निर्दिष्ट करता है कि xxd आउटपुट में शेलकोड कहां से शुरू होना चाहिए, और तीसरा निर्दिष्ट करता है कि इसे कहां समाप्त होना चाहिए। अगर तीसरा तर्क है-1
, तो यह xxd आउटपुट के अंत में समाप्त होगा। दूसरा और तीसरा तर्क हमेशा गैर नकारात्मक होगा, सिवाय तीसरे के जब-1
यहाँ कुछ परीक्षण मामले हैं:
तर्क 1:
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
तर्क 2:, 7
तर्क 3: e
(ये दोनों तंत्र हेक्साडेसिमल संख्याओं का प्रतिनिधित्व करते हैं)
आउटपुट: \xc9\xcd\x80\xeb\x16\x5b\x31\xc0
तर्क 1:
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
तर्क 2:, 0
तर्क 3:2e
आउटपुट: \x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e
तर्क 1:
00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1..
00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S.
00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX
00000030: 5858 5859 5959 59 XXXYYYY
तर्क 2:, a
तर्क 3:-1
आउटपुट: \xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e\x58\x58\x58\x58\x59\x59\x59\x59
कम से कम बाइट्स वाला कोड जीतता है। विजेता की घोषणा सात दिनों में, 15 अगस्त 2016 को की जाएगी (लेकिन उसके बाद प्रस्तुतियाँ अभी भी सराही जाती हैं)।
अपडेट करें
चुनौती जीतने के लिए @ अदनान को बधाई !
~
बजाय \x7e
। और क्या हम \t
इसके बदले लौट सकते हैं \x09
?
7
है, वह शून्य-आधारित सूचकांक की तरह दिखता है और e
एक-आधारित सूचकांक है ( e-7=7
लेकिन आपके आउटपुट में 8 हेक्स कोड हैं), या क्या मैं कुछ अनदेखी कर रहा हूं?