更改每过一关的增长分数

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

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

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

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

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

# direct methods

.method static constructor ()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,首先找到方法 (即上面的void a(int paramInt1, int paramInt2)),

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

拉到最上面, ,在此处该方法被调用,我们回到对应的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进制)

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

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

flappy+bird+android源代码,Flappy Bird(安卓版)逆向分析(一)相关推荐

  1. Android开发之2048安卓版

    之前是在eclipse上写的,后面换成了android sudio. 2048游戏的UI整体可以采用线性布局,即LinearLayout,其中嵌套一个线性布局和一个GridLayout,内嵌的线性布局 ...

  2. edge chrome Android,微软Edge浏览器安卓版已上架:采用Chrome引擎

    IT之家10月13日消息 上周微软公布了一个令人意外的消息,那就是将其Edge浏览器带入iOS和Android平台,使现有的Win10 Edge浏览器用户可以更轻松地浏览其历史记录,书签和其他数据.现 ...

  3. chrome android 85,终于!安卓版Chrome 85将升级到原生64位:支持Android 10及以上系统...

    原标题:终于!安卓版Chrome 85将升级到原生64位:支持Android 10及以上系统 安卓对64位的支持是从2014年的Android 5.0开始的.可时至今日,谷歌自己的Chrome for ...

  4. smb android 客户端,谷歌放出安卓版Samba客户端 但仅支持SMBv1

    数日前,谷歌突然放出支持安卓系统的开源Samba客户端应用,SMB协议帮助安卓用户方便都通过SMB通信协议,访问在局域网上的共享文件和打印机 .谷歌描述其为"Samba客户端的直接移植版&q ...

  5. android 评测软件,安卓评测app下载 安卓评测软件 for Android v8.4.3 安卓版 下载-脚本之家...

    安卓评测是安卓优化大师特别为android手机量身打造的一款性能评测应用软件.多项测试完整反映android的手机性能,三大模块让您对设备的更加了解.在安卓评测中您不仅能够与各机型一争高下,更可以获知 ...

  6. android截取网页图片,安卓版谷歌浏览器很快将获得滚动截图功能 可以用来截取整个网页...

    截图功能对用户来说应该是非常常用的功能,然而有时候截取网页时可能需要我们进行多次截图再拼接截图图片. 为解决这种问题现在已经有些软件提供滚动截图功能,滚动截图可帮助用户一次性将整个网页内容截图无需拼接 ...

  7. 华为手机助手 android,华为手机助手(安卓版)

    华为手机助手(安卓版)是一款专门为华为手机用户打造的免费辅助工具,可以随时免费轻松下载各种应用以及游戏.华为手机助手(安卓版)支持用户切换你自己喜欢的壁纸和手机铃声,一个应用涵盖了所有的功能,想要刷机 ...

  8. five 安卓应用|five 1.0.1 for android,Five小视频安卓版

    Five小视频安卓版是一个1分钟视频创作社区,是一款非常不错的小视频应用软件,用户可以将自己身边精彩的瞬间拍成小视频发布到平台上,还能结交更多有趣的朋友,操作简单,带你玩转小视频.欢迎用户使用西西下载 ...

  9. 微信定位精灵 android,微信定位精灵安卓版下载

    微信定位精灵安卓版下载是一款非常好用的位置伪装软件.可以让用户不会受任何地理位置的限制,也不需要担心自己被查岗的问题了,支持的软件也是很丰富的,定位也都是非常精准的.感兴趣的话就不要错过了,不妨来下载 ...

最新文章

  1. 软件吃软件,编程工作会越来越多吗?
  2. swiper轮播插件的使用
  3. 成功加入微软GDI计划
  4. Mysql orangepi_SSH远程登录香橙派Orange Pi Zero2开发板的操作方法
  5. spring学习总结——介绍
  6. python selenium 对浏览器标签页进行关闭和切换
  7. 数据结构java学生成绩排序_数据结构学习--Java简单排序
  8. matlab中S函数的概念及使用
  9. 第1期:手把手教你制作网易邮箱注册页面
  10. 鼠标划定区域的屏幕翻译 python3
  11. 第十一届蓝桥杯大赛软件类决赛(2020javaB国赛)
  12. debug5x 微信_微信X5内核webview调试
  13. 【Python自然语言处理】读书笔记:第七章:从文本提取信息
  14. windows打开虚拟键盘命令
  15. 入行程序员培训还是不培训
  16. 车道线识别(一) 简单识别
  17. ORACLE OCP 考试指南
  18. html 导出excel 列被合并,前端实现导出excel单元格合并和调整样式
  19. 【NIPS 2016图神经网络论文解读】Variational Graph Auto-Encoders (VGAE) 基于VAE的图变分自编码器
  20. linux忘了用户名和密码_Linux 服务器忘记用户名密码的找回办法总结linux操作系统 -电脑资料...

热门文章

  1. 将字符串格式yyyy/MM/dd的字符串转为日期,格式“yyyy-MM-dd“
  2. php计数器归零,php计数器lt;?/*-一个简单的计数器*/functio 爱问知识人
  3. 有50 只狗,找出其中病狗
  4. AWD系统加固,系统渗透笔记
  5. 微型计算机曾经使用过的字长,自考《计算机应用基础》模拟试题七
  6. win7原版镜像_告诉你Ghost系统和原版系统之间的区别,看完再装机也不晚
  7. mongodb基本命令及操作
  8. Zookeeper源码之集群选举
  9. 快递100Api调用实时快递查询
  10. Docker-使用Docker安装应用软件