材料准备
1)APP下载,本次演示的软件:登山赛车至天朝历险
我们去其官网下载即可,另外在其他市场下载一个低版本的,
这里我另外下载了一个 v1.3.1的,后面会有用。
http://www.mygamez.cn/col.jsp?id=105
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwNzAxOTgyP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwNjI1NDY3P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
2)至于工具,一个Android Killer加个 夜神模拟器 就可以了
3)放Android Killer 一看,可正常回编,这样也省了不少事
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwNjM0MDgzP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
内购破解
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 0×2328
从字面上就可知道,都是判断支付结果用的(其中0×2328是9000的十六进制)
02×01
直接搜索购买失败的Toast
1). 安装游戏后购买金币,随便填个,让它弹出购买失败的错误提示
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwNjQ1MjQwP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
2). 搜索关键字符 “短信验证码验证失败” 另,转Unicode码也没搜到
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwNzIzNTQ4P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
3). 试着搜索它的变量名 “gc_security_sms_err”
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwNzMzMDgxP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
4). 果然,版本更新了,但 名称还是没变的,再试着搜索它的ID “0x7f0700a1”
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwNzQ1MjU1P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
5). 但至此并没搜索到其关键的判断语句,So,另找它法
02×02 搜索支付的API关键接口
1> 看一下支付的方式,还有微信和支付宝,不过我们这里就看短信支付(好友代付)吧
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwNzU4OTIwP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
2> 从输入的手机号的错误提示可知是移动的接口,我们将其拉入 Android Killer后
搜索移动支付 API 的关键字 “BillingResult”(前面已介绍第三方SDK的相关资料)
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwODEwNTUwP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
3> 另,看AndroidMainfest.xml文件发现应用原入口被改
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwODIwMzk4P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
4> 我们来看原入口下的类(有需要可以看反编译后的JAVA代码),这里我们直接看Smali语句
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwODI5ODY3P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
5> 跳到:pswitch_data_0处,显然这是某API的返回代码,先另外看看 :pswitch_1 分支
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwODQwMTQ3P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
6> 由 :pswitch_1的分支可断定,:pswitch_1与购买失败有关,相反 :pswitch_0 则与购买成功有关
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwODQ4ODcwP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
7> 我们可让其判断总为成功,便可达到内购破解的目的,改的方法有很多,
这里我们利用goto 指令就可简单实现,目标就是让其跳转到成功购买
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwOTEwNzQzP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
汇编中的跳转指令
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> 最后,来看看我们修改的结果吧
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwOTMwNDYyP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgxMTIxNzc2P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
02×03 修改游戏内存
这个就不多说了,直接上工具
a. root手机,安装目标APP和内存修改器(这里使用了八门神器)
b. 先启动八门神器(类似的像葫芦侠,幸运破解器,烧饼修改器等)
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgxMTEwNzM1P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
c. 进入应用,开始飙车,后拿出八门神器,对金币值进行搜索
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgxMTAwNjI4P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
d. 因数值较多,可继续搜索,进一步确定金币的内存数据
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgxMDUwMjM4P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
e. 可以看到,只有一条数据发生变化,直接修改,这里改为 12345678
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgxMDM0OTUwP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
f. 修改成功,同时也说明此游戏没有防护
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgxMDA1NjYxP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
g. 至此,可退出八门神器,继续飙车,秋名山等着你
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTgwMjAyMTgwOTUwMjcyP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVHbGhiMmt4TWpNPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L1NvdXRoRWFzdA==)
02×04 其他方法其他方法如,进程注入,Hook,修改初始数据(找到本地的相关文件直接修改)等,
反正就是改,,,为了尊重开发者,还是跟着游戏规则慢慢玩就好,不然也会失去游戏的一些乐趣。
扩展阅读
Android逆向之旅—Android手机端破解神器MT的内购VIP功能破解教程 | 尼古拉斯.赵四
游戏修改器的制作原理? – 知乎
【七少月-Android安全之软件逆向核心分析-几种常见内购方法】_视频教程_i春秋
开放平台文档中心 – 蚂蚁金服 | 开放平台
google play测试内购流程 -CSDN博客
安卓逆向系列教程(一)Dalvik 指令集 – 飞龙
登山赛车之天朝历险_内购破解版
链接: https://pan.baidu.com/s/1ggQeGoV 密码:38xv
总结
内购破解,对于游戏是不公平的,作为开发者,需要增加应用的防护机制,
如防注入,防hook,防内存修改,防二次打包,简而言之就是加固。
作为玩家,无规不成方圆,游戏是用来娱乐的,
这里我们只做技术研究,游戏还是支持官方原版的好。
>>>>>> 黑客入门必备技能 带你入坑和逗比表哥们一起聊聊黑客的事儿,他们说高精尖的技术比农药都好玩~