Pnuts CC's Blog Flower & World, Life & Paradise.

5Jan/107

新东方flash课程破解,感激icebird的博客

最近在看新东方的flash课程(在网上搜一下,很多的),由于flash是加过密的,所以通常的flash player并不能播放。好在有Zzflash,一个专门为新东方网络课程设计的flash播放器(也同样感激这个作者),不过美中不足就是只能用在windows下。而好多时候,自己想放在手机中,没事时好翻出来看看,这个时候便需要破解flash,使它能在标准的播放器中使用。

首先说一下新东方flash的加密手段吧。一共是两个。

一、在flash的前三帧,并没有实际内容,只是一个死循环。(从后面反编译的代码来看,应该是在第三帧时不停的跳回第二帧)

二、在代码中检测url。发现不是新东方的网站,自动跳回到第一帧。

网上有几种破解方法,比方:1. 用二进制编译器替换固定的二进制序列,2. 在网页中嵌入flash,并用js控制从第四帧开始播放。可惜这两种方法都只做了第一步破解(就是跳过前3帧),虽然可以播放,但播放后不久会跳会开始处。所以这里不详细绐出这两种方法了。

(其实我在想,在网页中嵌入flash,通过修改js那种方法,只要再修改一下系统的host,把tol24.com指向目标文件应该可以,不过我懒的试了,毕竟下面有更好的方法)

IceBird的破解方法是这样的:

首先利用Flasm对swf进行反编译,得到近似于汇编的指令码,命令如下:

flasm.exe -d source.swf > target.flm

然后用文本编辑器打开生成的target.flm。第一步是去掉那个死循环。(并不需要理解每一句的含义,根据字面意思猜测一下即可)。

  frame 2
    push 'title'
    getVariable
    push ''
    stringEq
    not
    branchIfTrue label1
    prevFrame
   label1:
  end // of frame 2

找到第三帧的代码(0-based),可以看到,在某个string比较(stringEq)结果不满足时会跳到label1执行(branchIfTrue label1 一句),否则执行prevFrame跳回上一帧。所以这一步直接把那句prevFrame删了就行,不管条件如何,继续执行。(当然,把整个frame2换成一句play更好)

下面是第二个破解。强大的IceBird兄绐出了源码:

view = _url.substr(0, 4);
allURL = _url.substr(0, 60);
status = allURL.indexOf("tol24.com");
if (view != "http" || status == -1) //或者修改这两个条件
{
	_root.gotoAndPlay(1);   //或者想办法在汇编的代码中去掉这句
}

(摘自IceBird的Blog)

可以在刚刚那个flm文件中搜索"http",可以看到这样一段:

function vv ()
  push 'interval called'
  trace
  push 'view', 4, 0.0, 2, '', 15
  getProperty
  push 'substr'
  callMethod
  setVariable
  push 'allURL', 50, 0.0, 2, '', 15
  getProperty
  push 'substr'
  callMethod
  setVariable
  push 'status', 'tol24.com', 1, 'allURL'
  getVariable
  push 'indexOf'
  callMethod
  setVariable
  push 'view'
  getVariable
  push 'http'
  equals
  not
  dup
  branchIfTrue label1
  pop
  push 'status'
  getVariable
  push -1
  equals
 label1:
  not
  branchIfTrue label2
  push 1, 1, '_root'
  getVariable
  push 'gotoAndPlay'
  callMethod
  pop
 label2:
end // of function vv

这时对照上面的源码,应该很容易就把这段汇编看个大其概。可以按IceBird说的,修改条件或去掉跳转句。不过我倾向于让这个方法直接返回。就是在第二行的 push 'interval called' 下加一句branch label2。

然后保存,用如下命令编译flm:

flasm.exe -a target.flm

另外,不要忘记用如下命令压缩一下,能省不少空间的:

flasm.exe -z source.swf

至此,破解也就完成了,你可以自己写一个工具来完成自动处理。不但IceBird自己写了一个,你可以点击这里从它的博客下载。(这个破解工具对少数flash有问题,请注意篇末的补充)

再次感谢IceBird。

补充(2010/01/07):

偶然发现上文所绐的工具对某些flash不起作用,于是研究了一下源码,发现代码中有多处url验证(除去function vv),估计icebird的工具没有考虑这种情况。其实并不一定要破坏或跳过那个判断条件,让条作满足也是一个办法,而且更简单,方法如下:

反汇编(见上),将整个frame 2替换成:

    push '_url','http://tol24.com'
    var
    setVariable

然后编译压缩即可,又省事,又简单,还利于程序实现。

补充(2010/01/08):

又发现补充中绐的代码也有不行的时候(貌似是变量名变掉了),不过方法在那里,碰到不行的,手动改一下就好了。

P.S.

“驚聞ELVA母親病逝的消息 覺得非常的心疼 雖然沒有私交 不過衷心的希望ELVA堅強 節哀順變 媽媽一定伴隨著天使飛往平靜無憂的天堂 我和所有的歌迷朋友一起為ELVA心痛 ELVA加油 媽媽在天國會一直守護著你的。 From, 靜茹。”

Filed under: Uncategorized Leave a comment
Comments (7) Trackbacks (1)
  1. swf居然还有反汇编的工具,太强大了~我以前貌似听说过一个软件可以把swf反编译成fla文件的,据说可以100%还原AS,不知道是不是真的有这么厉害

  2. 看看,貌似不错的样子~~我说的是你的博客

  3. 我都是直接拖到KMP里的

  4. 加密强度不高。再加点扰码。你用FLASM反汇编也没用。

  5. Hey there! I recently desired to ask if you happen to possess
    problems with hackers? My last blog (wordpress) was hacked and
    i also finished up losing many months of effort due to no backup.
    Have you got any solutions to stop hackers?

  6. 814270 832965This internet page could be a walk-through like the data you wanted concerning this and didnt know who need to have to. Glimpse here, and you will surely discover it. 666705


Leave a comment