在Firefox里用光大网银

// WIP,光大网银很多javascript代码貌似在ff下就有问题,这里只是说ActiveX的问题 光大网银用了ActiveX,于是看上去很难在别的系统/浏览器下用。 但其实就结果来说,那个ActiveX控件没啥用…… 页面上有三个<object>,其中一个啥sign貌似啥都没干,另外俩负责加密密码/提交。 提交登录表单的时候,多数域都是空的。根据观察,控件就填了一个域:Password 为了观察那个控件都调了啥加密函数,找了个很好用的工具,叫WinAPIOverride。粗粗一看调了若干Crypt* API,于是缩小范围到各个Crypt*函数上。分析记录在 http://wiki.henryhu.net/wiki/CEB。 最后发现这个控件很匮乏,在用公钥加密了密码之后(公钥在JS里……),它蛋疼的生成了一个随机数加密了一下,之后有解密了一把,最后完全没用…… 而那个Password域,内容其实就是密码加密结果反过来之后base64一把…… 分析的时候有个地方很奇怪。看上去CryptEncrypt()的输入每次都一样,但是结果每次不同…… 后来自己写了个程序试试发现的确每次不同…… 再次看见网上说,加密时候会随机pad到block长度,才理解…… 接下来嘛,写个Greasemonkey脚本来帮助登录。第一步就是把那几个控件替换成我们的对象。替换完之后,可以登录过第一步了,之后手机短信验证还是不成。看console里有个错说HiddenSubmitArea不存在,于是插入一个进去…… 这货找遍各个地方都没找到,貌似也没啥用。 这样就可以过短信验证了…… 进去之后貌似还是有一些js错误,慢慢来…… 反正可以登录了。 作为库调用跟踪工具,WinAPIOverride还是挺好用的,功能上类似于ltrace,还有调试器的一部分功能,可以在库函数调用前后断下来,观察内存/寄存器等。IEinspector作为分析IE数据包的工具也不错,看上去比HttpFox功能更多…… 只是要收钱。 Greasemonkey代码: // ==UserScript== // @name cebbank // @namespace net.henryhu // @description ceb bank // @include https://www.cebbank.com/per/perlogin* // @include https://www.cebbank.com/per/prePerlogin.do?_locale=zh_CN // @version 1 // @grant none // ==/UserScript==   function reset() { console.log(’reset’); }   …

Continue reading ‘在Firefox里用光大网银’ »

WordPress 多层菜单

下了个主题,发现只支持一级菜单…… 去网上,先找了一个Multi-level Navigation插件,但是主题不配合…… 继续找,找到那么一篇文章: WordPress Multi-Level Drop Down menu using jQuery | SEOAdsenseThemes.com 弄到WP里面去,竟然就好了…… 其实就是加: <script type=‘text/javascript’> jQuery(document).ready(function(){ jQuery(“#dropmenu ul”).css({display:”none”});// Opera Fix jQuery(“#dropmenu li”).hover( function(){ jQuery(this).find(‘ul:first’).css({visibility:”visible”,display:”none”}).show(268); }   ,function(){ jQuery(this).find(‘ul:first’).css({visibility:”hidden”}); } ); }); </script> <style type=“text/css”> #dropmenu, #dropmenu ul {list-style-type:none; list-style-position:outside; position:relative;z-index:300; width:100%;} </style> 到HTML页面的head部分里面,然后把原来的 <?phpwp_list_pages(‘title_li=&depth=10‘); ?> 换成 <ulid=“dropmenu”><?phpwp_list_pages(‘sort_column=menu_order&title_li=‘); ?></ul> 就行了……

英语46级查分的程序

昨天46级能够查分了,研究了一下…… 主页面调用了一段javascript,验证码竟然是本地验证的…… 这个不说,其实最后查分就是通过XMLHttpRequest直接查…… 就没什么加密一类的事情…… 之后找了一下,好像XMLHttpRequest这个东西还只有Javascript里面才有,python用起来还不方便…… 用FireBug试了一下,因为这个查分系统的请求里面没有数据,所以这个请求其实很简单,拿urllib糊弄一下就好了…… 另外关于FireFox里面不能查的问题,貌似是FireFox的XMLHttpRequest在send(null)的时候HTTP头里面没有Content Length字段,其实send(“”)就可以了…… 另外,最后这个系统还检查一下Referer,至少不是什么都不干……  1 import urllib  2 import urllib2  3  4 id = “Your ID“  5 t = “4“  6 url = ‘http://cet.99sushe.com/cetscore_99sushe0902.html?t=‘ + t + ‘&id=‘ + id  7 values = {}  8 headers = { “Referer“ : “http://cet.99sushe.com“ }  9 10 data = urllib.urlencode(values) 11 req = urllib2.Request(url, data, headers) 12 response = …

Continue reading ‘英语46级查分的程序’ »