के बीच कोई अंतर है, मैं स्टैक ओवरफ्लो में नया हूं। हाल ही में, मैंने असेंबली का अध्ययन शुरू किया और असेंबली के लिए काफी नया हूं, शेलकोड के लिए बिल्कुल नया। मैं एमएएसएम असेंबलर का उपयोग करके संकलित करने के लिए राडएएसएम का उपयोग कर रहा हूं और मैंने इस वेबसाइट से शेलकोड का अध्ययन करने की कोशिश की है 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 का संकलन करने के लिए उपयोग कर रहा हूं या क्योंकि मैं अप्रत्यक्ष रूप से फ़ंक्शन को कॉल कर रहा हूं?
किसी भी मदद की सराहना की जाएगी, धन्यवाद।
यह एमएएसएम/NASM के संस्करण अंतर के कारण भी हो सकता है। –