-
-
[求助]在dll劫持中如何修改函数各个参数
-
发表于:
2010-12-24 23:26
8833
-
劫持的是ws_32.dll,主要劫持的是recv函数
之前看了论坛上面的一篇关于dll劫持的文章
http://bbs.pediy.com/showthread.php?t=73916
按文章的方法可以获取到劫持函数的各个参数,自己想完善一下添加修改各个参数的代码
但是不知道什么原因修改不成功。
我的做法是
一个socket服务端用于接受数据,客户端用nc
nc去连接服务端并发送数据,服务端接受数据后显示,
现在想实现nc发送数据,中间dll劫持服务端的recv,然后修改接受过来的参数并修改
现在出现的问题是
只要一劫持 客户端发送数据,服务端就不显示数据
发送11 22 33 44 服务端没显示
代码如下
dll劫持
导出函数recv
// 导出函数
ALCDECL AheadLib_recv(void)
{
// 保存返回地址
__asm POP m_dwReturn[15 * TYPE long];
__asm
{
push eax;
//修改参数
[COLOR="Red"] mov eax, buf
mov [esp+8], eax
mov eax, buf_len
mov [esp+12], eax[/COLOR]
//获取参数
[COLOR="Red"] mov eax, [esp+8]
mov m_ptrBuffer, eax
mov eax, [esp+12]
mov m_size, eax
pop eax[/COLOR]
}
// 调用原始函数 日志文件显示
GetAddress("recv")();
__asm push eax
if (m_hFile != INVALID_HANDLE_VALUE)
{
WriteFile(m_hFile, "---------- recv() ----------\r\n", 30, &m_byteCount, 0);
WriteFile(m_hFile, m_ptrBuffer, m_size, &m_byteCount, 0);
FlushFileBuffers(m_hFile);
}
__asm pop eax
// 转跳到返回地址
__asm JMP m_dwReturn[15 * TYPE long];
}
测试程序.zip
ws2_32.zip
SockServ.zip
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课