初探shellcode~
0.构造要写入的代码:
 例:MessageBox:
				  (push 00)*4 = 6a00
				  call MessageBox(通过要跳转的地址-E8这行指令的地址-5):
					    相对跳转
					    E8 xx xx xx xx
				  jmp 回到正常的执行流程:
					    同上也是相对跳转
					    E9 xx xx xx xx
				  硬编码:
					    6a00 
					    6a00 
					    6a00 
					    6a00 
					    e800000000
					    e900000000
					  一共18个bytes
			1.在PE的空白区构造一段代码:
				通常写在哪儿都行
				目前的跳转目标是在自己的机器上能运行
				所以直接查MessageBox在user32.dll中的地址
					  M地址-在内存中的地址(ImageBase+偏移)-5
				找扩展pe头中的AddressOfEntryPoint,计算怎么跳回去,计算方法跟上面差不多。
			2.修改入口地址为新增代码:
				  修改AddressOfEntryPoint指向shellcode
			3.新增代码执行后跳回入口地址
如果出现问题,可以用调试器检查哪里出错了。
原文:https://www.cnblogs.com/Mz1-rc/p/14124352.html