首页
社区
课程
招聘
[求助]在dll劫持中如何修改函数各个参数
发表于: 2010-12-24 23:26 8831

[求助]在dll劫持中如何修改函数各个参数

2010-12-24 23:26
8831
劫持的是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

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 274
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
是不是有可能把参数地址搞乱掉了?
2010-12-24 23:37
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好像没有
1000122B > $ 8F05 3CE40010  POP DWORD PTR DS:[1000E43C]
10001231   . 50             PUSH EAX
10001232   . A1 30B00010    MOV EAX,DWORD PTR DS:[1000B030]		
10001237   . 894424 08      MOV DWORD PTR SS:[ESP+8],EAX     		;修改第2个参数		
1000123B   . A1 34B00010    MOV EAX,DWORD PTR DS:[1000B034]
10001240   . 894424 0C      MOV DWORD PTR SS:[ESP+C],EAX		;修改第3个参数
10001244   . 8B4424 08      MOV EAX,DWORD PTR SS:[ESP+8]		
10001248   . A3 D0EB0010    MOV DWORD PTR DS:[1000EBD0],EAX		;保存第2个参数	
1000124D   . 8B4424 0C      MOV EAX,DWORD PTR SS:[ESP+C]
10001251   . A3 D4EB0010    MOV DWORD PTR DS:[1000EBD4],EAX		;保存第3个参数
10001256   . 58             POP EAX
10001257   . 68 14B10010    PUSH ws2_32.1000B114                     
1000125C   . E8 9FFDFFFF    CALL ws2_32.10001000             		;调用真正recv  
1000B030  38 B0 00 10 0C 00 00 00 68 61 68 61 2C 73 65 63  8?....haha,sec
1000B040  63 65 73 73 21  

 
     

修改也是我数据定义的地方
2010-12-24 23:50
0
游客
登录 | 注册 方可回帖
返回