逆向教程->游戏中的U3D付费模式分析
来源:互联网 发布:淘宝网2017女装秋装 编辑:程序博客网 时间:2024/05/22 15:34
转载请把我博客地址带上:http://blog.csdn.net/sarkozy2014。么么哒
今天xx游戏的时候发现一款在U3D中的支付验证
原软件地址:http://www.yxdown.com/shouji/82887.html
工具:apkide、reflector
开始了:
从smali文件夹中发现了一个MM文件夹,这是典型的移动支付接口。遇到这个直接搜onbillingfinish即可,搜索结果如下图:
箭头所指为本次搜索结果中唯一一个method。我们来查看他的java源码:
方框中我们看到了,这个onbillingfinish没有任何的判断,难道我们找错了吗?可是这个onbillingfinish就这一个方法啊!仔细看图中红色方框处,发现了一行命令:
sendMsgToUnity("onBillingFinish", arrayOfString);
也就是最后执行了这一行命令,根据命令的简单翻译,可得出这是一个像unity发送信息的命令。
翻译为smali代码就是这样:
aput-object v3, v1, v2
invoke-virtual {p0, v0, v1}, Lcom/juxiang/game01/mmIAPListener;->sendMsgToUnity(Ljava/lang/String;[Ljava/lang/String;)V
接下来,我们要用到reflector这个工具了。用这个工具打开assembly-csharp文件【不会的请查阅本博客中伊甸分析教程】,如图所示:
同样的,既然是移动的支付接口,上文中有说道,目前的MM接口支付判断就是在onbillingfinish,按下F3搜索,记得切换到方法搜索,如图所示:
我们发现了唯一一个方法,点进去以后代码如下:
private string arg){ Log(arg); int, string, Parse(arg); this.onBillFinish(pair.Value);}
private string arg){ Log(arg); int, string, Parse(arg); this.onBillFinish(pair.Value
大家注意到这样一行代码了吗?
this.onBillFinish(pair.Value);有一个onbillfinish,我们点进去即得到如下代码:
public int code, string, string mmPaycode = map["Paycode"]; getPaycode(mmPaycode); if (code == 0x66) { Instance.iapAPI.onBillFinish(false, code2); }}这里我们终于找到判断了,如果这些代码是什么意思呢,待我花个十分钟百度一下····
public int code, string, string mmPaycode = map["Paycode"]; //定义mmpaycode从map的paycode中获取,大概就是获取订单号的意思 getPaycode(mmPaycode); //这是是将订单ID入读给code2 if (code == 0x66) //从提交进来的参数int code中判断 { Instance.iapAPI.onBillFinish(false, code2); //如果code<>102就跳到不成功也就是本行代码 }}我们怎么修改呢?老方法,打开tools-reflexilv1.6,如图所示:
结合上面我们看到的代码,我们可以初步判断出
23 bne.un ->(16)call iapAPI iapAPI::get_instance() //如果不等于则跳到16行(最左边表示代码行数)
这是跳转的,同样下面的:
40 br ->(20)ret //否则就跳到20行处
根据上面两行代码我们可以判断出来以下信息:
ldarg.1 //表示的是获取改方法的第一个参数也就是int code
ldc.i4.s//表示102也就是待比较的值。
那我们修改成这样既可
23 beq ->(16)call iapAPI iapAPI::get_instance() //如果等于则跳到16行(最左边表示代码行数)
因为内购游戏都是支付失败的,所以code与102比较也就永远不会相等,那么只要有购买信息,他都返回成功
然后点击assembly-csharp右键-reflexilv1.6-save as 选择原来导入的文件覆盖既可。
最后:去内购重点的不扣费!,在smali中搜索《"1》书名号内的内购,将1开头的8位数以上的号码全部改为0000000(订单号除外)
小结:本节主要介绍一下unity3d中的支付验证模式。
2014.09.12 Sarkozy
- 逆向教程->游戏中的U3D付费模式分析
- 逆向教程->U3D游戏逆向分析(伊甸逆向分析)
- 逆向教程->2014.08版电信爱游戏支付分析
- 逆向教程->赛车游戏车辆选择限制分析
- 关于逆向某商业游戏……(U3D)
- 听鬼哥说故事之U3D游戏破解分析
- 逆向教程->软件积分逆向分析
- u3d菜鸟入门:游戏中的图集
- Android逆向之旅---Android中的GG大玩家应用破解教程分析
- [转]逆向分析师教程连接
- unity3d 游戏内付费
- 游戏内付费
- 游戏付费点
- 游戏内付费及各种付费插件
- 游戏逆向
- u3d游戏客户端架构
- u3d游戏客户端架构
- U3D打箱子游戏
- pymongo group的用法
- HDU 2680 Choose the best route
- JAVA中String,StringBuffer与StringBuilder的区别
- 读取Flex AIR应用程序设置
- 西门子PLC学习笔记三(S7-300信号模块)
- 逆向教程->游戏中的U3D付费模式分析
- AngularJS入门(六)
- Android下的消息推送的原理分析
- n个数中选出最大值和最次大值
- 不知不觉捷达报废 折腾完了
- C++ builder 之错误总结:重新打开BCB提示无法打开"EditorLineEnds.ttr"文件-都是补丁惹的祸
- Json-lib 添加
- 设计模式学习总结
- 如何编写高效的jQuery代码