用Cecil任意修改破解xap文件的.Net程序集+源码

作者:小菜 更新时间:2025-03-16 点击数:
简介:本文以破解WP的XBL(Xbox LIVE)游戏为例讲解如何使用Cecil这把尚方宝剑,让ILDasm修改IL的方法彻底成为历史。

最近在Windows Phon

【菜科解读】

本文以破解WP的XBL(Xbox LIVE)游戏为例讲解如何使用Cecil这把尚方宝剑,让ILDasm修改IL的方法彻底成为历史。

最近在Windows Phone Store的Nokia collection里面发现了《Parking Mania(疯狂停车场)》这款游戏。

试玩了一下觉得非常有趣,但只能试玩前面少数几关。

手痒痒的就开始了“盗版”部署。

由于Parking Manin是XBL游戏,其调用GamerServicesComponent组件。

但直接部署的XAP的应用无法使用此组件,从而会在使用了组件的地方会直接终止应用(DFT成就版ROM除外)。

所以我们要做的就是在整个游戏中找到所有调用了XBL服务的地方并将其去除或跳过。

但这样有个明显的缺点:XBL最重要的成就和排名功能被阉割掉了。

DFT成就版就是为了解决这一问题而产生的。

为了破解,当然是要先找到所有调用了XBL服务的地方。

直接在IL中搜索GamerServicesComponent,只有ParkingMania.ParkingManiaGame中枪。

然后在Initialize方法中前两句指令给删掉,清空HandleGameUpdateRequired、Update方法。

即下图中红框中的代码要干掉。

找到其对应的IL代码:

对应用C#代码操作的代码如下

12345678910111213141516171819202122232425262728if (type.FullName == "ParkingMania.ParkingManiaGame") { var field = type.Fields.FirstOrDefault(s => s.Name == "GamerServiceInstance"); type.Fields.Remove(field); foreach (var method in type.Methods) { if (method.Body == null) continue; var worker = method.Body.GetILProcessor(); if (method.Name == "Initialize") { var list = method.Body.Instructions.Skip(1).Take(9).ToList(); list.ForEach(i => { worker.Remove(i); }); } if (method.Name == "HandleGameUpdateRequired") { var list = method.Body.Instructions.Skip(3).Take(4).ToList(); list.ForEach(i => { worker.Remove(i); }); } if (method.Name == "Update") { var list = method.Body.Instructions.Skip(8).Take(8).ToList(); list.ForEach(i => { worker.Remove(i); }); } } }

再进一步阅读分析源码可以发现有ParkingMania.Services.Data.Achievments.XBLAService这个类。

这里面要把Event、LoadMoneyLeaderboard、LoadStarsLeaderboard、GetAchievmentsForMenu方法统统干掉。

具体方法也类似,就不重复贴代码的。

需要注意的是:离开try…catch…模块的时候需要leave.s指令、离开一个方法的时候需要ret指令。

删除的时候记得保留这些指令。

最后贴出完整的代码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596using Mono.Cecil; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CecilParkingMania { class Program { static void Main(string[] args) { var bas = @"D:\Til\Parking_0\"; var src = bas + @"ParkingMania.org.dll"; var dst = bas + @"0\ParkingMania.dll"; var resolver = new DefaultAssemblyResolver(); resolver.AddSearchDirectory(bas + @"0"); var parameters = new ReaderParameters { AssemblyResolver = resolver, ReadSymbols = false, }; var assembly = AssemblyDefinition.ReadAssembly(src, parameters); foreach (var module in assembly.Modules) { foreach (var type in module.Types) { if (type.FullName == "ParkingMania.ParkingManiaGame") { var field = type.Fields.FirstOrDefault(s => s.Name == "GamerServiceInstance"); type.Fields.Remove(field); foreach (var method in type.Methods) { if (method.Body == null) continue; var worker = method.Body.GetILProcessor(); if (method.Name == "Initialize") { var list = method.Body.Instructions.Skip(1).Take(9).ToList(); list.ForEach(i => { worker.Remove(i); }); } if (method.Name == "HandleGameUpdateRequired") { var list = method.Body.Instructions.Skip(3).Take(4).ToList(); list.ForEach(i => { worker.Remove(i); }); } if (method.Name == "Update") { var list = method.Body.Instructions.Skip(8).Take(8).ToList(); list.ForEach(i => { worker.Remove(i); }); } } } if (type.FullName == "ParkingMania.Services.Data.Achievments.XBLAService") { foreach (var method in type.Methods) { if (method.Body == null) continue; var worker = method.Body.GetILProcessor(); if (method.Name == "Event") { var list = method.Body.Instructions.Take(method.Body.Instructions.Count - 1).ToList(); list.ForEach(i => { worker.Remove(i); }); } if (method.Name == "LoadMoneyLeaderboard") { var list = method.Body.Instructions.Take(method.Body.Instructions.Count - 1).ToList(); list.ForEach(i => { worker.Remove(i); }); } if (method.Name == "LoadStarsLeaderboard") { var list = method.Body.Instructions.Take(method.Body.Instructions.Count - 1).ToList(); list.ForEach(i => { worker.Remove(i); }); } if (method.Name == "GetAchievmentsForMenu") { var list = method.Body.Instructions.Take(method.Body.Instructions.Count - 1).ToList(); list.ForEach(i => { worker.Remove(i); }); } } } } } assembly.Write(dst, new WriterParameters { WriteSymbols = false }); } } }

续,

快速代理等写IL的需求可以用Emit实现,并且是官方支持的方法;简单修改或破解IL的需求可以用ILDasm实现。

那么对我们来说,Cecil到底有什么用?

1、对代码程序集进行反编译并规范化的修改其流程,特别是对于复杂的程序集的修改非常有优势

2、按照自己的需求额外的优化代码

3、插入特殊的操作指令,例如编译时后自动完成WPF中观察者模式中的通知接口

这里也顺便说一下DFT成就版吧

首先要说一下XBL最大的优势是提供了游戏中“成就”和“排名”等服务的支持,这些服务非常有助于提高用户粘性。

@马宁 为此还弄出了OpenXLive 这个开放的SNS平台。

可以看看马宁的一篇博客《OpenXLive——开启Windows Phone 7游戏社交平台新时代》中关于Leaderboard、Achievements、Social Network的介绍。

XNA自身在Microsoft.Xna.Framework.Game.dll集成了类似的服务,并提供了开发接口。

WP7中许多XBL游戏都使用此接口。

可能是微软自身的保护策略,禁止从市场安装的应用访问XBL服务接口。

DFT成就版就是在ROM中修改了此接口,并xxxx了。

有了Cecil这个玩意,我们完全可以设计出一种机制自动识别出使用了XBL服务接口的代码并使其使用另外编写好的第三方接口。

在第三方接口中可以在本地或其他网络中提供第三方服务。

有了这样的第三方服务才能算作是“完美”的破解。

使用Cecil替换接口的调用并无什么复杂的技术(上一篇文章中就对调用的方法进行了替换),难就难在要设计出一种完善的处理机制使其可以自动的处理任何一种情况。

好了,这只是一种想法,而且是一种邪恶的想法。

本着支持正版的精神,大家还是力所能及的购买一些正版吧。

最后的最后,本文重点讲述的已破解完的xap文件放置在群1749907的群共享中,从今天算起只有30天的存储时间。

用,Cecil,任意,修改,破解,xap,文件,的,.Net

【教你如何使用U盘重装系统,轻松解决电脑问题】

想重装系统不会怎么办?菜科网一键重装系统轻松在线帮您搞定系统重装问题。

软件支持 在线重装、U盘制作、自定义重装 等多种模式。

简介:在电脑使用过程中,我们经常会遇到各种问题,而重装系统是解决电脑问题的一种有效方法。

本文将介绍如何使用U盘重装系统,帮助大家轻松解决电脑问题。

工具原料:电脑品牌型号:惠普HP EliteBook 840 G3操作系统版本:Windows 10软件版本:Windows 10安装镜像文件一、准备U盘和安装镜像文件1、首先,我们需要准备一个容量足够大的U盘,建议至少16GB以上。

2、然后,下载并准备好对应的Windows 10安装镜像文件,可以从微软官网或其他可信渠道获取。

二、制作U盘启动盘1、将U盘插入电脑,确保U盘内没有重要数据,因为制作启动盘会格式化U盘。

2、打开电脑上的磁盘管理工具,找到U盘对应的磁盘号。

3、打开命令提示符,输入以下命令:diskpartlist diskselect disk X(X为U盘对应的磁盘号)cleancreate partition primaryformat fs=ntfs quickactiveassignexit三、设置电脑启动顺序1、重启电脑,进入BIOS设置界面,不同品牌的电脑进入方式可能不同,一般是按下F2、F10、Delete键等。

2、在BIOS设置界面中,找到启动选项,将U盘设为第一启动项。

3、保存设置并退出BIOS界面。

四、重装系统1、重启电脑,此时电脑会从U盘启动。

2、按照屏幕提示,选择语言、时区等设置。

3、选择“自定义安装”选项,进入磁盘分区界面。

4、根据需要,选择磁盘分区并进行格式化。

5、选择要安装的系统版本,等待安装完成。

五、安装驱动和软件1、安装系统后,需要安装相应的驱动程序,可以从电脑品牌官网下载。

2、根据个人需求,安装常用软件和工具。

六、总结通过使用U盘重装系统,我们可以轻松解决电脑问题。

在操作过程中,需要注意备份重要数据,选择合适的系统版本,并及时安装驱动和软件。

希望本文对大家有所帮助。

标签: 注意:本站所刊载的文章均为学习交流之用,请勿用于商业用途。

对于商业使用,请联系各自版权所有者,否则法律问题自行承担。

Win7系统升级指南:全面解析升级步骤与要点 Win7系统损坏修复教程:详细步骤助你快速解决问题 【教你如何使用U盘重装系统,轻松解决电脑问题】 分类于: 回答于:2023-09-02 简介:在电脑使用过程中,我们经常会遇到各种问题,而重装系统是解决电脑问题的一种有效方法。

本文将介绍如何使用U盘重装系统,帮助大家轻松解决电脑问题。

工具原料:电脑品牌型号:惠普HP EliteBook 840 G3操作系统版本:Windows 10软件版本:Windows 10安装镜像文件一、准备U盘和安装镜像文件1、首先,我们需要准备一个容量足够大的U盘,建议至少16GB以上。

2、然后,下载并准备好对应的Windows 10安装镜像文件,可以从微软官网或其他可信渠道获取。

二、制作U盘启动盘1、将U盘插入电脑,确保U盘内没有重要数据,因为制作启动盘会格式化U盘。

2、打开电脑上的磁盘管理工具,找到U盘对应的磁盘号。

3、打开命令提示符,输入以下命令:diskpartlist diskselect disk X(X为U盘对应的磁盘号)cleancreate partition primaryformat fs=ntfs quickactiveassignexit三、设置电脑启动顺序1、重启电脑,进入BIOS设置界面,不同品牌的电脑进入方式可能不同,一般是按下F2、F10、Delete键等。

2、在BIOS设置界面中,找到启动选项,将U盘设为第一启动项。

3、保存设置并退出BIOS界面。

四、重装系统1、重启电脑,此时电脑会从U盘启动。

2、按照屏幕提示,选择语言、时区等设置。

3、选择“自定义安装”选项,进入磁盘分区界面。

4、根据需要,选择磁盘分区并进行格式化。

5、选择要安装的系统版本,等待安装完成。

五、安装驱动和软件1、安装系统后,需要安装相应的驱动程序,可以从电脑品牌官网下载。

2、根据个人需求,安装常用软件和工具。

六、总结通过使用U盘重装系统,我们可以轻松解决电脑问题。

在操作过程中,需要注意备份重要数据,选择合适的系统版本,并及时安装驱动和软件。

希望本文对大家有所帮助。

菜科网系统致力于解决 Windows 系统重装解决方案,提供高效、安全、免费的系统重装服务。

如何使用U盘安装操作系统

想重装系统不会怎么办?菜科网一键重装系统轻松在线帮您搞定系统重装问题。

软件支持 在线重装、U盘制作、自定义重装 等多种模式。

简介:今天我们将讨论一个非常实用的技巧——如何使用U盘安装操作系统。

有没有试过电脑崩溃或需要重新安装系统,但又没有安装盘?别担心,只要你有一个U盘,就能轻松搞定。

下面让我们一起来看看吧!工具原料:系统版本:Windows 10品牌型号:HP Envy 13软件版本:Rufus 3.8一、准备U盘首先,我们需要准备一个容量大于8GB的U盘。

确保U盘中没有重要数据,因为整个U盘将被格式化。

二、下载操作系统镜像在安装操作系统前,我们需要从官方网站下载操作系统的镜像文件。

这通常是一个ISO文件,包含了整个操作系统的安装程序。

打开你喜爱的浏览器,进入官方网站,找到合适的操作系统版本,并下载对应的ISO文件。

三、使用Rufus制作启动盘现在是使用Rufus的时候了!打开Rufus软件,将U盘插入电脑。

在软件界面上,选择正确的U盘,并将文件系统设置为NTFS。

接下来,点击“选择”按钮,找到之前下载的ISO文件,并选择它。

点击“开始”按钮,Rufus会将ISO文件写入U盘,并制作成一个可启动的U盘安装盘。

四、重启电脑并启动U盘现在,我们已经准备好了一个可启动的U盘。

插入U盘后,重启电脑。

在启动过程中,按下对应的按键(通常是F2、F10或Del键)进入BIOS设置。

在BIOS设置中,找到引导选项,将U盘设为启动优先级最高的设备。

保存设置并重启电脑,系统将从U盘启动。

总结:通过使用U盘安装操作系统,我们可以轻松解决电脑崩溃或重新安装系统时的问题。

只需准备一个合适的U盘,并使用Rufus制作启动盘,然后按照BIOS设置启动电脑即可。

希望这个技巧能帮助到你! 标签: 注意:本站所刊载的文章均为学习交流之用,请勿用于商业用途。

对于商业使用,请联系各自版权所有者,否则法律问题自行承担。

Win7系统升级指南:全面解析升级步骤与要点 Win7系统损坏修复教程:详细步骤助你快速解决问题 简介:今天我们将讨论一个非常实用的技巧——如何使用U盘安装操作系统。

有没有试过电脑崩溃或需要重新安装系统,但又没有安装盘?别担心,只要你有一个U盘,就能轻松搞定。

下面让我们一起来看看吧!工具原料:系统版本:Windows 10品牌型号:HP Envy 13软件版本:Rufus 3.8一、准备U盘首先,我们需要准备一个容量大于8GB的U盘。

确保U盘中没有重要数据,因为整个U盘将被格式化。

二、下载操作系统镜像在安装操作系统前,我们需要从官方网站下载操作系统的镜像文件。

这通常是一个ISO文件,包含了整个操作系统的安装程序。

打开你喜爱的浏览器,进入官方网站,找到合适的操作系统版本,并下载对应的ISO文件。

三、使用Rufus制作启动盘现在是使用Rufus的时候了!打开Rufus软件,将U盘插入电脑。

在软件界面上,选择正确的U盘,并将文件系统设置为NTFS。

接下来,点击“选择”按钮,找到之前下载的ISO文件,并选择它。

点击“开始”按钮,Rufus会将ISO文件写入U盘,并制作成一个可启动的U盘安装盘。

四、重启电脑并启动U盘现在,我们已经准备好了一个可启动的U盘。

插入U盘后,重启电脑。

在启动过程中,按下对应的按键(通常是F2、F10或Del键)进入BIOS设置。

在BIOS设置中,找到引导选项,将U盘设为启动优先级最高的设备。

保存设置并重启电脑,系统将从U盘启动。

总结:通过使用U盘安装操作系统,我们可以轻松解决电脑崩溃或重新安装系统时的问题。

只需准备一个合适的U盘,并使用Rufus制作启动盘,然后按照BIOS设置启动电脑即可。

希望这个技巧能帮助到你! 菜科网系统致力于解决 Windows 系统重装解决方案,提供高效、安全、免费的系统重装服务。

加入收藏
               

用Cecil任意修改破解xap文件的.Net程序集+源码

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录