呵呵被人抢了 发表于 2020-2-16 06:22

新手小白记一次失败的破解-某unity游戏

本帖最后由 呵呵被人抢了 于 2020-2-16 08:03 编辑

前言
本人完完全全的新手小白,之前从未破解过也不是这个专业的,所有过程除了参考论坛的破解教程其他全是蒙猜法,所以不接受diss哈~~
这款游戏--霸王的梦想,已经有好多破解版本了,但是官方出了最新版本的v1.1.0.0,最新版本感觉多了好多功能(也就是RMB模式),本穷B就好想破解一下,然后就有了下面的过程:

一、破解目的(最后失败了,介意的就不用看后面了哈哈哈)
目前的最新版本登录时需要联网,联网后如果是新设备需要手机注册,注册后的游戏内容新增游戏币:


二、下载apk安装包后使用常用破解工具之——ApkIDE3.5.0,AndroidKiller
2.1 ApkIDE3.5.0改之理的使用
2.1.1 首先根据网上大把的破解apk方案,先下载的ApkIDE3.5改之理最新版本,然后出现如下问题(对所有apk都出现同样问题,且改之理最新版本的安装包内还提供了一个360壳的apk样本。系统:win10 家庭中文版):错误:这是一个无效的apk文件:

2.1.2 然后仔细看了下安装教程,说是要首先安装Java SDK(可以看出来非常小白了吧( ̄▽ ̄)"),然后先安装的最新版本kit 13,安装好后发现软件提示该版本可能存在问题。。。然后据说使用kit 8 的兼容性最好,重新安装后软件没有提示啦!但是上述问题依旧存在。。。然后仔细看了下作者当时发布【1】改之理时候的JDK使用版本,发现我下载的JDK版本依旧高了点,所以最终下载并使用1.8.0_141。然后,没卵用。。。
引用【1】APKIDE改之理3.5.0少月增强版发布:https://www.52pojie.cn/thread-399571-1-1.html

2.1.3 然后又一个据说【2】:先查看Apktool是否能够正常运行,然后得到如下截图(凭感觉应该是可以正常运行):
引用【2】小白求助 APK改之理打开文件显示 错误:这是一个无效的文件:https://www.52pojie.cn/thread-639981-1-1.html

2.1.4 由于问题依旧存在,所以果断 弃用 这个软件了!
2.2 AndroidKiller的使用
2.2.1 根据论坛推荐【3】,从爱盘上下载了AndroidKiller进行使用,这次界面就很友好了:
引用【3】AndroidKiller安装、设置及使用教程4月15日网盘文件有更新:https://www.52pojie.cn/thread-726176-1-1.html

2.2.2 在反编译过程中,界面提醒“APK源码反编译失败”(后经过搜索发现,这个错误其实不影响大局)
2.2.3 然后根据论坛攻略【4】,开始查看代码,然后发现并不能检索到任何关于手机号码,验证码,注册,登陆游戏等字眼,所以我感觉2.2的问题,他可能是个问题:
引用【4】教我兄弟学Android逆向02 破解第一个Android程序:https://www.52pojie.cn/thread-650395-1-1.html

2.2.4 根据论坛大神的解决方案【3】,给AndroidKiller安装bat文件,最后成功解决“APK源码反编译失败”的问题。这里电极自定义之后,要按右键才能插入新的:

2.2.5 目前为止,依旧找不到注册啊什么的信息,但是游戏的开始界面以及反编译的内容都在不止一次的提醒我,这是用unity3D编写的游戏。所以根据推断,一定是unity将重要内容进行加密从而仅仅反编译apk包,并不能检索到有用信息。因此,进入下一环节。

三、unity加密模式初探——mono,il2cpp加密模式
3.1 mono模式
3.1.1 根据网上搜索【5】,unity游戏首先要找到Assembly-CSharp.dll文件,然后对这个文件进行类似解密的操作。此处需要用到dnSpy软件来进行对dll的解密
引用【5】Android破解学习之路(十四)——【Unity3D】王牌大作战破解:https://www.cnblogs.com/stars-one/p/10159961.html

3.1.2 但是!!我并没有找到这个文件。。。所以,重新网上搜索,发现unity的另一种模式,il2cpp。这篇文章【6】有讲述如何区分该unity游戏是用mono加密还是il2cpp加密的。
引用【6】反汇编unity il2cpp apk:https://blog.csdn.net/as467884505/article/details/103289983
3.2 il2cpp模式
3.2.1 根据帖子【7】,需要下载Il2CppDumper软件来对libil2cpp.co文件进行解密,解密后可得到一系列文件。在使用Il2CppDumper时,有一个选项是询问unity版本,这一点之前的帖子没有提到过,查询版本的方式参见【8】,我查询到的版本是2018.4。
引用【7】分享个安卓破解工具Il2CppDumper-v4.5.0:https://www.52pojie.cn/thread-940797-1-1.html
引用【8】查看apk是用哪个Unity版本打包的:https://blog.csdn.net/linxinfa/article/details/99817766


3.2.2 根据帖子【7】,这些文件中,dump是查询关键函数的文件,我使用VS2013进行打开的。script.py文件是python文件,是增加注释的作用,注释我也没看懂,所以对我来说也没啥用。

3.2.3 按照帖子【8】的步骤,接下来需要下载IDA软件,载入libil2cpp.co文件进行分析。100m的apk分析出来的结果大概有4w多个函数,大约分析了10分钟吧,如果在没有分析完成时进行搜索,是有可能报错说这个地址不存在函数。分析完成后可对分析结果进行保存为.idb文件,我的是310MB,下次使用时直接载入即可。
引用【8】记一次Unity3D dat修改过程:https://www.52pojie.cn/thread-748470-1-1.html




四、开始破解
4.1 寻找关键函数
4.1.1 此处是具体问题具体分析,我的破解想法是(这里可能是个错误分析):
         ①. 该游戏的旧版本是完全单机的游戏,所以游戏内部主程序不联网也能独立运行。游戏中具备花钱才能买的游戏币,具备网络存档,那么应该是存在向服务器端发送信息并回传
         ②. 目前游戏不联网会弹窗报错未与服务器进行连接,那么只要找到他的判断是否联网的函数,使之返回值永远是已连接,那么则应能消除这个弹窗报错。
         ③. 所以关键点使在dump里面找到有关网络,服务器方面的关键函数并修改
4.1.2 在dump上发现网络方面的函数(推测关键字webquest),以及服务器方面的函数(关键字server),然后发现实在太多太多了,我猜测了一整天吧,感觉应该从这里面的webquest.error下手。看到下述代码后,想法是,将所有的值都等于0,这样无论网络出现什么error,都能return 0。但是!!根据【9】,修改字段(TypeDefIndex: 2443)貌似是非常不现实的情况,破解还是要从修改偏移量来入手,所以,放弃修改这个。。。
引用【9】Il2CppDumper v0.4评论部分:https://www.perfare.net/759.html

4.1.3 接下来就又找了半天,发现这个函数:get error,我就单纯觉得他就很关键,所以下面,就改它了!(其实是别的函数更看不懂就这个函数好改一些,后事实证明果然这个函数并不关键)

4.2 修改函数
下述内容与帖子【8】有部分相似,所以简述并主要陈述我遇到的问题
4.2.1 在dump.cs找到要修改的函数地址后,在IDA上按g寻找地址,然后f5查看伪代码,然后根据伪代码的return result,以及if语句都是判断是否为HTTP错误或network错误,分析出正常无误时return=0

4.2.2 用ctrl+alt+k修改汇编语言,修改后用伪代码再次查看有没有改对,能力有限,我改了好多次才改成这个德行,勿喷哈哈哈
上下两个IDA-View-A文件长得不一样,原因是图4.2.1是IDA还没有全部分析完成时的样子,当全部分析完之后,当跳转到函数地址部分时,他会以流程图样子显示,但是内容都是一样的。这里面要注意,IDA改完的东西是不能撤销的,所以一定要对刚分析完的.idb文件进行保存。


4.2.3 根据修改的汇编语言位置,记住对应的二进制码修改位置,下载010 editor(爱盘上有)用二进制编辑器打开libil2cpp.co文件,并在这里面修改二进制文件。为啥要在editor上修改呢?我的猜测是IDA具备查看功能,但在IDA上面修改并不能保存在原有的libil2cpp.co文件里,因此要用别的软件来修改libil2cpp.co文件。
(这部分帖子【8】讲的很详细,我就不配图了)
4.2.4 修改好后,用androidkiller将该工程文件编译成apk文件,然后将该apk安装到蓝叠模拟器上,安装运行后发现——果然破解失败了!(蓝叠与androidkiller是可以连接在一起的,但是在配置过程中,新版蓝叠找不到开启USB调试的功能,所以连接不成功)参见【3】。

结语
破解有风险,入坑需谨慎啊!!谨以此贴纪念这几天的无用功,在多门课的coursework临近deadline的情况下,花了小一周的时间整些有的没的哈哈哈~~欢迎评分哈,常年缺吾爱币
15/02/2020



涛之雨 发表于 2020-2-16 09:10

写的很好,不过这个方法一看就是不对的2333333
get_error应该是处理错误的,说明错误已经出现了,再怎么处理那也不是原来应该跑的代码了
应该去找那里调用了这个get_error(ps:ida代码模式(非伪代码和流程模式,流程模式按空格和代码模式交换)双击get_error右边的一个调用标记应该就能跳转过去)


这个先不谈,主要靠经验(小声逼逼,本人经验也不是很多。。。。)
不过有几处不当在次指出
1.ida可以导出补丁

在如上图所示的apply patches to ****
可以在弹出窗口勾选“备份原文件”
2.patch插件可以撤销,
在改过的地方右键,如下图

找到了吧
3.il2cpp用大佬的脚本跑出来的cs是所有函数的集合,py是导入ida用的。。。
自动给函数重命名

此外补充一下,可以用dnspy导入生成DummyDll文件夹下的Assembly-CSharp.dll,方便查看关系。
仅做建议

cuiboran 发表于 2020-2-16 07:12

兮愿㈱℡ 发表于 2020-2-16 07:24

支持一楼

cuishaojie 发表于 2020-2-16 07:35

支持一下,很详细,

ms8557 发表于 2020-2-16 07:45

哈哈哈
精神可嘉
不要做坏事噢

hanxiao129 发表于 2020-2-16 07:45

xinyugm 发表于 2020-2-16 07:45

随时失败了!收获了经验!下次就可以成功了

hzmouse1688 发表于 2020-2-16 07:59

厉害,继续努力

浪花啊啊啊 发表于 2020-2-16 08:06

支持一下

poemrain 发表于 2020-2-16 08:10

页: [1] 2 3 4 5 6 7 8
查看完整版本: 新手小白记一次失败的破解-某unity游戏