现在的位置: 首页 > 综合 > 正文

将exe文件剥离出swf文件

2013年09月13日 ⁄ 综合 ⁄ 共 1768字 ⁄ 字号 评论关闭

说明:该程序是将用Flash编写的,并被发布成exe文件的小游戏(如早先的著名游戏《机械迷城》)剥离成SWF文件,纯属娱乐小游戏,写着玩的,算法就不讲了,看看代码就明白了。运行环境Visual Studio C++ 2005;直接上代码

#include "stdafx.h"
#include <windows.h>

// swf文件玩具
typedef struct tagswfID {
    unsigned long int   id;
    unsigned long int   swfFileSize;
} SWFID;

int _tmain(int argc, _TCHAR* argv[])
{
    // 玩具程序2----将一个可执行档的exe转成swf文件;针对某些用Flash编写的游戏并被最终发布为exe文件,该程序可以自动剥离出swf文件
    // 玩笑程序,愚人节礼物,但绝对可用
    // 要转换的可执行swf文件(后缀名.exe)
    const char iswfFileName[] = "Samorost2.exe"; //原始SWF文件
    HANDLE hFile = CreateFile(iswfFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL, NULL);
    if(hFile != INVALID_HANDLE_VALUE)
        {
        int nFileSize = GetFileSize(hFile, NULL);
        SetFilePointer(hFile, nFileSize - 8, NULL, FILE_BEGIN);
       
        SWFID swfid;
        DWORD NumberOfBytesRead;
        if( ReadFile(hFile, &swfid, 8, &NumberOfBytesRead, NULL) )
            {
            if(NumberOfBytesRead == 8 && swfid.id == 0xFA123456 )
                {
                // 移动到该swf文件头,并生成新的swf文件
                SetFilePointer(hFile, nFileSize - swfid.swfFileSize - 8, NULL, FILE_BEGIN);
                unsigned char *buffer = NULL;
                buffer = (unsigned char *)malloc(swfid.swfFileSize + 16);
                ReadFile(hFile, buffer, swfid.swfFileSize, &NumberOfBytesRead, NULL);

                const char outputFile[] = "outswffile.swf"; // 输出的SWF文件
                HANDLE hswfFile = CreateFile(outputFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_WRITE_THROUGH, NULL);
                if(hswfFile != INVALID_HANDLE_VALUE)
                    {
                    DWORD nWriteBytes;
                    WriteFile(hswfFile, buffer, swfid.swfFileSize, &nWriteBytes, NULL);
                    CloseHandle(hswfFile);
                    }
                free(buffer);
                }
            }

        CloseHandle(hFile);
        }

     return 1;
}
程序比较小白,纯属娱乐

 

抱歉!评论已关闭.