【Android逆向教程】Unity3D付费逆向思路+实例(2)
本帖最后由 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(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,如图所示:
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 codeldc.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中的支付验证模式。
学习了
很好的教程
有讲解 还有样品赞
:loveliness: 感谢分享,小白表示鸭梨山大 谢谢楼主!!:lol 謝謝法總的教程 謝謝額:lol 首先多谢分享啊,但是有一点不懂,就是你最后说的,搜索 "1然后被搜索出来的smali文件有一百多个啊,可以精确点在那个smali麽 受教了。unity的执行语言和我们看到反编译后的Java语言是不一样的,一种是效果图,一种是执行顺序图,弄得我一开始蒙了。明明Java看的是不相等就失败。但是等于就失败了。如果停留前一幅图像,那么你就没有注意到,你改变了unity语法后,反编译后的Java语言效果图也是随之改变。 谢谢大神的教程,感觉很简单,却又觉得很困难{:4_98:} 不懂啊,但谢谢
页:
[1]
2