【分享】超级菜鸟另类玩swf反汇编

抛砖引玉,说说我干的勾当,干过类似坏事情的各位也说说

去年玩弹弹堂,问题技术不行,所以想写个弹弹堂外挂.
弹弹堂是一款类似疯狂坦克的游戏,通过调节发射炮弹的角度和力度,把炮弹打到敌人的位置,把敌人打死或者击落,游戏很简单,随机的参数也只有风力一个,查询了下网上的一些资料,发现大家很多是使用一些很简单的截图,测量距离,计算,而参数的获得一般是采用图像识别的方法,使用这些办法,比较的原始,基本没有被服务器发现危险,缺点是:极其粗糙,落点计算有很大误差.

本人菜鸟一个,超级的,不懂flash编程,对上面所说的粗糙办法也做不到,看到别人用java之类的写程序只是佩服加羡慕.思索之余,想用类似编写游戏外挂的办法,注入到flash里面,直接调用flash里面的函数,但是,找了很久没有找到这方面的资料.最后,灵机一动,采用了以下方法,成功写出了一个简单又有效的外挂

首先,flash游戏,其实和普通的客户端游戏没有区别,从代码的角度上来说,其实更容易被人给破解,因为flash反汇编的时候,他的代码阅读性更强.

所以,我先把弹弹堂的loader程序下载下来,然后反编译,目的是找到主flash的下载地址和加载参数
然后把主flash下载,反编译,然后把他再次编译.

做的其实就是这个事情,但是,如何把这个flash编译成功就很累人了,虽然代码非常接近本来的面目,但是依旧有很多的错误,一一解决后,还牵扯到一个连接路径的问题,因为flash在官方网站运行,里面的图片,音乐,其他资源flash等等都是相对路径加载的,所以,还得在此基础上把他改成绝对路径.

全部ok后,自己架设一个简单的web服务器,把flash放上去,然后把加载参数写到调用flash的网页上,登陆,哈哈,成功进入游戏,现在虽然登陆的是自己的网站,但连的却是官方的游戏服务器.

可能有人会说,没看到外挂啊,只是,整个客户端代码都在手上,想加什么功能就加什么功能了
我给自己的弹弹堂flash加上了计算弹道的功能,红色的弹道清晰,准确,发射炮弹的时候,完全是循着轨迹过去的,做不到百发百中,不过是指哪打哪了

这里,我没有任何的贴图,代码之类,只写了思路,不是我保密,因为写这个帖子也是刚刚看了其他人的帖子,所以写的,时间过去快1年了,又因为重装系统,游戏更新,现在的代码都失效了,贴出来也没用,当初也录像过,只是也找不到了,写在这里,只是想说下,flash游戏,只要想搞外挂,比其他游戏更可怕,完全的内置式,想怎么搞就怎么搞

起因:看到沪江听写网站上的一款flash在线播放器比较实用,就打算占为己有。其间遇到了一些问题,用了一天时间彻底解决,使梦想变成了现实。
    沪江听写网站简化后的关键代码如下:
       名称:  html.JPG
查看次数: 2110
文件大小:  102.4 KB
   
    具体过程:
    首先是发现问题。通过编程发现如果直接使用该swf文件,即使改变mp3文件路径,播放的仍是先前的音频。

    其次是分析解决。

    第一步:使用SWFDecompiler4.5.exe反编译voa_player.swf得到voa_player.fla(flash源文件)、voa_player_new.as(动作脚本)这两个文件。
    
        

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

    名称:  modify_1.JPG
查看次数: 2097
文件大小:  21.2 KB

    名称:  modify_2.JPG
查看次数: 2090
文件大小:  77.1 KB

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

        程序界面如下:
         名称:  演示.JPG
查看次数: 2088
文件大小:  15.9 KB

         其中的关键代码:Flash1.SetVariable('_file','D:\xxx\123.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.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值