Skip to main content

Posts

Showing posts with the label Flash

64bit Linux 下 Flash Player (nspluginwrapper) 不响应鼠标点击

由于adobe 64bit flash player alpha的一些问题, kongregate的一些功能不支持,我只好换回nspluginwrapper 而后发现鼠标点击经常不被识别,或者说几乎完全不能识别。 根据 https://bugs.launchpad.net/ubuntu/+source/flashplugin-nonfree/+bug/410407 解决方法是 修改/usr/lib/nspluginwrapper/i386/linux/npviewer 在倒数第二行添加 export GDK_NATIVE_WINDOWS=1 其他可能的解法是 禁用 compiz 或者安装64位Flash Player

有关swf加密的一点感想

最近想把某flash游戏的1代和2代下载下来玩,但是都有域名验证,于是只好搬出decompiler 1代没有加密,结果是这么判断的 if(_url.indexOf("http://") != -1){ // ok }else{ // error } 当然直接爆破就好了 2代加了密,而且好像是swfencypt的模式,一开始是想放弃了,但是一想其实那个swfencrypt只是插了段恶心的tag,代码其实没有变,所以想碰碰运气 于是接着看1代的raw code,如下 //96 0e 00 08 00 07 01 00 00 00 08 01 07 0f 00 00 00 _push "http://" 1 "" 15 //22 _getProperty //96 02 00 08 02 _push "indexOf" //52 _callMethod //96 05 00 07 ff ff ff ff _push 4294967295 //49 _equals2 //12 _not //4c _dup //12 _not //9d 02 00 23 00 _if true goto #21 原来得到_url是靠压一个0f进栈,然后调22 然后拿ue去2代的swf里搜0f 00 00 00 22,只有一处,我晕,然后往后看,很多都和1代代码相似,只是'indexOf'的位置不一样,所以push的值也有少许区别。 由于判断的是!=,所以一般会有个not,结果不远处果然有个 12 9d, 然后把12改成01。 然后竟然就能玩了。。。 感想是: 1.swfencrypt的加密某种方面来说还是很弱 2.写代码时注意安全才是最重要的 -- 但是给程序员带来了而外的麻烦。。。 3.今天运气不错~~

SharedObject 修改器

最近破解一个Flash时需要修改它的SharedObject, 找到一些修改器,其中最好用的一个叫做.sol Editor, 主页是 http://sourceforge.net/projects/soleditor/ 只可惜只有Windows版本,但是在wine下跑得也不错。 另外就是不开源,也有点不爽。 但是它是我找到的几个修改器里最好用的一个。

本地 flash 与 html 交互

Flash提供了几个与html交互的接口, 如getURL,fscommand和ExternalInterface. 不过由于FlashPlayer的安全设置, 本地flash与html交互受到很大限制. 如果不做设置,我这里的情况是只有getURL可以用,其他两种都不行(IE和firefox),非常郁闷 当然可以上Adobe网站的安全设置管理器来更改信任设置,经过一番研究,终于发现设置文件存放在 C:\Documents and Settings\<UserName>\Application Data\Macromedia\Flash Player\macromedia.com\support\flashplayer\sys\settings.sol (Windows) Linux的还没研究过 另外,该文件具体格式也没有研究. 设置了本地信任(指定flash所在目录)后,ExtrenalInterface终于可以用了,不过fscommand只能在IE里用...不知道为什么, 不过足够了, ExternalInterface可比fscommand强大多了. 不过问题终究还是安全问题,唉,安全和用户体验总是矛盾的吧...

与 Flash 通信的问题

我一直希望能用Flash做我程序的界面,主程序当然还是用VC写,这就需要网络通信. 查了半天help,发现了XMLSocket可以用,然后开个nc当server,用Flash连,发现可以连接,Flash也可以给nc发消息,但是nc发过来的就不行了。 帮助里关于onData隐约地说明了Flash接受到的消息一定要以一个\0结尾,我一开始就是这么想的,nc似乎发不了\0,于是我就弄了个简单的VC程序,不过一开始总不行,因为我用的是std::string("some words\0"),似乎std::string会自动切掉尾部\0,于是改为std::string("haha\0",5), 啊,终于看到Flash有反应了。不错。 还有,Flash导出swf后,connect好像只会连接80端口,再转为exe就正常了,这有点好像调用外部exe的情况,估计也是为了安全吧。不过我用别的播放器,比如KMPlayer或Sothink SWF Decompiler就没这问题。 另外,据说Flash9的AS3已经没有这个问题了,我没试过,不知道是不是真的。

[转]一个swf花指令

摘自csdn文章,我就遇到过这样的花指令,使得Sothink SWF Decompiler 3.3 不能正常工作 例1 : 向前跳转的包含无效尺寸数据的死代码。 push True branchifTrue label2 constants ''" label2: push 'a',3 setVariable 你仔细看的话,会发现"constants ''"这行是垃圾代码,它不可能被执行到。然而,理论上,当第二行的结果为"not True"时,它将被执行。因此,反编译器尝试对它进行反编译。 让我们来增大"0x88 - constants"后面的"sentence size",从而包括知道脚本结尾的所有字节。你知道,反编译器将把字节码砍成像这样的3个句子: push True branchifTrue label2 constants label2: push 'a',3 setVariable 如果你试图反编译此SWF文件,根据我前面提到的4个错误,一些反编译器将碰壁。仍旧有些反编译器幸存,但只是显示:"if(false){};"。ASV 3也不能显示此脚本,但是ASV 4能够显示。为了破解这个SWF,我们移除死代码"constant xxxx", (0x88和随后两个字节),然后所有的东西都得到反编译。 例2: 先后跳转的包含无效尺寸数据的死代码。 push 'b' label1: push 'a',3 setVariable branch label2 branch label1 label2: push 'b'是句垃圾代码,我们将修改它,用来使ASV 4碰壁。让我们来修改push 'b'的"length of sentence"。修改"0x96"后面的2个字节的数据,使句子的长度增长到分支Label1之前。这样,反编译器将把字节码作为3个句子: push label1: push 'a',3 setVariable br...

CWS转FWS的C代码

原来的代码不能正常编译运行,我做了多处修改 应该是编译和运行环境不同造成的吧。我的环境是VC++2005 /* * cws2fws by Alex Beregszaszi <alex@fsn.hu> * Public domain. * * This utility converts compressed Macromedia Flash files to uncompressed ones. * */ /* * Modified by Wang Lu Feb. 6th, 2007 */ #include <sys/stat.h> #include <fcntl.h> //#include <unistd.h> //WL: no this header file in VC++ 2005 #include "zlib.h" #ifdef DEBUG #define dbgprintf printf #else #define dbgprintf #endif #define NULL ((void*)0) //WL: Dummy main(int argc, char *argv[]) { int fd_in, fd_out, comp_len, uncomp_len, tag, i, last_out; char buf_in[1024], buf_out[65536]; z_stream zstream; struct stat statbuf; if (argc < 3) { printf("Usage: %s <infile.swf> <outfile.swf>\n", argv[0]); exit(1); } fd_in = open(argv[1], O_RDONLY|O_BINARY); //WL: there wasn't O_BINARY originally, and didn't work correctly under VC++ if (fd_in < 0) { perror(...