记某单机游戏的一次内购破解

时间:2018-02-02

本文作者:à ō é


材料准备

1)APP下载,本次演示的软件:登山赛车至天朝历险

我们去其官网下载即可,另外在其他市场下载一个低版本的,

这里我另外下载了一个 v1.3.1的,后面会有用。

http://www.mygamez.cn/col.jsp?id=105

1.png

1111.png

2)至于工具,一个Android Killer加个 夜神模拟器 就可以了

3)放Android Killer 一看,可正常回编,这样也省了不少事


2.png

内购破解

01. 内购流程

内购即应用中付费购买道具或其他东西。其加入了第三方SDK(支付SDK)。

支付SDK提供商(如移动、联通、支付宝等)先开发一个支付SDK,

并进行加固等保护,再为开发者提供支付接口的使用指南,

开发者在APP中添加了支付SDK后,通过相关配置使用SDK即可完成收费功能。

而从国内安卓的单机应用来看,其内购流程可简括为:APP--支付SDK--支付SDK服务器--APP。

Google Play内购流程较国内安卓的会更复杂一点

在国内主流的内购SDK开发主要分为两类,

即短信运营商类(三大运营商)和第三方支付平台类(微信、支付宝等)


02. 搜索关键字符

内购的关键函数

paysuccess onsuccess  buysuccess threadSuccess orderBombsuccess  payonbilling  dobilling PayResult  onBillingFinish  BillingResult inresult  paycallback  resultStatus 9000  0x2328

从字面上就可知道,都是判断支付结果用的(其中0x2328是9000的十六进制)

02x01

直接搜索购买失败的Toast

1). 安装游戏后购买金币,随便填个,让它弹出购买失败的错误提示

3.png

2). 搜索关键字符 “短信验证码验证失败” 另,转Unicode码也没搜到


4.png


3). 试着搜索它的变量名 “gc_security_sms_err

5.png


4). 果然,版本更新了,但 名称还是没变的,再试着搜索它的ID “0x7f0700a1


6.png


5). 但至此并没搜索到其关键的判断语句,So,另找它法


02x02 搜索支付的API关键接口

1> 看一下支付的方式,还有微信和支付宝,不过我们这里就看短信支付(好友代付)吧


7.png


2> 从输入的手机号的错误提示可知是移动的接口,我们将其拉入 Android Killer后

搜索移动支付 API 的关键字 “BillingResult”(前面已介绍第三方SDK的相关资料)


8.png


3> 另,看AndroidMainfest.xml文件发现应用原入口被改

9.png


4> 我们来看原入口下的类(有需要可以看反编译后的JAVA代码),这里我们直接看Smali语句


9.png


5> 跳到:pswitch_data_0处,显然这是某API的返回代码,先另外看看 :pswitch_1 分支

10.png


6> 由 :pswitch_1的分支可断定,:pswitch_1与购买失败有关,相反 :pswitch_0 则与购买成功有关


11.png

7> 我们可让其判断总为成功,便可达到内购破解的目的,改的方法有很多,

这里我们利用goto 指令就可简单实现,目标就是让其跳转到成功购买


12.png


汇编中的跳转指令

    1,  goto :goto_0  偏移量goto_0不能为0,通过短偏移量无条件跳转到目标;

    2,  If语句;

    3,  switch

           packed-switch v0, :pswitch_data_0 v0是switch需要判断的值;

           :pswitch_data_0 偏移表,表中值是有规律递增的;

           sparse-switch v0, :pswitch_data_0 偏移表中值是无规律的。

8> 最后,来看看我们修改的结果吧

13.png


14.png


15.png

02x03 修改游戏内存

这个就不多说了,直接上工具

a. root手机,安装目标APP和内存修改器(这里使用了八门神器)

b. 先启动八门神器(类似的像葫芦侠,幸运破解器,烧饼修改器等)


16.png

c. 进入应用,开始飙车,后拿出八门神器,对金币值进行搜索

17.png

d. 因数值较多,可继续搜索,进一步确定金币的内存数据


18.png

e. 可以看到,只有一条数据发生变化,直接修改,这里改为 12345678


19.png


f. 修改成功,同时也说明此游戏没有防护

21.png

g. 至此,可退出八门神器,继续飙车,秋名山等着你

22.png

02x04 其他方法其他方法如,进程注入,Hook,修改初始数据(找到本地的相关文件直接修改)等,

反正就是改,,,为了尊重开发者,还是跟着游戏规则慢慢玩就好,不然也会失去游戏的一些乐趣。

扩展阅读

Android逆向之旅—Android手机端破解神器MT的内购VIP功能破解教程 | 尼古拉斯.赵四

游戏修改器的制作原理? - 知乎

【七少月-Android安全之软件逆向核心分析-几种常见内购方法】_视频教程_i春秋

开放平台文档中心 - 蚂蚁金服 | 开放平台

google play测试内购流程 -CSDN博客

安卓逆向系列教程(一)Dalvik 指令集 - 飞龙

登山赛车之天朝历险_内购破解版  

链接:  https://pan.baidu.com/s/1ggQeGoV  密码: 38xv


总结
内购破解,对于游戏是不公平的,作为开发者,需要增加应用的防护机制,

如防注入,防hook,防内存修改,防二次打包,简而言之就是加固。

作为玩家,无规不成方圆,游戏是用来娱乐的,

这里我们只做技术研究,游戏还是支持官方原版的好。


>>>>>>  黑客入门必备技能  带你入坑和逗比表哥们一起聊聊黑客的事儿,他们说高精尖的技术比农药都好玩~





联系老师 微信扫一扫关注我们 15527777548/18696195380 在线咨询
关闭