flappy+bird+android源代码,Flappy Bird(安卓版)逆向分析(一)
更改每过一关的增长分数
反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹
方法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(安卓版)逆向分析(一)相关推荐
- Android开发之2048安卓版
之前是在eclipse上写的,后面换成了android sudio. 2048游戏的UI整体可以采用线性布局,即LinearLayout,其中嵌套一个线性布局和一个GridLayout,内嵌的线性布局 ...
- edge chrome Android,微软Edge浏览器安卓版已上架:采用Chrome引擎
IT之家10月13日消息 上周微软公布了一个令人意外的消息,那就是将其Edge浏览器带入iOS和Android平台,使现有的Win10 Edge浏览器用户可以更轻松地浏览其历史记录,书签和其他数据.现 ...
- chrome android 85,终于!安卓版Chrome 85将升级到原生64位:支持Android 10及以上系统...
原标题:终于!安卓版Chrome 85将升级到原生64位:支持Android 10及以上系统 安卓对64位的支持是从2014年的Android 5.0开始的.可时至今日,谷歌自己的Chrome for ...
- smb android 客户端,谷歌放出安卓版Samba客户端 但仅支持SMBv1
数日前,谷歌突然放出支持安卓系统的开源Samba客户端应用,SMB协议帮助安卓用户方便都通过SMB通信协议,访问在局域网上的共享文件和打印机 .谷歌描述其为"Samba客户端的直接移植版&q ...
- android 评测软件,安卓评测app下载 安卓评测软件 for Android v8.4.3 安卓版 下载-脚本之家...
安卓评测是安卓优化大师特别为android手机量身打造的一款性能评测应用软件.多项测试完整反映android的手机性能,三大模块让您对设备的更加了解.在安卓评测中您不仅能够与各机型一争高下,更可以获知 ...
- android截取网页图片,安卓版谷歌浏览器很快将获得滚动截图功能 可以用来截取整个网页...
截图功能对用户来说应该是非常常用的功能,然而有时候截取网页时可能需要我们进行多次截图再拼接截图图片. 为解决这种问题现在已经有些软件提供滚动截图功能,滚动截图可帮助用户一次性将整个网页内容截图无需拼接 ...
- 华为手机助手 android,华为手机助手(安卓版)
华为手机助手(安卓版)是一款专门为华为手机用户打造的免费辅助工具,可以随时免费轻松下载各种应用以及游戏.华为手机助手(安卓版)支持用户切换你自己喜欢的壁纸和手机铃声,一个应用涵盖了所有的功能,想要刷机 ...
- five 安卓应用|five 1.0.1 for android,Five小视频安卓版
Five小视频安卓版是一个1分钟视频创作社区,是一款非常不错的小视频应用软件,用户可以将自己身边精彩的瞬间拍成小视频发布到平台上,还能结交更多有趣的朋友,操作简单,带你玩转小视频.欢迎用户使用西西下载 ...
- 微信定位精灵 android,微信定位精灵安卓版下载
微信定位精灵安卓版下载是一款非常好用的位置伪装软件.可以让用户不会受任何地理位置的限制,也不需要担心自己被查岗的问题了,支持的软件也是很丰富的,定位也都是非常精准的.感兴趣的话就不要错过了,不妨来下载 ...
最新文章
- 软件吃软件,编程工作会越来越多吗?
- swiper轮播插件的使用
- 成功加入微软GDI计划
- Mysql orangepi_SSH远程登录香橙派Orange Pi Zero2开发板的操作方法
- spring学习总结——介绍
- python selenium 对浏览器标签页进行关闭和切换
- 数据结构java学生成绩排序_数据结构学习--Java简单排序
- matlab中S函数的概念及使用
- 第1期:手把手教你制作网易邮箱注册页面
- 鼠标划定区域的屏幕翻译 python3
- 第十一届蓝桥杯大赛软件类决赛(2020javaB国赛)
- debug5x 微信_微信X5内核webview调试
- 【Python自然语言处理】读书笔记:第七章:从文本提取信息
- windows打开虚拟键盘命令
- 入行程序员培训还是不培训
- 车道线识别(一) 简单识别
- ORACLE OCP 考试指南
- html 导出excel 列被合并,前端实现导出excel单元格合并和调整样式
- 【NIPS 2016图神经网络论文解读】Variational Graph Auto-Encoders (VGAE) 基于VAE的图变分自编码器
- linux忘了用户名和密码_Linux 服务器忘记用户名密码的找回办法总结linux操作系统 -电脑资料...
热门文章
- 将字符串格式yyyy/MM/dd的字符串转为日期,格式“yyyy-MM-dd“
- php计数器归零,php计数器lt;?/*-一个简单的计数器*/functio 爱问知识人
- 有50 只狗,找出其中病狗
- AWD系统加固,系统渗透笔记
- 微型计算机曾经使用过的字长,自考《计算机应用基础》模拟试题七
- win7原版镜像_告诉你Ghost系统和原版系统之间的区别,看完再装机也不晚
- mongodb基本命令及操作
- Zookeeper源码之集群选举
- 快递100Api调用实时快递查询
- Docker-使用Docker安装应用软件