【原创】DOTNET动态调试破解Spoon,及MSI安装包文件替换技术
提到Spoon可能大家还会感到陌生,但是如果提及XenoCode那么研究过DOTNET的人应该都知道吧。Spoon的前身就是XenoCode,虽然没有了PostBuild这个混淆软件,但是虚拟化技术仍然在完善,Spoon可以让DOTNET、JAVA和Flash程序脱离Framework在电脑上独立运行。最新的spoon已经可以支持DOTNET4.0了。
网上破解Spoon的教程几乎没有,有的也只有Danny_Su直接提供的破解版本。而我最为羡慕的就是Danny提供的版本中拥有原版安装界面。经过几天的研究,终于实现了此功能,特分享给大家。
首先可以利用NETUNPACK获得DOTNET的Assembly文件,而可以利用Ollydbg来获得非托管文件。早在XenoCode时代,网上就有了视频教程。获得脱壳的文件后,我们将使用一些其他的工具来替代传统的Reflector进行追踪。
首先出场的是初级DOTNET调试软件DILE。先运行Spoon,然后使用DILE的Attach功能来附加到Spoon的进程上。
附加成功后,选择Spoon Studio中菜单中的Install License Certificate
在弹出的对话框中不填写任何东西,直接点击确定,结果Spoon系统内部出抛出异常,而此时的DILE会捕获这个异常。
DILE会停在上图的代码处,然后我们选择Call Stack Panel,就可以查看引起这个异常时哪里调用的了,然后我们双击上图中圈出的类。
进入这个Spoon.Common.Accounts.X0615e395e52a99d0::_x5d487333ced49b69类后,我们按F9设置一个断点。按F5让程序跑飞后,我们回到Spoon再次输入证书。这次我们不填空了,而是直接输入Danny以前的破解版的License
点击OK后,程序会中断在我们前面设置的断点处。
按F10单步,一路下来,并随时注意观察IL代码,灵活运行F11和F12单步调试能力,很快就可以定位到下图的类中。(具体怎么找到,就要看各位平时的调试能力了,多练习就会很快定位)
这个时候ILSPY上场了,找到Spoon.Common.Accounts.dll的类x0615e395e52a99d0和方法x22ab5dfa6f12e902名,发现这个方法是有一个重载,如下图所示只要将这个方法的返回值全部设置为true就可以了。
我们再将ILSPY的反编译的语言设置为IL,那么就可以看到这个方法的RVA位置。
打开CFF Explorer,将Spoon.Common.Accounts.dll文件拖入到该工具中,首先找到强名的相关表,发现居然没有强名验证,这样我们破解就更简单了。
在Address Converter中输入前面我们找到的RVA地址0x4a90,我们就快就可以定位Hex地址了。只要在这一段二进制中将返回值设置为true就行了,经常玩DOTNET破解的就应该知道只需要将二进制16修改为17就行了。我们找到这段IL代码中的五个16,然后全部修改为17后保存即可。
重新使用ILSPY打开,我们发现,流程已经更改了。
我们重新注册,发现注册成功了,新建一个文件试一试,也没有提示过期了。破解到此已经结束,是不是很简单。破解完毕了,这并不是我们的终极目标,为了保持原汁原味,我们决定还将此文件打包回去。
利用我们破解的程序将Spoon这么多的文件再打包成一个文件,将StartFile设置为Studio.exe,在Runtime设置中,我们设置为DOTNET3.5 SP1,打包结束后,我们获得了一个大小为121兆左右的单一Studio.exe文件。
现在我们应该想办法将这个文件替换到Spoon原版安装包中。我们需要三个程序:MsiDb.exe,Orca,CABARC.EXE。
1、使用Orca打开安装包文件。
在左侧找到Media,在右侧记下流文件名叫做#disk1.cab,这个压缩包将在第2步用到。
2、使用MsiDb来提取这个cab文件。执行cmd命令:
msidb -x disk1.cab -d Setup-9.4.1860.0.msi
获得压缩文件disk1.cab
这个时候可以直接使用winrar进行解压缩。发现有三个文件 VAStudio.exe,Studio.chm,XStudio.exe其中VAStudio.exe就是我们要替换的文件。我们将破解的Studio.exe 更名为VAStudio.exe 替换原版文件。我们在执行下面的命令来重新制作cab压缩包:
cabarc -m LZX:21 -r N disk1.cab "disk1\*"
3、cab压缩包制作好后,我们再使用MsiDb.exe将新的压缩包替换进去。首先删除原MSI文件中的disk1.cab文件流:
msidb -k disk1.cab -d Setup-9.4.1860.0.msi
再次,添加新的的disk1.cab文件:
msidb -a disk1.cab -d Setup-9.4.1860.0.msi
这时候,新的安装包就制作好了。我们测试一下,果然新的安装包既保持了原版风味,而且是破解版本。
文中提到的软件地址:
Spoon:http://www.spoon.net/Studio/
DILE:http://sourceforge.net/projects/dile/files/DILE/
CFF Explorer: http://www.ntcore.com/exsuite.php
MsiDb.exe,Orca,CABARC.EXE 可以自己Google之。
欢迎大家和我联系 chenxiaolu2012@gmail.com
【原创】DOTNET动态调试破解Spoon,及MSI安装包文件替换技术的更多相关文章
- 电脑运行msi安装包提示the error code is 2503/2502如何解决
当在电脑中运行msi安装包时,出现the error code is 2503或者2502错误提示,其实是由于没有运行的权限导致的,但是又不能右击以管理员身份运行,那么应该如何操作呢?对于这样的问题, ...
- 找回MSI安装包Win7/Win8管理员身份功能
找回MSI安装包Win7/Win8管理员身份功能 从Vista开始,系统引入了UAC用户控制功能,即普通用户运行exe软件安装程序,支持使用普通账户/管理员身份分别进行安装,但是msi安装包只支持默认 ...
- 绝对干货:自定义msi安装包的执行过程
有时候我们需要在程序中执行另一个程序的安装,这就需要我们去自定义msi安装包的执行过程. 比如我要做一个安装管理程序,可以根据用户的选择安装不同的子产品.当用户选择了三个产品时,如果分别显示这三个产品 ...
- arcgis安装msi安装包提示"在未标记为正在运行时,调用了RunScript”解决办法
安装msi安装包提示"在未标记为正在运行时,调用了RunScript”解决办法 windows/temp目录相关权限不对,右击temp文件夹,选择管理员获取所有权限.
- 在Win10中,在安装msi安装包的时候常常会出现代码为2502、2503的错误。
前言:在Win10中,在安装msi安装包的时候常常会出现代码为2502.2503的错误.其实这种错误是由于安装权限不足造成的,可以这种msi的安装包不像其他exe的安装程序,在安装包上点击“右键”之后 ...
- 自己定义msi安装包的运行过程
有时候我们须要在程序中运行还有一个程序的安装.这就须要我们去自己定义msi安装包的运行过程. 比方我要做一个安装管理程序,能够依据用户的选择安装不同的子产品.当用户选择了三个产品时,假设分别显示这三个 ...
- Elasticsearch各版本的MSI安装包和Kibana各版本的zip包(Windows)
elastic各产品下载列表页:https://www.elastic.co/cn/downloads/ 打开Elasticsearch的下载页后看到的是当前最新版本的安装界面,现在最新的版本是7.4 ...
- Navicat 12.x for MySQL最新版安装破解教程(附安装包和注册机,全网独家可用
title: "Navicat 12.x for MySQL最新版安装破解教程(附安装包和注册机,全网独家可用" categories: soft tags: soft autho ...
- 自定义msi安装包的执行过程
有时候我们需要在程序中执行另一个程序的安装,这就需要我们去自定义msi安装包的执行过程. 比如我要做一个安装管理程序,可以根据用户的选择安装不同的子产品.当用户选择了三个产品时,如果分别显示这三个产品 ...
随机推荐
- Java NIO Path
Java NIO Path Creating a Path Instance Creating an Absolute Path Creating a Relative Path Path.norma ...
- xm数据写入
reshape有两个参数: 其中,参数:cn为新的通道数,如果cn = 0,表示通道数不会改变. 参数rows为新的行数,如果rows = 0,表示行数不会改变. 注意:新的行*列必须与原来的行*列相 ...
- MySQL动态开启general_log
mysql下用以下命令查看general_log的开启状态. show global variables like '%general%'; 调整general_log位置,linux下一般是/tmp ...
- spring注解之@Lazy
今天主要从以下几方面来介绍一下@Lazy注解 @Lazy注解是什么 @Lazy注解怎么使用 1,@Lazy注解是什么 @Lazy注解用于标识bean是否需要延迟加载,源码如下: @Target({ ...
- 设计table表格,用js设计偶数行和奇数行显示不同的颜色
第一种:鼠标经过时table表格中的颜色根据奇偶行改变不同的颜色 <!DOCTYPE html> <html> <head> <meta charset=&q ...
- EF CodeFirst学习笔记004--足够聪明
将BlogTypes注释掉,但因为Blogs中定义了BlogType 这样类型的属性,所以Ef会聪明的找到BlogType类. public class BlogEntities:DbContext ...
- Ajax图片异步上传并回显
1.jsp页面 <td width="20%" class="pn-flabel pn-flabel-h"></td> <td w ...
- with as 如何工作
with as 如何工作 with如何工作? Python对with的处理还是很机智滴.基本思想就是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法 紧跟wi ...
- vue table中使用多选的问题(翻页后如何保存已选项),联动echarts图表实现流量监控
流量监控项目需求: 根据表格数据,添加多选功能,默认全选,根据已选项更新图表视图 1.表格需要多选 2.要联动图表,所以关键是要利用表格多选的触发回调函数 vue table中使用多选: 很简单,只需 ...
- Mac IntelliJ IDEA 2017(java开发集成环境)附注册码和破解教程 v2017.3.5破解版
原文:http://www.orsoon.com/Mac/155938.html 原文中含有软件下载地址 软件介绍 IntelliJ IDEA 2017 Mac激活版是Mac平台上的一款java开发集 ...