本帖最后由 Nattevak 于 2022-4-20 16:10 编辑
全民捕鱼内购分析
1.1
字符串分析法
搜索“购买失败”字符串
1.2
使用工具查看当前java代码
1.3
寻找发消息的函数,搜索10005,需将其转为16进制
1.4
购买失败、取消购买发送10005,购买成功-buyOk则发送10010
1.5
向上分析,可知IAPListener$1是反编译时生成的匿名内部类
1.6
日志分析法
选择捕鱼进程
2.1
进行购买操作,购买失败获取对应的日志,自下而上分析
2.2
搜索支付码
2.3
查看java代码,可以发现就是我们刚刚通过字符串分析找到的位置
对比支付成功与支付失败的代码差异,分析修改方法,可以发现主要就是OderFinish函数的区别,我们只需要修改OderFinish函数的参数即可更改支付操作。
2.4
修改参数或替换整体代码,然后编译并重新安装程序
2.5
仅修改参数则同样显示购买失败字样,但实际支付成功
2.6
也可修改消息码为10010(0x271a)同样可显示购买成功且实际支付成功
2.7
替换整体代码显示购买成功且实际支付成功
2.8
去除支付弹窗
虽然这里已经可以完成购买操作了,但是每次购买时都会弹出支付框,严重影响我们充值的效率
2.9
方法一
我们已知关键函数OderFinish的调用可以获取金币,那我们就在调用弹出对话框的代码之前调用OderFinish函数,绕过支付弹窗。
根据日志分析,可以找一些比较靠前的日志输出,一般这个时候还没有弹出对话框。
因为需要找到弹窗之前的位置,所以这里需要自上而下的分析,尝试搜索GameJni order payCode字符串,此处日志位置基本属于顶端,应该是还没有弹支付框的。
3.0
搜索字符串,查看java代码
3.1.1
3.1.2
想让支付操作在弹窗之前,则需要将OderFinish函数在GameJni order payCode之前被调用
3.1.3
在GameJni.class中搜索OderFinish
3.1.4
对应Android代码
3.1.5
注释掉order中的两条语句,替换为OderFinish中的nativeOderFinish语句,此修改方法需要注意参数是否匹配
3.1.6
点击购买后无支付弹窗,直接显示购买成功
3.1.7
方法二
分析order函数部分
3.2.1
进入GamePay,存在LIstener,即进入IAPListener类中进行分析
3.2.2
可以看到,IAPListener类的order函数中也有OderFinish
3.2.3
对应Android中的代码
3.2.4
修改方法:
修改const/4 v0,0x0 为 const/4 v0,0x1
3.2.5
在函数开头添加 goto :cond_2 语句
3.2.6
修改成功后保存并重新编译,安装APK,运行游戏进行测试,成功
3.2.7
添加自己的购买反馈信息
在我们刚添加goto语句的位置上方有const/16 v3, 0x2714语句,可知为消息码10004,将其更改为10005->const/16 v3, 0x2715便于我们添加自己的信息(修改为0x271a也可以)
由于我们需要让他发消息,所以暂时剪切goto :cond_2语句,向下分析,找到if语句,将其注释掉,让他不进行判断,直接发消息
4.1
等调用了sendMessage发送了消息后,添加goto :cond_2语句,直接跳转
4.2
将10005消息码对应的购买失败字样更改为我们想要他显示的内容
4.3
成功添加自定义的显示内容
4.4
增加游戏启动的提示信息
在入口类LogoActivity中的onCreate函数的末尾,插入Toast调用代码即可。
使用AndroidKiller中的模板
5.1
在const-string v0, "you message"处,将you message修改为自己添加的启动信息即可
5.2
动态调试smali代码
导入AndroidKiller下的Project目录“..\AndroidKiller_v1.3.1\projects\fkby\Project”
6.1
列举设备
adb devices
安装apk
Adb install fkby.apk
以调试方式启动apk
adb shell am start -D -n com.bufish.org/.LogoActivity
查看进程端口
adb shell "ps | grep bufish"
转发端口
adb forward tcp:8700 jdwp:1235
查找 8700 端口占用程序 PID
netstat -nao | findstr "8700"
6.2
6.3
修改调试配置中的连接端口为8700
6.4
Debug运行,连接成功,程序断下
6.5
动态调试操作顺序:
① 使用Androidstudio导入smali代码,创建项目
② 打开进程管理器,结束adb.exe
③ 打开模拟器
④ 以调试方式启动apk
⑤ 转发端口
⑥ Debug运行程序
|