我用aheadlib生成了劫持ws2_32.dll的结构我想获取send函数的参数buf,该如何是好? 请各位帮帮忙,100分送上,谢谢其他的地方我就略了,就把有关send的地方贴出来.
#pragma comment(linker, "/EXPORT:send=_AheadLib_send,@19")////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_send(void)
{
GetAddress("send");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////新函数里面的参数是void,并不跟原函数一样,我不明白,也不知道如何把buf取出来,苦恼了我一个多星期了,想不通,特来向各位请教,麻烦大家了!
#pragma comment(linker, "/EXPORT:send=_AheadLib_send,@19")////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_send(void)
{
GetAddress("send");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////新函数里面的参数是void,并不跟原函数一样,我不明白,也不知道如何把buf取出来,苦恼了我一个多星期了,想不通,特来向各位请教,麻烦大家了!
那个<<神奇的马甲dll>>里用的是lpk
{
SOCKET s;
char* buf;
int len;
int flags;
__asm
{
MOV EAX,[ESP + 4h]
MOV s,EAX
MOV EAX,[ESP + 8h]
MOV buf,EAX
MOV EAX,[ESP + 0Ch]
MOV len,EAX
MOV EAX,[ESP + 10h]
MOV flags,EAX
}
//....
GetAddress("send");
__asm JMP EAX;
}
naked函数里不能定义变量,改全局
{
MOV EAX,[ESP + 8h]
PUSH EAX
CALL func
TEST EAX,EAX
JE xxx
//....
}BOOL func(char* buf)
{
...
}
另外先多谢stjay,我去试一下
SOCKET s,
const char FAR *buf,
int len,
int flags
);
调用汇编:
push flags
push len
push buf
lea s
push s
call send进入send之后:
堆栈:
返回地址
参数
参数buf
参数len
参数flag
esp + 8为第一个参数,
esp + 0ch 为第二个参数,
esp + 10h为第三个参数
每隔4为一个参数.
大多情况是这样.
lz还是先好好学基础....
给你鱼,只够你一顿饱...
明白一点了,那为什么3楼的兄弟是从4开始,8,0ch,10h这样的呢?还有7楼的兄弟说哪里要改成ebp呢? 谢谢. 马上结贴
给你举个例子:
int add(int a, int b)
{
return a + b;
}void main
{
int c = add(a, b);
}对应汇编void main
{
push b
push a
call add
mov c, eax
.....
}
参数保存在堆栈中.
整个过程堆栈如下:
返回地址 esp
a esp + 4
b esp + 8
第一个参数在esp + 4