Colin Work Shop (C)
Name: Colin Xu
Occupation: SW Engr.
Location: Shanghai, PRC
Ycool Blog  >>>>   Colin Work Shop  >>>>
   About Colin
Name: Colin Xu
Gender: Male
Interests: Symphony & Piano Sonata
Movie & Drama
Reading & Blogging
Badminton
Travelling & Hiking
Handiwork
Computer Science, programming
   Time & Date
   Categories
   · All(176)
   · Feelings(46)
   · Game(9)
   · Handiwork(6)
   · Miscellaneous(53)
   · Technology(55)
   · Uncategorized
   Recent Comments
   Friends' Blogs
   · My WordPress
   Trackers' Blogs
   Google Search
Google
  Crack & Keygen Search
www.astalavista.ms
订阅 RSS
      Colin Work Shop
                        some little works
   Blog
Colin Xu @ 2012-01-05 18:16

Win8弱爆了,这个还能用。

Windows密码验证之MsvpPasswordValidate



 
Colin Xu @ 2012-01-02 23:30

Week 1
keywords: hotel, Niagara, jet lag, work, car rental

据说前台mm帮忙订机票酒店时总是考虑很周到,果然如此。机票订的是靠走道的座位,而且去时旁边没人,一个人很舒服。

以前好像没坐过Boeing 777. Air Canada给AC-087/AC-088配的都是777-300ER机型。YY一下什么时候能去体验A380和787,协和已经没机会了。由于是自西向东飞,所以其实一直能看到太阳。为了调节时差,全程是不允许打开遮光板的。空乘中有华裔的,不知道是从国航招的,还是在CA当地招的华人,英语没有中国口音,汉语有点但又不是台湾腔,空少空姐都30来岁的样子;也有空"姨",年纪蛮大了,还在做空乘,身上香水味很重。接近14个小时的航程是够长的,所以看了有4部电影,包括猩球崛起这种新片,还有就是看地图,从实时GPS可以看出,直飞飞得并不"直",绕到北极圈去了,经过了西伯利亚,白令海峡,阿拉斯加这些地方。最高海拔和飞行速度不记得了。飞机座位右前方有的男的挺惹眼的,又是拖鞋颈枕又看书,然后经常跑到前边一个mm旁边搭讪,开始以为是留学的,后来到了公司才发现原来是自己同事,哈哈。看看飞机上的人,猜着他们的职业与身份,也挺有意思。有的一看就是国内某机关去考察的;有的是去探亲,给移民的子女照看小孩子;有的人一句英语也不会说,去旅游的;也有手拿蓝本本的美国籍中国老太太。

大约是晚上7点抵达的YYZ(Pearson International Airport)。落地后两个感觉,一是冷,10月中旬,气温已经降到了6-7°,据说11月初就会下雪了;二是人少,虽然同时也有几个航班降落,但机场并不拥挤。清洁厕所的黑大叔,聚在一起聊天的黑哥们保安,拉着警犬巡视的女警。整体感觉上和浦东、虹桥还是很不相同,一种说不出的感觉,大约就是那种"成熟的发达国家+萧条+老龄化+人少"的集合体。犹豫了一下,没有直接租车,毕竟晚上了,又不熟悉交通,还是等白天吧。取了行李就打车去酒店了。

出租司机是个印度个哥们,问了目的地,设定好GPS,就朝着Markham出发了。一路闲聊着,也就很平常的问问哪里来,第几次来,来做啥之类的。是辆SUV,听说经常能打到林肯这种豪华车,后来和同事又去了一次机场,就坐了一回林肯。加国的涉及人工服务的收费都很高,比如出租车就是,大约30km的路,不算tips花掉,很贵的。怪不得老外到了中国都使劲叫车,实在便宜啊。给小费的时候土了,给了100他找我20,我自己算错了所以又看看他,于是他又给我5块,我才反应过来其实80就OK了,但这时候也不好把5块再还给他了,于是赶忙说谢谢,然后要了receipt,下车自己把箱子扛下来。后面吃饭给小费的时候就好多了,算多了就不大容易算错了。

Check-in,入住。后来回国之后同事和我说,入住的时候可以办一张VIP卡,算积分,回国后很多地方能用,比如航线里程,4星级送一晚之类的。当时前台小哥没和我提这事,也许他给自己积分了。。。之所以订这家酒店,一方面因为离公司近,步行5分钟就到,还有一个重要原因是有早餐,而且每周有3天也有晚餐的,所以基本上出差的同事都会订这家。

和航班座位一样,酒店房间的位置也很恰当, 4/5F,离电梯比较近。房间挺大的,感觉有20平米,大床房。还有厨房,设施很全,电炉灶,冰箱,微波炉,洗碗机,咖啡机,以及各种餐具,有食材基本完全可以自己做饭吃了。第二天还有活动,所以联系一下家里报个平安,就洗洗睡了。

第二天约好了,老爸的一个前几年移民到这里的同学带我去看瀑布,所以很早就起来了。下楼吃完早餐,正好人也来了,于是出发去瀑布。从小就很有方向感,从不迷路,所以一路都很清楚我们是在朝哪个方向行进。基本就是沿着Lake Ontario边缘开,大部分时间都会在QEW(The Queen Elizabeth Way)上,一条还挺有历史的路。有一段我们没有在桥上开,而是在乡间小路上,看了看普通民居,也进了家卖建材的超市逛逛。

然后就到了Niagara Falls。前几天刚下过雨,于是水发土黄色,而不是原有的白色。时隔一周再去,颜色就好看多了。我们把车停在靠近上游的一个公园内(43°04'06.71" N 79°04'02.98" W),就开始步行向瀑布进发了。在拍照片的同时,感受着大自然的力量。虽然是世界七大奇迹之一景观,却没有拥挤的赶脚。不像某地,一到节假日,甚至双休日也是,感觉就是去看人的。除了各国的游客,还有不少当地居民,来散步的,来锻炼的,牵着各式狗狗,在大自然的怀抱中尽情享受。当时真有一种马上来这里定居的冲动。在一块石头边静静的坐了一会儿,呼吸着这里的空气,看着巨大的水流,听着轰轰的水声,什么都不去想,真的是非常放松的10分钟。游客也各有特点。比如感觉是从欧美来的,夫妻两人带着2-3个孩子;从中亚,南亚来的,上下3代一大家子;老太太旅游团,看长相就知道是日本或者韩国的;各种喧哗的,一看就知道是国内来的。单从相机上也能看出诸多不同:亚洲面孔的装备基本都比较高级,长枪短炮各种单反;欧美的,还在用傻瓜机,甚至以前的老式摄像机。

Niagara Falls由3部分组成,Horseshoe Falls(43°04'40.50" N 79°04'32.08" W), American Falls(43°05'05.17" N 79°04'10.61" W), Bridal Veil Falls(43°05'00.71" N 79°04'15.51" W).加国这一侧比美国那边具有更好的欣赏角度。

逛完瀑布,拍了足够多的照片,就又去旁边的小镇(43°05'27.66" N 79°04'32.51" W)上看看。一个以旅游为主的小镇,摩天轮,鬼屋,游乐场什么的,还有Skylon Tower, 适合从高空俯视瀑布全景,一家IMAX剧院,播放瀑布相关的影片。在镇里绕了一圈回来,等到晚上瀑布开灯,又拍了一点照片。可惜没带三脚架,不然能拍出很美的瀑布夜景。

夜景看差不多,就打道回府了。等我到酒店,已经晚上11点了。来去的路上,还去参观了一下他一个亲戚家的房子,去了一些公园看看,以及一家华人超市-大统华(T&T),去买了点水果和吃的。赶快洗洗睡啊,第二天还要上班。。。

第一周工作,以熟悉环境、认识人、以及修bug为主。没办法,谁让快递从台湾到北美只要3天,而到大陆可能要3周呢,所以台湾同时宁肯把客户平台寄到北美让我修bug,我来是做项目的啊本来。。。周一早上开会,给Markham的同事分了一下我带来的小吃。担心他们有人不吃花生,所以就从来伊份买了各种蜜饯话梅。想了半天,怎么翻译呢,preserved plums吧,好在都能理解。公司里华裔面孔挺多的,当然有些人只会广东话。也能看到大胡子爷爷,像爱因斯坦一般,以及年纪很大了仍在做工程师的老外。

作为出差员工,有一点挺好的,那就是没有没完没了的会议!每周只需要参加一次他们的sync-up meeting,也没有人各种人来问问题,其他时间都能安心干活,于是挺有效率的。前一周多,搞定10多个issue。据老大说,那个月team的统计数据,我帮了很大忙。。。

刚下飞机的第二天就去了瀑布,还没什么时差的感觉。而工作的这周可是累坏了,每天下午3点开始就巨困无比,晚上回去就要睡了,半夜12点再醒,然后醒醒睡睡折腾一晚上。这样的状况等第一周快结束了才好转,时差总算倒过来了。大概是年纪大了。。。

还有件大事就是要租车。没车,真不行,靠步行只能在方圆2km活动,再远就走不动了。而且这里公交不方便,是极其不方便,具体的后面再说。刚下飞机没租是考虑晚上不方便开,要规律上班了,可真得租个车,后面还有一个月呢。先去酒店附近的Time Square,有家Thrifty。本来都搞定了,结果我把信用卡拿出来他们说不行,说这是debit card,不是major credit card不收,怎么解释都没用,于是作罢。再让国内一起来的同事载我去附近一家Herz,当天也不能租,说这里车少,一定要提前预约才可以,又作罢。一直折腾到周四,有个同事要回国了。因为机场租金比较便宜,而且有GPS,于是就和他一起做taxi到机场(林肯), 我送好他,然后租了车再从机场开回来。租车那里也是个印度哥们,已经提前在网上预约,办好手续很快就搞定了,Nissan Sentra开始不会用GPS,完全凭感觉开,开了很久觉得怎么还没到啊,于是开下高速,好好研究了一把GPS,找对方向,又继续开了回来。好在没开错方向。终于有车了,接下来的行动就自由多了。其实事后想想我还真胆大,拿了驾照以后就没开过,都敢直接租了车上高速,也是对自己的技术有信心吧。另一个租了车的同事就没那么顺利了,也是新手,然后租的车各种擦碰,以至于还的时候要交赔偿金了。

来简单说说吃饭,主要是早餐。整体的饮食最后再总结吧。
酒店有早餐,所以不用担心早餐。说起来,我吃得真是多啊。。。
每天吃的有,注意是每天:
果汁/水
牛奶泡脆谷乐/粥
面包+果酱/黄油
薯角若干,水炒蛋,一片培根,一块烤牛肉
水果,酸奶
很能吃有木有...
在家里,基本就是一杯牛奶两片面包的水平,周末的话吃个煎饼什么的,绝对不碰油的东西。。。
午饭晚饭都在外面解决的,几乎都吃中餐。胃似乎还不适应每天西餐,而且也贵啊。。。而且去T&T买过几个盒饭,万一懒得出去也可以自己在房间里凑合。

总得来说,第一周就是调整的一周,各种方面的适应吧。睡不好觉真是痛苦。

几张照片:

Horseshoe Falls. 开往瀑布中心的小船叫Maid of the Mist, 迷雾少女号。一周以后就体验了一把。



American Falls & Bridal Veil Falls



Rainbow Bridge, American Falls, Bridal Veil Falls. 这张是傍晚拍的,有点晚霞的感觉。



好大的鸟,不知道是什么品种,不太怕人,可以走很近。



Skylon Tower



controlling the Niagara River



枫叶即将变红的枫树。下周过来,树叶全红了。请看下一篇博文。



seagull on the water. 这是抓拍的水面上的一只海鸥。



海鸥都不怎么怕人,我还有近距离的一张。



边上的绿地,画面中的建筑是类似于活动中心的地方,有吃饭,卖纪念品,还有卖一些景点门票的,当天中午在这里吃的Tim Hortons,属于老外口味的汉堡,完全冷的,火鸡肉。远处的建筑是Casino,这次没人带所以没去。



绿地。就觉得空气好,草绿,然后很冷。。。



Power Station



晚上打了灯的Horseshoe Falls。这天没带三脚架,第二周过去带了三脚架但是没等到晚上。就凑合看看吧。



手持拍夜景的后果.




 
Colin Xu @ 2011-12-29 18:20

回来之后一直忙,忙到连安心听一会儿音乐的时间也没有。正好趁休假,事情也忙差不多了,抽出时间写掉。

在此之前没出过国,港澳台新马泰也包括在内。所以借出差的机会,补补经历也挺好的。

最早大概是5月份知道要出差的,然后就去把护照先办好。接下来就各种折腾吧,计划不断改变,时间不断调整,等最终确定是Q4都已经是8月份的事情了。然后就抓紧去签证了。公务签证比较快,印象中2-3周就好了(当时没记,于是具体时间都不记得了。。。)。然后签证的时候也挺折腾的,主要是准备不足。先是证件照,为了符合标准,就在photo booth里拍的,结果不收100的纸币。。。然后跑出去把钱换开,回来再拍。材料交上去,付钱,靠,差100,现金没带足。。。于是又跑出去银行取现。签证过程,没什么过程,交完材料就结束了。应该不是因为公务原因所以容易吧,大概是看我长得不像坏人,恩。大楼里有很多国家的签证中心,英国比利时什么的。CA这里基本没人,但隔壁好像是南非还是哪里,人很多。。

签证好之后,让前台小mm帮忙订酒店,订机票什么的,行程安排算是确定下来了。由于预算的原因还延期了一周,这样来回机票能省2000多。也不知道到底是大老板精打细算呢,还是代理商坑爹,总之就是又多折腾了一下,否则还能赶上Thanksgiving,趁机休个假。

自己也没准备什么,淘宝了一个26'的外交官,然后把本本上用的软件折腾好,skype充值,换外币,信用卡提上限,各种材料复印,翻译驾照,列购物清单之类的。


 
Colin Xu @ 2011-07-06 23:25

上次讲到了OAF的文件格式,经过后来进一步的分析与研究,发现有点问题,在此修正一下,并更新新的研究成果。

仍然还是四部分组成,file header, zlib stream offset table, zlib stream, file name and tree structure table,结构上没有问题。

1). File header. 文件头。
文件头到0x14这里结束了。0x1开始8的4个byte应该算作是表项的开始。

2). Zlib stream offset table. zlib数据流偏移表。
这部分的起点应该从0x18开始,而不是上次分析的从0x1C开始。
每一项的组成.hash在最前,而不是上次说的数据起始偏移在最前。
0x0: 4 bytes. 文件名hash值。这一部分的算法也是最近的反编译研究成果。
0x4: 4 bytes. zlib压缩包起始偏移。
0x8: 4 bytes. 是否压缩。0x10000000表示压缩过。
0xC: 4 bytes. Raw data size. 未压缩数据的大小。
0x10: 4 bytes. Packed data size. 压缩后数据的大小。如果为0则说明这一表项指向的数据没用压缩。

其余两部分没有变化。

接下来要说一下文件名的hash算法。

DS3中对字符串都会做hash计算,主要用于对OAF包中的数据进行校验,以判断是否非法。当然,一旦知道了校验方法,那么就可以随便替换了...
分析过程就不写了,挺长一段汇编计算,耐心就好。我用C重写如下。传入参数seed始终为0x2A.

注意两点:
1)反斜杠back slash要转化成斜杠slash
2)文件名都是小写的.但不要强制都转化为小写,因为DS3中其他大写字符串也用到了同样的hash算法。

最后顺便求教,有人知道这种算法有什么具体名字么?对hash算法不熟...

DWORD hash(const char * string, unsigned int length, DWORD seed)
{
    char str[MAX_PATH] = {0};
    char *pstr = str;
    strcpy_s(pstr,MAX_PATH,string);

    unsigned int lengtToHandle = length;

    DWORD x = 0;
    DWORD y = 0;
    DWORD z = 0;

    x = length + seed - 0x21524111;
    y = length + seed - 0x21524111;
    z = length + seed - 0x21524111;

    while (*pstr != 0)
    {
        if (*pstr == '\')
            *pstr = '/';
        pstr++;
    }

    pstr = str;

    while(lengtToHandle > 0xC)
    {
        x += *pstr << 0x18;
        x += *(pstr + 0x1) << 0x10;
        x += *(pstr + 0x2) << 0x8;
        x += *(pstr + 0x3);
        y += *(pstr + 0x4) << 0x18;
        y += *(pstr + 0x5) << 0x10;
        y += *(pstr + 0x6) << 0x8;
        y += *(pstr + 0x7);
        z += *(pstr + 0x8) << 0x18;
        z += *(pstr + 0x9) << 0x10;
        z += *(pstr + 0xA) << 0x8;

        z += *(pstr + 0xB);
        x -= z;
        x = ((z << 0x4) | (z >> 0x1C)) ^ x;

        z += y;
        y -= x;
        y = ((x << 0x6) | (x >> 0x1A)) ^ y;

        x += z;
        z -= y;
        z = ((y << 0x8) | (y >> 0x18)) ^ z;

        y += x;
        x -= z;
        x = ((z << 0x10) | (z >> 0x10)) ^ x;

        z += y;
        y -= x;
        y = ((x << 0x13) | (x >> 0xD)) ^ y;

        x += z;
        z -= y;
        z = ((y << 0x4) | (y >> 0x1C)) ^ z;

        y += x;

        lengtToHandle -= 0xC;
        pstr += 0xC;
    }

    switch(lengtToHandle)
    {
        case 0xC:
            z += *(pstr + 0xB);
        case 0xB:
            z += *(pstr + 0xA) << 0x8;
        case 0xA:
            z += *(pstr + 0x9) << 0x10;
        case 0x9:
            z += *(pstr + 0x8) << 0x18;
        case 0x8:
            y += *(pstr + 0x7);
        case 0x7:
            y += *(pstr + 0x6) << 0x8;
        case 0x6:
            y += *(pstr + 0x5) << 0x10;
        case 0x5:
            y += *(pstr + 0x4) << 0x18;
        case 0x4:
            x += *(pstr + 0x3);
        case 0x3:
            x += *(pstr + 0x2) << 8;
        case 0x2:
            x += *(pstr + 0x1) << 0x10;
        case 0x1:
            x += *pstr << 0x18;
    }

    z = z ^ y;
    z = z - ((y << 0xE) | (y >> 0x12));

    x = x ^ z;
    x = x - ((z << 0xB) | (z >> 0x15));

    y = y ^ x;
    y = y - ((x << 0x19) | (x >> 0x7));

    z = z ^ y;
    z = z - ((y << 0x10) | (y >> 0x10));

    x = x ^ z;
    x = x - ((z << 0x4) | (z >> 0x1C));

    y = y ^ x;
    y = y - ((x << 0xE) | (x >> 0x12));

    z = z ^ y;
    z = z - ((y << 0x18) | (y >> 0x8));

    return z;
}


 
Colin Xu @ 2011-06-28 00:46

Initial version of DS3 OAF file packer.

Usage: OAFPacker <template OAF file> <directory to pack> <output file>

Example:

OAFPacker D:\data_localized_en.oaf D:\Data D:\patched.oaf

http://www.rayfile.com/zh-cn/files/b26ff354-a0db-11e0-8e78-0015c55db73d/

Future work:
Add Zlib compression support.
Add checksum calculation.