夜步城 发表于 2019-1-28 17:12

破解Unity3D游戏“滑雪大冒险”金币方法(非内购法)<详细>

本帖最后由 夜步城 于 2019-3-30 16:35 编辑

大家好,我又来了,最近感觉是不是有点高产:Dweeqw,同时感谢论坛里面所有教程贡献者。新春快乐。


一:本次破解游戏:滑雪大冒险
二:工具
    dnSpy、Android Killer(用于修改权限及签名)
三:开始教程

    本次游戏为Unity3D类型。所以内购方法可能有点不适合,所以咱们直接修改主要数据,不通过支付来获得金币。那么为什么要用dnSpy这个工具呢?论坛里也有不少的帖子关于破解Unity3D类型工具的选用,U3D有两种破解类型,其一是对libil2cpp.so 的破解修改,其二是对Assembly-CSharp.dll文件的修改,本次破解是第二种方法。
    判别方法:拿到一个游戏,咱们先用解压工具打开这个apk,因为apk也相当于一个压缩文件嘛。咱们打开后看看assets\bin\Data\Managed\Metadata\目录下,如果全部或大部分是dll文件,那么咱们就用第二种方法,也就是用dnSpy来修改。
   至于第一种方法以及工具可以参考@缄默hl的《【Unity3D】游戏Music Racer 2.4.7金币破解》https://www.52pojie.cn/thread-845377-1-1.html
下面咱们来进行修改
具体的话语,方法,我都在图片中,所以请大家好好看图哦


首先,咱们把Assembly-CSharp.dll文件复制到桌面或者你知道的地方,然后拖进dnSpy工具,根据经验,咱们来搜索get_coin,具体怎么搜索呢?像破解内购一样,可以搜索coin, getcoin, success, gold, get...等等这还得看经验{:17_1056:}。
如下图


接着如下图

用dnSpy工具的话,我们需要一些IL指令,咱们可以网上搜一下,本论坛也有相关的内容。
如果不懂IL指令也没有关系,直接把assets\bin\Data\Managed\Metadata这个目录
下的所有.dll文件复制到桌面或者其他你知道的地方,再把Assembly-CSharp.dll文件用dnSpy打开,就可以直接编辑C#语句了,这样更方便。
如果你只是单独的把Assembly-CSharp.dll文件放入dnSpy的话,修改C#会报错,不能通过编译。这里不懂的新手朋友可以在下面评论询问

接着如下图

继续


最后修改好了后,保存模块,把修改好的Assembly-CSharp.dll文件替换原来的Assembly-CSharp.dll文件。好了,接下来,咱们用Android Killer进行去除发短信,定位的权限,以及签名。

由于咱们直接修改的金币,故商店里的支付方式还是正常的,不要支付,否则就真的扣钱咯。

原版:https://pan.baidu.com/s/1cZ0Snnk9wKuhhyeO9j1w2g 提取码: sg5t

修改版:https://pan.baidu.com/s/1n33vAzZJdqwTQexQe5ohVQ 提取码: 6gdj

编辑,修改不易,希望支持

教程结束,谢谢{:301_975:}

goddeath 发表于 2019-1-29 14:02

夜步城 发表于 2019-1-29 12:37
可能是你修改错了,源码发来看看

//代码里面没找到smali代码所以就用java的填上去
//下面是我找到的自以为最为重要的关键代码,因为里面的utf-8代码出现了“支付成功”“\u652f\u4ed8\u6210\u529f”还有“9000”,“\u652f\u4ed8\u5904\u7406\u4e2d支付取消”关键标识
//:pswitch_1
    iget-object v0, p0, Lcom/heepay/plugin/activity/logic/g;->a:Lcom/heepay/plugin/activity/logic/LogicHyNotityActivity;

    iget-object v1, p0, Lcom/heepay/plugin/activity/logic/g;->a:Lcom/heepay/plugin/activity/logic/LogicHyNotityActivity;

    const-string v2, "\u652f\u4ed8\u5b9dAPP\u5524\u8d77\u6210\u529f" //支付宝唤起成功

    invoke-virtual {v1, v2}, Lcom/heepay/plugin/activity/logic/LogicHyNotityActivity;->d(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v1

    sget-object v2, Lcom/heepay/plugin/activity/logic/LogicHyNotityActivity;->v:Ljava/lang/Integer;

    invoke-virtual {v0, v1, v2}, Lcom/heepay/plugin/activity/logic/LogicHyNotityActivity;->a(Ljava/lang/String;Ljava/lang/Integer;)V

    iget-object v0, p1, Landroid/os/Message;->obj:Ljava/lang/Object;

    invoke-virtual/range {v0 .. v0}, Ljava/lang/Object;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static/range {v0 .. v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v0

#if-nez v0, :cond_5//小白欲将此处注释

    new-instance v0, Lcom/heepay/plugin/a/c;

    iget-object p1, p1, Landroid/os/Message;->obj:Ljava/lang/Object;

    invoke-virtual/range {p1 .. p1}, Ljava/lang/Object;->toString()Ljava/lang/String;

    move-result-object p1

    invoke-direct {v0, p1}, Lcom/heepay/plugin/a/c;-><init>(Ljava/lang/String;)V

    invoke-virtual/range {v0 .. v0}, Lcom/heepay/plugin/a/c;->a()Ljava/lang/String;

    move-result-object p1

    const-string v0, "9000"//重要标识

    invoke-static {p1, v0}, Landroid/text/TextUtils;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z

    move-result v0

    if-nez v0, :cond_1

    iget-object p1, p0, Lcom/heepay/plugin/activity/logic/g;->a:Lcom/heepay/plugin/activity/logic/LogicHyNotityActivity;

    const-string v0, "1"//发现这里值为1,所以我把后面的类似处都改成1了

    const-string v1, "\u652f\u4ed8\u6210\u529f"//支付成功

    :goto_1
    invoke-virtual {p1, v0, v1}, Lcom/heepay/plugin/activity/logic/LogicHyNotityActivity;->a(Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_2

    :cond_1
    const-string v0, "8000"

    invoke-static {p1, v0}, Landroid/text/TextUtils;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z

    move-result v0

    if-eqz v0, :cond_2

    iget-object p1, p0, Lcom/heepay/plugin/activity/logic/g;->a:Lcom/heepay/plugin/activity/logic/LogicHyNotityActivity;

    const-string v0, "-3"

    const-string v1, "\u652f\u4ed8\u5904\u7406\u4e2d"//支付处理中

    goto :goto_1

    :cond_2
    const-string v0, "6001"

    invoke-static {p1, v0}, Landroid/text/TextUtils;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z

    move-result v0

    if-eqz v0, :cond_3

    iget-object p1, p0, Lcom/heepay/plugin/activity/logic/g;->a:Lcom/heepay/plugin/activity/logic/LogicHyNotityActivity;

    const-string v0, "1"//这里本是0

    const-string v1, "\u652f\u4ed8\u53d6\u6d88"//支付取消

    goto :goto_1

    :cond_3
    const-string v0, "6002"

    invoke-static {p1, v0}, Landroid/text/TextUtils;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z

    move-result p1

    if-eqz p1, :cond_4

    iget-object p1, p0, Lcom/heepay/plugin/activity/logic/g;->a:Lcom/heepay/plugin/activity/logic/LogicHyNotityActivity;

    const-string v0, "1"//这里本身const-string v0, "-2"

    const-string v1, "\u7f51\u7edc\u672a\u8fde\u63a5\uff0c\u8bf7\u68c0\u67e5\u7f51\u7edc\u8bbe\u7f6e"

    goto :goto_1

    :cond_4
    iget-object p1, p0, Lcom/heepay/plugin/activity/logic/g;->a:Lcom/heepay/plugin/activity/logic/LogicHyNotityActivity;

    const-string v0, "1"//这里本是-1

    const-string v1, "\u652f\u4ed8\u5931\u8d25"//支付失败
    goto :goto_1

夜步城 发表于 2019-1-29 16:01

goddeath 发表于 2019-1-29 15:34
看样子好像是ak的问题,我在没改动 的情况下编译还是会出错,但是我下载的是论坛上@昨夜星辰2012大神的整 ...

可以啊。AK没有配置好,我的AK版本和你的一样。估计是apktool版本低了。这个是我的apktool


以及AK的JDK路径也要正确,这里我的JDK放在D盘,这个无所谓,只要AK里的JDK路径对应你电脑配置的JDK路径就行

戒色大师 发表于 2019-1-28 17:31

给力给力

风轻然雨朦胧 发表于 2019-1-28 17:39

学习一下

17660625131 发表于 2019-1-28 17:47

66666666666666666666666

biutefo 发表于 2019-1-28 17:49

好,下来玩玩看

遥远的相似性 发表于 2019-1-28 18:24

谢谢分享

fate·fanxi 发表于 2019-1-28 18:50

学习一下

goddeath 发表于 2019-1-28 19:11

楼主,ak修改后无法编译打包怎么办?总是显示编译失败!

j296849823 发表于 2019-1-28 19:50

谢谢了 学习一下

安小懒 发表于 2019-1-28 21:00

厉害了好久没玩滑雪大冒险了
页: [1] 2 3 4 5 6 7 8
查看完整版本: 破解Unity3D游戏“滑雪大冒险”金币方法(非内购法)<详细>