说明:该程序是将用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,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,FILE_BEGIN);
??????????????? unsigned char *buffer = NULL;
??????????????? buffer = (unsigned char *)malloc(swfid.swfFileSize + 16);
??????????????? ReadFile(hFile,buffer,swfid.swfFileSize,NULL);
??????????????? const char outputFile[] = "outswffile.swf"; // 输出的SWF文件
??????????????? HANDLE hswfFile = CreateFile(outputFile,GENERIC_WRITE,CREATE_ALWAYS,FILE_FLAG_WRITE_THROUGH,NULL);
??????????????? if(hswfFile != INVALID_HANDLE_VALUE)
??????????????????? {
??????????????????? DWORD nWriteBytes;
??????????????????? WriteFile(hswfFile,&nWriteBytes,NULL);
??????????????????? CloseHandle(hswfFile);
??????????????????? }
??????????????? free(buffer);
??????????????? }
??????????? }
??????? CloseHandle(hFile);
??????? }
???? return 1; } 程序比较小白,纯属娱乐