欢迎使用CSDN-markdown编辑器

火柴人联盟破解记录

0、前言
听说最近markdown很流行,哈哈,蛮试试用它来写一个记录吧!

1、基本信息
包名:com.DBGame.DiabloLOL.anzhi
主入口activity:com.DBGame.DiabloLOL.SplashActivity

2、去签名校验
2.1 在反编译的项目中搜索signatures
2.2 将返回值设置为空即可。

3、内购破解

3.1用ddms locat查看支付特征

3.2 电信支付
Egame支付成功
Egame支付Cancel
破解思路:用成功方法替换失败方法,因为在支付失败的时候,程序
会调用失败的函数,我们只要将失败的函数体替换成功的即可支付成功

.method public payFailed(Ljava/util/Map;I)V
        .locals 2
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/util/Map",
            "<",
            "Ljava/lang/String;",
            "Ljava/lang/String;",
            ">;)V"
        }
    .end annotation

    .prologue
    .line 804
    .local p1, "arg0":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
    iget-object v0, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$7;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;

    # invokes: Lcom/DBGame/DiabloLOL/DiabloLOL;->setPayment()V
    invoke-static {v0}, Lcom/DBGame/DiabloLOL/DiabloLOL;->access$600(Lcom/DBGame/DiabloLOL/DiabloLOL;)V

    .line 805
    iget-object v0, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$7;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;

    iget-object v0, v0, Lcom/DBGame/DiabloLOL/DiabloLOL;->PRO_ID_Str:[Ljava/lang/String;

    iget-object v1, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$7;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;

    iget v1, v1, Lcom/DBGame/DiabloLOL/DiabloLOL;->mPayIndex:I

    aget-object v0, v0, v1

    const/4 v1, 0x1

    invoke-static {v0, v1}, Lcom/DBGame/Common/BLHelper;->purchaseComplete(Ljava/lang/String;I)V

    .line 807
    invoke-static {}, Lcom/DBGame/Common/BLHelper;->closeShieldLayer()V

    .line 808
    const-string v0, "qq"

    const-string v1, "Egame\u652f\u4ed8\u6210\u529f"

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

    .line 810
    return-void
.end method

3.3 联通支付
Unicom支付成功
Unicom支付cancel
破解思路:联通支付这里用了switch来判断,只要用成功的分支覆盖失败的分支就可以了

.method public PayResult(Ljava/lang/String;IILjava/lang/String;)V
    #略去部分代码
    :pswitch_0
    iget-object v0, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$5;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;

    # invokes: Lcom/DBGame/DiabloLOL/DiabloLOL;->setPayment()V
    invoke-static {v0}, Lcom/DBGame/DiabloLOL/DiabloLOL;->access$600(Lcom/DBGame/DiabloLOL/DiabloLOL;)V

    .line 698
    iget-object v0, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$5;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;

    iget-object v0, v0, Lcom/DBGame/DiabloLOL/DiabloLOL;->PRO_ID_Str:[Ljava/lang/String;

    iget-object v1, p0, Lcom/DBGame/DiabloLOL/DiabloLOL$5;->this$0:Lcom/DBGame/DiabloLOL/DiabloLOL;

    iget v1, v1, Lcom/DBGame/DiabloLOL/DiabloLOL;->mPayIndex:I

    aget-object v0, v0, v1

    const/4 v1, 0x1

    invoke-static {v0, v1}, Lcom/DBGame/Common/BLHelper;->purchaseComplete(Ljava/lang/String;I)V

    .line 700
    invoke-static {}, Lcom/DBGame/Common/BLHelper;->closeShieldLayer()V

    .line 702
    const-string v0, "qq"

    const-string v1, "Unicom\u652f\u4ed8\u6210\u529f"

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

    goto :goto_0

    .line 709
    :pswitch_1
    #同switch0
    :pswitch_2
    nop

    :pswitch_data_0
    .packed-switch 0x1
        :pswitch_0    #成功
        :pswitch_1    #失败
        :pswitch_2    #取消
    .end packed-switch
.end method

3.4 移动支付
购买道具:[
] 成功!

] 失败!

破解思路:也是用了switch判断,破解方式和联通的差不多。

3.5 统一接口破解
DiabloLOL.smali文件中

.method getSimType()I
    .locals 6

    .prologue
    .line 215
    const/4 v3, 0x0

    .line 216
    .local v3, "type":I
    const-string v5, "phone"

    .line 217
    invoke-virtual {p0, v5}, Lcom/DBGame/DiabloLOL/DiabloLOL;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Landroid/telephony/TelephonyManager;

    .line 218
    .local v2, "tm":Landroid/telephony/TelephonyManager;
    invoke-virtual {v2}, Landroid/telephony/TelephonyManager;->getSimOperator()Ljava/lang/String;

    move-result-object v1

    .line 219
    .local v1, "sOperator":Ljava/lang/String;
    if-eqz v1, :cond_0

    const-string v5, ""

    invoke-virtual {v1, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v5

    if-eqz v5, :cond_1

    :cond_0
    move v4, v3

    .line 244
    .end local v3    # "type":I
    .local v4, "type":I
    :goto_0
    const/4 v4,0x1
    return v4   #change  type to  0x1

    .line 222
    .end local v4    # "type":I
    .restart local v3    # "type":I
    :cond_1
    invoke-static {v1}, Ljava/lang/Integer;->valueOf(Ljava/lang/String;)Ljava/lang/Integer;

    move-result-object v5

    invoke-virtual {v5}, Ljava/lang/Integer;->intValue()I

    move-result v0

    .line 223
    .local v0, "sCode":I
    sparse-switch v0, :sswitch_data_0

    :goto_1
    move v4, v3

    .line 244
    .end local v3    # "type":I
    .restart local v4    # "type":I
    goto :goto_0

    .line 228
    .end local v4    # "type":I
    .restart local v3    # "type":I
    :sswitch_0
    const/4 v3, 0x0

    .line 229
    goto :goto_1

    .line 232
    :sswitch_1
    const/4 v3, 0x2

    .line 233
    goto :goto_1

    .line 238
    :sswitch_2
    const/4 v3, 0x1

    .line 239
    goto :goto_1

    .line 223
    :sswitch_data_0
    .sparse-switch
        0x4fb4 -> :sswitch_2
        0xb3b0 -> :sswitch_0
        0xb3b1 -> :sswitch_1
        0xb3b2 -> :sswitch_0
        0xb3b3 -> :sswitch_2
        0xb3b5 -> :sswitch_2
        0xb3b6 -> :sswitch_1
        0xb3b7 -> :sswitch_0
        0xb3bb -> :sswitch_2
        0xb3c4 -> :sswitch_0
    .end sparse-switch
.end method

上面这个函数有点长我们截取关键部位进行分析

.line 244
    .end local v3    # "type":I
    .local v4, "type":I
    :goto_0
    const/4 v4,0x1
    return v4   #change  type to  0x1

我们看一看到这里返回了v4,这里是选择支付方式的,其他地方怎么定义怎么搞,到最后还是要到这里进行return的,那么我们直接在这里设定v4=1不就得了?语法是

const/4 v4,0x1

最后附上一张效果图
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值