开发者社区> apachecn_飞龙> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

安卓逆向系列教程 4.5 糖果星星达人

简介: 4.5 糖果星星达人 作者:飞龙 软件在这里下载:http://www.anzhi.com/soft_2539282.html 第一次进入游戏之后,会弹出来一个“新手礼包”,关掉之后,点击“新游戏”,之后进入“关卡1-1”。
+关注继续查看

4.5 糖果星星达人

作者:飞龙

软件在这里下载:http://www.anzhi.com/soft_2539282.html

第一次进入游戏之后,会弹出来一个“新手礼包”,关掉之后,点击“新游戏”,之后进入“关卡1-1”。我们点击左上角的加号,会出现这个界面:

我们点击“领取”之后,会弹出“支付中,等待支付结果”。如果你是用模拟器玩的,过一会儿会弹出“购买失败”:

信息收集完毕,拖入 Android Killer:

搜索“购买失败”,上下文中应该会有“购买成功”。直接搜索原文本是没有用的,这里我就不演示了,要搜索 Unicode 编码形式\u8d2d\u4e70\u5931\u8d25

starcrash$THandler.smalihandleMessage方法中找到了这个文本,这个类是starcrash类中的闭包。

.line 269
:pswitch_5
sget-object v4, Lcom/easefun/starcrash/starcrash;->context:Landroid/content/Context;

const-string v5, "\u8d2d\u4e70\u5931\u8d25" # 购买失败

invoke-static {v4, v5, v6}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

move-result-object v4

invoke-virtual {v4}, Landroid/widget/Toast;->show()V

.line 270
invoke-static {}, Lcom/easefun/starcrash/starcrash;->dismissProgressDialog()V

.line 271
invoke-static {v6}, Lcom/easefun/iap/StarJNI;->sendMessage(I)V

goto :goto_0 # return-void

可以看出这是switch结构的一个分支,我们到跳转表处看看:

.line 236
iget v4, p1, Landroid/os/Message;->what:I

packed-switch v4, :pswitch_data_0

# ...

.line 236
:pswitch_data_0
.packed-switch 0x0
    :pswitch_0
    :pswitch_1
    :pswitch_2
    :pswitch_3
    :pswitch_4
    :pswitch_5 # 购买失败
    :pswitch_6
    :pswitch_7
    :pswitch_8
    :pswitch_9
.end packed-switch

这个代码是安卓的跨线程消息传递机制,不懂可以直接搜索Handler。这个switch枚举了Messagewhat参数,该参数用于区分消息的不同种类。问题来了,what值的含义是开发者自己定制的,而且外部类里面也没有相关常量。

如果不想分析代码,可以把该值改成 0~9,每个都试一遍。但是总归有不这么麻烦的办法,那就是分析代码。有两种方式,第一种是从这几个分支里面找到成功分支,第二种是从外部类的线程入口函数中找到成功的代码。我这里选前者。

我们简单遍历一下各分支的字符串吧(具体代码省略)。

分支编号 消息 行号
2 请确认SIM卡已插入 124
3 支付需要网络连接 144
4 购买成功 164
5 购买失败 184
6 购买取消 204
8 支付中,等待支付结果 255
9 已成功领取今日特权礼包中的十个钻石 269

只有这几个分支是有消息的,而且观察得出,这个handler不仅仅处理购买成功和失败消息,还处理了其它无关的消息。这种情况下就不能强行都改成第 5 个分支。我们可以考虑把第 2、3、5、6 都改成第四个分支。

.packed-switch 0x0
    :pswitch_0
    :pswitch_1
    :pswitch_4 # 2
    :pswitch_4 # 3
    :pswitch_4
    :pswitch_4 # 5
    :pswitch_4 # 6
    :pswitch_7
    :pswitch_8
    :pswitch_9
.end packed-switch

重新编译并打包后,我们试一试:

它这个付费是通过短信实现的,它会直接发送短信,无法自己输入手机号。所以,如果你插着电话卡玩还是会扣费的,这一点可以通过移除AndroidManifest.xml中的SEND_SMS权限来解决。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
okcc呼叫中心外呼系统安装教程与小白上手使用
okcc呼叫中心系统常见的应用场景包括:筛选客户、客户回访维护、产品推荐、企业维护、债务提醒、信息咨询、业务办理、电话订购、车载导航等等,可应用的行业领域包括:金融、电销、保险、电商、教育、企业通信等。
580 0
SpringBoot系列教程Web篇之开启GZIP数据压缩
本篇可以归纳在性能调优篇,虽然内容非常简单,但效果可能出乎预料的好; 分享一个真实案例,我们的服务部署在海外,国内访问时访问服务时,响应有点夸张;某些返回数据比较大的接口,耗时在 600ms+上,然而我们的服务 rt 却是在 20ms 以下,绝大部分的开销都花在了网络传输上
292 0
Git 系列教程(4)- 获取 Git 仓库
Git 系列教程(4)- 获取 Git 仓库
30 0
Git 系列教程(4)- 获取 Git 仓库
Git 系列教程(4)- 获取 Git 仓库
250 0
安卓逆向系列教程 4.8 去广告 II
4.8 去广告 II 作者:飞龙 软件下载:http://www.xuepojie.com/thread-24545-1-1.html 事先声明,这个软件没有功能,是个壳子,我们主要研究如何去广告。
842 0
x3d
[译]Godot系列教程五 - 制作Godot编辑器插件
制作插件 下文仅针对2.1版本。 关于插件 插件是为编辑器扩展出更多有用工具的重要方式。它可以完全用GDScript和标准场景开发,甚至都不需重新加载编辑器就可生效。不像模块,你无需创建C++代码、也无需重新编译整个引擎。
1301 0
basic4android 开发教程翻译(六)使用B4A-Bridge连接你的设备
到目前为止,我们在开发中有两种方法来测试应用. 一种是通过Android 模拟器来测试.另外就是当你的设备支持ADB调试的话,可以直接连到真实设备上测试. Android模拟器相比真实设备慢得多(尤其是安装应用).
1165 0
4n0nYAAoU5研究的IC卡东东
http://v.youku.com/v_show/id_XMTc3ODM1MTAw.html
487 0
+关注
apachecn_飞龙
Github:@wizardforcel 简书:@ApacheCN_飞龙 微博:@龙雀 CSDN:@wizardforcel ApacheCN 官网:apachecn.org 机器学习交流群:629470233
719
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载