发新帖

【Android逆向教程】Unity3D付费逆向思路+实例(2)

[复制链接]
45608 12
本帖最后由 Sarkozy 于 2014-11-22 19:28 编辑

跟着上一节:
【Android逆向教程】Unity3D付费逆向思路+实例(1)
http://www.pd521.com/forum.php?mod=viewthread&tid=56&fromuid=18

我们发现了唯一一个方法,点进去以后代码如下:

private string arg){    Log(arg);    int, string, Parse(arg);    this.onBillFinish(pair.Value);}



private string arg){    Log([url=]arg[/url]);    int, string, Parse([url=]arg[/url]);    this.onBillFinish([url=]pair[/url].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,如图所示:

http://img.blog.csdn.net/20140912105344062?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2Fya296eTIwMTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

结合上面我们看到的代码,我们可以初步判断出

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中的支付验证模式。




举报 使用道具

回复

精彩评论12

wgz001    发表于 2014-11-22 19:55:10 | 显示全部楼层
学习了  
很好的教程
有讲解   还有样品  赞
:loveliness:

举报 使用道具

回复 支持 反对
哆啦B梦    发表于 2014-11-22 20:08:48 | 显示全部楼层
感谢分享,小白表示鸭梨山大

举报 使用道具

回复 支持 反对
challenge    发表于 2015-1-4 21:57:26 | 显示全部楼层
谢谢楼主!!:lol

举报 使用道具

回复
119552994    发表于 2015-1-12 20:25:24 | 显示全部楼层
謝謝法總的教程 謝謝額:lol

举报 使用道具

回复 支持 反对
听鬼哥讲故事    发表于 2015-2-4 11:56:14 | 显示全部楼层
首先多谢分享啊,但是有一点不懂,就是你最后说的,搜索 "1  然后被搜索出来的smali文件有一百多个啊,可以精确点在那个smali麽

举报 使用道具

回复 支持 反对
cendy_King    发表于 2015-3-19 17:05:40 | 显示全部楼层
受教了。unity的执行语言和我们看到反编译后的Java语言是不一样的,一种是效果图,一种是执行顺序图,弄得我一开始蒙了。明明Java看的是不相等就失败。但是等于就失败了。如果停留前一幅图像,那么你就没有注意到,你改变了unity语法后,反编译后的Java语言效果图也是随之改变。

举报 使用道具

回复 支持 反对
日岳如流    发表于 2015-5-2 21:37:15 | 显示全部楼层
谢谢大神的教程,感觉很简单,却又觉得很困难

举报 使用道具

回复 支持 反对
x19910222x    发表于 2015-7-22 15:48:03 | 显示全部楼层
不懂啊,但谢谢

举报 使用道具

回复 支持 反对
—最小化    发表于 2015-7-27 09:19:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表