4.3 登山赛车内购破解

作者:飞龙

首先在这里下载游戏:http://g.10086.cn/game/760000032287?spm=www.pdindex.android.addjgame.1

我们要破解的东西是这个,获得金币:

点击之后会有个弹出框,我们随便输入一些东西,然后点击“确认支付”:

出现了“短信验证码验证失败”的Toast

好,信息收集完毕,将程序拉进 Android Killer:

搜索“验证失败”四个字,我们可以找到刚才的内容:

我们发现它在strings.xml里面,它的名称是gc_security_sms_err。老方法,搜索这个名称:

我们在public.xml中发现了它的 ID,0x7f0700a1。我们搜索这个值。

然后就没下文了。我们没有找到任何使用这个值的地方。只能从其它方面入手。

我们从前面可以得知,付费用的是移动的接口,我们搜索onresult,这是移动支付 API 的关键字(问我怎么知道的,这个 API 是有开发者文档的,大家可以搜索一下):

一下子就出现了,ChinaBillingPayCallback$1。下面就是要好好分析这个类

这个类只有一个onResult方法,也就是说只是一个闭包,而且也没有什么特别有用的信息:

public void onResult(int paramInt, String paramString, Object paramObject)
{int i = paramInt;BillingResult localBillingResult = new BillingResult();localBillingResult.setResultCode(i);localBillingResult.setBillingIndex(this.val$billingIndex);localBillingResult.setReturningObject(paramObject);localBillingResult.setCode(paramString);Log.i("MySDK Billing Java", "CMCC object toString(): " + paramObject.toString());Log.i("MySDK Billing Java", "CMCC result: " + localBillingResult.toJSON());this.this$0.launchResultReceived(localBillingResult);
}

反正我是没看出来。再看一看,这个类所在的包是com.mygamez.common,而软件的包是con.fingersoft.game,等于说这个类是别人的 API,当然没有业务逻辑。

我们换个方式,搜索Billing

除了底下的两个资源类,有三个游戏包中的类出现了Billing。第一个类是一个Applicaion,只有如下代码:

public void onCreate()
{MyBilling.applicationHeater(this);
}

再看看MainActivity$1,它也是一个闭包,只有onChinaBillingResult方法,这就非常重要了。由于它的 java 反编译结果不可读,我们直接看 Smali:

invoke-virtual {p1}, Lcom/mygamez/billing/BillingResult;->getResultCode()Imove-result v2packed-switch v2, :pswitch_data_0...

开头有这么一段代码,我们跳到:pswitch_data_0处:

:pswitch_data_0
.packed-switch 0x1:pswitch_0:pswitch_1
.end packed-switch

由于判断的是某个 API 的返回代码,按照惯例,0是正常,其余是异常。我们可以跳到:pswitch_1分支:

:pswitch_1
iget-object v2, p0, Lcom/fingersoft/game/MainActivity$1;->this$0:Lcom/fingersoft/game/MainActivity;invoke-virtual {v2}, Lcom/fingersoft/game/MainActivity;->getApplicationContext()Landroid/content/Context;move-result-object v2const-string v3, "\u4ed8\u6b3e\u5931\u8d25"const/4 v4, 0x1invoke-static {v2, v3, v4}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;move-result-object v1.line 301
.local v1, "toast":Landroid/widget/Toast;
invoke-virtual {v1}, Landroid/widget/Toast;->show()Vgoto :goto_0

那个字符串是“付款失败”,这么多代码其实就是Toast.makeText(this.this$0.getApplicationContext(), "付款失败", 1).show()。这应该就是异常分支了。

至于接下来的修改,这个方法第二行move-result v2,改成const v2, 0x0,完事。

写到这里其实还有一个问题,就是代码中的字符串和实际实现的对不上。这个我也不知道为什么,但是既然有这种情况,就要想别的方法。

安卓逆向系列教程 4.3 登山赛车内购破解相关推荐

  1. 安卓逆向系列教程 4.1 字符串资源

    安卓逆向系列教程 4.1 字符串资源 作者:飞龙 这篇教程是 APK 逆向实战的第一个例子,我会以一个非常简单的程序开始.主要内容就是修改字符串资源,除了破解所需之外,汉化也需要了解这个东西.我们的程 ...

  2. 安卓逆向系列教程(三)静态分析工具

    安卓逆向系列教程(三)静态分析工具 作者:飞龙 以下工具可能都需要先安装 JDK,安装方法就不说了,随便一搜就是. Android Killer 几年之前,我们要破解 APK,可能需要用到 apkto ...

  3. 安卓逆向系列教程(二)APK 和 DEX

    安卓逆向系列教程(二)APK 和 DEX 作者:飞龙 APK APK 是 Android 软件包的分发格式,它本身是个 Zip 压缩包.APK 根目录下可能出现的目录和文件有: 名称 用途 META- ...

  4. 安卓逆向系列教程(一)Dalvik 指令集

    安卓逆向系列教程(一)Dalvik 指令集 作者:飞龙 寄存器 Dalvik 指令集完全基于寄存器,也就是说,没有栈. 所有寄存器都是 32 位,无类型的.也就是说,虽然编译器会为每个局部变量分配一个 ...

  5. 安卓逆向_14 --- 单机和弱联网游戏内购 突破口 和 思路

    From:https://www.bilibili.com/video/BV1UE411A7rW?p=41 Android 逆向资源收集( apk ):https://blog.csdn.net/qq ...

  6. Android逆向实例笔记—手游中的内购破解(火柴人联盟最新版1.9.2 BB弹 )

    最近学到了一些内购的破解方式,就来试试手.然后找个了比较火爆的游戏BB弹,找个个没壳的就来练习. 这些东西都是大神写烂了的东西了,我这里只是写出我自己找不到方法的时候的思路.勿笑. 一.BB弹 BB弹 ...

  7. 安卓逆向系列教程 4.4 逆向云播 VIP

    4.4 逆向云播 VIP 作者:飞龙 这次的软件是刀哥云播,在这里下载:http://www.xuepojie.com/thread-23860-1-1.html 我们先分析一下行为: 打开之后的界面 ...

  8. 安卓逆向系列教程 4.10 玄奥八字

    4.10 玄奥八字 作者:飞龙 声明:本人极度厌恶玄学,选取此软件是为了研究逆向技术,并不代表本人赞成其内容. 这次要破解的软件是这个:http://www.xazhouyi.com/android/ ...

  9. 飞龙的安卓逆向系列教程

    作者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓库 更新历史 v1.0:2017.4.4 添加 Dalvik.APK.DEX 基础知识 添加静态分析.抓包工具教程 添加 12 个 ...

最新文章

  1. 家用机器人风口来临,但巨头围猎背后的前景不容乐观
  2. Seven Microservices Anti-patterns
  3. 使用RedisDesktopManager客户端无法连接Redis服务器问题解决办法
  4. 12款响应式的 jQuery 旋转木马(传送带)插件
  5. NIO和BIO如何影响应用程序的设计-设置处理线程数
  6. python 注释一段话_干货!Python入门基础知识点总结
  7. fastclick库的介绍和使用
  8. docker 多个mysql_mysql8.0 利用docker容器安装配置多主多从集群
  9. linux如何导入安装包,linux下安装pip以及导入第三方包
  10. python 导出数据并发邮件_Python 获取zabbix数据图并发邮件
  11. ECMAscript6入门(1)
  12. C语言断言assert详解
  13. loj #10001. 「一本通 1.1 例 2」种树
  14. hadoop 中添加和删除 datanode和tasktracker
  15. 电子技术基础数字部分第六版_知识速递 | 数字电子技术基础知识要点
  16. IntelliJ IDEA 创建 Vue工程
  17. 企业管理理论综述与实践 — 绩效
  18. BZOJ 5442: [Ceoi2018]Global warming
  19. Opencv中的图像相加,相减,相除,相乘(python实现)
  20. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 个人笔记 题解

热门文章

  1. 2020-12-22 PMP 群内练习题 - 光环
  2. 股份期权激励协议书模板
  3. 晨读-工作中,为什么契约精神那么重要?
  4. php AES加密解密实例
  5. Python做一个简单的抽奖程序
  6. [运维] 高性能负载均衡集群
  7. X86保护模式下的内存寻址
  8. 关于百度搜索技巧:都掌握了吗?
  9. 3D常用术语(名词解释)
  10. 关于NTFS与FAT32的互相转化