首页
社区
课程
招聘
[求助]为何替换ws2_32.dll无效
2012-9-15 16:50 10131

[求助]为何替换ws2_32.dll无效

2012-9-15 16:50
10131
之前看过函数转发器的原理,于是我想做个dll来替换掉系统的ws2_32.dll,使得程序在发送数据时先经过我的处理再发送。

于是我用易语言写了个简单的联网程序,把自己写的dll改名为ws2_32.dll放在test程序目录下,同时系统原来的ws2_32.dll改名为syswsock32.dll放在同个目录下。运行程序后,通过XT工具看到test.exe的确加载了伪造的ws2_32.dll和syswsock32.dll,但是却是无法联网。

测试多次以后,我干脆在伪造的dll里把所有导出函数都指向syswsock32.dll,但是依然无法联网。

请问各位,这是怎么回事呢?

附上测试程序和基于VC6.0的工程文件。

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (9)
雪    币: 794
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
Winker 8 2012-9-15 21:33
2
0
遗漏了N多东西,比如你导出的send函数,没有转到真正系统dll的send函数上。
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gdutlison 2012-9-15 22:05
3
0
谢谢,我想问一下:
怎么看出send没有正确转到?下面一句
#pragma comment(linker,"/export:send=syswsock32.send,@19")
其中syswsock32.dll是系统原来的ws2_32.dll,这样不就是转到了么?
雪    币: 794
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
Winker 8 2012-9-16 01:11
4
0
你要连接,你不想要转connect这类函数么?
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gdutlison 2012-9-16 01:50
5
0
问题是现在我先不管自己要做的处理,我就是把所有函数都转向syswsock32.dll,但是都会造成无法联网
雪    币: 65
活跃值: (171)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gzfuqun 2012-9-16 09:17
6
0
你这个根本没转向
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gdutlison 2012-9-16 13:41
7
0
请问问题出在哪里了?
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gdutlison 2012-9-16 22:21
8
0
高手来解答一下~~
雪    币: 276
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kwzlj 2012-10-15 12:02
9
0
虽然不懂,但看了一下,你似乎是没有转向,你只是导出了函数,我这有份delphi的劫持,你参考一下:

uses
Windows;

{$R *.res}

var
ModHandle: Cardinal;
POldCheckUPdateValid: Pointer;
POldGetDogError: Pointer;
POldGetRegionAndCode: Pointer;
POldQZUPdateValid: Pointer;
POldReadRegisterData: Pointer;
POldReadRegisterData2: Pointer;
POldWriteRegisterData: Pointer;
POldWriteRegisterData2: Pointer;

procedure CheckUPdateValid; asm jmp POldCheckUPdateValid end;
procedure GetDogError; asm jmp POldGetDogError end;
procedure GetRegionAndCode; asm jmp POldGetRegionAndCode end;
procedure QZUPdateValid; asm jmp POldQZUPdateValid end;
procedure ReadRegisterData; asm jmp POldReadRegisterData end;
procedure ReadRegisterData2; asm jmp POldReadRegisterData2 end;
procedure WriteRegisterData; asm jmp POldWriteRegisterData end;
procedure WriteRegisterData2; asm jmp POldWriteRegisterData2 end;

exports
CheckUPdateValid,
GetDogError,
GetRegionAndCode,
QZUPdateValid,
ReadRegisterData,
ReadRegisterData2,
WriteRegisterData,
WriteRegisterData2;

begin
ModHandle:= LoadLibrary('D:\Weway\GraspFzxw+\DogRW.dll');
if ModHandle > 0 then
begin
   POldCheckUPdateValid:= GetProcAddress(ModHandle, 'CheckUPdateValid');
   POldGetDogError:= GetProcAddress(ModHandle, 'GetDogError');
   POldGetRegionAndCode:= GetProcAddress(ModHandle, 'GetRegionAndCode');
   POldQZUPdateValid:= GetProcAddress(ModHandle, 'QZUPdateValid');
   POldReadRegisterData:= GetProcAddress(ModHandle, 'ReadRegisterData');
   POldReadRegisterData2:= GetProcAddress(ModHandle, 'ReadRegisterData2');
   POldWriteRegisterData:= GetProcAddress(ModHandle, 'WriteRegisterData');
   POldWriteRegisterData2:= GetProcAddress(ModHandle, 'WriteRegisterData2');
end;
end.
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
六月 2012-10-15 13:33
10
0
SPI可以实现你想要的,gg下
游客
登录 | 注册 方可回帖
返回