<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Shellcode</id>
	<title>Shellcode - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Shellcode"/>
	<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Shellcode&amp;action=history"/>
	<updated>2026-04-06T09:08:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.sarg.dev/index.php?title=Shellcode&amp;diff=150745&amp;oldid=prev</id>
		<title>imported&gt;Fabrickator: rescue dead link for &quot;The Basics of Shellcoding&quot;; provide live url for &quot;The shellcoder&#039;s handbook&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Shellcode&amp;diff=150745&amp;oldid=prev"/>
		<updated>2025-10-09T03:23:41Z</updated>

		<summary type="html">&lt;p&gt;rescue dead link for &amp;quot;The Basics of Shellcoding&amp;quot;; provide live url for &amp;quot;The shellcoder&amp;#039;s handbook&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description |Code intended as a payload to exploit a software vulnerability}}&lt;br /&gt;
{{no footnotes|date=July 2025}}&lt;br /&gt;
{{Redirect |Shell code|code written in a shell&amp;#039;s command language|Shell script}}&lt;br /&gt;
{{Redirect |Alphanumeric executable|executable code presented in hexadecimal format|Hex file (disambiguation)}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Shellcode&amp;#039;&amp;#039;&amp;#039; is [[executable code]] intended to be used as a [[Payload (computing)|payload]] for [[exploit (computer security)|exploiting]] a [[software]] [[Vulnerability (computing)|vulnerability]]. The term includes &amp;#039;&amp;#039;shell&amp;#039;&amp;#039; because the attack originally described an attack that opens a [[Shell (computing)|command shell]] that the attacker can use to control the target machine, but any code that is injected to gain access that is otherwise not allowed can be called shellcode. For this reason, some consider the name &amp;#039;&amp;#039;shellcode&amp;#039;&amp;#039; to be inaccurate.&amp;lt;ref&amp;gt;{{cite book |title=Sockets, Shellcode, Porting, &amp;amp; Coding: Reverse Engineering Exploits and Tool Coding for Security Professionals &lt;br /&gt;
|author-first1=James C. |author-last1=Foster |author-first2=Mike |author-last2=Price |publisher=Elsevier Science &amp;amp; Technology Books |date=2005-04-12 |isbn=1-59749-005-9 |url=https://books.google.com/books?id=ZNI5dvBSfZoC}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An attack commonly injects [[data]] that consists of executable code into a [[process (computing)|process]] before or as it exploits a vulnerability to gain control. The [[program counter]] is set the shellcode [[entry point]] so that that the shellcode runs. Deploying shellcode is often accomplished by including the code in a file that a vulnerable process downloads and then loads into its memory.&lt;br /&gt;
&lt;br /&gt;
Common wisdom dictates that to maximum effectiveness, a shellcode payload should be small.&amp;lt;ref name=&amp;quot;anley_koziol_2007&amp;quot;&amp;gt;{{Cite book |title=The shellcoder&amp;#039;s handbook: discovering and exploiting security holes |date=2007 |publisher=Wiley |author-first1=Chris |author-last1=Anley |author-first2=Jack |author-last2=Koziol |url=https://archive.org/details/Wiley.The.Shellcoders.Handbook.2nd.Edition.Aug.2007/ |isbn=978-0-470-19882-7 |edition=2 |location=Indianapolis, Indiana, UA |oclc=173682537}}&amp;lt;/ref&amp;gt; [[Machine code]] provides the flexibility needed to accomplish the goal. Shellcode [[hacker |authors]] leverage small opcodes to create compact shellcode.&amp;lt;ref&amp;gt;{{Cite book |title=Buffer overflow attacks: detect, exploit, prevent |date=2005 |publisher=Syngress |author-last=Foster |author-first=James C. |isbn=1-59749-022-9 |location=Rockland, MA, USA |oclc=57566682}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web |title=Tiny Execve sh - Assembly Language - Linux/x86 |url=https://github.com/geyslan/SLAE/blob/master/4th.assignment/tiny_execve_sh.asm |access-date=2021-02-01 |website=GitHub}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Types ==&lt;br /&gt;
&lt;br /&gt;
; Local&lt;br /&gt;
A local shellcode attack allows an attacker to gain elevated access privilege on their computer. In some cases, exploiting a vulnerability can be achieved by causing an error such as [[buffer overflow]]. If successful, the shellcode enables access to the machine via the elevated privileges granted to the targeted process.&lt;br /&gt;
&lt;br /&gt;
; Remote&lt;br /&gt;
A remote shellcode attack targets a process running on a remote machine {{endash}} on the same [[local area network]], [[intranet]], or on the [[internet]]. If successful, the shellcode provides access to the target machine across the network. The shellcode normally opens a [[Internet protocol suite| TCP/IP]] [[Stream socket| socket]] connection to allow access to a shell on the target machine. &lt;br /&gt;
&lt;br /&gt;
A remote shellcode attack can be categorized by its behavior. If the shellcode establishes the connection it is called a &amp;#039;&amp;#039;reverse shell&amp;#039;&amp;#039;, or a &amp;#039;&amp;#039;connect-back&amp;#039;&amp;#039; shellcode. On the other hand, if the attacker establishes the connection, the shellcode is called a &amp;#039;&amp;#039;bindshell&amp;#039;&amp;#039; because the shellcode &amp;#039;&amp;#039;binds&amp;#039;&amp;#039; to a certain port on the victim&amp;#039;s machine. A &amp;#039;&amp;#039;bindshell random port&amp;#039;&amp;#039; skips the binding part and listens on a random port.{{efn|The &amp;#039;&amp;#039;[https://github.com/geyslan/SLAE/blob/master/improvements/tiny_shell_bind_tcp_random_port_x86_64.asm bindshell random port]&amp;#039;&amp;#039; is the smallest stable bindshell shellcode for [[X86-64|x86_64]] available to date.}} A &amp;#039;&amp;#039;socket-reuse&amp;#039;&amp;#039; shellcode is an exploit that establishes a connection to the vulnerable process that is not closed before the shellcode runs so that the shellcode can re-use the connection to allow remote access. Socket re-using shellcode is more elaborate, since the shellcode needs to find out which connection to re-use and the machine may have many open connections.&amp;lt;ref&amp;gt;{{cite web |url=http://www.blackhatlibrary.net/Shellcode/Socket-reuse |title=Shellcode/Socket-reuse |author=BHA |date=2013-06-06 |access-date=2013-06-07}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A [[Firewall (computer)|firewall]] can detect outgoing connections made by connect-back shellcode as well as incoming connections made by bindshells, and therefore, offers some protection against an attack. Even if the system is vulnerable, a firewall can prevent the attacker from connecting to the shell created by the shellcode. One reason why socket re-using shellcode is used is that it does not create new connections and, therefore, is harder to detect and block.&lt;br /&gt;
&lt;br /&gt;
; Download and execute&lt;br /&gt;
A download and execute shellcode attack [[downloads]] and [[Execution (computers)|executes]] [[malware]] on the target system. This type of shellcode does not spawn a shell, but rather instructs the machine to download a certain executable file from the network and execute it. Nowadays, it is commonly used in [[drive-by download]] attacks, where a victim visits a malicious webpage that in turn attempts to run such a download and execute shellcode in order to install software on the victim&amp;#039;s machine. &lt;br /&gt;
&lt;br /&gt;
A variation of this attack downloads and [[Dynamic loading| loads]] a [[Library (computing)|library]].&amp;lt;ref&amp;gt;{{cite web |url=http://skypher.com/index.php/2010/01/11/download-and-loadlibrary-shellcode-released/ |title=Download and LoadLibrary shellcode released |author=SkyLined |date=2010-01-11 |access-date=2010-01-19 |url-status=dead |archive-url=https://web.archive.org/web/20100123014637/http://skypher.com/index.php/2010/01/11/download-and-loadlibrary-shellcode-released/ |archive-date=2010-01-23}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |url=http://code.google.com/p/w32-dl-loadlib-shellcode/ |title=Download and LoadLibrary shellcode for x86 Windows |date=2010-01-11 |access-date=2010-01-19}}&amp;lt;/ref&amp;gt; Advantages of this technique are that the code can be smaller, that it does not require the shellcode to spawn a new process on the target system, and that the shellcode does not need code to clean up the targeted process as this can be done by the library loaded into the process.&lt;br /&gt;
&lt;br /&gt;
; Staged&lt;br /&gt;
When the amount of data that an attacker can inject into the target process is too limited to achieve the desired effect, it may be possible to deploy shellcode in stages that progressively provide more access. The first stage might do nothing more than download the second stage than then provides the desired access.&lt;br /&gt;
&lt;br /&gt;
; Egg-hunt&lt;br /&gt;
An egg-hunt shellcode attack is a staged attack in which the attacker can inject shellcode into a process but does not know where in the process it is. A second-stage shellcode, generally smaller than the first, is injected into the process to search the process&amp;#039;s address space for the first shellcode (the &amp;#039;&amp;#039;egg&amp;#039;&amp;#039;) and executes it.&amp;lt;ref&amp;gt;{{cite web |url=http://www.hick.org/code/skape/papers/egghunt-shellcode.pdf &lt;br /&gt;
|title=Safely Searching Process Virtual Address Space &lt;br /&gt;
|author=Skape |publisher=nologin |date=2004-03-09 |access-date=2009-03-19}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Omelet&lt;br /&gt;
An omelet shellcode attack, similar to egg-hunt, looks for multiple small blocks of data (&amp;#039;&amp;#039;eggs&amp;#039;&amp;#039;) and combines them into a larger block (&amp;#039;&amp;#039;omelet&amp;#039;&amp;#039;) that is then executed. This is used when an attacker is limited on the size of injected code but can inject multiple.&amp;lt;ref&amp;gt;{{cite web |url=http://skypher.com/wiki/index.php?title=Shellcode/w32_SEH_omelet_shellcode |title=w32 SEH omelet shellcode |author=SkyLined |publisher=Skypher.com |date=2009-03-16 |access-date=2009-03-19 |url-status=dead |archive-url=https://web.archive.org/web/20090323030636/http://skypher.com/wiki/index.php?title=Shellcode%2Fw32_SEH_omelet_shellcode |archive-date=2009-03-23}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Encoding==&lt;br /&gt;
Shellcode is often written in order to work around the restrictions on the data that a process will allow. General techniques include:&lt;br /&gt;
&lt;br /&gt;
; Optimize for size&lt;br /&gt;
Optimize the code to decrease its size.&lt;br /&gt;
&lt;br /&gt;
; Self-modifying code&lt;br /&gt;
[[Self-modifying code |Modify its own code]] before executing it to use byte values that are otherwise restricted.&lt;br /&gt;
&lt;br /&gt;
; Encryption&lt;br /&gt;
To avoid [[intrusion detection]], encode as self-decrypting or [[polymorphic code |polymorphic]].&lt;br /&gt;
&lt;br /&gt;
; Character encoding&lt;br /&gt;
An attack that targets a browser might obfuscate shellcode in a [[JavaScript]] string using an expanded character encoding.&amp;lt;ref&amp;gt;{{cite web |url=http://www.iss.net/security_center/reference/vuln/JavaScript_Large_Unescape.htm |title=JavaScript large number of unescape patterns detected |archive-url=https://web.archive.org/web/20150403203325/http://www.iss.net/security_center/reference/vuln/JavaScript_Large_Unescape.htm |archive-date=2015-04-03 |url-status=dead}}&amp;lt;/ref&amp;gt; For example, on the [[IA-32]] architecture, here&amp;#039;s two unencoded no-operation instructions (used in a [[NOP slide]]):&lt;br /&gt;
&lt;br /&gt;
 90             NOP&lt;br /&gt;
 90             NOP&lt;br /&gt;
&lt;br /&gt;
As encoded:&lt;br /&gt;
* [[percent-encoding |Percent encoded]]: {{code|unescape(&amp;quot;%u9090&amp;quot;)}}&lt;br /&gt;
* [[Unicode]] literal: {{code|\u9090}}&lt;br /&gt;
* [[Character encodings in HTML|HTML/XML character reference]] : {{code|&amp;amp;#x9090;}} or {{code|&amp;amp;#37008;}}&lt;br /&gt;
&lt;br /&gt;
; Null-free&lt;br /&gt;
Shellcode must be written without zero-value bytes when it is intended to be injected into a [[null-terminated string]] that is copied in the target process via the usual algorithm (i.e. [[strcpy]]) of ending the copy at the first zero byte {{endash}} called the [[null character]] in common [[character set]]s. If the shellcode contained a null, the copy would be truncated and not function properly. To produce null-free code from code that contains nulls, one can replace machine instructions that contain zeroes with instructions that don&amp;#039;t. For example, on the [[IA-32]] architecture the instruction to set register EAX to 1 contains zeroes as part of the literal (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; expands to &amp;lt;code&amp;gt;0x00000001&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 B8 01000000    [[MOV (x86 instruction)|MOV]] EAX,1&lt;br /&gt;
&lt;br /&gt;
The following instructions accomplish the same goal (EAX containing 1) without embedded zero bytes by first setting EAX to 0, then incrementing EAX to 1:&lt;br /&gt;
&lt;br /&gt;
 33C0           [[XOR (x86 instruction)|XOR]] EAX,EAX&lt;br /&gt;
 40             [[INC (x86 instruction)|INC]] EAX&lt;br /&gt;
&lt;br /&gt;
; {{anchor|Alphanumeric|Multi-architecture}}Text&lt;br /&gt;
An alphanumeric shellcode consists of only [[alphanumeric]] characters (0–9, A–Z and a–z).&amp;lt;ref name=&amp;quot;Rix_2001&amp;quot;&amp;gt;{{cite journal |title=Writing ia32 alphanumeric shellcodes |author=rix |volume=0x0b |issue=57 |id=#0x0f of 0x12 |journal=Phrack |publisher=Phrack Inc. |date=2001-08-11 |url=http://www.phrack.org/issues/57/15 |access-date=2022-05-26 |url-status=live |archive-url=https://web.archive.org/web/20220308045645/http://phrack.org/issues/57/15.html#article |archive-date=2022-03-08}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Obscou_2003&amp;quot;&amp;gt;{{cite journal |title=Building IA32 &amp;#039;Unicode-Proof&amp;#039; Shellcodes |author=obscou |date=2003-08-13 |volume=11 |issue=61 |id=#0x0b of 0x0f |journal=Phrack |publisher=Phrack Inc. |url=http://www.phrack.org/issues/61/11 |access-date=2008-02-29 |url-status=live |archive-url=https://web.archive.org/web/20220526165740/http://phrack.org/issues/61/11.html#article |archive-date=2022-05-26}}&amp;lt;/ref&amp;gt; This type of encoding was created by [[Hacker (computer security)|hacker]]s to obfuscate machine code inside what appears to be [[plain text]]. This can be useful to avoid detection of the code; to allow the code to pass through filters that scrub non-alphanumeric characters from strings.{{efn |in part, such filters were a response to non-alphanumeric shellcode exploits}}. A similar type of encoding is called &amp;#039;&amp;#039;printable code&amp;#039;&amp;#039; and uses all [[control character|printable]] characters (alphanumeric plus symbols like !@#%^&amp;amp;*). A similarly restricted variant is &amp;#039;&amp;#039;ECHOable code&amp;#039;&amp;#039; not containing any characters which are not accepted by the [[ECHO (command)|ECHO]] command. It has been shown that it is possible to create shellcode that looks like normal text in English.&amp;lt;ref name=&amp;quot;Mason-Small-Monrose-MacManus_2009&amp;quot;&amp;gt;{{cite conference |title=English Shellcode |author-first1=Joshua |author-last1=Mason |author-first2=Sam |author-last2=Small |author-first3=Fabian |author-last3=Monrose |author-first4=Greg |author-last4=MacManus |date=November 2009 |conference=Proceedings of the 16th ACM conference on Computer and Communications Security |location=New York, NY, USA |pages=524–533 |url=http://www.cs.jhu.edu/~sam/ccs243-mason.pdf |access-date=2010-01-10 |url-status=live |archive-url=https://web.archive.org/web/20220526164459/https://www.cs.jhu.edu/~sam/ccs243-mason.pdf |archive-date=2022-05-26}} (10 pages)&amp;lt;/ref&amp;gt;&lt;br /&gt;
Writing such shellcode requires in-depth understanding of the [[instruction set architecture]] of the target machines. It has been demonstrated that it is possible to write alphanumeric code that is executable on more than one machine,&amp;lt;ref&amp;gt;{{cite web |title=Multi-architecture (x86) and 64-bit alphanumeric shellcode explained |publisher=Blackhat Academy |url=http://www.blackhatlibrary.net/Alphanumeric_shellcode |url-status=dead |archive-url=https://web.archive.org/web/20120621124443/http://www.blackhatlibrary.net/Alphanumeric_shellcode |archive-date=2012-06-21}}&amp;lt;/ref&amp;gt; thereby constituting [[multi-architecture executable]] code.&lt;br /&gt;
&lt;br /&gt;
A work-around was published by Rix in [[Phrack]] 57&amp;lt;ref name=&amp;quot;Rix_2001&amp;quot;/&amp;gt; in which he shows that it is possible to turn any code into alphanumeric code. Often, self-modifying code is leveraged because it allows the code to have byte values that otherwise are not allowed by replacing coded values at runtime. A self-modifying decoder can be created that initially uses only allowed bytes. The main code of the shellcode is encoded, also only using bytes in the allowed range. When the output shellcode is run, the decoder modifies its code to use instructions it requires and then decodes the original shellcode. After decoding the shellcode, the decoder transfers control to it. It has been shown that it is possible to create arbitrarily complex shellcode that looks like normal English text.&amp;lt;ref name=&amp;quot;Mason-Small-Monrose-MacManus_2009&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modern software uses [[Unicode]] to support [[Internationalization and localization]]. Often, input [[ASCII]] text is converted to Unicode before processing. When an ASCII ([[Latin-1]] in general) character is transformed to UTF-16 (16-bit Unicode), a zero byte is inserted after each byte (character) of the original text. Obscou proved in [[Phrack]] 61&amp;lt;ref name=&amp;quot;Obscou_2003&amp;quot;/&amp;gt; that it is possible to write shellcode that can run successfully after this transformation. Programs that can automatically encode any shellcode into alphanumeric UTF-16-proof shellcode exist, based on the same principle of a small self-modifying decoder that decodes the original shellcode.&lt;br /&gt;
&lt;br /&gt;
==Compatibility==&lt;br /&gt;
Generally, shellcode is deployed as machine code since it affords relatively unprotected access to the target process. Since machine code is compatible within a relatively narrow computing context ([[Central processing unit |processor]], [[operating system]] and so on), a shellcode fragment has limited [[compatibility (computing)|compatibility]]. Also, since a shellcode attack tends to work best when the code is small and targeting multiple exploits increases the size, typically the code targets only one exploit. None the less, a single shellcode fragment can work for multiple contexts &lt;br /&gt;
and exploits.&amp;lt;ref name=&amp;quot;Eugene_2001&amp;quot;&amp;gt;{{cite web |title=Architecture Spanning Shellcode |author=eugene |publisher=Phrack Inc. |work=Phrack |date=2001-08-11 |volume=0x0b |issue=57 |id=#0x0e of 0x12 |url=http://www.phrack.org/issues/57/14 |access-date=2008-02-29 |url-status=live |archive-url=https://web.archive.org/web/20211109173710/http://phrack.org/issues/57/14.html#article |archive-date=2021-11-09}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Nemo_2005&amp;quot;&amp;gt;{{cite web |title=OSX - Multi arch shellcode. |author=nemo |work=[[Full disclosure (mailing list)|Full disclosure]] |date=2005-11-13 |url=https://seclists.org/fulldisclosure/2005/Nov/387 |access-date=2022-05-26 |url-status=live |archive-url=https://web.archive.org/web/20220526191616/https://seclists.org/fulldisclosure/2005/Nov/387 |archive-date=2022-05-26}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Cha-Pak-Brumley-Lipton_2010&amp;quot;&amp;gt;{{cite conference |title=Platform-Independent Programs |author-first1=Sang Kil |author-last1=Cha |author-first2=Brian |author-last2=Pak |author-first3=David |author-last3=Brumley |author-link3=David Brumley |author-first4=Richard Jay |author-last4=Lipton |author-link4=Richard Jay Lipton |conference=Proceedings of the 17th ACM conference on Computer and Communications Security (CCS&amp;#039;10) |location=Chicago, Illinois, USA |date=2010-10-08 |orig-date=2010-10-04 |publisher=[[Carnegie Mellon University]], Pittsburgh, Pennsylvania, USA / [[Georgia Institute of Technology]], Atlanta, Georgia, USA |isbn=978-1-4503-0244-9 |doi=10.1145/1866307.1866369 |pages=547–558 |url=https://softsec.kaist.ac.kr/~sangkilc/papers/cha-ccs10.pdf |access-date=2022-05-26 |url-status=live |archive-url=https://web.archive.org/web/20220526153147/https://softsec.kaist.ac.kr/~sangkilc/papers/cha-ccs10.pdf |archive-date=2022-05-26}} [https://web.archive.org/web/20220526182333/http://users.ece.cmu.edu/~sangkilc/papers/ccs10-cha.pdf] (12 pages) (See also: [https://security.ece.cmu.edu/pip/index.html])&amp;lt;/ref&amp;gt; Versatility can be achieved by creating a single fragment that contains an implementation for multiple contexts. Common code branches to the implementation for the runtime context.&lt;br /&gt;
&lt;br /&gt;
==Analysis==&lt;br /&gt;
As shellcode is generally not executable on its own, in order to study what it does, it is typically loaded into a special process. A common technique is to write a small [[C (programming language)|C]] program that contains the shellcode as data (i.e. in a byte buffer), and transfers control to the instructions encoded in the data [[function pointer]] or inline [[assembly code]]). Another technique is to use an online tool, such as {{mono|shellcode_2_exe}}, to embed the shellcode into a pre-made executable husk which can then be analyzed in a standard debugger. Specialized shellcode analysis tools also exist, such as the iDefense sclog project (originally released in 2005 in the Malcode Analyst Pack). Sclog is designed to load external shellcode files and execute them within an API logging framework. Emulation-based shellcode analysis tools also exist such as the {{Mono|sctest}} application which is part of the cross-platform libemu package. Another emulation-based shellcode analysis tool, built around the libemu library, is {{Mono|scdbg}} which includes a basic debug shell and integrated reporting features.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* {{Annotated link| Computer security}}&lt;br /&gt;
* {{Annotated link| Heap overflow}}&lt;br /&gt;
* {{Annotated link| Metasploit Project}}&lt;br /&gt;
* {{Annotated link| Shell shoveling}}&lt;br /&gt;
* {{Annotated link| Stack buffer overflow}}&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{notelist}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://www.shell-storm.org/shellcode/ Shell-Storm] Database of shellcodes Multi-Platform.&lt;br /&gt;
* [http://www.phrack.org/issues/49/14 An introduction to buffer overflows and shellcode]&lt;br /&gt;
* [https://web.archive.org/web/20050528022508/http://www.infosecwriters.com/text_resources/pdf/basics_of_shellcoding.pdf The Basics of Shellcoding (PDF)] An overview of x86 shellcoding by Angelo Rosiello&lt;br /&gt;
&amp;lt;!-- * {{cite web |last1=Rosiello |first1=Angelo |title=The Basics of Shellcoding (An overview of x86 shellcoding) |url=http://www.infosecwriters.com/text_resources/pdf/basics_of_shellcoding.pdf |access-date=9 October 2025 |archive-url=https://web.archive.org/web/20050528022508/http://www.infosecwriters.com/text_resources/pdf/basics_of_shellcoding.pdf |archive-date=2005-05-28 |date=9 February 2004 |url-status=dead}} --&amp;gt;&lt;br /&gt;
* [https://web.archive.org/web/20120109070051/http://goodfellas.shellcode.com.ar/docz/bof/Writing_shellcode.html An introduction to shellcode development]&lt;br /&gt;
* [https://web.archive.org/web/20080302111910/http://www.metasploit.com/shellcode/ Contains x86 and non-x86 shellcode samples and an online interface for automatic shellcode generation and encoding, from the Metasploit Project]&lt;br /&gt;
* [https://web.archive.org/web/20060619025456/http://www.linux-secure.com/endymion/shellcodes/ a shellcode archive, sorted by Operating system].&lt;br /&gt;
* [https://web.archive.org/web/20061112203748/http://www.milw0rm.com/papers/11 Microsoft Windows and Linux shellcode design tutorial going from basic to advanced].&lt;br /&gt;
* [http://www.vividmachines.com/shellcode/shellcode.html Windows and Linux shellcode tutorial containing step by step examples].&lt;br /&gt;
* {{usurped|1=[https://web.archive.org/web/20210322094322/http://www.enderunix.org/docs/en/sc-en.txt Designing shellcode demystified]}}&lt;br /&gt;
* [http://code.google.com/p/alpha3/ ALPHA3] A shellcode encoder that can turn any shellcode into both Unicode and ASCII, uppercase and mixedcase, alphanumeric shellcode.&lt;br /&gt;
* [https://web.archive.org/web/20061115040739/http://www.ngssoftware.com/research/papers/WritingSmallShellcode.pdf Writing Small shellcode by Dafydd Stuttard] A whitepaper explaining how to make shellcode as small as possible by optimizing both the design and implementation.&lt;br /&gt;
* [http://skypher.com/wiki/index.php?title=Www.edup.tudelft.nl/~bjwever/whitepaper_shellcode.html.php Writing IA32 Restricted Instruction Set Shellcode Decoder Loops by SkyLined] {{Webarchive|url=https://web.archive.org/web/20150403114315/http://skypher.com/wiki/index.php?title=Www.edup.tudelft.nl%2F~bjwever%2Fwhitepaper_shellcode.html.php |date=2015-04-03}} A whitepaper explaining how to create shellcode when the bytes allowed in the shellcode are very restricted.&lt;br /&gt;
* [http://code.google.com/p/beta3/ BETA3] A tool that can encode and decode shellcode using a variety of encodings commonly used in exploits.&lt;br /&gt;
* [http://sandsprite.com/shellcode_2_exe.php Shellcode 2 Exe] - Online converter to embed shellcode in exe husk&lt;br /&gt;
* [https://github.com/dzzie/sclog Sclog] - Updated build of the iDefense sclog shellcode analysis tool (Windows)&lt;br /&gt;
* [https://archive.today/20130219020328/http://libemu.carnivore.it/ Libemu] - emulation based shellcode analysis library (*nix/Cygwin)&lt;br /&gt;
* [http://sandsprite.com/blogs/index.php?uid=7&amp;amp;pid=152 Scdbg] - shellcode debugger built around libemu emulation library (*nix/Windows)&lt;br /&gt;
&lt;br /&gt;
{{Information security}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Injection exploits]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Fabrickator</name></author>
	</entry>
</feed>