背景
因为某宝最近升级,致使朋友买的刷单软件不能用了;在又付过钱以后,那个刷单软件供应商居然捐款跑路了...因而,朋友委托我作一个功能同样的软件。
功能
他给我描述的软件功能,是这个样子的:在网页登录个人某宝以后,在【已买到的宝贝】页面,有待付款、待发货、待收货、待评价数量,软件能够随意修改这些数据;页面下边还有交易单,软件还能够隐藏指定的单据...而后他把以前买的软件发给我,让我研究研究...
分析
按照他的描述,我归纳以后,软件的功能就是修改网页数据。我先用Reflector打开朋友给个人程序,看看能不能反编译,要是能反编译就好办了,0.0,结果反编译不了,看来本身得从头开始找资料...
实现一
工做之余,开始百度相关信息,无心进入一个网站,有我的上传了一个工具,名字好像是淘宝数据修改器之类的,他的附件上附带了一句话,“用BHO实现”!!!而后我赶忙百度【BHO】,百度百科说,BHO(Browser Helper Object,浏览器辅助对象,简称BHO) BHO是微软推出的做为浏览器对第三方程序员开放交互接口的业界标准,经过简单的代码就能够进入浏览器领域的“交互接口”(INTERACTIVED Interface)。我瞬间两眼放光,赶忙百度个BHO的例子,这个例子的功能是在打开的网页上添加3个按钮。我按照步骤,在个人电脑上跑例子,我第一次打开的是64位的IE浏览器,打开网页以后,网页仍是原来的样子;第二次打开的是32位的IE,IE首页上多了3个按钮,再打开一个标签页,上面也有三个按钮!!!
能在网页上添加3个按钮,就说明它能修改网页的html数据,那这不就正是我要的么!
工程都不用新建了,直接在原程序上进行开发,看了程序以后,了解了程序的工做原理:首先得在注册表注册dll,这个dll必须实现IObjectWithSite接口,IE在启动的时候,会自动加载已注册的dll。在SetSite函数里,能够获取到浏览器对象,而后就能够注册各类事件,修改网页数据是在DocumentComplete事件里进行,由于在这个事件以后,DOM才容许修改...
由于是dll,而且是浏览器本身加载dll,所以没有办法调试,附加到IE的进程里调试,断点也不会命中...要是能打个断点,在断点处查看HtmlDocument对象多好,如今还得苦逼的打日志...
如今的工做是怎么遍历HtmlDocument找到目标节点,而且修改节点的数据。
我在网上没有找到遍历HtmlDocument的资料,只能多输出点日志信息分析了。通过分析发现,HtmlDocument是一个树,而且每一个节点都实现IHtmlElement,每一个节点的子节点集合都实现IHtmlElementCollection,So,知道怎么遍历了...我是在尝试了无数次typeof以后才知道的...必定要把节点转换为IHtmlElement以后再用typeof,不然你只会获得System._ComObject类型...
找到节点以后,修改数量值很好实现,把目标节点的innerHTML改成指定文本就行;隐藏单据就是隐藏一个节点,把节点的Style.Display置为none就好了。
就这样,这个BHO版本的实现了,可是在测试过程当中,发现有点不完美:由于我是在DOM完成以后才修改的数据,可是浏览器是收到多少数据,就解析多少显示多少,那么就在浏览器【显示原始数量数据】以后 到 【整个页面】完成,这段期间,页面显示的将是真实数据,而不是我修改的数据。这个空白期理论上不可消除,除非你的网速达到光速,配置达到天河二号...
我把状况给朋友说了以后,朋友说在他电脑上跑跑,看看效果。周日晚上,在朋友的电脑上,程序跑起来以后,他进入到已买到的宝贝页面,刷新再刷新,数据仍是真实的数据,不是修改过的数据,OMG,我登时傻眼了...
朋友:这玩意支持搜狗浏览器吗?刷单不能用IE...
我:不知道,我下个搜狗试试...
我赶忙下个搜狗,跑起来,进入已买到的宝贝页面,刷新再刷新,KAO,不行...
我立刻对朋友说,这个版本的不行,我下周整个新版本的...
实现二
上次惨败以后,我又从新分析这个程序到底该怎么作才能让它支持各类浏览器,而且是在数据达到浏览器以前进行修改。
首先想到的是对本地网卡进行抓包,监视全部的包,把符合规则的数据修改以后再放行:抓包好抓,可是分析数据就有难度了,http的还好,https的怎么办...
我又去分析朋友给个人软件,我发现里面还有3个dll,我尝试用Reflector打开,顶,所有打开!!!他买的程序居然是用C#开发的,那我确定也能作出来。我分别百度他们,直到输入fiddler以后,我已经看到胜利的曙光了。
Fiddler是一个http协议调试代理工具,它可以记录并检查全部你的电脑和互联网之间的http通信,设置断点,查看全部的“进出”Fiddler的数据(指cookie,html,js,css等文件,这些均可以让你胡乱修改的意思)。 Fiddler 要比其余的网络调试器要更加简单,由于它不只仅暴露http通信还提供了一个用户友好的格式。
css