《全民捕鱼》游戏分析

news/2025/2/14 5:24:17/

文章目录

    • 分析环境
    • 逆向分析
      • 日志分析法
      • 字符串分析法
      • 去除弹窗
      • 添加个人信息的破解
    • 总结

分析环境

系统:Android 4.4
工具:Windows 10 64bit 夜神模拟器 Android Killer

游戏:全民捕鱼V1.7

文件: fkby.apk
大小: 14450756 bytes
修改时间: 2016年3月 11日, 14:53:34
MD5: C67C9D8DB091BE205457B1C6B9BC1352
SHA1: 0FD4027602C2628568E52806603BA1FC95EBE90D
CRC32: 406D694D

文件信息如上,有VT权限的话可以直接下载

在这里插入图片描述

这个游戏虽然已经下架,但是分析思路非常值得初学者学习。

逆向分析

在这里插入图片描述

进入游戏商城,点击购买金币,会弹出购买失败的提示,可以根据这个字符串作为切入点去分析app,也可以根据日志去分析。这里我们先通过日志去分析整个app

日志分析法

将apk加载到Android Killer

在这里插入图片描述

选择已经开启的模拟器,点击日志

在这里插入图片描述

点击查找进程按钮

在这里插入图片描述

根据apk的包名确定需要查找的进程ID。点击开始按钮

在这里插入图片描述

点击金币,此时窗口出现多条日志,由于这里还没有进行支付,将所有日志清空

在这里插入图片描述

然后点击确定,出现支付失败的提示。

在这里插入图片描述

那么这一段日志,必然调用了支付的方法,我们可以从下往上分析整个日志。

关键日志如下:

Failed DX_payCode2 == 5125375
FaildCode == 1211
orderFinish code = 3 result= 0

DX_payCode2必然是和支付相关的错误码

在这里插入图片描述

这里直接在工程中搜索这个关键词

在这里插入图片描述

来到了关键地方

在这里插入图片描述

当前类内有三个方法,支付取消,支付失败和支付成功

在这里插入图片描述

但是观察这个类名,可以知道当前这个是匿名内部类,所以我们没法直接找到调用pay函数的地方,这里可以用一个取巧的办法。

在这里插入图片描述

将支付失败的代码全部删掉

在这里插入图片描述

然后将支付成功的代码复制到支付失败方法内

在这里插入图片描述

修改完成之后可以看到已经购买成功了。但是这种方法属于是取巧,并不适用于所有的游戏破解。我们再来观察支付成功和失败函数的区别

在这里插入图片描述

两个函数的区别在于传入的 GameJni.OderFinish传入的第二个参数和SendMessage传入的第三个参数。

发消息的代码和界面相关,这个暂时先不管,我们可以找到支付失败函数将0改成1看看会产生什么效果

在这里插入图片描述

将v1修改为1,然后保存编译

在这里插入图片描述

在这里插入图片描述

首先弹出购买失败页面,然后弹出购买成功提示,表示我们已经修改成功了。

字符串分析法

接着我们可以用字符串分析的方法来破解这个apk

在这里插入图片描述

切入点为购买失败的提示信息

在这里插入图片描述

在搜索框中输入购买失败,然后转成Unicode

在这里插入图片描述

直接搜索,就定位到了购买失败的调用地方

在这里插入图片描述

查看源码发现这里有购买成功和失败的调用语句,但是这个位置只是弹出购买成功和失败的提示,所以我们需要再搜索别的地方

      initShow((String)paramMessage.obj);continue;GamePay.sendOrder((String)paramMessage.obj);continue;buyFail((String)paramMessage.obj);continue;buyOk((String)paramMessage.obj);continue;payFail((String)paramMessage.obj);

这里就需要挨个搜索代码中出现的函数名,找到可以修改的地方

在这里插入图片描述

最终通过payFail定位到最后一个地址

在这里插入图片描述

同样可以找到关键代码,然后将参数2修改为1即可破解成功

去除弹窗

接下来我们希望将当前的这个弹出去掉,直接显示购买成功

在这里插入图片描述

想要去除这个弹窗,就需要在这个窗口弹出之前调用游戏中的OderFinish方法。继续用日志分析法来分析

在这里插入图片描述

点击购买出现弹窗,然后查看当前出现的日志。

event_id=buyMoney, label=1000
GameJni order payCode = 3 num= 1
order = 5125375
GamePay sendOrder payCode = 5125375
context.payType = 1
payCode = 5125375
DX payCode in DXSend == 5125375

这一次我们想要去除弹窗的话应该从上往下对日志进行分析。

在这里插入图片描述

搜索GameJni order payCode这个字符串

在这里插入图片描述

查看JAVA代码,order方法接着又调用了下面这个方法

GamePay.mListener.order(paramInt1, paramInt2);

继续进入order方法查看代码
在这里插入图片描述

这一段代码我们并不知道是什么作用,但是看代码最后调用了OderFinish方法,第二个参数为0,说明这里是购买失败的分支。

如果我们直接让代码跳转到OderFinish方法,并且将第二个参数修改为1,是否就可以跳过弹窗的过程?

接着来实际验证~

在这里插入图片描述

找到IAPListener.smali的order方法

在这里插入图片描述

来到函数末尾,首先将v0修改为1,然后复制::cond_2这个标签

在这里插入图片描述

然后在函数头直接goto到OderFinish的位置,保存并编译安装。

在这里插入图片描述

点击购买之后,直接弹出提示,显示成功信息,由于我们跳过了所有方法,直接调用购买成功的方法,所以没有弹出Toast提示信息

添加个人信息的破解

为了更有趣一点,我们在购买成功的提示上添加自己的个人信息。

但是当前的这个类,并不是主界面,没有办法拿到Toast函数需要的this指针,所以只能想其他办法。

在这里插入图片描述

通过代码我们可以看到当前的order函数是可以给主界面发送消息的,这里发送的消息是10004

在这里插入图片描述

点击IAPHandler来查看一下消息响应函数

在这里插入图片描述

通过定义的静态变量跟函数名我们已经能拿到消息ID和函数的对应关系。所以如果想让程序弹出一个提示信息显示购买成功,只需要发送一个ID为10010的消息即可

在这里插入图片描述

这里我们修改的方式为将if语句注释,然后修改ID为10010,最后goto到OrderFinish函数

在这里插入图片描述

首先将V3消息ID修改为0x271A

在这里插入图片描述

然后注释掉第一条if语句

在这里插入图片描述

在发送完消息后直接goto到OrderFinish函数

在这里插入图片描述

然后搜索购买成功字符串

在这里插入图片描述

然后修改这个字符串。实际效果如图:

在这里插入图片描述

成功加上了我们自己的个人信息。接着我们在游戏启动界面,再添加一个个人信息提示

在这里插入图片描述

找到入口类的onCreate方法,拉倒函数末尾,右键->插入代码->Toast

在这里插入图片描述

保存并编译

在这里插入图片描述

修改完成之后在游戏启动界面弹出了我们自定义的提示信息。比起破解这个环节应该是最有成就感的了。

总结

安卓游戏内购的破解简单的思路都是大同小异,也可以更改调用的函数参数等.smail代码与伪Java代码很接近自然语言逻辑思路,在没有安卓加固(壳)的游戏上做一些内购破解还是很简单的.去网上Download几个游戏练习一下破解就很有成就感.


http://www.ppmy.cn/news/202989.html

相关文章

浏览器网页闪退原因分析

浏览器中网页闪退可能由多种原因引起。以下是一些可能的原因: 内存问题:如果浏览器占用过多内存,系统可能会强制关闭某些页面或整个浏览器以保护系统的稳定性。 扩展或插件冲突:某些浏览器扩展或插件可能与网页的代码或其他扩展产…

锐龙r75800h和i711800h哪个好 锐龙r75800h和i711800h的核显

酷睿i7-11800H采用的是Intel最新的10nm制程工艺,虽然在数字上看似比不上7nm,但是其大家都知道Intel的10nm不会弱于台积电的7nm和三星的5nm。基于Tiger Lake-H构架的i7-11800H处理器是规格大改后的产物,其中二级缓存容量高达10MB,上…

达人评测 锐龙r5 6600h和r5 6600u区别

R5-6600H配置参数:6nm的工艺,6核12线程,3.3GHz的主频,4.5GHz的睿频,三级缓存16MB,功耗TDP为45W,核显为radeon 660m,6CU 笔记本cpu选r5 6600h还是r5 6600u这些点很重要看过你就懂了 h…

锐龙R75800X和R5 5600X 哪个好

锐龙7 5800X,单CCD,8核心16线程,4MB二级缓存,32MB三级缓存,基准频率3.8GHz,最高加速4.7GHz,热设计功耗为105W。 选R7 5800X还是R5 5600X这些点很重要!看完你就知道了https://list.jd.com/list.h…

卧室投影仪需要多少流明比较好?流明怎么看?

家用投影仪流明,简单来说,就是亮度,它是衡量投影机性能的一个重要指标,流明越高,就算是白天强光的影响下,也能看的清 楚,那么家用投影仪多少流明合适?流明太高或太低都不太适合于照明…

python中Requests发送json格式的post请求方法

问题:做requests请求时遇到如下报错: {“code”:“500”,“message”:"JSON parse error: Cannot construct instance of com.bang.erpapplication.domain.User (although at least one Creator exists): no String-argument constructor/factory …

5寸android智能手机,5寸刚入门 六款巨屏安卓智能手机盘点(5)

要说目前销量最高的手机恐怕非三星i9500(GALAXY S4)莫属,该机沿袭了前作i9300的经典外观,5英寸1080P全高清屏幕的显示效果极为清晰细腻,1.6GHz Exynos 5处理器加2GB内存更是强悍无比。目前该机的售价在3480元左右,虽然价格不算便宜…

最新的三星android版本是多少,国行三星S7/S7 Edge更新最新安卓8.0系统

【手机中国新闻】6月27日,经过了漫长的测试时间,今天国行三星Galaxy S7/S7 Edge终于可以在收到正式版安卓8.0系统的推送了。据悉这次国行8.0的升级包大小为1.6GB左右(不同版本会有一定的差别)。 三星Galaxy S7是三星2016年2月22日在巴塞罗那发布一款产品…