吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11745|回复: 16
收起左侧

[Android 原创] 听鬼哥说虐心的2048简化过程

  [复制链接]
听鬼哥说故事 发表于 2014-8-21 21:37
本帖最后由 听鬼哥说故事 于 2014-8-22 10:55 编辑

从开发转到逆向破解,开始准备写博客后,朋友们说,想看一些好玩的游戏分析过程,简单一点,最好是会开发的人员能完成的,那么本篇就不讲反编译追踪代码实现方式了,写给一些开发者朋友来对自己喜欢的小软件进行破解。
flappybird火了一阵子之后,又出来一些小游戏,使得部分人爱不释手,欲罢不能,在游戏出来以后,我也玩了好长一段时间了,看着空间里面整天有人晒着自己的得分,那么咱们就一起来看一下,如何实现刷分的过程。

0x01:简单试玩一下,体验游戏乐趣
我们试玩的图,简单记录一下相关数据。

图片1.png


界面清新,操作简单,是我们休闲娱乐的消遣品,那么我们就开始分析一下分数上面的控制了。

0x02:游戏分数的相关设定
通过我们试玩了一下,了解到游戏分数是根据玩的时候的数字相加得到。例如最初只有两个方块数值为2,那么这两个方块合成一个方块后数值为4,那么当前的得分也就是4,所以我们明白这个之后,就可以想一下是不是可以通过将初始化的数值变大一点,那么相加后分数自然后变大了,分数不就更高了嘛。
通过玩了几次游戏以后,我们可以发现,在游戏未失败情况下推出游戏,再次打开会还原到上次玩的游戏进度,所以了解到这一点很重要,因为我们这样就可以推测出游戏是通过数据储存来恢复上次游戏进度的,那么我们就开始继续分析了。
数据存储方面,我们首先是观看当前包名下的,data/data/com.aa
,类似这样的,用到这里就是data/data/com.estoty.game2048。那么我们在shell下进入查看一下:


图片2.png


可以到到files文件夹,对开发者朋友来说,那么很容易理解这个文件夹所代表的含义。我们在程序中如果往本地存储一些文件,一般都会存储到这里的。如:
FileOutputStream fop=null;
fop = c.openFileOutput("love", Context.MODE_PRIVATE);

这样就是简单的在本地files目录下创建一个名称为love空文件了。
好了,言归正传,我们就切换到files下查看一下相关内容:

图片3.png


看到这个图,发现文件下面还是有很多内容的啊,那么具体是哪一个呢?本文暂时不讲反编译从代码中找如何储存,那么我们就全部拿出来。
使用cat命令来复制吧,如果手机安装了busybox的话,试试copy是不是更方便。如:
cat saveOriginal.plist>/sdcard/l.plist    将文件创建在sd卡上
然后直接从sdpull出来,或者用第三方工具如应用宝之类拿出来即可。
通过查看所有文件,我们发现了目标:


图片4.png


通过这个图,我们可以发现这是简单的xml文件方式来储存数据。
一个个键值对形式的,还是比较容易读懂的。
上下文浏览一下这个文件,可以推测出红色标注的key为游戏中每个方块中代表的数值,而array为这16个方块数值放到的一个数组。
我们对照试玩的图来看一下,游戏前两行:


图片5.png



第一个数据存在,为4,对应:


图片6.png


推测:第一个string为位置,第二个string为方块的数值,即2的次方。
验证:我们拿第一行第三条数据来验证:
数值为2


图片7.png


我们可以看到我们的猜测好像是正确的。
但是我们要保持严谨,继续验算,将后面的数据都验算一遍。
最终发现我们的推测是正确的,那么也就证明这个文件,是存储数据的核心文件。
下一步,我们就讨论如何来进行操作。

0x03:准备动手操作
通过前两步的分析,我们已经渐渐有了眉目。
我们需要做的,就是把这个文件进行修改,然后重新替换到那个文件夹下即可。
那么我们就先进行修改,将每个dict中第二个数值进行修改,这里要记得数值的计算是2的次方,所以这个数值不要太大,写个10就行了,也就是1024
首先就是创建安卓工程了,这里不多叙述那些,直接进行核心方法的讲解。
我们因为是需要替换文件的,所以得先把原文件放到一个位置,一般都是放到assets目录下。


图片8.png


图片9.png


看到这个方法,相信已经明白了我们已经进行的操作了。

0x04:将代码加入到原游戏中
其实不管是开发还是破解,掌握一点反编译的小技巧还是很有用的,比如项目中使用到图片资源之类,查看下对方软件是如何使用的某种效果,模仿一种算法,都是需要自己动手操作的。
上面那个算法写好后,我们调用一下:


图片10.png


调用是很简单的,然后我们就运行一下这个apk,查看是否正确,文件生成是否可用。
测试正常后,我们拿出来这个apk,在bin目录下是未签名的:


图片11.png


将其反编译,对应到刚才那个类里面找到算法:


图片12.png


从这里开始复制,到end结束


图片13.png


然后我们反编译2048的游戏文件:
AndroidManifest.xml文件中找到游戏的主类,进去
Lcom/estoty/game2048/game2048
找一个空白位置复制进去我们的算法


图片14.png


然后回到我们写好的软件中,找下这个方法的调用:


图片15.png


这样复制过去以后,我们需要注意一下刚才复制的内容,因为一些方法的调用是this,也就是当前类,我们直接复制过去肯定是空指针,所以需要修改Lcom/ggz/cunda/MainActivity为当前类,也就是替换所有为Lcom/estoty/game2048/game2048,好了,这样弄完后,我们回编译软件,安装测试一下即可。效果图如下:


图片16.png



0x05:其实我们有更简单的方法的
1.既然我们有root权限,那么我们就可以更加简单的在命令行下来操作文件的替换过程了
2.我们要写代码,那么直接new一个process执行下命令就行了

第一种方法很简单,我们就不叙述,下面说第二种,写好的代码如下,很简单:
我们先将那个文件复制到sd卡上面即可。


图片17.png


看完代码,大家也都明白了,代码很短,不再讲解了。
使用这个方法的好处,就是我们可以自己玩游戏,然后想刷分的时候,直接执行我们另外一个软件来操作2048即可,简单,实用。


0x06:结束语

写了这么多,结束语就不说了。。。

小游戏消遣玩玩而已,想刷分的话,就可以直接自己操作了,无聊的时候还是可以打发时间的~

文档和样本:

链接:http://pan.baidu.com/s/1sjz3P4x 密码:6i36


博客没啥内容,顺手贴上一下了,不符合此版规定删除即可:

http://blog.csdn.net/guiguzi1110






免费评分

参与人数 4热心值 +4 收起 理由
litao3rd + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
落华无痕 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
神经兮兮 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
yAYa + 1 大牛笑纳~

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ii丶BigBreast 发表于 2014-8-21 21:38
前排一下,此帖必火
 楼主| 听鬼哥说故事 发表于 2014-8-23 12:45
本帖最后由 听鬼哥说故事 于 2014-8-23 12:47 编辑
小试锋芒 发表于 2014-8-22 13:08
前来学习!膜拜大神!
我在想,这样修改后,什么时候才能胜利?

文章中表明了,就是刷个分而已,体验游戏乐趣则使用原包即可...
超过2048即可游戏完毕,可选择继续玩下去,所以最初可以修改两个1024,加完后即可胜利...话说,我自己也是玩原游戏,有点小乐趣的,偶尔看到别人发的图说自己玩了多少多少分,然后顺手开下程序,截图下分数撒...
lwj一辈子 发表于 2014-8-21 21:45
花香 发表于 2014-8-21 21:49
前排路过。。。捡糖吃
8340192c 发表于 2014-8-21 21:49
高手都在民间 ,支持
头像被屏蔽
红客鄙哥 发表于 2014-8-21 21:56
提示: 作者被禁止或删除 内容自动屏蔽
Val阳·奇天炫 发表于 2014-8-21 22:26
这改的还有什么意思
Swine 发表于 2014-8-21 23:33 来自手机
好吊                     赞个
MMAKI 发表于 2014-8-22 08:09 来自手机
技术贴啊!学习了。
心断空 发表于 2014-8-22 10:11
@Hmily说好的给他的吾爱大牛呢。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 07:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表