动作脚本,NativeProcess,resolvePath和swf不起作用

时间:2016-04-04 08:18:57

标签: actionscript-3 flash air

我会暴露我的问题,但首先我必须向您展示我的配置,以便为您提供所有详细信息。

我有2个虚拟机,2个窗口7.第一个,它是我开发所有Action Scripts的地方,其中有我的开发环境(IDE),第二个没有特别安装。两者都有Adobe AIR和Adobe Flash Player。

好的,这是我的问题。我开发(在第一个)一个脚本,该脚本使用NativeProcess来运行在命令行中加载dll的CMD.exe。 当我构建和运行项目时一切正常,我检查并加载了DLL。但问题是当第二个Windows连接到我的localhost网站(作为服务器的第一个窗口)并运行不加载我的dll的文件“myProgram.swf”(ActionScript程序)时。

现在我打印出所有代码:

这是加载dll“myProgram.swf”的脚本:

 public class NativeProcessExample extends Sprite
{
    public var process:NativeProcess;

    public function NativeProcessExample()
    {
        if(NativeProcess.isSupported)
        {
            setupAndLaunch();
        }
        else
        {
            trace("NativeProcess not supported.");
        }
    }

    public function setupAndLaunch():void
    {     

        var fmt:TextFormat = new TextFormat();
        var txt:TextField = new TextField();

        fmt.size = 32;
        txt.text = 'Hello, world!' + '\n' +
            'Width = ' + stage.fullScreenWidth + '\n' +
            'Height = ' + stage.fullScreenHeight;
        txt.setTextFormat(fmt);
        txt.autoSize = TextFieldAutoSize.LEFT;

        addChild(txt);


        var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
        var file:File = File.applicationDirectory.resolvePath("C:\\Windows\\System32\\regsvr32.exe");
        nativeProcessStartupInfo.executable = file;


        var args:Vector.<String> = new Vector.<String>();
        args.push("C:\\Users\\myUser\\Downloads\\myDLL.dll");
        nativeProcessStartupInfo.arguments = args;
        var process:NativeProcess = new NativeProcess();
        process.start(nativeProcessStartupInfo);
        process.addEventListener(NativeProcessExitEvent.EXIT, exitHandler);

我剪切(我删除了所有包含和结尾部分)脚本导致它太长但是这里是最有趣的部分。

现在我将向您展示我的“index.php”,其中第二个Windows连接以恢复并注入dll。 :

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
            <style type=\"text/css\">
                    body, html
                    {
                            width:100%;
                            height:100%;
                            overflow:hidden;
                    }
                    #SWFSquare
                    {
                            height: 200px;
                            width: 200px;
                            background-color: blue;
                    }
            </style>
            <script type="text/javascript" src="swfobject.js"></script>

            <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
            <script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>

</head>
<body bgcolor="#ffdfaf">



    <div id="SWFSquare">
    </div>

    <input type="button" value="Download" id="buttonDownload" style="margin-left: auto; margin-right: auto; display: block;">

    <script type="text/javascript">

            $(function() {

            $("#buttonDownload").click(function() {
                    window.open("myDLL.dll");
                    myFunction();
            });

            function myFunction() {


                    setTimeout(function(){

                            var element = document.getElementById("SWFSquare");
                            swfobject.embedSWF("myProgram.swf", element, 300, 120, 10);

                    },10000);
            }
    });

    </script>
</body>
</html>

所以我希望你能得到所有需要的信息。不要犹豫,向我询问更多信息。

所以要提醒。当我在我的开发环境(IDE)下的第一个Windows上启动我的脚本时,一切正常我的DLL被加载但是当我尝试通过连接到index.php(=第一个Windows作为服务器)加载它与第二个Windows时,SWF工作原因我在页面上获取消息“HelloWorld”,但未加载DLL ...

你能帮帮我吗?我在这工作了两个星期: - (。

2 个答案:

答案 0 :(得分:0)

首先,谢谢你们的快速反应: - )

所以,我将回答&#34; Akmozo的问题:

正如您在我的ActionScript描述中所看到的,它将使用&#34; NativeProcess&#34;运行将执行命令以加载myDLL.dll的cmd

所以,我只需要执行swf来启动所有这些。这是AIR app和swf之间的关系。我在FlashDevelop环境和每个脚本&#34; myProgram.as&#34;你&#34;建立&运行&#34;创建一个&#34; myProgram.swf&#34;文件。一旦我得到这个文件(自动创建),我只需要通过我的&#34; index.php&#34;在网上运行它。更准确地说,这段代码:

var element = document.getElementById("SWFSquare");
swfobject.embedSWF("myProgram.swf", element, 300, 120, 10);

所以,当第二个窗口连接到运行myProgram.swf的index.php时,最后我还没有加载...

那是我的问题。我有没有回答你&#34; Akzmozo&#34; ?

现在,对于你的回答&#34; VC.one&#34; 我认为应该可以在我特别准备的环境中做到这一点。 也就是说:

  • 第一个带有上次更新和补丁的Windows
  • 没有更新的第二个Windows,没有最后一个Flash Player(目前是19.0.0.206)

我是一名IT安全研究员(学生),这就是我现在正在努力解决Adobe Flash Player 19漏洞的原因。通常情况下,可以这样做,因为已经有了CVE这项工作,我会(重新)创建这个场景。但我总是坚持这个问题,我想我错过了一些东西,但我不知道它是什么......

答案 1 :(得分:0)

  

但是我总是坚持这个问题,我想我错过了什么   但我不知道它是什么......

@Akmozo是对的。 Flash Player(浏览器)&amp; AIR(OS应用程序)是两种不同的方式来运行AS3代码作为应用程序。 他们总是不一样(由于安全原因,浏览器Flash Player插件呈现的AS3应用程序更受限制,它无法在计算机上运行程序,否则黑客和病毒创建者会有用这种力量找到了天堂,通过互联网传播混乱)。

还要考虑如果从Mac或Linux浏览器运行SWF会发生什么?这些操作系统如何加载dll(因为它是一个仅限Windows的文件)​​?这打破了浏览器中的代码在任何地方都可以工作的规则,无论平台如何。

只是为了证明一点......更新你的文本域代码如下所示。在IDE测试中,它应该说(NP) Support = true,但在浏览器中,您将获得= false。当然,如果它是假的,那么你就无法从浏览器加载dll。

var fmt:TextFormat = new TextFormat();
var txt:TextField = new TextField();

fmt.size = 32;
txt.text = 'Hello, world!' + '\n' +
'Width = ' + stage.fullScreenWidth + '\n' +
'Height = ' + stage.fullScreenHeight + '\n' +
'(NP) Support = ' + String(NativeProcess.isSupported); //# check if available

txt.setTextFormat(fmt);
txt.autoSize = TextFieldAutoSize.LEFT;

addChild(txt);