shellcode就是汇编的opcode,一般以子函数形式出现:

取得shellcode的方便方式是:

1.写一个函数如:

void __stdcall code(LONG &a,
LONG &b,
DWORD &c,
LONG &d,
DWORD &e)

取得它的汇编码:如:

 push    ebp
mov ebp,esp
sub esp,14h
push ebx
push esi
push edi
mov dword ptr [ebp-4],0FFFFFFFFh
mov dword ptr [ebp-0Ch],0
mov dword ptr [ebp-8],0
mov dword ptr [ebp-14h],0
mov dword ptr [ebp-10h],0
pushad
mov eax,22E4CCh
int 0FFh
mov dword ptr [ebp-4],eax
mov dword ptr [ebp-0Ch],ecx
mov dword ptr [ebp-14h],edx
mov dword ptr [ebp-8],esi
mov dword ptr [ebp-10h],edi
popad
mov eax,dword ptr [ebp+8]
mov ecx,dword ptr [ebp-4]
mov dword ptr [eax],ecx
mov edx,dword ptr [ebp+0Ch]
mov eax,dword ptr [ebp-0Ch]
mov dword ptr [edx],eax
mov ecx,dword ptr [ebp+10h]
mov edx,dword ptr [ebp-14h]
mov dword ptr [ecx],edx
mov eax,dword ptr [ebp+14h]
mov ecx,dword ptr [ebp-8]
mov dword ptr [eax],ecx
mov edx,dword ptr [ebp+18h]
mov eax,dword ptr [ebp-10h]
mov dword ptr [edx],eax
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
ret 14h

转换成机器码:

unsigned char *asm_code()
{
__asm
{
lea eax,__code
jmp __ret
} // shellcode
__asm
{
__code://要加的汇编
//TODO
}
__asm nop//标志位,一般是int 3,即0xcc
__asm {__ret:}
}
int main()
{
unsigned char temp;
int i=1;
unsigned char* asm_p = asm_code();
FILE *fd = fopen("code.txt","w");
fprintf(fd,"unsigned char shellcode[] = \"");
while((temp = *asm_p) != 0x90)//标志位,一般是int 3,即0xcc
{
fprintf(fd,"\\x%.2x",temp);
asm_p ++;
if(i % 8 == 0) fprintf(fd,"\"\n\"");
i ++;
}
fprintf(fd,"\";");
fclose(fd);

运行得到shellcode[]数组在code.txt中,取出

调用方式一般采用:

#define  QSHELLCODE {0x55, 0x8b, 0xec, 0xcd, 0xff, 0x5d, 0xc3}
#define SHELLCODE_SIZE 0x7
	PVOID  m_pShellCode = VirtualAlloc(NULL, SHELLCODE_SIZE, MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
if (m_pShellCode)
{
byte ptr_shellcode[] = QSHELLCODE;
memcpy(m_pShellCode, ptr_shellcode,SHELLCODE_SIZE);
}

最后调用有两种方式,一种是:

pfn_Q pfn = (pfn_Q)m_ShellCode;
pfn(填参数);//函数直接调

另一种是汇编:

	lea ecx, pfn
mov ecx, [ecx]
call ecx

当然,有参数就先push参数

shellcode流程的更多相关文章

  1. Shellcode编程小技巧

    工作需要,需要注入其他程序监控一些东西,检测到的数据通过WM_COPY 消息发送给显示窗体.(大体是这样的还没定稿) ##1 选择一个框架 ## tombkeeper/Shellcode_Templa ...

  2. 《ODAY安全:软件漏洞分析技术》学习心得-----shellcode的一点小小的思考

    I will Make Impossible To I'm possible -----------LittleHann 看了2个多星期.终于把0DAY这本书给看完了,自己动手将书上的实验一个一个实现 ...

  3. D3D游戏降帧的动态创建D3D设备以及ShellCode HOOK玩法

    欢迎转载,转载请注明出处:http://blog.csdn.net/gnorth/article/details/9327971 说白了,也就是HOOK掉Present,这种代码,其实百度上某些地方有 ...

  4. 三、后门的编写和 ShellCode 的提取

    第三章.后门的编写和 ShellCode 的提取 (一)IP 和 Socket 编程初步 NOTES: 1.Windows 下网络通信编程的几种方式 第一种是基于 NetBIOS 的网络编程,这种方法 ...

  5. 二、Windows 下 ShellCode 编写初步

    第二章.Windows 下 ShellCode 编写初步 (一)shellcode 定义:最先的 Shell 指的是人机交互界面,ShellCode 是一组能完成我们想要的功能的机器代码,通常以十六进 ...

  6. 使用MSF生成shellcode

    使用MSF生成shellcode payload和shellcode的区别 Payload是是包含在你用于一次漏洞利用(exploit)中的ShellCode中的主要功能代码.因为Payload是包含 ...

  7. Linux pwn入门教程(2)——shellcode的使用,原理与变形

    作者:Tangerine@SAINTSEC 0×00 shellcode的使用 在上一篇文章中我们学习了怎么使用栈溢出劫持程序的执行流程.为了减少难度,演示和作业题程序里都带有很明显的后门.然而在现实 ...

  8. 3.2 定位shellcode

    前言 此帖为 0day_2th 一书第三章实践不完全记录. 流程记录 searchAddr.c 文件: #include <windows.h> #include <stdio.h& ...

  9. 栈溢出原理与 shellcode 开发

     ESP:该指针永远指向系统栈最上面一个栈帧的栈顶  EBP:该指针永远指向系统栈最上面一个栈帧的底部 01  修改函数返回地址 #include<stdio.h> #include< ...

随机推荐

  1. 自定义EditText实现可以一键删除输入的内容

    public class MyEditText extends EditText { private Drawable dRight; private Rect rRounds; public MyE ...

  2. Android-->猜拳小游戏

    --> 简单的 页面跳转 和 点击事件 的实现... --> AndroidManifest.xml <?xml version="1.0" encoding=& ...

  3. Java:String和Date、Timestamp之间的转换

    一.String与Date(java.util.Date)互转 1.1 String -> Date String dateStr = "2016-9-28 12:25:55" ...

  4. 【 D3.js 入门系列 --- 2.1 】 关于如何选择,插入,删除元素

    在D3.js中,选择元素的函数有两个:select 和 selectAll . 先说明一下它们的区别: select 是选择所有指定元素的第一个 selectAll 是选择指定元素的全部(以用于后面同 ...

  5. readonly背景色(css)

    input{ background-color:expression(this.readOnly==true?"#EEEEEE":"#FFFFFF"); } i ...

  6. 如何取Android设备日志

    安装Android SDK 运行 adb 命令 adb devices 查看链接的设备 adb logcat 日志相关

  7. Struts2 Action中的方法命名不要以get开头

    偶然发现,在调用一个action中的某个方法时,会自动调用另一个无关的方法,找了好久,最后发现是方法命名的问题,方法命名以get开头,action会自动调用!所以,以后再写action中的方法时尽量不 ...

  8. Nginx 负载均衡学习

    nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至 tomcat服务器. nginx负载均衡服务器 tomcat1服务器 tomcat2服务器 1.1   ...

  9. mac idea 设置

    鼠标悬停显示文档注释:preferences->Editor->General:勾选 show quick documentation on mouse move 智能提示模糊搜索:pre ...

  10. jQuery使用load方法加载其他文档内容

    A文档载入B文档的内容,并且通过JQ操作被引入到A文档中的元素 A文档 (index.html): <!DOCTYPE html> <html lang="en" ...