能力值:
( LV12,RANK:420 )
|
-
-
2 楼
直接替换是不行的,因为你连接到的HOST不是那个,那个HOST上根本没这个URL。可以在CONNECT时重定位到本地代理服务器,然后做数据修改,或者直接修改返回数据
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
qihoocom 、谢谢你!
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
qihoocom(请诊断) AFD_SEND:
if ( LookupSendPacket(Buffer, Len) ) then
begin
OutputDebugString(PChar(Format('[HTTP Send] Length = %d', [Len])));
OutputDebugString(PChar(Format('%s', [StrPas(Buffer)])));
//以下实现将域名url1替换为域名url2
s := strpas(pchar(buffer));
s := stringreplace(s, 'url1', 'url2', [rfReplaceAll]);
Buffer := pchar(s) ; //将替换之后的字符串在次传回到缓冲区!
showmessage(Buffer); //通过delphi的showmessage打印出来的结果,字符串的替换是成功的!
end;
|
能力值:
( LV12,RANK:420 )
|
-
-
5 楼
这是不行的,我2楼已经说得很清楚了
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
网友XX提供回答:
《我觉得不但是ip地址和端口需要改动,整个tcp传输的全部内容都是要改动的,包括校验》
我对网友XX提问:
如果按qihoocom所讲:“可以在CONNECT时重定位到本地代理服务器,然后做数据修改,或者直接修改返回数据”、这样做也需要改动整个包吗?”
网友XX提供回答:
《这个应该是不需要的,但事件一旦触发,重新定向是否能够满足要求,这个很难说》
qihoocom,请你出马!
|
能力值:
( LV12,RANK:760 )
|
-
-
8 楼
本地代理访问大法很好的
|
能力值:
( LV15,RANK:340 )
|
-
-
9 楼
[QUOTE=西南;707997]
s := strpas(pchar(buffer));
s := stringreplace(s, 'http://url1', 'http://url2', [rfReplaceAll]);
[/QUOTE]
看你这样替换url估计你没仔细看过HTTP的请求包格式,里面不会出现 http:// 这样字符的。
HTTP的,比如你请求的是 http://bbs.pediy.com/forumdisplay.php?f=41,则会被封装成:
GET /forumdisplay.php?f=41 HTTP/1.1
...
Host: bbs.pediy.com
...
所以你的Replace根本没替换到URL。另外这样的写法也有点问题,s你定义的是String类型吧,而Buffer是个指针,Buffer := pchar(s); 只是把Buffer又指向你自己的字符串s,而并没有修改数据包的内容。 二楼MJ也说了,你要实现更换Host(从一个网站跳到另一个网站),是不能在这个地方实现的。无论你怎么修改"Host: ..."后的域名,数据包依然按照IP头部中的目的地址发出去,除非你自己重新组装TCP包。
这种方式截获数据包,只能做成防火墙式的被动数据包丢弃和修改...
|
能力值:
( LV12,RANK:420 )
|
-
-
10 楼
重定向其实改包是可以实现的,那就是修改返回包(处理RECV),然后将返回填为HTTP 302,重定向到指定URL,不过这么做有一些问题,例如客户端不认HTTP302,就不行,或者是返回BUFFER过短,就填不完重定位的数据,不过还算简单方案了。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
understand~~
先了解HTTP......
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
有没解决方案~~~ 供大家学习 !
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
如果直接修改返回的buffer可行的话,那么把指定内容(网页代码),修改成一句转向代码(也就是网页脚本代码),要是成功的话,效果应该是:访问某个网站时,浏览器只下载到我们的转向代码,然后就转到我们的目标上去了,不过要处理好,别把自己的目标也hook了
|
能力值:
( LV15,RANK:340 )
|
-
-
14 楼
使用 HTTP 301/302 进行重定向,实际是很难操作的。因为服务器的回应信息中没有主机的标识信息,需要通过发送者的IP地址判断是哪个服务器发过来的数据。如果对所有的HTTP 200 OK都使用 HTTP 301重定向,自己网站的回应数据也会被修改到,最终结果就是浏览器卡在页面读取那死循环了 。并且确实有些浏览器为了防止HTTP301/302 网址劫持,忽略了这种跳转请求。
这个方法用于恶作剧倒是不错,测试可以将浏览器的所有访问全部重定向到baidu.com
要是不跨站只修改请求的地址或页面参数,倒是可以做到。例如 /forumdisplay.php?f=41 改 /forumdisplay.php?f=3
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
修改数据包还是hook winsock或者winspi(spi hook也不用注册dll)! 别复杂化了 mj只是提供一种思路
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
我要实现的业务逻辑很简单~~~ 用bho和mimefilter确实容易、只不过只能在IE下使用~所以想到了ring3
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
我从BUFFER中取回的数据、好像只是一个HTTP请求!没有具体的网页内容~
|
能力值:
( LV12,RANK:420 )
|
-
-
18 楼
具体到我此前说的这个技术,可以记录device io control 的 file handle(即SOCKET HANDLE)来实现识别返回数据包,并进行篡改。
|
能力值:
( LV15,RANK:340 )
|
-
-
19 楼
嗯,根据Handle判断可能是个好方法,根据句柄把请求和回应给对应起来。之前看漏了,看来还需要重新把帖子研究下
修改HTTP请求就能满足你要修改URL参数的目的,你要是还想处理页面内容就需要把服务器发回来的信息一个个连接起来。具体网页内容是跟在 HTTP/1.1 200 OK 后面的,替换掉 Connection: 关键字往后的 \0 字符就可以用OutputDebugString来输出。
普通的页面你可以用这种方式看到页面源码,不过目前比较流行使用gzip压缩数据流,所以可能得到的不是可见字符(比如典型的百度和Google都用了这个技术)。你要是在回应的数据里看到 Content-Encoding: gzip,就表示在数据包后面的数据使用了gzip压缩,需要自己解压缩。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
SessionList.Add or SessionList.Delete ?
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
使用(Handle)、与 我们讨论的、在同一个HOST下修改GET且保证HTTP头长度一致!有什么区别,使用了(Handle)是不是就无需修改GET的值及无需重新构建数据长度了?
谢谢~
|
能力值:
( LV15,RANK:340 )
|
-
-
22 楼
两码事。利用Socket Handle只是方便识别收到的数据,还需配合HTTP 301/302重定向。之前说过了,重定向的优势在于可以跨站(跳到别的Host也可以实现),并且一般服务器返回的数据会比较多,足够你构建重定向报文。不过一旦遇到不吃重定向的浏览器,这个方法就行不通了。
而直接修改GET的参数虽然不能换Host,不过比较稳妥,毕竟请求还没发出去就被改掉了,唯一的缺点是要考虑插入字符串后长度超过原先数据包的问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
有不吃301、302的浏览器吗?没有吧!
另外:你谈到、在修改GET值的时候《缺点是要考虑插入字符串后长度超过原先数据包的问题。 》 1、只要保证修改过后的长度小于修改之前就可以了吗? 还是 2、修改前与修改后的长度要保证一致?
还有:如果我修改过的GET数据、一定要超过修改前的长度时(是否可以重新效验一次TCP包即可?还是一但发生了数据长度大于修改前的长度,就无法实现了?)
THANKS~
|
能力值:
( LV15,RANK:340 )
|
-
-
24 楼
|
|
|