对于大部分想要利用缓冲区溢出的人来说,jmp esp就再熟悉不过了,我最近发现网上将如何如何利用它的人太多太多,可是就是没人告诉在shellcode 中到底jmp esp的地址在哪,有些直接给除了它的地址可是由于jmp esp随系统的不同地址也不同,有可能别人能用,你拷下就没办法,于是,我便贴出下面一个实用程序,方便大家,而且值得一提的是如果将程序稍加修改,便可以查找任何机器码所对应汇编代码的地址。注意,文中以ntdll.dll里查找,有可能在ntdll.dll中找不到ffe4(jmp esp的机器码),你可以尝试其他dll,最好是常驻内存的,至于为啥,呵呵,想必大家都知道吧。
#include<windows.h>
#include<iostream.h>#include<tchar.h>
int main()
{
int nRetCode=0;
bool we_load_it=false;
HINSTANCE h;
TCHAR dllname[]=_T("ntdll");
h=GetModuleHandle(dllname);
if(h==NULL){h=LoadLibrary(dllname);
if(h==NULL){cout<<"ERROR LOADING DLL:"<<dllname<<endl;
return 1;
}
we_load_it=true;
}
BYTE* ptr=(BYTE*)h;
bool done=false;
for(int y=0;!done;y++)
{try
{
if(ptr[y]==0xFF&&ptr[y+1]==0xE4)
{int pos=(int)ptr+y;
cout<<"OPCODE found at 0x"<<hex<<pos<<endl;}}
catch(...)
{
cout<<"END OF"<<dllname<<"MEMORY REACHED"<<endl;
done=true;
}
}
if(we_load_it)
FreeLibrary(h);
return nRetCode;}