这篇文章是几年前写的,当时发布在我的博客中,由于我的博客已经年久失修,这几天就把博客中的内容都搬运到这来分享给大家。现在4399小游戏的积分系统好像已经没有了,很多flash小游戏也都已经下架,猜测未来会朝着H5页游方向发展,但这篇文章也能学到逆向思路和技巧。

偶然看到这个游戏,挺难玩的,而且把马里奥画的有点丑,今天我们就来通过对这款游戏的反编译来分析4399积分系统是什么样的以及修改积分上排行榜。

通过截包我们可以得到游戏的真实地址:

http://szhong.4399.com/4399swf/upload_swf/ftp5/haibo/20110511/1/mainload.swf

积分函数JS:

http://www.4399.com/jss/playerbg_jifen20140301.js

下载swf文件,用FFDec打开,可以看出这个swf是个Loader,载入的是二进制数据中的gamefile:

导出二进制数据,重命名为swf文件,再载入FFDec,然后分析代码:

显然这个swf也是个Loader,用于在游戏中显示排行榜、提交积分、即时获取游戏内的积分通过js传递到html页面显示等。
我们目的是修改积分,所以只要在这个积分传递过程中做手脚就可以了。来试试吧!

定位到提交分数的地方:

这里可以看出是和js相互通信,js中这个函数的地方:

其中提交积分的关键函数是:

get_max_soure(gameid,user4399id);//更新当前分数

这个函数有两个参数,一个是游戏id,一个是自己的4399id

游戏ID在flash常量定义中可以找到:

4399id可以进入你的个人主页中看到:

我们继续寻找积分调用的地方

就在这里,调用了js中的rdscore,我们去js中看看这个函数:

显而易见,我们调用这个函数就能改变面板上的积分

Javascript:rdscore('50000');

我们再执行

get_max_soure(gameid,user4399id);

提交积分

结果排行榜的分数依然是之前游戏内的分数。

为什么呢?让我们分析下提交积分的函数

可以看出这个函数只是更新了面板的数据,然后更新成就。数据是来自:

http://score.4399.com/get_topscore_forusercenter.php?callback=?&game_id=56259&user_id=1881037144

因此我们继续往上跟:

提交积分原来在这里!

LoadBytes相当于一个post请求,第一个参数是url,是常量:

private var URL_SCORE:String = "http://score.4399.com/submitscore_forusercenter.php";

第二个是个事件参数

他这里使用了匿名内部类来实现,用来和js进行一些交互

第三个参数就是post的参数了。就是这些:

我们截包后可以看到数据如下:

token=980a942d3fa726ec4b3d2e556c771aab&score=750&verify=bf621be32ad6654830c4e8d64e8393b1&autocommit=1&game%5Fid=56259&gs=1&time=1454063544314&game%5Fkey=a6231db93dfa5af2&starttime=1454062807192&uid=1881037144&username=hookd3d

其中有些数据是加密的,我们来一一解析:

Token:

其中URL_TOKEN是常量

http://score.4399.com/get_token.php

流程就是访问这个php得到

&token=980a942d3fa726ec4b3d2e556c771aab

然后去掉前面7位

得到980a942d3fa726ec4b3d2e556c771aab就是token

Score:这个没有加密,直接写任意数字即可

Verify:

这里一些的代码被混淆了,经过混淆处理后

我们可分析得出

Verify是由

"SDALPlsldlnSLWPElsdslSE" + temKey + lGameScore + gameID + starttime + gs + _tokenData + "PKslsO";

然后进行三次MD5得出的

我们再分别分析调用到的这些变量分别是什么

TemKey:

   private function getIntegraKey() : String{         var _loc1_:String = MD5.hash(MD5.hash(this.gameID + "LPislKLodlLKKOSNlSDOAADLKADJAOADALAklsd" + this.gameID)).substr(4,16);         return _loc1_;}

这里算法很清晰,我们可以直接调用

lGameScore:

 

应该就是游戏的分数

gameID:

56259

Starttime:

   var _loc2_:Date = new Date();   this.starttime = _loc2_.getTime();

取当前时间 可以直接用

Gs:

当前关卡 取值来自这里

_tokenData:

就是上面获取的token

继续分析下面的参数,

Autocommit:

为1提交后自动看排行为0不自动看排行。

game%5Fid:

也就是game_id:56259

Gs:当前关卡 和上面一样取值第一关就是1

Time:

var ts:String = md.getTime().toString();

应该是时间

game%5Fkey:

game_key 

      private function getIntegraKey() : String{         var _loc1_:String = MD5.hash(MD5.hash(this.gameID + "LPislKLodlLKKOSNlSDOAADLKADJAOADALAklsd" + this.gameID)).substr(4,16);         return _loc1_;}

也是个简单的算法,可以直接调用

Starttime:

var _loc2_:Date = new Date();this.starttime = _loc2_.getTime();

游戏开始时的时间。

uid=1881037144&username=hookd3d

这个就不用说了吧。

好了全部分析完了,可以看出我们关键要得出的参数是Verify。因为其中包含当前分数,我们修改了积分,这个值就也会变。

而其他的参数根据游戏不同而不同,这里我们仅测试这一款游戏,其他参数通过封包中已经得出,就不一一生成了。 所以要模拟POST请求修改积分只需计算出Verify即可,这里我们直接修改flash来修改分数。

分数的变量是lGameMidScore,与之相关的是

看到这里我们可以知道,上面我们修改的函数只是网页上显示的数据而已,并没有赋值到flash中提交分数中的变量Score,所以那些修改是无效的。

this.lGameMidScore = this.lMain.score + this._totalscore;

从这行代码看出

这里面分数来自于lMain.score

lMain就是loader的游戏类的了。

这里有很多修改点,我们为了方便,就直接改他获取的地方吧

给他加五万

变成这样

然后改下当前关卡,防止被检测到我们是作弊


 他是从游戏中获取的关卡数


 估算了下应该是有10关,就改成10吧

OK,保存看下效果

结果是运行后闪退。

这是由于这个flash是混淆过的,而FFDec处理不完全,所以导致内存错误闪退

修改文件不行的话我们可以使用Loader来修改,但是介于篇幅,我们还是直接改游戏主文件吧

导出后再载入FFdex

找到启动类

找到分数初始化的地方:

直接改50000

关卡也要改

保存之后依次替换回去,来看看效果怎么样:

结果是分数变动了,但是一开始游戏又全部清零了。

这是因为4399的Loader初始化的时候会把分数清零

但是这里获取的还是我们修改的50000


只是提交按钮不可用。

这时候我们上面分析到的提交分数函数就有用了

在浏览器地址栏输入:

Javascript:get_max_soure('56259','1881037144');

可以看到已经上了排行榜第一名,我们的目的也就达到了。

内网通修改积分文件_【页游逆向】4399小游戏积分系统分析及修改积分相关推荐

  1. 批量修改html文件内容,批量修改word文件内容 批量修改WORD文件的页眉页脚

    批量修改多个Word文档内容 同时批量修改多个word文档步骤1把要批量修改的文档都放在同一个文件夹中同时批量修改多个word文档步骤2在修改前,先确定多个word文档文件要被修改的内容如小小要修改的 ...

  2. 人民币决定页游未来——8166网页游戏行业分析

    过度提高付费玩家的满足感,迅速攫取游戏利益,无疑是"杀鸡取卵"!近日,百度网页游戏<九州三国>因为一场国战因免费玩家战胜了付费玩家,引起了RMB玩家的吐槽.进而事态转变 ...

  3. 网游放缓页游疾进 客户端游戏会被取代吗?

    2010年,延续了十年高速增长的网络游戏陷入增长的瓶颈期.进入下半年以来,游戏公司营收增长放缓.裁员等新闻不断出现,让习惯了高速增长的游戏行业颇不习惯.不过,在不那么给力的去年,网页游戏却依旧实现了超 ...

  4. HTML5游戏_基于DOM平台跳跃小游戏开发_9.按键监听

    HTML5游戏_基于DOM平台跳跃小游戏开发 按键监听 视频讲解 HTML5游戏 效果图 本章知识点: 对象自定义名称属性,可以用变量来命名属性名称 //这段代码把多个属性(品牌, 型号, 排量)赋给 ...

  5. mysql修改游戏元宝_页游源码【武斗乾坤】自带安装启动教程+元宝游戏数据修改教程+自由一键游戏启动服务端...

    页游源码[武斗乾坤]自带安装启动教程+元宝游戏数据修改教程+自由一键游戏启动服务端_站长下载 资源说明: 1.本资源为一键启动服务端,只需要安装好所需组件一键启动即可运行. 2.资源默认为单机架设,无 ...

  6. Ubuntu18.04下用信使与Windows下用内网通互传文件

    1.前言 前段时间把自己的笔记本装了Ubuntu18.04.因为是五年前的笔记本了,配置有点跟不上了,之前一直用的win10,后来想反正这个旧本本没啥用了,索性在折腾折腾,装个Linux系统玩玩,于是 ...

  7. c#小游戏_.NET手撸2048小游戏

    前言 2048是一款益智小游戏,得益于其规则简单,又和 2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎" FlysEngine,从空白窗口 ...

  8. Android逆向 微信小游戏破解(一):我要当皇上满级修改

    1.我要当皇上的wx小游戏修改 首先游戏长这个样子, 我的长这个样子 1.首先需要用的到的工具,抓包工具,postman 抓包工具有很多,自己百度一下吧.我用的是charles,这个是mac版本的.W ...

  9. 挖掘:如何用迅雷下载4399小游戏站内的所有游戏

    偶然一次无聊想玩玩flash小游戏,于是就百度了一下,随意进了一个网站--4399,然后漫无目的瞎看,点了一个叫特技摩托3的小游戏,不玩不知道,一玩就从此爱不释手,可是每次玩都要打开网页,然后再等它加 ...

  10. python tkinter火柴人_用Python实现童年小游戏俄罗斯方块!别说还挺好玩!

    原标题:用Python实现童年小游戏俄罗斯方块!别说还挺好玩! 前言 大三上学期的程序设计实训大作业,挑了其中一个我认为最简单的的<图书管理系统>来写.用python写是因为py有自带的G ...

最新文章

  1. 关于印发《会计电算化管理办法》等规章的通知
  2. MMDetection-运行时
  3. SNAT,是源地址转换,其作用是将ip数据包的源地址转换成另外一个地址
  4. 程序员自身价值值这么多钱么?
  5. [Angularjs]ng-select和ng-options(转载)
  6. think php left join,Thinkphp两张数据表left join怎么让相同字段不被覆盖?
  7. Linux排查java程序CPU占用过高问题
  8. 传播路径图调查2013年初
  9. 使用vue-cli+axios配置代理进行跨域访问数据
  10. hbase中为何不能向表中插入数据_MySQL数据库中表记录的增、删和改操作
  11. php serialize参数,php serialize(),unserialize()
  12. 12款网盘搜索神器以备不时之需要
  13. 申报快结束!2022年武汉经开区在孵企业房租申报奖励补贴补助、申报条件材料
  14. 《大天蓬》片尾升华,燃情!
  15. 两部手机怎样才能把数据都传过来_新旧手机怎样互传数据?
  16. 一个 vue 登陆页面
  17. metaspolit提示Exploit failed: You must select a target.
  18. AI:2020北京智源大会与五位图灵奖得主和100多位专家《共同探讨人工智能的下一个十年》——6月21日~6月24日的日程安排(实时更新,建议收藏)
  19. 举例理解transformer中的位置编码
  20. Python跨文件全局变量的使用技巧

热门文章

  1. STM32F407 硬件IIC驱动MCP4017 数字电位器
  2. android 谷歌地图离线访问,Android版谷歌地图更新 新增离线浏览功能(图)
  3. 数据库存储过程讲解与实例
  4. windows_98.css—— 实现Win98效果的网页样式
  5. Tribon参数化建模之__对型材端切的参数化建模解析
  6. emWin—数字软键盘
  7. (二十三)美萍酒店管理系统:系统维护_系统设置_商品设置_添加类别、添加商品
  8. 农民讲习所建立通用程序 7 设计通用按键扫描模块
  9. 如何在OTN网站下载Grid方法(Oracle RAC)
  10. Java不能做游戏?快来看看这个Java版超级玛丽吧。