分页: 1 / 2

一段代码搞定支付宝

发表于 : 2010-03-08 18:39
kappa8086
本来支付宝是有个支持linux系统下firefox的插件的,但敷衍用户的程度不比QQ强多少,不但一直没有64位版本出来,firefox 3.6还不兼容,一加载插件直接崩溃,BUG已经报了很久了。

Greasemonkey有一些脚本可以绕过这个插件,我下来看了下,不知道这些脚本的有效性,因为支付宝页面是变动还是时常的,而且我只用firebug,于是我想试下读懂这些代码在firebug下手工处理。
经分析几个页面的js代码,控件验证基本是通过checkForm函数,然而有的是CheckForm(大小写区别),有的挂在form的onsubmit上,有的用了window的listener,使得绕过方式不尽相同(PS:发现了好多不该有的注释,以及开发者语文和英语都不过关的证据...- -);而我初次实验就栽在了支付宝转帐上面,好不容易绕过了控件验证后,却报身份验证失败的错误。


走的弯路就不提了,后来我发现唯独转帐这页的checkForm中同时还有ajax的身份验证代码,因此绕过就失败。灵光一闪,其实“绕过”并不是必须的,它要什么我给它什么可能更简单。结果,就是“伪造”了控件的接口,只是一部分,但最后通过了我做的所有测试,最终的代码就这几句:

代码: 全选

p_Edit = document.createElement("input");
p_Edit.TextData = "登录/付款密码";
p_Edit.ci1 = function() {return "XOR_1_000000000000000000000000000000_63504554470A7C710A750170";};
p_Edit.ci2 = function() {return "";};
AlieditControl = new Object();
AlieditControl.installedAliedit = true;
AlieditControl.getAliedit = function(o){return [p_Edit];}
密码补上,在firebug的控制台上执行一下,就可以按页面上的提交按钮了。除了淘宝的登录页还是要用标准登录,支付宝的各个支付页面通用,不依赖页面细节的变化,只要控件接口不变。greasemonkey下应该也可以用,不过密码输入的部分还得加点内容才行。


细节说明:
虽然创建的是一个input,但控件并不是,只是以此让它拥有所有的DOM属性,ci1函数的值可能不是必须的,这个常数是我在走弯路的时候找到的,在我机器上每次都一样,但不保证其他电脑上的情况。



-----------------------------3-11更新----------------------------------
由于iframe的问题,确认收货页以上代码支持不良,暂做一个workaround,仅能用于firebug:

代码: 全选

if (!window.AlieditControl && $('alipay-iframe')) cd($('alipay-iframe').contentWindow);
p_Edit = document.createElement("input");
p_Edit.TextData = "登录/付款密码";
p_Edit.ci1 = function() {return "XOR_1_000000000000000000000000000000_63504554470A7C710A750170";};
p_Edit.ci2 = function() {return "";};
AlieditControl.installedAliedit = true;
AlieditControl.getAliedit = function(o){return [p_Edit];}

Re: 一段代码搞定支付宝

发表于 : 2010-03-08 18:44
delectate
:em11

Re: 一段代码搞定支付宝

发表于 : 2010-03-08 19:42
wangdu2002
牛人啊。。。 :em11

Re: 一段代码搞定支付宝

发表于 : 2010-03-08 19:44
kappa8086
还是有差错...
确认付款页出错,伪造的控件被覆盖了,待查

-----

我想找到原因了,其他页面上AlieditControl这个对象都是一开始就创建好了,唯独这页的点确定按钮时才生成,伪造对象就被屏蔽了,在脚本出错处之前打了断点才执行成功。
思考解决办法中~

Re: 一段代码搞定支付宝

发表于 : 2010-03-08 19:44
delectate
i vbox it now

it is really hard to slove

Re: 一段代码搞定支付宝

发表于 : 2010-03-08 21:22
eexpress
个案的某阶段哦。

Re: 一段代码搞定支付宝

发表于 : 2010-03-09 15:13
tamamaxox
eexpress 写了:个案的某阶段哦。
:em11 谢谢个案分享

Re: 一段代码搞定支付宝

发表于 : 2010-03-09 17:21
jarryson
看不大懂。。希望完善,opera使用支付宝就有望了。。

Re: 一段代码搞定支付宝

发表于 : 2010-03-09 17:57
poet
留个名回来再看。

Re: 一段代码搞定支付宝

发表于 : 2010-03-09 18:42
kappa8086
一时想不出啥好办法,确认收货页还真得当个个例处理了
昨天测试发现那页的插件检测不完整,代码是异常跳出的,应该不用绕过,直接设置密码就行,不过没把关键代码保存下来。。。咳,这个测试不是随时都能做,要花钱的 :em06

Re: 一段代码搞定支付宝

发表于 : 2010-03-09 20:34
dexinzang
脚印一下,等待改进

Re: 一段代码搞定支付宝

发表于 : 2010-03-10 13:08
Freesnake
马云这个外星人,再不出官方64位插件,我诅咒它速回老家!

Re: 一段代码搞定支付宝

发表于 : 2010-03-11 21:40
kappa8086
又有机会测试了... 这次发现不是被屏蔽,而是确认收货这页用了一个iframe,那个AlieditControl根本就在另一个页面里,firebug的自动上下文切换把我给蒙了,用chrome调试才知道...
查了一下,在firebug要用一个cd函数(?)手动切换上下文,目前得写成这样:cd($('alipay-iframe').contentWindow)
chrome貌似支持不了这个
:em20

Re: 一段代码搞定支付宝

发表于 : 2010-03-11 21:41
wangdu2002
没事。。。楼主的辛苦研究并不是没用的。。。至少让大伙知道了某条道路是走不通的。 :em06

Re: 一段代码搞定支付宝

发表于 : 2010-07-02 23:57
xing979020
kappa8086,

还有朋友关注这个吗