將exe檔案剝離出swf檔案

來源:互聯網
上載者:User

說明:該程式是將用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;
}
程式比較小白,純屬娛樂

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.