前些日子同事在给同学做测试的时候,使用了一个叫IEC的工具,他是一个IE表单的拦截和篡改工具,可以拦截HTTP请求,并篡改其中的GET或者POST数据,然后再将篡改后的数据提交给服务器。这个功能有点意思,下面我们就来自己实现一个,同时分析分析一下他的实现原理。
- HTTP代理实现请求报文的拦截与篡改1--开篇
- HTTP代理实现请求报文的拦截与篡改2--功能介绍+源码下载
- HTTP代理实现请求报文的拦截与篡改3--代码分析开始
- HTTP代理实现请求报文的拦截与篡改4--从客户端读取请求报文并封装
- HTTP代理实现请求报文的拦截与篡改5--将请求报文转发至目标服务器
- HTTP代理实现请求报文的拦截与篡改6--从目标服务器接收响应报文并封装
- HTTP代理实现请求报文的拦截与篡改7--将接收到的响应报文返回给客户端
- HTTP代理实现请求报文的拦截与篡改8--自动设置及取消代理+源码下载
- HTTP代理实现请求报文的拦截与篡改8补--自动设置及取消ADSL拔号连接代理+源码下载
- HTTP代理实现请求报文的拦截与篡改9--实现篡改功能后的演示+源码下载
- HTTP代理实现请求报文的拦截与篡改10--大结局 篡改部分的代码分析
实现这个功能的方法很多。可以使用WINPCAP,直接从网卡截包然后篡改,也可以HOOK住SEND函数,或者其它相关的网络API。至于IEC这个软件使用的技术我还不太清楚,不过从他只可以截IE的数据来看,应该是BHO或者异步可插入协议(Asynchronous Pluggable Protocols),具体就不研究了,说实话,VB P-CODE模式下编译的程序就是个虚拟机, 在汇编层面,分析VB虚拟机里执行的P-CODE代码,实在是太麻烦。
使用WINPCAP实现这个功能,有点牛刀杀鸡了,而使用HOOK技术,又不是太安全,基本上带主动防御,智能行为分析的杀软,HOOK用到的几个函数都是被严密监控的。所以在这里,以上两种技术我们都不采用 。
我们采用的是第三种技术--代理拦截技术,看到代理两个字,稍稍有点计算机知识的人,第一时间反应的词语应该都是代理服务器,是的,代理拦截技术,正是基于代理服务器技术实现的。
下面,我们先来看看代理服务器的基本知识 。
一般情况下的HTTP请求与响应,如下图所示。
加入代理服务器后,如下图所示
有没有看出来什么门道,是的,当你使用代理服务器后,所有的HTTP请求,都是先发到代理服务器,然后由代理服务器重新包装后,再发给目标(实际)服务器,响应也是如此,代理服务器先接收来自目标(实际)服务器的响应,然后包装后发给客户机。到这里,实现方式,是不是已经很明显了。
我们可以自己实现一个代理服务器,然后,将本机的代理服务器设置成指向我们自己实现的代理服务器,这样,当本机的浏览器发出去请求的时候,其实都是发送到了我们自己实现的代理服务器上,如此请求的拦截就算实现了,拦截实现后,下一步就是篡改了。刚才也讲了,发到代理服务器的的请求,是经过代理服务器重新包装后,再转发给目标(实际)服务器的,代理服务器是我们自己实现的,那么请求不就是随我们自己的意进行“包装”吗 :)这样篡改也就没有什么问题了 。