在运行时将AS3或ABC注入swf文件?

时间:2015-04-17 21:46:22

标签: actionscript-3 flash code-injection

我已经看到一些浏览器游戏的工具,它们将代码注入到swf文件中,以便自动化游戏的某些部分。

我一直在阅读有关swf flash格式的文章,我还不知道这可能是怎么回事,也许该程序使用自定义Flash播放器运行swf文件?

如果你可以指导我,我将非常感激,这非常有趣。

1 个答案:

答案 0 :(得分:0)

试一试:

var actionString:String = "methodAddOne";
var paramString:String = "1";

function methodAddOne(num:String):void{
    trace(Number(num)+1);
}

this[actionString](paramString); //trace: 2

对于params队列:

var actionString2:String="methodAdd";
var paramString2:String="1,2,3,-6";

function methodAdd(nums:String):void{
    var params:Array= nums.split(",");
    var out=0;
    for each(var num:Number in params){
        out += num;
    }
    trace(out);
}

this[actionString2](paramString2);// returns 0

所有计算,核心方法,......你必须解析。非常复杂... 例如。尝试解析并计算“1 + 2 + 3-6”。它当然可能,但很难用其他东西和数学语法。

因此,更简单的方法是使用所有方法提供基于字符串的Api 用户可以使用params预定义使用。

像这样:

var stackString:String = "methodAddOne(100); methodAdd(1,2,3);";

function parseFunctionsString(str:String):void
{
    //better use regExp at all the following
    var f:String = str.substring(0,str.indexOf("("));
    var p:String = str.substring(str.indexOf("(") + 1,str.indexOf(")"));
    // clean spaces // also better regExp to validate some other user mistakes - just for this test in this way
    f = f.replace(" ","");
    p = p.replace(" ","");
    //trace("** "+f+"  ("+p+")");
    if (this[f])
    {
        this[f](p);
    }
    else
    {
        trace("unknown function: "+f);
    }
    str = str.substr(str.indexOf(";") + 1,str.length - str.indexOf(";") + 1);
    if (str.length > 2)
    {
        parseFunctionsString(str);
    }
}

parseFunctionsString(stackString);
// trace:
// 101
// 6

作为一个想法...问候安德烈