破解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:} 夜步城 发表于 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
goddeath 发表于 2019-1-29 15:34
看样子好像是ak的问题,我在没改动 的情况下编译还是会出错,但是我下载的是论坛上@昨夜星辰2012大神的整 ...
可以啊。AK没有配置好,我的AK版本和你的一样。估计是apktool版本低了。这个是我的apktool
以及AK的JDK路径也要正确,这里我的JDK放在D盘,这个无所谓,只要AK里的JDK路径对应你电脑配置的JDK路径就行
给力给力 学习一下 66666666666666666666666 好,下来玩玩看 谢谢分享 学习一下
楼主,ak修改后无法编译打包怎么办?总是显示编译失败! 谢谢了 学习一下 厉害了好久没玩滑雪大冒险了