我要继续呼吸,因为明天太阳还会升起,谁知道潮水会带来什么。
May
19
类打包下载
下载文件 (已下载 100 次)
SWF 类提供5个方法操作Tag 。
editTag 修改Tag内容
delTag 删除Tag内容
addTag 添加新的Tag 。可以自己打包进去很多东西。
doCompress() 方法 压缩flash ,重新写入flash的时候要压缩一下。
swf.editTag82To72(); 一个比较特别的方法 ,把tag 82改成 72 是为了加密需要。老版本的破解工具不认这个tag。但是flash player认的,所以可以加密。写了这几个类其实就是为了把82改成72,搞完了才发现新版本的破解工具已经认了,崩溃啊。火星了。
SWFDecode 类是拆分swf tag 的。
解析代码参照了 abcdump的实现 。
使用方法demo :
这里有小日本的比较强大的,我自己写的自己能用就行了,简单。
http://www.libspark.org/wiki/yossy/swfassist
下载文件 (已下载 100 次)SWF 类提供5个方法操作Tag 。
editTag 修改Tag内容
delTag 删除Tag内容
addTag 添加新的Tag 。可以自己打包进去很多东西。
doCompress() 方法 压缩flash ,重新写入flash的时候要压缩一下。
swf.editTag82To72(); 一个比较特别的方法 ,把tag 82改成 72 是为了加密需要。老版本的破解工具不认这个tag。但是flash player认的,所以可以加密。写了这几个类其实就是为了把82改成72,搞完了才发现新版本的破解工具已经认了,崩溃啊。火星了。
SWFDecode 类是拆分swf tag 的。
解析代码参照了 abcdump的实现 。
使用方法demo :
package {
import com.lionar.swfdecode.*;
import flash.display.Sprite;
import flash.events.Event;
import flash.filesystem.*;
import flash.net.*;
import flash.utils.ByteArray;
public class AIR extends Sprite
{
private var bytes1:ByteArray;
private var swf:SWF;
public function AIR()
{
var uld:URLLoader=new URLLoader();
uld.dataFormat=URLLoaderDataFormat.BINARY;
uld.addEventListener(Event.COMPLETE,onComplete);
uld.load(new URLRequest("1.swf"));
}
private function onComplete(e:Event):void{
bytes1=ByteArray(e.target.data);
var swfde:SWFDecode=new SWFDecode();
//拆分swf为一组tag 。
swf=swfde.decodeSWF(bytes1);
for(var i:Number=0;i<swf.tags.length;i++){
trace(Tags.tagNames[swf.tags[i].type]);
trace(swf.tags[i].code);
}
//删除77 tag Metadata
swf.delTag(77);
//修改82 tag 为 72 tag 。老版本的破解工具不认这个tag。但是flash player认。可以加密。
//折腾了这么多其实就是为了把82改成72,搞完了才发现新版本的破解工具已经认了,崩溃啊。火星了。
swf.editTag82To72();
//加入新的tag
var d:ByteArray=new ByteArray();
d.writeByte(0);
var tag:Tag=new Tag();
tag.lengthFlag=0x3F;
tag.type=182;
tag.length=1;
tag.data=d;
swf.addTag(tag);
output();
}
private function output():void{
//输出修改过swf文件。
var f:File=File.desktopDirectory.resolvePath("output.swf");
var file:FileStream = new FileStream();
file.open(f, FileMode.WRITE);
file.writeBytes(swf.doCompress());
file.close();
}
}
}
import com.lionar.swfdecode.*;
import flash.display.Sprite;
import flash.events.Event;
import flash.filesystem.*;
import flash.net.*;
import flash.utils.ByteArray;
public class AIR extends Sprite
{
private var bytes1:ByteArray;
private var swf:SWF;
public function AIR()
{
var uld:URLLoader=new URLLoader();
uld.dataFormat=URLLoaderDataFormat.BINARY;
uld.addEventListener(Event.COMPLETE,onComplete);
uld.load(new URLRequest("1.swf"));
}
private function onComplete(e:Event):void{
bytes1=ByteArray(e.target.data);
var swfde:SWFDecode=new SWFDecode();
//拆分swf为一组tag 。
swf=swfde.decodeSWF(bytes1);
for(var i:Number=0;i<swf.tags.length;i++){
trace(Tags.tagNames[swf.tags[i].type]);
trace(swf.tags[i].code);
}
//删除77 tag Metadata
swf.delTag(77);
//修改82 tag 为 72 tag 。老版本的破解工具不认这个tag。但是flash player认。可以加密。
//折腾了这么多其实就是为了把82改成72,搞完了才发现新版本的破解工具已经认了,崩溃啊。火星了。
swf.editTag82To72();
//加入新的tag
var d:ByteArray=new ByteArray();
d.writeByte(0);
var tag:Tag=new Tag();
tag.lengthFlag=0x3F;
tag.type=182;
tag.length=1;
tag.data=d;
swf.addTag(tag);
output();
}
private function output():void{
//输出修改过swf文件。
var f:File=File.desktopDirectory.resolvePath("output.swf");
var file:FileStream = new FileStream();
file.open(f, FileMode.WRITE);
file.writeBytes(swf.doCompress());
file.close();
}
}
}
这里有小日本的比较强大的,我自己写的自己能用就行了,简单。
http://www.libspark.org/wiki/yossy/swfassist
Apr
28
解决办法:
第一:ExternalInterface.addCallback("xxxx",xxx); 要写在document类里面,不要写在其他类里面。
第二:初始化 ExternalInterface.addCallback做以下延迟。
package {
public class application extends MovieClip
{
public function application(){
this.addEventListener(Event.ENTER_FRAME,init);
}
public function init():void{
this.removeEventListener(Event.ENTER_FRAME,init);
ExternalInterface.addCallback("xxx",xxxxxxx);
}
}
}
如果不是写在document类里面,延迟也没用。
第一:ExternalInterface.addCallback("xxxx",xxx); 要写在document类里面,不要写在其他类里面。
第二:初始化 ExternalInterface.addCallback做以下延迟。
package {
public class application extends MovieClip
{
public function application(){
this.addEventListener(Event.ENTER_FRAME,init);
}
public function init():void{
this.removeEventListener(Event.ENTER_FRAME,init);
ExternalInterface.addCallback("xxx",xxxxxxx);
}
}
}
如果不是写在document类里面,延迟也没用。
Jun
29
FlexBuilder基于eclipse开发,参数的说明即eclipse的参数说明。
1. 各个参数的含义什么?
参数中-vmargs的意思是设置JVM参数,所以后面的其实都是JVM的参数了,我们首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。
- 堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。- 堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。- 非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。- JVM内存限制(最大值)
首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。
Jun
5
Jun
1
常数 值 描述
vbKeyLButton 0x1 鼠标左键
vbKeyRButton 0x2 鼠标右键
vbKeyCancel 0x3 CANCEL 键
vbKeyMButton 0x4 鼠标中键
vbKeyBack 0x8 BACKSPACE 键
vbKeyTab 0x9 TAB 键
vbKeyLButton 0x1 鼠标左键
vbKeyRButton 0x2 鼠标右键
vbKeyCancel 0x3 CANCEL 键
vbKeyMButton 0x4 鼠标中键
vbKeyBack 0x8 BACKSPACE 键
vbKeyTab 0x9 TAB 键
May
31
以前自己做的时候习惯在一个类里面写一个方法 clear() ;
当需要销毁的时候调用clear() ,clear 会 unload removeChild ,removeEventListener 。。。。
http://l4cd.net/blog/article.asp?id=55
看到这个方法也不错
可以借用显示对象中的Event.REMOVED,在删除对象的时候,让对象自己调用删除函数,删除相关的东西
可以根据需要选择是单独写一个clear函数,还是用上面监听removed 自动的clear。
当需要销毁的时候调用clear() ,clear 会 unload removeChild ,removeEventListener 。。。。
http://l4cd.net/blog/article.asp?id=55
看到这个方法也不错
可以借用显示对象中的Event.REMOVED,在删除对象的时候,让对象自己调用删除函数,删除相关的东西
可以根据需要选择是单独写一个clear函数,还是用上面监听removed 自动的clear。


