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