Laan's steps..

Feed Rss

个人一直在破解DoSWF,破解后把版权信息都改了。这个我也就不说什么了,关键是还到处发帖宣传;那这个也可以理解,可是更关键是还自己卖钱。

先前还挺佩服这个人的技术,不过看看今天发现他给我的留言:

20100427155721406

我非常的无语。鄙视一下…

判断swf是否加载完毕:

this.loaderInfo.bytesLoaded == this.loaderInfo.bytesTotal

非常抱歉,在lighttpd下,使用ff浏览器,就不正常了。bytesLoaded总是会比bytesTotal小,实际上加载完毕了也是如此。

似乎是头部数据不一样导致。知道正解的同学请留言…

改成:this.framesLoaded==this.totalFrames。这样就更保险了。

补充:
感谢lightoy的提醒:使用framesLoaded和totalFrames判断是否加载完毕可行,但是做加载进度是很不准确的。

今天写代码,发现一个问题:

package {
	public class B {
		//私有属性
		private var doo:String = "abc";

		public function test(target:B):* {
			return target.doo;
		}

	}
}

然后我在另一个类里面,这样操作:

var value = new B().test(new B());
trace(value);

竟然能输出B实例的私有变量doo。doo这个变量所在的namespace应该是当前实例中——也就是说是有当前实例中才能访问该属性。但是很不幸,测试证明在其他B的实例中也能访问。于是想到as3中属性访问的原理:MultiName。
在as3中,访问属性是通过MultiName来实现的。最基本的情况这样的:MultiName包含两个数据段,一个是name,一个namespace。当你访问一个对象的属性时,会通过name来查找该对象的属性,如果该属性名等于name,而且该属性的namespace和MultiName中的namespace也相等的话,就认为该属性就是该MultiName要访问的属性了。
我看了下swf的结构,在B类的test方法中,target.doo编译后生成的指令中,访问属性doo的MultiName中的namespace和B类中属性doo的namesapce相同。这样的话,上面这个例子就可以理解了。

接下来,我做了一个测试:

//在别类中,直接新建一个B实例,直接访问doo1。通过非严格模式编译
var b:B = new B();
trace(b.doo);

运行的结果当然会报找不到doo属性的错误。因为b.doo编译后所生成的查找doo的MultiName中所包含的namespace和和B类中doo属性的namespace不相等(name数据是相等的)。于是我将B类中doo属性的namespace直接注入到查找doo的MultiName中去。然后重新组合swf——整个世界终于清静了。

既然原理确实是这样的,我就想到是不是可以提供一个方法专门用来访问对象的私有属性呢,比如:

function getPrivate(obj:*, pro:String):* {
	return obj[pro];
}

这个想法纠结了我一个下午,最后的结论是:不可能——至少我没想到有方法可以的。主要原始是:私有属性的namespace必须是和查找MultiName中的namespace在内存中的地址一样才能访问——我尝试保持数据一样但是内存地址不一样,失败了。

联想到一个动态属性访问的问题。动态访问属性时所使用的MultiName,不包含namespace数据段,但是有一个namespace set数据段,里面包含当前域能访问的所有namespace。这样,在查找属性时,得来一个循环来比对,会消耗更多的资源。

今天写代码,发现一个问题:

package {
	public class B {
		//私有属性
		private var doo:String = "abc";
		
		public function test(target:B):* {
			return target.doo;
		}
		
	}
}

然后我在另一个类里面,这样操作:

var value = new B().test(new B());
trace(value);

竟然能输出B实例的私有变量doo。doo这个变量所在的namespace应该是当前实例中——也就是说是有当前实例中才能访问该属性。但是很不幸,测试证明在其他B的实例中也能访问。于是想到as3中属性访问的原理:MultiName。
在as3中,访问属性是通过MultiName来实现的。最基本的情况这样的:MultiName包含两个数据段,一个是name,一个namespace。当你访问一个对象的属性时,会通过name来查找该对象的属性,如果该属性名等于name,而且该属性的namespace和MultiName中的namespace也相等的话,就认为该属性就是该MultiName要访问的属性了。
我看了下swf的结构,在B类的test方法中,target.doo编译后生成的指令中,访问属性doo的MultiName中的namespace和B类中属性doo的namesapce相同。这样的话,上面这个例子就可以理解了。

接下来,我做了一个测试:

//在别类中,直接新建一个B实例,直接访问doo1。通过非严格模式编译
var b:B = new B();
trace(b.doo);

运行的结果当然会报找不到doo属性的错误。因为b.doo编译后所生成的查找doo的MultiName中所包含的namespace和和B类中doo属性的namespace不相等(name数据是相等的)。于是我将B类中doo属性的namespace直接注入到查找doo的MultiName中去。然后重新组合swf——整个世界终于清静了。

既然原理确实是这样的,我就想到是不是可以提供一个方法专门用来访问对象的私有属性呢,比如:

function getPrivate(obj:*, pro:String):* {
	return obj[pro];
}

这个想法纠结了我一个下午,最后的结论是:不可能——至少我没想到有方法可以的。主要原始是:私有属性的namespace必须是和查找MultiName中的namespace在内存中的地址一样才能访问——我尝试保持数据一样但是内存地址不一样,失败了。

联想到一个动态属性访问的问题。动态访问属性时所使用的MultiName,不包含namespace数据段,但是有一个namespace set数据段,里面包含当前域能访问的所有namespace。这样,在查找属性时,得来一个循环来比对,会消耗更多的资源。

mp3正在进行的活动:与陈奕迅同台飚歌——Eason歌曲创意翻唱大赛

特等奖1名:可以获得4月29日与陈奕迅同台飚唱的机会与演唱会门票一张
一等奖3名:奖品演唱会门票一张和Eason签名海报
二等奖5名:获一份izzue精美礼品和Eason签名海报
纪念奖60名:奖品百度小白板,百度mp3靠垫,百度usb连接器任选其一

帖一个比较喜欢的翻唱:

官方文档还说callmethod指令能提高方法调用速度。亲娘的,这不害死人嘛。这个指令根本不能执行,害我纠结了这么久:
the comments in Verifier.cpp:
OP_callmethod will always throw a verify error. that’s on purpose,
it’s a last minute change before we shipped FP9 and was necessary when we added methods to class Object.

我的亲娘啊,adobe的文档也太扯了。

见一Q友输入注册码如下

lihai

正好有个项目要用到LocalConnection。发现这个东东的跨域设置竟然不支持类似“*.baidu.com”的通配符处理。要么就是:

lc.allowDomain(“*”);

lc.connect(“_myport”);

开发所有域。但是这样做也太不安全了。又不支持“*.baidu.com”。难道我有N多个产品线就得这样写:

lc.allowDomain(“mp3.baidu.com”);

lc.allowDomain(“hi.baidu.com”);

….

lc.connect(“_myport”);

让我石化了。不应该啊….

测试了下Security.allowDomain。竟然也是一样。看来一直以来就是这样的。我也太out了…

顺便说一句获取swf所在域名的问题。一般是通过swf.loaderInfo.url来获取整个swf的路径,然后处理该路径得到域名。一个更快捷的方式:

var domain:String = new LocalConnection().domain;

去年过年回家在长沙手机被偷。狗日的,贼快的!回到北京后纠结了一个礼拜,狠心买了个iphone, 3gs 16g。

用了一个礼拜,感觉很不错。颠覆了我多年积累的操作习惯。好在有个同事比较熟,手把手的教我。

越狱的时候差点没刷成砖头。固件是3.1.3,目前是没有该固件的越狱出来,我们就在那使劲尝试。想起来后怕。现在只能装一些免费程序了。想起《紫牛》里面的内容。似乎每个用苹果产品的都不经意的成为了苹果品牌的喷嚏者。

本来是想等待ipad出来买一款,现在是不行了。严重经济危机。一段ipad的视频:http://player.youku.com/player.php/sid/39153192/v.swf

农历的正月初九是哥哥的婚礼。留个纪念(新郎照片没找到…):

DSCF1318

新娘