割绳子游戏破解(干货篇)
# 割绳子游戏破解(经验篇)## 0x00 前言:
###之前都是在说使用关键字进行破解,今天就来说说如果没有关键字的话应该怎么办,应该使用什么方法来进行对支付位置的寻找,以及其中应该进行怎样的破解。建议先看看之前写的两篇,并且进行一个练习,才能更好的进步。
###1.内购破解,超详细 hxxps://bbs.ichunqiu.com/thread-30248-1-1.html
###2.内购破解,加简单自定义Toast窗 hxxps://bbs.ichunqiu.com/thread-30390-1-1.html
## 0x01 环境
### 1.原版apk 地址:见附件
### 2.破解版APk 地址(方法1):见附件
## 0x02 工具
### 1.APKIDA
## 0x03 破解流程
1.游戏试玩分析
2.权限删除
3.函数查找
4.静态分析
5.修改方法
6.编译,测试
## 0x04 可以收获的干货(猪猪小本本)
1.如何进行游戏试玩分析。
2.支付的常用方法名
3.咕咪游戏支付的常用名称
4.java结合smali分析
5.<a href="#ct1">三种种基本的破解方法</a>
## 0x05 正式开始
### 1.首先是游戏的试玩分析阶段。
####1.1 打开游戏,然后点击购物车。
![](http://otufvq0ew.bkt.clouddn.com/HU@Y6R8%7DA%5D~_%7DMC%25KCFEU31.png)
####1.2 进行尝试购买
![](http://otufvq0ew.bkt.clouddn.com/$XN%5D_~4X%7BNOF%7D7@P%5BK6CYU8.png)
####1.3 取消之后发现没有任何关键字提示
### 2.把APK丢在APKIDE中反编译,把关键权限干掉。
####2.1 原因就是防止app偷偷自己调用权限。因为是通过短信以及打电话的方式来进行一个购买,所以这里删掉,它自然就没办法进行调用了。
####2.2 需要干掉的权限。
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
![](http://otufvq0ew.bkt.clouddn.com/a1245.png)
### 3.破解
####3.1 关键函数 onResult
####这个是支付方法的常用名称
![](http://otufvq0ew.bkt.clouddn.com/2%25UL_%28%5B_5%7B5T9G%7BLV%7BFB~RS.png)
####找到了很多的含有onResult的地方,我们需要判断onResult和支付相关所在的位置。
####3.2 在咕咪游戏中PayCallback是一个关键点,我们进行PayCallback搜索,找到了一个含有PayCallback的文件。
![](http://otufvq0ew.bkt.clouddn.com/FB4%25%5B%5D8G6%7D$L%25ACIS9RA%5D_O.png)
####3.3 双击点开ChinaBillingPayCallback,找到onResult,然后进行分析
![](http://otufvq0ew.bkt.clouddn.com/~ALFGNQR%7BWM3LJE6BE%256L$W.png)
####3.4 我们先对onResult 进行一个分析,结合java代码。
####查看伪java代码。
![](http://otufvq0ew.bkt.clouddn.com/V3$%5DL%5DXQ8%7D9%7DAG$6T%5B$6I%28W.png)
####我们看到i是我们重点的关注对象。返回到smali代码中查看,相对应的smali代码中就是v1
![](http://otufvq0ew.bkt.clouddn.com/UIBZQ%7D$KAUG0Q$IVS%600Y457.png)
####分析结果:这个v1是控制整个支付流程的要点,考虑的地方就要通过改变v1的值来进行破解。通过程序分析,我们得到了四种路径,总有一种路径会通向支付成功,不过这个就要进行尝试了。
####在进行尝试分析的时候,就是通过更改v1的值来进行判断,这里就不再演示。通过判断得知,只有当v1为1的时候,才可以购买成功,那我们的破解思路就是要让v1的值为1。
<div id="ct1"></div>
####3.5 第一种破解方法。
####思路:用if语句进行判断条件,那我直接把if语句删掉。
![](http://otufvq0ew.bkt.clouddn.com/0BQA%28IKXKZX%29W90%7D_6ONLSU.png)
####编译测试。记得,在编译的时候记得进行保存。
![](http://otufvq0ew.bkt.clouddn.com/%7DAEME%5BE%25043YF0MJ5A%254%25%28M.png)
####成功!
####3.6 第二种破解方法。
####思路:在判断之前,给p1赋值为1。
![](http://otufvq0ew.bkt.clouddn.com/4%60F_XO0JZ%25H%60KRIH2L%290IWH.png)
####进行编译测试。
![](http://otufvq0ew.bkt.clouddn.com/Q0UZVC0Z~%5DGLJ6%28_U0T%29BJR.png)
####成功!
####3.7 第三种破解方法。
####思路:我不管你判断是什么样子,你判断无非是改变v1的值,我直接在判断的最后结果上把v1重新赋值为1。
![](http://otufvq0ew.bkt.clouddn.com/MQZ%7D$DIRRTMGX%7DY8RB@U6WP.png)
####编译,进行调试。
####测试结果成功,我就不用图片占位置了。
##总结:
###这次是在没有关键字可以用的情况下进行破解的思路和方法。还有其他很多种破解的方法,希望我们可以一起学习,一起努力,一起分享。
>破解很简单,难的是判断寻找破解位置! --HAI_
原APK:链接:https://pan.baidu.com/s/1eRHuvbc 密码:9b13
破解后:链接:https://pan.baidu.com/s/1bo8CX35 密码:hop6 楼主大大,能把那个ChinaBillingCallBack文件分析地清楚一点吗?为什么跳过cond_0就能破解成功,那个java伪代码,我看得好久都无法理解它的逻辑。。
下面是ChinaBillingCallBack文件的java伪代码
package com.mygamez.billing;
import cn.cmgame.billing.api.GameInterface.IPayCallback;
import com.mygamez.common.Log;
public class ChinaBillingPayCallback
extends AbstractChinaBillingPayCallback
{
public ChinaBillingPayCallback(IChinaBillingListener paramIChinaBillingListener)
{
super(paramIChinaBillingListener);
}
public GameInterface.IPayCallback getCallBack(final String paramString)
{
new GameInterface.IPayCallback()
{
public void onResult(int paramAnonymousInt, String paramAnonymousString, Object paramAnonymousObject)
{
int i = paramAnonymousInt;
if (paramAnonymousInt == 1) {
i = 1;
}
for (;;)
{
BillingResult localBillingResult = new BillingResult();
localBillingResult.setResultCode(i);
localBillingResult.setBillingIndex(paramString);
localBillingResult.setReturningObject(paramAnonymousObject);
localBillingResult.setCode(paramAnonymousString);
Log.i("MySDK Billing Java", "CMCC object toString(): " + paramAnonymousObject.toString());
Log.i("MySDK Billing Java", "CMCC result: " + localBillingResult.toJSON());
ChinaBillingPayCallback.this.launchResultReceived(localBillingResult);
return;
if (paramAnonymousInt == 3) {
i = 3;
} else if (paramAnonymousInt == 2) {
i = 2;
} else if (paramAnonymousInt == 0) {
i = 0;
}
}
}
};
}
} 无聊下来玩玩 前排学习有思路的教程最赞了 真的是干货篇 看不懂但是要顶顶 学习了,感谢教程 这个要支持一下 感谢分享,学习到了。:lol 正在学习中 牛逼了 我把商城都买爆了发现没有乐趣》。。。。。。。。。。。。。。。。