swf/flash/web/perl/game/iphone/crack
2012-04-23flash

1条评论

一篇关于applicationDomain的好文

http://www.senocular.com/flash/tutorials/contentdomains/?page=1

这周忙工作

这周忙工作, 总算把一些一直悬在心头的事情给解决了一部分。 由于前端的逻辑复杂性,导致服务器不可能运行跟客户端一模一样的逻辑。

为了防WG和一些数据同步的原因, 我们把一些关键点整理了出来, 交给后端做运算和校验。

继续命令行运行AS3

前几天laan跟我说avmshell可以在命令行下跑AS,

于是我又重新看了一下redtamarin的文档

其实以前我稍微研究过一些tarmarin的东西

http://www.swfdiy.com/?p=697#more-697

当初觉得要在命令行下引用已有的AS3库时很麻烦, 因为AS3编译时一般会生成好多ABC,在运行时需要一个一个import进来。

后来我还花了几天时间专门做了一个合并ABC的工具, 不过后面并没有怎么用到就放起来了。

在redtarmarin文档上看到了一个技巧可以编译已有AS3库到一个单独ABC的方法,这里整理一下:

首先是新建swc工程,引入已有的AS3库。

跟目录下放入一个includeall.as, 里面写

include "xxx.as"
include "yyy.as"

然后在根目录下进行ant处理,build.xml内容

在根目录ant之后会生成test.swc, 重命名成test.zip,把library.swf取出来,

abcdump.exe -a library.swf 取到library.abc(这就是我们要的东西了)

运行avmshell的时候引入library.abc, done.

泪奔,终于把前几天写的游戏搞到手机里跑了

升级了MAC OS到10.6.8,又升级了xcode到4.2, 重新nme update 了一下,终于可以build到手机上了。。泪奔。。。

今天使用nme写了个小游戏

今天睡到12点才起来,开始折腾写代码。

游戏很简单, 在8*8得格子里会随机出现6种颜色的方块, 点击方块可以移动, 移动后如果发生了5个以上方块排成一行(横竖斜),则消掉方块,如果没有消掉, 则系统继续产生几个方块,当全部格子被系统填满的时候, 游戏结束。

实现思路很简单,稍微费点心思的是用haxe写了一下A*寻路。

编译成swf可以正常运行,target到mac上,运行时出现异常。。也不知道哪里出错了。用代码注释的方法慢慢排除原因, 最后怀疑是数组的sort使用了自定义函数。 注释掉重新用另外一个写法,就正常了。。

target到ios-simulator也没问题。

打算放到真机看看, nme自动生成的xcode project打开后发现base sdk missing, 怀疑是我的xcode版本太低,需要装个4.3的试试。

目前正在缓慢的下载xcode。。。

小假日第一天

今天破解并学习了某个新休闲页游的代码, 有点小收获, 更多的是失望。 这么老牌的游戏厂商,代码逻辑如此混乱, 我费了很大力气才把整个游戏的思路基本理清。

明天下雨的话估计还是宅在家里, 写个 PPT, 另外再用nme写个小游戏玩玩。

一个页游的破解过程

今天下班后花了3个小时的时间才把一个流行页游破解出来,:(

这里记录一下这个游戏的加密方式。

首先是素材文件和模块文件, 都是swf, 他们都加了壳, 但是解壳代码在主文件中。而且解壳代码使用alchemy进行编写。

主文件本身使用了doswf 加壳。

破解步骤:

1. 尝试使用自编写的内存抓取工具抓取主文件SWF, 失败。 估计是doswf做了干扰措施, 内存中查看出来有无数个差不多尺寸的SWF, 无法知道是哪一个。 等以后时间有空需要完善一下内存抓取工具了。。

2. 直接找到doswf加壳后的主文件, 使用自编写工具(haxe), 去掉乱码的symbol, 并去掉doswf加入的花指令, 同时去掉同名函数的干扰(扩展strings常量池并修改multiname中得字符串引用)后, 可以清楚看到doswf的解壳代码, 真正的主文件隐藏在 一个Binary Tag里面。

3. 继续使用haxe编写小工具,保存Binary Tag的数据存成本地文件

4. 仿造doswf的解壳代码,解出真正的主文件, 这时才发现主文件里需要使用alchemy对素材和模块代码进行解壳。

5. 新建AS3工程, 编写宿主SWF, 并引入假接口: CLibInit.new().init().解壳(…)

6. 使用工具(swfdiy)把主文件的的DoABC Tag导出为 0.tag

7. 把0.tag替换入 宿主SWF

8. 执行宿主SWF, 可以成功读取素材和模块代码SWF,并成功解壳。

搞定。。。

哎,还是内存抓取方便啊。

返回顶部