文档章节

Flappy Bird(安卓版)逆向分析(一)

enimey
 enimey
发布于 2014/03/04 16:57
字数 963
阅读 5238
收藏 122
点赞 6
评论 18

更改每过一关的增长分数

反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹

image

方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/atlas.txt文件,找到如下信息:

image

我们直接把number_score_00 01....08的坐标值全部修改为number_score_09的坐标值,重新打包并签名apk,运行测试,0-9关分数一直为9分,10-99关分数一直为99分。

方法2:打开string.xml,没有找到有用的信息,由于代码是被混淆过的,无法直接根据类名找关键代码。我们换另一种方式,查找string变量,用工具apk改之理打开apk文件,选中smali/com/dotgears/文件夹,在软件右侧面板,按如下操作:

image

在搜索结果中,有这样一条记录:image ,我们不妨猜测该字符串是用来获取分数的,双击来到所在文件,\com\dotgears\h.smali。关键代码如下:

# direct methods  
.method static constructor <clinit>()V    
.locals 1

const-string v0, "0123456789"

sput-object v0, Lcom/dotgears/h;->l:Ljava/lang/String;

return-void  
.end method

为了测试我们的猜测,直接将“0123456789”修改为“9999999999”,打包签名安装,运行测试,0-9关分数一直为9分,10-99关分数一直为99分。猜测正确。

sput-object v0, Lcom/dotgears/h;->l:Ljava/lang/String //将string类型的变量I赋值为“0123456789”

我们在当前文件查找l:Ljava/lang/String, 在方法.method public a(II)V中发现调用,部分代码为:

sget-object v5, Lcom/dotgears/h;->l:Ljava/lang/String;

invoke-virtual {v5, v2}, Ljava/lang/String;->charAt(I)C

我们转到反编译出的java代码来仔细看下该方法:

  public void a(int paramInt1, int paramInt2)
  {
    this.k = 0;
    int m = paramInt1;
    if (paramInt2 <= 0);
    for (int i1 = 0; ; i1++)
    {
      if (i1 >= this.k)
      {
        if (this.k == 0)
        {
          this.i[0] = '0';
          this.k = 1;
        }
        return;
        if (m <= 0);
        while (true)
        {
          paramInt2--;
          break;
          int n = m % 10;
          m /= 10;
          this.j[this.k] = l.charAt(n);
          this.k = (1 + this.k);
        }
      }
      this.i[i1] = this.j[(-1 + (this.k - i1))];
    }
  }

根据编程经验,不妨猜测:

参数paramInt1为所得分数,paramInt2为所得分数位数

int n = m % 10; //获取分数低位

m /= 10; //获取分数高位

this.j[this.k] = l.charAt(n); //取分数

验证:我们直接在该方法中对参数进行赋值,然后打包签名,安装测试即可。事实上,该方法的作用是实时更新界面上方的显示的分数。

通过修改此处的参数paramInt1的值,我们就可以修改上方显示的分数,但是最终记录的分数仍然未改变,为此我们必须找到该方法在哪里被程序调用,以及参数paramInt1是如何得来的。

打开ida,首先找到方法image (即上面的void a(int paramInt1, int paramInt2)),

双击来到该方法代码,按下回车键,点击jump to xref,即:image ,点击ok,来到此处:image

&#160;

拉到最上面,image ,在此处该方法被调用,我们回到对应的java代码,找到相关调用如下:

this.an.a(this.y, 20);

即参数paramInt1为this.y,参数paramInt2固定取20。

继续往上搜索变量this.y,来到此处:

      if ((this.ao > 0) && (this.ak <= 0) && ((this.ag == this.J.b) || (this.ag == -1 + this.J.b)))
      {
        this.y = (1 + this.y);
        c(9, 0);
      }

this.y在前面已被初始化为0,此处,if循环应为判断是否得分的条件,如果为真,则分数加1。显然,我们直接将1修改为我们所希望的增长分数即可。打开对应的smali文件:/dotgears/flappy/c.smali,修改第489行代码:

add-int/lit8 v0, v0, 0x1 -> add-int/lit8 v0, v0, 0x*    //*为你所希望的增长分数(16进制)

重新打包,签名安装,测试通过。

附上使用的工具和修改后的包:

工具下载地址:http://pan.baidu.com/s/1ntyk1uT

修改后的包:http://pan.baidu.com/s/12AAq6

原始apk:http://pan.baidu.com/s/1jGsQTfS

Flappy Bird(安卓版)逆向分析(二):http://my.oschina.net/auo/blog/205286

© 著作权归作者所有

共有 人打赏支持
enimey
粉丝 15
博文 18
码字总数 12299
作品 0
成都
加载中

评论(18)

bluesyc
bluesyc
不错,看看
车开源
车开源
我喜欢这样,
一碗老酸菜
一碗老酸菜
这样大家才会happy的嘛!
GDP_搞地皮
GDP_搞地皮

引用来自“enimey”的评论

引用来自“GDP_搞地皮”的评论

楼主提供一下原生包吧,也好按照帖子练习啊。

可以了

O(∩_∩)O谢谢,原始版含广告吗?
假装是大神
假装是大神
good guys
西门飞
西门飞
求修改后的apk
enimey
enimey

引用来自“GDP_搞地皮”的评论

楼主提供一下原生包吧,也好按照帖子练习啊。

可以了
enimey
enimey

引用来自“GDP_搞地皮”的评论

楼主提供一下原生包吧,也好按照帖子练习啊。

可以了
GDP_搞地皮
GDP_搞地皮
楼主提供一下原生包吧,也好按照帖子练习啊。
enimey
enimey

引用来自“猎户座”的评论

修改后的包 链接失效啦。。

--可以了
Flappy Bird(安卓版)逆向分析(二)

这次就不写分析过程了,是靠猜测和屏蔽一些可疑方法上机测试找到了,也没撒好写的。(谁有好的分析技巧,希望能指导下) 取消水管的碰撞检测 修改文件:/com/dotgears/flappy/c.smali 修改前...

enimey
2014/03/05
0
1
cocos2d-x支持c++、js、lua开发

作者:左文 链接:https://www.zhihu.com/question/21130385/answer/21789568 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 纯属个人观点 1 Unity3d支...

壹峰
2017/10/18
0
0
认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程

认识AndEngine什么是AndEngine 随着Android手机、平板的盛行,Android下的游戏也不断的变得火热。而对于游戏开发有兴趣的同学们,应该也想要学习开发游戏。虽说游戏开发的引擎较多,但是大多...

大学霸
2015/01/06
0
0
Android 5.0 开发者预览版隐藏Flappy Bird克隆

在发布Android 5.0 Lollipop之后, Google发布了开发者预览版更新,加入了一些用户以后将会在正式版本中使用到的新功能,它还隐藏了一个至今最大的Android彩蛋——一个可玩的Flappy Bird克隆...

oschina
2014/10/21
4.8K
9
cocos2d-html5使用jsbinding显示广告

最近在研究手机游戏,作为web coder自然选择javascript作为开发语言(关键也不太会别的语言。。。)。经过对比选择了比较成熟的cocos2d-html5作为游戏引擎,主要原因基于以下原因: 1.跨平台...

卢勇福
2014/03/27
0
0
手游开发神器 cocos2d-x editor 教程聚合和代码下载(持续更新中)

一 cocos2d-x editor工具下载和基础教程: 一 手游开发神器 cocos2d-x editor初识 二 手游开发神器 cocos2d-x editor工具下载和安装配置 三 手游开发神器 cocos2d-x editor 之基础工具 inte...

makeapp628
2014/02/11
0
0
最强最全干货分享:Android开发书籍、教程、工具等

最全干货分享,本文收集整理了Android开发所需的书籍、教程、工具、资讯和周刊各种资源,它们能让你在Android开发之旅的各个阶段都受益。 入门 《Learning Android(中文版)》 本书为Andro...

拉偶有所依
2015/01/09
0
1
全球最热5款手游实战开发:玩谁不会?开发一个试试!

从「FLappy bird」到「2048」,再到「别踩白块儿」,极简游戏风暴从未停歇。 越简单,越容易让人着迷。 过往的晒成绩,到如今每天乘地铁、坐公交,越来越多人在玩,然而这些经典的游戏是如何...

极客学院
2014/07/01
3K
13
一文了解安卓APP逆向分析与保护机制

本文由 网易云 发布 “知物由学”是网易云易盾打造的一个品牌栏目,词语出自汉·王充《论衡·实知》。人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道。“知物...

wangyiyungw
05/15
0
0
Android应用程序逆向入门

  我们每天都会在Google Play商店看到一系列新的Android应用程序,从游戏到公用设施,再到物联网设备客户端等等,几乎我们生活中的每一个方面都可以通过一个app以某种方式进行控制。我们有...

FreeBuf
04/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部