Hacking ipad (2)

Step 2. Cydia和SSH 上回说道,装了一个Cydia。他默认带了一些安装库的列表,大概有什么三四个,国内有两个还不错的source,一个是tgbus的,一个是weiphone的,tgbus的似乎还更加全一些。如下: http://iphone._tgbus_.com/_cydia_/ http://app._weiphone_.com/_cydia_/ 怎么使用Cydia很容易搞明白,那么几个按钮按按就出来了。第一个打算装的就是OpenSSH,可是很快就发现,这个Cydia有问题,总是报:cache failed, host unreachable之类的,即使我从tgbus安装也是如此。根据“你不可能是第一个”的原则,搜了一下,weiphone上有人提出了一个解决方案,就是替换Cydia的一个官方source。可是我现在又没有shell,又没有iFile之类的,怎么去编辑那个文件呢?最后还是在iPad里设上Proxy,连过去,就好了,有点奇怪,不知道Cydia为什么要这么做。Proxy的log显示,装Open SSH的时候访问了这些文件: http://cache.cydia.saurik.com/api/package/openssh http://iphone.tgbus.com/cydia/.//debs/cydia-3.7//openssl_0.9.8k-9_iphoneos-arm.deb http://iphone.tgbus.com/cydia/.//debs/cydia-3.7//openssh_5.2p1-8_iphoneos-arm.deb http://cache.cydia.saurik.com/api/package/openssh 不知道它为什么在安装前后要访问cache那个站点。而且我直接访问那个文件现在似乎又是通的了(不是host unreachable了),不过总是返回403 forbidden。很奇怪。有功夫再研究一下。 SSH装了之后好像是自动启动的,不过还不知道是在哪个脚本或者配置里,不过已经可以登录了。root的密码是alpine,苹果默认的。我给机器指定了一个wifi的IP地址,就可以连上了!不过,比较诡异的事情是,Cydia默认安装的那些东西里居然没有ps这个命令,ps在adv-cmds这个包里,需要新安装!没有ps,失去了很多窥探的乐趣。 好了,装上了,来窥探一下到底跑着哪些进程: sma-mato-iPad:/usr/bin root# ps -ef UID TIME CMD 0 0:03.80 /sbin/launchd 65 0:01.23 /usr/sbin/mDNSResponder -launchd 0 0:06.18 /usr/sbin/notifyd 0 0:00.87 /usr/sbin/syslogd 0 0:27.02 /usr/libexec/configd 501 0:00.11 /usr/sbin/BTServer 501 12:39.09 /System/Library/CoreServices/SpringBoard.app/SpringBoard 0 0:00.26 /System/Library/PrivateFrameworks/CoreTelephony.framework/Support/CommCenter 0 0:10.09 /usr/libexec/lockdownd 0 0:02.79 /usr/sbin/fairplayd 0 0:00.02 /System/Library/CoreServices/MobileStorageMounter.app/MobileStorageMounter 0 0:05.22 /usr/libexec/locationd 501 0:01.05 /System/Library/PrivateFrameworks/DataAccess.framework/Support/dataaccessd 501 0:01.04 /usr/sbin/accessoryd 501 0:02.70 /usr/libexec/lsd 501 0:00.08 /System/Library/SystemConfiguration/EAPOLController.bundle/eapolclient -i en0 -u 501 -g 501 0 0:06.54 /usr/sbin/sshd -i 501 0:10.90 /usr/sbin/mediaserverd 501 0:40.64 /Applications/Installous.app/Installous 0 0:28.12 /usr/sbin/sshd -i 0 0:03.36 /usr/libexec/sftp-server 0 0:00.04 /System/Library/Frameworks/SystemConfiguration.framework/SCHelper 501 0:01.23 /usr/libexec/installd -t 30 0 0:00.48 -sh 0 0:00.01 ps -ef 其中,lanuchd大概相当于传统Unix的init,是所有进程的爸爸进程。 mDNSResponder据说是Bonjour 的一个组件,提供multicast DNS(DNS multicast? 啥意思?)服务,可能只是一个DNS解析器吧?好像没有看到Bonjour 的进程诶。 SpringBoard就是iPad的主界面。有Hacker们对这个进程也做了手脚,搞了一些WinterBoard,SummerBoard来改变默认的屏幕,挺有意思。。 eapolclient是无线网的客户端吧,大概相当于wpa_supplicant? Installous和installd是我正在搞的事情,下回再说。 ...

八月 6, 2010 · Shawn Ma

Hacking ipad (1)

搞了一个ipad,第3次入手苹果的产品(前两个是ipod)。 从设计上来说的确很不错,132 DPI的IPS屏幕很亮丽,虽然没有iphone 4的Retina那么厉害,但是显示也是很细腻。苹果的A4处理器内置了GPU,各种动画效果也没有什么停滞感。但是缺点也是很明显,第一条就是不能多任务,主要是一些MSN QQ之类的东西每次打开必须重新登录,就很麻烦。第二是,在我们家的网络里,wifi很不好,从路由器ping过去,有30%的丢包,后来据说多频段路由器就会有这个问题,就改成了G only,还是不行。我也升级了据说解决这个问题的3.2.1的固件,依然没有起色。不过今天在公司的表现不错,355个包一个没丢。可能是公司的路由器比较好吧。 苹果最有趣的当然就是它的app store了,不过app store里的免费软件大多很无聊,稍微像样一点的就要收费,而且有的比如keynote就实在太贵了,咳咳,只能hack一下了。这篇(系列)文章就记录一下这个过程里面的有趣的事情;另外hack一个系统本身就是一件很有趣的事情,有时候这个过程比真正的目标比如keynote还要有趣。不过为了让自己的同行有口饭吃,尊重别人的劳动,有些便宜的软件还是打算去买一下的。 Step 1, 越狱(Jail Break) 简而言之,越狱的目标是让ipad可以装任何的软件,给它撕开一个口子让我们可以进去,装一些比如像ssh和GNU那套东西。以前ipad的越狱软件是叫Spirit,不过可能在我的新固件上用不了,所幸就在前两天,一个叫jailbreakme的网站发布了,直接访问这个网站就可以越狱了,试了了一下,真的很方便。看了一下它的源码,没太搞明白,中间有很多计算的脚本,还用一个pdf文件创建了一个Image的javascript对象,倒是让我觉得ipad的浏览器是不是有什么严重的漏洞,是不是很不安全? 越狱的结果就是安装了一个叫Cydia的程序。这个程序用类似Debian Linux的方式来安装程序,通过package好的deb包就可以把应用装进系统了,这个主要是用来装一些第三方的应用,比如ssh。越狱的过程还会默认给你安装好一些简单的命令行工具,比如GNU Core Utils,bash,apt,diff等等。不过比较搞笑的是,虽然安装了这些程序,但是并没有办法使用它们,因为我没有办法获得一个shell!接下来还是要装个ssh,这样就可以登录到ipad上去了。可是用Cydia装ssh并不是那么简单——得感谢我们的伟大的长城。 PS,Ipad的浏览器Agent字符串是: Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B405 Safari/531.21.10 待续。

八月 5, 2010 · Shawn Ma

《独唱团》

在amazon买了一本韩寒的《独唱团》,本来说是缺货的,没想到第三天就送来了。现在越来越喜欢这个比我还小上不少的家伙了,真希望有他那样的敢说话力量。 内容还没仔细看,估计是跟老六的《读库》应该有些类似。字很小,密密麻麻的,还有很多的彩色插图和照片,倒是很对得起14块一本的价钱。(莫非是给娃的小画书?)就冲是韩寒的第一本“杂志”,顶!

七月 14, 2010 · Shawn Ma

拔牙

去拔了两颗智齿,一个是阻生的,另外一个是它对应的那一个。其实他们也没发炎,不过总是塞牙,很难过,而且导致了它边上的一个槽牙有牙周炎了。医生很好,护士力气也挺大,阻生齿砸碎了,变成两半,还有两个小牙根,一共分成四份才出来的。上面那个长的好的,医生只一挺,就出来了,看了看,还真不小。拔两颗牙只用了10分钟,跟等麻药的时间差不多。现在半边脸还是麻木的,希望下午不要发烧/发炎。 一颗牙80元,外加止疼药,抗生素,全口X光等,一共530元。比起我们同事在美国治一颗牙,需要自己掏500美元(一共若干千美元),还是便宜很多啊。

六月 18, 2010 · Shawn Ma

理想的Tokyo Tyrant

敝公司在使用Tokyo Tyrant这个高性能的key-value DB,总的来说,性能相当不错,不过在数量达到50M之后有明显的瓶颈,以至于我们3000的TPS都有点困难了。究其原因,是因为我们用的是hash db,文件大了以后,任何一个写操作都在硬盘不同地点,于是就是对硬盘的完全的随机写,在我们的RAID10上,也只能做到100多IOPS,可想而知,效率是多么的低下了。 其实最直观的解决方案就是换SSD硬盘,比如INTEL的MLC SSD硬盘号称可以达到8500 writes/second。不过这个可能需要一些沟通和批准的工作,而且对于Engineering最有意思的就是在现有的条件下,实现最大的可能,所以,我们可以做点什么呢? 不立刻写入硬盘,而是类似Cassandra和Redis那样,只写入redo log(ulog),就返回。另外在后台有一个线程,定期将dirty data写入硬盘。这个写入应该是顺序写入的,以避免随机写的问题——我们的硬盘顺序写可以有80M/s,还算不错了。 这也就意味着要缓存不少的数据,为了高效,所有的写数据都应该被缓存——很可能会被读,不过现在内存应该也不是大问题,而且我们的TT跑了一段时间之后,对硬盘的读就没有了——全部被操作系统缓存了,所以读不是什么问题。 写入线程要考虑如何和其他的线程一起工作——它不能锁住所有的线程,所以考虑是不是把数据库分段?可以参考以下redis之类的? 删除的处理,删除了数据之后就留下空穴,那么必须要有一个defragment的线程。更新等同于删除+新增。 如果该进程crash了,重启的时候要replay redo log,这个跟上一点有关系,因为可能不能得到一个完整的某一个时刻的snapshot。 要能支持多台机器的master-master复制,master-slave比较麻烦,failover之后还要手动切换。应该是都是没有任何区别的master,因为他们的数据都是相同的。我们的数据特点是,量大,不过每条数据都不大,100字节足够,所以并不是很需要consistent hash。 为什么不用Redis?Redis要求所有的数据都在内存里,对于我们公司的应用来说,有时候有点困难——想象如果有1亿条记录,光hash的bucket(64 bit)就要0.8G,用mmap还是靠谱一点。最好是常用的在内存里,不常用的就待在硬盘上就好了。我们的数据大概一半以上都很不常用。 Cassandra也试了一下,不过似乎有更多的问题,它的读效率实在太低, 因为需要从硬盘load sstable,这个就是一个随机读的问题的,再用Java实现,读的TPS只有不到100. 解决方案就是使用Key cache和 Row cache,不过那又是把很多数据load在内存里,而且warm up似乎很慢。(为什么会比Tokyo慢?)

六月 15, 2010 · Shawn Ma

面试题

请听题: 一个屋子里有三个人,如何在不互相知道工资的情况下,得出三个人工资的平均值?

六月 10, 2010 · Shawn Ma

电子书

买了一个Sony的电子书,PRS-600。 说起买电子书,还是颇折腾的一件事。一开始在淘宝买了传说中的机王,Onyx boox 60, 2700元。不过拿回来的时候发现那个机器的按键有点磨损,而且浏览器里面有不少上网记录,估计可能是个样机之类的,怒,退了。这个Onyx是挺酷的,支持wifi,还是上网,对html支持也很好,不过玩了一会觉得也就那么回事,上网实在没有太大的意思——要知道它一秒钟才刷差不多一次,现在那么多ajax的网站,痛苦死了,还有一个缺点就是它的触摸屏必须使用笔才可以点,另外就是有点太重了。后来从米国买了一只Sony PRS-600,原因之一就是可以用手直接翻页。美国的PRS-900,7寸屏的也才合2500,不过那个就更重了,拿着太累。什么时候这玩意做成彩色的,真的跟纸一样厚,而且可以折叠,就美了。 这个东西的特点就是不主动发光,看东西不像看萤幕一样,时间长了眼睛疼。不过现在技术还是不够好,字不够黑,背景不够白。Sony这个因为加了一层触摸屏,还经常反光。不过也不算太贵,就当个玩意吧。 回来之后还要自己汉化,还好网上都现成的,用上当年在moto烧板子的功夫,稀松平常的就搞定了。用了一个多礼拜,大概充电一次可以翻1000页左右,还算凑合吧。附靓照两张。。。

六月 10, 2010 · Shawn Ma

20100607

有时候人的表现欲来了,就什么都愿意说。有时候又懒到数月无话。 今天有两个有意思的事情。其实也没什么大不了的,不过还算好玩。 一个是我们一个同事启动敝公司的一个WLS server,折腾了一天,总是起不来,WLS刚启动之后就报,shutdown hook被调用了,然后就死了。作为前BEA的员工,被认为是专家,于是就得帮人消灾。先是以为是terminal退出导致SIGHUP造成的,不过一看WLS的参数里有-Xrs,看来不是signal的问题。难道有人在后台kill?用truss跟踪一下,居然看到了有SIGSEGV的消息,不过看起来不像,要是真SIGSEGV了,早就core dump了。后来想,还是老老实实配一个debugger,跟踪一下System.exit()吧。一直不想搞这个是因为eclipse连美国的机器特慢,WLS的线程又超多(我们自己也在WLS里启线程),后来就练习了一下jdb. 虽然不够好用,不过做这个事情还是够了。要是真的是production系统上,还真可能只能用这个东西了(最好永远别用上)。结果很简单,license check的程序调了System.exit(),update一下就好了。 另外最近比较迷python。发现这个东西写程序的确比较简洁,在很多情况下可以提高productivity。比如他是不需要编译的。比如他的语法很灵活。今天学到的是用它分析一个C程序生成的数据文件。是什么C程序呢?Tokyo Tyrant,一个memcached的变种。效率不错,附带持久化。但是不知道为什么某些值总是插入失败。我们的工程师没有什么头绪。Python如何分析呢?当然得根据这个文件的结构来。这个文件(hash的数据库)先是256字节的header,然后是hash bucket*8byte的hash桶,桶里是每个record在文件中的偏移,其实就是一个索引啦。再后面是一个不知道多大的free record list,大概是指出文件中的空穴(delete带来的)。然后就是一个一个的record。 一开始还不明白该怎么搞,后来发现它的str可以放任何东西,其实就是一个byte array。(python没有byte[])。然后还有一个很强大的struct包,很容易就可以解析C的那种struct的内容。比如: from struct import * f=open(‘database.tch’,’rb’) header=f.read(256) meta=unpack(“<32x2xbb4xQQQQ184x”,header) print meta 就可以得到(4, 10, 10485751, 3154959, 388634224, 83890432),其中10485751就是bucket的大小,83890432则是第一个record的偏移量。然后从256byte开始遍历10485751个hash值,把非0的偏移的记录都读出来,结果发现,所有的199M-228M之间的内容全是0。于是得出结论说,在那个时候,应该是发生了点事情,比如硬盘满了。。。 嗯哼。满意了。不过python的IO似乎有点慢,CPU使用率很低。还要加油啊。Java现在已经很不错了。

六月 7, 2010 · Shawn Ma

价值观

看江苏台的非诚勿扰,发现台上的不少女生真的是太SB了。尤其是那个24岁的林若愚,居然被她们全部灭了,显然主持人和乐嘉都看不过去了。我觉得林若愚真的很不错,虽不说家产之类的如何,这个人24岁就那么成熟,比他上一个那个LA来的小伙显得稳重,而且我觉得他对女朋友的要求完全没有问题,尤其是“希望女生独立,不要完全依赖男方”的要求,说白了,就是要“门当户对”。这个的确是很重要,否则真的成立家庭之后就是很多的矛盾。没想到那个农村姑娘自卑心理发作,把他骂了一顿,这个可以理解,也没什么,不过10号袁媛真的是太SB了,问了很多不搭调的问题。于是我感叹道,人真的是要基于相同价值观才能在一起,用老外的话说,share the same value。这个搞笑的舞台的确不太适合林若愚同学。 要是我将来有个儿子要能成这样就很好了,不过不用那么肌肉。。。

五月 29, 2010 · Shawn Ma

CNNIC ROOT CA

惊闻CNNIC已经成功的打入浏览器,成为默认的根证书的一员。验证了一下,果非其然。莫非SSL以后也要被GFW了?不过那样CNNIC的ROOT CA会被各个浏览器吊销吧。 试想CNNIC给*.google.com颁发一个证书,装在GFW上,这样任何连往Google.com的SSL都不会有任何警告,但是你的任何内容都会被嗅探了。理论上来说,路由器在中间,总是有办法的,所谓人为刀俎,我为鱼肉啊。 PS,最近google推出了buzz,放在gmail上,会不会影响gmail的安全性……

二月 11, 2010 · Shawn Ma