听鬼哥说虐心的2048简化过程
从开发转到逆向破解,开始准备写博客后,朋友们说,想看一些好玩的游戏分析过程,简单一点,最好是会开发的人员能完成的,那么本篇就不讲反编译追踪代码实现方式了,写给一些开发者朋友来对自己喜欢的小软件进行破解。
在flappybird火了一阵子之后,又出来一些小游戏,使得部分人爱不释手,欲罢不能,在游戏出来以后,我也玩了好长一段时间了,看着空间里面整天有人晒着自己的得分,那么咱们就一起来看一下,如何实现刷分的过程。
0x01:简单试玩一下,体验游戏乐趣
我们试玩的图,简单记录一下相关数据。
界面清新,操作简单,是我们休闲娱乐的消遣品,那么我们就开始分析一下分数上面的控制了。
0x02:游戏分数的相关设定
通过我们试玩了一下,了解到游戏分数是根据玩的时候的数字相加得到。例如最初只有两个方块数值为2,那么这两个方块合成一个方块后数值为4,那么当前的得分也就是4,所以我们明白这个之后,就可以想一下是不是可以通过将初始化的数值变大一点,那么相加后分数自然后变大了,分数不就更高了嘛。
通过玩了几次游戏以后,我们可以发现,在游戏未失败情况下推出游戏,再次打开会还原到上次玩的游戏进度,所以了解到这一点很重要,因为我们这样就可以推测出游戏是通过数据储存来恢复上次游戏进度的,那么我们就开始继续分析了。
数据存储方面,我们首先是观看当前包名下的,data/data/com.aa
,类似这样的,用到这里就是data/data/com.estoty.game2048。那么我们在shell下进入查看一下:
可以到到files文件夹,对开发者朋友来说,那么很容易理解这个文件夹所代表的含义。我们在程序中如果往本地存储一些文件,一般都会存储到这里的。如:
FileOutputStream fop=null;
fop = c.openFileOutput("love", Context.MODE_PRIVATE);
这样就是简单的在本地files目录下创建一个名称为love的空文件了。
好了,言归正传,我们就切换到files下查看一下相关内容:
看到这个图,发现文件下面还是有很多内容的啊,那么具体是哪一个呢?本文暂时不讲反编译从代码中找如何储存,那么我们就全部拿出来。
使用cat命令来复制吧,如果手机安装了busybox的话,试试copy是不是更方便。如:
cat saveOriginal.plist>/sdcard/l.plist 将文件创建在sd卡上
然后直接从sd卡pull出来,或者用第三方工具如应用宝之类拿出来即可。
通过查看所有文件,我们发现了目标:
通过这个图,我们可以发现这是简单的xml文件方式来储存数据。
一个个键值对形式的,还是比较容易读懂的。
上下文浏览一下这个文件,可以推测出红色标注的key为游戏中每个方块中代表的数值,而array为这16个方块数值放到的一个数组。
我们对照试玩的图来看一下,游戏前两行:
第一个数据存在,为4,对应:
推测:第一个string为位置,第二个string为方块的数值,即2的次方。
验证:我们拿第一行第三条数据来验证:
数值为2
我们可以看到我们的猜测好像是正确的。
但是我们要保持严谨,继续验算,将后面的数据都验算一遍。
最终发现我们的推测是正确的,那么也就证明这个文件,是存储数据的核心文件。
下一步,我们就讨论如何来进行操作。
0x03:准备动手操作
通过前两步的分析,我们已经渐渐有了眉目。
我们需要做的,就是把这个文件进行修改,然后重新替换到那个文件夹下即可。
那么我们就先进行修改,将每个dict中第二个数值进行修改,这里要记得数值的计算是2的次方,所以这个数值不要太大,写个10就行了,也就是1024。
首先就是创建安卓工程了,这里不多叙述那些,直接进行核心方法的讲解。
我们因为是需要替换文件的,所以得先把原文件放到一个位置,一般都是放到assets目录下。
看到这个方法,相信已经明白了我们已经进行的操作了。
0x04:将代码加入到原游戏中
其实不管是开发还是破解,掌握一点反编译的小技巧还是很有用的,比如项目中使用到图片资源之类,查看下对方软件是如何使用的某种效果,模仿一种算法,都是需要自己动手操作的。
上面那个算法写好后,我们调用一下:
调用是很简单的,然后我们就运行一下这个apk,查看是否正确,文件生成是否可用。
测试正常后,我们拿出来这个apk,在bin目录下是未签名的:
将其反编译,对应到刚才那个类里面找到算法:
从这里开始复制,到end结束
然后我们反编译2048的游戏文件:
从AndroidManifest.xml文件中找到游戏的主类,进去
Lcom/estoty/game2048/game2048:
找一个空白位置复制进去我们的算法
然后回到我们写好的软件中,找下这个方法的调用:
这样复制过去以后,我们需要注意一下刚才复制的内容,因为一些方法的调用是this,也就是当前类,我们直接复制过去肯定是空指针,所以需要修改Lcom/ggz/cunda/MainActivity为当前类,也就是替换所有为Lcom/estoty/game2048/game2048,好了,这样弄完后,我们回编译软件,安装测试一下即可。效果图如下:
0x05:其实我们有更简单的方法的
1.既然我们有root权限,那么我们就可以更加简单的在命令行下来操作文件的替换过程了
2.我们要写代码,那么直接new一个process执行下命令就行了
第一种方法很简单,我们就不叙述,下面说第二种,写好的代码如下,很简单:
我们先将那个文件复制到sd卡上面即可。
看完代码,大家也都明白了,代码很短,不再讲解了。
使用这个方法的好处,就是我们可以自己玩游戏,然后想刷分的时候,直接执行我们另外一个软件来操作2048即可,简单,实用。
0x06:结束语
写了这么多,结束语就不说了,爱破解,爱鬼哥。。。
博客没啥内容,顺手贴上一下了:
http://blog.csdn.net/guiguzi1110
听鬼哥说虐心的2048简化过程相关推荐
- 听鬼哥说故事之U3D游戏破解分析
平时里,我们休息的时候喜欢玩点休闲小游戏,不过对于游戏发烧友来说,玩点好玩的稍微大型的游戏则是最好的乐趣,好,今天我们对一款Unity 3D引擎开发的跑酷游戏进行破解分析,主要修改方式为dll文件的相 ...
- 听鬼哥说TL大厦的相关分析
最近一直没有发分析游戏破解类的游戏,刚刚看到一个好玩的游戏更新了,那么我们来分析下新版本的破解. 游戏的破解,主要靠的是积累经验,没有千篇一律的游戏,所以只是照着教程修改是次要的,重要的是破解思路的分 ...
- 按照鬼哥学so变化,四,第一章的例子
跟随鬼哥伦比亚科学so变化,四.第一章的例子 图纸/文化 听鬼哥说故事 ---------------------------------------------切割线--------------- ...
- 跟着鬼哥学爬虫-10-python微信-5-加上了人工智能回复!
跟着鬼哥学爬虫-10-python微信-5-加上了人工智能回复! 其实人工智能回复,现在网上有很多开源的机器学习,AI学习的框架,但是最重要的一点就是没有语料,也就是没有相互回答的数据内容. 所以这个 ...
- 跟着鬼哥学so改动,二,进行篇
图/文 听鬼哥说故事 继续上文的内容---------------------------------- 0x1:測试文件的编写 经过上一篇文章的基础学习,如今我们開始进行是用的部分. 既然我们能够 ...
- 跟着鬼哥学so改动,一,准备篇
图/文 听鬼哥说故事 闲话少说,so的改动,重要性大家都知道,这里从头编写so文件,分析so文件,改动so文件,打算做一个系列的教程,当然,主要是看时间同意. android的sdk配置以及ndk环境 ...
- 跟着鬼哥学so修改,一,准备篇
图/文 听鬼哥说故事 闲话少说,so的修改,重要性大家都知道,这里从头编写so文件,分析so文件,修改so文件,打算做一个系列的教程,当然,主要是看时间允许. android的sdk配置以及ndk环境 ...
- 跟着鬼哥学爬虫-3-美女图片!!!
这一节课,是群里很多娃在等待的课程. 通过前面两篇文章的学习,我们对BeautifulSoup4的简单使用有了了解. 了解了使用这个爬虫的核心是熟悉分析清楚html标签,一些css的简单知识,找准了标 ...
- 10道虐心的Java面试题,被面试官虐哭了,同事一题都没答对
10道虐心的Java面试题,被面试官虐哭了,同事一题都没答对 Java高级架构 有一天,小王告诉我,他去一家公司面试 Java 岗,结果被面试官虐哭了.整整 10 道 Java 面试题,小王一道也没答 ...
- 单身汪慎入,志玲姐姐的这个故事太虐心
最近的狗粮来得有点猛,林志玲和言承旭时隔15年被拍到同框照,喊了多年的复合就要成真.围观群众带着亲妈般的微笑,恨不得亲自上阵将两人送作堆.为什么林志玲言承旭撒的狗粮大家吃得心甘情愿特别欢?因为这就是一 ...
最新文章
- uva10401Injured Queen Problem(递推)
- Cache替换算法:LRU与LFU的区别
- 编写高质量的Makefile
- mysql hash创建_Mysql自适应哈希索引(Adaptive Hash Index)创建的条件
- java中事务的管理
- 3 | Spatial-based GNN/convolution模型之 NN4G
- echarts隐藏之后的显示问题
- 2月14 大数据处理的基本算法
- kettle实现颗粒度转换
- 手把手教你使用MATLAB中的Classification Learner
- Bandwagon Host IP Change修改IP
- python爬虫token_Python入门:模拟登录(二)或注册之requests处理带token请求
- 美化Ubuntu18桌面伪装成MAC桌面
- TFTP文件传输协议
- 一个可以扩容C盘的第三方免费软件
- Cesium地下管线信息系统(视频)
- python模糊搜索_在Python中使用Whoosh进行模糊搜索
- Android工程师未来发展方向以及薪资待遇
- SQLServer MDF文件和LDF文件区别
- Elasticsearch: analyzer
热门文章
- apache ii评分怎么评_APACHEⅡ评分系统
- (2)从文件中解析JSON数据
- 编程语言的动态性(Dart和OC对比)
- iOS:懒加载符号绑定流程
- while语句 ///do...while语句/// for语句/// foreach语句
- Mac下配置Nginx负载均衡
- C++test对多变参数的函数打桩处理技巧
- NDK-JNI实战教程(二) JNI官方中文资料
- OOP之C#设计及其UML(反向工程)
- IOS开发-jqeurey mobile