转载:Android游戏中含有特定支付<skynetpay>内购教程

以后我每分析一个程序会尽量在论坛分析一下思路和一些独特的方法
希望大家多多支持论坛哈

适合的游戏有:
<神庙逃亡>
<地铁酷跑><水果忍者><果宝三国> 甚至那个厂商...

下面是教程,提提人气,就隐藏了,莫怪哈~

适合的特征:
反编译之后的结构中有以下文件树
<ignore_js_op>

处理的方法:
1.全局搜索“already_owned”会有两个结果:
<ignore_js_op>

点击第二个smali里面的,会定位到Lcom/skynetpay/android/payment/frame/PaymentPlugin;类中;

2.修改的方法是让程序始终走“already_owned”所在_cond流程,修改后代码如下:

[Java] 纯文本查看 复制代码

?


001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

038

039

040

041

042

043

044

045

046

047

048

049

050

051

052

053

054

055

056

057

058

059

060

061

062

063

064

065

066

067

068

069

070

071

072

073

074

075

076

077

078

079

080

081

082

083

084

085

086

087

088

089

090

091

092

093

094

095

096

097

098

099

100

101

102

103

104

105

....

 ....

 ....

 invoke-static {v1, v2}, Lcom/skynetpay/lib/e/g;->b(Ljava/lang/String;Ljava/lang/CharSequence;)V

 .line 329

 iget-boolean v1, p0, Lcom/skynetpay/android/payment/frame/PaymentPlugin;->r:Z

 goto :cond_0    /////////始终走:cond_0

 .line 330

 const-string v1, "PaymentPlugin"

 const-string v2, "\u4e0a\u4e00\u7b14\u4ea4\u6613\u672a\u5b8c\u6210\uff0c\u4e0d\u80fd\u8fdb\u884c\u4e0b\u4e00\u7b14\u4ea4\u6613!"

 invoke-static {v1, v2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

 .line 479

 :goto_0

 return-void

 ....

 ....

 ....

 invoke-direct {p0, p2, v0}, Lcom/skynetpay/android/payment/frame/PaymentPlugin;->enqueuePurchase(Ljava/lang/String;Lcom/skynetpay/lib/plugin/PluginResultHandler;)I

 move-result v5

 .line 339

 sget-boolean v1, Lcom/skynetpay/lib/config/a;->c:Z

 goto :cond_1    //始终走:cond_1

 .line 340

 const-string v1, "PaymentPlugin"

 new-instance v2, Ljava/lang/StringBuilder;

 ....

 ....

 ....

 invoke-virtual {v2, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

 move-result-object v2

 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

 move-result-object v2

 invoke-static {v1, v2}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

 .line 344

 :cond_1      //让程序走:cond_1

 invoke-virtual {p0, p2}, Lcom/skynetpay/android/payment/frame/PaymentPlugin;->findItemByIdentifier(Ljava/lang/String;)Lcom/skynetpay/android/payment/frame/bean/Item;

 move-result-object v6

 .line 345

 goto :cond_3   //////goto

 .line 346

 new-instance v1, Lcom/skynetpay/lib/plugin/PluginResult;

 sget-object v2, Lcom/skynetpay/lib/plugin/PluginResult$Status;->ERROR:Lcom/skynetpay/lib/plugin/PluginResult$Status;

 const-string v3, "payment_item_not_found"

 ....

 ....

 ....

 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

 move-result-object v2

 invoke-static {v1, v2}, Lcom/skynetpay/lib/e/g;->b(Ljava/lang/String;Ljava/lang/CharSequence;)V

 goto/16 :goto_0

 .line 356

 :cond_3      ///////////////让程序始终走:cond_3流程

 iget-boolean v1, v6, Lcom/skynetpay/android/payment/frame/bean/Item;->isOwned:Z

 /////////////////这里的那句跳转代码删除

 new-instance v1, Lcom/skynetpay/lib/plugin/PluginResult;

 sget-object v2, Lcom/skynetpay/lib/plugin/PluginResult$Status;->OK:Lcom/skynetpay/lib/plugin/PluginResult$Status;

 const-string v3, "product_already_owned"

 

     .line 358

 invoke-virtual {p0, v3}, Lcom/skynetpay/android/payment/frame/PaymentPlugin;->getString(Ljava/lang/String;)Ljava/lang/String;

 move-result-object v3

 invoke-direct {v1, v2, v3}, Lcom/skynetpay/lib/plugin/PluginResult;-><init>(Lcom/skynetpay/lib/plugin/PluginResult$Status;Ljava/lang/String;)V

 .line 359

 invoke-virtual {v1}, Lcom/skynetpay/lib/plugin/PluginResult;->getMessage()Ljava/lang/String;

 move-result-object v2

////////////////////注释这句不让toast弹出

 #invoke-virtual {p0, v2}, Lcom/skynetpay/android/payment/frame/PaymentPlugin;->makeToast(Ljava/lang/CharSequence;)V

这样达到的结果如下:
A、支持离线;
B、支持三网;
C、无支付限制;
D、点击获得型破解内购;

整个程序可能还会有“盗版”验证的字样,如下图:

为了防止它提示出来,修改的关键地址在:Lcom/s1/lib/internal/ax;->q()Landroid/app/Activity;
让它始终返回为0即可,修改后的代码为:

[Java] 纯文本查看 复制代码

?


1

2

3

4

5

6

7

8

.method public final q()Landroid/app/Activity;

    .locals 1

    .prologue

        const/4 v0, 0x0

        

    return-object v0

.end method

好了。
希望大家都自己试试,
出现什么问题,及时提问解决..

原帖地址在:http://www.pd521.com/thread-232-1-1.html
原图没了 所以就直接贴过来了..

时间: 2024-10-05 03:01:32

转载:Android游戏中含有特定支付<skynetpay>内购教程的相关文章

[转载]android工程中引入另一个工程中的资源

原文地址:android工程中引入另一个工程中的资源作者:87fayuan 在项目中可能遇到这样的问题:项目过大,于是细分为N个子模块来做,每个模块都是不同的工程.涉及到activity传数据时,可以用intent等方法来解决.但是如果涉及到要共用资源,而又不能像传统java程序那样打成jar包,比如程序中有大量自定义view,而这些自定义view都引用了的一些资源文件时,就可以用这个方法. 工程一:MyViews 代码如下: public class MyTextView extends Te

游戏中的三角学——Sprite Kit 和 Swift 教程(1)

原文链接 : Trigonometry for Games – Sprite Kit and Swift Tutorial: Part 1/2 原文作者 : Nick Lockwood 译文出自 : 开发技术前线 www.devtf.cn 译者 : kmyhy 更新 2015/04/20:升级至 Xcode 6.3 和 Swift 1.2 更新说明:这是我们广受欢迎的教程之一的第三个版本--第一个版本是 Cocos2D 的,由 Matthijs Hollemans 缩写,第二个版本由 Tony

游戏中的三角学——Sprite Kit 和 Swift 教程(2)

原文链接 : Trigonometry for Games – Sprite Kit and Swift Tutorial: Part 2/2 原文作者 : Nick Lockwood 译文出自 : 开发技术前线 www.devtf.cn 译者 : kmyhy 游戏编程中的三角学! 2015年4月20日 更新:更新到 Xcode 6.3 和 Swift 1.2. 更新说明:这是我们广受欢迎的教程之一的第三个版本--第一个版本是 Cocos2D 的,由 Matthijs Hollemans 缩写,

iOS开发支付篇-内购(IAP)

     重点总结: 1.获取内购列表(从App内读取或从自己服务器读取) 2.App Store请求可用的内购列表 3.向用户展示内购列表 4.用户选择了内购列表,再发个购买请求,收到购买完成的回调(购买完成后会把钱打给申请内购的银行卡内) 5.购买流程结束后, 向服务器发起验证凭证以及支付结果的请求 6.自己的服务器将支付结果信息返回给前端并发放虚拟产品 7.服务端的工作比较简单,分4步: 7.1.接收ios端发过来的购买凭证. 7.2.判断凭证是否已经存在或验证过,然后存储该凭证. 7.3

&lt;Android&gt;游戏中简单的WebView公告适配

公司是开发cocos2dx的游戏,需要一个简单的公告展示,一方面公司没有html5的技术力量储备,另一方面公司在手机网页上面也没有适配的经验,最后这么一个苦逼的活就被丢在了WebView上面了. <pre name="code" class="java"> /** * <meta name="viewport" content="width=640"/>html不使用 * content="w

[Android游戏开发学习笔记]View和SurfaceView

本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在Android中涉及到显示的是View类,及继承自它的SurfaceView类和SurfaceView的其他子类等. 这里先只说View和SurfaceView.SurfaceView的直接子类有GLSurfaceView和VideoView,可以看出GL和视频播放以及CAmera摄像头一般均使用Su

[转载]Android: 如何实现ScrollView中含有ListView?

原文地址:Android: 如何实现ScrollView中含有ListView?作者:mailofzxf ListView本身就含有ScrollView,因此把ListView放到ScrollView中会引起混乱(谁来响应滑动事件?)但有时又确有此需求,以实现ListView的内容连同其他内容的滚动. 要想把ListView嵌入ScrollView,有二个方法: 方法1:整体上使用一个ListView, 把不需滚动的部分放入ListView的Header或Footer中.注意: 一定要先添加He

Unity3d游戏中添加移动MM支付SDK问题处理

原地址:http://www.tuicool.com/articles/I73QFb 由于移动mm的SDK将部分资源文件放在jar包中,导致Unity无法识别,提示failed to find resource file(mmiap.xml}错误 需要做以下几步操作: -- 解压mmbilling.2.3.0.jar,提取CopyrightDeclaration.xml.mmiap.xml.VERSION文件,和mmiap文件夹 -- 拷贝mmiap文件夹到Unity项目Assets/Plugi

【转载】cocos2dx 中 Android NDK 加载动态库的问题

原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各个平台的SDK,遇到了不少问题,也从中了解了不少知识,之前一直觉得没啥好写的,毕竟做了4个月的游戏开发,也没有碰上什么真正的大问题,cocos2dx的引擎包得也很好,能让人把大部分时间都关注在游戏逻辑.效果的处理上,当然,之前的libevent还是小坑一下,但是和后来遇到的相比,也算不上什么了. 我最