博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通用ShellCode学习笔记 2003/XP/Win7/Vista/Win8 通用
阅读量:5863 次
发布时间:2019-06-19

本文共 2020 字,大约阅读时间需要 6 分钟。

hot3.png

一、ShellCode的编写

  1. Kernel32地址的获取

由于win7的_PEB_LDR_DATA表和以前的系统有了改变,直接查询0x08方式在win7下失效,为了保证shellcode的通用性(主要是增加对win7的支持),采用遍历查询的方式定位kernel32的位置

esi=fs:0->TEB

esi=TEB:30h->PEB

esi=PEB:0ch->_PEB_LDR_DATA

esi=_PEB_LDR_DATA:1ch->内存中的dll的地址

[esi]-> 内存中的下一个dll的地址(00h指向下一个Ldr_Module)

[esi+08h]->esi指向的地方的下一个dll的地址

edi->esi指向的地址的尾部

示意图:

 

 

 

我们需要找的kernel32.dll长度为12,用od跟踪发现kernel32.dll的函数名在内存中为“kernel32.dll”,即是说,我们查找到某个函数第24(12×2)的位置为空(字符串结尾),即是我们要找的kernel32.dll

复制代码

    push ebp             xor ecx,ecx             mov esi,fs:0x30             mov esi, [esi + 0x0C];             mov esi, [esi + 0x1C]; next_module:             mov ebp, [esi + 0x08];             mov edi, [esi + 0x20];             mov esi, [esi];             cmp [edi + 12*2],cl               jne next_module             mov edi,ebp;BaseAddr of Kernel32.dll

复制代码

  1. GetProcAddress地址的获取

有了kernel32的地址以后,我们就可以方便的通过遍历的方式查询到GetProcAddress的地址

复制代码

sub esp,100            mov ebp,esp;            mov eax,[edi+3ch];pe header            mov edx,[edi+eax+78h]            add edx,edi            mov ecx,[edx+18h];number of functions            mov ebx,[edx+20h]            add ebx,edi;AddressOfName search:            dec ecx            mov esi,[ebx+ecx*4]            add esi,edi;            mov eax,0x50746547;PteG("GetP")            cmp [esi],eax            jne search            mov eax,0x41636f72;Acor("rocA")            cmp [esi+4],eax            jne search            mov ebx,[edx+24h]            add ebx,edi;indexaddress            mov cx,[ebx+ecx*2]            mov ebx,[edx+1ch]            add ebx,edi            mov eax,[ebx+ecx*4]            add eax,edi            mov [ebp+76],eax;将GetProcAddress地址存在ebp+76中

复制代码

  1. LoadLibraryA地址的获取

通过调用API函数GetProcAddress获取LoadLibraryA的地址

 

复制代码

  push 0;            push DWORD PTR0x41797261;Ayra("aryA")            push DWORD PTR0x7262694c;rbiL("Libr")            push DWORD PTR0x64616f4c;daoL("Load")            push esp            push edi            call [ebp+76]            mov[ebp+80],eax;将LoadLibraryA地址存在ebp+80中

复制代码

转载于:https://my.oschina.net/u/1777508/blog/624738

你可能感兴趣的文章
计算机软考证书英文名称完全翻译指南
查看>>
[LeetCode] Spiral Matrix II
查看>>
个人网站设计:25个国外优秀案例带给你灵感
查看>>
pthread 学习系列 case2-- pthread_mutex_t
查看>>
事务处理笔记《二》.Net框架下的事务处理技术
查看>>
c# 更新,新增web.cinfig节点
查看>>
内核printk打印等级
查看>>
DCMTK开源库的学习笔记4:利用ini配置文件对dcm影像进行归档
查看>>
Making Your ActionBar Not Boring
查看>>
iOS:详解MJRefresh刷新加载更多数据的第三方库
查看>>
window系统上用PHP获取本地物理IP代码
查看>>
JavaScript - 倒计时
查看>>
springmvc与struts2的主要区别
查看>>
原型模式
查看>>
Consumer group理解深入
查看>>
Android笔记之 网络http通信
查看>>
FancyTree 状态保持
查看>>
javaScript操作符
查看>>
UILabel模糊查找符合的字符串并且高亮
查看>>
用 Electron 和 React 撸了个功能超全 + 颜值极高的音乐客户端
查看>>