本人是flash小白,只会玩不会做,嘿嘿,今天就打肿脸充胖子,谈谈flash防下载技术~ 以这个 flash为例,正常浏览应该到这儿 。用迅雷探测了下,发现是调用了shell.swf(光看名字就知道是个壳),只有几十字节,下载下来反编,只有一句话Stage.showMenu = true;loadMovieNum("player.swf", 2);
。于是把域名里的shell.swf
替换成player.swf
整个flash就显示_please run index.html,shell.swf or shell.exe
_顺藤摸瓜,使用它提示的网址,直接就跳转到一开始所说的那个位置了。查看源代码,除了几句象征性的防直接访问代码外,没有找到有价值的东西。看来这个player.swf就是核心了。
下载下来有100多K,反编译之后直奔它的AS。以搜索之前flash的提示文字,定位到了判断语句loadAllSlide()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 function loadAllSlide() { var _loc2 = this.createEmptyMovieClip("ctrl", i); if (arrSlide[i].indexOf("Slide") != -1) { mc.loadMovie("data/" + arrSlide[i]); } else { mc.loadMovie(arrSlide[i]); } // end else if _loc2.onEnterFrame = function () { mc.stop(); mc.mc_Slide.stop(); bytLoaded = mc.getBytesLoaded(); bytTotal = mc.getBytesTotal(); if (!isGone) { mc_logo.ldr.text = strObj.loadInfo + " " + Math.round(i * 100 / g_totalSlide + 100 / g_totalSlide * bytLoaded / bytTotal).toString() + "%"; if (bytLoaded != undefined && bytTotal != undefined && i / g_totalSlide + bytLoaded / bytTotal / g_totalSlide >= buf) { mc = mc_load; <!--more--> isGone = true; play (); } // end if } // end if if (bytLoaded == bytTotal && bytTotal != undefined) { mc.unloadMovie(); arrLoaded[i] = true; delete this.onEnterFrame; ++i; if (i < g_totalSlide) { loadAllSlide(); } else { this.removeMovieClip(); if (_currentframe == 4) { play (); } // end if } // end if } // end else if }; }
注意到15行,就是调用的位置,可惜直接用浏览器访问../data/文件夹返回403错误,看来只有本地程序才有权限访问或者代码里做了什么手脚。故事没有下文,其他的等待高手分析了。
附上重要AU文件[下载地址](链接失效)