谈谈flash防下载

本人是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文件[下载地址](链接失效)