标签:lib loaded lsp 问题 shell rar mic call shel
上一次我们写的shellcode通过栈来看是这样的
唯一的问题就是这里的返回地址是写死了的,因为栈内存的地址是经常改变的
在我们的shellcode指令前有一个ret指令
在汇编中执行ret的指令时,需要进行两步操作
(ip)=((ss)*16+(sp))
(sp)=(sp+2)
意思就是把当前栈的东西送给ip,然后再栈顶指针下移,相当于就是pop ip
具体可以查看这个博客
https://www.cnblogs.com/Sna1lGo/p/14269367.html
也就是说我们的首地址其实在esp往下偏移一点的地址里面,所以可以添加修改
也就是说其实我们可以把这个返回地址变成一个jmp esp的地址,然后返回到jmp esp后,又会跳转到我们写的shellcode里面,因为这里的esp是我们的首地址
jmp esp的地址呢,又可以直接在xdbg里面随便选一个进程里面查看一个jmp esp的地址,因为Windows是有很多固定的操作的,所以尽量选一个7开头的地址来处理
然后就OK了
#include<Windows.h>
#include<iostream>
using namespace std;
DWORD a;
void _declspec(naked) shellcode()
{
__asm
{
push ebp
mov ebp, esp
sub esp, 0x30
// S n a 1 l G o
// 53 6E 61 31 6C 47 6F
push 0x006F476C;
push 0x31616E53;
mov eax,esp
push 0;
push 0;
push eax;
push 0;
mov eax, 0x75481930;
call eax;
add esp, 0x30;
pop ebp;
mov eax, 0x004013CA;
jmp eax;
}
}
?
int main1()
{
HMODULE hModule = LoadLibraryA("user32.dll");
cout << "hello" << endl;
shellcode();
return 0;
}
标签:lib loaded lsp 问题 shell rar mic call shel
原文地址:https://www.cnblogs.com/Sna1lGo/p/14586544.html