-
-
新版windows unity扫雷游戏去广告
-
发表于:
2024-8-30 18:38
8384
-
--by 武汉科锐47期在读生
起因
怀旧一下windows 扫雷,结果发现界面大变样,变了好看了许多,但是广告也特别扎眼睛,所以就想干掉广告还世界一个清静。
目的
微软商店扫雷去广告。
经过
首先是想通过子窗口,字符串找到业务代码,但是均失败了,不得已要对程序深入分析,先通过导入表下断点找到业务代码的范围,最终发现业务代码是使用il2cpp 进行解释执行,接下来就需要研究il2cpp,之后得知unity 把c# 代码使用il2cpp继续二次编译,通过对GameAssembly.dll和global-metadata.data的反编译可以得到c#的类,方法和字符串信息,然后对应的代码地址,根据类名函数名找到相关业务代码进行patch,最终成功去掉广告。
源程序:
微软商店下载第一个
进入游戏选择任意模式可以发先下方有一个很大的广告窗口。
程序目录:
传统思路:
(1)先用spy++ 找到子窗口,处理 creatwindows。
spy++ 查看一下窗口,没有子窗口,此路不通。
(2)查找字符串,看看那里使用了相关字符串,patch 相关代码。
x64dbg 附加也找不到字符串。此路不通。
(3)上调试器对导入表下断点分析,根据导入表提示寻找业务逻辑在那里。
dll模块的导入表就是该模快用到的其他模块的功能,所以对导入表下断点可以帮我们尽快找到业务逻辑代码,减少额外信息的干扰。
接下来就是导入表下断点,从而进一步找到功能逻辑代码在哪,首先把系统dll 排除掉。
经过调试发现程序的逻辑在GameAssembly.dll 中,观察右边的符号名称,il2cpp看起来像个解释器,对高级代码进行解释执行,比如获取类,获取方法等。
继续调试发现,程序逻辑确实是不断的获取类的信息然后在执行更加验证了我的想法。以下跳转的地址就是获取类的信息然后去执行。
所以接下来就需要研究一下il2cpp的原理,有没有办法反编译为高级代码。毕竟直接分析工作量太大了。
深入分析:
(1)分析il2cpp 作用,并找到global-metadata.data。
通过一些特征字符串并查阅资料该游戏是unity开发,使用il2cpp 打包
il2cpp是一种将其他的高级语言转化为标准c++ 代码的技术。
参考4a9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2N6h3&6A6N6s2W2Q4x3X3g2U0L8W2)9J5c8X3y4F1i4K6u0r3x3U0l9I4z5g2)9J5k6e0c8Q4x3V1k6y4j5h3&6#2j5h3I4Q4x3V1k6u0e0o6u0o6f1q4m8Q4x3X3c8t1L8%4N6u0N6q4N6G2M7X3E0K6i4K6u0W2K9s2c8E0L8l9`.`.
IL2CPP 的工作原理:
使用 IL2CPP 开始构建时,Unity 会自动执行以下步骤:
将 Unity Scripting API 代码编译为常规 .NET DLL(托管程序集)。
应用托管字节码剥离。此步骤可显著减小构建的游戏大小。
将所有托管程序集转换为标准 C++ 代码。
使用本机平台编译器编译生成的 C++ 代码和 IL2CPP 的运行时部分。
将代码链接到可执行文件或 DLL,具体取决于目标平台。
接下来就是需要找到 被打包的c#代码的信息在哪,c# java 这种解释执行的语言执行时需要类的信息, 不管用什么样技术手段这里东西一定存在某个地方。
从unity 官网可以看到 存储文件是global-metadata.data
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2024-8-31 21:38
被orw编辑
,原因: