ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一个简单的安卓游戏内购破解

2019-11-30 23:00:41  阅读:488  来源: 互联网

标签:内购 case 游戏 安卓 Killer 破解 apk 购买 smali


综述

一个简单的安卓游戏内购破解,主要用于熟练smali汇编以及相关工具的使用

使用工具

夜神模拟器v3.8.3.1

Andriod Killer v1.3.1.0

分析过程

使用夜神模拟器安装该游戏程序,打开游戏商城,发现本游戏主要货币是钻石,钻石需要通过话费充值获取,在未破解的情况下,点击购买,钻石购买失败,具体情况如下图。

 

使用Andriod Killer v1.3.1.0打开该程序,通过初始页面工程信息选项卡下的入口链接,可以直接找到该程序的入口类对应的smali文件。

 

点开工程管理器选项卡,可以看到整个apk文件解压后的文件结构,其中可以找到很多重要文件,比如保存着app配置信息和全局信息的AndroidManifest.xml文件

因为本次破解目标是游戏的购买机制,所以在工程搜索选项卡下搜索"购买"字符串,需要注意的,需要将字符串转为unicode码进行搜索才会有用。具体过程如下。

 

搜索到只有一个文件,该文件中有三个地方的字符串与购买相关

 

将鼠标移动到smali代码的中的字符串上,工具会自动将unicode解码出来,发现该三处字符串分别与取消购买、购买成功,购买失败相关,并且如果将鼠标移动到smali指令上,工具还会给出该指令的解释,从而方便理解smali代码

 

此时可以通过Android Killer提供的反编译工具,将当前smali文件转换为JAVA源码,以方便阅读,注意此时得到的JAVA可能存在问题,可以多尝试使用几个反编工具(如JEB、GDA)对smali进行反编译,从而得到更好的JAVA代码。

从JAVA代码中,我们看到整个函数的是一个switch-case结构,根据函数参数(paramInt)的不同,从而执行不同的分支,而购买成功与购买失败的字符串就出现在相邻的分支中,如下图。

 

回到Android Killer的smali汇编中,我们发现购买成功对应的case值为pswitch_0, 购买失败对应的case值为pswitch_1

 

此时我们大胆猜测,能否通过将两个case值呼唤,从而让购买失败情况下执行购买成功的代码呢?

 

如上图,我们将两个case值互换,ctrl+s保存修改,因为改变了程序原有的代码,所以需要将apk程序重新打包,此时可以使用Android Killer中的编译功能,该功能可以将app重新编译打包,并重新签名,从而生成一个新的apk文件。

 

根据生成路径,找到新的apk文件,将模拟器中原本的app卸载,然后使用新apk重新安装,打开游戏后,我们发现游戏内钻石购买机制被破解,即使购买失败,也能获得相应的钻石。

 

注意因为此游戏的购买机制全部在客户端判断执行,即所谓的内购,所以这种简单的方法可以达到目的,如果对于购买机制在服务端判断执行的游戏,如果要破解,就需要抓包分析其数据包结构,从而构造指定结构的数据包发送给服务端。

标签:内购,case,游戏,安卓,Killer,破解,apk,购买,smali
来源: https://www.cnblogs.com/hell--world/p/11964398.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有