最近代码码多了于是打算翻翻有什么游戏可玩,无意之中翻到了之前玩的元气骑士,想到还有许多人物都没有解锁,但是又不想攒金币因为太慢了,况且还有一些角色是要RMB才能买的,通过PKiP发现无加固壳,于是一怒之下打算破解其内购。


0x01 找寻突破口

  打开元气骑士进入购买人物的场景,点击购买,因为钻石不够所以点进去发现跳转到了购买钻石的页面。1块钱可以兑换800钻石,于是点购买跳转到了爱贝支付。返回取消购买回到了游戏入口界面,提示购买失败。

0x02 初步尝试破解

  于是用MT2拿到apk的dex文件,搜索“失败”,发现iapppay下的IAppPayOrderChecker和MainActivit$3$1格外瞩目。进入IAppPayOrderChecker发现没有相关内容,于是转到MainActivity$3$1中。在OnPayResult函数中发现如下代码块:

    .line 113iget-object v1, p0, Lcom/chillyroomsdk/iapppay/MainActivity$3$1;->this$1:Lcom/chillyroomsdk/iapppay/MainActivity$3;iget-object v2, p0, Lcom/chillyroomsdk/iapppay/MainActivity$3$1;->val$orderId:Ljava/lang/String;iget-object v3, p0, Lcom/chillyroomsdk/iapppay/MainActivity$3$1;->val$extra:Ljava/lang/String;invoke-virtual {v1, v2, v3}, Lcom/chillyroomsdk/iapppay/MainActivity$3;->onPayFail(Ljava/lang/String;Ljava/lang/String;)V.line 116:goto_18const-string v1, "Unity" 

  其中的OnPayFail值得注意,既然有OnPayFail那么就应该有OnPaySuccess,我们继续往下翻的确找到了OnPaySuccess,同时在OnPaySuccess上方看到 :pswitch_45,将其记录下来。翻到底部找到了一个pswitch结构:

     .line 96:pswitch_data_86.packed-switch 0x0:pswitch_45:pswitch_4:pswitch_7c.end packed-switch 

  注意到:pswitch_45下方还有:pswitch_4和:pswitch_7c,我们找到pswitch_4所在的位置发现正好跳转到了OnPayFail所在的位置。这时我们大概清楚了代码逻辑,即不同的情况分别跳转到不同的:pswitch_代码块。我们将另外两个pswitch的跳转编号全部修改为45。到这里,购买成功的破解就完成了。

0x03 深入订单校验

  但是进入游戏发现仍然购买失败。提示的是:支付成功但验签失败。

  看来元气骑士的内购验证还是比较严密的。回到dex文件,发现该字符串仍旧位于MainActivity$3$1,由:cond_6e跳转而来,发现原来在OnPaySuccess的上一步还做了一个支付判断(if-eqz v0, :cond_6e),如果订单状态校验不吻合就跳转到:cond_6e。将这条代码注释掉,重新进入游戏购买,发现还是失败了,提示订单支付失败。若发生丢单请勿重复支付,并联系客服。

  这时冷静下来,猜想除了 MainActivity 内的 OnPayResult 判断外,应该还有其他的订单检验方法,重新审视了一下com类,不出所料,在最开始被忽视的 IAppPayOrderChecker 中发现了对应字符串,代码块对应 :cond_f5,往上一翻发现多处if-eqz跳转到了此处!二话不说对所有转到 :cond_f5 的判断语句进行注释,中途还发现一个 :cond_133 跳转到验证失败于是也一并注释了。
至此不出意外应该已经成功完成了内购破解。

0x04 破除apk签名验证

有意思的是,虽然内购破解应该已经顺利完成了,但是重编译并自己手动打上签名安装后发现直接无法进入游戏了,提示我们请下载正版游戏并跳转到了元气骑士的官方网站。猜想是联网验证于是断掉无线局域网重进游戏,发现依旧无法进入游戏并直接闪退了,看来游戏做了联网+本地的双重验证。
回到dex++,最终在 UnityExtendAcitivity 中的起始位置发现了名为 GetKeyHash 函数,代码片段如下:

 .method public static GetKeyHash()Ljava/lang/String;.registers 7.prologueconst/4 v3, 0x0.line 26:try_start_1sget-object v4, Lcom/unity3d/player/UnityPlayer;->currentActivity:Landroid/app/Activity;invoke-virtual {v4}, Landroid/app/Activity;->getPackageManager()Landroid/content/pm/PackageManager;move-result-object v4 

在.prologue与const/4 v3, 0x0之间直接插入return-void拦截此函数的执行,最后保存修改过的dex文件,更新apk包并打上应用签名,重新安装apk文件,没有出现异常,可以进入游戏了,随便购买一个人物,进入订单页面,返回取消订单,可以看到支付成功,除了人物之外,钻石也可以随意购买了。

0x05 附件与声明

破解后的游戏下载地址:https://pan.baidu.com/s/1pL1JzsR 密码: 7dvq
本文及附件内容仅限于技术学习,同时希望相应公司尽快修复相关漏洞。

Sun的逆向之路(一)——元气骑士的内购破解相关推荐

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

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

  2. 安卓逆向系列教程 4.3 登山赛车内购破解

    4.3 登山赛车内购破解 作者:飞龙 首先在这里下载游戏:http://g.10086.cn/game/760000032287?spm=www.pdindex.android.addjgame.1 ...

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

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

  4. 安卓逆向(Android)之二__《全民捕鱼》游戏内购破解

    安卓逆向之二__<全民捕鱼>游戏内购破解 环境简介 系统:Android 4.4 工具:Windows 10 64bit 夜神模拟器         Android Killer Java ...

  5. Android逆向之旅--疯狂兔子无敌跑跑 内购破解教程

    感谢「一块硬币」同学投稿,也热烈欢迎其他同学来投稿,分析是一种快乐,也是一种精神! 今日偶然看到一个还算热门的游戏,看到里面有内购的方法.尝试破解一下 1.拖入AK后重打包,一切顺利安装到手机上后发现 ...

  6. Android逆向笔记-某水果大作战内购破解思路

    思路一: 在游戏中,我们点下支付或购买,弹出一个框,我们点返回,就购买成功: 将成功转Unicode进行搜索后: 定位在此,发现payResultSuccess()为购买成功,payResultCan ...

  7. [原创]记某app内购破解 – 安卓逆向菜鸟的初体验

    前言 因为某个机缘,我拿到一个赛车app,玩了一会想买个装备,居然要我掏钱包,作为一名cracker,我觉得我的尊严受到了严重的蔑视(无奈钱包空空),我觉得要捍卫我那脆弱的玻璃心(钱包),所以,开干吧 ...

  8. Android逆向之旅--龙之契约游戏钻石内购破解分析

    今天得到了一个游戏样本进行分析,过程中遇到了一些困难,出于个人爱好对它进行了详细的分析和破解.游戏大致就是对游戏文件进行加密,对关键类进行动态释放.第一次分析加密逻辑是放到了加密的dex中,所以需要下 ...

  9. java手游+刺客_元气骑士手游教你如何成为一名顶尖流刺客

    元气骑士刺客你了解吗?元气骑士刺客技能你知道吗?元气骑士刺客你知道它的技能伤害吗?今天小编就带着小伙伴们一起进入到元气骑士世界,让我们去探索刺客的信仰之路. 行于黑暗,侍奉光明;万物皆虚,万物皆允! ...

最新文章

  1. 数据不够,是模型表现不佳的“借口”,还是真正的问题所在?
  2. 推荐系统中基于深度学习的混合协同过滤模型
  3. 眼见为实?其实是“脑补”!华人数学家解开视觉奥秘:一切都是大脑假装让人看见...
  4. 对高级软件工程课程的展望 by 吴双志
  5. 肿瘤细胞信号转导: 肿瘤治疗的靶向信号通路 PDF
  6. android studio怎样运行uniapp打包项目_uni app系列002:离线打包apk(2)
  7. 鲜为人知的编程真相(转载)
  8. Android 打造异常崩溃捕获工具
  9. java socket ip_JAVA 网络编程 TCP/IP、Socket 和协议设计
  10. jar包与aar包的区别
  11. linux qq 中文输入法下载,【QQ拼音输入法纯净版和搜狗输入法 For Linux哪个好用】QQ拼音输入法纯净版和搜狗输入法 For Linux对比-ZOL下载...
  12. Quartz配置RAMJobStore-007
  13. mac安装教程 sqlyog_Mac开发环境配置:Homebrew的安装
  14. 201671030112—词频统计软件项目报告
  15. 搜狐新闻表情出现怪异现象
  16. 【IoT】产品设计:结构设计之堆叠设计流程(二)
  17. Python加密与解密
  18. 「萌新上手Mac」安装软件,步骤超简单
  19. 华为鸿蒙OS摄像头,华为放大招:首发屏下摄像头+鸿蒙OS
  20. 前端Vue项目中点击a标签实现下载文件到本地的功能

热门文章

  1. 让低版本的IE浏览器支持HTML5
  2. 爱情有多美(曾贤志)
  3. 自动化脚本编写-python
  4. Kinect结合Unity开发(一)
  5. CCV所用资料资源汇总
  6. Expert Metalink – Support Tips Tools Resources
  7. global的作用以及使用方法
  8. 苹果cmsV10仿韩剧网响应式视频影视电影网站源码
  9. 侯捷C++视频笔记——C++面向对象高级编程(下)
  10. 人脸检测工具face recognition的安装与应用