最近在TapTap闲逛,看到了进化之地这款游戏,TapTap上有两个进化之地,一个是在TapTap直接购买的,另外一个则是试玩版,玩到中间就会有个购买完整版。
试玩版连接:https://www.taptap.com/app/33024
闲来无事,便是下了试玩版来玩,感觉还不错,到中间的时候,就是要提示要购买完整版,看了一下界面,发现是咪咕游戏的SDK,就想着搞事情。
咪咕游戏里面有支付宝支付的选项,我选择之后,点击了取消,发现了一个Toast提示,短信发送失败,请尝试其它支付方式,
不过,当我丢入Androidkiller中去反编译的时候,忽然想起,签名不同,无法覆盖安装啊,无奈。

试玩到中间,会提示一个购买完整版,选择支付方式为支付宝,之后返回,提示“短信发送失败,请尝试其它支付方式”,一个Toast

以此为关键字找到了两处关键代码

但是不确定是哪一个,所以我们将其中的某一个的内容稍微修改一下,接着编译安装到手机上,之后便是可以确定为CallSMSPay$3这个smali文件,进到里面观察,可以发现没有我们想要的支付成功,撤退。,

继续寻找其他方法,想到咪咕游戏的破解方法,搜索onresult,发现一堆文件,根本就无从下手,没办法,只好一个个看下去,看完整个头都大了,撤退。

搜索onbilling,没有结果

搜索支付成功,看到了一个关键文件

去看了一下它的伪java代码,发现有几个if语句,猜测了一下,将bool1赋值为true,然而测试的时候以失败告终。

package com.locojoy.function;

import android.widget.Toast;
import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREInvalidObjectException;
import com.adobe.fre.FREObject;
import com.adobe.fre.FRETypeMismatchException;
import com.adobe.fre.FREWrongThreadException;
import com.locojoy.CallBackImpl;
import com.locojoy.Util;
import com.umeng.socialize.utils.Log; public class SMSPayResult
implements FREFunction
{
public FREObject call(FREContext paramFREContext, FREObject[] paramArrayOfFREObject)
{
bool3 = false;
bool4 = false;
bool5 = false;
bool2 = false;
str = "10000";
try
{
bool1 = paramArrayOfFREObject[0].getAsBool();
bool2 = bool1;
bool3 = bool1;
bool4 = bool1;
bool5 = bool1;
paramArrayOfFREObject = paramArrayOfFREObject[1].getAsString();
}
catch (FREWrongThreadException paramArrayOfFREObject)
{
for (;;)
{
bool1 = bool2;
paramArrayOfFREObject.printStackTrace();
paramArrayOfFREObject = str;
continue;
if (CallSMSPay._type == 16)
{
CallBackImpl.buyResult(paramFREContext, Boolean.valueOf(true));
}
else if (CallSMSPay._type == 30)
{
CallBackImpl.callBackMigu(paramFREContext, "30");
continue;
Toast.makeText(paramFREContext.getActivity(), "扣款失败,请尝试其它支付方式,错误码:" + paramArrayOfFREObject, 1).show();
}
}
}
catch (IllegalStateException paramArrayOfFREObject)
{
for (;;)
{
bool1 = bool3;
}
}
catch (FRETypeMismatchException paramArrayOfFREObject)
{
for (;;)
{
bool1 = bool4;
}
}
catch (FREInvalidObjectException paramArrayOfFREObject)
{
for (;;)
{
boolean bool1 = bool5;
}
}
Log.i("ANE", "result:" + bool1 + ",code:" + paramArrayOfFREObject);
if (bool1)
{
Toast.makeText(paramFREContext.getActivity(), "支付成功", 1).show();
if (CallSMSPay._type == 1)
{
CallBackImpl.recoverResult(paramFREContext, "2");
Util.stopWaiting();
return null;
}
}
}
}

Java伪代码

之后,我没有放弃,继续去查了一下咪咕的官方开发文档资料,不过没有方法下手

想了想,还是回到了CallSMSPay$3这个smali文件,既然找不到支付成功的代码,那就把这个正在支付这些代码当作支付成功的代码,修改switch语句,让其一定跳转到pswitch_2这里

因为pswitch_2即是正在支付的那个过程

之后测试的时候,奇迹发生了,成功了!!我的心情真的是爽了!!

不过,还没有完,咪咕游戏一般有较多的广告,这个我也得想办法破掉。

首先,是退出界面的时候,会弹出两次对话框,一次是正宗的对话框,(即带有确定和取消两个选项的对话框),之后选择确定之后,它还会出现一个咪咕班的对话框,上面就是有着广告,带有两个按钮,退出游戏和返回,这时候点击退出游戏才是真正的退出游戏

我去观察了一下里面的代码,发现了四个关键文件,如下图

通过代码,再结合Android开发中的对话框代码,ExitGame$1里面是点击确定按钮所要执行的代码,ExitGame$2则是点击取消按钮所要执行的代码

按照我们刚才的逻辑,我们点击确定之后,还会出现一个咪咕版的对话框(带有广告),这代码肯定是在ExitGame$1这里面,我们进去就可以看到,下面绿色的字体就是打开咪咕对话框的关键代码,我们将这些代码注释掉,之后加上红色的那一行,这一行的原java代码就是system.exit(0),这样点击确定按钮就可以直接退出了

.method public onClick(Landroid/content/DialogInterface;I)V
    .locals 2
    .param p1, "dialog"    # Landroid/content/DialogInterface;
    .param p2, "which"    # I     .prologue
    .line 45
    const/4 v0, 0x0     invoke-static {v0}, Ljava/lang/System;->exit(I)V
    #new-instance v0, Lcom/locojoy/function/ExitGame$1$1;     #invoke-direct {v0, p0}, Lcom/locojoy/function/ExitGame$1$1;-><init>(Lcom/locojoy/function/ExitGame$1;)V     .line 56
    #.local v0, "gameExitCallback":Lcn/cmgame/billing/api/GameInterface$GameExitCallback;
   # iget-object v1, p0, Lcom/locojoy/function/ExitGame$1;->val$_activity:Landroid/app/Activity;     #invoke-static {v1, v0}, Lcn/cmgame/billing/api/GameInterface;->exit(Landroid/content/Context;Lcn/cmgame/billing/api/GameInterface$GameExitCallback;)V     #.line 57
    return-void
.end method

PS:经测试发现,删除了网络权限,就可以去弹窗广告,不能确定是否会影响购买(因为是在我是在内购成功购买之后才弄的去广告,不清楚去除网络权限是否还可以启动那个购买界面)

Android破解学习之路(八)—— 进化之地内购破解的更多相关文章

  1. Android破解学习之路(一)——简单的登录破解

    最近突然心血如潮开始学了Android破解,初入门,便是将经验记录下来. 准备工作: 1.一个登录简单APP 在我们破解之前,我们需要做一个简单的登录APP,输入相应的账号与密码便是弹出登录成功的对话 ...

  2. Android破解学习之路(十四)——【Unity3D】王牌大作战破解

    一.前言 今天带来的是王牌大作战的破解教程,游戏下载的话,我是直接去TapTap官网下载的 支付宝内购破解用老套了,今天学点破解的新花样吧!! 二.支付宝内购破解 支付宝的内购破解已经很熟悉了, 直接 ...

  3. Android破解学习之路(十)—— 我们恋爱吧 三色绘恋 二次破解

    前言 好久没有写破解教程了(我不会告诉你我太懒了),找到一款恋爱游戏,像我这样的宅男只能玩玩恋爱游戏感觉一下恋爱的心动了.. 这款游戏免费试玩,但是后续章节得花6元钱购买,我怎么会有钱呢,而且身在吾爱 ...

  4. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  5. Android开发学习之路--基于vitamio的视频播放器(二)

      终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...

  6. Android开发学习之路--Android Studio cmake编译ffmpeg

      最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...

  7. Android开发学习之路--网络编程之xml、json

    一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...

  8. Android开发学习之路--Activity之初体验

    环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...

  9. Android开发学习之路--Android系统架构初探

    环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...

随机推荐

  1. 单点登录实现原理(SSO)

    简介 单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源,若用户在某个应用系统中进行注销登录,所有的应用系统都不能再直接访问保护资源,像一些知名的大型网站,如:淘 ...

  2. BOM与DOM操作

    BOM: OM-JavaScript是运行在浏览器中的,所以提供了一系列对象用于和浏览器窗口进行交互,这些对象主要包括window.document.location.navigator和screen ...

  3. WebGL绘制有宽度的线

    WebGL中有宽度的线一直都是初学者的一道门槛,因为在windows系统中底层的渲染接口都是D3D提供的,所以无论你的lineWidth设置为多少,最终绘制出来的只有一像素.即使在移动端可以设置有宽度 ...

  4. [Swift]LeetCode1 .两数之和 | Two Sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  5. [SQL]LeetCode184. 部门工资最高的员工 | Department Highest Salary

    The Employee table holds all employees. Every employee has an Id, a salary, and there is also a colu ...

  6. Java高级特性-String、StringBuffer和StringBuilder

    Java高级特性-String.StringBuffer和StringBuilder String Java语言中的字符串值都属于String类,虽然有其他方法表示字符串(如字符串数组),但Java一 ...

  7. Python内置函数(63)——super

    英文文档: super([type[, object-or-type]]) Return a proxy object that delegates method calls to a parent ...

  8. 极速搭建RTMP直播流服务器+webapp (vue) 简单实现直播效果

    在尝试使用webRTC实现webapp直播失败后,转移思路开始另外寻找可行的解决方案.在网页上尝试使用webRTC实现视频的直播与看直播,在谷歌浏览器以及safari浏览器上测试是可行的.但是基于基座 ...

  9. 使用Phalcon框架开发一个简易的博客系统

    使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...

  10. 分享一个很通用c语言的Makefile

    编写Makefile是一个苦乐交织的事情,快乐是因为从一堆需要手工逐个处理的编译过程,进步到一条命令完成,看着代码顺畅的在屏幕上滚动,编译为最终的产品,那个过程无比愉悦:而痛苦则是,写代码已经很累了, ...