安卓逆向(Android)之二__《全民捕鱼》游戏内购破解
安卓逆向之二__《全民捕鱼》游戏内购破解
环境简介
系统:Android 4.4
工具:Windows 10 64bit 夜神模拟器
Android Killer
Java Decompiler
全民捕鱼游戏简介
游戏名称:全民捕鱼
游戏类型:休闲益智
游戏版本:1.7
游戏界面如下:
逆向分析
首先我们进入商城点击付费金币的购买,弹出"购买失败"的Toast(吐司)
根据这个提示我们使用AndroidKiller分析这个APK.看到入口函数为LogoActivity很简单.
直接使用特征Toast字符串搜索,没有搜到.
再次测试把字符串转换为UniCode形式(下边的小a大A按钮),再次搜索,找到一个字符串结果
双击到使用处的语句,查看源码发现此处有购买成功失败函数的选择调用语句
我们通过这几个函数继续查找对比,最后在搜索payFail的最后一个结果,发现重要函数所在
支付失败,与支付成功函数离得很近,分析发现,函数参数也相似
所以我们使用的破解内购的办法可以是,把支付成功函数的函数体,整个复制到支付失败函数里边去,让支付永远成功.
两个函数smali代码
.method public payFailed(Ljava/util/Map;I)V.locals 5.param p1, "params" # Ljava/util/Map;.param p2, "arg1" # I.prologue.line 208const-string v0, "cocos2d-x debug info"new-instance v1, Ljava/lang/StringBuilder;invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()Vconst-string v2, "Failed DX_payCode2 == "invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v1sget-object v2, Lcom/payCom/org/IAPListener;->DX_PAYCODES:[Ljava/lang/String;iget-object v3, p0, Lcom/payCom/org/IAPListener$1;->this$0:Lcom/payCom/org/IAPListener;iget v3, v3, Lcom/payCom/org/IAPListener;->curPayIndex:Iaget-object v2, v2, v3invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v1invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;move-result-object v1invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I.line 209const-string v0, "cocos2d-x debug info"new-instance v1, Ljava/lang/StringBuilder;invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()Vconst-string v2, "FaildCode == "invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v1invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v1invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;move-result-object v1invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I.line 210iget-object v0, p0, Lcom/payCom/org/IAPListener$1;->this$0:Lcom/payCom/org/IAPListener;iget v0, v0, Lcom/payCom/org/IAPListener;->curPayIndex:Iconst/4 v1, 0x0invoke-static {v0, v1}, Lcom/payCom/org/GameJni;->OderFinish(II)V.line 211sget-object v0, Lcom/payCom/org/IAPListener;->iapHandler:Lcom/payCom/org/IAPHandler;sget-object v1, Lcom/payCom/org/IAPListener;->iapHandler:Lcom/payCom/org/IAPHandler;const/16 v2, 0x2715sget-object v3, Lcom/payCom/org/IAPListener;->DX_PAYCODES:[Ljava/lang/String;iget-object v4, p0, Lcom/payCom/org/IAPListener$1;->this$0:Lcom/payCom/org/IAPListener;iget v4, v4, Lcom/payCom/org/IAPListener;->curPayIndex:Iaget-object v3, v3, v4invoke-static {v1, v2, v3}, Landroid/os/Message;->obtain(Landroid/os/Handler;ILjava/lang/Object;)Landroid/os/Message;move-result-object v1invoke-virtual {v0, v1}, Lcom/payCom/org/IAPHandler;->sendMessage(Landroid/os/Message;)Z.line 212return-void
.end method.method public paySuccess(Ljava/util/Map;)V.locals 5.param p1, "params" # Ljava/util/Map;.prologue.line 202const-string v0, "cocos2d-x debug info"new-instance v1, Ljava/lang/StringBuilder;invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()Vconst-string v2, "Success DX_payCode1"invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v1sget-object v2, Lcom/payCom/org/IAPListener;->DX_PAYCODES:[Ljava/lang/String;iget-object v3, p0, Lcom/payCom/org/IAPListener$1;->this$0:Lcom/payCom/org/IAPListener;iget v3, v3, Lcom/payCom/org/IAPListener;->curPayIndex:Iaget-object v2, v2, v3invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v1invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;move-result-object v1invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I.line 203iget-object v0, p0, Lcom/payCom/org/IAPListener$1;->this$0:Lcom/payCom/org/IAPListener;iget v0, v0, Lcom/payCom/org/IAPListener;->curPayIndex:Iconst/4 v1, 0x1invoke-static {v0, v1}, Lcom/payCom/org/GameJni;->OderFinish(II)V.line 204sget-object v0, Lcom/payCom/org/IAPListener;->iapHandler:Lcom/payCom/org/IAPHandler;sget-object v1, Lcom/payCom/org/IAPListener;->iapHandler:Lcom/payCom/org/IAPHandler;const/16 v2, 0x271asget-object v3, Lcom/payCom/org/IAPListener;->DX_PAYCODES:[Ljava/lang/String;iget-object v4, p0, Lcom/payCom/org/IAPListener$1;->this$0:Lcom/payCom/org/IAPListener;iget v4, v4, Lcom/payCom/org/IAPListener;->curPayIndex:Iaget-object v3, v3, v4invoke-static {v1, v2, v3}, Landroid/os/Message;->obtain(Landroid/os/Handler;ILjava/lang/Object;)Landroid/os/Message;move-result-object v1invoke-virtual {v0, v1}, Lcom/payCom/org/IAPHandler;->sendMessage(Landroid/os/Message;)Z.line 205return-void
.end method
修改完成后,保存,并重新编译
在夜神模拟器上卸载之前的原版游戏,安装破解后的游戏,实现了商城内购破解
添加个人信息的破解
为了更有趣一点,我们在购买成功的提示上添加自己的个人信息
我们再次搜索到"购买成功"提示,在字符串之前加入"Hades破解:",如下,最后再次编译,安装测试
完成破解:
总结:
安卓游戏内购的破解简单的思路都是大同小异,也可以更改调用的函数参数等.smail代码与伪Java代码很接近自然语言逻辑思路,在没有安卓加固(壳)的游戏上做一些内购破解还是很简单的.去网上Download几个游戏练习一下破解就很有成就感.
安卓逆向(Android)之二__《全民捕鱼》游戏内购破解相关推荐
- 安卓游戏内购破解切水果大战(替换法和Switch法)
继<安卓游戏内购破解之滚动的天空>之后根据大神的帖子,实现破解一款游戏内购! 使用替换法和Switich方法 工具:依旧是Android Killer1.3.1.0 + JDK1.7 软件 ...
- 安卓游戏内购破解之滚动的天空
继<教我兄弟学Android逆向02 破解第一个Android程序>之后根据大神的帖子,实现破解一款游戏 内购! 工具:依旧是Android Killer1.3.1.0 + JDK1.7 ...
- Android逆向之旅--疯狂兔子无敌跑跑 内购破解教程
感谢「一块硬币」同学投稿,也热烈欢迎其他同学来投稿,分析是一种快乐,也是一种精神! 今日偶然看到一个还算热门的游戏,看到里面有内购的方法.尝试破解一下 1.拖入AK后重打包,一切顺利安装到手机上后发现 ...
- 安卓逆向_14 --- 单机和弱联网游戏内购 突破口 和 思路
From:https://www.bilibili.com/video/BV1UE411A7rW?p=41 Android 逆向资源收集( apk ):https://blog.csdn.net/qq ...
- [安卓逆向]android adb常用命令及使用案例
[安卓逆向]android adb常用命令 一.调试相关 1.开启adb服务 adb start-server 2.关闭adb服务 adb stop-server 3.列出所有连接的设备 adb de ...
- 安卓逆向之JAVA层静态分析(愤怒的小鸟去广告,充值破解)
安卓逆向之JAVA层静态分析(愤怒的小鸟去广告,充值破解) 前言 今天女票跟我吐槽,自己闲来无事下个愤怒的小鸟玩玩,结果又是实名认证,又是广告啥的,瞬间没心情玩了,我听后大惊,还有这种事.跟女票说:& ...
- Android逆向实例笔记—手游中的内购破解(火柴人联盟最新版1.9.2 BB弹 )
最近学到了一些内购的破解方式,就来试试手.然后找个了比较火爆的游戏BB弹,找个个没壳的就来练习. 这些东西都是大神写烂了的东西了,我这里只是写出我自己找不到方法的时候的思路.勿笑. 一.BB弹 BB弹 ...
- 全民捕鱼游戏1.3.1.7原版吸粉小游戏模块
1.深度实践Spark机器学习 PDF 超清版 深度实践Spark机器学习电子书封面 读者评价 本课程主要讲解基于Spark 2.x的机器学习库,MLlib实现了常用的机器学习,如:聚类.分类.回归 ...
- 安卓逆向系列教程 4.3 登山赛车内购破解
4.3 登山赛车内购破解 作者:飞龙 首先在这里下载游戏:http://g.10086.cn/game/760000032287?spm=www.pdindex.android.addjgame.1 ...
最新文章
- 协程Coroutines入门
- Calc3: Geometrics
- [转]asp.net文件下载方法...
- poj 3348(求凸包面积)
- python-day1-login练习
- 发现文件夹和文件夹都显示为蓝色和绿色,是否中毒了?
- 『转』line-height
- SAP Spartacus基于travis的持续集成
- Spark权限问题:Spark-submit运行报错 Permission denied user=deploy
- Mysql学习总结(37)——Mysql Limit 分页查询优化
- 如何安装.nupkg文件?
- 【uart篇】synopsys uart vip配置使用
- STM32中断编程步骤
- 程序猿财务自由之路·规划篇
- [707]Apache NiFi安装及简单使用
- win环境20分钟搭建php+sql服务器Apache+php+mysql在windows下的安装与
- SQLyog设置唯一
- 贝勒大学计算机专业,贝勒大学计算机科学.pdf
- 医疗器械行业CRM客户管理软件价值
- 通信原理 简易2DPSK的相干解调与非相干解调的matlab实现