存档

文章标签 ‘flash’

aXmag PDF to Flash Converter 绿色破解版

2010年8月5日 13 条评论

Why AXPDF PDF to Flash Converter?

It’s because we are using vector technology, vector files are very much smaller and much faster to transfer via network, and, it will be always highest quality even magnify limitlessly. See comparison details:

AXPDF uses Vector solution Others are Raster type output
Original PDF size at 308KB,
Created Online magazine file at 779KB
Download example
Same original PDF size at 308KB,
Created Online magazine file at 5.23 MB
(7 times the size of AXPDF solution)
1M connection, downloading takes: 0.78 Sec 1M connection, downloading takes: 5.23 Sec
Always highest quality on both text and icons: Blurry for all texts and icons:

Key Features

  • Convert PDF into Flash files including:
    Digital magazines, online magazines, digital catalogs, flash magazine, online manuals, interactive flyers, reports, whitepapers, newsletters, brochures, flipping photo albums and other digital documents in PDF formats.
  • Page flip simulating:
    Feel ease flipping the online e-book and have fun in reading.
  • Quick loading e-pages:
    Pages are processed for high speed online loading, with few seconds all pages will be cashed. No snoring waiting for pages loading. 
  • Zoom viewing with variable resolution:
    Zoom dynamic, zoom in, zoom all, zoom out, either way and pan pages to view details. 
  • Hyperlinks detective:
    Automatically detect http links in PDF and create hyperlinks in SWF.
  • Stand-alone version:
    Works independently of Adobe PDF reader and other 3rd party viewers.

aXmag的PDF to Flash Converter是个pdf转swf的软件,支持翻页型效果,之前52ba有位朋友求破,软件算法比较繁琐,就不去写注册机了,直接爆破之。 阅读全文…

分类: Computer 标签: ,

浅谈swf中的加密及对策

2010年5月30日 1 条评论

DelphiSwfSdk近一年没更新,作者消失无踪,留下bug一堆。最近在完善DelphiSwfSdk的过程中,对swf文件格式有了系统的了解,同时就自己比较感兴趣的as加密,也进行了一下研究。研究发现,as1,as2时代的加密,其实大部分都只能称之为“混淆”,利用混淆达到迷惑反编译器甚至卡死反编译器的目的。

就其原理,本质上只在于 反编译器  与 播放器 在处理swf文件时的细节上的差异。详述如下:
1. swf反编译器在反编译过程中,是按照swf的文件规范,将swf依次拆分为很多tag,然后如果tag中含有脚本,例如doaction或doinitaction等tag,则对这个tag中的bytecode,按照最紧凑原则进行依次读取解析,直至解析完整个swf文件。
阅读全文…

分类: Computer 标签: , ,

swf中tag整理

2010年5月27日 没有评论

swf文件格式是基于tag的,每个tag之间独立,只有引用与被引用的关系。软件在处理swf文件时,遇见不认识的tag,可以跳过处理。

截止swf 10为止,tag共有以下种类,其中有些tag已经被废弃不用。已经标出。

tagEnd = 0;
tagShowFrame = 1;
tagDefineShape = 2;
tagFreeCharacter =3;
tagPlaceObject = 4;
tagRemoveObject = 5;
tagDefineBits = 6;
tagDefineButton = 7;
tagJPEGTables = 8;
tagSetBackgroundColor = 9;
tagDefineFont = 10;
tagDefineText = 11;
tagDoAction = 12;
tagDefineFontInfo = 13;
tagDefineSound = 14;
tagStartSound = 15;
tagStopSound =16;
tagDefineButtonSound = 17;
tagSoundStreamHead = 18;
tagSoundStreamBlock = 19;
tagDefineBitsLossless = 20;
tagDefineBitsJPEG2 = 21; 阅读全文…

分类: Computer 标签: , ,

as3中的深度管理的利于弊

2010年5月5日 1 条评论

as3相比于as1和as2,引入了新的深度管理方法。从而抛弃了as1,as2时期的swapdepth和getnexthigherdepth的深度管理方法。
代替他们的是addChildAt,addChild,removeChild,removeChildAt,swapChildAt等。
广大as3爱好者无不拍手称快。
新的深度管理的方式,将深度管理的工作交给flash自身进行,提供给用户的child索引实际上是连续的,避免的as1,2时期深度不连续的问题。同时深度管理也更加直观。

但是,从我而言,这种新式的深度管理同样也带来了弊端。

以上一篇博文中提到的多页连翻中的深度管理为例,我们可以发现,在多页连翻的过程中实际上是需要不停的去创建页面,并指定z序,同时还需要不停的交换不同页面的z序。这在as3时期的新的深度管理方法下面,简直是噩梦。
此时,你就不得不单独先一个类,去实现类似于as2时期的深度管理方案。这也就要求被管理的对象必须给其重新附加一个depth属性。
以下为depthmanager类源代码。

package org.kingse.CFlipPage.Utilities {
    import flash.display.*;
 
    public class DepthManger {
 
        public function DepthManger(){
            throw (new Error("静态类,不能实例化。", 9999));
        }
        public static function getNextHighestDepth(container:DisplayObjectContainer):Number{
            throw (new Error("未实现!"));
        }
        public static function remove(container:DisplayObjectContainer, displayobj:DisplayObject):void{
            container.removeChild(displayobj);
        }
        public static function addAt(container:DisplayObjectContainer, displayobj:DisplayObject, depth:int):void{
            var i:int;
            var childrencount:int = container.numChildren;
	        if (childrencount == 0){
                container.addChild(displayobj);
                displayobj["depth"] = depth;
                return;
            }
            if (container.getChildAt(childrencount-1)["depth"]<depth){
                container.addChildAt(displayobj,childrencount);
                displayobj["depth"]=depth;
                return;
            }
            i = childrencount-1;
            var depth1:int;
            var depth2:int;
            while (i >=0) {
                depth1=container.getChildAt(i)["depth"];
                if (i-1>=0){
                    depth2=container.getChildAt(i-1)["depth"];
                }else{
                    depth2=-1;
                }
                if (depth==depth1){
                    container.removeChildAt(i);
                    container.addChildAt(displayobj,i);
                    displayobj["depth"]=depth;
                    return;
                }
                if ((depth<depth1)&&(depth>depth2)){
                    container.addChildAt(displayobj,i);
                    displayobj["depth"]=depth;
                    return;
                }
                i--;
            }
        }
        public static function swapDepths(container:DisplayObjectContainer, displayobj:DisplayObject, depth:Number):void{
            var tempdepth:int;
	        if ((container == null) || (displayobj == null)){
                return;
            }
            var nowindex:int;
            var nowdepth:int;
            var aimdepth:int=int(depth);
            try{
                nowindex = container.getChildIndex(displayobj);
                nowdepth = displayobj["depth"];
                if (nowdepth == aimdepth){
                    return;
                }
            }catch(err:Error){
                return;
            }
            var childrencount:int = container.numChildren;
            var depth1:int;
            var depth2:int;
            var i:int=childrencount-1;
            if (container.getChildAt(i)["depth"] < aimdepth){
                container.removeChild(displayobj);
                container.addChild(displayobj);
                displayobj["depth"]=aimdepth;
            }
            while (i>=0){
                depth1=container.getChildAt(i)["depth"];
                if (i-1>=0){
                    depth2=container.getChildAt(i-1)["depth"];
                }else{
                    depth2=-1;
                }
                if (aimdepth==depth1){
                    container.swapChildrenAt(i,nowindex);
                    displayobj["depth"]=aimdepth;
                    container.getChildAt(nowindex)["depth"]=nowdepth;
                    return;
                }
                if ((aimdepth<depth1)&&(aimdepth>depth2)){
                    container.removeChild(displayobj);
                    if (nowindex>=i){
                        container.addChildAt(displayobj,i);
                    }else{
                        container.addChildAt(displayobj,((i-1<0) ? 0 : (i-1)));
                    }
                    displayobj["depth"]=aimdepth;
                    return;
                }
                i--;
            }
        }
    }
}
分类: Computer 标签: ,

多页连翻型电子杂志组件原理简介

2010年5月4日 没有评论

电子杂志之风盛行于几年前,从最初的fflippage,pageflip,margpark等组件,到zinemaker,iebook等软件。相关应用层出不群。
但是就效果来说,大部分都基于国外开源的pageflip组件或者原理类似。

其中比较独特的是自在幻想(fictiony)的fflippage组件,该组件实现了多页连翻效果,在真实性上更加完善。

本文以简图探讨多页连翻型与单翻型究竟在架构上有什么不同。

先看下面的图

上图表面的是典型的电子杂志组件的层次安排图。

其中this为整个电子杂志组件,最下面两层为shadow和shadowmask,这两层在整个组件上创造出翻页是的书下面的光影效果。

再上一层是page,page就是页面内容的容器。在往上就是pagemask了,pagemask控制page容器整体的显示范围。

page这个容器里面包含最底层content,也就是内容,例如图片等,shade,中间缝隙的阴影等,contentmask是控制翻页过程中content能够够显示出来的部分。

那么这个体系结构中,page实际上是可以多个累加,进行深度管理的。每个page都有其自己的坐标,以及shade,和contentmask,这样每个就构成了多页连翻的显示结构,至于多页连翻的程序实现,就不在本文探讨范围之内了

分类: Computer 标签: , ,

谈谈Action Script Replacer

2009年9月24日 没有评论

ASR是buraks公司的三大拳头产品之一,由于官方很少独立销售,大多与asv+uae进行捆绑销售,因此网友大多难得一见。ASR究竟有这么神秘么?虽然没见过ASR真身,但我敢说我下面的一些看法也是八九不离十的。

ASR官方的介绍是:

With ASR you can;

  • See all the scripts in a SWF file. (SWF version 8 and below, Flash 8, Flash MX 2004, MX, 5, 4, 3 generated SWF files officially supported).
  • Replace any script with another compatible script that resides in another SWF file (with batch replace option).
  • Insert/Append a frame actionscript to any frame on any timeline (with batch insert option).
  • Append a frame to any timeline.
  • Change the order of InitClip actions.

总结来说,不外乎以下几个功能

1、从已有的swf中的脚本中提取一部分插入新的swf中

2、替换

3、修改swf中内置脚本的执行顺序

从这里,可以看出,你要想使用asr进行替换或插入,首先必须有一个编译后的as的来源,例如其他的一个swf文件。这是至关重要的,也是其致命缺点之一,无法将手写as编译进去。

另外,现在as已经发展到as3.0阶段,as3.0与as2.0和as1.0是从本质上就不相同的,as2.0和as1.0的脚本是分散在swf的各个元件中的,每段as之间相关性并不大,因此你可以替换一段或插入一段新的as,而对其他as造成不了多大的破坏或影响。

但AS3.0中脚本基本上都是集中的,并且相互依存性比较大,这由其面向对象编程的特点所决定,因此,当替换一段或插入一段新的as时,对as3.0的swf来说,兼容性是个极大的问题,甚至于输出的swf无法运行。

总结一下:如果我料想不错的话,ASR对AS3.0不一定会有支持,即使有,肯定也是鸡肋中的鸡肋。

PS:如上长篇大论皆为本人臆想所得,如有正在使用ASR的朋友发现某方面有出入,可以指出。

分类: Computer 标签: ,

FLASH吸血鬼的工作原理及Anti-vampire的几种思路

2009年5月29日 没有评论

继续补全之前blog的博文~~
FLASH吸血鬼是众多网友用来从exe可执行文件中提取swf的利器,其直接读取内存,从内存中取出swf文件。
经过分析,发现其原理还是比较简单的。

第一步。通过GetWindowThreadProcessId函数获得进程PID。为以后基本的进程内存搜索奠定基础。
第二步。通过OpenProcess打开前面获得的pid的进程对象。
第三步。通过VirtualQueryEx函数和ReadProcessMemory函数遍历进程的内存,在内存中搜索swf文件的文件头“CWS”和“FWS”。如果搜索到,则进行解密,并输出swf文件。

Anti-vampire的启示:
1、阻止吸血鬼得到窗口句柄
2、阻止吸血鬼打开程序内存
3、使swf文件不完整的存在于程序内存中
其中第一种实现后用起来很怪异,第二种强度凑合,但是如果吸血鬼采取一定的跟进措施,很容易搞定,第三种就目前来说,算是比较有效的。

分类: Computer 标签: , ,

URL Action Editor keygen成功~

2009年5月13日 5 条评论

RT,继解决action script viewer后又解决的一个buraksd的产品,不过可惜的是,这个并不是最新版本,而是6.0 pre-release2.不过keygen倒是兼容之后的版本的,如果buraksd不做啥变化的话:wink:
1

2
3

分类: Computer 标签: , , , , ,