欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

swf逆向可以这么玩

程序员文章站 2024-01-14 17:43:58
 天易love起因:看到沪江听写网站上的一款flash在线播放器比较实用,就打算占为己有。其间遇到了一些问题,用了一天时间彻底解决,使梦想变成了现实。  &nbs...

 天易love
起因:看到沪江听写网站上的一款flash在线播放器比较实用,就打算占为己有。其间遇到了一些问题,用了一天时间彻底解决,使梦想变成了现实。
    沪江听写网站简化后的关键代码如下:
       html.JPG下载此附件需要消耗2Kx,下载中会自动扣除。
  
    具体过程:
    首先是发现问题。通过编程发现如果直接使用该swf文件,即使改变mp3文件路径,播放的仍是先前的音频。

    其次是分析解决。

    第一步:使用SWFDecompiler4.5.exe反编译voa_player.swf得到voa_player.fla(flash源文件)、voa_player_new.as(动作脚本)这两个文件。
   
        reverse_swf.JPG下载此附件需要消耗2Kx,下载中会自动扣除。

    第二步:使用Flash CS3 Pro打开voa_player.fla,对脚本进行补丁从而增强其功能,最后编译生成新的swf文件。

    modify_1.JPG下载此附件需要消耗2Kx,下载中会自动扣除。

    modify_2.JPG下载此附件需要消耗2Kx,下载中会自动扣除。

   第三步:使用delphi编写应用软件,在flash控件中载入新生成的swf。

        程序界面如下:
         演示.JPG下载此附件需要消耗2Kx,下载中会自动扣除。

         其中的关键代码:Flash1.SetVariable(_file,D:xxx123.mp3);
             以上代码语句再配上修改后的voa_player.swf就可以随心所欲的播放MP3文件了。

具体dephi实现代码如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes,Controls, Forms, Dialogs,StdCtrls, OleCtrls, ShockwaveFlashObjects_TLB;

type
  TForm1 = class(TForm)
    Flash1: TShockwaveFlash;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public

  end;

var
  Form1: TForm1;
  path:string;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
    path:=ExtractFilePath(ParamStr(0));
    flash1.Movie :=path+player.swf;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    targetWnd:Thandle;
    r :TRect;
    point:TPoint;
begin
      Flash1.SetVariable(_file,path+1.mp3);
      targetWnd := FindWindow(TForm1,天易love);
      if targetWnd <> 0 then
        begin
          GetWindowRect(targetWnd,r);
          getcursorpos(point);
          setcursorpos(r.Left+96,r.Top+80);
          mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);  // 模拟鼠标双击 stop_btn
          mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
          mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
          mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
          setcursorpos(point.x,point.y);
        end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
    targetWnd:Thandle;
    r :TRect;
    point:TPoint;
begin
      Flash1.SetVariable(_file,path+2.mp3);
      targetWnd := FindWindow(TForm1,天易love);
      if targetWnd <> 0 then
        begin
          GetWindowRect(targetWnd,r);
          getcursorpos(point);
          setcursorpos(r.Left+96,r.Top+80);
          mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
          mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
          mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
          mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
          setcursorpos(point.x,point.y);
        end;
end;

end.