继续整理以前的文章,对新手可能有点思路的启发吧,直接放博客了...
----------------------------分割线---------------------------------
这两天看到网上有人发了关于移动手机卡内购的的教程,直接把解包后的文件ChinaMobilePurchase$PurchaseCallBack.smali里面的onUserOperCancel内容改成onBillingSuccess的内容,用移动支付点击取消就相当于支付了。刚好现在手头的测试卡是联通的,好吧,重新开始分析联通的支付过程。
第一步:游戏试玩
我们首先安装软件到手机上,在百度搜索下载apk进行安装即可。
将游戏打到第二关,我们打开Eclipse的DDMS查看Log内容。
然后在第二关中点击加速按钮,然后点重新开始,再次点击加速按钮,会弹出提示
这个时候我们看DDMS中的Log日志,然后发现相关的内容,找到关键字tag的xyf,然后我们添加一个Filter,tat设置为xyf即可
这个时候,我们先点开手机的飞行模式,看一看支付失败的效果是什么样子。Log如下
第二步:开始思考
经过了第一步的分析,我们有了大致的操作方向。
①.根据提示的内容寻找相关代码.
②.短信购买,我们直接修改短信.
③.如果能搞明白②,那么我们可以去掉短信发送过程.
第三步:开始分析
搜索‘s31:’看其出现地方的上下文,在
zhiwudazhanjiangshi2gaoqing_1\smali\com\multimode_billing_sms\ui\IIlIlIIIlIIlIIll.smali
发现有s31所在的地方:
Utf-8转码后为:
S31:用户确认选择,准备发送短信
然后在这个类里面,向上翻看
Utf-8转码后为:
S31:用户确认选择,准备发送短信
然后在这个类里面,向上翻看
S31所处在这个if语句下,也就是点击事件的判断,即确定或者取消。即我们找到了点击确定后所进行的事件。知道这个以后,我们开始寻找发送短信的入口在哪里,首先看s31的下文,因为s31的内容就是准备发送短信 ,于是我们找到下面这个类.
Lcom/multimode_billing_sms/ui/MultiModePay;
由于我们现在寻找的就是发送短信的入口,所以,我们现在这个类搜索sendtextmessage关键字,看是否能找到,能找到的话,我们的工作就很简单了。
找到这个后,豁然开朗,准备测试,我们将手机号修改发到另外一个卡上,看是否能收到短信,如果能收到,说明我们修改成功,这段代码就是付费代码。
回编译,签名,安装,测试......
效果图如下:
手机上显示购买成功,OK,到这里我们明白了联通卡的支付流程。然后我们事先第二步思考的内容.
思考②.我们可以想到,最简单的方式就是修改这里的手机号,修改短信内容,短信发送号码。
也就是sendTextMessage中的内容,修改v1(短信号码),v2(短信内容)也就是发送个查询短信到10010即可。
---------------------------------分割线--------------------------
invoke-virtual/range {v0 .. v5}, Landroid/telephony/SmsManager;->sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V
---------------------------------分割线--------------------------
在此代码上方编写
const-string v1, "10010"
const-string v3, "10010"
即可。
思考③.删除这段发送短信的代码,也就是上文提到的sendTextMessage的方法,我们查看下效果看是否可行。
删除,回编译,签名,测试,看Log
到了这里,通过Log反馈的内容,我们也可以知道已经购买成功,然后我们看游戏里面是否正常,如下图:
第四步:测试完成
好了,到了这里我们已经测试完毕,联通卡的支付已经搞定,可以开开心心地玩游戏了~
这个时候,我们继续思考,如果以后碰到的游戏还是短信付费,我们就可以直接搜索关键字sendTextMessage,然后查看上下文修改进行测试,最后删除测试即可。
原软件下载地址:
链接:http://pan.baidu.com/share/link?shareid=711418096&uk=3659465571 密码:1shi