2014-08-28 9 views
6

के बीच कोई अंतर है, मैं स्टैक ओवरफ्लो में नया हूं। हाल ही में, मैंने असेंबली का अध्ययन शुरू किया और असेंबली के लिए काफी नया हूं, शेलकोड के लिए बिल्कुल नया। मैं एमएएसएम असेंबलर का उपयोग करके संकलित करने के लिए राडएएसएम का उपयोग कर रहा हूं और मैंने इस वेबसाइट से शेलकोड का अध्ययन करने की कोशिश की है Shellcoding for Linux and Windowsक्या एमएएसएम शेलकोड और एनएसएम शेलकोड

मैं विंडोज 64-बिट पर RadAsm का उपयोग कर रहा हूं। मेरे द्वारा उपयोग किया जाने वाला कोड लगभग समान है, सिवाय इसके कि मैं डीएलएल में फ़ंक्शन के पते की बजाय फ़ंक्शन के पूर्ण नाम का उपयोग करता हूं। शेलकोड को 5000 पैरामीटर के साथ नींद फ़ंक्शन का उपयोग करना चाहिए।

यह वह कोड है जिसे मैं एमएएसएम में उपयोग कर रहा हूं।

.386 
.model flat, stdcall 
option casemap:none 

include kernel32.inc 
includelib kernel32.lib 

.code 
_start: 
    xor eax, eax ; zero out eax 
    mov ebx, Sleep ; function sleep goes in ebx 
    mov ax, 5000 ; parameter goes in ax 
    push eax  ; parameter on stack 
    call ebx  ; call Sleep 
end _start 
end 

यह एमएएसएम में कोई त्रुटि नहीं के साथ इकट्ठा होता है।

उत्पन्न शेलकोड में शून्य मान हैं और वेबसाइट से थोड़ा अलग है। यह इस प्रकार है।

मैंने objdump -d nameofexecutable.exe का उपयोग अलग-अलग हिस्सों को प्राप्त करने के लिए किया था।

Disassembly of section .text 
00401000 <.text>: 
    401000:  33 c0     xor %eax,%eax 
    401002:  bb 0e 10 40 00   mov $0x40100e,% 
    401007:  66 b8 88 13    mov $0x1388,%ax 
    40100b:  50      push %eax 
    40100c:  ff d3     call *%ebx 
    40100e:  ff 25 00 20 40 00  jmp *0x402000 

लेकिन वेबसाइट में, वहाँ कोई 00 हेक्स कोड हैं।

Disassembly of section .text: 

08048080 <_start>: 
8048080:  31 c0     xor %eax,%eax 
8048082:  bb ea 1b e6 77   mov $0x77e61bea,%ebx 
8048087:  66 b8 88 13    mov $0x1388,%ax 
804808b:  50      push %eax 
804808c:  ff d3     call *%ebx 

ऐसा इसलिए हो सकता है क्योंकि मैं x64 का संकलन करने के लिए उपयोग कर रहा हूं या क्योंकि मैं अप्रत्यक्ष रूप से फ़ंक्शन को कॉल कर रहा हूं?

किसी भी मदद की सराहना की जाएगी, धन्यवाद।

+0

यह एमएएसएम/NASM के संस्करण अंतर के कारण भी हो सकता है। –

उत्तर

3

सरल जवाब यह है कि एमएएसएम बेकार है !!

here से उद्धृत "अतीत में मैंने फ्री और ओपन-सोर्स नेटवाइड असेंबलर (NASM) का उपयोग करके 32-बिट शेलकोड विकसित किया था, लेकिन 64-बिट किस्म सीखने के अभ्यास के माध्यम से मुझे लगा कि मैं इसे आजमाउंगा इसके बजाय माइक्रोसॉफ्ट असेंबलर (एमएएसएम) के साथ बाहर निकलें। एक समस्या जल्दी से स्पष्ट हो गई: एमएएसएम एक .exe फ़ाइल के विपरीत कच्चे बाइनरी मशीन कोड उत्पन्न करने के लिए कोई रास्ता नहीं (मुझे पता है) प्रदान करता है! हालांकि सभी खो नहीं गए हैं, कोड बाइट्स .exe फ़ाइल से आसानी से निकाला जा सकता है (लेकिन भविष्य में मैं NASM पर वापस जा सकता हूं)। ", शेलकोड बनाना मुश्किल है।

मैंने प्रोग्राम के लिए शेलकोड बनाने के लिए NASM का उपयोग किया जो कि विंडोज x64 पर आपके द्वारा प्रदान किए गए लिंक से है, यह परिणाम है कि मैंने हासिल किया, कोई शून्य बाइट नहीं। नींद के लिए उदाहरण बदलता है सही ढंग से काम नहीं कर सकता है लेकिन दूसरा उदाहरण पूरी तरह कार्यात्मक है।

"\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xeb\x2f\x59\x88\x51\x0a" 
"\xbb\x82\xf8\x60\x77\x51\xff\xd3\xeb\x31\x59\x31\xd2" 
"\x88\x51\x0b\x51\x50\xbb\xe6\x4d\x61\x77\x59\x31\xd2" 
"\x88\x51\x03\x31\xd2\x52\x51\x51\x52\x31\x32\xd2\x50" 
"\xb8\xca\x3a\x61\x77\xe8\xcc\xff\xff\xff\x75\x73\x65" 
"\x72\x33\x32\x2e\x64\x6c\x6c\x4e\xe8\xca\xff\xff\xff" 
"\x4d\x65\x73\x73\x61\x67\x65\x42\x6f\x78\x41\x4e\xe8" 
"\xc6\xff\xff\xff\x48\x65\x79\x4e" 

नोट: objdump

यानी साथ nameofexecutable.o का उपयोग करें। objdump -o nameofexecutable.o शेलकोड प्राप्त करने के लिए और nameofexecutable.exe

4

आपका कोड 0x00401000 पर चलाने के लिए इकट्ठा किया गया है, इसलिए सभी पते का उच्चतम बाइट 0x00 होना समाप्त हो गया है। उनका कोड 0x08048080 पर चलाने के लिए इकट्ठा किया जाता है, इसलिए उनके सभी पते का उच्चतम बाइट 0x08 होता है।

यह वह जगह है जहां से आपके सभी शून्य आते हैं।

+0

मैंने पाया कि आपको हेक्स कोड कैसे मिला और यह कहां चल रहा है लेकिन क्या नल मूल्यों को ठीक करने का कोई तरीका है? – David

+0

@ डेविड आपका क्या मतलब है "ठीक करें"?वे कोई समस्या नहीं पैदा कर रहे हैं, है ना? – davmac

+0

अच्छी तरह से, उत्तर के अनुसार, वे 0x00 से शुरू हो रहे हैं और वे नल बाइट्स होने के कारण होते हैं तो मैं नल बाइट को कैसे हटा सकता हूं? @davmac – David

संबंधित मुद्दे