十二 16

nodebox 2开始beta,官方已经支持Windows了。nodebox 2基于jython开发

等library的port跟上了,nodebox就完美跨平台了!打绿色房子造型,透过自身的孔被大铁钉铆在墙上。第九层楼道高于我的视线,所以没看见什么。在对面五层楼的护栏上,排着倒万恶的cocoa专有代码,全世界无产平台联合起来!

为什么用Jython开发呢?这个里程碑式的事件打通了Processing。以后这两个巨型平台的library就可以互相通用了。

期待继续统一vvvv, Context Free Art, Scriptographer

nodebox 2令人兴奋的升级还不仅一点点,具体可以看这里。强烈建议想学习nodebox的各位直接从nodebox 2入手。

spryteshoebot的win32专业port

支持一定量的shoebot library。还是不错了。

另外就是shoebot和nodebox准备联合起来做一个类似ACID那样的 render test suite,保证兼容体系的渲染效果都是一样的。

十二 14

最近需要分析一些SSL流量,无非三条途径:2种已知中间人解密方法,wireshark抓证书然后解密,和hook dll三种方法。个人无故偏好最后一种。。。。

网上找了些软件,一个是别人写好的现成黑客工具Echo Mirage

支持Winsock, Winsock SSL, OpenSSL三种hook。但是这个dll inject老是挂掉,不爽。。。。

又发现了一个PyDbg。。。这个工具是附属于 pedram.openrce.org 的一个名叫 PaiMei 的子项目中

当然这个 Paimei 就是《Kill Bill 2》里面最后被毒死那个所谓功夫很牛逼的 白眉 师傅。。。。

Paimei 首页 | 文档 | 下载 | 源码

PaiMei is a reverse engineering framework consisting of multiple extensible components. The goal of the framework is to reduce the time from "idea" to prototype to a matter of minutes, instead of days. PaiMei is written entirely in Python and exposes at the highest level a debugger, a graph based binary abstraction and a set of utilities for accomplishing various repetitive tasks. The framework can essentially be thought of as a reverse engineer's swiss army knife and has already been proven effective for a wide range of both static and dynamic tasks such as: fuzzer assistance, code coverage tracking, data flow tracking and more.

用pydbg来截获ssl还是很简单的。。。这个帖子里有现成代码

import sys
import utils
from pydbg import *
pktc = 0
def SSL_read_hook (dbg, args, ret): global pktc pkt = dbg.read_process_memory(args[1], args[2]) f.write("[%d] Packet:\n" % pktc) f.write(dbg.hex_dump(dbg.read_process_memory(args[1], args[2]))) f.write('\n') pktc = pktc + 1
try: pid = int(sys.argv[1]) except: print "Usage: %s PID" % sys.argv[0] sys.exit(-1)
filename = "ssldump_" + str(pid) + ".txt" f = open(filename, 'w')
dbg = pydbg() dbg.attach(pid)
addrSSL_read = dbg.func_resolve_debuggee("SSLEAY32", "SSL_read") if not addrSSL_read: print "Couldn't resolve SSL_read" sys.exit(-1)
hooks = utils.hook_container() print "Hooking SSL_read(0x%x)" % addrSSL_read hooks.add(dbg, addrSSL_read, 3, None, SSL_read_hook)
print "Function hooked, logging to: %s" % filename dbg.run() f.close()

pydbg这个依赖库不需要完全下载paimei,只需要svn checkout/export下面几个python module就可以了:

http://paimei.googlecode.com/svn/trunk/pgraph
http://paimei.googlecode.com/svn/trunk/pida
http://paimei.googlecode.com/svn/trunk/pydbg
http://paimei.googlecode.com/svn/trunk/utils

注意paimei是比较古老的项目了,现在似乎没人管了。所以这个代码里有个bug,会出错

TypeError: can't set attributes of built-in/extension type '_ctypes.Structure'

解决方法是打开 pydbg\my_ctypes.py

c_type = (Structure ... 这一行上面加一行:

class Structure(Structure):
    pass

就OK了。

当然hook出来有很多0x00的空值。这个手工处理掉就行了。

现在又开始纠结带gzip/bz2解压功能的ssl分析工具了。。。。。很多时候还是只有自己DIY。。。。

参考 123

btw, 最近出了一款号称用p2p,基于QtWebkit的OOXX浏览器。我去看了下,就是一个ssl代理

$ openssl s_client -connect ps?????.dreamhostps.com:443
GET http://twitter.com/ HTTP/1.1
HOST: twitter.com

呵呵。。。。

十二 03

最短的域名缩短工具:http://to/ 。这个是合法的顶级域名哦。

抢注这个
http://to/est
可惜忘记加.cn了。。囧。。。

同时也抢注了下面的网址:
http://to/index.php
http://to/index.do
http://to/index.asp
http://to/index.aspx
http://to/default.aspx
可惜http://to/不认。。。囧。。。。

真是失败

为了报复,从abcdefghijklmnopqrstuvwxyz0123456789/.-_这些字符排列组合的2位和3位hash的基本都指向我这个blog了。恩。python就是用来快速抢注的。

via 1, 2

十一 30

最近流传比较广的段子

GB2312的 “船” 的codepoint是 2012,“川” 是2008。。。。。

python验证:

>>> map(lambda x:ord(x)-0xA0, '川船')
[20, 8, 20, 12]

十一 28

乱逛stackoverflow的时候发现的

>>> import unicodedata
>>> unicodedata.numeric(u'⅕')
0.20000000000000001

不支持Unicode的终端没法直接即时输入即时看结果。需要保存为utf-8源码再运行。CMD需要自己调Codepage 65001才可以支持UTF-8

十一 27

左岸的 世界不是天才创造的 很不错,但是我觉得这里面有一点实验导致的偏差。

简单统计了下 最近的1000个人的结果

  1. 95.1%的人都输入的是整数
  2. 12.6%的人选择了大于66.6666666的数字,平均值是85.35。这是最有意思的结果。
  3. 很多人键入的数字都是两个连续的数字,例如11 22 33,这个占所有数据的27.1%。为什么?懒。
  4. 连续键入的数字都是小于5的,原因很简单,大家都是右撇子上网,右手拿着鼠标不方便输入。这个比例占79%。
  5. 输入时手指移动键位平均距离我没有计算,因为输入的时候不是一根指拇,而且每个人的键入习惯不一样。但是我相信人们的输入懒惰会极大影响自己想的最终数字的。
  6. 实验正确的做法是用一个可以拖拽的滑块让鼠标拖动的距离决定0-100之间的一个数。

就我自己而言,随便选了个个位数3。当然这个比较滑稽了。后来试图从数学期望的角度思考这个问题,后来觉得应该属于game theory了,wikipedia有篇介绍 Guess 2/3 of the average,丹麦一家报纸的测试结果是21.6。但是这个Nash equilibrium跟参与者(行为、受教育程度和理性认知等)有很大关系,LessWrong这个探索rational的博客得到的结果就是8.82

btw, 左岸最后提到的木桶原理,我也早就批判过了。

如果你认为世界不是天才创造的,原因很简单,你还没有达到天才的标准。

附Python简单统计源码:

>>> a=open('output.csv').read().split('\n')[:-1]
>>> filter(lambda x:x.find('.')+1, a)
['33.22', '22.22', '21.34', '61.8', '33.67', '20.61488889', '6.25', '22.2', '22. 2', '22.22222222', '23.3', '1.5', '22.2', '33.3', '22.2222222', '19.9', '33.5', '22.2', '58.8642593', '22.2', '22.2', '22.17', '22.2222', '22.22', '15.33', '14. 81481481', '14.666', '21.99740514', '13.1', '33.2', '19.7', '0.000001', '0.38673 3', '16.88888889', '22.22222222', '21.33333333', '42.6', '22.22', '33.3', '23.19 191919', '22.22', '33.3', '22.2', '22.3', '45.567', '11.1', '3.1415926', '14.5', '22.22222222', '33.58323793']
>>> b=map(float, a) >>> filter(lambda x:x>66, b).__len__() 126 >>> filter(lambda x:x%11==0, b).__len__()
>>> def left_input(n): ... n=str(n).replace('.', '') ... return filter(lambda d:int(d)<6 and int(d)>0, n).__len__()
>>> filter(left_input, a).__len__() 790
15

关键词是:www.python.org/download

不过Linux下一般都是apt-get,Windows下一般推荐安装ActivePython,这个里面有win32*的包。官站的一般不怎么用。

你说你麻痹屏蔽就屏蔽吧,首页能打开;你说你麻痹屏蔽下载吧,首页上不是有个Quick Links http://python.org/ftp/python/2.6.3/python-2.6.3.msi 这个直接下载也不屏蔽。只能说你麻痹有毛病。

更新: 多个渠道,貌似找到疑似原因了:http://www.williamlong.info/archives/1956.html

14

wikipedia上看到的

以reddit的URL为例:http://www.reddit.com/r/science/comments/9k9op/

>>> int('9k9op', 36)
16062217

16

Extracted forged IP's from G,如同猫鼠在青瓦屋顶追逐,或者,已经接近尾声,猫捕获了它的猎物,眼下正挑逗。屋里的人将衣服挂在窗外,巷子中砖瓦F的W,首尾两点之间距离没那么均匀分配,中间的社区相对密集,是嘈杂的闹市。如果有时间,哪怕你走马观花也能淘到一些W, and possible China Telecom:

>>> a=[__import__('DNS').Request().req('twitter.com', server='61.139.2.69').answers[0]['data'] for x in xrange(10000)]

and they are:
202.106.1.2
202.181.7.85
203.161.230.171
209.145.54.50
211.94.66.147
216.234.179.13
4.36.66.178
64.33.88.161

btw, IMO pydns module is much better than dnspython.

07

python -mSimpleHTTPServer虽然方便,但是对流媒体支持似乎并不好。在DonationCoder上看到人推荐mongoose,mongoose是一个很方便embedd的微型http服务器,于是我写了个python版本的,在HTTP共享URI后面加上一个 :m3u 就可以以.m3u格式输出当前目录下的文件列表。

后来想起了HFS研究一下,这玩意儿很强大,可以自定目录列表模板,还可以通过macro自定义目录列表模板的MIME,甚至HTTP头。比如我把 E:\mp3\ 通过Http File Server共享为 http://192.168.3.1/mp3/,那么 http://192.168.3.1/mp3/~files.lst 可以直接返回当前目录的一行一个文件路径格式,MIME是txt/plain。如果你用的是2.4.2开发者版本的HFS,那么可以在hfs242.exe目录下放一个filelist.tpl,内容如下


#EXTM3U
%files%
[style]

[files]
{.mime|audio/x-mpegurl.}

%list%

[file]
%item-url%

[folder]
%item-name%/

那么访问 http://192.168.3.1/mp3/~files.lst.m3u 就可以直接得到当前目录的 .m3u 格式了

这下在手机上wifi看短片可以非常方便实现上一个下一个跳转了。

mongoose虽然好,但是相比HFS有GUI流量显示,完整的log功能,随时右键一击踢人,还是HFS爽~~~